Kategoriearchive: Snippets

„Mother Of All Ad-Blocking“

Im XDA-Forum gibt es die „Mother Of All Ad-Blocking“ für Android-Geräte. Hierbei wird eine individuelle „hosts“-Datei installiert und so Werbung blockiert.
Ob für den lokalen DNS-Server, den Desktop oder das Smartphone: Werbung blockieren tut in der heutigen Zeit immer gut, denn es spart Bandbreite und, ganz wichtig, schont die Nerven.

Changelog

  • 16.01.2014 – Cronjob ersetzt, da vorher nicht auf allen Debian/Ubuntu-Varianten gleichermaßen funktionsfähig

Die angebotene Liste ist eine große Zusammenfassung aus verschiedenen Quellen, weshalb ich sie lokal auf einem DNS-Server installieren möchte. Als Nameserver-Forwarder benutze ich „dnsmasq“, welcher, sofern nicht anders konfiguriert, die Einträge aus der „hosts“-Datei respektiert (=kein „no-hosts“ in der Konfiguration).
Der Download erfolgt via „http://adblock.mahakala.is“. Mit „wget“ und „curl“ funktioniert der Download nicht direkt, weshalb „Mozilla/5.0“ als User-Agent gesetzt wird. Außerdem hat die Liste eine eigene Kopfzeile, die weg geschnitten werden muss:

# AD BLOCKING by: Jake Thomas
# Last Update on: 07 January 2014
# Domain Block Count: 339285
# contact me on XDA: http://forum.xda-developers.com/member.php?u=4877037
# Copyright (c) 2007-2014, Jake Thomas (BSDgeek_Jake) (thomasj-gnugpl@usa.net)

# DEFAULT
127.0.0.1 localhost
127.0.0.1 localhost.localdomain
255.255.255.255 broadcasthost
127.0.0.1 android

Vorhandene/Eigene Einträge möchte ich zudem beibehalten. Der Einfachheit halber verwende ich „curl“ für den Download, dieses kann vorab installiert werden. Für Debian und Derivate:

sudo apt-get install curl

Der Befehl, um die Liste einmalig anzuhängen (als root):

curl -s -A "Mozilla/5.0" http://adblock.mahakala.is | \
sed -e '1,/android/d' >> /etc/hosts

Zum aktualisieren der Liste (ebenfalls als root):
ACHTUNG: Das Aktualisieren funktioniert nur, wenn die Liste bereits einmal angehängt wurde, da „sed“ nach „BLOCKING STARTS“ sucht.

sed -n "/BLOCKING STARTS/q;p" /etc/hosts >> /etc/hosts.new && curl -s -A "Mozilla/5.0" http://adblock.mahakala.is | sed -e "1,/android/d" >> /etc/hosts.new && mv /etc/hosts.new /etc/hosts && sed -i '/^$/d' /etc/hosts

Und als Cronjob jeden Tag aktualisieren:

sudo crontab -e

Einfügen:

0 0 */1 * * PATH=/usr/bin:/bin sed -n "/BLOCKING STARTS/q;p" /etc/hosts >> /etc/hosts.new && curl -s -A "Mozilla/5.0" http://adblock.mahakala.is | sed -e "1,/android/d" >> /etc/hosts.new && mv /etc/hosts.new /etc/hosts && sed -i '/^$/d' /etc/hosts

Das schöne ist, dass zusätzlich viel In-App Werbung blockiert wird, wenn das Smartphone im WLAN des eigenen DNS-Servers steht. Aber auch so, auf dem Desktop, ist es eine sehr umfangreiche Liste.

Optional: Alternative als dnsmasq-Konfigurationsdatei

Via „yoyo.org“ ist es möglich, eine etwas weniger umfangreiche, dennoch starke Liste, komplett im Konfigurations-Format des „dnsmasq“ herunterzuladen.
Einmalig herunterladen und aktivieren:

sudo wget -O /etc/dnsmasq.d/adblock.conf "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=dnsmasq&showintro=0&mimetype=plaintext" && sudo service dnsmasq restart

Als Cronjob jeden Tag aktualisieren:

sudo crontab -e

Einfügen:

0 0 */1 * * wget -O /etc/dnsmasq.d/adblock.conf "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=dnsmasq&showintro=0&mimetype=plaintext" && service dnsmasq restart

Anmerkung: Ich fühle mich verpflichtet zu sagen, dass Entwickler guter Software immer unterstützt werden sollten. Wer keine Werbung will, der kauft die „Pro/Ultra/Sonstwas“-Version von XY.
Leider gibt es auch dubiose Entwickler, die trotz Bezahlung noch vereinzelt Werbung einblenden, wofür ich kein Verständnis habe.

