Debian sauber halten – Pakete mit rc Status vollständig entfernen

Debian zeichnet sich als konservative, aber sehr robuste und zuverlässige Distribution aus und war nicht zuletzt aus diesem Grund meine Wahl für einige Server-Systeme, die mittlerweile schon einige Jahre auf dem Buckel haben.

Mittlerweile wurde ein System zum dritten mal auf eine neues Major-Release gehoben und mit der Zeit sammelt sich allerhand historischer Datenmüll auf der Platte. Auch bei Desktop-Systemen mit kürzeren Release-Zyklen wie bei Ubuntu kann sich in wenigen Jahren viel Balast auftürmen.

Ein Weg, das System zu entschlacken ist das Löschen alter Konfigurationsdateien. Listet man durch dpkg -l  installierte Pakete auf, fällt der Status „rc“ bei einigen Zeilen auf. Bei rc ist das Paket nicht installiert, jedoch sind seine Konfigurationsdateien auf dem System vorhanden. Diese entstehen bei Technologiewechseln während Major-Upgrades oder durch das manuelle installieren und deinstallieren von Software.

Dieser Schlacke kann man einfach über folgende Kommandos untersuchen (Output ist gleich, rein aus Lernzwecken sind beide aufgeführt):

dpkg -l | grep ^rc | tr -s " " | cut -d " " -f 2
dpkg -l | grep ^rc | awk '{print $2}'

Beispiel Output:

dpkg -l | grep ^rc | awk '{print $2}'
automysqlbackup
libbind9-50
libdatrie0
libdevmapper1.02
libdns55

Es ist sehr wichtig, die Pakete manuell zu prüfen! Es kann auch false-positives durch z.B. manuell installierte Pakete geben, die nicht aus dem Repository installiert wurden.

Ist man sich seiner Sache sicher, können die Pakete bzw. ihre Konfigurationsdateien vollständig entfernt werden:

apt-get purge `dpkg -l | grep ^rc | awk '{print $2}'`

Beispiel Output:

apt-get purge `dpkg -l | grep ^rc | awk '{print $2}'`
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
automysqlbackup* libbind9-50* libdatrie0* libdevmapper1.02* libdns55*

Bootstrap zusammen mit Joomla 2.5/Mootools nutzen – Dropdown Bug

Bootstrap ist ein sehr beliebtes CSS Framework von Twitter. Joomla ist ein CMS, welches ich aufgrund seiner Einfachheit und Vielseitigkeit gerne verwende. Es gibt derzeit einen Bug zwischen Bootstrap und Mootools. Mootools ist ein Javascript Framework (der etwas angestaubten Generation) welches von Joomla zwingend erfordert wird und sehr tief im System verankert wird. Bootstrap setzt auf jQuery.

Will man Bootstrap in Joomla nutzen, ergeben sich beispielsweise bei Dropdown-effekten Bugs. Dies geschieht, weil Bootstrap die hide(); Funktion von Mootools triggert. An einem Fix wird gerade gearbeitet, bis dahin kann folgender Workaround verwendet werden:

in der Bootstrap.js Datei die folgende Zeile:

this.transition('removeClass', $.Event('hide'), 'hidden')

ersetzen durch:

this.transition('removeClass', $.Event('hideme'), 'hidden')

Mehr Informationen gibt es hier: https://github.com/twitter/bootstrap/issues/3436

Schütze deinen Browser!

Dieser Blogeintrag entsteht aus einer Mail an Freunde und Familie, denen ich dringende Maßnahmen vorschlug, um ihre Sicherheit im Web zu erhöhen. Grund sind die gravierenden Sicherheitslücken in Java, Flash und anderen Technologien, die unsere PCs und Macs extrem verwundbar machen.

Betrifft das auch Dich?

Ja, denn egal ob du Linux, Mac oder Windows verwendest: Java und Flash sind auf fast allen Systemen installiert! Weiterhin betrifft es jeden Browser, was zur Folge hat, dass man durch bloßes Ansurfen einer Webseite infiziert werden kann.

Braucht man die Plugins von Flash, Java und Co?

Bis zum heutigen Tag muss man leider noch sagen: Ja. Auch wenn in Zukunft HTML5 die Plugins von heute Schritt für Schritt ablösen wird, ist gerade Flash noch häufig im Einsatz.

Wie kannst du dich schützen?

Kriminelle könnne durch prärarierte Inhalte, welche die Sicherheitslücken unserer Browser-Plugins ausnutzen, auf sehr effektive Weise unseren Computer infizieren. Man kann sich schützen, indem man das automatisierte Laden der Plugins verhindert – der sogennanten Click-to-Play Funktion.

Das bedeutet, dass man bei Youtube z.B. zuerst das Video mit einem Klick „aktivieren“ muss. Das ist nicht nur benutzerfreundlich und sicher, sondern kann auch die Ladegeschwindigkeit von Seiten erhöhen.

Click-to-Play für deinen Browser

Für Firefox

Firefox wird in einer zukünftigen Version Click-to-Play standardmäßig aktivieren. Bis dahin reicht es die folgende Erweiterung zu installieren: https://addons.mozilla.org/de/firefox/addon/click-to-play/

Für Chrome

Bei Chrome muss man in die Einstellungen, dann unten auf Erweiterte Einstellungen anzeigen… und dann bei Datenschutz auf Inhaltseinstellungen klicken. Bei der Überschrift „Plug-ins“ wählt man Click-to-Play.

Für Safari

Für Safari existiert eine Erweiterung namen ClicktoPlugin, welche Click-to-Play aktiviert: http://www.chip.de/downloads/ClickToPlugin-fuer-Safari_52050502.html

Für Internet Explorer, Opera und Co

Ein englischsprachiger Artikel befasst sich auch mit diesem Thema und kann für weitere Informationen hier erreicher werden.

Youtube mit aktiviertem Click to Play

Navigieren mit Javascript/Ajax

Auf einer herkömmlichen Webseite navigiert man mit Links, im speziellen mit HTML <a> Tags. Diese werden in der Adressleiste des Browsers angezeigt und beim Springen zu einer anderen Seite aktualisiert. Basiert die Webseite jedoch auf Ajax bzw. setzt diese die Navigation mit Javascript um, wird aufgrund des fehlenden Seiten Refreshs die Adresszeile nicht aktualisiert. Es ist somit weder möglich, den Zurück Button des Browsers zu nutzen noch den Seitenlink zu versenden sodass der Empfänger die gleiche Seite angezeigt bekommt wie der Sender.

Die Lösung des Problems: Navigation mit Hashtag und der HTML5 History sowie die hashchange HTML4 Funktion.

Durch HTML5 wird es möglich, die Browser History zu verändern. Damit dies nicht bei jedem vergebenen <a> Tag einer Webseite getriggert werden muss, gibt es Bibliotheken die dem Webentwickler unter die Arme greifen. Somit wird es möglich, einfach ein <a href=“#neueSeite“> zu tippen, welches dann automatisch auf die richtige Stelle verweist. Unter HTML4 kann dies mit der hashchange Funktion vollzogen werden. Die genaue Verwendung hängt von der verwendeten Bibliothek ab, mir sind derzeit folgende Möglichkeiten bekannt:

sowie

Ich persönlich habe mangels Kenntnis von history.js bis jetzt mit jQuery bbq gearbeitet. Dieses funktionierte in meinem Fall sehr zuverlässig und war einfach zu implementieren. Es scheint jedoch, dass history.js einige Vorteile bietet. Da die HTML4 Hashchange Funktion deprecated ist, sollte wohl History.js verwendet werden.

Beachten sollte man dabei jedoch, dass Crawler wie der Google Bot oder Tools für den barrierefreien Zugriff derzeit kein Javascript interpretieren. Im Zuge der Suchmaschinenoptimierung und der Barrierefreiheit sollte man seine Webseite also auch immer auf volle Navigierbarkeit ohne Javascript prüfen.

Tipp: Sollte man nur eine sehr simple Seite erstellen wollen, auf der der statische Content nach und nach angezeigt wird, kann man ebenso die angesprochenen Libraries zur Navigation verwenden. Bei kleinen Projekten wie z.b. Visitenkarten muss es nicht immer Ajax sein! 😉

Diese Funktion habe ich bei der Erstellung einer Einladungswebseite für ein Jahrgangstreffen verwendet, eine Demo findet sich hier.

Consumer Clouds – IT aus der Steckdose für alle?

Meine Seminararbeit beschäftigt sich mit der Frage „Welche Cloud-Dienste nutzen Privatanwender?“. Welche Software im klassischem Sinne wurde mittlerweile durch Cloud-Services abgelöst? Die Zielgruppe: IT-Abteilungen, die sich mit einer zunehmenden Durchdringung von Consumer-IT im Unternehmen konfrontiert sehen sowie Software Anbieter, die sich fragen, ob die nächste Version ihres Produktes als Cloud-Service realisiert werden sollte.

Die Arbeit steht zier zum Download bereit: Seminararbeit Consumer Clouds

WordPress Security – das neue biogoo.org basiert auf Drupal

Nachdem Biogoo.org zum zweiten mal Ziel einer (automatisierten?) Hackerattacke wurde, habe ich mich dazu entschlossen das System zu wechseln. Früher verwendeten wir WordPress in Kombination mit einem gekauften Theme von elegantthemes.com. Leider scheint diese Kombination aus WordPress und Elegantthemes sehr anfällig für Hackerattacken zu sein.
Das neue System besteht nun aus Drupal und einem neuem (free)Theme. Ich hoffe das wir damit die Sicherheitsprobleme besser in den Griff bekommen. Ich werde versuchen, bald einen Blogpost über die Art des Angriffs zu veröffentlichen und werde dann auch erklären, warum ich Drupal für sicherer halte. Was mir schonmal sehr gut gefällt: Drupal schickt automatisch eine E-Mail, wenn es ein Sicherheitsupdate findet.