Command-Line: Mail mit Anhang

Ein kleines Snippet, um Mails mit Anhang via „mail“-Befehl zu versenden.
Unter Debian und Ubuntu das Paket „sharutils“ installieren. Hiermit können Dateien für den Mail-Versand vorbereit werden:

sudo apt-get install sharutils

Das Format lautet: uuencode lokale_datei.any empfaenger_dateiname.any.
Die lokale Datei kann also unter anderem Namen versendet werden.

Hier ein paar Beispiele, angefangen mit dem einfachen Versenden einer Datei:

uuencode datei.jpeg datei.jpeg | mail empfaenger@domain.tld

Mit Nachricht – alternativ: „echo“:

(cat Nachricht; uuencode datei.jpeg datei.jpeg) | mail empfaenger@domain.tld

Mit Absender und Betreff:

(cat Nachricht; uuencode datei.jpeg datei.jpeg) | mail -a "From: Absendername " -s "Betreff" empfaenger@domain.tld

Mit Absender, Betreff und UTF-8 Encoding („multiple header“):

(cat Nachricht; uuencode datei.jpeg datei.jpeg) | mail -a "`echo -e "Charset: UTF-8\nFrom: Absendername "`" -s "Betreff" empfaenger@domain.tld

Alternativen

Heute, dem 15.01.2014, möchte ich noch moderne Alternativen ergänzen, angefangen mit „mutt“, welches MIME-konform ist:

sudo apt-get install mutt

Beispiel mit Nachricht und Betreff:

 echo "Nachricht" | mutt -s "Betreff" empfaenger@domain.tld -a datei.jpeg

Zweite Alternative mit „uuenview“ – Kann quasi alles, was „uuencode“ bietet, ist jedoch wie „mutt“ MIME-konform:

sudo apt-get install uudeview

Beispiel mit Nachricht und Betreff („-a“ für Eingabe der Nachricht via „stdin“:

cat Nachricht | uuenview -b datei.jpeg -m empfaenger@domain.tld -a

Debian: Non-interactive upgrade script

Oft nach gefragt, hier beantwortet: Im neuen Debian Handbook wird ein „non-interactive upgrade script“ wie folgt vorgeschlagen:

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
yes '' | apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

„force-confold“ und „force-confdef“ kombiniert gibt durchaus Sinn. So wird ein Hänger beim Upgrade definitiv verhindert. Es wird stets die aktuelle Konfiguration behalten, gibt es keine, werden die Standardwerte verwendet.

„SHELL“ und „PATH“ für alle Cronjobs definieren

Ein kleiner Hinweis im Bezug auf einen weiteren Beitrag von heute.

Wer einige Scripts via Cronjob ausführt, wird wahrscheinlich – wie ich – die Shell sowie den „Path“ als Variable im Script selber definieren. Sollen aber Bash-spezifische Befehle in einer Zeile ausgeführt werden, bleibt „eigentlich“ kein Platz für das Definieren von Shell und „Path“.

Abhilfe verschafft man sich durch das definieren im Kopf der Cron-Datei. Wie gewohnt „crontab -e“ ausführen, um einen Cronjob anzulegen:

crontab -e

Ganz oben nun Folgendes ergänzen:

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11

Unten wie gewohnt die Cronjobs eintragen. Ein Bespiel für einen Cronjob, der ohne obige Definition nicht funktionieren würde:

0 10 * * * /home/X/script.sh "`echo -e "Zeile eins\nZeile zwei"`"

Die gesamte Cron-Datei (z.B. „/var/spool/cron/crontabs/user“):

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.txt installed on Sat Dec 21 18:22:45 2013)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
0 10 * * * /home/X/script.sh "`echo -e "Zeile eins\nZeile zwei"`"

Ladezeit verbessern: jQuery im Footer von WordPress laden

Ein kleines Snippet, um jQuery im Footer von WordPress zu laden. Daher ohne großes Getippe:

Gehört in die Datei „functions.php“ des jeweiligen Themes, z.B. „/wordpress/wp-content/themes/custom-1/functions.php“.

function evolution_clean_head() {
 
	remove_action('wp_head', 'wp_print_scripts'); 
	remove_action('wp_head', 'wp_print_head_scripts', 9); 
	remove_action('wp_head', 'wp_enqueue_scripts', 1); 
}
 
add_action( 'wp_enqueue_scripts', 'evolution_clean_head' );

Weiterlesen