Wir werden versuchen, den Content so gut wie möglich zu migrieren. Bis dahin kann aber noch etwas Zeit vergehen.

Ubuntu / Kubuntu als Wlan Access Point nutzen

Wenn man die Internetverbindung eines PCs mit Ubuntu/Kubuntu Linux weitergeben möchte gibt es dafür eine sehr einfache Möglichkeit über den Netzwerkmanager. Einsatzszenario ist beispielsweise, dass an einem Ort nur Internet per Kabel zur Verfügung steht, man aber das Smartphone per Wlan zum Internet verbinden möchte.

Diese Anleitung bezieht sich speziell auf Kubuntu und KDE, möglicherweise funktioniert es mit Ubuntu ganz ähnlich. Zuerst klickt man mit der rechten Maustaste auf das Netzwerksymbol und wählt „Einstellungen für Netzwerkverwaltung“ Im Reiter „Drahtlos“ wählt man rechts „Hinzufügen“ und dort den Menüpunkt „Gemeinsam“.

Im sich öffnenden Fenster muss dann noch der Verbindungsname un die SSID eingestellt werden. Bei der SSID handelt es sich um den späteren Namen des Netzwerks, unter dem Verbindungsnamen wird die Verbindung in KDE angezeigt. Es empfiehlt sich also, den gleichen Namen zu verwenden. Im Reiter Drahtlos-Sicherheit sollte unbedingt eine Sicherheitseinstellung und ein Passwort gewählt werden, damit das Netzwerk nicht für jeden zugänglich ist. Über den Button „OK“ bestätigt legt man die Verbindung an.

Nun muss man noch per klick auf das Netzwerk Symbol die eben angelegte Verbindung aktivieren, das geschieht mit einem Klick darauf (die Verbindung wird kurz kursiv dargestellt). Fertig! Nun kann man das Netzwerk mit dem Smartphone finden und damit die Internetverbindung des PCs mitnutzen.

PowerLab Statusupdate Juni 2012

PowerLab Dashboard

PowerLab is alive! Wir führen gerade ein Usability-Experiment im Rahmen einer Universitätsveranstaltung durch – Selbstverständlich ist PowerLab unser Untersuchungsobjekt. Es werden Concurrent-Think-Aloud Tests durchgeführt, in denen wir unerfahrene Probanden das Anmeldeformular ausfüllen lassen sowie Retrospective-Think-Aloud Tests mit erfahrenen Anwendern im PowerLab Backend. Du möchstest mehr über PowerLab erfahren? Besuche http://www.powerlab.eu oder schreibe uns eine Mail 

Vergleiche Strukturen zwischen MySQL Datenbanken

Möchte man die ALTER Statements zweier Datenbank-Revisionen automatisch generieren lassen, bietet sich das Commandline Tool mysqldiff an. Damit kann man auf einfache Art und Weise die benötigten DDL-Statements zwischen Produktiv-Version und aktuellem Development-Snapshot erstellen.

Unter Ubuntu installiert man das in Perl geschriebene Programm am einfachsten via CPAN:

> sudo cpan
cpan[1]> install MySQL::Diff

Nach der Installation führt man den Vergleich durch

> mysqldiff -u root -p PASS powerlab_latest_stable powerlab_dev

In meinem Beispiel möchte ich die Änderungen der Datenbank powerlab_latest_stable hin zu powerlab_dev bekommen.

Der Output sieht dabei wie folgt aus:

ALTER TABLE lab_event_tags ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
ALTER TABLE lab_event_tags_mapping ENGINE=InnoDB DEFAULT CHARSET=utf8; # was ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE lab_person DROP COLUMN last_participation; # was varchar(30) DEFAULT NULL
ALTER TABLE lab_person CHANGE COLUMN comment comment text; # was varchar(45) DEFAULT NULL
ALTER TABLE lab_person ADD COLUMN is_deleted tinyint(1) DEFAULT NULL;
ALTER TABLE lab_person ENGINE=InnoDB AUTO_INCREMENT=3113 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=3112 DEFAULT CHARSET=utf8
ALTER TABLE lab_person_values ENGINE=InnoDB AUTO_INCREMENT=42424 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=42390 DEFAULT CHARSET=utf8

Nach php5-intl Installtion: Unable to load dynamic library idn.so

Nach einer Installation von php5-intl auf einem Debian 6.0 Host erschien regelmäßig die folgende Fehlermeldung:

PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/lib/php5/20090626/idn.so' - /usr/lib/php5/20090626/idn.so:
cannot open shared object file: No such file or directory in Unknown on line 0

Negative Auswirkungen hat diese Meldung zunächst keine, aber es ist eine Fehlkonfiguration die zeitnah behoben werden sollte:

rm /etc/php5/conf.d/idn.ini

php5-idn wird bei der Installation von php5-intl deinstalliert, jedoch wird fälschlicherweise weiterhin versucht idn zu laden.

Das php5-Modul intl stellt Internationalisierungsfunktionen zur Verfügung und wird von Frameworks wie Symfony2 oder Web-Apps wie Roundcubemail verwendet.