Linux-Magazin Computer-Logbuch (Vorschau)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
02/14<br />
Für Tüftler:<br />
Winterrätsel S. 80<br />
DIE ZEITSCHRIFT FÜR LINUX-PROFESSIONALS<br />
Android (halbwegs)<br />
sicher benutzen<br />
Admintools, Kommandozeilen-Tricks,<br />
Rooten, forensisch durchleuchten S. 66<br />
Klarheit: C++11<br />
Automatische Typ ab leitung<br />
und Range-basier te For-<br />
Schleifen S. 104<br />
Angular.js<br />
Angesagtes Javascript-<br />
Framework, das Ansichten<br />
und Daten trennt S. 100<br />
<strong>Computer</strong>-<strong>Logbuch</strong><br />
Warp-mäßig gut dokumentieren,<br />
extra hieren, archivieren und<br />
präsentieren<br />
■ Software für den Helpdesk S. 22<br />
■ PDF-Inhalte extrahieren und editieren S. 28<br />
■ Selbst gebaute IRC-Bots geben Rat S. 34<br />
■ Für Streitigkeiten: Eigene Websites<br />
regelmäßig archivieren S. 40<br />
■ Stilvoll animierte HTML-5-Präsentationen S. 46<br />
■ Leichter als gedacht: PDFs, E-Books und<br />
Manpages mit Docbook S. 50<br />
■ Einen Warenkorb geben: Onlineshop-<br />
Software im Vergleichstest S. 56<br />
■ Open-Stack-Deploy ment mit Triple O S. 76<br />
Am Raspberry Pi fast ein Kinderspiel: I 2 C-Kernel-Subsystem verstehen und nutzen S. 90<br />
www.linux-magazin.de<br />
Deutschland Österreich Schweiz Benelux Spanien Italien<br />
4 6,40 4 7,05 sfr 12,80 4 7,50 4 8,30 4 8,30<br />
4 192587 306401 02
Smarter Markt<br />
Login 02/2014<br />
Editorial<br />
Auf der Le-Web-Konferenz in Paris hat Mark Shuttleworth dem Branchenportal<br />
Cnet erzählt, Canonical habe nun einen Partner für die Konstruktion eines Smartphones<br />
mit Ubuntu Touch gefunden. Aus dem Herstellernamen machte der Canonical-Gründer<br />
aber ein Geheimnis. Die letzten Sommer gestartete Crowdfunding-<br />
Kampagne für Edge, ein in Eigenregie entwickeltes Ubuntu-Phone, erreichte das<br />
gesetzte Ziel nicht. Die Mozilla Corporation ist mit Firefox OS in gleicher Mission<br />
unterwegs, aber schon weiter, da sie Alcatel und ZTE ins Boot gezerrt haben.<br />
Angesichts der Dominanz von Android- und I-OS-Geräten im Markt sowie Microsofts<br />
ebenso kostenintensiven wie verzweifelten Versuchen, zu dieser Gruppe<br />
aufzuschließen, wirken Canonicals und Mozillas Pläne verwegen. In der Hauptsache<br />
jedoch steht und fällt jede Plattform mit der Bereitschaft der Apps entwickelnden<br />
Firmen, ihre Software dafür anzubieten. Canonical will es technisch angeblich Jan Kleinert, Chefredakteur<br />
einfach machen, Android-Apps auf Ubuntu Touch zu migrieren. Der Blick zurück<br />
ist zudem geeignet, Canonical und Mozilla zu entmutigen: Ähnlich ambitionierte Mobilalternativen, also Maemo,<br />
Moblin, Meego, Tizen, …, brachten lediglich ein paar Entwickler- und Demogeräte zustande, die Entwickler auf<br />
<strong>Linux</strong>-Messen wie Monstranzen vor sich her trugen.<br />
Für Canonicals und Mozillas Chancen hingegen spricht, dass Anwender Smartphones in viel kürzeren Abständen<br />
gegen Neugeräte austauschen als dies bei PCs und Notebooks üblich ist, was Neulingen im Markt ein bisschen<br />
Luft verschafft. Dass beim Datenschutz Google, Apple und Microsoft nicht unbedingt die ersten Adressen sind,<br />
könnte zudem mit der Zeit ins Bewusstsein der Konsumenten vordringen. Ob Canonical in dieser Disziplin den<br />
Musterknabe geben wird, muss sich erst erweisen.<br />
Generell täte beim Thema Sicherheit mehr Marktdruck gut: Im Moment muss der Konsument wählen zwischen<br />
einer ganz und gar proprietären Plattform (Apple) nebst App-Store, dessen Regeln denen einer Justizvollzugsanstalt<br />
nicht unähnlich sind, und einem <strong>Linux</strong>-System, dem Google alle über 20 Jahre bewährten Zugriffmechanismen<br />
ausgetrieben hat. Laut Kaspersky Lab attackierte 98 Prozent aller mobiler Malware 2013 das Betriebssystem<br />
Android. Für das Ansehen von <strong>Linux</strong> allgemein ist dies natürlich nicht förderlich.<br />
Dabei stellt technisch nicht der Android-Kernel das Problem dar, sondern die Apps. Von denen ist offenbar ein<br />
erheblicher Teil gleich als Spy- oder Malware programmiert. Von den gut gemeinten Apps fallen welche auf die<br />
Tricks werbefinanzierter SDKs à la Widdit herein, wie Bitdefender gerade herausgefunden hat. Dass die Kette<br />
der Schreckensmeldungen von allein abreißt, lässt sich ausschließen.<br />
Letzlich kann man wohl die liberalen Nutzungsbedingungen von Google Play für die Situation verantwortlich machen.<br />
Auf die inhaltliche Überprüfung jeder einzelnen App verzichtet der Konzern bei seinem Android-Repository,<br />
seit Februar 2012 findet nur ein Check auf Malware statt. Das Prinzip der Freizügigkeit hebt sich sympathisch<br />
von Apples Gebaren ab und erinnert an die Praxis der Open-Source-Community.<br />
Wenn dem so wäre, müssten normale <strong>Linux</strong>-PCs und ‐Server voll von Schad- und Nonsens-Code sein. Sind sie aber<br />
nicht. Das liegt nicht an der geringen Marktbedeutung, wie Windows-Freunde in solchen Fällen gern sagen, sondern<br />
an der Arbeit der Maintainer bei den <strong>Linux</strong>-Distributionen. Jeder von denen steht nämlich bei der Auswahl<br />
der Software und beim Begutachten des Codes als Person dafür ein, dass Debian, Fedora, Open Suse und Co. an<br />
ihre Anwender keine Wanzen ausliefern. Googles gefühlte Liberalität dagegen ist in Wirklichkeit Gleichgültigkeit.<br />
Geschäftlich betrachtet ist ein Android-Anwender primär der Beschauer von Werbeanzeigen.<br />
www.linux-magazin.de<br />
3
Inhalt<br />
www.linux-magazin.de 02/2014 02/2014<br />
4<br />
Hallo, <strong>Computer</strong>-<strong>Logbuch</strong>: Dieser <strong>Magazin</strong>-Schwerpunkt will keinem <strong>Linux</strong>er einreden, dass er<br />
READMEs besser in Libre Office verfassen soll, um neue Welten zu erkunden. Gleichwohl gibt<br />
es beim Dokumentieren und Publizieren genug Teilgebiete, bei denen selbst eingefleischte<br />
Ascii-Erdlinge nach kurzer Überlegung sagen: Captain, das ist Warp-mäßig cool.<br />
Aktuell<br />
Titelthema: Dokumentieren, extra hieren, archivieren und präsentieren<br />
6 N ew s<br />
n Die Creative Commons Lizenz 4.0<br />
n Programmiersprache Go 1.2. ist da<br />
n CfP: Chemnitzer <strong>Linux</strong>tage 2014<br />
n RHEL 6.5 und Univention UCS 3.2<br />
22 Knowledge Base<br />
Titel<br />
Sie sind der moderne Hort des Wissens:<br />
Freie Knowledge Bases bündeln Knowhow<br />
und unterstützen den Helpdesk.<br />
40 Sites archivieren<br />
Drei praxiserprobte Tools für das<br />
Archivieren von Websites.<br />
Auch Windows-7-Programme laufen jetzt im<br />
Seamless-Modus unter Qubes OS.<br />
14 Zahlen & Trends<br />
n NFtables im Kernel<br />
n Mozilla steigert erneut Umsatz<br />
n Automobiles <strong>Linux</strong> auf dem Vormarsch<br />
Das Administrationsinterface von Redmine.<br />
28 PDF-Cross-Test<br />
Programme, um PDF-Dateien herzustellen,<br />
Tools um sie zu editieren und um<br />
einzelne Daten zu extrahieren.<br />
34 IRC-Bots<br />
Die Roboter kommen: Wie spezialisierte<br />
IRC-Bots in Wissensdatenbanken helfen.<br />
Nicht nur bei Rechtstreits braucht der Admin<br />
vollständige Archive seiner Webseiten.<br />
46 HTML-5-Präsentationen<br />
Das Javascript-Tool Reveal.js baut schicke<br />
Folien aus schlichtem HTML- oder<br />
Markdown-Code und ist Emacs-tauglich.<br />
50 Multi-Format-Publishing<br />
Docbook gilt als Nonplusultra der technischen<br />
Dokumentation.<br />
Eine Petition fordert Synaptics auf, <strong>Linux</strong>-<br />
Treiber für ihre Hardware zu liefern.<br />
20 Zacks Kernel-News<br />
n Fliegender User-Wechsel?<br />
n Menuconfig wird bleiben<br />
n Tmon überwacht Temperaturen<br />
Mit If-Clauses will Entwickler Biederman verhin<br />
dern, dass User zu viele Rechte bekommen.<br />
IRC-Bots sind durchaus hilfsbereite Gesellen.<br />
DELUG-DVD<br />
Centos 6.5<br />
TOOL<br />
Bootet von B-Seite: Aus den<br />
RHEL-Sourcen übersetztes, subskriptions<br />
freies 64-Bit-<strong>Linux</strong><br />
Mint 16<br />
TOOL<br />
TOOL<br />
Bootet von A-Seite: Ubuntu-<br />
13.10-Klon (64 Bit, Kernel 3.11)<br />
für Unity-Verächter<br />
TOOL<br />
TOOL<br />
Nach einem leichten Einstieg winken PDFs,<br />
E-Books und Manpages: Docbook ist simpel.<br />
Details zu DVD-<br />
TOOL<br />
Inhalten auf S. 55<br />
E-Book komplett<br />
„TCP/IP Netzwerk-Administration“<br />
Susecon 2013<br />
Videos: Keynotes von Suses<br />
Florida-Festival<br />
Soft-Appliance<br />
IPfire 2.13 Core 73: Modulare<br />
Firewall zum gleich Ausprobieren
4<br />
http://www.raspberrypi.org<br />
Rev2<br />
Video-Out<br />
HDMI<br />
Audio<br />
OK<br />
02/2014 02/2014<br />
Inhalt<br />
56 Gute Geschäfte<br />
Waren und Dienstleistungen im Web<br />
bereitstellen – das versprechen viele<br />
Tools. Drei Open-Source-Webshops<br />
müssen sich im Test bewähren.<br />
66 Risiko managen<br />
Android-Admin-Alltag: Apps kontrollieren<br />
und auslesen, sichere Images und<br />
Backups aufspielen oder dem Einbrecher<br />
per Memorydump nachspüren.<br />
96 Gesund im Alter<br />
Von wegen alt und überholt: Perl hat<br />
immer noch viele spannende Neuheiten<br />
zu bieten. Perlmeister Schilli zeigt<br />
seine aktuellen CPAN-Favoriten.<br />
www.linux-magazin.de<br />
5<br />
Software<br />
Sysadmin<br />
Hardware<br />
55<br />
Einführung<br />
Auf der DELUG-DVD: Mint 16 mit Cinnamon,<br />
Centos 6.5, IPfire, Kolibri, Susecon-<br />
Videos und ein E-Book über TCP/IP.<br />
56 Bitparade<br />
Titel<br />
Open Cart, Satchmo und Lemonstand<br />
im Vergleich: Wer bietet die beste Shop-<br />
Lösung fürs eigene Internetangebot?<br />
65 Einführung<br />
Aus dem Alltag eines Sysadmin: Charly<br />
macht den Abfluss frei.<br />
66 Android-Pflege<br />
Titel<br />
Auch wenn Androiden im Unternehmen<br />
keine gute Idee sind, lassen sie sich mit<br />
Bordmitteln überwachen und pflegen.<br />
76 Open-Stack-Deployment<br />
Titel<br />
Die Open-Source-Cloud hat gelernt,<br />
sich selbst zu installieren: Triple O<br />
bringt Open Stack auf die Hardware.<br />
86 Picam<br />
Schon für 100 Euro gibt es den Raspber ry<br />
Pi mit Webcam als Bewegungssensor.<br />
Know-how<br />
90 Kern-Technik – Folge 72<br />
Titel<br />
Das I 2 C-Subsystem des Kernels testen<br />
mit den Pins des Raspberry Pi.<br />
3V3 5V<br />
2 5V<br />
3 GND<br />
TXD<br />
GND RXD<br />
17 18<br />
27 GND<br />
22 23<br />
3V3 24<br />
MOSI GND<br />
MISO 25<br />
SCLK CS0<br />
GND CS1<br />
SDA<br />
SCL<br />
USB 2x<br />
GPIO<br />
PWR<br />
FDX<br />
LNK<br />
10M<br />
DSI (DISPLAY)<br />
Raspberry Pi<br />
CSI (CAMERA)<br />
Power<br />
ETHERNET<br />
Im Open-Cart-Admintool verwaltet der virtuelle<br />
Shop-Chef seine Mitarbeiter.<br />
Der I 2 C-Bus wird mit den Pins verbunden.<br />
62 Tooltipps<br />
Cpumon 2.0, Monitoring Plugins 0.15,<br />
Bvi 1.40beta, Balance 3.56, All World IT<br />
Dbackup 0.0.20 und Lazygal 0.8.<br />
Die freie Wolke automatisch auf echter Hardware<br />
zu installieren ist das Ziel von Triple O.<br />
Forum<br />
Programmieren<br />
96 Perl-Snapshot<br />
Auch mit Jahrzehnten auf dem Buckel ist<br />
Perl dank neuer CPAN-Tools topaktuell.<br />
Hilfreiches Überwachungstool: Monitor Plugins.<br />
Service<br />
3 Editorial<br />
108 IT-Profimarkt<br />
108 Seminare<br />
112 Veranstaltungen<br />
112 Inserenten<br />
113 Impressum<br />
114 <strong>Vorschau</strong><br />
80 Winterrätsel<br />
Titel<br />
Wer weiß am besten<br />
Bescheid über<br />
Programmiersprachen?<br />
82 Recht<br />
Bei Bring Your Own Device lauern<br />
rechtliche Fallstricke, für Unternehmer<br />
und Anwender.<br />
84 Tux liest<br />
Ein Wireshark-Buch<br />
und ein funktionales<br />
Kochbuch.<br />
Jetzt<br />
mitmachen &<br />
Gewinnen!<br />
100 Angular.js<br />
Titel<br />
Webanwendungen programmieren mit<br />
dem Framework Angular.js.<br />
Lokale Daten editieren mit Angulars Templates.<br />
104 C++11 - Folge 14<br />
Titel<br />
Modernes C++ in der Praxis: Range-basierte<br />
For-Schleifen und automatische Typen.
Aktuell<br />
www.linux-magazin.de News 02/2014<br />
6<br />
News<br />
Tiki 12.0 erhält fünf Jahre Support<br />
Die Webanwendung Tiki,<br />
die sich als Wiki, CMS und<br />
Groupware einsetzen lässt, ist<br />
seit Ende November 2013 in<br />
Version 12.0 mit Long Term<br />
Support (LTS) erhältlich. Die<br />
Entwickler versprechen die<br />
Release fünf Jahre lang mit<br />
Updates zu versorgen.<br />
An neuen Features unterstützt<br />
die LTS-Version neben<br />
der Suche über Lucene nun<br />
auch wahlweise eine Volltextsuche<br />
über MySQL oder Elastic<br />
Search. Der zuschaltbare<br />
Wysiwyg-Editor Ckeditor erfuhr<br />
ein Upgrade auf Version<br />
4.2. Neuerdings gibt es einen<br />
Setup-Wizard, Monitoring-<br />
Plugins für Nagios und Icinga<br />
sowie eine Kommandozeilen-<br />
Schnittstelle für den Systemadministrator.<br />
Mit dem neuen Tiki-Plugin für Together JS (vormals Tow Truck) können Benutzer<br />
gemeinsam an Texten arbeiten.<br />
Die Entwickler haben zudem<br />
das Friendship Network neu<br />
implementiert, sodass Tiki die<br />
Aktivitäten der Freunde auf<br />
der Friendship-Network-Seite<br />
anzeigt. Tiki 12.0 integriert<br />
den experimentellen Dienst<br />
Together JS [https://togetherjs.<br />
com]. Dieser ermöglicht Echtzeit-Kooperationen<br />
zwischen<br />
Usern wie das gemeinsame<br />
Verfassen von Texten.<br />
Die Tiki-Software ist unter<br />
LGPLv2.1 lizenziert, Version<br />
12 steht auf der Webseite<br />
des Projekts [http://info.tiki.org/<br />
Download] bereit.<br />
n<br />
Valve wird Mitglied der <strong>Linux</strong> Foundation<br />
Creative Commons 4.0 veröffentlicht<br />
Spiele-Entwickler Valve, der<br />
unter anderem die kommerzielle<br />
Steam-Plattform betreibt,<br />
ist der <strong>Linux</strong> Foundation beigetreten.<br />
Das hat die Stiftung<br />
in einer Pressemitteilung bekannt<br />
gegeben. Laut Michael<br />
Sartain, einem Mitglied des<br />
<strong>Linux</strong>-Teams bei Valve, sei<br />
der Beitritt einer von mehreren<br />
Wegen, <strong>Linux</strong> als Spieleplattform<br />
zu fördern.<br />
Valve hoffe, Werkzeuge für<br />
Entwickler beizusteuern, mit<br />
denen diese „neue Erlebnisse“<br />
unter <strong>Linux</strong> schaffen können.<br />
Zudem wolle die Firma eine<br />
elegante und offene Plattform<br />
für <strong>Linux</strong>-Nutzer ausliefern<br />
und Hardware-Entwickler dazu<br />
drängen, den <strong>Linux</strong>-Support<br />
zu priorisieren.<br />
Michael Sartain spielt hier<br />
offenbar auf die Steam Machines<br />
an, die geplanten Spielekonsolen<br />
von Valve, auf denen<br />
das <strong>Linux</strong>-basierte Steam-<br />
OS läuft. Der Steam-Client,<br />
einige Valve-Spiele und die<br />
in vielen Spielen steckende<br />
Source-Engine laufen bereits<br />
länger auf <strong>Linux</strong>-Basis, bislang<br />
unterstützt Valve jedoch<br />
ausschließlich Ubuntu.<br />
Zugleich hat der Spielehersteller<br />
die Ergebnisse der Steam-<br />
Hard- und Software-Umfrage<br />
für den November 2013 veröffentlicht.<br />
Demnach nutzt lediglich<br />
ein Prozent der Steam-<br />
Anwender <strong>Linux</strong> [http://store.<br />
steampowered.com/hwsurvey], die<br />
Zahl hat sich seit dem Vormonat<br />
nicht geändert. n<br />
Die Creative-Commons-Organisation<br />
hat Ende November<br />
in Mountain View, Kalifornien,<br />
die mittlerweile vierte Version<br />
der CC-Lizenz veröffentlicht.<br />
In der Zeit nach 2007,<br />
als die CC 3.0 an den Start<br />
ging, hätten sich Probleme<br />
herauskristallisiert, welche<br />
die vierte Ausgabe nun lösen<br />
soll, schreibt die Non-Profit-<br />
Organisation in ihrer offiziellen<br />
Ankündigung [http://creativecommons.org/weblog/].<br />
So mussten die 3.0-Lizenzen<br />
an 35 verschiedene lokale<br />
Rechtsprechungen angepasst<br />
werden. Die Organisation habe<br />
dabei eine Menge gelernt,<br />
weshalb die neuen Lizenzen<br />
ohne Anpassungen weltweit<br />
einsetzbar wären. Zudem habe<br />
man weitere Themenkomplexe<br />
berücksichtigt, etwa<br />
Sui-Generis-Datenbankrechte,<br />
Persönlichkeitsrechte sowie<br />
Data Mining.<br />
Daneben habe die Organisation<br />
die Kompatibilität der Lizenz<br />
ausgeweitet: Im Gegensatz<br />
zur 3.0 vertrage sich die<br />
4.0 jetzt mit der BY-NC-SA,<br />
wofür es diverse Mechanismen<br />
der Sharealike-Direktiven<br />
zu entfernen galt.<br />
Einen interessanten Dreh gibt<br />
es im DRM-Abschnitt: Unter<br />
dem Stichwort ETM (Effective<br />
Technological Measures) gestattet<br />
es die neue Lizenz jedem<br />
Rechte-Inhaber unter bestimmten<br />
Umständen, DRM-<br />
Maßnahmen zu brechen, um<br />
die CC-Rechte zu wahren. n
Docker 0.7 erobert <strong>Linux</strong><br />
Neben zahlreichen Bugfixes<br />
bringt das Virtualisierungstool<br />
Docker in Version 0.7 auch<br />
mehrere signifikante Neuerungen<br />
mit. <strong>Linux</strong>-Nutzer<br />
dürften sich vor allem über<br />
den Support auf allen <strong>Linux</strong>-<br />
Plattformen freuen.<br />
Fortan ist dank eines Storage-<br />
Treibers von Red Hats Alexander<br />
Larsson kein gepatchter<br />
<strong>Linux</strong>-Kernel mehr notwendig,<br />
um Docker unter den <strong>Linux</strong>-<br />
Distributionen zum Laufen<br />
zu bringen. Die Patches waren<br />
nötig, um AUFS-Unterstützung<br />
zu gewährleisten, die<br />
der Kernel nativ nicht bietet.<br />
Drei neue Storage Driver für<br />
AUFS, VFS und Device mapper<br />
liegen bisher vor und helfen<br />
Docker dabei, beim Start das<br />
passende Dateisystem auszuwählen.<br />
Weitere Treiber für<br />
Btr-FS, ZFS, Gluster und Ceph<br />
sollen folgen. Die Treiber können<br />
zwar keine Daten auf derselben<br />
Maschine teilen, aber<br />
die von ihnen produzierten<br />
Images sind kompatibel, auch<br />
mit vergangenen Docker-Versionen.<br />
Hinzu kommen Offline-Transfers<br />
über die Save- und Load-<br />
Kommandos: Container-Images<br />
lassen sich nun als Bundles<br />
in das lokale Dateisystem<br />
exportieren und von anderen<br />
Docker-Daemons laden. Die<br />
daraus resultierenden Export-<br />
Images lassen sich mitsamt<br />
Konfiguration, Erstellungsdatum<br />
und Build History aufbewahren<br />
und wie normale<br />
Dateien transferieren. Das soll<br />
insbesondere Softwarehersteller<br />
ansprechen, die ihren<br />
Kunden Appliances liefern.<br />
Dank sicheren Offline-Transfers<br />
können Docker-Container<br />
auch für Updates zum Einsatz<br />
kommen, ohne Sicherheitskonzepte<br />
zu gefährden.<br />
Die Portumleitung ist überarbeitet,<br />
sodass nun statische<br />
Ports und feste Ziel-IPs möglich<br />
sind. Links erlauben es<br />
Containern, sich gegenseitig<br />
zu entdecken und sicher miteinander<br />
zu kommunizieren.<br />
Diese Inter-Container-Kommunikation<br />
lässt sich über<br />
»-icc=false« abschalten. Das<br />
False-Flag unterbindet die<br />
Kommunikation, es sei denn,<br />
sie wurde explizit genehmigt.<br />
Das neue Feature soll die Sicherheit<br />
erhöhen, damit etwa<br />
ein Wordpress-Container sicherer<br />
auf eine MySQL-Datenbank<br />
zugreift. Nicht zuletzt<br />
lassen sich Container über das<br />
»-name«-Flag unterscheidbar<br />
betiteln, außerdem wurde die<br />
Zuverlässigkeit und Qualität<br />
der Software insgesamt verbessert.<br />
Details lassen sich dem Docker-Blog<br />
[http://blog.docker.io/<br />
2013/11/] entnehmen. n<br />
News 02/2014<br />
Aktuell<br />
www.linux-magazin.de<br />
7<br />
Anzeige
Aktuell<br />
www.linux-magazin.de News 02/2014<br />
8<br />
Qemu verbessert High Definition Audio und USB 3.0<br />
Die neue Version 1.7 der Virtualisierungssoftware<br />
Qemu<br />
bietet eine verbesserte Emulation<br />
von High Definition Audio<br />
(HDA), unterstützt mehr<br />
als 1 TByte Hauptspeicher<br />
und kann ACPI-Tabellen für<br />
x86-Hardware erzeugen. Die<br />
Tabellen soll die Firmware<br />
direkt verwenden. Gleichzeitig<br />
ließen sich so in Zukunft<br />
einfacher neue Funktionen<br />
einführen, weil dazu keine<br />
Änderungen an der Firm ware<br />
(namentlich an Sea-Bios,<br />
OVMF und Coreboot) notwendig<br />
wären.<br />
Die emulierten HDA-Geräte<br />
bekommen nun automatisch<br />
einen Mixer. Zudem funktioniert<br />
die Audio-Ausgabe auch<br />
auf Systemen ohne Open<br />
Sound System (OSS). Beides<br />
musste der Qemu-Anwender<br />
in früheren Versionen noch<br />
explizit beim Kompilieren erzwingen.<br />
Die 1 TByte Hauptspeicher<br />
sind in der Praxis<br />
noch nicht benutzbar, da<br />
bislang eine Anpassung der<br />
Firmware fehlt.<br />
Des Weiteren gibt es Verbesserungen<br />
am VIFO-Treiber und<br />
beim Support für USB 3.0. Der<br />
Qemu-Monitor kennt neue<br />
Blockgeräte-Kommandos, die<br />
sich vor allem um Snapshots<br />
in Qcow2-Images drehen. Den<br />
Drosselalgorithmus für Blockgeräte<br />
haben die Entwickler<br />
komplett neu geschrieben, er<br />
soll nun robuster sein.<br />
Der VHDX-Treiber kann neuerdings<br />
».vhdx«-Images anfertigen<br />
und schreiben. Sein<br />
Kollege, der für Qcow2-Images<br />
zuständig ist, erkennt<br />
Beschädigungen und verhindert<br />
daraufhin das Schreiben<br />
eines defekten Image. Last<br />
but not least unterstützt der<br />
VMDK-Treiber Dateien, die<br />
von VMware ESX stammen.<br />
Sämtliche Neuerungen listet<br />
das Changelog im Qemu-Wiki<br />
[http://wiki.qemu.org] auf. n<br />
Linutop liefert Version 5 seiner Kiosk-PCs<br />
Mit dem Linutop 5 bringt der<br />
französische Hersteller Linutop<br />
einen weiteren lüfterlosen<br />
und energiesparenden Mini-<br />
PC mit <strong>Linux</strong>-Betriebssystem<br />
auf den Markt. Den Mini-<br />
Rechner verkauft der Hersteller<br />
mit Linutop OS, einem<br />
angepassten Ubuntu 12.04,<br />
das einen Kiosk-Modus mitbringt.<br />
Für aufwändige Aufgaben<br />
lässt sich der Rechner allerdings<br />
nur bedingt verwenden.<br />
Der Hersteller empfiehlt den<br />
Einsatz als Thin Client, Webkiosk<br />
oder digitales Werbeschild,<br />
das Bilder, Videos, Musik<br />
und Webseiten anzeigt.<br />
Der Mini-PC Linutop 5 mit Atom-Prozessor.<br />
Mit einer Leistungsaufnahme<br />
von 14 Watt steht der Linutop<br />
5 gut da, aber der etwas<br />
schwachbrüstige 1,6-GHz-<br />
Atom-Prozessor und auch<br />
die sonstigen Hardwaredaten<br />
deuten eher auf ein Surf- und<br />
Schreib-Terminal hin.<br />
Der Linutop 5 bringt 2 GByte<br />
DDR-2-RAM sowie 4 GByte<br />
internen Flashspeicher mit.<br />
Als Grafikprozessor arbeitet<br />
ein GMA950 von Intel. Dank<br />
des Gigabit-Ethernet-Kontrollers<br />
wandern die Daten recht<br />
schnell übers Netzwerk, ein<br />
WLAN-Adapter fehlt dem Modell<br />
jedoch, dessen Kaufpreis<br />
bei 390 Euro liegt. n<br />
Go in Version 1.2 erschienen<br />
Weil sie einen Sonderfall geregelt<br />
haben, können die Macher<br />
der Programmiersprache<br />
Go ihr unter [http://tip.golang.<br />
org/doc/go1compat.html] gegebenes<br />
Versprechen der Kompatibilität<br />
in Version 1.2 nicht<br />
mehr ganz einhalten. So führen<br />
bestimmte Einsätze des<br />
Nil-Pointers aus Sicherheitsgründen<br />
zwangsläufig zu einem<br />
Laufzeitfehler, um unerwünschte<br />
Speicherzugriffe zu<br />
verhindern. Älteren Code, der<br />
solche Konstrukte verwendet,<br />
müssen die Entwickler daher<br />
händisch anpassen.<br />
Wer in Go Slice-Operationen<br />
auf existierende Arrays oder<br />
Slices anwendet, darf nun sowohl<br />
die Kapazität als auch<br />
die Länge definieren. Die Kapazität<br />
entspricht der maximalen<br />
Anzahl an Elementen,<br />
die ein Slice halten darf, und<br />
verweist auf die Größe des<br />
darunterliegenden Array. Die<br />
Änderung tangiert bereits vorhandenen<br />
Go-Code nicht.<br />
Dank Pre-Emption im Scheduler<br />
dürfen bestimmte Loops<br />
in einem Thread nicht mehr<br />
alle Ressourcen belegen und<br />
andere Loops aushungern.<br />
Die Zahl der Threads lässt<br />
sich zudem über »SetMax-<br />
Threads()« begrenzen. Die<br />
Minimalgröße des Goroutines-Stack<br />
erhöht sich von 4<br />
auf 8 KByte, zugleich lässt<br />
sich über »SetMaxStack()« eine<br />
Maximalgröße festsetzen.<br />
Zum Download steht Go 1.2<br />
in Googles Code-Repository.n
Aktuell<br />
www.linux-magazin.de News 02/2014<br />
10<br />
Chemnitzer <strong>Linux</strong>-Tage 2014 suchen Beiträge und Aussteller<br />
Am 15. und 16. März 2014 finden<br />
die Chemnitzer <strong>Linux</strong>- Tage<br />
[http://chemnitzer.linux‐tage.de]<br />
statt. Noch bis zum 7. Januar<br />
2014 suchen die Veranstalter<br />
Interessenten für Vorträge und<br />
Workshops sowie die Stände<br />
im Ausstellungsbereich. Das<br />
Community-Treffen an der TU<br />
Chemnitz steht 2014 unter<br />
dem Motto „Vertrauen ist …“.<br />
Damit legen die Organisatoren<br />
den Themenschwerpunkt<br />
auf vertrauliche Kommunikation,<br />
Datenschutz, Mail- und<br />
Transportverschlüsselung sowie<br />
Privatsphäre. Daher sucht<br />
der Call for Papers Beiträge<br />
zu den Grundlagen von Verschlüsselung,<br />
Vertraulichkeit<br />
und Kryptographie, zu deren<br />
Anwendung in Software und<br />
Diensten sowie zu deren Verlässlichkeit.<br />
Wie gewohnt sollen auf den<br />
Chemnitzer <strong>Linux</strong>-Tagen nicht<br />
nur Fachleute miteinander<br />
diskutieren. Gerade die einfachen<br />
Anwender sollen sich<br />
hier informieren, Zugang zu<br />
Kryptographie-Wissen erhalten<br />
und lernen, sich vor Ausspähung<br />
zu schützen.<br />
Außerdem suchen die Veranstalter<br />
Bewerber für die rund<br />
60 Präsentationsstände im<br />
Foyer, an denen sich Projekte<br />
und Firmen rund um Open<br />
Source und <strong>Linux</strong> präsentieren<br />
wollen. <br />
n<br />
Qubes OS mit Seamless-Modus für Windows 7<br />
Wer Windows 7 einsetzt, aber<br />
sich mehr Sicherheit wünscht,<br />
kann das MS-Betriebssystem<br />
bald virtualisiert in Qubes R2<br />
[http://qubes‐os.org] verwenden.<br />
Dies integriert Windows-Anwendungen<br />
nahtlos in einen<br />
<strong>Linux</strong>-Desktop. Hauptentwicklerin<br />
Joanna Rutkowska<br />
weist in ihrem Blog darauf<br />
hin, dass die Anfang Dezember<br />
erscheinende Beta 3 von<br />
Qubes OS R2 eine Seamless-<br />
Integration von Windows 7<br />
erlauben wird.<br />
Momentan gäbe es noch kleinere<br />
Probleme zu beheben: So<br />
sehe man etwa bei Fensterbewegungen<br />
noch den Schatten<br />
des überlappenden Fensters.<br />
Verglichen mit <strong>Linux</strong>-VMs gäbe<br />
es aber keine Unterschiede<br />
in der Reaktionszeit, das Secure-GUI-Protokoll<br />
bleibe bei<br />
der Ergänzung des Seamless-<br />
Modus unangetastet. Die zur<br />
Installation nötigen Windows-<br />
Windows 7 im Seamless-Modus unter Qubes OS.<br />
Support-Tools seien zwar<br />
proprietär, müssten aber laut<br />
Rutkowska in der ohnehin<br />
proprietären Windows-7-VM<br />
installiert werden.<br />
Neben diesen wesentlichen<br />
Änderungen führt die neue<br />
Quelle: http://theinvisiblethings.blogspot.de<br />
Version auch Template-basierte<br />
Hardware-VMs (HVM)<br />
ein: Qubes kann nun – auch<br />
für Windows – drei HVM-<br />
App-VMs auf Basis desselben<br />
Template erzeugen. Das so geteilte<br />
Root-Filesystem wird im<br />
Read-only-Modus verwendet,<br />
aber für die App-VMs sieht<br />
es jeweils aus, als wäre das<br />
Dateisystem beschreibbar.<br />
Ob das Teilen für Windows-Installationen<br />
aber lizenzrechtlich<br />
gestattet ist (es handele<br />
sich ja um ein Teilen, nicht<br />
um ein Kopieren), müsse<br />
letztlich jeder Windows-User<br />
mit seinem Anwalt für Lizenzrecht<br />
klären, merkt Rutkowska<br />
leicht süffisant an. n<br />
RHEL 6.5 verbessert Storage, Netzwerk und Virtualisierung<br />
Mit Version 6.5 verpasst Red<br />
Hat seinem Enterprise-<strong>Linux</strong><br />
RHEL ein Update mit zahlreichen<br />
Verbesserungen. Letztere<br />
betreffen beispielsweise<br />
die Virtualisierung. Admins<br />
können nun dynamisch virtuelle<br />
Prozessoren (v-CPUs)<br />
aktivieren oder deaktivieren,<br />
daneben unterstützt KVM<br />
Konfigurationen von bis zu<br />
4 TByte RAM und bietet auch<br />
direkten Zugriff auf Gluster-<br />
FS-Volumes.<br />
Darüber hinaus hat Red Hat<br />
die Unterstützung für SSDs<br />
mit Non-Volatile Memory<br />
Express (NVMe) verbessert.<br />
Der Administrator kann jetzt<br />
außerdem mehr als 255 LUNs<br />
konfigurieren, die mit einem<br />
einzelnen I-SCSI-Target<br />
verbunden sind. Auch die<br />
Funktionen für den Einsatz<br />
in Fibre- Channel- und I-SCSI-<br />
SAN-Umgebungen haben<br />
Optimierungen erfahren. Updates<br />
in dem Kexec-Kdump-<br />
Mechanismus ermöglichen<br />
es nun, Dump-Files auch auf<br />
Systemen mit sehr großem Arbeitsspeicher<br />
(zum Beispiel 6<br />
TByte) zu erzeugen.<br />
Im lokalen Netzwerk unterstützt<br />
Red Hat Enterprise<br />
<strong>Linux</strong> 6.5 das Precision Time<br />
Protocol (PTP), das Applikationslatenzen<br />
im Mikrosekundenbereich<br />
ermöglicht.<br />
Das IGMP (Internet Group<br />
Management Protocol) verschafft<br />
dem Admin zudem<br />
einen tieferen Einblick in die<br />
Netzwerkaktivitäten. n
Expert Panel<br />
Mobile Enterprise<br />
10.–14.03.2014<br />
Mobility-Trends der Unternehmens-IT<br />
Tägliches Vortragsprogramm<br />
Themenhighlights:<br />
Vorträge und Podiumsdiskussionen zu Mobile Strategy, Mobile Device Management,<br />
Mobile Security, Mobile Lösungen zu CRM / ERP / BI / Office, Service, Instandhaltung,<br />
Logistik, Softwareentwicklung & Systemintegration, u.v.m.<br />
www.cebit.de/de/mobile-enterprise<br />
Powered by<br />
Presented by<br />
pluspol.de<br />
Marketing Kommunikation Internet
Aktuell<br />
www.linux-magazin.de News 02/2014<br />
12<br />
Kurznachrichten<br />
Monitorix 3.4.0: Freie Monitoring-Software für <strong>Linux</strong>- und Unix-Server<br />
sowie Embedded-Geräte. Neu: Ein neuer Graph stellt Statistiken zu beliebig<br />
vielen Installationen des Caching-Servers Memcached dar. Der<br />
Festplattenmonitor zeigt auch an, ob ein Laufwerk die eingestellte Anzahl<br />
von Reallocated- oder Pending-Sektoren erreicht hat. Die neue Monitorix-<br />
Option »max_historic_years« legt fest, wie lange die Software die Daten<br />
archiviert. Lizenz: GPLv2 [http://www.monitorix.org]<br />
Lives 2.2.0: Ein freier Video-Editor mit VJ-Support, den der Videokünstler<br />
Gabriel Finch entwickelt. Neu: Version 2.2.0 bringt einen neuen »avformat_decoder«<br />
mit und optimiert den Umgang mit großen Clips. Neuerdings<br />
kommt Threading zum Einsatz, wenn die Software Frames aus Videoclips<br />
extrahiert. Im Mehrspurmodus lädt Lives zudem das Layout deutlich<br />
schneller. Lives bringt ein verbessertes GUI und Fehlerkorrekturen mit.<br />
Lizenz: GPLv3 [http://lives.sourceforge.net]<br />
<strong>Linux</strong> Mint 16: Die Distribution basiert auf Ubuntu, trägt den Codenamen<br />
Petra und erscheint in einer Mate- und Cinnamon-Edition. Neu: Mit an Bord<br />
sind der <strong>Linux</strong>-Kernel 3.11 und wahlweise die zweite Version des Cinnamon-<br />
Desktops (einer Gnome-3-Alternative) oder der Mate-Desktop, der sich an<br />
Gnome 2.0 orientiert. Die Entwickler haben zudem an der Performance,<br />
am EFI-Support, dem System und dem Artwork gearbeitet. Mint lässt<br />
sich auch vom USB-Stick installieren und booten. Lizenz: GPL und andere<br />
[http://www.linuxmint.com] und auf der Delug-DVD.<br />
Redis 2.8.0: Eine NoSQL-Datenbank mit Key-Value-Speicher, die den Arbeitsspeicher<br />
zur Datenablage verwendet. Neu: Redis bringt Support für<br />
das komplett überarbeitete Redis Sentinel mit. Ist die Verbindung von<br />
Master und Slaves für kurze Zeit unterbrochen, muss Redis nur Teile des<br />
Datensets aktualisieren. Die Kommandos Scan, Hscan, Zscan und Sscan<br />
iterieren über Hashes, Sets und Sorted Sets. Über das Config-Kommando<br />
lässt sich die Konfiguration von Redis on the Fly ändern. Die Datenbank<br />
bringt IPv6-Support mit und das Scripting wurde verbessert. Lizenz: BSD<br />
[http://redis.io]<br />
Open Search Server 1.5: Freie Suchmaschine, die Lucene verwendet,<br />
Websites, Datenbanken sowie lokale und entfernte Dateisysteme durchsucht<br />
und viele Formate unterstützt. Neu: Für die aktuelle Version hat der<br />
Hersteller das REST-API 1.5 komplettiert und die Erkennung von Named<br />
Entities fertiggestellt. Daneben kann der Anwender Skripte für das Tool<br />
Selenium integrieren, die einen Browser steuern. Die ZK-Bibliothek für<br />
das Web-GUI erfuhr ein Update auf Version 6.5.2. Außerdem haben die<br />
Entwickler einige wenige Bugs behoben. Lizenz: GPLv3 [http://www.<br />
open‐search‐server.com]<br />
UCS 3.2 setzt auf Übersichtlichkeit<br />
Das Bremer Open-Source-<br />
Unternehmen Univention hat<br />
seinen Corporate Server UCS<br />
in Version 3.2 auf den Markt<br />
gebracht. Die Release verwendet<br />
den <strong>Linux</strong>-Kernel 3.10.15<br />
sowie Debian Squeeze (6.0.8)<br />
als Basis. Der Verzeichnisdienst<br />
Open LDAP erhält ein<br />
Update auf Version 2.4.35,<br />
und Samba 4.1 sorgt mit den<br />
SMB-Versionen 2 und 3 auch<br />
für den Datenaustausch mit<br />
Windows 8 und Microsoft Server<br />
2012.<br />
Der Hersteller hat laut [http://<br />
www.univention.de] bei der neuen<br />
Version besonderes Augenmerk<br />
auf die Benutzerfreundlichkeit<br />
gelegt. In diesem<br />
Sinne sollen die neue<br />
Anordnung der Elemente in<br />
der Managementoberfläche<br />
sowie zusätzliche Informationen<br />
zu den einzelnen Funktionen<br />
wirken. Daneben gibt<br />
es eine neue Übersichtsseite<br />
über verfügbare Anwendungen.<br />
Alle Applikationen aus<br />
dem App Center der Vorgängerversion<br />
sind nun auch in<br />
UCS 3.2 verfügbar.<br />
Univention Corporate Server<br />
ist für Interessenten im Subskriptionsmodell<br />
zu haben.<br />
Ein Server mit 50 Benutzern<br />
kostet im ersten Jahr mit Installationssupport<br />
rund 1000<br />
Euro, mit Standardsupport<br />
rund 1900 Euro.<br />
n<br />
Fetchware: Software via Quelltext<br />
Emacspeak 39.0 mit neuen Features<br />
Der Entwickler David Yingling<br />
stellt mit Fetchware einen Paketmanager<br />
vor, der Software<br />
aus Quelltext-Distributionen<br />
herunterlädt, baut und installiert.<br />
Die Inspiration für<br />
sein als Perl-Modul implementiertes<br />
Tool stamme unter<br />
anderem von Slackwares<br />
Slackbuilds, schreibt Yingling<br />
in seinem einführenden<br />
Blogeintrag.<br />
Fetchware kann installierte<br />
Software auch aktualisieren<br />
oder entfernen. Die Konfiguration<br />
findet in so genannten<br />
Fetchware-Files statt, die<br />
Programmname, URL, Make-<br />
Optionen und Installationsverzeichnis<br />
aufnehmen. Sie<br />
verwenden Perl-Syntax.<br />
Bei der ersten Release weist<br />
der Autor darauf hin, dass<br />
noch Bugs auftreten können.<br />
Er bittet um Feedback der<br />
Anwender. Die Software ist<br />
auf CPAN und Github [https://<br />
github.com/deeelwy] erhältlich.<br />
Es gelten die Lizenzbedingungen<br />
von Perl 5.<br />
n<br />
Emacspeak, ein auditiver<br />
Desktop für sehbehinderte<br />
und blinde Benutzer, ist in Version<br />
39.0 mit neuen Features<br />
erhältlich. Die Release trägt<br />
den Codenamen Big Dog und<br />
unterstützt die derzeit stabile<br />
Emacs-Version 24.3 besser.<br />
Daneben versieht Emacspeak<br />
das Ipython-Notebook sowie<br />
die Webbrowser Chrome und<br />
Firefox mit einer Sprachausgabe.<br />
Chrome lässt sich zudem<br />
dank Kite einfacher debuggen.<br />
Updates gab es daneben<br />
für die Suchmaschinentools<br />
sowie für die Webtemplates,<br />
welche die WWW-Benutzung<br />
vereinfachen.<br />
Emacspeak ist unter GPLv2<br />
lizenziert und läuft sowohl<br />
auf 32- als auch auf 64-Bit-<br />
Systemen. Neben hilfreichen<br />
Informationen liefert die Projektseite<br />
[http://emacspeak.sf.<br />
net] zudem einen Link zum<br />
Herunterladen des Quellcode-<br />
Tarballs aus Googles Code-Repository.<br />
(kki/mfe/mhu/Tim<br />
Schürmann)<br />
n
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 02/2014<br />
14<br />
Zahlen & Trends<br />
Libre Office lernt Freehand und Keynote<br />
Erster Erfolg: Eine Freehand-Zeichnung in Libre Office.<br />
Der Suse-Entwickler Fridrich<br />
Strba hat in seinem Blog<br />
[http://fridrich.blogspot.de] eine<br />
<strong>Vorschau</strong> auf die neuen Importfilter<br />
veröffentlicht, die in<br />
einer der nächsten Versionen<br />
von Libre Office landen sollen.<br />
Er verzeichne rege Aktivität<br />
rund um die Bibliotheken<br />
Libwpd und Libwpg, die zum<br />
Verarbeiten von Wordperfect-<br />
Dokumenten und ‐Grafiken<br />
dienen, berichtet der Entwickler.<br />
Er selbst habe im Oktober<br />
während der 10. Suse Hackweek<br />
einen ersten Importfilter<br />
für das Dateiformat des<br />
Vektorgrafik-Programms Freehand<br />
geschrieben. Von David<br />
Tardon stamme eine neue Bibliothek<br />
für Keynote-Dateien<br />
und eine für mehrere E-Book-<br />
Formate. Der Entwickler Laurent<br />
Alonso arbeite an dem<br />
Import von Microsoft-Works-<br />
Tabellendokumenten.<br />
Um die Neuerungen zu ermöglichen,<br />
hätten sich die<br />
Entwickler dazu entschlossen,<br />
das bisherige API von Libwpd<br />
und Libwpg zu ändern, fährt<br />
Strba fort. Das mache die Bibliotheken<br />
zukunftssicherer<br />
und behebe zugleich aktuelle<br />
Importprobleme, etwa mit<br />
Visio-Konnektoren. Einige<br />
Features möchten sie zudem<br />
in die neue Bibliothek Librevenge<br />
auslagern. Da die Neustrukturierung<br />
dauern werde,<br />
kämen die neuen Importfilter<br />
wohl noch nicht in Libre Office<br />
4.2 zum Einsatz. n<br />
NFtables landet in Linus’ Kernelzweig<br />
Mozilla steigerte 2012 den Umsatz<br />
Die Wahrscheinlichkeit, dass<br />
NFtables in naher Zukunft<br />
IPtables als Standardpaketfilter<br />
für <strong>Linux</strong> ablöst, steigt.<br />
Nun ist der zugehörige Code<br />
in Linus Torvalds Hauptzweig<br />
gelandet. Dank NFtables gehören<br />
protokollabhängige<br />
Filtermodule im Kernelspace<br />
der Vergangenheit an, schreibt<br />
David S. Miller, Netzwerk-<br />
Maintainer für den Kernel, in<br />
seiner Commit-Nachricht. All<br />
das werde zukünftig im Userspace<br />
erledigt.<br />
IPtables soll aber nicht von<br />
heute auf morgen verschwinden,<br />
beide Paketfilter werden<br />
in einer Übergangsphase<br />
koexistieren. Mit Hilfe von<br />
Userspace-Tools lassen sich<br />
NFtables-Regeln auf Basis<br />
vorhandener Netfilter-Regeln<br />
aufstellen.<br />
Der Vorteil von NFtables: Die<br />
Software läuft als virtuelle<br />
Maschine, die Bytecode ausführt<br />
und so die ein- und ausgehenden<br />
Pakete oder zugehörigen<br />
Metadaten inspiziert<br />
und einordnet. Der Bytecode-<br />
Interpreter unterstützt dabei<br />
Sets von IP-Adressen für<br />
Whitelists, kann Paketinhalte<br />
laden und vergleichen sowie<br />
Datenstrukturen durchforsten.<br />
Wo IPtables das Aktualisieren<br />
des kompletten Regelwerks<br />
verlangt, ermöglicht NFtables<br />
auch kleinteilige Updates. n<br />
Das jährliche „Financial Statement“<br />
ist für die Mozilla Foundation<br />
auch in diesem Jahr<br />
ein Quell steter Freude: Im<br />
Jahr 2012 hat die Organisation<br />
mehr als 311 Millionen Dollar<br />
mit freier Software umgesetzt.<br />
Der Grund für die hohen und<br />
gegenüber dem Vorjahr um<br />
90 Prozent gestiegenen Einnahmen<br />
sind in erster Linie<br />
Lizenzgebühren aus Suchmaschinen-Partnerschaften,<br />
allen<br />
voran der mit Google.<br />
Der Suchmaschinenriese bezahlt<br />
nach wie vor mit Abstand<br />
die meisten Lizenzgebühren<br />
für die Integration<br />
seiner Suchmaschine als<br />
Standardsuche in den freien<br />
Browser – die Rede ist von 90<br />
Prozent. So finanziert Google<br />
ironischerweise Konkurrenzprodukte<br />
zu Chrome und<br />
Android. Aber auch andere<br />
Suchmaschinenanbieter wie<br />
Bing und Yahoo lassen Geld<br />
bei der Mozilla Foundation.<br />
Insgesamt 304 Millionen US-<br />
Dollar entfallen im Financial<br />
Statment deshalb auf den Posten<br />
„Royalties“.<br />
Der größte Ausgabenposten<br />
ist wenig überraschend die<br />
Software-Entwicklung mit<br />
knapp 150 Millionen Euro.<br />
Das ist kein Wunder, ist dieser<br />
Punkt doch auch das erklärte<br />
Ziel der Stiftung, die nicht gewinnorientiert<br />
arbeitet. n
<strong>Linux</strong>tag 2014 hat neues Zuhause<br />
Die 20. Auflage der internationalen<br />
Messe für <strong>Linux</strong> und<br />
Open Source zieht vom Messegelände<br />
unterm Funkturm<br />
ins Herz Berlins, in die großzügigen<br />
Hallen der Station<br />
Berlin [http://www.station‐berlin.<br />
de]. Auch der Termin ändert<br />
sich – die Initiatoren suchen<br />
die Nähe zum Android-Event<br />
Droid con und zur Bloggerund<br />
Social-Media-Messe Re:-<br />
pu bli ca. Vom 8. bis 10. Mai<br />
findet der <strong>Linux</strong>tag 2014 statt,<br />
im direkten Anschluss an die<br />
Re:publica (6. bis 8. Mai) und<br />
zeitgleich zur Droidcon.<br />
Ingo Wichmann, erster Vorsitzender<br />
des <strong>Linux</strong>tag e.V., erklärt<br />
die mit der Entscheidung<br />
verknüpfte Hoffnung: „Open<br />
Source bedeutet immer auch<br />
einen gesellschaftlichen Diskurs.<br />
Diesen Aspekt können<br />
Besucher [mit der Re:publica]<br />
nun aus einer noch umfassenderen<br />
Perspektive erfassen.<br />
Und Entwickler, die sich auf<br />
beiden Seiten der Schnittstelle<br />
zwischen Android und <strong>Linux</strong><br />
bewegen, haben nun die<br />
Chance, sowohl tiefer in ihre<br />
Spezialgebiete einzutauchen,<br />
als auch sich einen Technologie-Überblick<br />
zu verschaffen.“<br />
Der Besuch beider Veranstaltungen<br />
soll unkompliziert<br />
möglich sein, die Pressemitteilung<br />
nennt aber keine Details.<br />
Die Open-Source-Business-<br />
Welt soll auch 2014 wieder der<br />
Open-IT-Summit ansprechen.<br />
Ob die OSBA, wie zunächst<br />
falsch gemeldet, als Partner<br />
dabei ist, war zu Redaktionsschluss<br />
noch unklar.<br />
Aber die weitere Planung laufe<br />
bereits: Themenschwerpunkte<br />
und Details für die Sponsoren<br />
sollen noch 2013 kommen,<br />
der Call for Papers bis Ende<br />
Januar 2014 abgeschlossen<br />
sein. „Parallel dazu sucht<br />
der <strong>Linux</strong>tag Session Chairs,<br />
die als Experten in einem<br />
Teilgebiet der Open-Source-<br />
Software komplette Tracks gestalten<br />
möchten. Ab Februar<br />
können sich auch wieder freie<br />
Projekte um Standplätze im<br />
Rahmen des Call for Projekts<br />
bewerben“, schreibt der Verein<br />
in seiner Pressemitteilung<br />
[http://linuxtag.org/2014/]. n<br />
Dark Mails Kickstarter erfolgreich<br />
Mit etwa 3000 Unterstützern<br />
ist der Kickstarter für die<br />
Dark-Mail-Initiative [http://<br />
darkmail.info] erfolgreich zu<br />
Ende gegangen. Das Projekt<br />
kann nun mit rund 212 500<br />
US-Dollar Entwickler finanzieren,<br />
die eine sichere E-Mail-<br />
Plattform erarbeiten.<br />
Fünf der etwa 3000 Unterstützer<br />
zahlten im Kickstarter<br />
sogar die 10 000-Euro-Prämie,<br />
die es erlaubt, 60 Tage vor der<br />
Öffentlichkeit Einblick in den<br />
Quellcode zu erhalten. Möglicherweise<br />
handelt es sich um<br />
professionelle E-Mail-Provider,<br />
die zum Start des Projekts<br />
bereits Dienste auf Dark-Mail-<br />
Basis anbieten möchten.<br />
Anzeige<br />
Zu den Initiatoren des geplanten<br />
E-Mail-Dienstes gehören<br />
neben PGP-Ikone Phil<br />
Zimmermann die ehemaligen<br />
Betreiber des sicheren E-Mail-<br />
Dienstes Lavabit um Ladar<br />
Levison. Der Quellcode liege<br />
bereits vor, heißt es auf der<br />
Kickstarter-Seite, allerdings<br />
wolle man die Lavabit-spezifischen<br />
Teile entfernen, den<br />
Code vor der Freigabe aufräumen<br />
und dokumentieren. Der<br />
Servercode soll künftig unter<br />
der GPL stehen, der Clientcode<br />
unter der LGPL. Levison<br />
hofft zudem, nach dem Ende<br />
des Prozesses gegen Lavabit<br />
seinen E-Mail-Dienst wieder<br />
eröffnen zu dürfen. n<br />
Zahlen & Trends 02/2014<br />
Aktuell<br />
www.linux-magazin.de<br />
15<br />
Super Muc bleibt in der Top-Liga<br />
Das Leibniz-Rechenzentrum<br />
in Garching bei München hat<br />
es erneut geschafft: In der neuesten<br />
Ausgabe der Top 500,<br />
der Liste der 500 schnellsten<br />
Rechner der Welt, liegt Super<br />
Muc auf Platz 10 [http://www.<br />
top500.org/system/177719].<br />
Die Liste, die Mitte November<br />
auf der Supercomputing-<br />
Tagung SC13 in Denver vorgestellt<br />
wurde, enthalte ansonsten<br />
weit aktuellere Systeme,<br />
lässt sich Arndt Bode, Vorsitzender<br />
des LRZ-Direktoriums,<br />
im November in einer Pressemitteilung<br />
zitieren. Umso<br />
erfreuter sei man, dass auch<br />
nach zwei Jahren die Rechenleistung<br />
des Super Muc immer<br />
noch für einen Spitzenplatz<br />
ausreiche.<br />
Der Superrechner war 2012<br />
nachgerüstet worden, die<br />
nächste Ausbaustufe ist für<br />
Ende 2014 geplant. Der <strong>Linux</strong>-<br />
Cluster in Garching hat in den<br />
letzten Jahren immer wieder<br />
Rekorde aufgestellt und einige<br />
Preise eingeheimst. n
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 02/2014<br />
16<br />
<strong>Linux</strong> in Lausanne: Stadtverwaltung testet Desktop-Migration<br />
Wie der Schweizer IT-Dienstleister<br />
Why Open Computing<br />
Mitte November bekannt gab,<br />
wird die Schweizer Stadt Lausanne<br />
testen, ob sie <strong>Linux</strong> auf<br />
ihren Arbeitsplätzen einsetzen<br />
kann.<br />
„Der Organisations- und Informatikdienst<br />
der Stadt Lausanne<br />
hat bei der Why Open<br />
Computing AG fünf <strong>Computer</strong><br />
bestellt“, heißt es in einer<br />
Presseerklärung vom 15. November.<br />
Und weiter: „Nachdem<br />
die Hauptstadt des Kantons<br />
Waadt eine Unmenge von<br />
Open-Source-Programmen in<br />
ihr Informatiksystem integriert<br />
hat, wurde nun ein Pilotprojekt<br />
gestartet.“<br />
Dieses Projekt solle zeigen, ob<br />
ein Arbeitsplatz, der zu „100<br />
Prozent unter GNU/<strong>Linux</strong><br />
läuft, eine gangbare Lösung<br />
für die Stadtmitarbeiter darstellen<br />
kann“. Auch wenn<br />
die Stadt fast ausschließlich<br />
Microsoft-Office-Produkte einsetze,<br />
böte sich ein enormes<br />
Potenzial: „Ein komplett aus<br />
Open-Source-Software bestehender<br />
Arbeitsplatz würde<br />
nach abgeschlossener Migration<br />
umfangreiche Ersparnisse<br />
mit sich bringen und die Investition<br />
der so gewonnenen<br />
Mittel in Projekte mit hoher<br />
Priorität ermöglichen.“<br />
Der Dienstleister erhofft sich<br />
zudem aufgrund der längeren<br />
Lebensdauer der umgestellten<br />
Maschinen „einen ökologischen<br />
sowie finanziellen<br />
Gewinn“.<br />
n<br />
HTTP 2: Sicher per Default<br />
Eine W3C-Arbeitsgruppe werkelt<br />
derzeit am Nachfolgeprotokoll<br />
von HTTP, das HTTP<br />
2 heißen soll. In puncto Sicherheit<br />
zeichnet sich die<br />
Einigung auf eine standardmäßige<br />
Verschlüsselung ab.<br />
Im Moment beschäftigt sich<br />
die W3C-Arbeitsgruppe mit<br />
drei Vorschlägen: Während<br />
die ersten beiden (A und B)<br />
den bisherigen Einsatz von<br />
HTTP mit Server-Authentifizierung<br />
vorsehen, aber für<br />
eine schwache (A) respektive<br />
starke (B) Verschlüsselung<br />
plädieren, fordert Vorschlag<br />
C eine ausschließliche Nutzung<br />
von HTTPS im offenen<br />
Internet. Diese solle natürlich<br />
abwärtskompatibel sein, sodass<br />
ältere Browser weiterhin<br />
»http://« und »https://« verwenden<br />
können.<br />
W3C-Mitarbeiter Mark Nottingham<br />
stellte nun in einer<br />
Mail fest, dass sich ein Konsens<br />
in Bezug auf Lösung C<br />
abzeichne, weil es der geradlinigere<br />
Ansatz sei. Hierzu<br />
müssten keine neuen Mechanismen<br />
spezifiziert werden<br />
und HSTS schütze vor ungewollten<br />
Downgrades von<br />
HTTPS auf HTTP. Auch die<br />
Browser-Anbieter würden<br />
sich eher für einen Ansatz mit<br />
starker Verschlüsselung erwärmen,<br />
erklärt Nottingham.<br />
Trotzdem können Nutzer<br />
auch mit HTTP 2 weiterhin<br />
»http://«-URIs verwenden,<br />
sie müssten dies aber explizit<br />
einstellen.<br />
Das sei noch nicht alles: Auch<br />
TLS selbst wolle man stärken,<br />
etwa durch die Implementierung<br />
von PFS (Perfect Forward<br />
Security). Zugleich arbeite die<br />
Gruppe mit der IETF zusammen,<br />
um die Sicherheit von<br />
HTTP zu gewährleisten. n<br />
<strong>Linux</strong> gewinnt in der Automobilbranche<br />
Weil proprietäre Softwaremodelle<br />
heutzutage nicht mehr<br />
den Erwartungen der Industrie<br />
entsprächen, setze auch<br />
die Automobilindustrie mehr<br />
und mehr auf freie Software,<br />
erklärt eine Studie des Consulting-Unternehmens<br />
IHS,<br />
die Jim Zemlin von der <strong>Linux</strong><br />
Foundation in seinem Blog<br />
unter [http://www.linux.com/news/<br />
featured‐blogs/] vorstellt.<br />
Die Industrie wolle Richtung<br />
und Features mitbestimmen,<br />
zitiert die <strong>Linux</strong> Foundation<br />
aus der Studie, dies aber sei<br />
bei proprietären Plattformen<br />
nicht möglich. Leidtragende<br />
seien vor allem die ehemaligen<br />
Marktführer Microsoft<br />
Quelle: IHS Automotive November 2013<br />
und QNX, die früher weite<br />
Teile des Marktes unter sich<br />
aufteilen konnten. Nun gäbe<br />
<strong>Linux</strong> macht auch in der Autoindustrie immer häufiger das Rennen.<br />
es bereits zwei Modelle auf<br />
dem Markt, die mit <strong>Linux</strong> arbeiten<br />
und Amerikas „Car of<br />
the Year“-Award gewonnen<br />
hätten – 2013 Tesla, 2014 der<br />
Cadillac, so Zemlin.<br />
Für ihn sei das aber keine<br />
Ausnahme, sondern eher die<br />
Regel. Auch Firmen wie Nissan,<br />
Jaguar/Land Rover und<br />
Toyota setzten voll auf Open<br />
Source, wenn auch in Konkurrenz<br />
zu BMW, Peugeot und<br />
Volvo, die sich vor einiger Zeit<br />
in der Genivi-Allianz [http://<br />
www.genivi.org] zusammengeschlossen<br />
haben.<br />
n
IDC sieht ARM-Server im Anmarsch<br />
Das Marktforschungsunternehmen<br />
IDC sieht Server mit<br />
der ARM-Architektur in europäischen<br />
Rechenzentren ankommen,<br />
erwartet aber erst<br />
2014 einen richtigen Schub.<br />
Für statische Web-Workloads<br />
mit beschränkten Ressourcen-<br />
Anforderungen seien ARM-<br />
Server eine kostengünstige<br />
Alternative zu x86, schreibt<br />
IDC-Analyst Andreas Olah.<br />
Das sei den geringeren Anschaffungs-<br />
und Energiekosten<br />
zu danken.<br />
Für anspruchsvollere Workloads<br />
wie etwa E-Commerce-<br />
Seiten oder Onlinespiele<br />
seien sie aber nicht geeignet.<br />
Gleichwohl könnte der Markteinfluss<br />
der ARM-Prozessoren<br />
auch günstigere Preise für<br />
Intels Xeon und Atom erzeugen.<br />
Da sich ein solcher<br />
ARM-Einsatz noch in einer<br />
frühen Phase befinde, rät IDC<br />
Kunden mit großen Rechenzentren<br />
zur Evaluation. Unter<br />
Umständen sei die Nutzung<br />
hybrider x86-/ARM-Lösungen<br />
eine gute Strategie.<br />
Von ARM-Servern könnten<br />
vor allem Hoster und Cloud-<br />
Computing-Anbieter profitieren,<br />
heißt es weiter im<br />
Onlinekommentar. Richtig<br />
interessant werde es aber erst<br />
2014, wenn leistungsfähigere<br />
64-Bit-ARM-Systeme auf den<br />
Markt kommen.<br />
n<br />
Apache Open Office 4.1 wird zugänglicher<br />
Die Entwickler der freien<br />
Office-Suite Apache Open Office<br />
arbeiten an der nächsten<br />
Version 4.1 und haben dafür<br />
einige Features zur Barrierefreiheit<br />
implementiert. Dabei<br />
wurden sowohl die von<br />
Microsoft als auch die von der<br />
<strong>Linux</strong> Foundation angegebenen<br />
Accessibility-APIs integriert,<br />
schreiben die Macher in<br />
ihrem Blog [https://blogs.apache.<br />
org/OOo/].<br />
Microsoft Active Accessibility<br />
(MSAA) richtet sich wenig<br />
überraschend an Windows-<br />
Anwender. Das I-Accessible-<br />
2-API der <strong>Linux</strong> Foundation<br />
gehört zur gleichnamigen Bibliothek,<br />
die seit Mitte 2010<br />
unter der BSD-Lizenz steht.<br />
Mit ihr will die Stiftung die<br />
Lücken füllen, die MSAA offen<br />
lässt, und Microsofts API<br />
ergänzen, damit die bereits in<br />
MSAA investierte Arbeit von<br />
Nutzen bleibt.<br />
Screen Reader und assistierende<br />
Tools wie Jaws, Magic,<br />
Window Eyes, NVDA sowie<br />
Zoomtext sollten in der nächsten<br />
Version von Apache Open<br />
Office, geplant für Anfang<br />
2014, funktionieren und etwa<br />
sehbehinderte Nutzer besser<br />
unterstützen. Bis dahin wollen<br />
die Entwickler aber noch<br />
am Code zur Barrierefreiheit<br />
feilen, der aus IBMs Lotus-<br />
Symphony-Projekt stammt. n<br />
Zahlen & Trends 02/2014<br />
Aktuell<br />
www.linux-magazin.de<br />
17<br />
Anzeige
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 02/2014<br />
18<br />
Petition fordert <strong>Linux</strong>-Treiber von Synaptics<br />
Wer ein Synaptics-Trackpad<br />
besitzt und sich über die<br />
schlechte Qualität der Treiber<br />
unter <strong>Linux</strong> ärgert, kann<br />
nun an einer Onlinepetition<br />
teilnehmen und den Hersteller<br />
auffordern die <strong>Linux</strong>-Welt<br />
nicht mehr so sträflich zu vernachlässigen.<br />
Keith Curtis, der Autor des<br />
Buches „After the Software<br />
Wars“, hatte die Petition auf<br />
Change.org [https://www.change.<br />
org] Mitte November gestartet.<br />
Ihr Ziel besteht darin, den<br />
Hardwarehersteller Synaptics<br />
zur Entwicklung funktionierender<br />
<strong>Linux</strong>-Treiber für dessen<br />
Trackpads zu drängen.<br />
Die Petition, so Curtis in seinem<br />
Blog, enthalte drei Forderungen:<br />
Erstens solle der<br />
Eine Petition fordert Synaptics auf, <strong>Linux</strong>-Treiber für ihre Hardware zu liefern.<br />
Hersteller die proprietären<br />
Treiber unter die GPL stellen<br />
oder sie als Public Domain<br />
freigeben. Zweitens solle die<br />
550 Mann starke Firma einen<br />
Kernelentwickler einstellen,<br />
der die Treiber pflegt, und drittens<br />
möge man KDE, Gnome<br />
und Xfce helfen die Gesten<br />
und Funktionen einzubauen.<br />
All das geschehe derzeit nicht<br />
und sei ein Ärgernis für viele<br />
Hardwarebesitzer. Die Petition<br />
hat bis Anfang Dezember<br />
knapp die Hälfte der nötigen<br />
500 Stimmen gesammelt. n<br />
Offenen Auges<br />
Open Source im Koalitionsvertrag<br />
Wie das Open Source Obser<br />
vatory berichtet, zeigen<br />
Kranken häuser in Großbritannien<br />
Interesse an einer<br />
Open-Source-Software namens<br />
Open Eyes [http://www.<br />
openeyes.org.uk], mit der sich<br />
elektronische Patientenakten<br />
in der Augenheilkunde verwalten<br />
lassen.<br />
Entwickelt und bereits eingesetzt<br />
werde die Software<br />
im Moorfields Eye Hospital,<br />
komme aber auch in den<br />
Krankenhäusern von Cardiff<br />
und Maidstone zum Zuge,<br />
berichtet Bill Aylward, einer<br />
ihrer Hauptentwickler.<br />
Open Eyes funktioniert Webbasiert<br />
und liegt in Version 1.5<br />
vor. Die Software ist auf einige<br />
Bereiche der Augenheilkunde<br />
spezialisiert. Das will man<br />
jedoch ändern: Aylwards hat<br />
mit Kollegen eine Firma gegründet,<br />
die Support für das<br />
System leisten und bei der Installation<br />
helfen möchte. Sie<br />
will die Software zukünftig fit<br />
für sämtliche Sparten der Augenheilkunde<br />
machen. n<br />
„Erfreuliche Anzeichen“ sieht<br />
die Open Source Business Alliance<br />
(OSBA) im Koalitionsvertrag<br />
der zu erwartenden<br />
Bundesregierung, warnt aber<br />
vor allzu hohen Erwartungen.<br />
Der Vorstandsvorsitzende Peter<br />
Ganten hob auch die wichtige<br />
Rolle von Open Source in<br />
Sachen Sicherheit und Unabhängigkeit<br />
hervor: „Die beste<br />
IT-Sicherheit erreicht man mit<br />
Open Source, da nur hier der<br />
Quellcode umfassend und uneingeschränkt<br />
einsehbar und<br />
überprüfbar ist.“<br />
Version 6.2 von Typo 3 erscheint verspätet<br />
Die geplante Release der Version<br />
6.2 von Typo 3 [http://<br />
typo3.org] mit Langzeitsupport<br />
verzögert sich um drei<br />
Monate und soll nun am 25.<br />
März 2014 stattfinden.<br />
Es habe einfach zu viele<br />
Blocker gegeben, heißt es in<br />
einem Blogeintrag, um diese<br />
Auch Peter Ganten, Vorstandsvorsitzender<br />
der OSBA, äußerte sich zum<br />
Koalitionsvertrag.<br />
im geplanten Zeitrahmen aus<br />
dem Weg zu räumen.<br />
Also habe man die Idee der<br />
Verschiebung auf der Entwickler-Mailingliste<br />
diskutiert<br />
und überwiegend positives<br />
Feedback erhalten. Der Support<br />
für Version 4.5 von Typo<br />
3 werde nun auf den Zeitraum<br />
Kritik wird laut, weil der Vertrag<br />
allzu unkonkret bleibt.<br />
Die OSBA hofft, die kommende<br />
Regierung wolle den<br />
Einsatz quelloffener Software<br />
„nicht nur erwägen [wie auf<br />
Seite 152 beschrieben], sondern<br />
auch aktiv fördern“, so<br />
wie es etwa in Großbritannien<br />
bereits Usus sei. Als Beispiele<br />
für Open-Source-Erwähnungen<br />
im Koalitionsvertrag hebt<br />
die OSBA vier Zitate hervor:<br />
In den Bereichen Schlüsselindustrien,<br />
Sicherheit, transparenter<br />
Staat und moderne<br />
Verwaltung verweist der Vertrag<br />
explizit auf Open-Source-<br />
Software oder Open Data. n<br />
bis zum März 2015 ausgeweitet,<br />
um ein Jahr Überlappung<br />
zu gewährleisten.<br />
Stabilitätsprobleme gebe es<br />
unter anderem noch mit dem<br />
File Abstraction Layer (FAL)<br />
sowie mit IRRE (Inline Relational<br />
Record Editing). (kki/<br />
mfe/mhu)<br />
n
Aktuell<br />
www.linux-magazin.de Kernel-News 02/2014<br />
20<br />
Zacks Kernel-News<br />
Fliegender User-Wechsel für Fileserver<br />
Jim Lieb vom Storage-Spezialisten<br />
Panasas hat mit<br />
»switch_creds()« einen neuen<br />
Systemcall eingereicht. Er soll<br />
es Userspace-Dateiservern ermöglichen,<br />
Dateien mit den<br />
Berechtigungen ihrer Benutzer<br />
zu schreiben. Das soll auch<br />
dafür sorgen, dass deren Quotas<br />
und Zugriffsbeschränkungen<br />
greifen. Derzeit ist unter<br />
<strong>Linux</strong> eine Kombination von<br />
»setfsuid()«, »setfsgid()«, »setgroups()«<br />
und anderen System<br />
aufrufen notwendig, um<br />
die Berechtigungen umzusetzen.<br />
Jims Lösung soll den Prozess<br />
vereinfachen.<br />
Al Viro sah sich Jims Implementierung<br />
an und fand keinen<br />
Gefallen daran. Seiner<br />
Meinung nach verwendet sie<br />
unnötige Zaubereien und zu<br />
komplexe Datenstrukturen.<br />
Um zu zeigen, wie sich die<br />
Logik einfacher ausdrücken<br />
ließe, schickte er eine eigene<br />
Umsetzung ein.<br />
Darauf gab Eric W. Biederman<br />
zu bedenken, Al Viros Code<br />
Mit diesem If-Statement möchte Eric W. Biederman verhindern, dass Fileserver-<br />
Benutzer zu viele Berechtigungen erhalten.<br />
benötige auch passende Capabilities.<br />
Jim sah die Vorteile<br />
der neuen Implementierung<br />
und begann seinen eigenen<br />
Code zu überarbeiten.<br />
Eric fügte hinzu, man müsse<br />
prüfen, ob der verwendete<br />
Benutzer nicht zufällig zu<br />
viele Capabilities erhalte. Zu<br />
diesem Zweck schickte er ein<br />
langes If-Statement an die<br />
Mailingliste. Andy Lutomirski<br />
meldete sich zu Wort und sah<br />
kein Problem mit den Capabilities.<br />
Ihn stört aber, dass<br />
die Funktion einen beliebigen<br />
File deskriptor entgegennimmt.<br />
Das hält er für ein Sicherheitsproblem,<br />
denn über<br />
den Deskriptor könne der<br />
Benutzer weitere Berechtigungen<br />
erhalten. Er fügte hinzu:<br />
„Ich mache es mir zu einer<br />
persönlichen Aufgabe, einen<br />
Exploit dafür zu finden.“<br />
Darauf wandte Eric ein, er habe<br />
hauptsächlich eine Lösung<br />
für Jims Anwendungsszenario<br />
angeboten. Eine generische<br />
Verwendung des neuen Systemcalls<br />
habe er nicht im Sinn.<br />
Auf Andys Sicherheitsbedenken<br />
erwiderte er: „Wenn man<br />
damit zu keiner UID oder GID<br />
wechseln kann, zu der man<br />
sonst auch nicht wechseln<br />
darf, gibt es im schlimmsten<br />
Fall ein Information Leak.“<br />
Seiner Meinung nach ist das<br />
neue Feature nicht unsicherer<br />
als die bisherige Lösung.<br />
Jim und Andy diskutierten<br />
noch eine Weile über Designfragen,<br />
bis der japanische<br />
Entwickler Tetsuo Handa dazustieß.<br />
Er hatte eine kurze<br />
Zeitspanne in der Prozedur<br />
gefunden, während der ein<br />
Angreifer sich höhere Privilegien<br />
erschwindeln könnte.<br />
Jim gab ihm recht, betonte<br />
aber, dass das in seinem<br />
Anwendungsszenario nicht<br />
auftrete.<br />
Insgesamt scheint Jims Idee<br />
Unterstützer zu finden: einfacher<br />
zwischen Berechtigungen<br />
umschalten. Zuerst müssen<br />
aber die Sicherheitsbedenken<br />
ausgeräumt sein.<br />
n<br />
Menuconfig bleibt<br />
Der griechische Entwickler Aldo<br />
Iljazi schlägt vor, die Kernelkonfiguration<br />
per »make<br />
menuconfig« abzuschaffen.<br />
Schließlich sei das Target redundant,<br />
seit das modernere<br />
»make nconfig« in Version<br />
2.6.35 eingezogen ist, schreibt<br />
er. Der Vorschlag trifft allerdings<br />
auf Widerstand: Alexander<br />
Holler gibt zu bedenken,<br />
dass Nconfig die Funktionstaste<br />
[Fn] verwendet, die es<br />
nicht auf allen Tastaturen<br />
gibt. Das Argument sei nicht<br />
ganz aufrechtzuerhalten,<br />
wirft Randy Dunlap ein: Alternativ<br />
könne der Dialog<br />
Nummerntasten verwenden.<br />
Dennoch sieht Randy keinen<br />
Grund dafür, Menuconfig abzuschaffen.<br />
Richard Weinberger wendet<br />
ein, dass derzeit nur sehr wenige<br />
Benutzer Nconfig verwenden,<br />
während die Mehrheit<br />
Menuconfig einsetze.<br />
Alexander fügt hinzu, dass<br />
man in der alten Lösung sehr<br />
einfach mit der Tabulatortaste<br />
zwischen den Kerneloptionen<br />
wechseln kann. Noch weitere<br />
Teilnehmer machten sich für<br />
Menuconfig stark, sodass Aldo<br />
schließlich seinen Vorschlag<br />
zurückzog. n
Tmon überwacht Temperaturen<br />
Der Intel-Entwickler Jacob Pan<br />
hat Patches für ein neues Tool<br />
namens Tmon eingeschickt.<br />
Es soll helfen die zahlreichen<br />
Temperatursensoren und<br />
Kühlmechanismen zu beobachten,<br />
die Hardwarehersteller<br />
in ihre Produkte einbauen.<br />
Im Sys-FS unter »/sys/class/<br />
thermal« macht der generische<br />
<strong>Linux</strong> Thermal Layer die<br />
Daten verfügbar, es ist aber<br />
keine leichte Aufgabe, die Dateien,<br />
Verzeichnisse und Links<br />
darin auszuwerten.<br />
Auch das Testen sei schwierig,<br />
bemängelt Jacob, „denn die<br />
interessanten Temperaturdaten<br />
sind die Extreme, die im<br />
normalen Betrieb kaum vorkommen“.<br />
Eduardo Valentin<br />
von Texas Instruments zeigte<br />
sich begeistert. Er habe bisher<br />
die Thermal-Testing-Skripte<br />
des Linaro-Projekts verwendet,<br />
sei damit aber nicht zufrieden,<br />
schrieb er. Beinahe<br />
hätte er schon selbst ein Tool<br />
wie Tmon geschrieben.<br />
Die beiden stiegen in eine<br />
Diskussion über Features, Implementierung<br />
und Tests auf<br />
unterschiedlichen Plattformen<br />
ein. Daneben ging es um die<br />
Namensgebung: Tmon sollte<br />
sich ursprünglich nur um das<br />
Monitoring kümmern, doch<br />
Jacob baute schließlich auch<br />
Möglichkeiten ein, die Kühlung<br />
zu regulieren. n<br />
»chroot()« weiterhin unsicher<br />
Der amerikanische Entwickler<br />
Robert Landley möchte schon<br />
lange ein Security-Problem<br />
im Systemcall »chroot()« beheben.<br />
Ein User kann sich aus<br />
einer Chroot befreien, indem<br />
er darin die folgenden Systemaufrufe<br />
absetzt:<br />
chdir("/");<br />
mkdir("sub");<br />
chroot("sub");<br />
chdir("./../../../../../../../..");<br />
Linus Torvalds antwortet ihm,<br />
dass auszubrechen ziemlich<br />
leicht sei, »chroot()« sicher zu<br />
machen aber extrem schwierig<br />
– besonders dann, wenn<br />
Root im Spiel sei. Al Viro konstatiert:<br />
„»chroot()« ist einfach<br />
nicht Root-sicher und war es<br />
auch noch nie. Wer das verlangt,<br />
hat vergessen, die FAQ<br />
zu lesen.“<br />
Linus ergänzt: „Das macht<br />
»chroot()« nicht nutzlos, es<br />
hat andere Anwendungsbereiche.<br />
Es taugt für nicht sicherheitsrelevante<br />
Dinge wie Entwicklungsumgebungen,<br />
daneben<br />
kann es eine Rolle in<br />
größeren Umgebungen wie<br />
etwa einer virtuellen Maschine<br />
spielen. […] Besser dafür<br />
geeignet, Dinge einzusperren,<br />
ist »pivot_root()«. Es mag<br />
nicht der hübscheste Systemcall<br />
sein, umgeht aber die<br />
ärgsten Chroot-Probleme.“<br />
(Zack Brown/mhu) n<br />
Kernel-News 02/2014<br />
Aktuell<br />
www.linux-magazin.de<br />
21<br />
JETZT NEU<br />
AM KIOSK!<br />
• 160 Seiten umfangreiches<br />
Know-how zu GIMP 2.8.6<br />
• Installation, Funktionen, Tools<br />
und Praxis-Anwendungen<br />
• für Einsteiger, Fortgeschrittene<br />
und Profi-Anwender<br />
Mit DVD für<br />
nur 9,80 Euro<br />
Hier gleich bestellen:<br />
medialinx-shop.de/gimp-magazin
Titelthema<br />
www.linux-magazin.de Wissensverwaltung 02/2014<br />
22<br />
Knowledge-Base-Software<br />
Hort des Wissens<br />
Verstreut auf dem Fileserver liegende Dokumente skalieren schlecht, wenn der Admin am Helpdesk Probleme<br />
lösen muss. Freie Knowledge-Base-Komponenten bündeln Wissen und sorgen für mehr Überblick. Kristian Kißling<br />
© David Maska, 123RF.com<br />
Helpdesks sind die Aushängeschilder<br />
von Unternehmen. Ihre technisch geschulten<br />
Mitarbeiter sollen höflich und<br />
ziel orientiert Probleme bearbeiten. Das<br />
gilt auch und gerade für den IT-Bereich,<br />
in dem Admins und Entwickler die Softwarebugs<br />
ihrer Kunden beheben. Sie notieren<br />
nicht nur die wichtigsten Daten zu<br />
einem Problem und füttern das Ticketsystem<br />
damit, sondern sie lösen das Problem<br />
am besten gleich am Telefon oder per<br />
E-Mail. Im Idealfall beantworten sie 80<br />
bis 90 Prozent aller Anfragen selbst und<br />
reichen nur die Härtefälle an Spezialisten<br />
weiter.<br />
Die Erfolgsquote hängt unter anderem davon<br />
ab, ob die Firma eine Kultur fördert,<br />
die das Sammeln und Dokumentieren<br />
von Wissen begünstigt und ob sie einen<br />
klaren Workflow für die Problembearbeitung<br />
schafft. Die Helpdesk-Mitarbeiter<br />
fischen regelmäßig im Trüben, wenn<br />
wichtige Informationen breit verteilt auf<br />
PDFs, Wikis, IRC-Logs und Bugreports<br />
im Intranet schlummern. Eine Wissensdatenbank,<br />
auf englisch Knowledge Base<br />
genannt, soll Abhilfe schaffen, indem sie<br />
die Know-how-Fragmente zusammenführt<br />
und zugänglich macht.<br />
Abhängig von den Ansprüchen der Firma<br />
fallen die Anforderungen an die Knowledge<br />
Base unterschiedlich aus. Zwar<br />
existieren alleinstehende Knowledge-<br />
Base-Anwendungen, aber meist ist die<br />
Datenbank Bestandteil eines größeren<br />
Systems zur Arbeitsorganisation, etwa<br />
einer Produktionsmanagementsoftware<br />
(PMS) oder eines ITIL-konformen IT-<br />
Service-Management (ITSM). Der Artikel<br />
stellt freie Knowledge-Base-Komponenten<br />
vor, angefangen bei Wikis über Projektmanagement-<br />
bis hin zu ITIL-Tools.<br />
Help, I need some Wiki!<br />
In kleinen Firmen, Start-ups oder Unternehmen<br />
ohne Helpdesk besitzt die Organisation<br />
des Wissens häufig eine recht ge-<br />
ringe Priorität. Meist existiert eine mehr<br />
oder weniger logische Ordnerstruktur auf<br />
dem Dateiserver, in der sich auch Hilfedokumente<br />
und Anleitungen verstecken.<br />
Zusätzlich lagert das Wissen in persönlichen<br />
E-Mails und im Gedächtnis der<br />
Admins, wodurch wertvolles Know-how<br />
verloren geht, sobald ein Mitarbeiter die<br />
Firma verlässt.<br />
Als Erste-Hilfe-Maßnahme kommt meist<br />
ein Wiki zum Einsatz, oder jemand begradigt<br />
die wild gewachsene Ordnerstruktur.<br />
Auch FAQs im Intranet gelten als<br />
beliebtes Mittel, um Wissen in der Firma<br />
verfügbar zu machen.<br />
Drinnen und Draußen<br />
Generell lässt sich in einer Firma zwischen<br />
Wissen für den internen und externen<br />
Gebrauch unterscheiden. Webhoster<br />
machen zum Beispiel technisches Wissen<br />
für ihre Kunden in FAQs oder Howtos online<br />
verfügbar. Kundenfragen lassen sich<br />
in diesem Fall mit Verweis auf das Wiki<br />
oder die FAQ beantworten, was aber voraussetzt,<br />
dass jemand diese Dokumente<br />
ständig pflegt.<br />
Größere Unternehmen setzen in jüngster<br />
Zeit auch auf Stack-Exchange-Plattformen<br />
wie Stack Overflow [1]. Interessierte Nutzer<br />
dürfen Fragen formulieren und dann<br />
unter vielen Antworten anderer User die<br />
beste heraussuchen. Der Fragesteller<br />
selbst und die Community bewerten die<br />
Delug-DVD<br />
Der Quellcode zahlreicher im<br />
DELUG-DVD<br />
Artikel besprochener Systeme befindet sich<br />
auf der beiliegenden Delug-DVD, das betrifft<br />
Trac, Redmine, Request Tracker und einige<br />
Wikis. Für OTRS bringt die DVD eine Appliance<br />
mit, von Twiki eine virtuelle Maschine für den<br />
Einsatz mit VMware und Virtualbox.
ualität der Antworten und sorgen so für<br />
Relevanz. Gute Stack Exchanges funktionieren<br />
aber nur, wenn jemand die Fragen<br />
permanent in eine verständliche Form<br />
bringt, unangemessene und doppelte Inhalte<br />
löscht und Tags zuweist.<br />
Zwei freie Plattformen dieser Stoßrichtung<br />
heißen Open Source Q&A [2] und<br />
Shapado [3] und sind unter der GPL<br />
respektive der AGPL lizenziert.<br />
Wikimania<br />
Wissensverwaltung 02/2014<br />
Titelthema<br />
www.linux-magazin.de<br />
23<br />
Geht es um die interne Firmenkommunikation,<br />
steht nach wie vor das Mediawiki<br />
hoch im Kurs, für das die Statistikwebseite<br />
Ohloh fast 200 Codezuträger zählt<br />
[4]. Es setzt aktuell einen installierten<br />
PHP-Server ab Version 5.3.2 voraus<br />
sowie eine damit verknüpfte MySQL-,<br />
PostgreSQL- oder SQLite-Datenbank. Mit<br />
Hilfe einer LDAP-Extension [5] sorgt der<br />
Admin dafür, dass sich die Mitarbeiter<br />
vor dem Erstellen von Einträgen identifizieren.<br />
So ist später klar, von wem ein<br />
Eintrag stammt.<br />
Weniger computeraffine Nutzer unterstützt<br />
ein Wysiwyg-Editor [6] oder<br />
zumindest ein Hilfe-Link auf die Wiki-<br />
Syntax. Die Struktur der Wiki-Einträge<br />
sollte einigermaßen logisch, die Titel der<br />
Beiträge möglichst aussagekräftig sein,<br />
damit die integrierte Suchfunktion sie<br />
gut findet. Zudem nutzt es, Einträge mit<br />
Dateien verknüpfen zu können, etwa mit<br />
Bildern, PDFs oder Dokumenten.<br />
Zum populären Mediawiki gibt es zahlreiche<br />
Alternativen, unter anderem Doku-<br />
Wiki [8], Moin Moin [9], Tiki Wiki [10],<br />
aber auch Twiki [11], Foswiki [12] und<br />
Xwiki [13]. Die letzten drei orientieren<br />
sich vornehmlich an Unternehmensanforderungen.<br />
Sie bringen aufgeräumte Oberflächen<br />
mit, integrieren standardmäßig<br />
einen Wysiwyg-Editor, bieten RSS-Feeds<br />
an, und bei Bedarf helfen kommerzielle<br />
Dienstleister beim Einrichten. Einige Wikis<br />
sind fast Projektmanagement-Tools,<br />
so etwa das Tiki Wiki (Abbildung 1), das<br />
die Macher entsprechend als „Tiki Wiki<br />
CMS Groupware“ titulieren.<br />
Projekte, Projekte<br />
Abbildung 1: Das mit Features gespickte Tiki Wiki überschreitet die Grenze zur Groupware.<br />
Häufig läuft der Hase aber auch in die<br />
andere Richtung: Neben PMS integrieren<br />
auch einige Bugtracker Wikis als Knowledge-Base-Komponente.<br />
Diese auf Softwarefehler<br />
abonnierten Ticketsysteme,<br />
zu denen etwa Mantis BT [14] und Roundup<br />
[15] gehören, erlauben Wiki-Engines<br />
einzubinden, was mitunter aber einen gewissen<br />
Aufwand erfordert. Andere Bugtracker<br />
wie Bugzilla [16] verzichten auf<br />
eine Knowledge-Base-Komponente und<br />
bringen Zusatzinformationen in Freitextfeldern<br />
unter.<br />
Im Vergleich mit Wikis eignet sich Projektmanagementsoftware<br />
wesentlich<br />
besser für Helpdesk-Arbeiter. Sie bringt<br />
als zentrale Komponente einen Issue Tracker<br />
mit, der anders als ein Bugtracker<br />
auch Probleme verwaltet, die nichts mit<br />
Software zu tun haben. Klemmt in der<br />
Firma die Eingangstür oder müssen neue<br />
Mülleimer her, kann ein Mitarbeiter ein<br />
Ticket öffnen – ein reines Bugreport-Tool<br />
eignet sich dafür schlecht. Zum Öffnen<br />
eines Tickets sendet der Mitarbeiter eine<br />
E-Mail an eine bestimmte Adresse. Die<br />
PMS generiert aus dem Inhalt („Hey, wir<br />
brauchen neue Mülleimer!“) automatisch<br />
ein Ticket. Anrufe von Kunden wandeln<br />
die Helpdesk-Mitarbeiter hingegen direkt<br />
am Telefon in Tickets um.<br />
Die Probleme erhalten so eine individuell<br />
verfolgbare Nummer. Ihr ordnet der<br />
Ticketbetreuer dann diverse (Meta)-Informationen<br />
zu, wie etwa den Absender und<br />
Bearbeiter des Tickets, das Datum sowie<br />
den aktuellen Bearbeitungsstatus. Auch<br />
Inhalte aus der Knowledge Base oder<br />
einer FAQ kann ein Ticket aufnehmen,<br />
beispielsweise PDF-Dokumente, Artikel<br />
oder Links.<br />
Die meisten PMS arbeiten webbasiert,<br />
nicht selten kommt als Knowledge-Base-<br />
Komponente ein Wiki zum Einsatz. Das<br />
wirft die Frage auf, was eine Wissensdatenbank<br />
eigentlich leisten muss.<br />
Spreu vom Weizen<br />
In erster Linie soll eine Knowledge Base<br />
es ermöglichen, Wissensressourcen in<br />
Form von Artikeln und Dateien anzulegen<br />
und sie anderen möglichst jederzeit<br />
und schnell verfügbar zu machen. Eine<br />
intelligente Kategorisierung über Hierarchien,<br />
Metadaten und Tags hilft, Informationen<br />
zu einem Thema später möglichst<br />
schnell wiederzufinden. Noch wichtiger<br />
ist eine gute Suchmaschine, welche die<br />
Daten – auch die der Attachments – nicht<br />
nur schnell durchsucht, sondern zudem<br />
relevante Ergebnisse liefert.<br />
Die Wissensdatenbank sollte so in den<br />
Helpdesk integriert sein, dass es wenig<br />
Umstände macht, neue Artikel anzulegen,<br />
sie einem Ticket zuzuordnen oder bestehende<br />
Artikel zu ändern und zu löschen.<br />
Dienen E-Mails, Wiki-Einträge und Dokumente<br />
im PDF-Format als Datenquellen<br />
für Wissen, sollte das System auch ihre<br />
Inhalte in die Wissensdatenbank übertragen<br />
und die Suchmaschine diese indexieren.<br />
Idealerweise muss auch ein Nicht-<br />
Admin nach einer Einarbeitungszeit in<br />
der Lage sein, den Helpdesk und die damit<br />
verbundene Knowledge Base sicher<br />
zu bedienen.<br />
Neben den technischen spielen auch soziale<br />
Komponenten eine tragende Rolle:<br />
Die Geschäftsführung einer Firma muss<br />
den Aufbau der Knowledge Base aktiv<br />
mit Ressourcen unterstützen und die Mitarbeiter<br />
im Umgang damit schulen, um
Titelthema<br />
www.linux-magazin.de Wissensverwaltung 02/2014<br />
24<br />
Abbildung 2: Erstellt der Admin in Trac ein Ticket, kann er Texte, Wiki-Inhalte und Attachments anhängen.<br />
sie zu motivieren, an der allgemeinen<br />
Wissenssammlung teilzunehmen.<br />
Ticket to Ride<br />
Weil es freie und kommerzielle PMS wie<br />
Sand am Meer gibt, stellt dieser Artikel<br />
exemplarisch einige Wissensdatenbanken<br />
bekannter Open-Source-Systeme vor.<br />
Bei der Suche nach verbreiteten Projektmanagement-Systemen<br />
half die Webseite<br />
Ohloh [17], die nicht nur die Aktivität in<br />
solchen Projekten verfolgt, sondern auch<br />
die Zahl der Nutzer und vor allem der<br />
beteiligten Entwickler einschätzt.<br />
ETrac<br />
Trac 1.0 [18] ist in Python geschrieben,<br />
steht unter der 3-Klausel-BSD-Lizenz,<br />
bringt unter anderem ein eigenes Ticketsystem,<br />
ein Subversion-Interface sowie<br />
ein Journal mit Timeline- und Milestone-<br />
Support mit. Die Software setzt auf dem<br />
Server Python 2.5 voraus<br />
und als Datenbank<br />
wahlweise auf MySQL,<br />
PostgreSQL oder SQ-<br />
Lite. Trac lässt sich mit<br />
etwas Aufwand auch<br />
für mehrere Projekte<br />
einsetzen.<br />
Auf der Webseite<br />
steht: „Wiki-Markup<br />
ist eine Kernfunktion<br />
von Trac“. Dem<br />
folgend nutzen viele<br />
Bereiche die Wiki-Syntax, bei Bedarf<br />
auch über einen Wysiwyg-Editor. Das<br />
Trac-Wiki fungiert hier als Knowledge<br />
Base, die Einträge verlinkt der Admin<br />
über Trac-Links direkt mit Tickets und<br />
Kommentaren (Abbildung 2).<br />
Bindet der Admin zudem Tickets über<br />
Trac-Notifications an Mailadressen,<br />
verschickt Trac bei Ticketänderungen<br />
E-Mails. Umgekehrt konvertiert das<br />
Plugin Email2trac eingehende Mails in<br />
Tickets oder aktualisiert vorhandene Tickets.<br />
Das klappt auch, wenn es sich um<br />
HTML-E-Mails handelt, die Attachments<br />
mitbringen.<br />
ERedmine<br />
Redmine [19] steht unter der GPL, basiert<br />
auf Ruby on Rails, und die Installation<br />
setzt ein Ruby ab Version 1.87<br />
voraus, Rails in Version 3.2.13 sowie die<br />
gleichen Datenbanken wie Trac. Auch<br />
Redmine hat einen Bugtracker an Bord<br />
und kann auf verschiedene Versionskontrollsysteme<br />
zugreifen (Subversion, CVS,<br />
Git und weitere).<br />
Obwohl Redmine ein Wiki im Gepäck hat,<br />
fehlt im Unterschied zu Trac der Wiki-<br />
Look mit den eher irritierenden Binnenmajuskeln<br />
in Links und Texten. Es ähnelt<br />
vom Look & Feel einem klassischen CMS<br />
(Abbildung 3) und verwendet mit Textile<br />
eine leichtgewichtige Markup-Sprache.<br />
Im Umgang mit mehreren Projekten legt<br />
es auf Wunsch für jedes Subprojekt Wikis<br />
und Foren an.<br />
Auch Redmine erlaubt es seit Version<br />
0.8.0, Tickets, aber auch Kommentare,<br />
per E-Mail zu erzeugen und zu aktualisieren.<br />
Dazu ist wahlweise ein eigener<br />
E-Mail-Server nötig oder ein Cronjob,<br />
der E-Mails über IMAP und POP3 abholt<br />
[20]. Umgekehrt erhalten die Ticketverwalter<br />
E-Mails, wenn es Änderungen an<br />
einem Ticket gibt. Aktiviert ein Redmine-<br />
Anwender die so genannten Watcher im<br />
Wiki, empfängt er E-Mails, wenn sich<br />
Wiki-Einträge ändern oder wenn ein Anwender<br />
neue Artikel, Dokumente, Dateien<br />
oder Wiki-Einträge einstellt.<br />
Neben dem Wiki steht als Plugin auch<br />
eine klassische Knowledge Base bereit<br />
[21], nach deren Installation ein entsprechender<br />
Eintrag im Navigationsmenü<br />
erscheint. Der Redmine-User kann nun<br />
nicht nur Artikel schreiben, bearbeiten<br />
und löschen, sondern auch Kategorien<br />
und Subkategorien anlegen, Artikel bewerten,<br />
kommentieren, taggen und mit<br />
Dateianhängen versehen. Ein Dashboard<br />
zeigt die jüngst angelegten, beliebtesten<br />
und bestbewerteten Artikel an.<br />
ERequest Tracker<br />
Unter anderem eingesetzt von der Free<br />
Software Foundation, Nasa, Wikia und<br />
Abbildung 3: Über das Administrationsinterface von Redmine lassen sich Plugins einbinden und konfigurieren.
der University of Camebridge existiert der<br />
in Perl verfasste und unter GPL stehende<br />
Request Tracker [22] bereits seit 1999.<br />
Die Firma dahinter heißt Best Practical<br />
Solutions und bietet Support an. Aktuell<br />
ist die Version 4.2, die Installation setzt<br />
einen Apache mit »mod_perl« oder Fast-<br />
CGI sowie Perl 5.10.1 aufwärts voraus.<br />
Neben den drei üblichen Verdächtigen<br />
unterstützt Request Tracker (kurz RT)<br />
auch Oracles Datenbank ab 9iR2.<br />
Die PMS bringt ein übersichtliches Dashboard<br />
mit, ermöglicht eine LDAP- und<br />
Active-Directory-Anbindung, zeigt im Ticketsystem<br />
Relationen zwischen Tickets<br />
grafisch an und hat ein Time-Tracking-<br />
Modul im Gepäck.<br />
Bis zur Version 4.0 existierte die Knowledge<br />
Base als alleinstehendes Modul mit<br />
dem schönen Namen RTFM (hier für „RT<br />
FAQ Manager“), nun ist sie fester Bestandteil<br />
von RT und lässt sich über den<br />
Menüpunkt »Articles« erreichen (Abbildung<br />
4). Hier kann der Nutzer Artikel<br />
anlegen, ändern, suchen, nach Klassen<br />
und Topics organisieren oder global verfügbar<br />
machen. Für Artikel definiert der<br />
Nutzer auf Wunsch spezielle Felder, die<br />
er einer Klasse zuweist. Zugriffe lassen<br />
sich auf bestimmte Benutzergruppen<br />
einschränken. Nicht zuletzt gibt es aus<br />
Kompatibilitätsgründen ein Archiv mit<br />
alten Versionen von Artikeln.<br />
Aktiviert der Admin die Option »Article-<br />
OnTicketCreate« in »/etc/RT_Config.<br />
pm«, kann er eine »Article Hotlist« in<br />
Form eines Drop-down-Menüs in den<br />
»Create‐Ticket«-Dialog einbauen. Knowledge-Base-Artikel<br />
lassen sich zudem über<br />
die Antwort- und Kommentarfunktion in<br />
Tickets integrieren, wahlweise mit oder<br />
ohne Verweise auf die Quelle. Umgekehrt<br />
wandelt der Benutzer über »Extract to<br />
article« Tickets in RTFM-Artikel um. Die<br />
Inhalte des Tickets kann er bestimmten<br />
Feldern einer Artikelklasse zuordnen.<br />
ITIL inside<br />
ITIL, die IT Infrastructure Library, stellt<br />
einen international akzeptierten Defacto-Standard<br />
für die Organisation der<br />
Unternehmens-IT (IT Service Management)<br />
dar und kommt meist in größeren<br />
(IT)-Firmen zum Einsatz. Eine Reihe von<br />
Büchern beschreibt Best Practices, die<br />
dabei helfen, im Unternehmen eine optimale<br />
IT-Infrastruktur aufzubauen, wobei<br />
der ITIL-Jünger nicht sämtliche Details<br />
umsetzen muss. In den Publikationen zu<br />
ITIL 3, der aktuellen Variante von ITIL,<br />
spielt im Bereich Service Transition erstmals<br />
auch das Knowledge Management<br />
eine Rolle [23].<br />
Zwar lassen sich Softwarelösungen nicht<br />
nach ITIL zertifizieren, doch gibt es freie<br />
Service-Management Lösungen, die eigene<br />
Knowledge-Base-Komponenten mitbringen<br />
und von sich behaupten, ITILkonform<br />
zu sein. Im Helpdesk-Bereich<br />
gehören Itop [24] und das OTRS-Framework<br />
[25, 26] (Open Ticket Request<br />
System) dazu.<br />
EOTRS<br />
OTRS ITSM ist die ITSM-Komponente<br />
des Open-Source-Stack der Open Source<br />
Business Alliance (OSBA), steht unter der<br />
AGPL und ist in Version 3.3.2 erhältlich.<br />
Programmiert in Perl und ausgestattet mit<br />
einer Javascript-Weboberfläche, setzt es<br />
einen Apache-2-Server mit »mod_perl2«<br />
und Perl ab Version 5.10.0 voraus. Es<br />
unterstützt mit MySQL, PostgreSQL,<br />
Oracle 10g, Microsoft SQL 2005 und DB2<br />
ein beachtliches Spektrum an Datenbanken,<br />
kennt mehrere Authentifizierungsmethoden<br />
(LDAP, Radius, HTTP-Auth)<br />
und lässt sich mit Monitoring-Tools und<br />
externen Kundendatenbanken verknüpfen.<br />
Es ist dank integrierter Historie revisionssicher,<br />
gilt als gut anpassbar [27]<br />
und bietet eine umfangreiche Liste an<br />
Features [28].<br />
Als Knowledge Base arbeitet ein FAQ-<br />
Modul, das der Admin separat über einen<br />
integrierten Paketmanager installiert.<br />
Anschließend lässt sich das Modul für<br />
den internen, neuerdings auch für den<br />
externen Einsatz (über Generic Interface,<br />
das Webservice-Framework) konfigurieren.<br />
Mit den FAQ-Einträgen lassen sich<br />
neben Artikeln auch Tickets und Items<br />
der Configuration Management Database<br />
(CMDB) verlinken. Die Artikelverlinkung<br />
klappt seit Version 2.2.x auch über Kategorienamen.<br />
Das FAQ-Modul besteht aus mehreren<br />
Komponenten, der FAQ-Explorer lässt<br />
den Admin durch die Wissenssammlung<br />
navigieren. Will er anschließend einen<br />
Artikel erstellen, steht ihm ein Wysiwyg-<br />
Editor zur Seite, Artikel lassen sich dabei
Titelthema<br />
www.linux-magazin.de Wissensverwaltung 02/2014<br />
26<br />
Abbildung 4: Das RTFM-Modul ist seit Version 4.0 fest in Request Tracker integriert und erlaubt das Erstellen<br />
und Klassifizieren von Artikeln. Diese lassen sich dann auch mit Tickets kombinieren.<br />
mit verschiedenen Attributen verknüpfen.<br />
Diese signalisieren etwa, ob der<br />
Artikel ein Symptom schildert oder ein<br />
Problem löst. Titel, Sprache und Kategorie<br />
kann der Admin ebenso festlegen wie<br />
anklickbare Schlagwörter. Auch gängige<br />
Metadaten wie der Status, das Erstellund<br />
Modifikationsdatum fehlen nicht.<br />
Artikel lassen sich mit Attachements und<br />
Bildern versehen sowie mit Objekten wie<br />
Tickets und Antworten verbinden. Eine<br />
Volltextsuche sowie eine Schnellsuche<br />
finden rasch relevante Ergebnisse. Ranking-<br />
und Abstimmfunktionen erleichtern<br />
das Einordnen der Artikel, eine Übersicht<br />
der Top-10-Artikel sowie der zuletzt angelegten<br />
und geänderten gibt es auch.<br />
E-Mails verschickt das System auf<br />
Wunsch über den eigenen Server (Sendmail,<br />
Postfix, Exim), die Konfiguration<br />
läuft über eine Weboberfläche. Fehlt der<br />
eigene Mailserver, tun es auch die sicheren<br />
oder unsicheren Varianten der Protokolle<br />
SMTP, IMAP und POP3. E-Mails<br />
lassen sich dabei auch über PGP oder<br />
S/MIME verschlüsseln und signieren.<br />
Über die Postmaster-Module kann der<br />
Admin zudem Mails mit einem X-OTRS-<br />
Header versehen, den OTRS dazu verwendet,<br />
Aktionen auszuführen. Es ändert<br />
die Priorität eines Tickets oder ordnet es<br />
einem bestimmten Kunden zu.<br />
Breites Spektrum<br />
Das Spektrum der freien Knowledge-Datenbanken<br />
ist groß und reicht von simplen<br />
Wikis und Webseiten über PMS bis<br />
hin zu ITIL-konformen Alleskönnern.<br />
ITSM-Lösungen wie OTRS und Itop kommen<br />
vor allem für Firmen in Frage, in<br />
denen die Admins in einem Aufwasch<br />
gleich die Rechnerfarm inventarisieren<br />
und das Patchmanagement erledigen<br />
möchten. Sie gehen über durchschnittliche<br />
Helpdesk-Anforderungen hinaus und<br />
in den administrativen Bereich hinein.<br />
Kleineren und mittelgroßen Unternehmen<br />
genügt häufig schon ein übersichtlicher<br />
Helpdesk mit Ticketsystem und angeschlossener<br />
Knowledge Base. Hierfür<br />
dürften kleinere Lösungen wie Redmine,<br />
Trac und Request Tracker eine gute Wahl<br />
sein, wobei letzteres auch schon in Richtung<br />
ITSM geht.<br />
Wichtig ist, dass sich die Knowledge Base<br />
gut in die Ticketverwaltung integriert.<br />
Wer Wikis aufgrund ihrer Neigung zur<br />
Entropie und der Syntax nicht mag, greift<br />
in Sachen Knowledge Base am Besten zu<br />
RT oder dem erwähnten Redmine-Plugin.<br />
Wiki-Freunde dürften hingegen mit dem<br />
beliebten Trac gut fahren.<br />
Am Ende steht aber meist ein Feature-<br />
Vergleich: Dann entscheidet sich, wie gut<br />
die Software dokumentiert und wie benutzbar<br />
das Web-GUI ist oder ob sich die<br />
Tools gut mit der PMS verstehen.<br />
Weil einige Hersteller Demo-Installationen<br />
im Netz anbieten, lassen sich die<br />
in einer Firma auftretenden Fälle am lebenden<br />
Objekt durchexerzieren, wobei<br />
sich dann auch die Stärken und Schwächen<br />
einer Software zeigen. Geht es nur<br />
um Bugreports im Rahmen eines Softwareprojekts,<br />
tun es auch Bugtracker wie<br />
Mantis und Bugzilla.<br />
Reine Wikis eignen sich nur als Wissensspeicher,<br />
ihnen fehlen gut integrierte<br />
Ticketsysteme. Das muss kein Hinderniss<br />
sein, falls eine Firma lediglich das interne<br />
Wissen organisieren möchte und ist um<br />
Längen besser, als eine Sammelsurium<br />
von Dokumenten, die verstreut auf dem<br />
Fileserver liegen. Für den Wiki-Einsatz<br />
im Unternehmensbereich bieten sich Spezialplattformen<br />
wie Twiki, Foswiki oder<br />
Xwiki an. Letztlich hängt diese Entschei-<br />
dung aber auch von der eingesetzten Programmiersprache,<br />
der Benutzbarkeit des<br />
Editors oder der Suchfunktion ab. n<br />
Infos<br />
[1] Stack Overflow:<br />
[http:// stackoverflow. com]<br />
[2] Open Source Q&A: [http:// www. osqa. net]<br />
[3] Shapado: [http:// shapado. com]<br />
[4] Mediawiki auf Ohloh:<br />
[https:// www. ohloh. net/ p/ mediawiki]<br />
[5] LDAP mit Mediawiki:<br />
[https:// www. mediawiki. org/ wiki/<br />
Extension:LDAP_Authentication]<br />
[6] Mediawiki-Editor: [https:// www.<br />
mediawiki. org/ wiki/ Extension:WYSIWYG]<br />
[7] Wiki-Matrix: [https:// en. wikipedia. org/<br />
wiki/ Comparison_of_wiki_software]<br />
[8] Doku-Wiki: [https:// www. dokuwiki. org]<br />
[9] Moin-Moin-Wiki: [http:// moinmo. in]<br />
[10] Tiki Wiki: [http:// tiki. org]<br />
[11] Twiki: [http:// twiki. org]<br />
[12] Foswiki: [http:// foswiki. org]<br />
[13] Xwiki: [http:// www. xwiki. org]<br />
[14] Mantis: [http:// www. mantisbt. org]<br />
[15] Roundup: [http:// roundup. sf. net]<br />
[16] Bugzilla: [http:// www. bugzilla. org]<br />
[17] PMS auf Ohloh: [https:// www. ohloh. net/<br />
tags/ project_management]<br />
[18] Trac: [http:// trac. edgewall. org]<br />
[19] Redmine: [http:// www. redmine. org]<br />
[20] Redmine und E-Mail:<br />
[http:// www. redmine. org/ projects/<br />
redmine/ wiki/ RedmineReceivingEmails]<br />
[21] Knowledge Base für Redmine:<br />
[https:// github. com/ alexbevi/ redmine_<br />
knowledgebase]<br />
[22] Request Tracker:<br />
[http:// www. bestpractical. com/ rt/]<br />
[23] Oliver Kluge, „Suche nach Struktur“:<br />
<strong>Linux</strong> <strong>Magazin</strong> 12/13,<br />
[http://www.linux-magazin.de/<br />
Ausgaben/2013/12/ITIL/]<br />
[24] Itop: [http:// www. itomig. de/ produkte/<br />
itop. html]<br />
[25] Tim Schürmann, „Virtueller Kundenservice“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 03/11,<br />
[http://www.linux-magazin.de/<br />
Ausgaben/2011/04/Ticketsysteme]<br />
[26] OTRS: [http:// www. otrs. com]<br />
[27] Stefan Schwarz, „Die Tickets, bitte!“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 03/11,<br />
[http:// www. linux‐magazin. de/ Ausgaben/<br />
2009/ 03/ Die‐Tickets‐bitte]<br />
[28] OTRS-Features: [http:// doc. otrs. org/ 3. 3/<br />
en/ html/ otrs. html# features‐of‐otrs]
Basics. Projekte.<br />
Ideen. Know-how.<br />
NEU!<br />
Mini-Abo<br />
zwei Ausgaben<br />
nur 9,80 €<br />
Jetzt bestellen!<br />
www.medialinx-shop.de/raspberry-pi-geek
Titelthema<br />
www.linux-magazin.de PDF-Werkzeuge 02/2014<br />
28<br />
PDF-Ersteller, ‐Extrahierer und ‐Editoren im Quertest<br />
PDF im Vollwaschgang<br />
Dem Namen nach ist man mit dem Portable Document Format immer gut unterwegs. Der folgende Test erzeugt<br />
erst PDF-Dateien, um sie dann mit verschiedene Open-Source-Programmen in die Mangel zu nehmen. Einige<br />
der Editoren und Extrahierer machen eine ganz gute Figur, andere gehören in den Lumpensack. Tim Schürmann<br />
© tiero, alexwhite, 123RF.com<br />
Adobe hat PDF als ein layouterhaltendes<br />
Transportformat für finale Dokumente<br />
konzipiert, PDF-Dateien nachträglich<br />
zu bearbeiten ist – abgesehen von der<br />
serienmäßigen Notiz- und Kommentarfunktion<br />
– nicht einfach. Für Mac und<br />
Windows bietet der Hersteller aber einen<br />
proprietären kostenpflichtigen Editor an,<br />
der in sehr begrenztem Umfang Elemente<br />
löschen, verschieben und Tippfehler in<br />
Texten korrigieren kann.<br />
Da Adobe die PDF-Spezifikation<br />
offengelegt hat,<br />
sind glücklicherweise einige<br />
Tools entstanden,<br />
auch solche für <strong>Linux</strong>, die<br />
PDF-Dateien öffnen, Elemente<br />
daraus extrahieren<br />
oder sogar nachbearbeiten<br />
können. Das funktioniert<br />
allerdings nur befriedigend,<br />
wenn der Ersteller<br />
die zahlreichen Export-<br />
Einstellungen weise gesetzt<br />
hat und sein Programm<br />
standardkonformes<br />
PDF ausspuckt.<br />
Ob und wie gut welche<br />
Werkzeuge miteinander<br />
harmonieren, soll deshalb<br />
eine Art Kreuz-und-Quer-<br />
Test (unter Ubuntu 13.10)<br />
zeigen: Mit Inkscape,<br />
Libre Office Writer und Scribus designten<br />
die <strong>Linux</strong>-<strong>Magazin</strong>-Tester zunächst<br />
mehrere Testdokumente, die sie als PDF-<br />
Dateien mit dem jeweiligen Standardeinstellungen<br />
exportierten (siehe Kasten<br />
„Testdokumente“).<br />
Da alle drei Programme auch PDF-Dokumente<br />
bearbeiten können, fütterten die<br />
Tester die Bande kurzerhand mit ihren<br />
Ergebnissen. Zudem warfen sie die Testdokumente<br />
den Konvertern Gpdftext,<br />
Mutool, Pdftotxt, Pdfimages, Pdftohtml<br />
und Pdf2svg vor. Das sind zwar keine<br />
Editoren, versprechen aber die Texte,<br />
Bilder und im Fall des Mutool sogar die<br />
Schriften zu extrahieren. Elemente aus<br />
PDF-Dateien zu exportieren, ist nicht<br />
abwegig: Im Alltag bekommt man oft<br />
Whitepapers, E-Books oder Präsentationen<br />
als PDF-Dateien zugeschickt oder<br />
findet sie im Netz. Wer daraus zitieren<br />
will oder eine Grafik weiterverwenden,<br />
handelt klug, die gewünschten Organe digital<br />
zu entnehmen, statt pixlige Adobe-<br />
Reader-Screenshots anzufertigen.<br />
E Inkscape<br />
Anwender des Zeichenprogramms Inkscape<br />
dürfen nur wenig Einfluss auf<br />
das erzeugte PDF nehmen. So haben sie<br />
lediglich die Wahl zwischen den PDF-<br />
Versionen 1.4 und 1.5. Darüber hinaus<br />
dürfen sie den Export auf ausgewählte<br />
Teile der Zeichnung beschränken und<br />
die Texte in Pfade respektive Linienzüge<br />
umwandeln lassen (siehe Kasten „Gute<br />
Gute Schriften, schlechte Schriften<br />
Da nicht auf jedem Rechner alle möglichen<br />
Schriftarten installiert sind, lassen sich in PDF-<br />
Dokumente die darin verwendeten Schriftarten<br />
einbetten. Das allerdings sehen die Hersteller<br />
kommerzieller Schriften nicht gerne. Aus diesem<br />
Grund packen viele PDF-Ersteller nicht das<br />
komplette Schriftset in das PDF, sondern lediglich<br />
die Glyphen für alle sichtbaren Zeichen.<br />
Das erschwert wiederum die Nachbearbeitung,<br />
da dem korrigierenden Autor mit hoher Wahrscheinlichkeit<br />
nicht alle Zeichen zur Verfügung<br />
stehen. Alternativ wandeln manche PDF-Exporter<br />
die Texte Buchstaben für Buchstaben<br />
in Vektorgrafiken um. Diese Kurven lassen sich<br />
zwar verlustlos skalieren, das Nachbearbeiten<br />
des Textes ist praktisch unmöglich.<br />
Abbildung 1: Inkscape erhält das Layout des Artikels,<br />
der Text lässt sich zeilenweise nachbearbeiten.
chenprogramm keine passwortgeschützten<br />
PDFs zu öffnen und immer nur eine<br />
ausgewählte Seite zu importieren und<br />
anzuzeigen. Immerhin hilft eine kleine<br />
<strong>Vorschau</strong> bei der Auswahl der Seite.<br />
PDF-Werkzeuge 02/2014<br />
Titelthema<br />
Abbildung 2: Den rot-blauen Farbverlauf mit dem in<br />
Scribus designten Titelblatt …<br />
Schriften, schlechte Schriften“). Verzichten<br />
Anwender auf letzteres, bettet<br />
Inkscape nur Subsets der verwendeten<br />
Schriftarten ein.<br />
Beim Import eines PDF-Dokuments kann<br />
der User die PDF-Schriften durch namensähnliche,<br />
installierte Fonts ersetzen lassen.<br />
Sein selbst geschriebenes PDF importierte<br />
Inkscape fast mustergültig, lediglich<br />
die übereinanderliegenden Textrahmen<br />
verschmolz es zu einem einzigen großen.<br />
Auch die anderen PDFs konnten sich sehen<br />
lassen, sogar das komplexe Lay out<br />
der Seite aus Indesign blieb mustergültig<br />
erhalten (Abbildung 1).<br />
Abbildung 3: … verschluckt Inkscape.<br />
Allerdings steckte Inkscape jede Textzeile<br />
oder Wortgruppe in einen eigenen Textrahmen.<br />
Ernüchterung stellte sich zudem<br />
ein, als die Tester einen der Texte bearbeiten<br />
wollten: Da Inkscape nicht die Größe<br />
des Textrahmens anpasst, quetschte es<br />
die Zeichen übereinander. Die Tester<br />
mussten erst einen neuen Textrahmen<br />
aufziehen und den Text dort hinein kopieren.<br />
Darüber hinaus patzte Inkscape<br />
leicht bei den aus Scribus exportierten<br />
Vorlagen. Dort fehlten immer wieder<br />
komplexe Farbverläufe, beim Titelblatt<br />
beispielsweise der rot-blaue Farbverlauf<br />
(Abbildungen 2 und 3).<br />
Bei den Visitenkarten brach zudem auf<br />
dem Testrechner die Leistung ein – Inkscape<br />
ließ sich plötzlich nur stockend<br />
bedienen. Abschließend vermag das Zei-<br />
E Libre Office<br />
Writer in der Version 4.1.2 produziert<br />
Dateien in der PDF-Version 1.4. Auf<br />
Wunsch des Bearbeiters liefert die Libre-<br />
Office-Textverarbeitung aber auch PDF/<br />
A-1a (siehe Kasten „Versionen satt“).<br />
Anwender dürfen auf den Export erstaunlich<br />
umfassend Einfluss nehmen, etwa<br />
die Qualität der exportierten Bilder in<br />
Prozent angeben, die Libre Office Writer<br />
beim Export in das Jpeg-Format überführt.<br />
Alternativ ist nur eine »Verlustfreie<br />
Kompression« möglich.<br />
Libre Office kann zudem die Open-Document-Datei<br />
in das PDF-Dokument einbetten.<br />
Das soll ein späteres Nachbearbeiten<br />
erleichtern: Ein PDF-Reader bekommt<br />
dann das Dokument im PDF-Format vorgesetzt,<br />
Libre Office hingegen das eingebettete<br />
Open Document. Die Office-Daten<br />
fügt Writer dem PDF allerdings nicht als<br />
normalen Anhang hinzu, sie erscheint<br />
im Adobe Reader folglich nicht auf dem<br />
Register »Attachments«.<br />
Auf Wunsch wandern aber Lesezeichen,<br />
Kommentare sowie ein aus einem beliebigen<br />
Text erzeugtes Wasserzeichen in das<br />
PDF. Automatisch erzeugte Tags sollen<br />
unter anderem behinderten Menschen<br />
den Zugriff auf das PDF erleichtern. Die<br />
verwendeten Schriftarten gelangen voll-<br />
www.linux-magazin.de<br />
29<br />
Testdokumente<br />
In Inkscape platzierten die Tester auf einer leeren<br />
Seite ein Polizeiauto aus der Open Clip Art<br />
Gallery [1]. Diese Vektorgrafik enthält neben<br />
Farbverläufen zahlreiche überlappende Objekte.<br />
Darunter setzten die Tester einige Textrahmen<br />
mit Nonsense-Text. Zwei Spalten simulierten sie<br />
mit überlappenden Textrahmen. Als Schriftart<br />
fand die Liberation Sans Verwendung.<br />
In Libre Office Writer verfassten die Tester ein<br />
mehrseitiges Dokument mit Inhaltsverzeichnis,<br />
Kopf- und Fußzeilen sowie Referenzen und Hyperlinks.<br />
Als Grundlage diente ihnen der Artikel<br />
„System statt Web“ aus dem <strong>Linux</strong>-<strong>Magazin</strong><br />
06/12 [3]. Die Abbildungen importierten sie<br />
im PNG-Format und verpassten ihnen als Beschriftung<br />
eine fortlaufende Nummer sowie den<br />
passenden Untertitel. Code bekam einen farbigen<br />
Hintergrund und eine nichtproportionale<br />
Schrift verpasst, der Fließtext zeigte sich in<br />
der Libration Sans.<br />
Jedem Listing spendierten die Tester einen<br />
eigenen Textkasten mit einem Rahmen, den<br />
der Haupttext auf einer Seite umfloss. Darüber<br />
hinaus presste sich der Fließtext in einigen Passagen<br />
in zwei Spalten. Vektorgrafiken in Form<br />
zweier einfacher Diagramme aus Libre Office<br />
Draw garnieren das Dokument zusätzlich. Es<br />
enthält somit auch Libre-Office-spezifischen<br />
Elemente, mit denen die PDF-Editoren und ‐Exporter<br />
klarkommen mussten. Darüber hinaus<br />
schützt ein Passwort das PDF vor Zugriffen.<br />
Aus Scribus exportierten die Tester die mitgelieferten<br />
Vorlagen Broschüre, Business Card<br />
Collection, Menükarte, Newsletter und Titelblatt.<br />
Sie alle foltern die Importer und Konverter<br />
mit komplexen Layouts und Farbverläufen.<br />
Bei der Faltblatt-artigen Broschüre überlappen<br />
sich mehrere Textkästen, Bitmap- und Vektorgrafik-Objekte.<br />
Die Texte umfließen die Objekte<br />
teilweise. Analoges gilt für den Newsletter, der<br />
einen dreiseitigen Zeitschriftenartikel imitiert.<br />
Die Business Card Collection besteht aus 50<br />
bunten Visitenkarten auf einer Seite. Ihre Hintergründe<br />
beinhalten Vektorgrafiken mit Farbverläufen.<br />
Das Titelblatt wiederum zeigt einen<br />
großen aufwändigen Farbverlauf und nicht wenige<br />
überlappende Vektorobjekte.<br />
Als eine Art Referenz diente im Test ein originaler<br />
einseitiger <strong>Linux</strong>-<strong>Magazin</strong>-Artikel [4],<br />
wie ihn jedermann im Webshop des Verlages<br />
erwerben kann. Er enthält mehrere Textkästen,<br />
drei Spalten, zwei Bitmap-Bilder und mehrere<br />
Schriftarten. Das PDF erzeugt hatte das DTP-<br />
Programm Adobe Indesign unter Mac OS X.
Titelthema<br />
www.linux-magazin.de PDF-Werkzeuge 02/2014<br />
30<br />
Abbildung 4: Unter Libre Office Draw ist der „Alltag eines Sysadmins“ recht<br />
chaotisch, wenngleich immer noch vollständig.<br />
ständig in die PDF-Datei, auf Anwenderwunsch<br />
auch noch die Standardschriften.<br />
Formularelemente wandelt die Textverarbeitung<br />
in ein PDF-Formular, für die<br />
Übermittlung darf der User zwischen<br />
FDF, PDF, HTML und XML wählen.<br />
Linkisch eingebettet<br />
Weitere Einstellungen beeinflussen die<br />
Darstellung im Adobe Reader: Unter anderem<br />
lässt sich die Menüleiste ausblenden<br />
und das Dokument nach dem Öffnen<br />
direkt als Doppelseite anzeigen. Referenzen,<br />
Links, Fußnoten und die Einträge<br />
im Inhaltsverzeichnis verwandelt Libre<br />
Writer in passende PDF-Links. Später genügt<br />
ein Klick, um zum verlinkten Kapitel<br />
oder Website zu gelangen.<br />
Der Autor kann sein Dokument mit einem<br />
Passwort vor neugierigen Blicken<br />
schützen sowie den Funktionsumfang<br />
beschränken, etwa das Drucken des Dokuments<br />
verbieten. Dies ist nur Benut-<br />
Versionen satt<br />
Adobe schickte das Portable Document<br />
Format bereits 1993 in die Welt. Über die<br />
20 Jahre erweiterte die Firma sechs Mal<br />
die Spezifikation. Unter anderem fügte sie<br />
Transparenzen, Formulare und immer wieder<br />
neue Verschlüsselungsalgorithmen hinzu. Die<br />
letzte PDF-Version, 1.7, stammt aus dem Jahr<br />
2006. Des Weiteren dient PDF als Basis für<br />
verschiedene Dokumentformate der ISO. Die<br />
PDF/X-Standards kommen in der Druckvorstufe<br />
zum Einsatz, die PDF/A-Varianten sollen<br />
hingegen die Archivierung erleichtern.<br />
zern erlaubt, die ein<br />
weiteres Passwort eintippen,<br />
das der Autor<br />
hinterlegt hatte.<br />
PDF-Dokumente öffnet<br />
Libre Office nicht in<br />
der Textverarbeitung<br />
Writer, sondern im<br />
Zeichenmodul Draw.<br />
Das wiederum hinterließ<br />
gemischte Ergebnisse:<br />
Der Artikel aus<br />
Indesign ließ sich gerade<br />
noch als solcher<br />
erkennen (Abbildung<br />
4). Die Texte waren<br />
zudem komplett und<br />
ließen sich bearbeiten.<br />
Beim Dokument aus<br />
Inkscape zerwürfelte Libre Office jedoch<br />
die Vektorgrafik (Abbildung 5). Auch<br />
die PDF-Dateien aus Scribus enthielten<br />
zahlreiche kleine Layoutfehler, besonders<br />
häufig ragten lange Textrahmen über den<br />
Seitenrand hinaus, ähnlich wie beim Artikel<br />
in Abbildung 4.<br />
Den besten Eindruck hinterließ noch das<br />
aus Writer exportierte PDF-Dokument<br />
– wohlgemerkt ohne die eingebettete<br />
Open-Document-Datei: Das Ergebnis<br />
war vollständig, das Layout blieb exakt<br />
erhalten. Allerdings steckte Libre Draw<br />
auch hier jede Textzeile in einen eigenen<br />
Textrahmen. Komplexere Grafiken<br />
im PDF verzögerten auf dem Testsystem<br />
zudem den Import. Bei den Visitenkarten<br />
aus Scribus stürzte Libre Office sogar<br />
reproduzierbar ab. Dass auch Draw mit<br />
passwortgeschützten PDF-Dokumenten<br />
umgehen kann, tröstet über die genannten<br />
Unzulänglichkeiten kaum hinweg.<br />
E Scribus<br />
Abbildung 5: Obwohl Draw ein Vektorzeichenprogramm ist, verstümmelte es<br />
den in Inkscape produzierten Polizeiwagen.<br />
Das Layoutprogramm Scribus 1.4.3 kennt<br />
die PDF-Versionen 1.3, 1.4, 1.5 und PDF/<br />
X-3. Bilder packt das DTP-Programm auf<br />
Wunsch entweder mit dem Zip-Verfahren<br />
oder überführt sie ins Jpeg-Format. Im<br />
letzten Fall wählt der Anwender eine<br />
von fünf verschiedenen Qualitätsstufen<br />
aus. Scribus kann <strong>Vorschau</strong>bilder erzeugen<br />
und Lesezeichen integrieren sowie<br />
Texte und Vektorgrafiken komprimieren.<br />
Des Weiteren bestimmt der Anwender,<br />
welche der im Dokument verwendeten<br />
Schriftarten Scribus ins PDF einweben<br />
soll. Alternativ lässt er die Texte in Vektorpfade<br />
wandeln.<br />
Auf Wunsch überblendet das Layoutprogramm<br />
die Wechsel zwischen einzelnen<br />
Seiten mit Präsentationseffekten. Wie<br />
bei Libre Office Writer dürfen User die<br />
Anzeige im Adobe Reader beeinflussen<br />
und beispielsweise die Menüleiste ausblenden.<br />
Über Kennwörter lässt sich der<br />
Zugriff auf das Dokument einschränken,<br />
wobei Konkurrent Libre Writer wesentlich<br />
feinere Einstellungen anbietet. Scribus<br />
vermag beispielsweise den Druck nur<br />
komplett zu verbieten, während Writer<br />
es noch zulässt, mit einer reduzierten<br />
Auflösung zu drucken. Im Gegenzug<br />
schreibt Scribus auf Wunsch Farbbalken,<br />
Anschnittmarken und weitere im Druck<br />
hilfreiche Elemente in das PDF. Bei PDF/<br />
X-3-Dokumenten versteht es sich darauf,<br />
ein explizites Farbprofil zu hinterlegen.<br />
Import: Nicht<br />
genügend<br />
War der PDF-Import<br />
von Libre Office noch<br />
durchwachsen, erwies<br />
sich der von Scribus<br />
1.4.3 als schlichtweg<br />
unbrauchbar. In allen<br />
importierten PDF-Dokumenten<br />
fehlten Texte<br />
(Abbildung 6). Scribus<br />
behandelt das PDF<br />
zudem als eine große<br />
Vektorgrafik. Anwender<br />
können lediglich<br />
die Gruppe auflösen
PDF-Werkzeuge 02/2014<br />
Titelthema<br />
www.linux-magazin.de<br />
31<br />
Abbildung 6: Vom Artikel aus dem <strong>Linux</strong>-<strong>Magazin</strong> lässt Scribus nur wenig Brauchbares<br />
übrig.<br />
Abbildung 7: Gpdftext lässt sich durch die Spalten im <strong>Linux</strong>-<strong>Magazin</strong>-Artikel<br />
verwirren. Insbesondere das Ende beider Texte zu vergleichen, lohnt.<br />
und dann einige der nach dem Import<br />
übrig gebliebenen Bestandteile verschieben<br />
oder löschen.<br />
Den Vogel schoss Scribus aber ab, als es<br />
nach dem Import eines von ihm selbst<br />
geschriebenen PDFs abstürzte. Da passt<br />
es auch ins Bild, dass das DTP-Programm<br />
passwortgeschützte Dokumente zu verarbeiten<br />
verweigert.<br />
E Gpdftext<br />
Das Tool Gpdftext öffnet den Text aus<br />
PDFs für E-Books in einem Texteditor<br />
[2]. Das sich auf GTK+ stützende Programm<br />
verdaut jedoch auch normale<br />
PDFs, solange sie nicht verschlüsselt<br />
sind. Die Tester setzten die Version 0.1.6<br />
auf die Testdokumente an. Gpdftext<br />
konnte alle Texte aus den PDFs extrahieren<br />
und anzeigen. In jedem Fall ging jedoch<br />
das Layout verloren, der herausgelöste<br />
Text bildet eine einzige Bleiwüste<br />
(Abbildung 7).<br />
Bei mehrspaltigen Texten, wie dem von<br />
Indesign ausgespuckten Artikel, waren<br />
die Sätze teils verwürfelt, teils ineinander<br />
verschachtelt. Gpdftext beharrt offenbar<br />
auf einspaltigen Texten, wie sie für E-<br />
Books typisch sind. In den Grundeinstellungen<br />
kann der Benutzer das Tool<br />
anweisen, einzelne Zeilen nicht mehr<br />
zusammenzuführen. Im Test blieb diese<br />
Einstellung ohne Auswirkung, der Text<br />
blieb ein dadaistischer Buchstabenblock.<br />
Darüber hinaus versucht Gpdftext mit<br />
Bindestrichen getrennte Wörter wieder<br />
zusammenzuziehen – was aber im Test<br />
nicht immer funktionierte. In jedem Fall<br />
kommt der Anwender nicht ums Nachbearbeiten<br />
herum.<br />
E Mutool<br />
Zum einfachen PDF-Betrachter Mupdf<br />
gehört das kleine Kommandozeilenwerkzeug<br />
Mutool [5]. Der kalifornische Hersteller<br />
Artifex bezeichnet es als „Schweizer<br />
Messer unter den PDF-Manipulationswerkzeugen“.<br />
Sollte das stimmen,<br />
klemmt bei dem eidgenossenschaftlichen<br />
Qualitätstool aber einiges: Es kann nämlich<br />
lediglich das PDF neu generieren, die<br />
Schriften und Bilder extrahieren, ein paar
Titelthema<br />
www.linux-magazin.de PDF-Werkzeuge 02/2014<br />
32<br />
Informationen anzeigen sowie die Seiten<br />
auf einem riesigen Poster anordnen. Wie<br />
Mupdf steht es unter der Affero GPL. Die<br />
Tester griffen zur Version 1.2.2, die in<br />
den Repositories von Ubuntu 13.10 als<br />
»mupdf‐tools«-Paket lagert.<br />
Aus den mit Indesign, Libre Office und<br />
Scribus geschriebenen Dokumenten extrahierte<br />
Mutool klaglos alle Bilder sowie<br />
die zugehörigen Schriften. Da das Werkzeug<br />
nichts mit Vektorgrafiken anzufangen<br />
weiß, lieferte es beim Inkscape-PDF<br />
nur die verwendete Schriftart Deja-Vu-<br />
Sans. Mutool speichert die Schriften in<br />
dem Dateiformat, das es im PDF vorfindet.<br />
Bei Indesign-Dokumenten traten so<br />
Postscript-Schriften in den Formaten CFF<br />
und CID [6] zu Tage. Die freien Anwendungen<br />
hingegen hatten Truetype-Fonts<br />
einkonserviert. Eine Ausnahme bildet<br />
Scribus, das Schriften als PFA-Dateien<br />
inkludiert.<br />
Bilder liefert Mutool grundsätzlich im<br />
PNG-Format, andere Bildarten konvertiert<br />
das Tool eigenmächtig dorthin. Verschlüsselte<br />
PDF-Dateien öffnet Mutool,<br />
wenn der User ihm das Passwort über<br />
einen extra Parameter verrät.<br />
E Poppler Utilities<br />
Abbildung 8: Wer das von Libre Office angelandete PDF-Dokument an Pdftotext<br />
mit dem Parameter »‐layout« überstellt, …<br />
Das Kommandozeilentool »pdftotext« gehört<br />
mittlerweile zur Werkzeugsammlung<br />
Poppler, die ihrerseits als Fork von Xpdf<br />
entstand [7]. Die meisten Distributionen<br />
bieten Poppler in ihren Repositories an,<br />
unter Ubuntu 13.10 steckt »pdftotext« im<br />
Paket Poppler-utils. Zum Test trat die Version<br />
0.24.1 an.<br />
Wie sein Name bereits andeutet, extrahiert<br />
Pdftotext den Text aus einem PDF-<br />
Dokument. Die Ergebnisse bedürfen in<br />
jedem Fall einer Nachbearbeitung: Bei<br />
mehrspaltigen Dokumenten fängt die Extraktion<br />
links oben an<br />
und hört rechts unten<br />
auf einer Seite auf. Der<br />
Autorenkasten des<br />
Beispielartikels landete<br />
so mitten im Text.<br />
Immerhin gingen keine<br />
Texte verloren.<br />
Über Kommandozeilenparameter<br />
dürfen<br />
Anwender die Analyse<br />
auf einzelne Seiten<br />
und rechteckige Bereiche<br />
einschränken. Auf<br />
Wunsch versucht Pdftotext<br />
das Layout zu<br />
erhalten (Abbildungen<br />
8 und 9). Spalten und Einrückungen simuliert<br />
es dabei mit Leerzeichen. Hierdurch<br />
lässt sich das Libre-Office-Testdokument<br />
lesen, die Leerzeichen behindern<br />
aber das Weiterverarbeiten.<br />
Zwar dürfen User auch das Zeichen-Encoding<br />
vorgeben, die aus den Beispieldokumenten<br />
erzeugten Texte hatten dennoch<br />
viele Sonderzeichen nicht erkannt.<br />
Mit dem Passwortschutz des Libre-Office-<br />
Dokuments hatte Pdftotext keine Probleme,<br />
User müssen lediglich das Kennwort<br />
mit einem Parameter übergeben.<br />
Bilder fischen<br />
Bestandteil der Poppler-Tools sind neben<br />
»pdftotext« auch »pdfimages«, das Bilder<br />
extrahiert, sowie »pdftohtml«, das ein<br />
PDF in HTML-Seiten konvertiert. Pdfimages<br />
löst nur Bitmapbilder aus dem PDF,<br />
die es alsdann im PPM-Format speichert.<br />
Erst mit dem Parameter »‐j« legt es Jpeg-<br />
Bilder auch als solche auf der Festplatte<br />
ab. Passwörter übergibt der User wie bei<br />
Pdftotext, mit Vektorgrafiken kann das<br />
Tool nicht umgehen.<br />
Pdftohtml verhält sich wie eine Mischung<br />
aus Pdftotext und Pdfimages: Es löst die<br />
Bilder heraus und packt den Text in eine<br />
oder mehrere HTML-Dateien. Um dabei<br />
keinen Zeichensalat zu ernten, gaben die<br />
Tester explizit die Zeichencodierung an.<br />
Pdftohtml übernimmt auf Wunsch die<br />
Links im PDF-Dokument in HTML.<br />
Die extrahierten Texte waren genau so<br />
durcheinandergewürfelt wie bei Pdftotext,<br />
wobei User in diesem Fall nicht das<br />
Layout erzwingen können. Als Entschä-<br />
Abbildung 9: … erhält dieses Ergebnis.<br />
Infos<br />
[1] Open Clip Art: [http:// openclipart. org]<br />
[2] Gpdftext: [http:// gpdftext. sourceforge. net]<br />
[3] Tim Schürmann, „System statt Web – PHP<br />
für die Kommandozeile“: <strong>Linux</strong>-<strong>Magazin</strong><br />
06/12, S. 30, [http:// www. linux‐magazin. de/<br />
Ausgaben/ 2012/ 06/ PHP‐CLI]<br />
[4] Charly Kühnast, „I’ll be back-up – Aus dem<br />
Alltag eines Sysadmin: Backup2l“: <strong>Linux</strong>-<br />
<strong>Magazin</strong> 01/14, S. 71<br />
[5] Mupdf: [http:// www. mupdf. com]<br />
[6] Postscript-Fontformate: [http:// de.<br />
wikipedia. org/ wiki/ PostScript‐Fontformate]<br />
[7] Poppler: [http:// poppler. freedesktop. org]<br />
[8] Pdf2svg: [http:// www. cityinthesky. co. uk/<br />
opensource/ pdf2svg/]
digung kann das Tool ein so genanntes<br />
komplexes Dokument anlegen. Dabei<br />
wandert das Layout mit den Bildern<br />
in ein großes PNG-Bild, über das der<br />
Browser dann den Text legt (Abbildung<br />
10). Das Ergebnis gibt zwar eine Ahnung<br />
vom Ursprungslayout, kopieren und<br />
nachbearbeiten lässt sich so allerdings<br />
nur der Text. Darüber hinaus ignoriert<br />
Pdftohtml sämtliche Vektorgrafiken.<br />
E Pdf2svg<br />
Das Tool Pdf2svg überführt mit Hilfe<br />
von Poppler und Cairo einzelne oder alle<br />
PDF-Seiten ins SVG-Format [8]. Die SVG-<br />
Dateien lassen sich anschließend etwa<br />
mit Inkscape auseinandernehmen beziehungsweise<br />
weiterbearbeiten. Die Tester<br />
haben sich die Version 0.2.2 des Tools angesehen.<br />
Texte zerhackt »pdf2svg« ohne<br />
erkennbare Regeln und setzt jedes Teilstückchen<br />
in einen eigenen Textkasten.<br />
Das Layout blieb immerhin bei allen Testdokumenten<br />
erstaunlich intakt. Das Gleiche<br />
lässt sich von Vektorgrafiken sagen,<br />
Bitmap-Bilder speichert Pdf2svg innerhalb<br />
der erzeugten SVG-Datei. Einzig bei<br />
den PDF-Dateien aus Scribus stimmten<br />
die Farbverläufe nicht mehr, beim Titelblatt<br />
erschienen die Streben beispielsweise<br />
als durchgehend rot. Passwortgeschützte<br />
PDF-Dokumente kann das Tool<br />
nicht verarbeiten.<br />
Durchwachsene Allrounder<br />
Die verwendeten Testdokumente konnten<br />
zwar nicht alle Aspekte des PDF-Ex- und<br />
Imports abdecken, lieferten aber dennoch<br />
einige interessante Ergebnisse (siehe Tabelle<br />
1). Inkscape, Libre Office Writer und<br />
Scribus bieten zwar<br />
bei Weitem nicht den<br />
Funktionsumfang und<br />
die Möglichkeiten von<br />
Adobe Acrobat, erzeugen<br />
aber standardkonforme<br />
und qualitativ<br />
recht gute PDF-Dokumente.<br />
Beim Import von PDF-<br />
Dokumenten offenbaren<br />
sich hingegen gewaltige<br />
Unterschiede:<br />
Inkscape importiert<br />
Do kumente klaglos,<br />
das Layout bleibt erhalten<br />
und die Texte<br />
kann man nachbearbeiten<br />
– wenn auch<br />
nicht besonders komfortabel.<br />
Allerdings öffnet das Zeichenprogramm<br />
immer nur eine Seite. Libre<br />
Office verdaut von ihm selbst geschriebene<br />
PDF-Dateien am besten, bei anderen<br />
PDFs müssen Anwender mit einem<br />
leicht zerschossenen Layout rechnen.<br />
Das DTP-Programm Scribus öffnete im<br />
Test keine einzige PDF-Datei fehlerfrei<br />
und scheidet bereits in der ersten Vorrunde<br />
zur Import-Liga aus.<br />
Schlanke Spezialisten<br />
Abbildung 10: Der erste, außerordentlich gute Eindruck täuscht: Die hier<br />
von Pdftothml produzierte HTML-Seite besteht aus einem riesigen PNG-Bild,<br />
über dem wiederum der Text liegt.<br />
Besser schlagen sich die kleinen Spezialtools<br />
für die Kommandozeilen. Bei Pdftotext<br />
beispielsweise ist das Layout nach<br />
der Konvertierung zwar Geschichte, die<br />
enthaltenen Texte kommen komplett an.<br />
Hat allerdings jemand beim PDF-Schreiben<br />
die Texte als Pfade gespeichert, ist<br />
Pdftotext machtlos. Gleiches gilt für Gpdftext,<br />
das einen riesigen Textblock produziert.<br />
Die Texte aus Spalten sind zudem<br />
ineinander verschachtelt.<br />
Sämtliche Bilder und Schriftarten holt<br />
Mutool aus den PDFs. Bei den Schriften<br />
müssen Anwender darauf hoffen, dass<br />
der Autor die komplette Schriftart eingebunden<br />
hat. Die Wahrscheinlichkeit ist<br />
dafür bei Dokumenten aus Libre Office<br />
und Inkscape am höchsten. Bilder spuckt<br />
Mutool allerdings immer im PNG-Format<br />
aus. Hier übernimmt Pdfimages, das genau<br />
wie Mutool sämtliche Bitmap-Bilder<br />
aus dem PDF extrahierte.<br />
Wer Vektorgrafiken aus einem PDF herausschälen<br />
möchte, dem bleibt nur der<br />
Griff zu Pdf2svg und das Ausschneiden<br />
und Weiterverarbeiten mit Inkscape. Pdfto<br />
html taugt nur für einfache PDF-Dokumente.<br />
Hier sollten Anwender besser die<br />
Einzelteile mit den anderen Tools extrahieren<br />
und dann selbst zu einem HTML-<br />
Dokument zusammensetzen. (jk) n<br />
PDF-Werkzeuge 02/2014<br />
Titelthema<br />
www.linux-magazin.de<br />
33<br />
Tabelle 1: Funktionstest – PDFs einlesen und bearbeiten<br />
Ersteller: Inkscape Libre Office Writer Scribus Indesign<br />
Editoren<br />
Inkscape gut gut gut gut<br />
Libre Office Draw befriedigend gut befriedigend befriedigend<br />
Scribus mangelhaft mangelhaft mangelhaft mangelhaft<br />
Spezialprogramme<br />
Gpdftext gut gut gut gut<br />
Mutool gut gut gut gut<br />
Pstotext gut, kann Layout behalten gut, kann Layout behalten gut, kann Layout behalten gut, kann Layout behalten<br />
Pdfimages gut gut gut gut<br />
Pdftohtml befriedigend befriedigend befriedigend befriedigend<br />
Pdf2svg gut gut gut gut
Titelthema<br />
www.linux-magazin.de IRC-Bots 02/2014<br />
34<br />
IRC plus Dokumentation<br />
Frag die Bots<br />
Warum sollten Chaträume nur für Menschen da sein? Dominik Honnef zeigt, wie sich spezialisierte Bots in<br />
Wissensdatenbanken oder Ticketsysteme einbinden lassen und so die Arbeit erleichtern. Dominik Honnef<br />
© Charles Taylor, 123RF.com<br />
daher keine Rolle, auf welchem System<br />
der Bot läuft, ob auf demselben wie der<br />
IRC-Server oder fernab auf einer Entwicklermaschine.<br />
Fast egal ist auch, welche<br />
Serversoftware zum Einsatz kommt,<br />
wenn es sich um eine konforme Implementierung<br />
von IRC handelt.<br />
Bot an Bord<br />
Ausgehend von einer vorhandenen Ruby-<br />
Installation lässt sich Cinch über<br />
gem install cinch<br />
IRC, der Internet Relay Chat, existiert<br />
bereits seit 20 Jahren, kommt aber noch<br />
immer als beliebter Kommunikationskanal<br />
gleichermaßen in Open-Source-Projekten<br />
und Unternehmen zum Einsatz.<br />
Fast ebenso lange existieren Bots, die im<br />
Channel warten und auf die Kommandos<br />
der Nutzer reagieren. Der Artikel zeigt,<br />
wie die Bots sich nützlich machen, indem<br />
sie beim Verwalten von Tickets und Erstellen<br />
von Dokumentationen helfen.<br />
Qual der Wahl<br />
Wer einen IRC-Bot entwickeln möchte,<br />
muss nicht mehr Tcl lernen, um den Bot-<br />
Urahn Eggdrop [1] zu aktivieren: Frameworks<br />
für Bots gibt es in nahezu jeder<br />
Sprache (siehe Tabelle 1), häufig existiert<br />
sogar mehr als eines. Auch wenn sich<br />
der Artikel auf Cinch [2], ein in Ruby<br />
geschriebenes Framework unter MIT-Lizenz<br />
(Abbildung 1), konzentriert, lassen<br />
sich die hier vorgestellten Codebeispiele<br />
auf ähnliche Weise in anderen Sprachen<br />
umsetzen.<br />
Cinch bringt ein objektorientiertes API<br />
und ein modulares Plugin-System mit.<br />
Ein einzelner Bot kann dank vieler voneinander<br />
unabhängiger Plugins allerlei<br />
Aufgaben erfüllen. Einem IRC-Server erscheint<br />
Cinch, wie bei IRC-Bots üblich,<br />
als ein gewöhnlicher Client. Es spielt<br />
Tabelle 1: IRC-Bots (Auswahl)<br />
einspielen. Einen einfachen Bot namens<br />
»hallobot.rb« (Abbildung 2), der auf Begrüßungen<br />
der Form »!hallo« reagiert,<br />
stellt Listing 1 vor.<br />
Ein einfaches »ruby hallobot.rb« erweckt<br />
den Bot zum Leben, woraufhin er sich mit<br />
dem IRC-Server »Adresse des IRC-Servers«<br />
verbindet und die Kanäle »#Ein_Channel«<br />
und »#Ein_anderer_Channel« betritt.<br />
Tippt ein IRC-Nutzer ein »!hallo« in einem<br />
dieser Kanäle, reagiert der Bot mit einem<br />
eher indifferenten »Sei gegrüßt«.<br />
Der Beispielcode besteht aus zwei Teilen:<br />
Den Hauptteil bildet die Klasse »Greeter«<br />
(Zeilen 04 bis 11). Jede Klasse repräsentiert<br />
ein einzelnes Plugin, das auf einen<br />
oder mehrere vom User abgesetzte Befehle<br />
reagiert, wobei ein solches Kommando<br />
mit einem Ausrufezeichen beginnen<br />
muss. Zum Matchen der Befehle<br />
greift der Bot-Entwickler zu regulären<br />
Name des Bots Programmiersprache Lizenz Webseite<br />
Autumn Ruby Freeware [https://github.com/RISCfuture/autumn]<br />
Willie Python EFL [http://willie.dftba.net]<br />
PHP IRC-Bot PHP CC-BY-3.0 [http://wildphp.com]<br />
Jsircbot Javascript GPLv2 [http://code.google.com/p/jsircbot/]<br />
Java IRC-Bot Java GPLv2 [http://sourceforge.net/projects/jircb/]
IRC-Server<br />
Cinch<br />
Regex-Matcher<br />
sendet Nachricht<br />
verarbeitet Nachrichten<br />
ruft<br />
Plugin auf<br />
sendet<br />
Antwort<br />
weitert das Array der<br />
Plugins dann einfach<br />
um neue Exemplare,<br />
weitere Informationen<br />
zum API liefert die Dokumentation<br />
[3].<br />
Github sucht<br />
Anschluss<br />
Entwickler verbringen<br />
Github-Issues<br />
Infobot<br />
Greeter<br />
viel Zeit damit,<br />
Tickets zu bearbeiten.<br />
Abbildung 1: Das Schema zeigt vereinfacht den Aufbau des Ruby-Bots Cinch. Kein Wunder also,<br />
dass sich auch ihre<br />
Ausdrücken. Die bestehen aus keiner, einer<br />
oder mehreren Capture Groups, deren<br />
Werte die angegebene Methode in Form<br />
von Argumenten entgegennimmt. So<br />
stellt zum Beispiel »/(\d+)/« ein einzelnes<br />
Argument bestehend aus einer oder<br />
mehreren Ziffern dar.<br />
Der zweite Teil (Zeilen 13 bis 20) kümmert<br />
sich um die Konfiguration des Bots.<br />
Er erhält hier einen Namen und eine Adresse,<br />
über die er sich anmelden kann.<br />
Zeile 18 erklärt zudem, welche Plugins<br />
er verwenden soll. Da sich die Konfiguration<br />
der Datei im weiteren Verlauf des<br />
Artikels nicht ändert, folgen nun noch die<br />
Plugin-Klassen selbst. Ein Entwickler er-<br />
Konversationen häufig um diese drehen.<br />
Dieser Artikel macht es sich zur Aufgabe,<br />
das Ticketsystem von Github über einen<br />
Bot steuerbar zu machen. Ein Plugin soll<br />
das Öffnen, Schließen und Suchen von<br />
Tickets ermöglichen. Zugleich soll der<br />
Bot auf Verweise der Art »Repository/<br />
gh‐Ticketnummer« in Nachrichten reagieren,<br />
indem er den Titel und Status des<br />
Tickets im Channel anzeigt.<br />
Githubs API [4] basiert auf HTTP und<br />
Json und erlaubt sowohl lesenden als<br />
auch schreibenden Zugriff auf große Teile<br />
von Github – unter anderem auch auf Tickets.<br />
Zugriffe lassen sich mit »curl« auf<br />
der Konsole ausprobieren, Listing 2 fragt<br />
Listing 1: »hallobot.rb«<br />
01 # ‐*‐ coding: utf‐8 ‐*‐<br />
02 require "cinch"<br />
03 <br />
04 class Greeter<br />
05 include Cinch::Plugin<br />
06 <br />
07 match /hallo$/, method: :greet<br />
08 def greet(m)<br />
09 m.reply "Sei gegrüßt"<br />
10 end<br />
11 end<br />
12 <br />
13 bot = Cinch::Bot.new do<br />
14 configure do |c|<br />
15 c.nick = "UnserBot"<br />
16 c.server = "Adresse des<br />
IRC‐Servers"<br />
17 c.channels = ["#Ein_Channel",<br />
"#Ein_anderer_Channel"]<br />
18 c.plugins.plugins = [Greeter]<br />
19 end<br />
20 end<br />
21 <br />
22 bot.start<br />
23<br />
Listing 2: Ticketabfrage mit »curl«<br />
01 $ curl https://api.github.com/repos/<br />
rails/rails/issues/13069<br />
02 {<br />
03 "title": "Requires JSON gem version<br />
1.7.7 or above as it contains an<br />
important security fix.",<br />
04 "user": {<br />
05 "login": "chancancode",<br />
06 [...]<br />
07 },<br />
08 "labels": [],<br />
09 "state": "closed",<br />
10 "created_at":<br />
"2013‐11‐27T06:20:30Z",<br />
11 "updated_at":<br />
"2013‐11‐27T10:07:54Z",<br />
12 "closed_at": "2013‐11‐27T10:07:54Z",<br />
13 "body": "See [here](https://github.<br />
com/flori/json/blob/master/CHANGES).",<br />
14 [...]<br />
15 }
Titelthema<br />
www.linux-magazin.de IRC-Bots 02/2014<br />
36<br />
01 require "json"<br />
02 require "net/http"<br />
03 <br />
04 class GithubIssues<br />
zum Beispiel das Ticket mit der Nummer<br />
»13069« aus dem Rails-Projekt ab.<br />
Das (gekürzte) Beispiel zeigt, wie Github<br />
seine Informationen strukturiert, die auch<br />
der Bot benötigt, um Tickets anzuzeigen.<br />
Der Entwickler kann sowohl auf öffentliche<br />
Informationen (etwa auf Tickets von<br />
Open-Source-Projekten) als auch auf lokale<br />
Tickets zugreifen [5]. Im zweiten<br />
Fall muss er sich jedoch authentifizieren.<br />
Das API erlaubt dies wahlweise über O-<br />
Auth oder eine klassische HTTP-Authentifizierung,<br />
wobei diese für einen IRC-Bot<br />
05 include Cinch::Plugin<br />
06 <br />
07 BaseURL = "api.github.com"<br />
08 Organization = "Organisation"<br />
09 Username = "Benutzername"<br />
10 Password = "Passwort"<br />
11 <br />
12 private<br />
Listing 3: »issues.rb«<br />
Listing 4: Ergänzung (1) zu »issues.rb«<br />
meist ausreicht. Bei<br />
firmeninternen Installationen<br />
von Github<br />
gelingt der Zugriff auf<br />
das API über »http://<br />
IP‐Adresse/ api/ v3/«.<br />
Sag’s dem API<br />
Im Kern kommuniziert das Plugin mit<br />
dem Github-API. Es ruft die Daten mittels<br />
HTTP ab und übersetzt Json in Ruby-<br />
Strukturen. Da die Standardbibliotheken<br />
13 def request(uri, method, data = nil)<br />
14 uri = URI("https://#{BaseURL}#{uri}")<br />
15 Net::HTTP.start(uri.host, uri.port,<br />
use_ssl: true) do |http|<br />
16 req = method.new(uri.request_uri)<br />
17 req.basic_auth(Username, Password)<br />
18 req.body = data<br />
19 resp = http.request(req)<br />
20 return JSON.parse(resp.body)<br />
21 end<br />
22 end<br />
23 end<br />
Abbildung 2: Und ewig grüßt der Bot, hier in seiner einfachsten Fassung.<br />
von Ruby alles Nötige erledigen, fällt das<br />
Implementieren leicht.<br />
Die Zeilen 7 bis 10 in Listing 3 übernehmen<br />
die Konfiguration des Plugins.<br />
»BaseURL« steht für die Basisadresse des<br />
Github-API und verlangt in firmeninternen<br />
Installationen nach einer Anpassung.<br />
Es folgen dann der »Benutzername« und<br />
das »Passwort« des Bots bei Github. Der<br />
sollte das Recht besitzen, auf die Tickets<br />
von Repositories zuzugreifen, aber nicht<br />
mehr Rechte als notwendig.<br />
Um die Interaktion mit dem Bot zu vereinfachen,<br />
gilt die Annahme, dass alle<br />
Repositories bei Github zu einer einzelnen<br />
»Organisation« gehören. Die Methode<br />
»request()« in Zeile 13 wird von allen<br />
Funktionen des Plugins verwendet, um<br />
Anfragen an das API zu stellen. Sie setzt<br />
01 # !gh issue open Repository Ticketnummer<br />
02 match(/gh issue open ([^ ]+) (\d+)$/, method: :open_issue)<br />
03 def open_issue(m, repo, id)<br />
04 uri = "/repos/#{Organization}/#{repo}/issues/#{id}"<br />
05 request(uri, Net::HTTP::Patch, '{"state": "open"}')<br />
06 m.reply "Opened issue %s/gh‐%d" % [repo, id]<br />
07 end<br />
08 <br />
09 # !gh issue close Repository Ticketnummer<br />
10 match(/gh issue close ([^ ]+) (\d+)$/, method: :close_issue)<br />
11 def close_issue(m, repo, id)<br />
12 uri = "/repos/#{Organization}/#{repo}/issues/#{id}"<br />
13 request(uri, Net::HTTP::Patch, '{"state": "closed"}')<br />
14 m.reply "Closed issue %s/gh‐%d" % [repo, id]<br />
15 end<br />
Listing 5: Ergänzung (2) zu »issues.rb«<br />
01 # !gh issue search Repository Suchstring<br />
02 match(/gh issue search ([^ ]+) (.+)/, method: :search_issue)<br />
03 def search_issue(m, repo, query)<br />
04 uri = "/search/issues?q=%s+repo:%s+user:%s" %<br />
05 [URI.escape(query), repo, Organization]<br />
06 <br />
07 res = request(uri, Net::HTTP::Get)<br />
08 n = 3<br />
09 total = res["total_count"]<br />
10 if n > total<br />
11 n = total<br />
12 end<br />
13 <br />
14 m.reply "Zeige %d von %d Tickets für '%s'" % [n, total, query]<br />
15 res["items"][0...n].each_with_index do |issue, i|<br />
16 # [123] Der Titel des Tickets https://github.com/... (open)<br />
17 m.reply "[%d] %s (%s)" %<br />
18 [issue["number"], issue["title"], issue["html_url"],<br />
issue["state"]]<br />
19 end<br />
20 end<br />
21<br />
Listing 6: Ergänzung (3) zu »issues.rb«<br />
01 # Repository/gh‐Ticketnummer<br />
02 match(/[^ ]+\/gh‐\d+/, method: :display_issue, use_prefix: false)<br />
03 def display_issue(m)<br />
04 m.message.scan(/([^ ]+)\/gh‐(\d+)/) do |repo, id|<br />
05 uri = "/repos/#{Organization}/#{repo}/issues/#{id}"<br />
06 issue = request(uri, Net::HTTP::Get)<br />
07 m.reply "[%s/gh‐%d] %s (%s)" % [repo, id, issue["title"],<br />
issue["state"]]<br />
08 end<br />
09 end
Abbildung 3: Der Bot durchsucht das Ticketsystem von Github gezielt nach bestimmten Tickets.<br />
eine HTTP-Anfrage ab und konvertiert<br />
die Antwort, die in Json formatiert ist,<br />
in eine Struktur, die Ruby versteht. Das<br />
Argument »method« dient dazu, das eingesetzte<br />
HTTP-Kommando anzugeben.<br />
Github verwendet zum Beispiel »GET«,<br />
um Daten abzufragen, und »PATCH«, um<br />
sie zu bearbeiten.<br />
Die Funktionen des Plugins erschöpfen<br />
sich darin, diese Methode zusammen mit<br />
den richtigen Argumenten aufzurufen.<br />
Der Entwickler ergänzt mit den Methoden<br />
aus den Listings 4 bis 6 in der Datei<br />
»issues.rb« die Klasse »GithubIssues«.<br />
Die ersten beiden Funktionen, sie öffnen<br />
und schließen Tickets, bestehen im Wesentlichen<br />
aus dem korrekten Aufruf der<br />
»request()«-Methode.<br />
Um nach Tickets zu suchen (Abbildung<br />
3), muss der Entwickler etwas mehr<br />
Aufwand betreiben. Zwar besteht die<br />
eigentliche Suche erneut aus einem einfachen<br />
Aufruf der »request()«-Methode,<br />
doch der Code sollte das Suchergebnis<br />
auch entsprechend präsentieren. Er soll<br />
nicht sämtliche Ergebnisse anzeigen, da<br />
dies bis zu 100 sein könnten, und er soll<br />
pro Ticket nur die wirklich relevanten<br />
Informationen anzeigen, zum Beispiel<br />
die Ticketnummer, den Titel, den Link<br />
zum Ticket und den Status (geöffnet oder<br />
geschlossen).<br />
Im abschließendem Feature (Listing 6)<br />
werden alle Verweise der Art »Repository/<br />
gh‐Ticketnummer« in Chat-Nachrichten<br />
aufgegriffen, um Titel und Status der referenzierten<br />
Tickets auszugeben. Rubys<br />
»scan()«-Methode greift alle Verweise einer<br />
Nachricht auf, sodass eine einzelne<br />
Nachricht auch mehrere Tickets erwähnen<br />
darf (Abbildung 4). Die Spezialoption<br />
»use_prefix: false« sorgt dafür,<br />
dass der Bot nicht nach einem Ausrufezeichen<br />
am Anfang des Befehls schaut.<br />
Caveats<br />
Das entwickelte Plugin erleichtert Entwicklern<br />
und Admins also die Arbeit<br />
über IRC-Chaträume, indem es gezielt<br />
Informationen zu bestimmten Tickets heraussucht.<br />
Allerdings bleibt Luft für Verbesserungen.<br />
So geht das Plugin davon<br />
aus, dass die Repositories und Tickets<br />
existieren und Githubs API nie Probleme<br />
hat. Kurz, es fehlt eine Fehlerbehandlung.<br />
Zudem ist die Anfragenzahl an Githubs<br />
API limitiert, nämlich auf 5000 pro<br />
Stunde. Sehr aktive Projekte und große<br />
Firmen müssten Anfragen cachen oder<br />
anderweitig die Limits einhalten.<br />
Was weiß der Bot<br />
Natürlich gibt es Logs der Konversationen<br />
im IRC, auf die sich bei Fragen verweisen<br />
lässt. Es ist aber auch möglich, im IRC<br />
selbst Wissen als FAQs zu sammeln und<br />
bei Bedarf abzurufen. Bots können solche<br />
FAQs verwalten. Inspiriert vom Infobot<br />
[6] kombinieren die elektronischen<br />
Helfer Textschnipsel – etwa Links oder<br />
Abbildung 4: Bei Eingabe von Ticketnummern spuckt der Bot die zugehörigen Titel aus.
Titelthema<br />
www.linux-magazin.de IRC-Bots 02/2014<br />
38<br />
Hinweise – mit abrufbaren Schlagwörtern.<br />
Speichert der Entwickler diese Fragen<br />
und Antworten in einer kompakten<br />
SQlite-Datenbank, können auch andere<br />
Tools auf die Daten zugreifen.<br />
Die Implementierung der Wissensdatenbank<br />
funktioniert ähnlich wie die Github-Anbindung.<br />
Das Grundgerüst bildet<br />
der Aufbau einer Datenbankverbindung,<br />
dann folgen die eigentlichen Funktionen.<br />
Die Datenbank lässt sich zunächst über<br />
gem install sqlite3<br />
installieren. Listing 7 baut eine Verbindung<br />
zur SQlite-Datenbank auf, die sich<br />
im Homeverzeichnis des Benutzers befindet.<br />
Zusätzlich legt das Plugin des Bot-<br />
Entwicklers eine Tabelle mit drei Spalten<br />
für die ID, das Schlagwort und die assoziierte<br />
Information an, so diese noch nicht<br />
existiert. Dann kann er das Plugin ohne<br />
manuelle Intervention verwenden.<br />
Listing 8 implementiert zwei Methoden<br />
zum Erstellen und Abrufen von Informationen.<br />
Die Methode »remember()«<br />
kommt stets dann zum Einsatz, wenn<br />
jemand den Bot über »!rem Schlagwort =<br />
Die Information« mit einem neuen Info-<br />
Häppchen füttert oder er eine bestehende<br />
Information überschreibt, etwa um einen<br />
Fehler zu korrigieren.<br />
Die zweite Methode, »lookup()«, aktiviert<br />
den Bot, sobald er eine Nachricht<br />
der Form »!Schlagwort« sieht. Kennt er<br />
»Schlagwort«, gibt er dessen Bedeutung<br />
aus, sonst schweigt er. Das ist klug, denn<br />
es könnte sich ja auch um den Befehl für<br />
ein anderes Plugin handeln. Mit nur zwei<br />
Methoden lassen sich Informationen also<br />
reproduzierbar speichern.<br />
Eine typische Interaktion mit dem Bot<br />
sieht etwa wie in Listing 9 aus, das<br />
demonstriert, wie die IRC-Nutzer Informationen<br />
speichern und abrufen. Da<br />
die Daten zudem in einer schematisch<br />
simplen SQlite-Datenbank stecken, beschränkt<br />
sich der Zugang zum Wissen<br />
nicht auf den Bot. Ein Konsolen-Client<br />
könnte die Schlagwörter auflisten, Daten<br />
ließen sich aus bestehenden Quellen importieren,<br />
etwa aus Wikis. Aber: Ganze<br />
Paragraphen stören im IRC eher. Infobots<br />
zeichnet aus, dass sie kurze Sätze und<br />
keine Romane von sich geben.<br />
Listing 7: »infobot.rb«<br />
01 require "sqlite3"<br />
11 CREATE TABLE IF NOT EXISTS infobot(<br />
02 <br />
12 id INTEGER PRIMARY KEY<br />
03 class Infobot<br />
AUTOINCREMENT NOT NULL,<br />
04 include Cinch::Plugin<br />
13 term TEXT NOT NULL,<br />
05 <br />
14 value TEXT NOT NULL<br />
06 DB = ENV["HOME"] + "/infobot.db"<br />
07 <br />
15 )")<br />
08 def initialize(*args)<br />
16 super<br />
09 @db = SQLite3::Database.new(DB)<br />
17 end<br />
10 @db.execute("<br />
18 end<br />
Listing 8: Ergänzung zu »infobot.rb«<br />
01 # !rem Schlagwort = Die Information<br />
02 match(/rem ([^ ]+) = (.+)$/, method: :remember)<br />
03 def remember(m, term, val)<br />
04 @db.execute("INSERT OR REPLACE INTO infobot (term, value) VALUES (?, ?)", term, val)<br />
05 m.reply("Okay, #{term} bedeutet von nun an #{val}")<br />
06 rescue => e<br />
07 exception(e)<br />
08 m.reply("Fehler beim Merken von '#{term}'")<br />
09 end<br />
10 <br />
11 # !Schlagwort<br />
12 match(/([^ ]+)$/, method: :lookup)<br />
13 def lookup(m, term)<br />
14 res = @db.get_first_value("SELECT value FROM infobot WHERE term = ?", term)<br />
15 if res<br />
16 m.reply(res)<br />
17 end<br />
18 end<br />
Listing 9: Knowledge Base im IRC<br />
01 !rem deploy = Beim Deployen muss unbedingt auf X und Y geachtet werden<br />
02 !rem github_api = http://developer.github.com/v3/<br />
03 [einige Tage später]<br />
04 Hmm, wo war noch gleich die GitHub API Dokumentation...<br />
05 !github_api<br />
06 http://developer.github.com/v3/<br />
Fazit<br />
Bereits 150 Zeilen Code reichen aus,<br />
um einen Chatraum in ein hilfreiches<br />
Werkzeug für Entwicklung und Dokumentation<br />
zu verwandeln. Es gibt weitere<br />
Möglichkeiten, über IRC-Bots die Arbeit<br />
zu erleichtern. Egal ob eine Trac-Anbindung,<br />
das Verwalten von Memos oder das<br />
Einchecken für Home-Office-Arbeiter –<br />
der Fantasie sind kaum Grenzen gesetzt.<br />
Da es zudem Bibliotheken für nahezu<br />
jede Sprache gibt, müssen die Entwickler<br />
nicht einmal umlernen, um einen Bot zu<br />
programmieren. (kki) <br />
n<br />
Infos<br />
[1] Eggheads: [http://www.eggheads.org]<br />
[2] Cinch: [https://github.com/cinchrb/cinch]<br />
[3] Cinch-Dokumentation: <br />
[http://rubydoc.info/gems/cinch/]<br />
[4] Das API von Github: <br />
[https://api.github.com]<br />
[5] API-Dokumentation: <br />
[http://developer.github.com/v3/]<br />
[6] Infobot: <br />
[http://en.wikipedia.org/wiki/Infobot]<br />
[7] Alle Listings: [www.linux‐magazin.de/<br />
static/listings/magazin/2014/02/IRC‐Bots/]<br />
Der Autor<br />
Dominik Honnef ist seit<br />
zehn Jahren im IRC aktiv.<br />
Vor drei Jahren entwickelte<br />
er Cinch und hilft seitdem<br />
Leuten dabei, eigene Plugins<br />
zu entwerfen.
Titelthema<br />
www.linux-magazin.de Sites archivieren 02/2014<br />
40<br />
Drei praxiserprobte Tools, um Websites zu archivieren<br />
Wider das Vergessen<br />
Wer eine Website betreibt, muss mit Auseinandersetzungen über abfällige Forenbeiträge, Formulierungen<br />
über Produkteigenschaften, frühere Shop-Preise oder -Impressen rechnen. Ein gelegentlicher Site-Abzug<br />
bringt den Betreiber in eine bessere Position. Tim Schürmann<br />
© lightwise, 123RF.com<br />
„Das stand letzte Woche aber nicht da!“<br />
Derartige Aussagen hören nicht nur Inhaber<br />
von Onlineshops nach der übereilten<br />
Bestellung eines Kunden, auch Moderatoren<br />
in Foren müssen sich mit dem<br />
Nachklang fremder Beiträge herumschlagen.<br />
Um später falsche Behauptungen<br />
der Benutzer, Käufer oder sogar windiger<br />
Abmahnanwälte zu widerlegen, sollten<br />
Administratoren von ihrer Website regelmäßig<br />
einen Schnappschuss erstellen und<br />
archivieren. Das gilt insbesondere für dynamische<br />
Internetauftritte, bei denen die<br />
Nutzer die Inhalte selbst gestalten oder<br />
Surfgewitter<br />
einpflegen – wie etwa in einem Forum.<br />
Nur so lassen sich auch später noch Seitenänderungen<br />
schnell nachvollziehen.<br />
Schließlich gibt es für eine Konservierung<br />
auch noch nostalgische Gründe: Administratoren<br />
und Website-Betreiber können<br />
so auf die Anfänge ihres Onlineshops,<br />
alte Produkte oder kuriose Diskussionen<br />
zurückblicken.<br />
Kriechtiere<br />
Beim Sichern des Ist-Zustands helfen<br />
die Tools Heritrix, Httrack und natürlich<br />
Heritrix, Httrack und Wget rufen schnell hintereinander<br />
alle Seiten eines Internetauftritts<br />
ab. Sie erzeugen folglich eine zusätzliche und<br />
je nach Einstellungen auch relativ hohe Last,<br />
die Webserver-Heuristiken schnell als Angriff<br />
interpretieren. Benutzer sind daher gut beraten,<br />
die Werkzeuge nur auf eigene Auftritte anzuwenden<br />
und sicherzustellen, dass die Tools<br />
keine Links zu anderen Web sites verfolgen. Wer<br />
trotzdem einen fremden Auftritt archivieren<br />
möchte oder muss, sollte dessen Betreiber<br />
besser und vorab um Erlaubnis bitten.<br />
der Klassiker Wget. Sie rufen wie ein<br />
normaler Besucher die Startseite eines<br />
Internet auftritts ab und folgen dann allen<br />
Links. Eine Software, die sich nach diesem<br />
Prinzip von einer Seite zur nächsten<br />
hangelt, nennt man Crawler oder Spider.<br />
Mit dem gleichen Verfahren klappern<br />
Suchmaschinen das Web ab. Anders als<br />
Google & Co. speichern Heritrix, Httrack<br />
und Wget jedoch alle auf ihrem Weg besuchten<br />
Seiten auf dem lokalen Rechner<br />
ihres Benutzers.<br />
Die Arbeitsweise der drei Tools hat den<br />
Vorteil, dass der Administrator beliebige<br />
Websites archivieren kann, selbst wenn<br />
er keinen Zugriff auf den Webserver und<br />
die Datenbank besitzt oder ihm die Admin-Rechte<br />
auf Dauer nichts nützen, da<br />
das CMS die Datenbankstruktur ändert.<br />
Heritrix, Httrack und Wget biegen zudem<br />
in den heruntergeladenen Seiten automatisch<br />
alle Links auf die entsprechenden<br />
gespeicherten Kopien um, beispielsweise<br />
wird aus einem ankommenden<br />
<br />
<br />
<br />
auf der eigenen Festplatte dann ein:<br />
<br />
<br />
<br />
Daher lässt sich die archivierte Website<br />
genauso wie das Original mit einem<br />
Browser aufrufen und durchstreifen. Die<br />
Tools ersetzen jedoch kein Backup, ein<br />
defekter Onlineshop oder CMS lässt sich<br />
aus den gespeicherten Seiten in akzeptabler<br />
Zeit nicht wiederherstellen.<br />
Die Tester untersuchten alle drei Werkzeuge<br />
auf einem System mit Ubuntu
13.10, die Anbindung ans Internet erfolgte<br />
über eine VDSL-Leitung. Als Testobjekte<br />
dienten eine statische Website mit etwa<br />
220 Dateien einerseits, der Onlineshop<br />
der Media linx AG [1] andererseits.<br />
E Heritrix<br />
Das Internet-Archive-Projekt [https://<br />
archive. org] verfolgt das hehre Ziel, die<br />
Zeitgeschichte des WWW zu ar chivieren.<br />
Im Backend der Wayback-Machine arbeitet<br />
ein selbst entwickelter Crawler namens<br />
Heritrix [2]. Das in Java geschriebene<br />
Tool steht unter der Apache License<br />
2.0 und lädt auch weniger altruistisch<br />
ambitionierte Anwender zum Speichern<br />
einzelner Websites ein.<br />
Auf der Heritrix-Homepage finden sich<br />
die ältere Version 1.14, die nur Bugfixes<br />
erfährt – wobei die letzte Aktualisierung<br />
aus dem Jahr 2010 stammt –, und neue<br />
Ausgaben, die auf dem Spring-Framework<br />
für Java [3] aufsetzen. Bei Redaktionsschluss<br />
aktuell war die Version 3.1.1, die<br />
sich auch im Test beweisen musste.<br />
Heritrix erwartet ein Java Runtime Environment<br />
(JRE). Die Entwickler empfehlen<br />
die Fassung von Oracle in der veralteten<br />
Version 6. Unter Ubuntu 13.10 arbeitete<br />
der Crawler im Test aber reibungslos mit<br />
dem vom Software-Center angebotenen<br />
Open JDK 7 zusammen. Neben dem<br />
Quellcode bieten die Entwickler ein Binärpaket<br />
an [3].<br />
Dieses müssen Anwender nur noch auf<br />
der Festplatte entpacken, den Pfad zum<br />
Heretrix-Ordner in der Umgebungsvariablen<br />
»HERITRIX_HOME« hinterlegen<br />
(wie etwa »export HERITRIX_HOME=<br />
/home/tim/heritrix‐3.1.1«) und schließlich<br />
das Tool aufrufen:<br />
$HERITRIX_HOME/bin/heritrix ‐a Name:Passwort<br />
Die Bedienung erfolgt über eine Weboberfläche<br />
im Browser. Dazu startet Heritrix<br />
automatisch einen eigenen Webserver,<br />
der an Port 8443 lauscht.<br />
Die Verbindung erfolgt HTTPS-verschlüsselt,<br />
weshalb Nutzer bei der ersten Kontaktaufnahme<br />
ein von Heritrix unterschriebenes<br />
Zertifikat bestätigen müssen.<br />
Für den Zugriff sind zudem ein Benutzername<br />
und ein Passwort notwendig, die<br />
der Administrator entweder beim Start<br />
von Heritrix über den Parameter »‐a« vorgibt<br />
oder in einer Textdatei hinterlegt.<br />
Für jede zu sichernde Website muss der<br />
Benutzer einen so genannten Job anlegen.<br />
Technisch besteht der aus einem<br />
Verzeichnis, in dem später die eigentlichen<br />
Webseiten nebst Logs landen, sowie<br />
einer kryptischen Konfigura<br />
tionsdatei im<br />
XML-For mat. Um sie<br />
ganz zu verstehen, ist<br />
ein ausführliches Studium<br />
des lückenhaften<br />
Wiki notwendig, hilfreich<br />
sind Kenntnisse<br />
über das Frame work<br />
Spring.<br />
Die Bearbeitung der<br />
Konfigurationsdatei erfolgt<br />
vorwiegend in<br />
einem rudimentären<br />
Editor im Browser<br />
(Abbildung 2). Immerhin<br />
lassen sich Vorlagen<br />
für Job-Konfigurationen<br />
anlegen, so genannte<br />
Profiles.<br />
In der Konfigurationsdatei<br />
hinterlegt der<br />
Benutzer mindestens<br />
die URLs der zu speichernden<br />
Websites.<br />
Die bezeichnet Heritrix<br />
verwirrenderweise<br />
als Seeds. Das<br />
Tool kennt neben dem<br />
HTTP- auch das FTP-<br />
Protokoll und sichert<br />
somit auch komplette<br />
FTP-Server.<br />
Der Crawler gibt sich<br />
später als »Mozilla/5.0«<br />
aus, fügt im Useragent<br />
in Klammern aber seinen<br />
Namen, seine Versionsnummer<br />
und<br />
Abbildung 1: Die Weboberfläche von Heritrix besteht nur aus einzelnen eine von dem Benutzer<br />
vorgegebene Inter-<br />
HTML-Formularen. Zwischen ihnen wechseln Anwender über die Vor- und<br />
Zurück-Buttons ihres Browsers.<br />
netadresse hinzu. In<br />
der Kon figurationsdatei<br />
lässt sich ein beliebiger anderer<br />
Die karge Weboberfläche lässt sich nur<br />
umständlich bedienen (Abbildung 1). Um Useragent eintragen. Dort muss ein Anwender<br />
auch die Zugangsdaten hinterle-<br />
beispielsweise zu erfahren, ob eine Aktion<br />
noch läuft oder bereits abgeschlossen<br />
ist, müssen Anwender manuell die griffsschutz archivieren soll. Das Tool<br />
gen, wenn Heritrix eine Website mit Zu-<br />
aktuelle Seite neu laden.<br />
kann dabei mit RFC 2617 (Basic und Digest)<br />
und HTML-Formularen umgehen.<br />
Arbeitsagentur<br />
Im Schneckentempo<br />
Nachdem der Administrator die Konfigurationsdatei<br />
angepasst hat, muss er<br />
den Job explizit bauen lassen (»build«).<br />
Erst jetzt darf er den Job scharf schal-<br />
Abbildung 2: Diese Einstellungen in der recht unübersichtlichen Konfigurationsdatei<br />
bestimmen das Verhalten von Heritrix.<br />
Sites archivieren 02/2014<br />
Titelthema<br />
www.linux-magazin.de<br />
41
Titelthema<br />
www.linux-magazin.de Sites archivieren 02/2014<br />
42<br />
ten (»launch«) und ihn auf das Internet<br />
loslassen (»unpause«). Standardmäßig<br />
nimmt Heritrix alle Cookies an und beachtet<br />
die Regeln in einer eventuell vorhandenen<br />
»robot.txt«.<br />
Der Crawler geht sehr gemütlich zu Werke<br />
– im Test sickerten durchschnittlich nur<br />
4 KBit pro Sekunde durch die Leitung.<br />
Das Speichern der einfachen statischen<br />
Homepage dauerte so 12 Minuten, der<br />
Abruf des kompletten Onlineshops quälende<br />
Tage (Abbildung 3). Über die Konfigurationsdatei<br />
kann der Anwender den<br />
Download-Prozess nur indirekt beschleunigen,<br />
etwa indem er die Link-Tiefe beschränkt<br />
und über Filterregeln bestimmte<br />
URLs ausnimmt.<br />
Wer Heritrix nicht so lange unbeaufsichtigt<br />
lassen möchte, kann den Job pausieren<br />
beziehungsweise unterbrechen.<br />
Auch lassen sich Checkpoints anlegen,<br />
die den aktuellen Arbeitsstand in einem<br />
eigenen Unterverzeichnis konservieren.<br />
Später kann der Benutzer den Checkpoint<br />
wiederherstellen, Heritrix arbeitet dann<br />
an der alten Stelle weiter.<br />
Darüber hinaus führt das Tool ein Journal,<br />
mit dessen Hilfe es nach einem Absturz<br />
die zuletzt gelesenen Daten rekonstruiert.<br />
Den aktuellen Arbeitsfortschritt protokolliert<br />
Heritrix in mehreren Logdateien im<br />
Job-Verzeichnis sowie auf der Weboberfläche.<br />
Die Logs halten detailliert fest,<br />
wann Heritrix welche Seiten angefordert<br />
hat. Zudem schreibt das Tool mehrere<br />
Reports, die Auskunft über die Prozessorauslastung,<br />
die Zeitdauern, den Datendurchsatz<br />
und so weiter geben [4].<br />
Paketpacker<br />
Heritrix steckt sämtliche Seiten in ein<br />
WARC-Archiv. Neben den eigentlichen<br />
Web seiten enthält dieses „Web ARChive“<br />
auch Metadaten, etwa die Zeitpunkte der<br />
einzelnen Requests und die dabei verwendeten<br />
HTTP-Header. Zwar ist das WARC-<br />
Format in einem Standard festgeschrieben<br />
[5], jedoch nur wenige Programme<br />
benutzen es. Wenigstens legt Heritrix im<br />
Verzeichnis »bin« das Tool »arc reader«<br />
bei, das ein WARC-Archiv wohl zu öffnen<br />
vermag, unter Ubuntu 13.10 jedoch den<br />
Dienst verweigerte.<br />
Mit WARC-Dateien füttern lässt sich auch<br />
die Wayback-Machine [6]. Diese Webanwendung<br />
aufzusetzen erfordert jedoch<br />
Kenntnisse des Application-Servers<br />
Tomcat.<br />
Glücklicherweise handelt<br />
es sich bei einem<br />
WARC-Archiv schlicht<br />
um eine große mit<br />
Gzip gepackte Textdatei,<br />
die Admins mit<br />
einem selbst geschriebenen<br />
Skript auseinandernehmen<br />
beziehungsweise<br />
analysieren<br />
können.<br />
Heritrix bietet eine<br />
rudimentäre Versionsverwaltung:<br />
Sobald<br />
der User einen Job<br />
anwirft, erstellt Heritrix<br />
im zugehörigen<br />
Job-Verzeichnis einen<br />
neuen Ordner. Dieser<br />
trägt das aktuelle Datum<br />
und die Uhrzeit<br />
als Namen. Darin finden sich dann wiederum<br />
alle Logdateien, die Reports, eine<br />
Kopie der Konfigurationsdatei und die<br />
WARC-Datei. Ins Job-Verzeichnis legt Heritrix<br />
zudem einen symbolischen Link namens<br />
»Latest«, der auf die letzte Version<br />
zeigt. Die Konfigurationsdatei offeriert<br />
keine Möglichkeit, diese Namensschemata<br />
zu ändern.<br />
E Httrack und seine<br />
Frontends<br />
Abbildung 3: Selbst nach über fünf Stunden hatte Heritrix erst 42 MiByte<br />
heruntergeladen. Konkurrent Wget war hingegen nach einer Stunde schon<br />
fertig und hatte dabei über 700 MByte gesammelt.<br />
Das Kommandozeilentool Httrack [7]<br />
steht unter der GPLv3 und liegt praktisch<br />
allen großen Distributionen bei. Zum Test<br />
trat die in Ubuntu 13.10 serienmäßige Version<br />
3.47.21 an. Wem die Bedienung im<br />
Terminal zu fummelig ist, der muss eine<br />
Wahl treffen zwischen zwei grafischen<br />
Frontends: dem auf Qt fußenden Httraqt<br />
[8] und der Webanwendung Webhttrack.<br />
Letztere liegt gewöhnlich Httrack bei, einige<br />
Distributoren verfrachten sie jedoch<br />
in ein eigenes Paket – so auch Canonical<br />
in Ubuntu 13.10. Nach seinem Start aktiviert<br />
Webhttrack im Hintergrund seinen<br />
eingebauten Webserver, der an Port 8080<br />
lauscht, und öffnet anschließend automatisch<br />
die Weboberfläche im voreingestellten<br />
Browser (Abbildung 4).<br />
Vom Konkurrenten Httraqt gibt es fertige<br />
Pakete für Ubuntu, Open Suse, Fedora<br />
und Debian auf Sourceforge im Unterordner<br />
»Packages« [9]. Die Tester ließen<br />
die Version 1.1.9 aus dem Ubuntu-Paket<br />
antreten. In der Bedienung ähneln<br />
sich Webhttrack und Httraqt sehr: Beide<br />
Front ends fragen nach und nach die Einstellungen<br />
ab und starten anschließend<br />
den Download automatisch (Abbildung<br />
5). Übrigens stellt auch die Kommandozeilen-Version<br />
Httrack ihrem Benutzer<br />
Fragen, lässt sich aber alternativ auch<br />
über Parameter steuern.<br />
In jedem Fall muss der Anwender als<br />
Erstes ein neues Projekt anlegen. In ihm<br />
merkt sich Httrack die URL der zu speichernden<br />
Website sowie alle zugehörigen<br />
Einstellungen. Später lässt sich dann<br />
der Download mit wenigen Mausklicks<br />
erneut anstoßen. Wie bei Heritrix darf<br />
der Benutzer mehrere URLs vorgeben,<br />
von denen aus sich der Crawler seinen<br />
Weg durch das Internet bahnt. Httrack<br />
zapft neben HTTP- auch FTP-Server an.<br />
Bei zugriffsgeschützten Seiten müssen<br />
Anwender ihren Benutzernamen und das<br />
Passwort hinterlegen.<br />
Feine Auslese<br />
Im zweiten Schritt entscheidet sich der<br />
Anwender für eine Download-Art. Httrack<br />
kann in allen Situationen selbstständig<br />
entscheiden oder aber bei Links mit herunterladbaren<br />
Inhalten jedes Mal nachfragen.<br />
Wenn nicht anders instruiert, holt
www.linux-magazin.de<br />
Sites archivieren 02/2014<br />
Titelthema<br />
43<br />
Abbildung 5: … Httraqt ähneln sich in Funktionsumfang und Bedienung sehr. Nach<br />
Abbildung 4: Die grafischen Httrack-Frontends Webhttrack und …<br />
dem Abfragen der Parameter beginnen beide mit dem Download.<br />
Httrack nur die Seiten der vorgegebenen<br />
Domains, andernfalls auch alle anderen<br />
von dort aus verlinkten Webpages. Auf<br />
Wunsch lädt Heritrix nur ganz bestimmte<br />
Dateien herunter, etwa Zip-Archive oder<br />
PNG-Bilder, oder prüft lediglich alle Links<br />
auf ihre Erreichbarkeit.<br />
Wer über einen Proxy ins Internet geht,<br />
muss diesen in den Einstellungen hinterlegen,<br />
wo er Httrack im Ganzen detailliert<br />
beeinflussen kann. So beschränkt er hier<br />
den Download auf HTML-Dateien, klammert<br />
Fehlerseiten vom Speichern aus<br />
und schließt über Filterregeln bestimmte<br />
URLs, Seiten und Dateien explizit ein<br />
oder aus. Vorgegeben ist eine Regel, mit<br />
der Httrack Links auf das Werbenetzwerk<br />
»ad.doubleclick.net« ignoriert.<br />
Ladehemmung<br />
Httrack gibt sich gegenüber dem Webserver<br />
als »Mozilla/4.5« aus, tackert aber in<br />
die Fußzeile einer jeden heruntergeladenen<br />
Seite einen Kommentar mit seinem<br />
Namen an. Anwender dürfen sowohl den<br />
Useragent als auch den Kommentar beliebig<br />
abändern. Httrack achtet vorhandene<br />
»robot.txt«-Dateien oder ignoriert<br />
auf Wunsch entweder nur deren Filterregeln<br />
oder die Datei als Ganzes. Der<br />
Crawler nimmt Cookies an, analysiert<br />
Java-Dateien und lässt sich am Ende eine<br />
Wortliste entlocken.<br />
Httrack geht kaum flotter als Heritrix zur<br />
Sache. Im Schnitt wanderten 20 KBit pro<br />
Sekunde durch die Leitungen. Die einfache<br />
statische Seite mit 221 Dateien war<br />
innerhalb von fünf Minuten auf dem lokalen<br />
Rechner, der Onlineshop erst nach<br />
mehreren Stunden. Wer das zu langsam<br />
findet, der schraubt in den Projekteinstellungen<br />
so lange an der Übertragungsrate,<br />
der zu verfolgende Link-Tiefe so wie der<br />
Anzahl der Verbindungen, bis er eine<br />
angemessene Dauer erreicht.<br />
Abgebrochene Downloads kann Httrack<br />
übrigens später wieder fortsetzen.<br />
Webhttrack und Httraqt zeigen während<br />
des Downloads die gerade angefragten<br />
Abbildung 6: Webhttrack-Nutzer dürfen einzelne Downloads abbrechen.<br />
Sinnvoll ist das beispielsweise bei sehr großen Dateien oder Archiven.<br />
URLs an (Abbildung 6). Mit einem Klick<br />
auf »Auslassen« kann der Anwender die<br />
URL überspringen. Da kleine Dateien gerade<br />
bei mehreren offenen Verbindungen<br />
recht zügig vorbeihuschen, gelingt das<br />
Auslassen jedoch nur bei größeren.<br />
Ein eigenes Namensschema<br />
Eine eigene Versionsverwaltung bietet<br />
Httrack nicht, ein Projekt lässt sich nur<br />
aktualisieren. Für jedes Projekt erstellt<br />
das Tool aber ein eigenes Verzeichnis.<br />
Darin legt es jede Seite<br />
in Unterverzeichnissen<br />
ab, die sich wiederum<br />
an der URL der Seite<br />
orientieren. So landet<br />
zum Beispiel »http://<br />
www.medialinx‐shop.<br />
de/agb« im Unterordner<br />
»www.medialinx<br />
-shop.de/agb/«.<br />
Wer es anders will,<br />
wählt entweder einen<br />
von mehreren Vorschlägen<br />
oder bastelt<br />
sich über Platzhalter<br />
ein eigenes Namensschema.<br />
Auf<br />
diese Weise kann er<br />
beispielsweise alle<br />
HTML-Seiten im Verzeichnis<br />
»web« sammeln<br />
und die Bilder<br />
unter »images«. In<br />
jedem Fall speichert
Titelthema<br />
www.linux-magazin.de Sites archivieren 02/2014<br />
44<br />
Heritrix sämtliche Bestandteile der Seite,<br />
lädt also auch Javascript- und CSS-Dateien<br />
herunter, die Menüs bleiben als<br />
Links erhalten.<br />
E Wget<br />
Der Weg in die Klassiker-Abteilung der<br />
Download-Tools führt schnurstracks zu<br />
Wget. Sofern die eigene Distribution<br />
das kleine Kommandozeilen-Programm<br />
nicht schon von Haus aus installiert,<br />
lässt es sich schnell über den Paketmanager<br />
nachholen. Im Gegensatz zu Heritrix<br />
und Httrack existiert kein offizielles<br />
Wget-GUI. Die im Internet feilgebotenen<br />
inoffiziellen Frontends sind durchweg<br />
veraltet.<br />
Um Wget auf eine Website anzusetzen,<br />
übergibt ihm der Anwender die entsprechenden<br />
URLs und ein paar Parameter:<br />
wget ‐r ‐p ‐k ‐EU<br />
http://www.medialinx‐shop.de<br />
Mit »‐r« läuft das Tool rekursiv durch<br />
die Seiten, »‐p« sorgt dafür, dass Wget<br />
alle zur Darstellung notwendigen Bestandteile<br />
einer Website herunterlädt.<br />
Letzteres umfasst insbesondere die CSSund<br />
Javascript-Dateien, Menüs bleiben<br />
als Links erhalten. »‐k« biegt die Links<br />
auf die Kopien um, während »‐E« allen<br />
HTML-Dateien die Endung ».html« verpasst.<br />
Letzteres ist beispielsweise bei<br />
Contentmanagement-Systemen sinnvoll,<br />
die in ihren URLs die Endung ».php« verwenden.<br />
Wget zapft neben HTTP- und HTTPSauch<br />
FTP-Server an. Weitere Parameter<br />
geben die Zugangsdaten für zugriffsgeschützte<br />
Seiten sowie maximale Linktiefe<br />
und die Anzahl der Wiederholungen vor.<br />
Anfragen lassen sich sogar auf IPv4- oder<br />
IPv6-Adressen beschränken.<br />
Die statische Beispielseite hatte Wget<br />
in weniger als 10 Sekunden heruntergeladen,<br />
den Onlineshop binnen einer<br />
Stunde (Abbildung 7). Im Gegenzug beanspruchte<br />
Wget damit aber auch die<br />
Webserver besonders stark. Über Parameter<br />
kann der Protokollant die Download-<br />
Geschwindigkeit jedoch drosseln und zudem<br />
zwischen den Anfragen Wartezeiten<br />
einfügen.<br />
Als User-Agent verwendet Wget seinen<br />
Namen mit der Versionsnummer, der Anwender<br />
darf ihn gegen einen beliebigen<br />
Abbildung 7: Wget rennt extrem schnell durch die Website und protokolliert außerdem den Download-<br />
Fortschritt einer jeden Seite im Terminal.<br />
Eine Versionsverwaltung kennt Wget<br />
nicht, bei einem erneuten Download eranderen<br />
austauschen. Über Filterregeln<br />
ausgewählt kann er Seiten und Dateien<br />
vom Download ausnehmen. Anders als<br />
Heritrix und Httrack lädt Wget erst auf<br />
explizite Weisung Dateien und HTML-<br />
Seiten von anderen Domains herunter.<br />
Das Beachten der »robots.txt« darf der<br />
Anwender abschalten. Das ist auch oft<br />
notwendig, da viele Seiten Wget in der<br />
»robots.txt« den Zugriff verbieten.<br />
Bei HTTPS-Verbindungen kann Wget das<br />
Zertifikat des Servers auf seine Gültigkeit<br />
prüfen. Cookies nimmt das Tool standard<br />
mäßig an, verwendet aber auch in<br />
Dateiform schon vorhandene auf Zuruf<br />
oder weist die Datenkekse komplett ab.<br />
Das Tool protokolliert im Terminal jeden<br />
seiner Schritte (Abbildung 7), die Textflut<br />
lässt sich in eine Logdatei umleiten.<br />
Das Wget-Archiv<br />
Abbildung 8: Die von den Werkzeugen heruntergeladenen Webseiten lassen sich genau so bedienen wie das<br />
Original – hier das von Wget angelegte Archiv.
stellt das Tool jedoch ein Backup bereits<br />
vorhandener Dateien. Gewohnheitsmäßig<br />
sammelt Wget heruntergeladene Webseiten<br />
in einem Unterverzeichnis mit dem<br />
Domainnamen. Das Tool orientiert sich<br />
dabei wie Httrack an der URL: Die Seite<br />
unter »http://www.medialinx‐shop.de/<br />
agb« landet im Unterverzeichnis »www.<br />
medialinx‐shop.de/agb« (Abbildung 8).<br />
Schema F<br />
Nur in engen Grenzen kann der User<br />
dieses Schema beeinflussen. So darf<br />
er alle Dateien in einem einzigen Verzeichnis<br />
parken und ein beliebig langes<br />
Präfix der URL streichen. Im letzten<br />
Fall landet dann etwa die Seite »http://<br />
www.medialinx‐shop.de/zeitschriften/<br />
linux‐magazin‐1/abm2002.html« im<br />
Verzeichnis »linux‐magazin‐1/abm2002.<br />
html«. Auf Wunsch verfrachtet Wget aber<br />
auch alle Daten in eine große Text- oder<br />
eine WARC-Datei.<br />
Alternativ kann Wget auch nur kurz prüfen,<br />
ob alle Linkziele erreichbar sind.<br />
Das Umsetzen der Links in den Archiven<br />
klappte im Test allerdings nicht ganz fehlerfrei.<br />
So führte der Menüpunkt »Raspberri<br />
Pi« nicht zur entsprechenden Seite,<br />
sondern öffnete nur das Verzeichnis, in<br />
der die Unterseite lag.<br />
Verschiedene Archivare<br />
Auch wenn sich der Funktionsumfang<br />
der drei Tools stark ähnelt, richten sie<br />
sich dennoch an ganz unterschiedliche<br />
Zielgruppen. Heritrix ist deutlich auf die<br />
Archivierung von Webseiten und das<br />
Internet-Archive-Projekt zugeschnitten.<br />
Die Konfiguration erweist sich als umständlich<br />
und ist im Wiki nur lückenhaft<br />
dokumentiert. Java-Programmierer mit<br />
Kenntnissen in Spring dürften sich jedoch<br />
zügig heimisch fühlen und können zudem<br />
den Crawler erweitern beziehungsweise<br />
umbauen.<br />
Das Frontend Webhttrack und sein Arbeitskollege<br />
Httraqt starten hingegen<br />
nach wenigen Mausklicks den Download.<br />
Sie eigenen sich damit für alle Site-<br />
Administratoren, die unkompliziert einen<br />
Schnappschuss erstellen wollen. Das<br />
Kommandozeilen-Werkzeug »httrack «<br />
lässt sich zudem in eigene Skripte einbinden<br />
– vorausgesetzt der Anwender<br />
freundet sich mit den zahlreichen kryptischen<br />
Parametern an [10].<br />
Sowohl Httrack als auch Heritrix gehen<br />
äußerst gemächlich zu Werke. Das schont<br />
zwar den zu archivierenden Server, eine<br />
Site zu erfassen dauert jedoch mehrere<br />
Stunden. Httrack saugt dabei in den Standardeinstellungen<br />
etwas schneller als Heritrix.<br />
Angenehm flott holt nur Wget die<br />
Seiten aus dem Netz. Der Klassiker liegt<br />
jeder Distribution bei, lässt sich einfach<br />
in Bash-Skripte einbinden und akzeptiert<br />
zahlreiche Feineinstellungen über Parameter.<br />
Die müssen Einsteiger allerdings<br />
erst einmal lernen, um das Studium der<br />
ausführlichen Manpage kommen sie folglich<br />
nicht herum.<br />
Nicht gerichtsfest<br />
Wichtig zu wissen: Keines der Werkzeuge<br />
fertigt eine rechtssichere Kopie an,<br />
denn die heruntergeladenen Seiten lassen<br />
sich allesamt nachträglich manipulieren.<br />
Wer Abmahnung durch Konkurrenten befürchtet,<br />
könnte aber die Archive digital<br />
signieren und auf ein externes Medium<br />
brennen, am besten write-only, behelfsweise<br />
auch eine DVD. Bei Aussage gegen<br />
Aussage bekommt der eigene Rechtsanwalt<br />
zumindest so etwas wie einen Anscheinsbeweis<br />
in die Hand. (jk) n<br />
Infos<br />
[1] Medialinx Online-Shop:<br />
[http:// www. medialinx‐shop. de]<br />
[2] Heritrix: [https:// webarchive. jira. com/<br />
wiki/ display/ Heritrix/ Heritrix]<br />
[3] Spring-Framework: [http:// spring. io]<br />
[4] Alle von Heritrix erzeugten Logs und Reports:<br />
[https:// webarchive. jira. com/ wiki/<br />
display/ Heritrix/ Heritrix+Output]<br />
[5] WARC-Format:<br />
[http:// www. digitalpreservation. gov/<br />
formats/ fdd/ fdd000236. shtml]<br />
[6] Wayback-Machine: [http:// archive‐access.<br />
sourceforge. net/ projects/ wayback/]<br />
[7] Httrack: [http:// www. httrack. com]<br />
[8] Httraqt: [http:// httraqt. sourceforge. net/<br />
index_de. html]<br />
[9] Download-Seite von Httraqt:<br />
[http:// sourceforge. net/ projects/ httraqt/<br />
files/ ? source=navbar]<br />
[10] Dokumentation zum Kommandozeilentool<br />
Httrack: [http:// www. httrack. com/ html/<br />
fcguide. html]
Titelthema<br />
www.linux-magazin.de Reveal.js 02/2014<br />
46<br />
HTML-5-Präsentationen mit Reveal.js<br />
Spektakuläre Aufführung<br />
Aus schlichtem HTML- oder Markdown-Code erzeugt Reveal.js stilvoll animierte Präsentationen für den<br />
Browser. Die Javascript-Software zeichnet Codelistings farbig aus und kann sogar eine PDF-Version exportieren.<br />
Daneben integriert sie sich bestens in den Org-Modus von Emacs. Mathias Huber<br />
Wer Slid.es kostenlos nutzt, stellt allerdings<br />
alle seine Präsentationen offen in<br />
die Online-Galerie. Für einen Mitgliedsbeitrag<br />
von 7 US-Dollar im Monat gibt es<br />
aber auch vertraulichen Speicher für die<br />
Slides sowie einige erweiterte Features.<br />
Lokale Slides<br />
© Scott Griessel, 123RF.com<br />
Präsentationen in HTML 5 erfordern<br />
lediglich einen modernen Browser zum<br />
Vorführen. Daneben kann man sie leicht<br />
im Web archivieren. Wer dafür zur freien<br />
Javascript-Bibliothek Reveal.js [1] greift,<br />
muss sich nicht vor Libre Office Impress<br />
& Co. verstecken: Auf visuelle Effekte<br />
wie Überblendungen, auf schrittweisen<br />
Seitenaufbau oder Code-Highlighting<br />
braucht er nicht zu verzichten. Die<br />
Homepage der Software demonstriert einen<br />
großen Teil der Features. Aktuell ist<br />
der MIT-lizenzierte Code in Version 2.5<br />
erhältlich [2].<br />
tierungen beherrscht. Für knifflige Fälle<br />
lässt er sich in den Quelltext-Modus umschalten.<br />
Damit erstellte Präsentationen<br />
kann man exportieren und lokal speichern<br />
oder weiterverwenden.<br />
Dank Open-Source-Lizenz kann der Anwender<br />
Reveal.js aber auch herunterladen<br />
und lokal damit arbeiten. Das erlaubt<br />
ihm beispielsweise, den Texteditor und<br />
das Versionskontrollsystem seiner Wahl<br />
für die Vortragsfolien einzusetzen. Der<br />
erste Schritt besteht im Download des<br />
Quellcodes, entweder als Tarball oder<br />
als Git-Klon. Im entstehenden Verzeichnis<br />
»reveal.js/« befindet sich die Demo-<br />
Präsentation als Datei »index.html«, sie<br />
eignet sich als Grundstock für die eigene<br />
Präsentation, daneben ist auch die<br />
Readme-Datei sehr informativ.<br />
Onlinedienst<br />
Am bequemsten kommt der Anwender<br />
zu einer Reveal.js-Präsentation, indem<br />
er Slid.es [3] benutzt, die Präsentationswebsite,<br />
die der Reveal.js-Autor Hakim<br />
El Hattab auf seiner Technologie aufgebaut<br />
hat. Sie bietet einen Wysiwyg-Editor<br />
im Webbrowser (Abbildung 1), der alle<br />
grundlegenden Funktionen und Forma-<br />
Abbildung 1: Der Onlinedienst Slid.es biet einen GUI-Editor für Reveal.js-Präsentationen.
Reveal.js 02/2014<br />
Titelthema<br />
www.linux-magazin.de<br />
47<br />
Abbildung 2: Eine einfache Präsentation im Überblick mit horizontalen und<br />
vertikalen Folien.<br />
Abbildung 3: Die so genannten Fragments können Text ein- oder ausblenden,<br />
animieren und markieren.<br />
Für einen ersten Versuch kopiert der Anwender<br />
»index.html« in eine HTML-Datei<br />
im selben Verzeichnis. Wer mehrere Präsentationen<br />
mit der Software erzeugen<br />
will, kann das Verzeichnis »reveal.js« an<br />
einen festen Ort in seinem Home kopieren<br />
und von dort einbinden, indem er die<br />
Pfade im »«-Element sowie im<br />
»«-Block am Ende der HTML-<br />
Datei anpasst.<br />
Im HTML-Header lässt sich auch eines<br />
der mitgelieferten Themes auswählen,<br />
die Hintergrund, Schrift und Farben bestimmen.<br />
Dazu ist folgende Zeile mit dem<br />
Namen des Theme zu befüllen:<br />
<br />
Die Namen lauten beispielsweise »default«,<br />
»night« oder »beige«, die vollständige<br />
Liste findet sich im Readme.<br />
Alles HTML<br />
In der HTML-Datei sind alle Folien von einem<br />
Div-Element der Klasse »reveal« und<br />
einem der Klasse »slides« eingeschlossen<br />
(Listing 1). Alles, was darin als Element<br />
»« gekennzeichnet ist, zeigt<br />
Reveal.js als einzelne Folie an. Zwischen<br />
den Slides wechselt man per Maus oder<br />
Pfeiltasten. Die Escape-Taste blendet einen<br />
Überblick (Abbildung 2) ein.<br />
In den Zeilen 4 bis 8 in Listing 1 stehen<br />
Sections, die wiederum in einer anderen<br />
Section enthalten sind. So entstehen<br />
Folien zu Unterpunkten, die Reveal.js<br />
nicht horizontal nacheinander einblendet,<br />
sondern von oben nach unten, wie<br />
auch die Übersicht in der Abbildung<br />
zeigt. Innerhalb einer Section stehen<br />
die üblichen HTML-Tags zur Verfügung.<br />
Die Überschrift erster Ordnung ist schon<br />
für den Titel der Präsentation vergeben,<br />
Folientitel stehen deshalb in »«.<br />
Textabschnitte markiert man mit »«,<br />
Bilder als »«-Tag mit relativer<br />
Pfad angabe zur Bilddatei, daneben gibt<br />
es Listen mit und ohne Nummerierung<br />
sowie Blockzitate.<br />
Das Video-Element aus HTML 5 integriert<br />
sogar Filmclips, sofern der Browser den<br />
passenden Codec besitzt. Links können<br />
nach außen ins Web oder innerhalb der<br />
Präsentation auf eine Sprungmarke verweisen:<br />
Link zu Folie 2<br />
Wer Punkte einer Aufzählung nacheinander<br />
einblenden, animieren oder auf<br />
Kom mando farbig hervorheben will (Abbildung<br />
3), nutzt so genannte Frag ments.<br />
Listing 2 zeigt eine Folie mit sequenziell<br />
eingeblendeten Stichpunkten sowie eine<br />
mit verschiedenen Texteffekten.<br />
Konfiguration<br />
Einstellungen für die ganze Präsentation<br />
lassen sich im Javascript-Bereich am<br />
Ende der HTML-Datei festlegen. Die dortige<br />
Methode »Reveal.initialize()« nimmt<br />
Schlüssel-Wert-Paare entgegen.<br />
Wer sich mit IT beschäftigt, braucht häufig<br />
Codelistings in seinen Präsentationen.<br />
Reveal.js setzt die Bibliothek Highlight.js<br />
[4] ein, die farbiges Syntax-Highlighting<br />
für zahlreiche Programmier- und Markupsprachen<br />
in den Browser zaubert. Wie<br />
Listing 3 demonstriert, ist der zitierte<br />
Quelltext von Pre- und Code-Elementen<br />
eingeklammert. Im »class«-Attribut<br />
nimmt Highlight.js die Programmierspra-<br />
Listing 1: Folien<br />
01 <br />
02 <br />
03 Einzelne horizontale Folie<br />
04 <br />
05 Vertikale Folie 1<br />
06 Vertikale Folie 2<br />
07 Vertikale Folie 3<br />
08 <br />
09 Weitere horizontale Folie<br />
10 <br />
11 <br />
Listing 2: Fragments<br />
01 <br />
02 <br />
03 <br />
Eins<br />
04 <br />
zwei<br />
05 <br />
drei!<br />
06 <br />
07 <br />
08 <br />
09 wachsen<br />
10 schrumpfen<br />
11 ausklappen<br />
12 einblenden<br />
13 rot markieren<br />
14 grün<br />
markieren<br />
15 blau markieren<br />
16
Titelthema<br />
www.linux-magazin.de Reveal.js 02/2014<br />
48<br />
01 <br />
che entgegen, »data‐trim« entfernt die<br />
überschüssigen Whitespaces.<br />
Markdown<br />
Wer die oben beschriebene Methode für<br />
lästige HTML-Bastelei hält, darf sich über<br />
eine Alternative freuen. Reveal.js ermöglicht<br />
es ihm nämlich, die Inhalte auch im<br />
kurzen und prägnanten Plaintext-Format<br />
Markdown [5] zu schreiben. Listing 4<br />
zeigt eine Folie mit Überschrift, Text,<br />
Link, Aufzählung und einem Listing. Anfang<br />
und Ende des Codes sind mit drei<br />
Backticks markiert, »javascript« stellt die<br />
Sprache ein.<br />
In eine ähnliche Kerbe wie Markdown<br />
schlägt Orgmode [6]. Der Emacs-Modus<br />
verwendet ebenfalls spartanisches<br />
Mark up und erzeugt daraus To-do-Listen,<br />
Aufsätze und Präsentationen. Letztere<br />
02 <br />
03 #!/usr/bin/env ruby<br />
04 <br />
05 File.open('/etc/hosts', 'a') do |file|<br />
06 50000.times {|x| file.puts '127.0.0.1 host‐fubar'}<br />
07 50000.times {|x| file.puts '::1 host‐fubar'}<br />
08 end<br />
09 <br />
10 <br />
01 <br />
Listing 3: Codelisting<br />
02 <br />
03 ## Eine Folie mit Markdown<br />
04 <br />
05 Hier steht Text mit einem [Link](http://<br />
linux‐magazin.de).<br />
06 ‐ eine Aufzählung<br />
07 <br />
08 ‐ zählt weiter<br />
09 <br />
01 # ‐*‐ coding: utf‐8 ‐*‐<br />
Listing 4: Markdown<br />
02 #+TITLE: Design Patterns in Ruby<br />
03 #+AUTHOR: Mathias Huber<br />
04 #+Email: mhuber@linux‐magazin.de<br />
05 <br />
06 #+OPTIONS: toc:nil reveal_overview:nil<br />
07 #+OPTIONS: num:nil<br />
08 #+OPTIONS: reveal_keyboard:t<br />
09 #+REVEAL_TRANS: linear<br />
10 #+REVEAL_THEME: sky<br />
11 #+REVEAL_HLEVEL: 2<br />
12 <br />
13 * Design Patterns<br />
Listing 5: Orgmode<br />
kann Emacs in sehr<br />
einfaches HTML verwandeln<br />
oder via Latex<br />
nach PDF exportieren.<br />
Glücklicherweise gibt<br />
es mit Org-reveal [7]<br />
eine Erweiterung, die<br />
die Brücke vom kargen<br />
Orgmode-Text zu den<br />
eindrucksvollen Reveal.js-Shows<br />
schlägt.<br />
Damit das Zusammenspiel<br />
des Exporters mit<br />
Emacs klappt, ist aber<br />
eine Orgmode-Version<br />
ab 8.0 nötig. Den aktuellen Versionsstand<br />
fragt der Benutzer mit dem Emacs-Kommando<br />
»org‐version« ab.<br />
Die aktuelle Release lässt sich von der<br />
Orgmode-Homepage als Tarball herunterladen<br />
oder per Git klonen. Mit den<br />
Befehlen »make; sudo make install« ist<br />
sie systemweit installiert. Im Versuch der<br />
Redaktion spielten beispielsweise Emacs<br />
24.3 und Orgmode 8.2 problemlos zusammen.<br />
Org-reveal lässt sich ebenfalls per Git<br />
klonen. Das entstehende Verzeichnis<br />
enthält die Datei »ox‐reveal.el«, die man<br />
ins Installationsverzeichnis von Orgmode<br />
packt. Die Editor-Konfigurationsdatei<br />
10 ```javascript<br />
11 // Diaschau ausschalten<br />
12 Reveal.configure({ autoSlide: 0 });<br />
13 <br />
14 // Dia alle 6s wechseln<br />
15 Reveal.configure({ autoSlide: 6000 });<br />
16 ```<br />
17 <br />
18 <br />
14 ** Principles<br />
15 ‐ Do not reinvent the wheel<br />
16 ‐ Names for prepacked solutions<br />
17 ‐ 23 patterns<br />
18 ‐ middle ground<br />
19 ** Applying Design Patterns to Ruby<br />
20 *** Internal Iterator<br />
21 #+BEGIN_SRC ruby<br />
22 a = [1,2,3,4]<br />
23 a.each {|x| puts x}<br />
24 #+END_SRC<br />
25 *** External Iterator<br />
26 [...]<br />
Abbildung 4: Listings erhalten dank Highlight.js farbige Hervorhebung.<br />
»~/.emacs« erhält anschließend die zusätzliche<br />
Zeile:<br />
(require 'ox‐reveal)<br />
Daneben legt die folgende Angabe den<br />
Pfad zur lokalen Installation von Reveal.<br />
js fest:<br />
(setq org‐reveal‐root "/Verzeichnis/U<br />
reveal.js")<br />
Nach einem Emacs-Neustart kennt Orgmode<br />
eine Tastenkombination, um Dateien<br />
als Reveal.js-Präsentationen zu exportieren:<br />
Mit [Strg]+[C], [Strg]+[E] ruft<br />
man die Exportfunktion auf, dort wählt<br />
der zweimalige Aufruf von [Shift]+[R]<br />
das HTML-5-Format aus.<br />
Orgmode im Detail<br />
Listing 5 zeigt, wie der Quelltext einer solchen<br />
Präsentation in Orgmode aussieht.<br />
Nach allgemeinen Meta-Informationen<br />
(Zeilen 1 bis 4) folgen Einstellungen für<br />
Reveal.js, die zum Großteil die gleichen<br />
Namen tragen wie im Javascript. Die<br />
Optionen »toc:nil reveal_overview:nil«<br />
verbergen das Inhaltsverzeichnis und<br />
die Übersicht, »num:nil« produziert<br />
Überschriften ohne Nummerierung, und<br />
dank »reveal_keyboard:t« kann der Vortragende<br />
die Folien per Tastatur wechseln,<br />
etwa mit den Pfeiltasten. Dann folgen<br />
die Angaben für die Animation beim<br />
Folienwechsel und das Theme.<br />
Der Inhalt der Folien selbst ist in Orgmode<br />
durch Sternchen am Beginn einer<br />
Zeile gekennzeichnet: »*« steht für die<br />
erste Gliederungsebene, »**« für die<br />
zweite und so weiter. Stichpunkte innerhalb<br />
einer Folie erhalten einfach ein
Abbildung 5: Google Chrome kann eine druckbare PDF-Version der Webpräsentation<br />
mit einer Seite pro Folie erzeugen.<br />
Minuszeichen am Zeilenanfang. Weiteres<br />
findet sich im sehr ausführlichen<br />
Handbuch auf der Orgmode-Website. Die<br />
Einstellung »REVEAL_HLEVEL« (Zeile<br />
11) teilt dem Exporter mit, ab welcher<br />
Gliederungsebene er vertikal wechselnde<br />
Folien erzeugen soll, hier unterhalb der<br />
zweiten, beispielsweise beim Punkt »***<br />
Internal Iterator«.<br />
Die Zeilen 21 bis 24 in Listing 5 demonstrieren,<br />
wie Orgmode Quellcode einbettet<br />
und dabei die Programmiersprache angibt.<br />
Org-reveal verwendet für das farbige<br />
Syntax-Highlighting übrigens nicht Highlight.js,<br />
sondern die Emacs-Erweiterung<br />
Htmlize.el [8]. Unter Debian und Ubuntu<br />
steht sie im Paket »emacs‐goodies« zur<br />
Verfügung, notfalls lässt sie sich einfach<br />
als Datei unter »~/.emacs.d« installieren.<br />
Sie verwandelt auf Wunsch alles in<br />
eingefärbtes HTML, wofür Emacs einen<br />
Highlighting-Modus besitzt.<br />
Zum Publizieren kann der Nutzer die<br />
HTML-Datei auf einen Webserver hochladen.<br />
Dabei darf er nicht vergessen, auch<br />
die verwendeten Bilddateien sowie das<br />
Reveal.js-Verzeichnis im richtigen Pfad<br />
bereitzustellen. Handlicher finden viele<br />
eine einzelne PDF-Datei. Ansehnliche<br />
PDFs lassen sich derzeit allerdings nur<br />
mit Googles Browser Chrome erzeugen.<br />
Dazu hängt der Anwender den Parameter<br />
»?print‐pdf« an die URL der Präsentation<br />
an, egal ob sich diese im Web oder auf der<br />
lokalen Platte befindet. Im Druck-Dialog<br />
wählt er das Querformat, »Als PDF‐Datei<br />
speichern« und »Keine Ränder« aus. So<br />
entsteht ein PDF mit einer Seite pro Folie<br />
(Abbildung 5).<br />
Reveal.js bietet noch<br />
viele weitere Funktionen<br />
und Einstellmöglichkeiten,<br />
es lohnt<br />
sich, die Dokumentation<br />
zu studieren. So<br />
lassen sich die Tastaturkürzel<br />
zum Navigieren<br />
ändern, etwa<br />
um ein Presenter-Eingabegerät<br />
einzurichten.<br />
Das Setzen des<br />
Javascript-Werts »autoSlide«<br />
wertet die<br />
Präsentation zur automatischen<br />
Diaschau<br />
für Messestände oder<br />
Schaufenster auf.<br />
Wer sich für die Vollinstallation von Reveal.js<br />
entscheidet, erhält einen lokalen<br />
Webserver und kann einzelne Markdown-Dateien<br />
zur Laufzeit einbinden.<br />
Mit Hilfe des Javascript-API lässt sich<br />
das Frame work außerdem mit eigenem<br />
Code erweitern.<br />
Ausblick und Alternative<br />
Eine Suche auf Github nach »reveal.js«<br />
fördert viele Projekte zu Tage, die auf<br />
der Software aufsetzen. Dazu gehören<br />
etwa ein GUI-Editor, die Einbindung in<br />
Owncloud und eine Gestensteuerung per<br />
Webcam. Wem Reveal.js dagegen schon<br />
zu viele Features hat, der kann sich Remark.js<br />
[9] ansehen. Es verwendet Markdown,<br />
ist schlichter und daher leichter zu<br />
erlernen, hat ansonsten aber vieles mit<br />
Reveal gemeinsam.<br />
n<br />
Infos<br />
[1] Reveal.js-Homepage:<br />
[http:// lab. hakim. se/ reveal‐js]<br />
[2] Reveal.js-Quelltext:<br />
[https:// github. com/ hakimel/ reveal. js]<br />
[3] Slid.es: [http:// slid. es]<br />
[4] Highlight.js: [http:// highlightjs. org]<br />
[5] Markdown: [http:// daringfireball. net/<br />
projects/ markdown/]<br />
[6] Emacs Orgmode: [http:// orgmode. org]<br />
[7] Org-reveal:<br />
[https:// github. com/ yjwen/ org‐reveal/]<br />
[8] Htmlize.el: [http:// fly. srk. fer. hr/ ~hniksic/<br />
emacs/ htmlize. el. cgi]<br />
[9] Remark.js:<br />
[https:// github. com/ gnab/ remark]
Titelthema<br />
www.linux-magazin.de Docbook 02/2014<br />
50<br />
Multi-Format-Publishing mit Docbook<br />
Doku-Maschine<br />
Docbook gilt als Nonplusultra der technischen Dokumentation. Dieser Artikel zeigt, dass der Einstieg in die<br />
XML-Anwendung gar nicht schwer ist. Als Belohnung winken PDFs, E-Books und Manpages. Daniel Stender<br />
© pixpack, 123RF.com<br />
Docbook ist ein in XML umgesetztes Dokumenten-Beschreibungssystem<br />
[1]. Es<br />
besteht aus einer XML-Grammatik und<br />
einer Sammlung von XSLT-Stylesheets<br />
für Transformationen. In der Welt der<br />
technischen Dokumentation stellt das<br />
Docbook-Format einen weitverbreiteten<br />
Standard dar.<br />
Gestaltungsfreiheit<br />
Ein entscheidendes Merkmal von Docbook<br />
ist, dass Dokumenteninhalt und<br />
Layout vollkommen voneinander getrennt<br />
bleiben: So wird etwa ein in der Quelldatei<br />
in »«-Tags eingefasster<br />
Textabschnitt per Voreinstellung zwar<br />
kursiv gesetzt, lässt sich aber grundsätzlich<br />
völlig beliebig weiterverarbeiten.<br />
Mit Docbook lässt sich<br />
eine ganze Reihe von<br />
Zielformaten erzeugen.<br />
Dazu gehören die<br />
Webstandards HTML<br />
und XHTML, außerdem<br />
das Zwischenformat<br />
XML-FO, aus dem<br />
der Benutzer unter<br />
anderem PDF-Dokumente<br />
zu gewinnen<br />
vermag. Das E-Book-<br />
Format Epub kann<br />
man in Version 2 und<br />
3 exportieren, daneben<br />
eine ganze Reihe von<br />
Spezialformaten wie<br />
zum Beispiel <strong>Linux</strong>-<br />
Manpages.<br />
Docbook hat seinen<br />
Ursprung in der Softund<br />
Hardware-Dokumentation<br />
und hält für<br />
diese Einsatzgebiete<br />
besonders viele Features<br />
bereit. Das Tool mag zunächst eher<br />
befremdlich und selbst für das Multi-Format-Publishing<br />
unnötig kompliziert erscheinen.<br />
Die Stärken eines solchen, auf<br />
XML aufgesetzten Dokumentensystems<br />
mit ausgelagertem, programmierbarem<br />
Layout zeigen sich, wenn es ambitioniertere<br />
Aufgaben erledigen soll als einfach<br />
ein PDF-Dokument schreiben.<br />
Docbook ist äußerst flexibel, so kann ein<br />
und dieselbe Masterdatei zum Beispiel<br />
auch verschiedene Sprachversionen eines<br />
Dokuments enthalten, die sich getrennt<br />
generieren lassen (Variantenmanagement).<br />
Eine weitere Stärke von Docbook<br />
ist mit Sicherheit, dass sich das System<br />
besonders für kollaboratives Schreiben<br />
eignet. Docbook bietet solchen Projekten<br />
einen umfassenden, ausführlich do-<br />
kumentierten technischen Standard, an<br />
dem alle Beteiligten ihre Arbeit orientieren<br />
können. Es besteht die Möglichkeit,<br />
ein Dokument zu modularisieren und<br />
Teildokumente an verschiedene Bearbeiter<br />
zu vergeben. Unter eine Versionsverwaltung<br />
wie Git oder Subversion gesetzt<br />
oder innerhalb einer online aufgesetzten<br />
Entwicklungsumgebung lässt sich mit<br />
Docbook das Koordinierungschaos vermeiden<br />
[2]. Daneben ist Docbook plattformunabhängig.<br />
Docbook wird bei der Organisation OASIS<br />
vom Docbook Technical Commitee [3]<br />
betreut und steht unter BSD-Lizenz. Für<br />
die kommende Release 5.1 gibt es zurzeit<br />
zwar schon einen Veröffentlichungskandidaten,<br />
aber da 5.0 zum OASIS-Standard<br />
wurde [4] empfiehlt sich diese Version<br />
für länger angelegte Projekte.<br />
Schemata zum Relaxen<br />
Mit der aktuellen Version 5.0 [5] ist Docbook<br />
hauptsächlich in der Schemasprache<br />
Relax NG mit einigen Ergänzungen in<br />
Schematron implementiert. Die Schemadateien<br />
von Docbook [6] installiert der<br />
Benutzer auf Debian-basierten Systemen<br />
wie <strong>Linux</strong> Mint oder Ubuntu bequem mit<br />
dem Paket »docbook5‐xml«. Es enthält<br />
zusätzlich alternative Schemata in den<br />
Sprachen DTD und XSD, die von OASIS<br />
aus Gründen des Komforts zur Verfügung<br />
gestellt werden.<br />
Eine restlos konforme Docbook-5.0-Datei<br />
ergibt sich allerdings erst, wenn man sie<br />
gegen das RNG-Schema validiert. Dabei<br />
muss der verwendete Validator auch die<br />
Schematron-Ergänzungen berücksichtigen.<br />
Für diesen Zweck eignet sich der<br />
ursprünglich von Sun Microsystems angebotene<br />
Multi-Schema Validator (MSV),<br />
der als Zip-Datei erhältlich ist [7]. Nach
dem Auspacken ist er mit einem<br />
Java Runtime Environment benutzbar.<br />
Eine XML-Datei lässt sich folgendermaßen<br />
validieren:<br />
java ‐jar msv.jar /Pfad/rng/5.0/U<br />
docbook.rng text.xml<br />
Die Prüfung stellt sicher, dass sich<br />
die Datei in beliebigen Docbook-<br />
Umgebungen, beispielsweise beim<br />
Autor und im Verlag, reibungslos<br />
verarbeiten lässt.<br />
Editoren<br />
Viele Texteditoren halten für XML grundlegende<br />
Features wie Syntax-Highlighting<br />
und Wohlgeformtheitsprüfung bereit. Wer<br />
aber ambitioniert mit XML arbeitet, nutzt<br />
meist einen speziellen XML-Editor, der<br />
besondere Funktionen und mehr Komfort<br />
bietet. Docbook ist eine der wichtigsten<br />
XML-Applikationen, daher gibt es dafür<br />
oft Anpassungen.<br />
Der kommerzielle XML-Editor Oxygen<br />
[8] besticht als umfangreiche XML-IDE<br />
durch seinen ungeheuren Funktionsumfang<br />
und bietet auch eine ganze Reihe<br />
von besonderen Funktionen für Docbook.<br />
Allerdings kostet die proprietäre<br />
Software einige Hundert US-Dollar, nur<br />
für Bildungseinrichtungen gibt es günstigere<br />
Konditionen. XML-Einsteiger erschlägt<br />
sie zudem geradezu mit ihrem<br />
Funktionsreichtum.<br />
Unter den freien Applikationen bietet<br />
zum Beispiel der GPL-lizenzierte XML<br />
Copy Editor [9] gegenüber normalen<br />
Texteditoren einen großen Mehrwert für<br />
XML. Der Anwender kann unter anderem<br />
die XSL-Transformationsprozesse<br />
Abbildung 1: Der NXML-Modus von GNU Emacs macht Vorschläge,<br />
welche Docbook-Elemente in diesem Kontext passen.<br />
bequem vom Editor aus steuern (siehe<br />
<strong>Linux</strong>-<strong>Magazin</strong> 11/13, [10]).<br />
Der Alleskönner GNU Emacs hält mit seinem<br />
XML-Modus NXML kontextsensitive<br />
Tag-Vorschläge sowie Echtzeit-Gültigkeitsprüfung<br />
gegen Relax-NG-Schemata<br />
bereit (Abbildung 1). Für die Docbook-<br />
Version 5.0 muss der Anwender aber<br />
auch bei aktuellen Emacs-Paketen wie<br />
24.3 zunächst etwas an der Konfiguration<br />
basteln [11].<br />
XML als Basis<br />
Docbook ist eine universell konzipierte,<br />
sehr umfangreiche XML-Grammatik für<br />
die detaillierte Beschreibung verschiedenartiger<br />
Dokumententypen in der<br />
Druckvorstufe. Für diesen Zweck hält<br />
es eine große Anzahl unterschiedlicher<br />
Elemente bereit. Schon sich einen Überblick<br />
verschaffen ist allerdings mit ansehnlichem<br />
Aufwand verbunden. Wer<br />
mit Docbook arbeitet, sieht bestimmt oft<br />
in die Referenzdokumentation, die auch<br />
online angeboten wird [12]. Zusätzlich<br />
gibt es umfangreiche, sehr detaillierte Literatur<br />
zum Thema Docbook, beispielsweise<br />
[13].<br />
Listing 1 zeigt ein einfaches Docbook-5.0-Dokument,<br />
eingeleitet mit<br />
der obligatorischen XML-1.0-Deklaration.<br />
Darauf folgt als Wurzelelement<br />
die Dokumentenklasse »«<br />
[14]. Docbook 5.0 verwendet<br />
man als Standard-Namensraum<br />
»xmlns« zusammen mit einem Versions-Attribut.<br />
Die Hauptsprache<br />
gibt das reservierte XML-Attribut<br />
»xml:lang« an. Danach findet sich<br />
im Listing ein »«-Metadaten-Container<br />
mit »«, dem Personennamen<br />
des Autors und seiner E-<br />
Mail-Adresse.<br />
Das erste Kapitel »« trägt wiederum<br />
einen Titel und enthält mit dem<br />
Blockelement »« (Paragraf) mehrere<br />
untergeordnete Abschnitte. Innerhalb<br />
dieser kommen dann die Inline-Elemente<br />
»«, »« und<br />
»« zum Einsatz.<br />
Docbook-XSL<br />
Das passend zum XML-Schema entwickelte<br />
Docbook-XSL [15] bildet geradezu<br />
das Rückgrat von Docbook-Toolchains.<br />
Es umfasst eine in XSLT geschriebene<br />
Sammlung von Stylesheets, mit denen<br />
ein geeigneter Prozessor aus Docbook-<br />
XML-Dateien unterschiedliche Zielformate<br />
generiert. Mit Docbook-XSL lassen<br />
sich Formate wie HTML/XHTML und<br />
<strong>Linux</strong>-Manpages direkt erzeugen, außerdem<br />
XSL-FO, das man zu PDF weiterverarbeiten<br />
kann.<br />
Bei der aktuellen Version 1.78.1 von Docbook-XSL<br />
[16] handelt es sich um XSLT<br />
Docbook 02/2014<br />
Titelthema<br />
www.linux-magazin.de<br />
51<br />
Listing 1: Docbook-5.0-Dokument<br />
01 <br />
02 <br />
03 <br />
04 Ein Testartikel<br />
05 <br />
06 <br />
07 Max<br />
08 Mustermann<br />
09 <br />
10 max@maxmustermann.de<br />
11 <br />
12 <br />
13 <br />
14 Markov‐Ketten<br />
15 Eine Markow‐Kette (engl. Markov chain, auch Markow‐Prozess,<br />
nach Andrei Andrejewitsch Markow, andere Schreibweisen:<br />
Markov‐Kette, Markoff‐Kette,<br />
Markof‐Kette) ist ein spezieller stochastischer<br />
ProzessEin stochastischer Prozess ist die mathematische<br />
Beschreibung von zeitlich geordneten, zufälligen Vorgängen.<br />
. Eine Markow‐Kette ist darüber definiert, dass [...]<br />
16 <br />
17 Man unterscheidet Markow‐Ketten unterschiedlicher Ordnung.<br />
[...], während im zeitstetigen Falle die Konzepte der Filtration sowie<br />
der bedingten Erwartung benötigt werden.Quelle: http://de.wikipedia.org/wiki/Markov‐Kette<br />
<br />
18 <br />
19 <br />
20
Titelthema<br />
www.linux-magazin.de Docbook 02/2014<br />
52<br />
Abbildung 2: Mit dem Umweg über XSL-FO entsteht aus Docbook ein PDF-Dokument inklusive Worttrennung.<br />
1.0. Auf Debian-basierten Systemen ist es<br />
bequem aus den offiziellen Repositories<br />
installierbar, jedoch noch nicht überall<br />
in der jüngsten Version. Für Docbook<br />
5.0 greift der Benutzer zum Paket »docbook‐xsl‐ns«.<br />
Die Stylesheet-Releases<br />
erhält er auch auf der Projektseite bei<br />
Source forge [17], die jeweils neueste Entwicklungsversion<br />
gibt es als Snapshot.<br />
XSL-FO<br />
Docbook-Stylesheets wendet man mit<br />
einem XSLT-Prozessor wie zum Beispiel<br />
Saxon an. Eine XSL-FO-Datei produziert<br />
der Benutzer damit zum Beispiel mit folgender<br />
Kommandozeile:<br />
saxon‐xslt ‐o test.fo test.xml U<br />
/Pfad/docbook‐xsl‐ns/fo/docbook.xsl<br />
Es gibt für Saxon spezielle Docbook-Erweiterungen,<br />
die auf Debian-Systemen<br />
als Paket »docbook‐xsl‐saxon« installierbar<br />
sind. Aus XSL-FO lässt sich etwa mit<br />
dem Formatierer Apache FOP eine PDF-<br />
Datei herstellen:<br />
fop test.fo test.pdf<br />
Die Silbentrennung in dem resultierenden<br />
PDF-Dokument (Abbildung 2) hat<br />
übrigens der XSL-FO-Formatierer vorgenommen<br />
[18].<br />
Bei diesen XSL-Transformationen kommen<br />
viele typografische Voreinstellungen<br />
zum Tragen, etwa die Seitengröße<br />
(standardmäßig US-Letter) oder dass ein<br />
Inhaltsverzeichnis generiert wird. Vorgaben<br />
wie diese bestimmt der Anwender<br />
mit Hilfe einer Reihe von Parametern der<br />
XSLT-Stylesheets [19].<br />
Benutzerdefinierte Parameter, etwa das<br />
Papierformat, kann er dem Prozessor<br />
auch auf der Kommandozeile mitteilen:<br />
saxon‐xslt ‐o test.fo test.xml U<br />
/Pfad/docbook‐xsl‐ns/fo/docbook.xsl U<br />
paper.type="A4"<br />
Alternativ fasst er die Einstellungen in<br />
wiederverwendbaren Anpassungsdateien<br />
zusammen, den so genannten Zwischenschichten.<br />
Diese setzt er dann statt der<br />
von Docbook gelieferten XSL-Stylesheets<br />
mit dem XSLT-Prozessor ein.<br />
Wie man eine solche Datei aufsetzt, lässt<br />
sich aus Listing 2 entnehmen. Zwischenschichten<br />
für XSLT-Stylesheets sind selbst<br />
XSL(T)-Dateien. An oberster Stelle steht<br />
die obligatorische XML-Deklaration. Die<br />
einzelnen Operationen sind vom Wurzelelement<br />
»« umschlossen,<br />
den Namensraum »xsl« bilden XSLT-<br />
Standard-URI und Versionsnummer. Das<br />
Element »import« importiert das vom<br />
Paket »docbook‐xsl‐ns« bereitgestellte<br />
Stylesheet für die XSL-FO-Ausgabe, die<br />
dortigen Parameter kann der Anwender<br />
nun einfach überschreiben.<br />
Dem Parameter »paper.type« [20] übergibt<br />
die Datei den String »A4«. Zudem<br />
schaltet sie die Nummerierung der Abschnittstitel<br />
(»section.autolabel«) ein und<br />
das Inhaltsverzeichnis (»generate.toc«)<br />
aus, und zwar beides gegen die Voreinstellung.<br />
Die »fop1.extensions« sind ein<br />
Satz von speziellen Erweiterungen für<br />
den FO-Prozessor FOP. Zuletzt stellt das<br />
Beispiel die Schriftgröße der Abschnittstitel<br />
der ersten Ebene (»section.title.level1.properties«)<br />
auf das 1,5-fache der<br />
Brotschrift (»body.font.master«, Voreinstellung:<br />
10 Punkt) um [21].<br />
Latex als Backend<br />
Einen anderen Ansatz zum Erzeugen von<br />
PDF-Dokumenten aus Docbook-Quellen<br />
verfolgt Dblatex [22]. Anstatt zunächst<br />
XSL-FO-Dateien zu erzeugen setzt es auf<br />
das Textsatzsystem Latex als Backend.<br />
Dblatex (aktuell 0.3.4) ist auf Debian-<br />
Systemen und anderen als Paket verfügbar,<br />
allerdings ist es von umfangreichen<br />
Latex-Paketen abhängig. Der Konverter<br />
besitzt viele Optionen, unter anderem<br />
lassen sich eigene Latex-Stylefiles einbinden<br />
und man kann die Unicode-fähige<br />
PDF-Engine Xetex einsetzen.<br />
Neben dem eigentlichen Programm in<br />
Python und Latex-Code enthält Dblatex<br />
auch eigene XSLT-Stylesheets, um Docbook<br />
in Latex-Markup umzuwandeln.<br />
Wer hier in die Gestaltung der produzierten<br />
PDFs eingreifen möchte oder sich<br />
auf Fehlersuche begibt, benötigt aber Detailkenntnisse<br />
in Latex.<br />
Konverter<br />
Der universelle Markup-Konverter Pandoc<br />
[23] beherrscht zahlreiche Ein- und<br />
Ausgabeformate. Seit Version 1.9.3 besitzt<br />
Listing 2: Anpassungsdatei für Docbook-XSL<br />
01 <br />
02 <br />
03 <br />
04 <br />
05 <br />
06 <br />
07 <br />
08 <br />
09 <br />
10 <br />
11 <br />
12 <br />
13 <br />
14 <br />
15
Abbildung 3: Das Docbook-5.0-Beispiel als Epub-Dokument im freien<br />
E-Book-Leseprogramm Fbreader.<br />
er auch einen Reader für Docbook. Auch<br />
Pandoc verwendet Latex, um PDFs zu<br />
erzeugen, und kennt dabei ähnliche Optionen<br />
wie bei Db latex. Die Konvertierung<br />
von Docbook in Latex-Quellcode setzt<br />
Pandoc unabhängig von XSL-Transformationen,<br />
aber der Benutzer benötigt auch<br />
hier Latex-Kenntnisse, um andere als die<br />
voreingestellten PDFs zu produzieren.<br />
Die aktuelle Pandoc-Version 1.12.1 ist<br />
allerdings nur für den OASIS-Standard<br />
Docbook 4.5 vorgesehen. Für den robusten<br />
Einsatz von aktuellem Docbook ist<br />
es daher eher angebracht, Docbook-XSL<br />
zu verwenden.<br />
Epub<br />
PDF dient vor allem dazu, gedruckte Dokumente<br />
zu präsentieren. E-Book-Formate<br />
benötigen dagegen Eigenschaften wie flexible<br />
Anpassung des Seitenverhältnisses<br />
auf den unterschiedlichen Lesegeräten.<br />
Das offene E-Book-Format Epub [24] ist<br />
weit verbreitet, und unter der freien Software,<br />
mit der man es generieren kann,<br />
befindet sich auch Docbook. Bei einer<br />
Epub-Datei handelt es sich im Grunde um<br />
ein Zip-Archiv, das XHTML-1.0-Dateien<br />
neben einem CSS-Stylesheet und einigen<br />
Steuerdateien enthält.<br />
Docbook-XSL liefert auch XSLT-Stylesheets<br />
für Epub. Im Zusammenspiel mit<br />
dem Tool Dbtoepub [25] können <strong>Linux</strong>er<br />
damit aus Docbook 5.0 mit dem Dokumententyp<br />
»« oder »«<br />
ein Epub-Dokument herstellen. Dbtoepub<br />
ist auf Debian-Systemen als separates<br />
Paket erhältlich. Der<br />
Konverter lässt sich<br />
einfach auf der Kommandozeile<br />
nutzen:<br />
dbtoepub ‐o test.epub U<br />
test.xml<br />
Abbildung 3 zeigt das<br />
Ergebnis. Mit der Option<br />
»‐c« bindet der<br />
Benutzer eigene CSS-<br />
Stylesheets ein, um<br />
das resultierende<br />
Epub-Dokument typografisch<br />
zu manipulieren,<br />
mit »‐f« lassen<br />
sich dabei auch beliebige<br />
Open-Type-Schriften<br />
einsetzen.<br />
Dbtoepub erlaubt es außerdem, mit dem<br />
Schalter »‐s« beliebige XSLT-Stylesheets<br />
oder Zwischenschichten bei der Umwandlung<br />
zu berücksichtigen. Docbook-<br />
XSL hat allerdings einen gewissen Rückstand<br />
bei der Dokumentation von Epub,<br />
sodass der Benutzer gegebenenfalls die<br />
verfügbaren Parameter direkt in der<br />
Stylesheet-Datei »docbook‐xsl‐ns/epub/<br />
docbook.xsl« nachsehen muss.<br />
Fazit<br />
Docbook ist ein flexibles, professionelles<br />
Publishingsystem. Es ist sehr weit entwickelt,<br />
und im Zusammenspiel mit verschiedenen<br />
XML-Werkzeugen lässt sich<br />
damit eine produktive Verarbeitungsumgebung<br />
für hochwertige Druckerzeugnissen<br />
und elektronische Dokumente aufsetzen.<br />
Deshalb erfreut es sich auch weiter<br />
Verbreitung. Zu den Anwendern gehören<br />
große Open-Source-Projekte wie Gnome<br />
und KDE, IT-Unternehmen wie Suse und<br />
Rackspace sowie Verlage wie beispielsweise<br />
O’Reilly [26]. (mhu) n<br />
Infos<br />
[1] Docbook:<br />
[http:// docbook. sourceforge. net]<br />
[2] Joachim Breitner, „Wider den Wildwuchs“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 5/2010, S. 98<br />
[3] Docbook TC: [https:// www. oasis‐open.<br />
org/ committees/ tc_home. php?<br />
wg_abbrev=docbook]<br />
[4] OASIS-Standard: [https:// www.<br />
oasis‐open. org/ standards# dbv5. 0]<br />
[5] Docbook 5.0:<br />
[http:// docs. oasis‐open. org/ docbook/<br />
specs/ docbook‐5. 0‐spec‐os. html]<br />
[6] Schemadateien:<br />
[http:// www. docbook. org/ xml/ 5. 0/]<br />
[7] MSV: [https:// java. net/ downloads/ msv/<br />
releases/]<br />
[8] XML-Editor Oxygen:<br />
[http:// www. oxygenxml. com]<br />
[9] XML Copy Editor: [http:// xml‐copy‐editor.<br />
sourceforge. net]<br />
[10] Harald Jele, „Alles ausgezeichnet“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 11/2013, S. 52<br />
[11] NXML-Konfiguration: [http:// www.<br />
danielstender. com/ blog/ 6194/]<br />
[12] Referenz-Dokumentation: [http://<br />
docbook. org/ tdg5/ en/ html/ docbook. html]<br />
[13] Thomas Schraitle, „DocBook-XML“, 2. Aufl.:<br />
Lohmar 2009, ISBN 978-3-938626-14-6<br />
[14] Artikel-Klasse: [http:// www. docbook. org/<br />
tdg5/ en/ html/ article. html]<br />
[15] Bob Stayton, „DocBook XSL: The Complete<br />
Guide“: [http:// www. sagehill. net/<br />
docbookxsl/]<br />
[16] Docbook-XSL: [http:// docbook.<br />
sourceforge. net/ release/ xsl/ current/]<br />
[17] Docbook-XSL-NS:<br />
[http:// sourceforge. net/ projects/<br />
docbook/ files/ docbook‐xsl‐ns/ 1. 78. 1/]<br />
[18] FOP-Hyphenation: [http:// offo.<br />
sourceforge. net/ hyphenation/ index. html]<br />
[19] XSLT-Parameter:<br />
[http:// docbook. sourceforge. net/ release/<br />
xsl/ current/ doc/ param. html]<br />
[20] »paper.type«:<br />
[http:// docbook. sourceforge. net/ release/<br />
xsl/ current/ doc/ fo/ paper. type. html]<br />
[21] Komplexe Parameter:<br />
[http:// www. sagehill. net/ docbookxsl/<br />
AttributeSets. html]<br />
[22] Dblatex:<br />
[http:// dblatex. sourceforge. net/]<br />
[23] Pandoc:<br />
[http:// johnmacfarlane. net/ pandoc/]<br />
[24] Epub: [http:// de. wikipedia. org/ wiki/ Epub]<br />
[25] Dbtoepub: [http:// docbook. sourceforge.<br />
net/ release/ xsl/ current/ epub/ README]<br />
[26] Docbook-Anwender: [http:// wiki. docbook.<br />
org/ WhoUsesDocBook]<br />
Der Autor<br />
Daniel Stender [http:// www. danielstender. com/<br />
blog] hat einen Magister in klassischer Indologie<br />
(Sanskrit) und entwickelt im Bereich Digital<br />
Humanities. Er benutzt Debian Testing auf dem<br />
Desktop und pflegt Pakete für Debian im Bereich<br />
Tex, E-Publishing, Scanning und OCR.<br />
Docbook 02/2014<br />
Titelthema<br />
www.linux-magazin.de<br />
53
Special Conference:<br />
Open Source *<br />
* Früher: Forum Open Source<br />
10.–14.03.2014<br />
In Halle 6!<br />
Tägliches Vortragsprogramm<br />
Hintergrundinformationen aus erster Hand<br />
Themenhighlights:<br />
Automation / Konfigurationsmanagement, Security / Privacy,<br />
Cloud Computing / Virtualisierung, Treiber / Kernel, ARM-Architektur<br />
Auf der Bühne: Hochkarätige Vertreter der Open-Source-Szene, u.a.<br />
Klaus Knopper,<br />
KNOPPER.NET<br />
Jon „maddog“ Hall,<br />
<strong>Linux</strong> International<br />
Jim Lacey,<br />
<strong>Linux</strong> Professional<br />
Institute<br />
Änderungen vorbehalten.<br />
Powered by<br />
www.cebit.de/de/open-source<br />
Presented by<br />
pluspol.de<br />
Marketing Kommunikation Internet
In eigener Sache: DELUG-DVD<br />
Mint, Centos, IPfire, Kolibri<br />
Einführung 02/2014 12/2010<br />
Software<br />
Auch diesen Monat bekommen die DELUG-Käufer die doppelte Datenmenge zum einfachen Preis: Von der einen<br />
Seite der DVD bootet Centos 6.5, von der anderen Mint 16, beide brandneu und als 64-Bit-Version. Dazu gibt’s<br />
die Firewall IPfire, Suse-Videos, das Open-Source-OS Kolibri, ein E-Book und jede Menge Software. Markus Feilner<br />
www.linux-magazin.de<br />
55<br />
Inhalt<br />
56 Bitparade<br />
Waren und Dienstleistungen verkaufen<br />
im eigenen Shop: Die E-Commerce-<br />
Plattformen Open Cart, Satchmo und<br />
Lemonstand unter der Lupe.<br />
62 Tooltipps<br />
Cpumon 2.0, Monitoring Plugins 0.15,<br />
Bvi 1.40beta, Balance 3.56, All World<br />
IT Dbackup 0.0.20 und Lazygal 0.8 im<br />
Kurztest.<br />
Brandneu bootet von Seite A der<br />
DELUG-DVD die kurz vor Redaktionsschluss<br />
erschienene 16. Ausgabe der<br />
Unity-freien Ubuntu-Alternative Mint.<br />
Sechs Monate Entwicklungszeit habe<br />
man gebraucht und das Ergebnis könne<br />
sich sehen lassen, schreiben die Entwickler<br />
stolz. Die auf Ubuntu 13.10 basierende<br />
Distribution verwendet den <strong>Linux</strong>-<br />
Kernel 3.11, dazu die zweite Version von<br />
Cinnamon, der Mint-eigenen Gnome-3-<br />
Alternative.<br />
Neben einem normalen <strong>Linux</strong>-<strong>Magazin</strong><br />
und dem Abonnement ohne Datenträger<br />
gibt es die DELUG-Ausgabe mit Monats-<br />
DVD, bei der die Redaktion den Datenträger<br />
nach einem speziellen Konzept<br />
zusammenstellt: In einer Art modularem<br />
System enthält er Programme und Tools,<br />
die in der jeweiligen <strong>Magazin</strong>-Ausgabe<br />
getestet und besprochen werden. Zudem<br />
gibt es nicht im Heft abgehandelte<br />
Software, die die Redaktion besonders<br />
empfiehlt, alles gebündelt unter einer<br />
HTML-Oberfläche.<br />
Centos 6.5<br />
Abbildung 1: Zahlreiche topaktuelle Anwendungen, aber ohne den unbeliebten<br />
Unity-Desktop von Ubuntu: <strong>Linux</strong> Mint 16 mit Cinnamon liegt als 64-Bit-<br />
Version auf der DVD.<br />
Wer die Silberscheibe umdreht, bootet<br />
von Seite B die aus den freien Quellen<br />
von Red Hat Enterprise <strong>Linux</strong> kompilierte<br />
Community-Distribution Centos.<br />
Die erschien kürzlich als Version 6.5.<br />
Wie der Red-Hat-Upstream enthält sie<br />
jetzt das Precision Time Protocol (PTP)<br />
und außerdem viele Verbesserungen bei<br />
der Virtualisierung mit KVM und neue<br />
Hyper-V- und VMware-Treiber.<br />
HD-Videos und<br />
E-Books<br />
Wer Seite A der DVD<br />
nicht bootet, sondern<br />
per Browser die »index.html«<br />
öffnet, findet<br />
im HTML-Menü<br />
Links zu den HD-Videos<br />
von den Keynotes<br />
der Susecon in Florida<br />
und das E-Book<br />
von O’Reilly „TCP/IP<br />
Netzwerk-Administration“<br />
(Abbildung 2).<br />
Die dritte Auflage des<br />
Werkes zur TCP/IP-<br />
Netzwerk-Administra-<br />
Abbildung 2: Kostenlos auf der DELUG-DVD: „TCP/IP<br />
Netzwerk-Administration“ von Craig Hunt.<br />
tion von Craig Hunt richtet sich vornehmlich<br />
an Systemadministratoren, aber auch<br />
an Unix-Nutzer, die zu Hause ihren Netzzugang<br />
konfigurieren oder ein kleines<br />
Netz einrichten möchten. Das knapp 800<br />
Seiten umfassende E-Book kostet im regulären<br />
Handel 10 Euro, Leser des <strong>Linux</strong>-<br />
<strong>Magazin</strong>s bekommen es umsonst.<br />
Ipfire, Kolibri, Software<br />
Damit nicht genug: Zu den Webshops aus<br />
der Bitparade, der Software aus dem Titelthema<br />
und den Tooltipps gesellen sich<br />
eine virtuelle Maschine mit der Firewall<br />
IPfire in der nagelneuen Version 73 sowie<br />
das schlanke Open-Source-Betriebssystem<br />
Kolibri, das auch mit 8 MByte RAM<br />
auskommt und komplett in Assembler<br />
geschrieben ist. Das Mini-OS bringt zwar<br />
schon im Lieferumfang alles mit, was<br />
der Desktop-Anwender braucht, doch ein<br />
Extrapaket versorgt auch anspruchsvolle<br />
deutschsprachige Tester. <br />
n
Software<br />
www.linux-magazin.de Bitparade 02/2014<br />
56<br />
Drei Webshops im Test<br />
Gute Geschäfte<br />
Im Internet Geld verdienen, die eigenen Waren oder Dienstleistungen anbieten – und das am besten im<br />
eigenen Shop: Wer neu ins Geschäft einsteigt, will nicht Tausende für die Software ausgeben. Die Bitparade<br />
testet erschwingliche E-Commerce-Plattformen. Mela Eckenfels, Heike Jurzik<br />
© David Dieschburg, 123RF.com<br />
Um einen eigenen Shop im Internet zu<br />
betreiben, müssen Benutzer keine Unsummen<br />
in Soft- und Hardware investieren.<br />
Eine Onlinefiliale können sich auch<br />
kleine Unternehmen oder Privatpersonen<br />
leisten. Der technische Laie schlägt seine<br />
Waren über Auktionsplattformen oder<br />
Marktplätze los und zahlt dafür eine Nutzungsgebühr<br />
an den Dienstleister.<br />
Alternativ bieten Webhoster fertige Shopsysteme<br />
für ihre Kunden an, mit denen<br />
sie sich ihr kleines Warenlager zusammenklicken.<br />
Dafür fällt in der Regel eine<br />
monatliche Mietgebühr oder ein mehrstelliger<br />
Fixpreis an. Viele Contentmanagement-Systeme<br />
enthalten ebenfalls<br />
entsprechende Module.<br />
Wer den Shop auf seinem eigenen LAMP-<br />
Server betreiben möchte, spart nicht nur<br />
Kosten, sondern behält die Kontrolle.<br />
Die Bitparade testet fertige Shopsysteme.<br />
Es treten die beiden kostenlosen Open-<br />
Source-Tools Open Cart [1] und Satchmo<br />
[2] gegen das kommerzielle, proprietäre<br />
Lemonstand [3] an. Als Testumgebung<br />
diente das auf RHEL basierende Amazon<br />
<strong>Linux</strong> AMI (2013.03).<br />
Die Kandidaten sollten unter anderem<br />
zeigen, wie aufwändig die Installation<br />
und Einrichtung auf dem eigenen Server<br />
ist, ob es Benutzerrollen (etwa für die<br />
Änderungen am Sortiment und den Beschreibungen)<br />
gibt, wie übersichtlich die<br />
Shops für den Einkäufer sind, ob eine Zusammenarbeit<br />
mit CRM-Systemen möglich<br />
ist und welche Bezahlschnittstellen<br />
die E-Commerce-Plattformen bieten. Um<br />
einen echten Shop zu simulieren, verwendeten<br />
die Tester die mitgelieferten<br />
Beispieldateien und ‐produkte.<br />
E Open Cart<br />
Der erste Kandidat stammt von der Firma<br />
Open Cart Limited aus Hongkong. Open<br />
Cart [1] steht unter der GPLv3 und ist in<br />
der Grundausstattung kostenlos. Für einige<br />
Extensions und Themes [4] müssen<br />
Anwender bezahlen. Die Shopsoftware<br />
benötigt einen Webserver (bevorzugt<br />
Apache), PHP 5.2 oder neuer, MySQL<br />
und Curl. Die Tester schauten sich Version<br />
1.5.6 an, die auf dem Testsystem<br />
zusätzlich nach den beiden PHP-Erweiterungen<br />
GD und Mycrypt verlangte.<br />
Vorratshaltung<br />
Nach dem Auspacken der Zip-Datei kopiert<br />
der Admin den Inhalt von »upload«<br />
in ein beliebiges Verzeichnis unterhalb<br />
vom Document-Root. Außerdem erzeugt<br />
er auf der Shell oder im GUI eine neue<br />
MySQL-Datenbank und einen ‐User.<br />
Weiter geht’s über das Webinterface. Zuerst<br />
nickt er die Lizenzvereinbarung ab,<br />
dann prüft das Installationsskript, ob alle<br />
Abhängigkeiten erfüllt sind und diverse<br />
PHP-Dateien und Verzeichnisse die richtigen<br />
Zugriffsrechte haben.<br />
Der Admin benennt danach die Dateien<br />
»config‐dist.conf« in »config.conf« und<br />
»admin/config‐dist.conf« in »admin/<br />
config.conf« um. Im Browser gibt er<br />
in ein Formular die Informationen zur<br />
Datenbank ein und erstellt einen ersten<br />
Account für den Shopverwalter. Zum<br />
Schluss entfernt er noch das »install«-<br />
Verzeichnis auf dem Server.<br />
Zum Open-Cart-Adminbereich gelangen<br />
Nutzer, wenn sie »admin« an die URL anhängen.<br />
Nach der Anmeldung präsentiert<br />
sich das Dashboard, das eine Übersicht<br />
und eine Statistik zu Besuchern und Einkäufen<br />
zeigt. Der erste Weg im frisch installierten<br />
Store führt ins Menü »System«<br />
und dort zu den »Settings« beziehungsweise<br />
»Localisation«. Hier richtet der Verwalter<br />
allgemeine Infos zum Shop, den
Ladenbesitzer samt Adresse, die Sprache,<br />
Währung, Maß- und Gewichtseinheiten<br />
ein. Alles in allem ist das Ganze eine<br />
ziemliche Klickorgie, dafür ermöglicht<br />
Open Cart allerdings auch eine genaue<br />
Feinabstimmung.<br />
Ein Besuch unter »Settings | Users« ist<br />
Pflicht. Open Cart kennt Benutzer und<br />
Gruppen. Letztere richtet der Admin ganz<br />
nach seinen Wünschen ein und legt sehr<br />
genau fest, welcher Mitarbeiter Zugriff<br />
auf welche Bereiche hat und auch, ob er<br />
sie verändern darf (siehe Abbildung 1). So<br />
kann ein Lagermitarbeiter die Versandinformationen<br />
beispielsweise einsehen und<br />
der Vertrieb den Produktkatalog pflegen,<br />
aber nicht die Kundendaten. Die Buchhaltung<br />
greift auf Kunden-, Verkaufs- und<br />
Steuerinformationen zu, darf aber die angebotenen<br />
Produkte nicht modifizieren<br />
– ein ausgeklügeltes Rollensystem, das<br />
allerdings ein wenig Einarbeitungszeit<br />
verlangt.<br />
Seine Kunden verwaltet das Shopsystem<br />
über »Sales | Customers«. In der Abteilung<br />
»Customer Groups« verstecken sich<br />
allgemeine Einstellungen für die Käuferaccounts.<br />
Hier regelt der Verwalter zum<br />
Beispiel, dass er neu registrierte Zugänge<br />
von Hand freischaltet oder dass Kunden<br />
zwingend eine Umsatzsteuer-Identifikationsnummer<br />
eintragen müssen.<br />
Schaufensterdekoration<br />
Schmerzlich vermissten die Tester allerdings<br />
eine Option, die Kundenlisten importiert.<br />
Ebenso fehlen Open Cart in der<br />
Grundausstattung Import und Export für<br />
Produktkataloge. Eine Suche auf der Extensions-Seite<br />
[4] fördert etliche Plug ins<br />
zutage, die den Shop entweder zum Nulltarif<br />
oder für kleines oder großes Geld<br />
um Ein- und Ausfuhr-Features erweitern.<br />
Ohne zusätzliche Addons erzeugt Open<br />
Cart über »System | Backup/Restore« immerhin<br />
einen SQL-Dump mit allen Einstellungen<br />
und Textinhalten. Bilder und<br />
andere Medien sichern Anwender von<br />
Hand. Ein Klick auf »Restore Backup«<br />
öffnet einen Auswahldialog, über den Benutzer<br />
Datensicherungen im SQL-Format<br />
hochladen.<br />
Zur Dekoration des Shops stehen über<br />
2300 Themes auf der Extensions-Seite<br />
bereit. Viele Looks sind kostenfrei, für<br />
andere muss der Anwender zwischen 15<br />
Abbildung 1: Der Open-Cart-Admin fügt seine Mitarbeiter zu einer einzigen Gruppe hinzu. Welche Zugriffsund<br />
Modifikationsrechte diese hat, regeln die Gruppeneinstellungen.<br />
und 90 US-Dollar berappen. Darüber hinaus<br />
sind in unabhängigen Marktplätzen<br />
im Internet weitere Angebote für Open<br />
Cart zu finden. Um ein neues Template<br />
für den Shop einzurichten, laden Anwender<br />
das Archiv herunter, entpacken es und<br />
speichern den Inhalt auf dem Webserver<br />
im Verzeichnis »catalog/view/theme«.<br />
Das Aktivieren erfolgt dann im Admin-<br />
Panel über »System | Settings«. Nutzer<br />
klicken neben dem Shop auf »Edit« und<br />
wählen dann im Bereich »Store« das neue<br />
Template aus.<br />
Bei den Extensions finden Anwender<br />
außer Themes auch etliche Plugins für<br />
Bezahl- und Versandschnittstellen, RSS-<br />
Feeds, mehrsprachige Shops oder sogar<br />
Blogs. Erweiterungen, die bei der Verkaufsauswertung<br />
helfen und praktische<br />
Berichte für die Chefetage generieren,<br />
sind ebenfalls vorhanden.<br />
Die Waren organisieren der Administrator<br />
und seine Mitarbeiter über das Menü<br />
»Catalog«. Über Kategorien und Unterkategorien<br />
bauen sie die interne Navigation<br />
auf. Dabei erscheinen übergeord-<br />
Abbildung 2: Näheres zu Produktausführungen bestimmt der Shopmanager bei den Katalogoptionen. Auch<br />
wie das Webinterface die Waren präsentiert (Formulare, Schaltflächen, Bilder), legt er hier fest.<br />
Bitparade 02/2014<br />
Software<br />
www.linux-magazin.de<br />
57
Software<br />
www.linux-magazin.de Bitparade 02/2014<br />
58<br />
nete Abteilungen, bei denen ein Häkchen<br />
neben die Option »Top« gesetzt ist, in<br />
der Hauptmenüleiste auf der Startseite<br />
des Shops. Zusätzlich kennt Open Cart<br />
Eigenschaften, die Kunden später dazu<br />
verwenden, Produkte zu sortieren und<br />
zu filtern. In welchen Ausführungen eine<br />
Ware erhältlich ist (etwa Kleidergrößen,<br />
Farben und so weiter), bestimmt der<br />
Admin unter »Catalog | Options« (siehe<br />
Abbildung 2).<br />
»Products« stellt Mitarbeiter mit seinem<br />
Dutzend Untermenüs und den ganzen<br />
Konfigurationsoptionen vor eine Herausforderung.<br />
Das Eintragen von Namen,<br />
Beschreibungen, Metatags, Artikelnummern,<br />
Steuerklassen, SEO-Schlüsselwörtern<br />
bedeutet eine ganze Menge Arbeit.<br />
Ein wenig Zeit sollten Shopbetreiber auch<br />
für das Bearbeiten von Bildern einplanen.<br />
Deren Maße dürfen eine maximale Breite<br />
oder Höhe von 1000 Pixeln nicht überschreiten<br />
und die Datei darf nicht größer<br />
als 300 KByte sein.<br />
Einkaufsbummel<br />
Sind die Regale gefüllt und der Laden eröffnet,<br />
kann sich das Ergebnis sehen lassen.<br />
Käufer finden einen übersichtlichen<br />
Onlineshop mit einer klaren Navigation<br />
vor. Die integrierte Suchfunktion ist zufriedenstellend.<br />
Die Fahndung nach einfachen<br />
Begriffen findet Produkte, deren<br />
Titel den gesuchten String enthält. Optional<br />
durchsuchen Kunden auch Unterkategorien<br />
und Produktbeschreibungen. Will<br />
der Betreiber seinen potenziellen Käufern<br />
mehr Flexibilität bei der Suche bieten,<br />
greift er beherzt zu einer entsprechenden<br />
Erweiterung.<br />
Open-Cart-Läden bieten in der Voreinstellung<br />
an, Produkte zu bewerten. Um<br />
die eigene Meinung kundzutun, klickt<br />
der Nutzer in der Artikelbeschreibung<br />
auf »Write a review«, gibt den Namen<br />
und Text ein, wählt zwischen einem bis<br />
fünf Sternen aus, trägt ein Captcha ein<br />
und schickt alles ab. Der Shopverwalter<br />
schaltet die Reviews über »Catalog« frei.<br />
Möchte er das Feature abschalten, findet<br />
er die Funktion dazu auf dem Reiter »Option«<br />
des jeweiligen Shops.<br />
Wer Open Cart mit einem CRM-System<br />
vereinen möchte, greift ins Regal der Erweiterungen.<br />
Hier stehen zwei kostenpflichtige<br />
Schnittstellen zu Sugar CRM<br />
und Vtiger bereit. Alle relevanten Zahlungsarten<br />
wie Paypal, Kreditkarten,<br />
Amazon Payment und Banküberweisung<br />
implementiert Open Cart ebenfalls über<br />
Module und Erweiterungen. Die beiden<br />
Zahlungsarten »Free Checkout« – etwa<br />
für kostenlose Downloads – und »Cash<br />
on Delivery« sind im Grundsystem implementiert.<br />
E Satchmo<br />
Der zweite Testkandidat ist in Python<br />
geschrieben, steht unter der BSD-Lizenz<br />
und nutzt das Webframework Django<br />
[5]. Satchmo [2] benötigt Python 2.5<br />
oder neuer und eine Datenbank, die mit<br />
Django zusammenarbeitet. Von Haus<br />
aus nutzt der Onlinesshop SQlite 3, als<br />
Alternative bieten sich MySQL oder<br />
PostgreSQL an. Die für den Test installierte<br />
Satchmo-Version 0.9.2 verlangt<br />
nach Django 1.4. Ist bereits eine neuere<br />
Django-Variante vorhanden, muss der<br />
Admin downgraden. Während die Entwicklungsinstanz<br />
einen eigenen Server<br />
mitbringt, empfehlen die Satchmo-Macher<br />
für den produktiven Betrieb einen<br />
Webserver mit Python-Adapter, etwa<br />
Apache und »mod_wsgi« [6].<br />
Vor der Satchmo-Installation bereitet der<br />
Admin das System vor und installiert Pip,<br />
einen Paketverwalter für Python-Module,<br />
sowie Mercurial, die GNU Compiler<br />
Collec tion und das Paket »python‐devel«.<br />
Die Projektseite enthält eine ausführliche<br />
Dokumentation, die sowohl einen Quick<br />
Install als auch eine Schritt-für-Schritt-<br />
Anleitung anbietet. Mit Hilfe von Pip und<br />
des Skripts »clonesatchmo.py« ist alles<br />
nach kurzer Zeit erledigt.<br />
Auf Aufforderung gibt der Benutzer die<br />
gewünschten Logindaten des Admin<br />
ein, wechselt dann ins Unterverzeichnis<br />
des frisch erstellten Shops und startet<br />
die Testinstanz mit »python manage.py<br />
runserver«. In der Voreinstellung lauscht<br />
dieser auf 127.0.0.1:8000. Um Verbindungen<br />
von anderen Rechnern zu akzeptieren,<br />
definieren Admins die IP-Adresse<br />
vor dem Port, also »python manage.py<br />
runserver 0.0.0.0:8000«.<br />
Das Admin-Panel punktet nicht gerade<br />
mit Übersichtlichkeit. Die im Verkaufsalltag<br />
am häufigsten aufgerufenen<br />
Menüpunkte verstecken sich am Ende<br />
der Seite, was der Tatsache geschuldet<br />
ist, dass die Einträge nicht logisch, sondern<br />
alphabetisch sortiert sind. Für die<br />
Ersteinrichtung eines Onlineshops und<br />
das Auf- und Zuklappen der zahlreichen<br />
Menüs sollten Administratoren in jedem<br />
Fall genug Zeit einplanen. Wer bereits mit<br />
Django Erfahrung hat, der dürfte schneller<br />
zurechtkommen.<br />
Anders als die Konkurrenz trennt Satchmo<br />
nicht zwischen Mitarbeitern und Kunden<br />
und verwaltet alle Accounts und Gruppen<br />
über den Menüpunkt »Auth«. Bei<br />
den Zugriffsrechten setzt die Software<br />
Abbildung 3: Satchmo unterscheidet als einziger Testkandidat nicht zwischen Mitarbeitern und Kunden und<br />
regelt die Zugriffsrechte und Gruppenzugehörigkeit an einer Stelle.
Abbildung 4: Der Variation Manager von Satchmo unterstützt den Admin dabei, unterschiedliche Ausführungen<br />
der Produkte zum Onlineshop hinzuzufügen.<br />
optional Flags wie »Staff« und »Superuser«.<br />
Darunter befindet sich ein Feld,<br />
in dem der Verwalter gezielt den Zugriff<br />
auf Bereiche des Admin-Panels erlaubt.<br />
Dies taucht ebenfalls in der Gruppenverwaltung<br />
auf, sodass es möglich ist,<br />
ganz präzise Rechte zu verteilen (siehe<br />
Abbildung 3).<br />
Eine Im- und Exportfunktion für Kunden-<br />
und Mitarbeiterdaten fehlt. Dafür<br />
exportiert Satchmo über den Menüpunkt<br />
»Export Product Defs« auf der rechten<br />
Seite im Dashboard unter »Admin Tools«<br />
alle Produktdaten inklusive Bilder und<br />
Kategorien und speichert sie in den Formaten<br />
XML, Json und Yaml. Eine solche<br />
Sicherung enthält auch Informationen<br />
zur verfügbaren und verkauften Anzahl<br />
der einzelnen Güter. Das Shopsystem<br />
importiert an gleicher Stelle vorhandene<br />
Sicherungsdateien. Beide Funktionen<br />
sind in der aktuellen Version noch als<br />
experimentell gekennzeichnet.<br />
I got the Blues<br />
Vorgefertigte Themes, um die Optik zu<br />
variieren, fehlen. Wer einen Satchmo-<br />
Shop dekorieren möchte, greift direkt<br />
in den HTML- und CSS-Code ein. Der<br />
Ruf nach neuen Looks in den Benutzerforen<br />
verhallte bisher ungehört, und auch<br />
die meisten auf der Satchmo-Startseite<br />
als Referenzen verlinkten Beispielshops<br />
sind inzwischen offline und bieten daher<br />
keine Inspiration mehr.<br />
Das Python-Programm sortiert die Produkte<br />
genau wie Open Cart in Kategorien<br />
und Unterkategorien ein. Kunden sehen<br />
diese auf der Shop-Hauptseite in einem<br />
Menü am linken Rand. In der Abteilung<br />
»Products« weisen Verwalter den Waren<br />
ebenfalls Beschreibungen, Optionen und<br />
Attribute zu. Über die Abteilung »Configurable«<br />
erzeugen sie Varianten und definieren<br />
für bestimmte Waren unterschiedliche<br />
Ausführungen (siehe Abbildung 4).<br />
Genau wie beim Rest des Interface ist<br />
hier allerdings viel Klickarbeit nötig, bis<br />
alles steht.<br />
Die Suchfunktion des Testkandidaten ist<br />
sehr simpel gehalten. Tippt der Anwender<br />
einfache Begriffe ins Feld »Search«<br />
ein, liefert das Programm passende Produkte<br />
und Kategorien zurück und wertet<br />
dabei auch die Titel und die Beschreibungen<br />
aus. Zwei Eingaben interpretiert<br />
Satchmo automatisch als AND-Verknüpfung<br />
und zeigt nur Treffer an, die beiden<br />
Kriterien entsprechen. Das Verwenden<br />
von Anführungszeichen führt zu keinem<br />
veränderten Ergebnis. Eine Kundenbewertung<br />
fehlt gänzlich.<br />
Satchmo enthält mehrere vorinstallierte<br />
Module für Bezahlschnittstellen. Die<br />
meisten davon bedienen den internationalen<br />
Markt. Zu den in Europa gebräuchlichen<br />
Abrechnungsmethoden<br />
gehören Paypal und Google Checkout.<br />
Die Entwickler haben zudem Module für<br />
Anbieter wie Sermepa, Cybersource.net,<br />
Trust Commerce und andere implementiert.<br />
Alternativ unterstützt Satchmo auch<br />
Bitparade 02/2014<br />
Software<br />
www.linux-magazin.de<br />
59<br />
Wordpress-Plugins für Onlineshops<br />
Es ist leicht zu bedienen, bietet variable Gestaltungsmöglichkeiten<br />
und liegt in vielen verschiedenen<br />
Sprachen vor – Wordpress [9] ist<br />
eines der beliebtesten Contentmanagement-<br />
Systeme. Täglich veröffentlichen Designer und<br />
Entwickler neue Themes und Plugins, und so<br />
gibt es inzwischen etliche Erweiterungen, die<br />
Wordpress-Seiten in kleinere bis mittelgroße<br />
Verkaufsplattformen umwandeln.<br />
In Deutschland recht weit verbreitet ist WP Shop<br />
Germany [10]. Es unterstützt Anwender dabei,<br />
Webshops nach deutschen Gesetzen zu betreiben,<br />
integriert sich gut in bestehende Themes,<br />
ist mehrsprachig und bietet zudem Gateways<br />
zu den in Deutschland üblichen Zahlungsarten<br />
– von Vorkasse über Sofortüberweisung, Rechnung<br />
und Nachnahme bis zu Click and Buy sowie<br />
Paypal. WP Shop Germany unterstützt Verkäufer<br />
auch beim Schrei ben von Rechnungen und<br />
Erstellen von Gutscheinen. Nutzer dürfen das<br />
Plugin 14 Tage lang kostenfrei testen; danach<br />
zahlen sie je nach Lizenz von 25 Euro bis rund<br />
150 Euro.<br />
Ebenfalls sehr beliebt ist Woo Commerce [11]<br />
der amerikanischen Firma Woo Themes. Das<br />
Plugin selbst ist kostenlos und genügt für einen<br />
einfachen Shop vollkommen. Es steht aber<br />
eine Vielzahl von Premium-Erweiterungen bereit,<br />
die Spezialfunktionen wie Lieferscheine,<br />
Rechnungen und weitere Bezahlschnittstellen<br />
nachrüsten. Eine deutsche Sprachdatei fehlt<br />
Woo Commerce genauso wie Anpassungen, die<br />
den rechtlichen Anforderungen für deutsche<br />
Onlineshops genügen, etwa Widerrufsrecht,<br />
Versandkostenanzeige, AGBs und so weiter. Das<br />
Plugin Woo Commerce German Market [12] ist<br />
ab rund 100 Euro erhältlich und erweitert die<br />
Woo-Commerce-Installation um Features für<br />
deutsche Shops.<br />
Kleine Lösungen wie Tinypass [13] und Sell<br />
Media [14] zielen vor allem darauf ab, digitalen<br />
Content wie Artikel, Bilder oder Ähnliches<br />
über die eigene Wordpress-Seite zu verkaufen.<br />
Tinypass ist kostenfrei, aber nicht unter einer<br />
freien Lizenz veröffentlicht, eine Registrierung<br />
auf der Seite des Anbieters ist erforderlich. Sell<br />
Media steht unter der GPLv2. Das Plugin selbst<br />
gibt es ebenfalls zum Nulltarif. Mit kostenpflichtigen<br />
Extensions rüsten Nutzer Features wie<br />
Preisnachlässe, Wasserzeichenfunktion und<br />
Ähnliches nach.
Software<br />
www.linux-magazin.de Bitparade 02/2014<br />
60<br />
Cash on Delivery und Gutscheine. Funktionen<br />
und Addons zur Zusammenarbeit<br />
mit CRM-Systemen fehlen.<br />
E Lemonstand<br />
Lemonstand [3] ist der zweite PHPbasierte<br />
Testkandidat. Das Tool aus kanadischer<br />
Produktion steht unter einer<br />
kommerziellen Lizenz und kostet nach<br />
einer 30-tägigen Testphase, während der<br />
keine echten Bezahlvorgänge möglich<br />
sind, knapp 500 US-Dollar. Das ist nicht<br />
die einzige Zitrone, in die Benutzer beißen<br />
müssen. Einige Module und Themes<br />
aus dem hauseigenen Marketplace zum<br />
Erweitern des Funktionsumfangs gibt’s<br />
zum Nulltarif, andere kosten bis zu mehrere<br />
Hundert US-Dollar.<br />
Die Tester schauten sich die aktuelle Version<br />
1 an. Wer sich für zukünftige Entwicklungen<br />
und Fortschritte bei Lemonstand<br />
2 interessiert, der sollte das Blog<br />
[7] verfolgen. Neue Features sind schon<br />
bekannt, ein Veröffentlichungstermin<br />
steht noch aus.<br />
Die Shopsoftware benötigt ein LAMP-<br />
System: Apache 2, PHP 5.2.5 oder neuer<br />
und mindestens MySQL 4.1, empfohlen<br />
ist Version 5. Zusätzlich sind die Bibliotheken<br />
Curl, Open SSL und Mcrypt PHP<br />
erforderlich, Soap PHP ist optional. Image<br />
Magick sollte ebenfalls vorhanden sein,<br />
der Browser benötigt ein Flash-Plug in, um<br />
Diagramme im Admin-Panel zu zeichnen<br />
und Dateien hochzuladen. Die Dokumentation<br />
unterschlägt das Paket »php‐xml«.<br />
Fehlt es, schlägt die ganze Installation<br />
wegen nicht erfüllter Abhängigkeiten der<br />
Template-Engine fehl, wenn der Admin<br />
den Import der PHP-Version des freien<br />
Theme Zest auswählt.<br />
Vor der Installation legt der Admin eine<br />
MySQL-Datenbank an. Dann entpackt er<br />
»lemonstand_installer.zip« im Webserver-<br />
Verzeichnis seiner Wahl. Für den Ordner<br />
setzt er in der Apache-Konfiguration die<br />
Option »AllowOveride All« und aktiviert<br />
»mod_rewrite«. Im Browser ruft er danach<br />
das Skript »install.php« auf, bestätigt<br />
die Lizenzvereinbarung, gibt seinen<br />
Namen, den zugehörigen Lizenzschlüssel<br />
und die Datenbank-Informationen ein.<br />
Für den Adminbereich des Shops darf er<br />
einen eigenen Bezeichner wählen, was<br />
ein klein wenig mehr Ruhe vor automatisierten<br />
Angriffen durch Botnetze bietet.<br />
Bei der Installation festgelegte Verzeichnisnamen<br />
ändert er jederzeit in der Datei<br />
»config/config.php«.<br />
Lemonstands Installationsroutine generiert<br />
ein zusätzliches Passwort für sensible<br />
Datenbankinhalte. Diesen Encryption<br />
Key sollte der Admin an sicherer<br />
Stelle aufbewahren. Er benötigt ihn<br />
unter anderem bei eventuellen Neuinstalltionen<br />
oder Serverumzügen für den<br />
Zugriff auf die Bestandsdaten. Über die<br />
Art der Verschlüsselung schweigt sich<br />
die Dokumentation aus. Zusätzlich zum<br />
Administrator-Account legt der Benutzer<br />
ein weiteres privilegiertes Konto an, das<br />
Zugriff auf den eigentlichen Shop hat,<br />
sowie einen Account, der Datenbank und<br />
Verschlüsselung konfigurieren darf. Die<br />
alltäglichen Verwaltungsaufgaben erledigt<br />
er mit dem Admin-Account.<br />
Im letzten Schritt importiert er optional<br />
ein Theme und Beispieldaten für den<br />
Shop. Danach gilt es, die Datei »install.<br />
php« und das Verzeichnis »installer_files«<br />
auf dem Server zu löschen. Der Hersteller<br />
empfiehlt, die Datei »config.dat« in ein<br />
Verzeichnis außerhalb vom Webserver-<br />
Root zu verschieben und die Konfigurationsdatei<br />
»config/config.php« entsprechend<br />
anzupassen.<br />
Genau wie Open Cart begrüßt Lemonstand<br />
den Admin im Dashboard mit einer<br />
Shopübersicht und statistischen Diagrammen.<br />
Der erste Einrichtungsschritt führt<br />
über den Menübutton am linken Rand<br />
in die Abteilung »System | Settings«. Auf<br />
den ersten Blick wirkt die Oberfläche aufgeräumter<br />
als bei der Konkurrenz, aber<br />
der Eindruck relativiert sich rasch. Die<br />
einzelnen Konfigurationsschritte sind<br />
nicht immer intuitiv. Wer beispielsweise<br />
ein Land aus der Lieferzone ausschließen<br />
möchte, findet nicht etwa einen Schalter<br />
»disable«. Stattdessen wählt er einfach<br />
keine Option im Popup-Menü aus, das<br />
aber erst erscheint, wenn er den Button<br />
»Enable or disable« geklickt hat. Benutzerfreundlich<br />
geht anders.<br />
Umtausch ausgeschlossen?<br />
Lemonstand trennt penibel zwischen<br />
Kunden und Mitarbeitern. Käufer verwaltet<br />
das System unter »Shop | Customers«,<br />
Bedienstete unter »System | Users«. Erstere<br />
besitzen keine Sonderrechte, aber<br />
das System teilt sie in Gruppen ein, etwa<br />
Großhandel oder Wiederverkäufer (siehe<br />
Abbildung 5). Für unterschiedliche Kundenklassen<br />
können Shopbetreiber jeweils<br />
andere Preise oder Steuern definieren.<br />
Im- und Export als CSV-Datei ist ebenfalls<br />
dabei. Seinen Kollegen kann der<br />
Verwalter sehr leicht Rechte zuweisen<br />
oder entziehen. Die Onlineshop-Software<br />
kennt zudem Rollen für den Shop selbst,<br />
ein angeschlossenes Blog und das eigene<br />
Contentmanagement-System.<br />
Die Produktauswahl und die Benutzerführung<br />
des Shops finden Verwalter im<br />
Abbildung 5: Als einziges System im Test teilt Lemonstand seine Kunden in Gruppen ein und kann daher Sonderkonditionen<br />
für Großhändler und Wiederverkäufer einräumen.
Abbildung 6: Einige Schnittstellen zu Bezahlmöglichkeiten integriert Lemonstand von Haus aus. Für jeden<br />
Abrechnungsmodus legt der Admin fest, welche Kundengruppen ihn nutzen dürfen.<br />
Dashboard unter »Categories« und »Products«.<br />
Das Lemonstand-Interface gefiel<br />
den Testern am besten von allen Kandidaten,<br />
da es logischer aufgebaut ist.<br />
Produkte haben Attribute, Optionen und<br />
Extras, die im Konfigurationsdialog direkt<br />
über Reiter und nicht über extra Menüpunkte<br />
zu erreichen sind.<br />
Der Admin darf selbst erzeugte Attribute<br />
per Mausklick anderen Produkten<br />
zuweisen, was lästiges Umschalten und<br />
Flüchtigkeitsfehler vermindert. Bei der<br />
Produktadministration sind ebenfalls<br />
Funktionen untergebracht, die die Palette<br />
und Bestellungen im CSV-Format exportieren<br />
und importieren. Darüber hinaus<br />
enthält Lemonstand ein Backup- und<br />
Restore-Modul, das mit SQL-Dumps umgeht<br />
und sogar zugehörige Produktbilder<br />
und andere Medien erfasst.<br />
Das Themes-Angebot [8] ist überschaubar.<br />
Etwa die Hälfte der knapp 20 Oberflächen<br />
steht kostenfrei zur Verfügung.<br />
Der teuerste Look mit responsivem Webdesign<br />
schlägt mit knapp 90 US-Dollar<br />
zu Buche. Im Dashboard-Bereich »CMS«<br />
verwaltet der Admin die Themes. Hier<br />
gibt es auch Funktionen, um einen Look<br />
für bestimmte Clients auszusuchen. Auf<br />
diese Weise präsentiert der Händler seinen<br />
Shop passend auf kleinen und großen<br />
Displays.<br />
Der Kandidat trumpfte im Test bei der<br />
Suchfunktion auf, denn der Admin<br />
nimmt Einfluss darauf, was durchsuchbar<br />
ist, etwa auch Produktbeschreibungen<br />
und sogar Metadaten. Das Suchfeld<br />
akzeptiert Strings in Anführungszeichen<br />
und Platzhalter. Gut umgesetzt sind auch<br />
die Filtermöglichkeiten der Produktübersicht.<br />
So bleibt der Laden auch bei einem<br />
großen Warenlager übersichtlich. Ein System<br />
für Kundenbewertungen haben die<br />
Macher ebenfalls beigelegt.<br />
Mehrere Zahlungsmöglichkeiten, unter<br />
anderem für Paypal (siehe Abbildung 6),<br />
Kreditkarten und Google Checkout, sind<br />
direkt integriert. Andere Schnittstellen,<br />
darunter auch die inzwischen weit verbreitete<br />
Sofortüberweisung, finden Händler<br />
im Marketplace bei den Modulen. Ein<br />
Blick in die Sammlung der Erweiterungen<br />
lohnt sich auf jeden Fall. Hier sind auch<br />
Addons erhältlich, die Lemonstand mit<br />
den CRM-Systemen Infusionsoft und One<br />
Saas verbinden.<br />
Schlussverkauf<br />
Einen klaren Sieger kann diese Bitparade<br />
nicht in der Auslage platzieren.<br />
Sowohl Open Cart als auch Lemonstand<br />
sind brauchbare Systeme, denen<br />
jeweils nur Kleinigkeiten zum vollkommenen<br />
Händlerglück fehlen. Bei Open<br />
Cart fehlt beispielsweise eine Funktion,<br />
um Themes und Extensions direkt über<br />
das Dashboard zu verwalten. Das ist bei<br />
Lemonstand besser gelöst. Dafür bietet<br />
der Lemonstand-Marketplace deutlich<br />
weniger Erweiterungen an. Die Open-<br />
Cart-Community scheint auf diesem Gebiet<br />
aktiver.<br />
Satchmo ist kein schlechtes System, erweist<br />
sich im Vergleich aber als zu arbeitsintensiv<br />
und unübersichtlich. Ohne<br />
Django-Kenntnisse dauert die Einarbeitung<br />
länger als bei den anderen Kandidaten,<br />
und die Präsentation der Produkte<br />
im Auslieferungszustand lässt zu wünschen<br />
übrig. Da keine fertigen Themes<br />
verfügbar sind, sollten Anwender Kosten<br />
für einen Grafiker oder Webdesigner fest<br />
ins Budget einplanen.<br />
Wer bereits eine Webseite oder ein Blog<br />
mit Wordpress [9] betreibt, der kann sich<br />
das Aufsetzen einer eigenen Shop-Umgebung<br />
eventuell sparen und ist mit einer<br />
Erweiterung gut bedient (siehe Kasten<br />
„Wordpress-Plugins für Onlineshops“).<br />
Die Installation und Einrichtung gelingt<br />
im Handumdrehen und letztendlich ist<br />
nur ein System zu pflegen. Aber so bequem<br />
diese Herangehensweise für Administratoren<br />
auch sein mag, sie sollten<br />
immer daran denken, das solche Software-Monokulturen<br />
anfällig für Angriffe<br />
von außen sind. <br />
n<br />
Infos<br />
[1] Open Cart: [http:// www. opencart. com]<br />
[2] Satchmo:<br />
[http:// www. satchmoproject. com]<br />
[3] Lemonstand: [http:// lemonstand. com]<br />
[4] Open-Cart-Extensions:<br />
[http:// www. opencart. com/ index. php?<br />
route=extension/ extension]<br />
[5] Django: [https:// www. djangoproject. com]<br />
[6] Mod_wsgi:<br />
[http:// code. google. com/ p/ modwsgi]<br />
[7] Lemonstand-Entwicklerblog:<br />
[http:// blog. lemonstand. com]<br />
[8] Lemonstand-Marketplace:<br />
[http:// lemonstand. com/ marketplace]<br />
[9] Wordpress: [http:// wordpress. org]<br />
[10] WP Shop Germany:<br />
[http:// wpshopgermany. maennchen1. de]<br />
[11] Woo Commerce: [http:// www. woothemes.<br />
com/ woocommerce]<br />
[12] Woo Commerce German Market:<br />
[http:// marketpress. de/ product/<br />
woocommerce‐german‐market]<br />
[13] Tinypass:<br />
[http:// wordpress. org/ plugins/ tinypass]<br />
[14] Sell Media: [http:// graphpaperpress. com/<br />
plugins/ sell‐media]<br />
Bitparade 02/2014<br />
Software<br />
www.linux-magazin.de<br />
61
Software<br />
www.linux-magazin.de Tooltipps 02/2014<br />
62<br />
Werkzeuge im Kurztest<br />
Tooltipps<br />
Cpumon 2.0<br />
Mehrere CPU-Kerne beobachten<br />
Quelle: [http:// www. softndesign. org/ codes/<br />
c/ cpumon]<br />
Lizenz: GPLv2<br />
Alternativen: Atop, Sysstat<br />
Monitoring Plugins 0.15<br />
Sammlung von Nagios-Erweiterungen<br />
Quelle: [http:// svn. durchmesser. ch/ trac/<br />
monitoringplug]<br />
Lizenz: GPLv2<br />
Alternativen: Check_mk, Check Plugins<br />
Bvi 1.40beta<br />
Vi-basierter Hexeditor<br />
Quelle: [http:// bvi. sourceforge. net]<br />
Lizenz: GPLv2<br />
Alternativen: Hview, Dhex<br />
Cpumon beobachtet die Auslastung<br />
mehrerer CPUs und eignet sich damit<br />
unter anderem zum Debuggen von Echtzeitsoftware.<br />
Beim Start sucht das Programm<br />
nach Eichdaten, die es in der<br />
Voreinstellung in der Datei »/var/lib/cpumon/calibration.txt«<br />
erwartet. Existiert<br />
diese nicht, kalibriert das Tool – basierend<br />
auf den Lastdaten des letzten Kerns<br />
– selbst und speichert das Ergebnis. Mit<br />
dem Parameter »‐k CPU-ID« definiert der<br />
Anwender einen anderen Kern als Eichquelle.<br />
Hierzu sind Rootrechte erforderlich,<br />
zum normalen Betrieb als reines<br />
Monitoringtool nicht.<br />
Ohne weitere Optionen aufgerufen überwacht<br />
Cpumon alle vorhandenen Kerne<br />
und schreibt die Auslastungsdaten alle<br />
fünf Sekunden auf die Standardausgabe.<br />
Wer kürzere oder längere Intervalle benötigt,<br />
erreicht dies mit »‐t«. Die Option<br />
»‐m CPU-ID« pickt einen bestimmten<br />
Kern heraus.<br />
Das Quellarchiv enthält zudem das Tool<br />
Load, das die Prozessoren unter Last setzt.<br />
Es ist möglich, einen oder alle Kerne zu<br />
strapazieren. Über den Parameter »‐l« bestimmt<br />
der Benutzer die Last in Prozent.<br />
Load verlangt nach Rootrechten.<br />
★★★★★ Mit Cpumon beobachten Anwender<br />
einen oder mehrere Kerne. In<br />
Kombination mit Load steht ein effizientes<br />
Testduo zur Verfügung. n<br />
Für Nagios kursieren im Netz allerhand<br />
Erweiterungen. Die Sammlung Monitoring<br />
Plugins ergänzt die Liste um über<br />
50 Checks, die mit Nagios und seinen<br />
Ablegern zusammenarbeiten. Sie prüfen<br />
beispielsweise den Bonding-Status, den<br />
Speicherverbrauch oder fehlende Pfade<br />
bei Multipath. Außerdem überwachen die<br />
Plugins den Status von Red-Hat-Clustern,<br />
IPMI-Sensoren, Cups-Druckjobs und so<br />
weiter. Mit dabei sind auch Checks, die<br />
den Admin gegebenenfalls per Mail oder<br />
SMS benachrichtigen.<br />
Die Installationsroutine speichert die<br />
Checks im Verzeichnis »/usr/local/lib/<br />
nagios/plugins«. Für »check_dhcp«,<br />
»check_multipath« und »check_clustat«<br />
sind Rootrechte erforderlich; die anderen<br />
Plugins laufen mit den Privilegien des<br />
Nagios-Benutzers. Jeder Check besitzt<br />
eine eigene Manpage, die umfassend<br />
seine Parameter erläutert, Anwendungsbeispiele<br />
fehlen jedoch.<br />
Wie bei anderen Monitoringlösungen legt<br />
der Admin für jeden Check Schwellwerte<br />
fest. Sind sie erreicht, lösen die Monitoring<br />
Plugins Alarm aus. Die Ausgabe der<br />
Plugins ist Nagios-konform, sodass der<br />
Anwender sie problemlos in bestehende<br />
Infrastrukturen integrieren kann.<br />
★★★★★ Die Monitoring Plugins liefern<br />
Nagios-Testroutinen für viele Anwendungsbereiche.<br />
n<br />
Vi-Fans, die auf der Suche nach einem<br />
Hexeditor sind, sollten bei Bvi vorstellig<br />
werden, da sie das Tool genauso wie<br />
ihren geliebten Texteditor bedienen.<br />
Im Archiv ist ebenfalls das Programm<br />
Bmore enthalten, das als Hexbetrachter<br />
gute Dienste leistet. Beim Start übergeben<br />
Nutzer die Binärdatei. Wer nicht das<br />
ganze File einlesen möchte, definiert mit<br />
dem Parameter »‐s« eine alternative Startadresse.<br />
Ebenso ist es möglich, mit »‐e«<br />
ein Ende zu bestimmen. Alternativ lädt<br />
Bvi mit »‐n« die ersten n Bytes.<br />
Die Ausgabe orientiert sich an der bei<br />
Hexeditoren üblichen Darstellung: Ganz<br />
links zeigt Bvi eine Offsetadresse in hexadezimaler<br />
Schreibweise, mittig den hexadezimal<br />
kodierten Inhalt der Adresse<br />
und rechts die Bytes der jeweils aktuellen<br />
Zeile als Text. Benutzer verwenden die<br />
Standard-Vi-Kommandos, um in den Binärdateien<br />
zu navigieren. Suchen und Ersetzen<br />
funktionieren ebenfalls genauso.<br />
Um das File zu verändern, geben Anwender<br />
aus Sicherheitsgründen zunächst<br />
im Befehlsmodus das Kommando »:set<br />
memmove« ein.<br />
Die Konfiguration gleicht der Vi-Einrichtung.<br />
Anwender geben ihre Wünsche<br />
entweder im Bearbeitungsmodus hinter<br />
»:set« oder in der Datei »~/.bvirc« an.<br />
★★★★★ Wer häufig Binärdateien bearbeiten<br />
muss und mit dem Vi vertraut ist,<br />
der sollte Bvi eine Chance geben. n
Software<br />
www.linux-magazin.de Tooltipps 02/2014<br />
64<br />
Balance 3.56<br />
Load Balancing mit TCP-Proxy<br />
Quelle: [http:// www. inlab. de/ balance. html]<br />
Lizenz: GPLv2<br />
Alternativen: Proto Balance<br />
All World IT Dbackup 0.0.20<br />
Datensicherung leicht gemacht<br />
Quelle: [http:// devlabs. linuxassist. net/<br />
projects/ awit‐dbackup]<br />
Lizenz: GPLv3<br />
Alternativen: Synbak, Areca, Rsnapshot<br />
Lazygal 0.8<br />
Statische Bildergalerien erzeugen<br />
Quelle: [http:// sousmonlit. dyndns. org/<br />
~niol/ playa/ oss/ projects/ lazygal]<br />
Lizenz: GPLv2<br />
Alternativen: Web-Gallery, Igal<br />
Balance ist ein einfacher TCP-Proxy,<br />
der eingehende Verbindungen nach dem<br />
Round-Robin-Verfahren auf mehrere Systeme<br />
verteilt. Da das Tool auch Failover-<br />
Funktionen besitzt, eignet es sich auch<br />
als Load Balancer für kleinere Infrastrukturen.<br />
Da Balance auf der Empfängerseite<br />
IPv6 unterstützt, kann es als 6-to-4-Gateway<br />
dienen.<br />
Eine Konfigurationsdatei gibt es nicht.<br />
Sämtliche Wünsche übergibt der Anwender<br />
beim Start. Um eine Verbindung an<br />
einen anderen Rechner weiterzugeben,<br />
reicht es, Balance zusammen mit dem<br />
eingehenden Port und der Adresse des<br />
Zielrechners aufzurufen. Das Programm<br />
lauscht nun auf allen Schnittstellen am<br />
angegebenen Port nach Verbindungsanfragen<br />
und reicht sie an den gleichen<br />
Port des Zielsystems weiter. Sollte der<br />
Dienst dort auf einem anderen Port laufen,<br />
hängen Anwender diesen mit einem<br />
Doppelpunkt an die Zieladresse an. Optional<br />
beschränken Nutzer die Anzahl der<br />
Verbindungen.<br />
Balance spricht auf Wunsch mehrere<br />
Ziele an. Dazu schreiben Anwender<br />
diese durch Leerzeichen getrennt hintereinander.<br />
Mehrere Zielsysteme fassen sie<br />
mit einem Trennungssymbol zu einem<br />
so genannten Channel zusammen. Das<br />
Ausrufezeichen sorgt dafür, dass Balance<br />
die Verbindungen nach dem Round-<br />
Robin-Prinzip verteilt. Tippt der Nutzer<br />
hingegen ein Prozentzeichen als Trenner<br />
ein, verwendet das Tool einen Hash-Algorithmus<br />
beim Aufteilen. Der Parameter<br />
»‐b« definiert gezielt Interfaces, und zum<br />
Weiterleiten dient »‐B«.<br />
★★★★★ Balance ist ein leistungsfähiges<br />
und flexibles Tool, das sich als Load Balancer<br />
oder 6-to-4-Gateway eignet. n<br />
All World IT Dbackup, kurz Awit<br />
Dbackup, ist ein einfaches Perl-Skript zur<br />
Datensicherung und Wiederherstellung.<br />
Dbackup nutzt in der Voreinstellung das<br />
Xz-Format zum Komprimieren; »‐‐compress«<br />
nimmt alternative Formate wie<br />
Gzip oder Bz2 entgegen.<br />
Anwender rufen Dbackup mit »‐‐backup«<br />
gefolgt vom Quell- und Zielverzeichnis auf.<br />
Das Tool fasst die zu sichernde Ordnerstruktur<br />
nicht in einer Archivdatei zusammen,<br />
sondern bildet sie im Zielverzeichnis<br />
vollständig ab. Für jeden Ordner legt<br />
das Tool vier Dateien an. In »dbackup0.<br />
tar.xz« speichert es die Files der einzelnen<br />
Ebenen. Außerdem erzeugt es »dbackup0.<br />
index« und »dbackup0.manifest«. Die versteckte<br />
Datei ».dbackup‐state« bildet den<br />
Status ab.<br />
Bei jedem weiteren Backup-Lauf aktualisiert<br />
Dbackup nur die Verzeichnisse, in<br />
denen es Änderungen findet, und erhöht<br />
danach die Nummer in den vier Sicherungsdateien.<br />
Alte Backups überschreibt<br />
es nicht. Die Parameter »‐‐exclude‐data«<br />
und »‐‐exclude‐system« schließen zuvor<br />
definierte Daten- und Systemverzeichnisse<br />
aus. Mit »‐‐exclude‐file« und<br />
»‐‐exclude‐fs‐type« legen Nutzer zudem<br />
eigene Ausnahmen fest.<br />
Die Option »‐‐restore«, gefolgt vom<br />
Backup- und Zielverzeichnis, stellt eine<br />
Sicherung wieder her. Dabei rekonstruiert<br />
das Tool immer den letzten Sicherungszustand.<br />
Die Optionen »‐‐tar‐keep‐newer«<br />
beziehungsweise »‐‐tar‐keep‐old‐files«<br />
regeln, ob Dbackup bereits vorhandene<br />
Dateien ersetzt oder nicht.<br />
★★★★★ Dbackup ist noch ein recht<br />
junges Tool, überzeugt aber bereits jetzt<br />
wegen seiner einfachen Bedienung. n<br />
Lazygal stellt Bildersammlungen ganz<br />
ohne PHP und Datenbank zur Schau.<br />
Das Python-Skript erzeugt statische Galerien,<br />
unterteilt große Kollektionen in<br />
mehrere Unterseiten und eignet sich als<br />
Kommandozeilentool auch für den Einsatz<br />
via SSH.<br />
Konfigurationswünsche hinterlegen Nutzer<br />
in der Datei »~/.lazygal/config« oder<br />
übergeben sie beim Aufruf. Eine Einrichtungsdatei<br />
empfiehlt sich vor allem dann,<br />
wenn Lazygal regelmäßig ausstellen soll.<br />
Hier speichern Anwender Einstellungen<br />
zur Bild- und Thumbnail-Größe oder zur<br />
Qualität von JPG-Dateien. Darüber hinaus<br />
legen sie ein Galerieverzeichnis fest,<br />
in dem Lazygal die fertigen Webseiten<br />
bereithält. Die Parameter »theme« und<br />
»default‐style« passen das Erscheinungsbild<br />
an. Einige fertige Themes sind im<br />
Quellarchiv enthalten. Mit XHTML- und<br />
CSS-Kenntnissen passen Nutzer diese an<br />
oder schreiben eigene.<br />
Steht die Konfiguration, rufen Anwender<br />
Lazygal zusammen mit dem Quellverzeichnis<br />
der Bilder auf. Das Tool arbeitet<br />
sich rekursiv durch die Verzeichnisstruktur<br />
und sortiert die Schnappschüsse nach<br />
Exif-Datum, rotiert sie gegebenenfalls<br />
und passt die Größe an. Wer ein Update<br />
will, der ruft das Tool noch einmal auf,<br />
und Lazygal bearbeitet nur jene Bilder,<br />
die noch nicht in der Galerie sind. Modifizierte<br />
Bilder erkennt das Tool jedoch<br />
nicht selbstständig.<br />
★★★★★ Lazygal erstellt im Handumdrehen<br />
statische Galerien fürs Web. Es<br />
kommt ganz ohne PHP und eine Datenbank<br />
aus. Als Konsolentool eignet es sich<br />
gut für den Einsatz via SSH oder als Cronjob.<br />
(U. Vollbracht/hej)<br />
n
Aus dem Alltag eines Sysadmin: Trickle<br />
Durchgepustet<br />
Einführung 02/2014<br />
Sysadmin<br />
Wenn der Datenfluss mal verstopft ist – ja was ist denn schon dabei?! Dann gibt man Bleifuß-Programme zum<br />
Abschuss frei, das macht Zu- und Abfluss frei. Charly Kühnast<br />
Inhalt<br />
66 Android warten und untersuchen<br />
Googles System ist ebenso beliebt wie<br />
unsicher. Eine Anleitung für Admins, die<br />
sich mit mobilen Realitäten befassen.<br />
76 Open Stack On Open Stack<br />
Triple O heißt Hewlett-Packards Lösung,<br />
um Cloudprinzipien auf den Cloudmanager<br />
selbst anzuwenden.<br />
Ich bin über 40 und werde langsam altersmilde.<br />
Das ist ein Scherz, denn gewisse<br />
Phänomene treiben mich weiterhin die<br />
Wand hoch. Editiere ich zum Bei spiel per<br />
SSH auf einem Server eine Konfi gurationsdatei<br />
und die Bandbreite ist so erbärmlich,<br />
dass beim Positionieren des Cursors<br />
die Landezone zur Glückssache wird –<br />
das macht mich wahnsinnig!<br />
Ich weiß, ich weiß, heute reicht selbst die<br />
Leitung in einem Schwarzwald-Dorf für<br />
jede SSH-Connection – so man sie exklusiv<br />
hat. Denn die Hölle, so wusste schon<br />
Sartre, sind die anderen: In meinem Fall<br />
die HTTP-Verbindungen, die mein armes<br />
kleines SSH an den Rand drängen. Jetzt<br />
könnte ich zu Mosh [1] greifen. Das hilft<br />
aber eher bei wackligen als bei überfüllten<br />
Verbindungen. Mein Mittel gegen Verstopfung<br />
heißt Trickle ([2], [3]).<br />
Das Traffic-Shaping-Tool verbiegt per<br />
»LD_PRELOAD« einige Standard-Bibliotheksaufrufe<br />
wie »socket()« und funktioniert<br />
deshalb nur mit dynamisch gelinkten<br />
Binaries. Darunter fallen in der Praxis<br />
aber fast alle Programme,<br />
mit denen der gemeine User<br />
Bandbreite vernichtet. Im<br />
einfachsten Fall bin ich selbst<br />
dieser User, dann kann ich<br />
mich gleich beim Aufruf Traffic<br />
produzierender Programme<br />
in Selbstbeschränkung üben.<br />
Dazu starte ich zum Beispiel<br />
Firefox per:<br />
www.linux-magazin.de<br />
65<br />
Der Autor<br />
Charly Kühnast administriert<br />
Unix-Syste me im Rechenzentrum<br />
Niederrhein. Zu seinen<br />
Aufgaben gehören Sicherheit<br />
und Verfügbarkeit der<br />
Firewalls und der DMZ.<br />
trickle ‐u 32 ‐d 256 firefox<br />
Dies limitiert die Upload-Geschwindigkeit<br />
(»‐u«) auf 100<br />
KByte/s, die Downloadrate<br />
(»‐d«) auf 300 KByte/s. Achtung: Das<br />
sind tatsächlich Kilobytes, nicht ‐bits. Ich<br />
kann auch nur eine Richtung reduzieren,<br />
wenn mir die andere egal ist. Abbildung<br />
1 zeigt die erfolgreiche Begrenzung eines<br />
Downloads auf knapp 2 MBit/s.<br />
Späte Drossel<br />
Die Trickle’schen Wohltaten fallen mir<br />
natürlich immer erst ein, wenn der Download<br />
schon läuft und die SSH-Session<br />
hängt. Zum Glück kennt Trickle einen<br />
Daemon-Modus. Daher lasse ich Trickle<br />
bereits beim Booten der Maschine mit<br />
trickled ‐u 32 ‐d 256<br />
starten. Die Werte muss natürlich jeder<br />
der verfügbaren Bandbreite anpassen.<br />
Der Trickle-Daemon sucht beim Start<br />
nach der »/etc/trickled.conf«, die wie in<br />
Listing 1 aussehen kann. Sie weist bestimmten<br />
Protokollen eine Priorität zu<br />
und betreibt ein wenig Feintuning.<br />
Die Werte hinter »Time‐Smoothing« und<br />
»Length‐Smooting« bestimmen, wie groß<br />
die Schwankungen über ein bestimmtes<br />
Intervall sein dürfen. Je kleiner der Wert,<br />
desto eher profitieren interaktive Protokolle<br />
wie SSH, bei größeren Werten bleibt<br />
Abbildung 1: Speedometer zeigt, wie hier ein Download mit rund<br />
2 MBit pro Sekunden die Kurve kriegt.<br />
auch mal ein größerer Ausreißer – nach<br />
oben wie nach unter – erlaubt. Trickle hat<br />
gegenüber echtem Traffic Shaping natürlich<br />
Nachteile, reicht für den Hausgebrauch<br />
aber völlig. Vielleicht werde ich<br />
ja doch noch altersmilde. (jk) n<br />
Infos<br />
[1] Charly Kühnast, „Shell für den Strand“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 10/13, S. 75<br />
[2] Trickle: [http:// monkey. org/ ~marius/<br />
pages/ ? page=trickle]<br />
[3] Oliver Frommel, „Tropfen für Tropfen“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 02/05, S. 42<br />
Listing 1: »trickled.conf«<br />
01 [ssh]<br />
02 Priority = 1<br />
03 Time‐Smoothing = 0.1<br />
04 Length‐Smoothing = 1<br />
05 <br />
06 [ftp]<br />
07 Priority = 5<br />
08 Time‐Smoothing=3<br />
09 Length‐Smoothing=5<br />
10 <br />
11 [www]<br />
12 Priority = 10<br />
13 Time‐Smoothing = 8<br />
14 Length‐Smoothing = 10
Sysadmin<br />
www.linux-magazin.de Android-Pflege 02/2014<br />
66<br />
Androiden im Unternehmen pflegen und warten<br />
Risiko managen<br />
Ganz egal, wie haarsträubend unsicher Android und Konsorten sich präsentieren, im Unternehmen führt an<br />
„Bring your own device“ kein Weg mehr vorbei, auch wenn das Sicherheit und Compliance-Ansätze untergräbt.<br />
Dieser Artikel zeigt, wie Admins mit Bordmitteln ein wenig Kontrolle zurückgewinnen. Markus Feilner, Hans-Peter Merkel<br />
© Iaroslav Neliubov, 123RF.com<br />
01 [mfeilner@pc]# adb devices<br />
02 List of devices attached<br />
03 <br />
04 [mfeilner@pc]# su<br />
Listing 1: Adb benutzen<br />
05 Passwort:<br />
06 [root@pc]# killall adb<br />
07 [...]<br />
08 [root@pc]# adb devices<br />
09 * daemon not running. starting it now on port 5037 *<br />
10 * daemon started successfully *<br />
11 List of devices attached<br />
12 015d8bed0d3c0814 device<br />
Admins und Security-Experten verlören<br />
mehr und mehr die Kontrolle, darin waren<br />
sich die Sprecher der Susecon-Key notes<br />
Anfang November in Orlando weitgehend<br />
einig (Videos auf der DELUG-DVD,<br />
[1]). Suses CEO Nils Brauckmann sprach<br />
das Problem als Erster an, und sowohl<br />
bei IBM, SAP wie auch bei Cisco ist man<br />
sich der Dramatik bewusst.<br />
Dazu komme, so die CEOs und Vizepräsidenten<br />
weiter, ein Bedeutungsverlust,<br />
den die IT im Unternehmen erleide.<br />
Mangels IT-Verständnis erzwingen mehr<br />
und mehr Vorstandsetagen Einsparungen,<br />
neue Management-Tools und mehr<br />
Cloudlösungen. Großen Anteil an dem<br />
desaströsen Paradigmenwechsel habe in<br />
weiten Teilen die Flut von unsicheren<br />
Geräten, die im Zuge von BYOD in die<br />
Firmen gelange und dazu führe, dass<br />
fortan auch das LAN als unsicheres Terrain<br />
gilt [2].<br />
BYOD zerstört Sicherheitskonzepte<br />
Neben der Notwendigkeit, neue Sicherheitskonzepte<br />
und Architekturen (Deep<br />
Packet Inspection, Software Defined Networking,<br />
… ) einzuführen, bleibt jedoch<br />
das Problem: Die Mehrzahl der Endgeräte<br />
ist unsicher [3]. Weil Google bei Android<br />
die grundlegenden Sicherheitskonzepte<br />
der Unix- und <strong>Linux</strong>-Welt ignorierte,<br />
bleibt dem Admin nur, sich abzufinden<br />
und das Beste daraus zu machen. Wer<br />
genug Geld hat und die Macht, seinen<br />
Anwendern Vorschriften zu machen,<br />
greift zu teuren Cryptophones oder zu<br />
den vielen Angeboten an Mobile-Device-<br />
Management-Software.<br />
Ein Admin jedoch, der auch letzteren<br />
nicht traut, aber Zugriff auf die mobilen<br />
Androiden seiner Mitarbeiter hat, kann<br />
auch mit <strong>Linux</strong> und dem Einverständnis<br />
der Mitarbeiter einiges unternehmen, um<br />
die Situation zu verbessern, ganz ohne<br />
teure MDM-Software anzuschaffen.<br />
Dieser Artikel zeigt, wie sich Tools aus<br />
dem Android-SDK [4] nutzen lassen, um<br />
Informationen über den Zustand des Geräts<br />
abzurufen. Er benennt Apps, die bei<br />
der Analyse hilfreich sein können, und<br />
erläutert, wie der Admin Geräte in einen<br />
sicheren Grundzustand zurückzuversetzt<br />
– inklusive Backup der Benutzerdaten<br />
und Flashen eines Bootloaders.<br />
Wer das beherrscht, traut sich vielleicht<br />
auch zu, ein kompromittiertes Handy<br />
auszuwerten, und schreckt dafür nicht<br />
vor dem Kernel- und Cross-Kompilieren<br />
zurück, um einen Memorydump von Androiden<br />
zu ziehen.<br />
Am Anfang steht das<br />
Rooten des Androiden<br />
Weil Google die gängige <strong>Linux</strong>-Architektur<br />
umgeworfen hat, braucht, wer auf<br />
einem Android-Endgerät ein wenig mehr<br />
machen will als das, was der Datenkrake<br />
erlaubt, Rootrechte. Die sind nicht immer<br />
leicht zu erwerben, am einfachsten<br />
gelingt das Rooten in der Regel mit Geräten<br />
von kooperativen Herstellern. Dazu<br />
gehört Google mit den Nexus-Geräten,<br />
aber auch Samsungs Galaxys und Sony<br />
oder HTC spielen meist gut mit.
Achtung: Wer das (wie fast alles in diesem<br />
Artikel) auf einem fremden Gerät,<br />
also zum Beispiel dem eines Mitarbeiters,<br />
machen will, braucht dessen schriftliche<br />
Einwilligung. Details zu den heiklen<br />
rechtlichen Rahmenbedingungen von<br />
BYOD bietet der Rechtsartikel in dieser<br />
<strong>Linux</strong>-<strong>Magazin</strong>-Ausgabe. Der folgende<br />
Text geht davon aus, dass der Admin die<br />
Zustimmung des Mitarbeiters eingeholt<br />
oder Geräte vor sich hat, die er den Mitarbeitern<br />
an die Hand geben kann. Das ist<br />
zwar nicht unbedingt echtes BYOD, die<br />
Probleme bleiben aber dank der Android-<br />
Schwächen gleich.<br />
Superuser-Apps<br />
Die Wege zum Rootzugriff sind so vielfältig,<br />
dass sich keine allgemeingültige<br />
Anleitung geben lässt – hier hilft nur die<br />
zum jeweiligen Gerät passende Recherche<br />
in den Entwicklerforen oder einschlägigen<br />
Webseiten von den XDA-Developers<br />
bis zu Android User und Androidpit. Wer<br />
das geschafft hat, etwa mit Apps wie Superuser<br />
[5], dem steht eine ganze Reihe<br />
an Apps zur Verfügung, die Google nicht<br />
gerne sieht und die deutlich erweiterte<br />
Funktionen bringen.<br />
Diese rangieren von einen Proxy für den<br />
Browser definieren über einen Adblocker<br />
einrichten, Traffic sniffen, die Default-<br />
Route oder den DNS-Server auf einen<br />
sicheren Weg einstellen bis hin zu vielfältigen<br />
Einstellungen, die auf Desktop-PCs<br />
nur mit hohem Aufwand umsetzbar wären,<br />
beispielsweise individuelle Firewallregeln<br />
für jede App.<br />
Nicht unerwähnt darf bleiben, dass sich<br />
Sicherheitsexperten nicht einig sind, ob<br />
man seinen Androiden rooten soll oder<br />
nicht. Die Autoren dieses Artikels teilen<br />
das Argument der Waffengleichheit: Ein<br />
Angreifer könnte es<br />
jederzeit über Exploits<br />
mit Malware rooten –<br />
warum soll der Besitzer<br />
darauf verzichten?<br />
Außerdem überzeugen<br />
die Features, die<br />
das Rooten mitbringt,<br />
den erfahrenen <strong>Linux</strong>-<br />
Anwender schnell.<br />
Sniffen, loggen,<br />
sichern<br />
Mit Apps wie dem<br />
Netzwerk Log [6] protokollieren<br />
Smartphones<br />
auch über längere<br />
Zeiträu me hinweg<br />
den Netzwerktraffic,<br />
den das Gerät verursacht.<br />
Gefiltert oder<br />
in anschauliche Graphen<br />
verpackt (siehe<br />
Abbildung 1) erlangen<br />
Admins und Anwender<br />
so den Überblick,<br />
welche App wie viel<br />
Datenübertragung verursacht.<br />
Eine Taschenlampen-<br />
App beispielsweise,<br />
die regelmäßig Daten überträgt, fiele dem<br />
aufmerksamen Anwender spätestens hier<br />
negativ auf. Malware oder Einbrecher,<br />
die unbemerkt größere Datenmengen<br />
übertragen wollen, müssten darauf vorbereitet<br />
sein oder den TCP-Stack verändern,<br />
um unentdeckt zu bleiben. Auch<br />
lassen sich hier einzelne Anwendungen<br />
überwachen, Filter setzen und vieles<br />
mehr. Überraschenderweise hält sich die<br />
Akkubelastung bei aktiviertem Logging<br />
durchaus in Grenzen.<br />
Abbildung 1: Nur eine praktischen Monitoring-App unter vielen: Netzwerk<br />
Log snifft auf gerooteten Androiden (hier ein Nexus 7) den Netzwerktraffic<br />
und baut anschauliche Statistiken.<br />
Solche nützlichen Tools gibt es massenhaft<br />
in Googles Play-Store oder alternativen<br />
App-Stores. Scheinbar genauso viele<br />
Webseiten bieten Top-Ten-, Top-20- oder<br />
gar Top-30-Listen der besten Root-Apps<br />
an. Den Autoren dieses Artikels fielen<br />
Tuningtools wie der Android Tuner, der<br />
Cron-Ersatz Tasker, Adblock Plus, der<br />
Pentester Zanti oder das Wifi-Inspect-<br />
Tool mit PCAP-Sniffer namens Wifinspect<br />
besonders positiv auf. Ebenso gelungen<br />
scheint die Applikationsfirewall AFWall+<br />
Android-Pflege 02/2014<br />
Sysadmin<br />
www.linux-magazin.de<br />
67<br />
Listing 2: Die Adb-Shell<br />
01 [root@pc]# adb shell<br />
02 shell@android:/ $ uname ‐a<br />
03 <strong>Linux</strong> localhost 3.1.10‐gd08812a #1 SMP<br />
PREEMPT Wed Sep 4 19:55:23 PDT 2013 armv7l<br />
GNU/<strong>Linux</strong><br />
04 shell@android:/ $ cat /proc/version<br />
05 <strong>Linux</strong> version 3.1.10‐gd08812a (build03@<br />
cyanogenmod) (gcc version 4.6.x‐google<br />
20120106 (prerelease) (GCC) ) #1 SMP PREEMPT<br />
Wed Sep 4 19:55:23 PDT 2013<br />
06 shell@android:/ $ free<br />
07 total used free shared buffers<br />
08 Mem: 997720 880472 117248 0 12320<br />
09 ‐/+ buffers: 868152 129568<br />
10 Swap: 0 0 0<br />
11 shell@android:/ $ cat /proc/cpuinfo<br />
12 Processor : ARMv7 Processor rev 9 (v7l)<br />
13 processor : 0<br />
14 BogoMIPS : 1993.93<br />
15 processor : 1<br />
16 BogoMIPS : 1993.93<br />
17 processor : 2<br />
18 BogoMIPS : 1993.93<br />
19 processor : 3<br />
20 BogoMIPS : 1993.93<br />
21 Features : swp half thumb fastmult vfp<br />
edsp neon vfpv3 tls<br />
22 CPU implementer : 0x41<br />
23 CPU architecture: 7<br />
24 CPU variant : 0x2<br />
25 CPU part : 0xc09<br />
26 CPU revision : 9<br />
27 Hardware : grouper<br />
28 Revision : 0000<br />
29 Serial : 0f410a0001440200
Sysadmin<br />
www.linux-magazin.de Android-Pflege 02/2014<br />
68<br />
Abbildung 2: Die Firewall-App AFWall+ konfiguriert, wer wann über welche<br />
Medien Verbindungen aufbauen darf.<br />
(Abbildung 2, [7]), die anwendungsspezifischen<br />
Internetzugriff ermöglicht.<br />
Der Besitzer des Smartphones kann so<br />
einfach einzelnen Apps verbieten, etwa<br />
über GSM-Netze eine Verbindung aufzubauen,<br />
sondern dies explizit aufs WLAN<br />
beschränken.<br />
Eine mindestens genauso große Anzahl<br />
an Backup- und Restore-Tools erlaubt die<br />
Sicherung von Apps und ihren Daten vom<br />
Android-GUI aus, als ein Beispiel genannt<br />
sei das beliebte Titanium Backup [8].<br />
Mehr Apps für Admins nennt ein Artikel<br />
im <strong>Linux</strong>-<strong>Magazin</strong> 12/13 [9]. Was viele<br />
Admins und Besitzer der Smartphones<br />
nicht wissen: Vieles geht auch von der<br />
<strong>Linux</strong>- oder Android-Konsole aus.<br />
Adb: Android Debug Bridge<br />
geschlossenen Smartphone<br />
her (Listing 1).<br />
Dabei kennt sowohl<br />
das kleine Werkzeug<br />
»adb« wie auch die<br />
Android-Shell selbst<br />
diverse hilfreiche<br />
Kommandos, mit denen<br />
der Admin das<br />
Gerät überwachen,<br />
auslesen, sichern und<br />
in einen vordefinierten<br />
Zustand zurückversetzen<br />
kann.<br />
Wer die Befehle aus<br />
dem SDK häufiger benutzt,<br />
fügt dessen Pfad<br />
am besten mit »PATH=<br />
$PATH:/home/mfeilner/bin/adt‐bundle‐linux‐x86_64<br />
‐20130917/<br />
sdk/platform‐tools/«<br />
zu seinem <strong>Linux</strong>-Pfad<br />
hinzu, idealerweise<br />
über die Startdateien<br />
der Shell. Wer das SDK<br />
mehreren Usern zur<br />
Verfügung stellen will,<br />
entpackt es am besten<br />
nach »/opt«.<br />
Listing 1 zeigt, dass<br />
bisweilen Rootrechte notwendig sind,<br />
um an USB angeschlossene Androiden zu<br />
erkennen. Damit das klappt, muss Root<br />
den eventuell vom Anwender gestarteten<br />
Adb-Daemon killen, erst dann taucht<br />
das Smartphone auf. (Aus diesem Grund<br />
funktioniert der Befehl erst in Zeile 8 von<br />
Listing 1.) Nach einer Bestätigung auf<br />
dem Android-Display wechselt der Status<br />
in Zeile 12 von »unauthorized« auf »device«.<br />
Listing 2 zeigt erste Informationen<br />
aus dem Nexus 7.<br />
USB-Debugging<br />
Der ganze Prozess klappt nur, wenn auf<br />
dem Androiden »USB‐Debugging« aktiviert<br />
ist und der Android-Anwender den<br />
Bestätigungsdialog für den jeweiligen PC<br />
mit dem Tippen auf »Ok« akzeptiert hat<br />
– ein Optionsfeld erlaubt es, einzelne<br />
Maschinen immer sofort und ohne Nachfrage<br />
zu verbinden.<br />
USB-Debugging schaltet er übrigens in<br />
neueren Android-Versionen über 7-faches<br />
Antippen des Eintrags »Einstellungen |<br />
Über das Telefon/Tablet | Buildnummer«<br />
ein. Ab dem vierten Tippen zählt ein Popup<br />
hoch, danach findet sich ein neuer<br />
Eintrag in den Einstellungen, wo der Besitzer<br />
USB-Debugging aktivieren kann.<br />
Erst dann funktioniert das im Folgenden<br />
Beschriebene mit der Adb, Fastboot und<br />
das Flashen von eigenen Roms.<br />
Logcat und Dumpsys<br />
Mehr hilfreiche Informationen über das<br />
System bieten Befehle wie »adb logcat«<br />
(Abbildung 3), der den Fifo-Puffer des<br />
Androiden anzeigt – eine durchaus interessante<br />
Quelle für Informationen,<br />
aus der sich gelegentlich auch Hacker<br />
Im Android-SDK [4], mit dem sich auch<br />
schon der Artikel [10] beschäftigt, ist<br />
die Android Debug Bridge enthalten.<br />
Das kleine Werkzeug stellt zusammen<br />
mit dem gleichnamigen Daemon eine Terminalverbindung<br />
zu einem über USB an-<br />
Abbildung 3: »adb logcat« gibt das Systemprotokoll aus, hier beim Display-Entsperren und Backupversuch.
www.linux-magazin.de<br />
Android-Pflege 02/2014<br />
Sysadmin<br />
69<br />
Abbildung 4: »dumpsys | more« listet zunächst die<br />
Prozessliste des laufenden Systems auf.<br />
Abbildung 5: Wer das Angebot von Cyanogenmod ab Version 10.2 nutzt und sich einen Account beschafft,<br />
wird unter anderem mit einer Remote-Wipe-Funktion belohnt.<br />
bedienen konnten, wie ein Artikel im<br />
<strong>Linux</strong>-<strong>Magazin</strong> [3] erläuterte. Ähnlich<br />
hilfreich sind »dumpsys« oder »bugreport«<br />
an der Adb-Shell oder der interaktive<br />
Aufruf mit »adb bugreport > /tmp/<br />
bugreport«, der einen kompletten Auszug<br />
der Konfiguration des laufenden Systems<br />
ausgibt. Abbildung 4 zeigt am Beispiel<br />
von More, wie sich Dumpsys auch mit<br />
klassischen Unix-Tools nutzen lässt, um<br />
per Pipe oder Ausgabe-Umleitung in eine<br />
Datei die Lesbarkeit zu erhöhen.<br />
Auf dem Tablet läuft Cyanogenmod<br />
10.1.3, das dem Anwender und Admin<br />
in vielen Fällen deutlich mehr Möglichkeiten<br />
für die Konfiguration bietet, gleich<br />
als gerootetes System daherkommt und<br />
in neueren Versionen auch den wichtigen<br />
Remote-Wipe-Button im Webinterface<br />
mitbringt (Abbildung 5).<br />
Immer ein Backup erstellen<br />
vor dem Flashen<br />
Bevor er so ein alternatives, meist deutlich<br />
aktuelleres, schnelleres und sichereres<br />
Image auf das Tablet oder Smartphone<br />
spielt, sollte der Admin jedoch ein<br />
Backup machen. Wie angedeutet gelingt<br />
das auch problemlos von der Kommandozeile.<br />
Adb beherrscht nicht nur den<br />
Shell-Modus, sondern lässt sich auch<br />
interaktiv mit Optionen wie Push und<br />
Pull für den Filet ransfer, aber auch mit<br />
»backup« und »restore« als Sicherungsinstrument<br />
einsetzen. »adb backup Datei«<br />
schreibt alle Userdaten in eine Datei, analog<br />
stellt »adb restore Datei« den vorherigen<br />
Zustand wieder her. Achtung: So<br />
eine Datei kann schnell mehrere Gigabyte<br />
groß werden, das Erstellen dauert.<br />
Dennoch vermag das Backup and Restore<br />
dem Admin viel Zeit und Nerven zu ersparen,<br />
vor allem im Vergleich zum kompletten<br />
Neueinrichten eines Androiden<br />
Listing 3: Flashen mit Fastboot<br />
01 [root@pc]# adb push cm‐10.2‐grouper.zip /sdcard/Download/cm.zip<br />
02 [root@pc]# adb push gapps‐jb‐20130301‐signed.zip /sdcard/Download/<br />
gapps.zip<br />
03 [root@pc]# fastboot ‐‐help<br />
04 usage: fastboot [ ] <br />
05 <br />
06 commands:<br />
07 update reflash device from update.zip<br />
08 flashall flash boot + recovery + system<br />
09 flash [ ] write a file to a flash partition<br />
10 erase erase a flash partition<br />
11 format format a flash partition<br />
12 getvar display a bootloader variable<br />
13 boot [ ] download and boot kernel<br />
14 flash:raw boot [ ] create bootimage and flash it<br />
15 devices list all connected devices<br />
16 continue continue with autoboot<br />
17 reboot reboot device normally<br />
18 reboot‐bootloader reboot device into bootloader<br />
19 help show this help message<br />
20 options:<br />
21 ‐w erase userdata and cache (and format if supported<br />
by partition type)<br />
22 ‐u do not first erase partition before formatting<br />
23 ‐s specify device serial number or path to device<br />
port<br />
24 ‐l with "devices", lists device paths<br />
25 ‐p specify product name<br />
26 ‐c override kernel commandline<br />
27 ‐i specify a custom USB vendor id<br />
28 ‐b specify a custom kernel base address. default:<br />
0x10000000<br />
29 ‐n specify the nand page size. default: 2048<br />
30 ‐S [K|M|G] automatically sparse files greater than size. 0<br />
to disable<br />
31 <br />
32 [root@pc]# fastboot oem unlock<br />
33 [root@pc]# fastboot flash recovery<br />
recovery‐clockwork‐touch‐6.0.2.3‐grouper.img<br />
34 [root@pc]# adb reboot bootloader<br />
35 [...]
Sysadmin<br />
www.linux-magazin.de Android-Pflege 02/2014<br />
70<br />
samt eventueller Recherche für Logindaten<br />
oder Konfigurationsdetails. Mit dem<br />
Full Restore ist es ein Leichtes, einen<br />
definierten, sicheren Ausgangszustand<br />
wieder einzuspielen.<br />
Wie beim ersten Mal<br />
Dagegen ist es meist wenig sinnvoll,<br />
ein defektes oder kompromittiertes System<br />
wiederherzustellen. Wer aber eine<br />
Analyse durchführen muss, kann ein beschädigtes<br />
System samt Einbruchsspuren<br />
bei Bedarf in einer virtuellen Android-<br />
Umgebung in Ruhe analysieren, auch<br />
dafür bringt das SDK Tools mit. Ein Blick<br />
auf die Backup-Optionen mit »adb help«<br />
erläutert, wie sich beispielsweise von<br />
mehreren Anwendern genutzte Androiden<br />
(mit Shared-Bereich) sichern und<br />
wiederherstellen lassen.<br />
Um den Androiden in einen halbwegs<br />
sicheren Ausgangszustand zu versetzen,<br />
der gleichzeitig frei von Bloat- und Spy-<br />
ware der diversen Herstellerbrandings<br />
ist, empfiehlt sich die Installation eines<br />
freien Image. Dafür braucht der Admin<br />
im Beispiel mit einem Nexus-7-Tablet<br />
(das 2013er Modell für knapp 200 Euro)<br />
drei passende Dateien und ein weiteres<br />
Tool aus dem SDK: Fastboot.<br />
Fastboot, Flashen und<br />
Recovery-Images<br />
Listing 3 zeigt im Schnelldurchlauf, wie<br />
er das Gerät mit dem freien und schlanken<br />
Cyanogenmod 10.2 flasht. Das geht<br />
auch ohne Windows und den schicken,<br />
eigens dafür geschriebenen Installer: Zunächst<br />
schiebt der <strong>Linux</strong>er das von der<br />
Cyanogenmod-Webseite [11] heruntergeladene<br />
Image mit »adb push« aufs Smartphone,<br />
anschließend die grundlegenden<br />
Google-Apps (wie den Play-Store), die im<br />
Image nicht enthalten sind. Zum Entsperren<br />
des Bootloaders (»fastboot oem unlock«)<br />
und zum Flashen eines Recovery-<br />
Systems (»fastboot flash recovery Datei«)<br />
dient Fastboot, dessen Optionen auch im<br />
Listing enthalten sind.<br />
Hat alles geklappt, bootet »adb reboot«<br />
das Android-Gerät im jungfräulichen Zustand.<br />
Wer sich das Pushen von Dateien<br />
sparen will, schaut sich die Adb-Option<br />
»sideload« an, mit der er direkt vom PC<br />
aus Dateien auf das Gerät laden kann.<br />
Auch für Fastboot gilt: Oft sind Rootrechte<br />
auf dem PC notwendig, ob das<br />
Tool das Gerät findet, kann der Anwender<br />
mit »fastboot devices« überprüfen. Nur<br />
weil »adb devices« funktioniert, heißt das<br />
nicht immer, dass auch Fastboot das Gerät<br />
erkennt.<br />
Androiden von <strong>Linux</strong> aus<br />
rebooten<br />
Nach dem Android-Reboot gilt es, am<br />
Smartphone oder Tablet die vorher daraufgeschobenen<br />
Images auszuwählen<br />
und zu booten. Viele Geräte verlangen<br />
Listing 4: Sleuthkit<br />
01 [root@pc]# fls ‐V<br />
02 The Sleuth Kit ver 4.1.0<br />
03 <br />
04 [root@pc]# fls ‐f list<br />
05 Supported file system types:<br />
06 ntfs (NTFS)<br />
07 fat (FAT (Auto Detection))<br />
08 ext (ExtX (Auto Detection))<br />
09 iso9660 (ISO9660 CD)<br />
10 hfs (HFS+)<br />
11 ufs (UFS (Auto Detection))<br />
12 raw (Raw Data)<br />
13 swap (Swap Space)<br />
14 fat12 (FAT12)<br />
15 fat16 (FAT16)<br />
16 fat32 (FAT32)<br />
17 ext2 (Ext2)<br />
18 ext3 (Ext3)<br />
19 ext4 (Ext4)<br />
20 ufs1 (UFS1)<br />
21 ufs2 (UFS2)<br />
22 yaffs2 (YAFFS2)<br />
23 <br />
24 [root@pc]# fls yaffs2‐nexus‐onepostpopulation.nanddump<br />
25 d/d 2: lost+found<br />
26 d/d 261: dontpanic<br />
27 d/d 262: misc<br />
28 d/d 268: local<br />
29 d/d 270: data<br />
30 d/d 271: app‐private<br />
31 d/d 272: app<br />
32 d/d 273: property<br />
33 d/d 274: dalvik‐cache<br />
34 d/d 291: anr<br />
35 d/d 292: system<br />
36 d/d 394: backup<br />
37 d/d 3: <br />
38 d/d 4: <br />
39 d/d 61867264: $OrphanFiles<br />
40 [...]<br />
41 <br />
42 [root@pc]# fls ‐r yaffs2‐nexus‐onepostpopulation.nanddump<br />
| grep browser.db<br />
43 +++ r/r * 1573464: browser.db‐journal#600,6<br />
44 +++ r/r * 3670621: browser.db‐journal#605,14<br />
45 +++ r/r * 3408487: browser.db‐journal#615,13<br />
46 +++ r/r 656: browser.db<br />
47 +++ r/r * 8913552: browser.db#656,34<br />
48 +++ r/r * 8651408: browser.db#656,33<br />
49 [...]<br />
Listing 5: Filesysteme<br />
01 [root@pc]# vol.py ‐f Evo4GRodeo.lime ‐‐profile=<strong>Linux</strong>Evo4GARM linux_<br />
mount<br />
02 Volatile Systems Volatility Framework 2.3_beta<br />
03 WARNING : volatility.obj : Overlay structure tty_struct not<br />
present in vtypes<br />
04 tmpfs /app‐cache tmpfs rw,relatime<br />
05 tmpfs /mnt/obb tmpfs rw,relatime<br />
06 tmpfs /mnt/asec tmpfs rw,relatime<br />
07 /dev/block/vold/179:1 /mnt/secure/asec/.android_secure vfat<br />
rw,relatime,nosuid,nodev,noexec<br />
08 /dev/block/mtdblock5 /cache yaffs2 rw,relatime,nosuid,nodev<br />
09 /dev/block/mtdblock6 /data yaffs2 rw,relatime,nosuid,nodev<br />
10 none /acct cgroup rw,relatime<br />
11 tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime<br />
12 htcfs /data/htcfs fuse rw,relatime,nosuid,nodev<br />
13 /dev/block/vold/179:1 /mnt/sdcard vfat rw,relatime,nosuid,nodev,noexec<br />
14 none /dev/cpuctl cgroup rw,relatime<br />
15 tmpfs /dev tmpfs rw,relatime<br />
16 devpts /dev/pts devpts rw,relatime<br />
17 /dev/block/mtdblock4 /system yaffs2 ro,relatime<br />
18 sysfs /sys sysfs rw,relatime<br />
19 /sys/kernel/debug /sys/kernel/debug debugfs rw,relatime<br />
20 proc /proc proc rw,relatime
vorher noch einen Wipe der Partitionen<br />
und Caches – der Recovery-Modus bietet<br />
für all das Menü-Einträge, die sich<br />
mit den Lauter-/Leiser- sowie Ein-/Aus-<br />
Tasten auswählen lassen. Sodann startet<br />
die Initialisierung des Android-Betriebssystems.<br />
Spätestens jetzt sind alle vorher<br />
auf dem Gerät befindlichen Daten<br />
gelöscht. Wer jetzt nach Abschluss der<br />
Konfiguration sein Backup wieder einspielt,<br />
hat den gewünschten – hoffentlich<br />
sichereren – Ausgangszustand zurück.<br />
Android-Pflege 02/2014<br />
Sysadmin<br />
www.linux-magazin.de<br />
71<br />
Tiefenanalyse<br />
Im schlimmsten Fall hat der Admin ein<br />
Android-Gerät vor sich, das vermutlich<br />
kompromittiert ist oder zumindest durch<br />
auffälliges Verhalten Anlass zu der Vermutung<br />
gab. Wer derlei Anzeichen mit<br />
den oben beschriebenen Tools festgestellt<br />
hat, will – neben dem Zurücksetzen<br />
auf einen sicheren Ausgangszustand<br />
– sicherlich auch mehr Details darüber<br />
herausfinden, wer, wie und wann das Tablet<br />
infiziert hat. Auch für Android helfen<br />
die gängigen <strong>Linux</strong>-Tools wie Sleuthkit<br />
[12] weiter.<br />
Jedes Betriebssystem legt seine Konfigurationsdetails<br />
in einer typischen Form<br />
ab, <strong>Linux</strong> nutzt lesbare Konfigurationsdateien,<br />
Windows die Registry, Android<br />
überwiegend SQlite-Datenbanken. Die<br />
sind auch bei vielen Desktopprogrammen<br />
beliebt, etwa bei Firefox. Es spielt dabei<br />
keine Rolle, ob Firefox unter Windows,<br />
<strong>Linux</strong> oder OS X läuft, die History liegt<br />
immer in »places.sqlite«, lediglich der<br />
Speicherort variiert. Googles Android-<br />
Browser speichert seine History in einer<br />
Datei namens »browser.db«.<br />
SQlite unter der Lupe in GUI<br />
und Befehlszeile<br />
Wer solche Datenbanken analysieren<br />
will, um zum Beispiel eine Historie der<br />
vergangenen Webaktionen zu erhalten,<br />
muss diese bei Androiden erst einmal<br />
aus dem Gerät herauslocken. Um das zu<br />
testen und zu lernen, bieten sich die Virtualisierungsfunktionen<br />
des Android-SDK<br />
an – hier kann der Admin in Seelenruhe<br />
in laufenden Systemen herumpfuschen,<br />
ohne etwas zu zerstören. Doch muss er<br />
selbst für Inhalte sorgen, etwa per Adb-<br />
Push- und Adb‐Pull-Befehl. Schneller<br />
Abbildung 6: Wenn das nicht verdächtig ist: Der Anwender hat Webseiten der CIA, der Drogenfahndung DEA<br />
und Secret Services bis hin zum Weißen Haus abgerufen.<br />
geht es meist, gleich im Internet nach<br />
existierenden Images mit vorkonfigurierten<br />
Daten zu suchen. Übungsimages gibt<br />
es viele, die amerikanische Forensikfirma<br />
Viaforensics etwa bietet diverse Images<br />
zum kostenlosen Download an [13].<br />
Ein Yaffs-Nandump-Image<br />
und Sleuthkit<br />
Als Beispiel dient im Folgendem das Abbild<br />
»yaffs2‐nexus‐one‐postpopulation.<br />
nanddump«. Dessen Dateinamens-Erweiterung<br />
Nandump weist auf das Dateisystem<br />
Yaffs hin, das bereits im Artikel [10]<br />
reichlich Probleme bereitete und das nur<br />
wenige Programmen auslesen können.<br />
Für <strong>Linux</strong> gibt es mittlerweile Treiber aus<br />
dem Yaffs-Projekt [14].<br />
Auch wenn sich diese Treiber zur Laufzeit<br />
dem Auswertesystem hinzufügen lassen,<br />
erscheint es deutlich eleganter, die Erweiterungen<br />
von Sleuthkit 4.1 zu nutzen.<br />
Sie bringen erstmals direkten Support für<br />
Yaffs und Ext 4 mit. Weil zu Redaktionsschluss<br />
die meisten Repositories aber<br />
noch auf alte Versionen von Sleuthkit<br />
setzen, muss der analysewillige Admin<br />
dies aus den Quellen bauen. Den Erfolg<br />
zeigt Listing 4 mit vier Befehlen aus dem<br />
Sleuthkit.<br />
Mit diesem Ergebnis kann die Auswertung<br />
beginnen. Das im Listing verwendete<br />
Sleuthkit ist Version 4.1.0 (mittlerweile<br />
wäre sogar 4.12 verfügbar), es unterstützt<br />
Yaffs, das Dateisystem ist lesbar<br />
und der Spürhund kann darin Verzeichnisse<br />
und Dateien finden.<br />
Exemplarisch sucht der Admin gleich<br />
die History des Android-Browsers und<br />
rekonstruiert sie. Die gesuchte Datei ist<br />
»browser.db« mit dem Inode 656. Dies<br />
Such ergebnis fehlte im Listing 4 noch,<br />
weil dort diese Suche noch nicht rekursiv<br />
erfolgte. Interessant ist, dass sich hier<br />
auch alte Versionen (die Journals) der<br />
Datei finden.<br />
Wear Levelling erzeugt<br />
Journaldateien<br />
Das liegt am schonenden Wear Leveling<br />
[15], wobei der Flashspeicher unter Yaffs<br />
speicherzellenschonend die Schreibzugriffe<br />
gleichmäßig zu verteilen sucht. Das<br />
freut den Forensiker, kann er doch gleich<br />
mehrere Dateien auswerten, auch wenn<br />
der User die History eventuell gelöscht<br />
oder bereinigt hat. Er extrahiert dazu die<br />
»Browser.db« mit dem »icat«-Kommando<br />
samt Meta-Informationen aus dem Image<br />
und betrachtet sie mit dem grafischen<br />
Sqlitebrowser (Abbildung 6):<br />
[root@pc]# icat yaffs2‐nexus‐one‐U<br />
postpopulation.nanddump 656 > browser.de<br />
Wie in der Abbildung zu sehen ist,<br />
liegt das Datumsfeld »Date« noch im<br />
»PRTIme«-Format vor, zusammen mit<br />
den schwer lesbaren Unix-Timestamps.
Sysadmin<br />
www.linux-magazin.de Android-Pflege 02/2014<br />
72<br />
Ein Awk-Skript erzeugt daraus aussagekräftige<br />
Werte:<br />
[root@pc]# awk '{print strftime("%a, %d %b U<br />
%Y.%H:%M:%S",($1/1000000‐11644473600))}'<br />
Analoge Informationen lassen sich zu fast<br />
jeder installierten Anwendung aus dem<br />
Image herauslesen, wobei auch das mit<br />
Adb erzeugte Backup oder die Push- und<br />
Pull-Befehle bereits ähnliche Analysen<br />
aus dem laufenden System zulassen. Wer<br />
das regelmäßig macht, eventuell automatisiert<br />
und inklusive per Policy vorgeschriebener<br />
Maßnahmen, hat zumindest<br />
gute Chancen, das offene Zeitfenster für<br />
Einbrecher zu verkleinern.<br />
Wenn das noch nicht reicht, helfen<br />
Me mo rydump-Analysen: Auch die im<br />
<strong>Linux</strong>-<strong>Magazin</strong> vorgestellte Memorydump-Analyse<br />
des laufenden Systems mit<br />
Volatility [16] ist für Android verfügbar.<br />
Volatility<br />
Seit Version 2.2 steht Volatility für <strong>Linux</strong><br />
bereit, seit der Beta 2.3.1 ist Android- und<br />
Mac-Support enthalten. Problematischer<br />
als Volatility erweist sich aber das Erstellen<br />
eines eigenen Memorydump aus<br />
einem vorliegenden Androiden. Wie bei<br />
<strong>Linux</strong> brauchen jeder Kernel und jede<br />
01 1|HTC|http://www.htc.com/|2|11|h|ht|htc<br />
02 2|Google|http://www.google.com/|2|11|g|go|goo<br />
03 3|Facebook|http://www.facebook.com/|2|11|f|fa|fac<br />
04 4|Yahoo!|http://www.yahoo.com/|2|11|y|ya|yah<br />
05 5|YouTube|http://www.youtube.com/|2|11|y|yo|you<br />
06 6|Windows Live|http://www.live.com/|2|11|l|li|liv<br />
07 7|Wikipedia|http://www.wikipedia.org/|2|11|w|wi|wik<br />
08 8|Blogger.com|http://www.blogger.com/|2|11|b|bl|blo<br />
09 9|Baidu.com|http://www.baidu.com/|2|11|b|ba|bai<br />
10 [...]<br />
Listing 6: »select * from<br />
htctopbookmarks«<br />
Listing 7: Vorbereitungen auf Ubuntu<br />
01 [root@pc]# aptitude install<br />
gcc‐arm‐linux‐gnueabi<br />
02 [...]<br />
03 [root@pc]# git clone https://android.<br />
googlesource.com/kernel/goldfish.git /opt/<br />
android‐source<br />
04 [...]<br />
05 [root@pc]# cd /opt/android‐source/<br />
06 [root@pc]# git branch ‐a<br />
07 * master<br />
08 remotes/origin/HEAD ‐> origin/master<br />
Abbildung 7: Browser-Histories aus dem Speicher des Android-Geräts. Analoge Daten gibt es für jede App.<br />
Android-Version angepasste Lime-Treiber,<br />
deren Konstruktion selbst hartgesottene<br />
<strong>Linux</strong>-Spezialisten vor mittelgroße Aufgaben<br />
stellen. Für ein Volatility-Beispiel<br />
gibt es Gott sei Dank Testimages, zum<br />
Beispiel bei [17].<br />
Wer sich aus Googles Repository die Datei<br />
»Rodeo2012.tgz« (Link auf »DFRWS<br />
2012 Rodeo«) herunterlädt, findet darin<br />
zwei Dateien: »Evo4GRodeo.lime« und<br />
»Evo4G.zip«. Die erste ist der eigentliche,<br />
mit Lime erstellte Memorydump, bei der<br />
zweiten Datei handelt es sich um die<br />
Profildatei, die im Volatility-Projektverzeichnis<br />
nach »plugins/overlays/linux«<br />
kopiert wird. (Mehr zu den Lime-Profilen<br />
bietet der <strong>Linux</strong>-<strong>Magazin</strong>-Artikel [16].)<br />
Wenn das Profil zum Image passt, kann<br />
der Admin loslegen:<br />
[root@pc]# vol.py ‐‐info | grep <strong>Linux</strong><br />
Volatile Systems Volatility Framework 2.3_U<br />
beta<br />
<strong>Linux</strong>Evo4GARM ‐ A Profile for <strong>Linux</strong> Evo4G U<br />
ARM<br />
Listing 5 zeigt die zum Zeitpunkt des<br />
Dump gemounteten Dateisysteme, der<br />
Befehl »linux_dentry_cache« hilft bei der<br />
Suche nach Dateien, etwa der »browser.<br />
09 remotes/origin/android‐goldfish‐2.6.29<br />
10 remotes/origin/android‐goldfish‐3.4<br />
11 remotes/origin/linux‐goldfish‐3.0‐wip<br />
12 remotes/origin/master<br />
13 [...]<br />
14 [root@pc]# git checkout ‐t remotes/origin/<br />
android‐goldfish‐3.4 ‐b goldfish‐3.4<br />
15 [...]<br />
16 [root@pc]# export ARCH=arm<br />
17 [root@pc]# export SUBARCH=arm<br />
18 [root@pc]# export CROSS_<br />
db«, die vielleicht noch nicht auf der<br />
Festplatte gesichert ist:<br />
[root@pc]# vol.py ‐f Evo4GRodeo.lime U<br />
‐‐profile=<strong>Linux</strong>Evo4GARM linux_dentry_cache U<br />
> filelist<br />
In der Datei »filelist« liegen die Informationen<br />
aber erst im Bodyfile-Format,<br />
einem Rohdatenformat, das MACB-Time<br />
(aus dem Sleuthkit) ins lesbare MACB-<br />
Format umwandelt (»mactime ‐d filelist<br />
> filelist.mac«). Abbildung 7 zeigt, wie<br />
ein »grep browser.db filelist.mac« die gewünschte<br />
Information liefert. Volatility<br />
stellt damit die Nummern der Inodes<br />
bereit, mit denen der Admin eine Datei<br />
wiederherstellen kann:<br />
[root@pc]# vol.py linux_find_file ‐F "/data/U<br />
data/com.android.browser/databases/browser.db"<br />
[...]<br />
[root@pc]# vol.py linux_find_file ‐i U<br />
0xd3aebd20 ‐O browser.db<br />
Im Gegensatz zu Sleuthkit dient hier der<br />
virtuelle Inode »0xd3aebd20« zur Identifikation.<br />
Jetzt ließe sich wieder der Sqlitebrowser<br />
bemühen, doch taugt auch die<br />
Befehlszeile zur Analyse. Abbildung 8<br />
zeigt eine erfolgreiche Operation mit »sqlite3<br />
browser.db« und anschließendem<br />
Auflisten der enthaltenen Tabellen (».tables«).<br />
Da zeigt sich: In der Datenbank<br />
sind offensichtlich HTC-Bookmarks enthalten.<br />
Die bringt dann ein »select * from<br />
htctopbookmarks;« zu Tage (Listing 6).<br />
Das Problem Memorydump<br />
Wer eigene Memorydumps anfertigen<br />
will, muss derzeit massiv selbst Hand anlegen,<br />
und zwar an Sourcecode, Kernel,
Module und mehr. Das folgende Beispiel<br />
beschreibt die Vorgehensweise, die im<br />
Test mit Android 4.4 (Kitkat verwendet<br />
Kernel 3.4) sowie einem HTC-Gerät<br />
funktionierte. Eine anschauliche – aber<br />
nicht immer stimmige – Anleitung von<br />
Google selbst findet sich unter [18]. Voraussetzung<br />
für den Erfolg sind neben<br />
dem Android-SDK Entwicklertools und<br />
ein Crosscompiler.<br />
Allerdings verwendet das Beispiel nicht<br />
den aus Googles Native Development Kit<br />
(NDK, [19]), sondern den auf Ubuntu<br />
vorhandenen GNU-Crosscompiler für<br />
ARM, weil der einfacher zur Kooperation<br />
zu bewegen war. Erst kurz vor Redaktionsschluss<br />
erreichten die Autoren<br />
Berichte von Mitarbeitern des Schweizer<br />
Bundesamts für Informatik und Telekommunikation,<br />
die auch mit Hilfe des<br />
NDK-Compilers Memdumps extrahieren<br />
konnten. Für Ubuntu zeigt Listing 7,<br />
wie man die Android-Kernelsourcen aus<br />
Googles Git holt.<br />
Abbildung 8: Die Browser-Konfiguration aus dem<br />
Arbeitsspeicher des laufenden Systems lässt sich<br />
auch am CLI analysieren.<br />
Jetzt kommt der spannende Teil: Bevor<br />
der Administrator die Quellen des<br />
Kernels kompiliert, benötigt er die zum<br />
Geräte-Kernel passende »config«. Auf den<br />
meisten Devices liegt diese gezippt unter<br />
»/ proc/config.gz«, andere Hersteller machen<br />
es dem Forensiker schwer, indem<br />
sie diese Datei nicht mitinstallieren, teilweise<br />
sogar aus den Quelltextarchiven<br />
entfernen. Wenn dann weder in Foren<br />
noch in installierbaren Open-Source-<br />
Mods solche Konfigurationsdateien zu<br />
finden sind, dann hilft nur das langwierige<br />
Try-and-Error-Verfahren.<br />
Auch in jeder virtuellen Gastmaschine<br />
(die das SDK starten kann) sollte eine<br />
solche Datei liegen, in seltenen Fällen findet<br />
sie sich vielleicht im auf dem Smartphone<br />
installierten Recovery-System. Wer<br />
diese Hürde genommen hat, entpackt<br />
und editiert die Config-Datei. Normalerweise<br />
reicht es bereits aus, dabei die drei<br />
»MODULES«-Zeilen einzufügen oder zu<br />
editieren:<br />
CONFIG_BASE_SMALL=0<br />
CONFIG_MODULES=y<br />
CONFIG_MODULES_UNLOAD=y<br />
CONFIG_MODULES_FORCE_UNLOAD=y<br />
CONFIG_BLOCK=y<br />
Jetzt gilt es, die Datei im Quelltextverzeichnis<br />
zu speichern und Make aufzurufen.<br />
Liegt der Kernel beispielsweise in<br />
»/opt/android‐source/arch/arm/boot/«,<br />
dann zieht – in diesem Verzeichnis aufgerufen<br />
– das Kommando<br />
[root@pc]# svn checkout http://lime‐U<br />
forensics.googlecode.com/svn/trunk/ U<br />
lime‐android<br />
Android-Pflege 02/2014<br />
Sysadmin<br />
www.linux-magazin.de<br />
73
Sysadmin<br />
www.linux-magazin.de Android-Pflege 02/2014<br />
74<br />
Abbildung 9: Der erste Schritt ist geschafft: Volatility erkennt das Android-Profil.<br />
die Lime-Treiber für Android samt Makefile<br />
für <strong>Linux</strong>-Umgebungen herunter –<br />
und hier fangen die individuellen Probleme<br />
mit den Geräten an.<br />
Generell muss »KDIR_GOLD := /opt/<br />
android‐source« auf den richtigen Pfad<br />
verweisen, doch bereits die Optionen<br />
der »CROSS_COMPILE«-Anweisung unterscheiden<br />
sich von Gerät zu Gerät.<br />
Gemeinsam ist den Ansätzen nur, dass<br />
sie den Crosscompiler mit »ARCH=arm<br />
CROSS_COMPILE=$(CCPATH)/arm‐linux<br />
‐gnueabi« aufrufen.<br />
Lime-Modul laden<br />
Am Beispiel eines vom SDK emulierten<br />
Androiden zeigt Listing 8, wie das<br />
Lime-Modul auf das Smartphone gelangt.<br />
Sofort nachdem das Modul geladen ist<br />
(einmal nur, nicht bei jedem Start, daher<br />
Insmod anstelle von Modprobe), speichert<br />
es einen Dump auf der (virtuellen)<br />
SD-Karte, die sich mit den gewohnten<br />
Tricks herunterladen lässt – hier bietet<br />
es sich an, gleich eine Netcat-Verbindung<br />
(Nc) zu nutzen, schon weil die Datenübertragung<br />
damit schneller ist als der<br />
Umweg über die SD-Card.<br />
Doch selbst wenn all diese Schritte geklappt<br />
haben, braucht Volatility noch die<br />
richtigen Erweiterungen. Analog zu den<br />
<strong>Linux</strong>-Kerneln im Artikel [16] muss der<br />
Admin mit Make die »system.map« und<br />
»module.dwarf« erzeugen, die als Zip-<br />
File im Profil-Verzeichnis von Volatility<br />
landen. Nach einem »zip Goldfish‐3_4.<br />
zip module.dwarf /opt/android‐source/<br />
System.map« findet Vol.py auch das neue<br />
Profil mit dem Namen Goldfish (Abbildung<br />
9). Wer das geschafft und die für<br />
sein Gerät korrekten Einstellungen in<br />
den Makefiles und der Kernel-Config gewählt<br />
hat, kann jetzt mit der Analyse des<br />
Memdump loslegen. Der Befehl<br />
vol.py ‐f goldfish.lime ‐‐profile=U<br />
<strong>Linux</strong>Goldfish‐3_4ARM linux_mount<br />
listet – wie oben beschrieben – auch auf<br />
Android die vorhandenen Mounts auf.<br />
Fazit<br />
Listing 8: Kernel und Lime-Modul installieren<br />
Android ist unsicher, daran ändert auch<br />
die Addon-Software, die viele Hersteller<br />
bieten, nichts. Das Vertrauen in ein unsicheres<br />
OS können auch solche Produkte<br />
nicht stärken. Wer nicht tief in die Tasche<br />
greifen will, muss selbst Vorkehrungen<br />
treffen, um seinen Mitarbeitern und Geräten<br />
im schlimmsten Fall schnell wieder<br />
ein funktionierendes, sauberes Gerät zur<br />
Verfügung zu stellen.<br />
Mit den richtigen Analysetools lässt sich<br />
vielleicht auch herausfinden, was als<br />
Einfallstor diente, um mit Apps wie der<br />
Firewall AFWall+ geeignete Maßnahmen<br />
zu treffen und das Tor in Zukunft zu<br />
verschließen. An der Vernunft der Mitarbeiter<br />
und gegenseitigem Vertrauen führt<br />
dennoch kein Weg vorbei.<br />
Sicherheitsexperten, etwa auf der Securitymesse<br />
It-SA, sind sich einig: Androidund<br />
Apple-Devices im Unternehmen sind<br />
wie PCs in Internetcafés: unsicher, ständig<br />
Bedrohungen ausgesetzt, nicht kontrollierbar.<br />
Da hilft nur das regelmäßige<br />
Neuinstallieren. <br />
n<br />
01 [root@pc]# emulator ‐avd goldfish ‐kernel /opt/android‐source/arch/arm/boot/zImage ‐show‐kernel<br />
‐verbose<br />
02 [root@pc]# adb push lime‐goldfish.ko /sdcard/lime.ko<br />
03 [root@pc]# adb shell<br />
04 [shell@android]## insmod /sdcard/lime.ko "format=lime path=/sdcard/goldfish.lime"<br />
Infos<br />
[1] Susecon: [http:// www. susecon. com]<br />
[2] Titelthema „Gefährliche Mitbringsel“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 09/12, S. 24 bis 42<br />
[3] Markus Feilner, „Architektenpfusch“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 10/12, S. 28<br />
[4] Android-SDK: [https:// developer. android.<br />
com/ sdk/ index. html]<br />
[5] Superuser: [https:// play. google. com/<br />
store/ apps/ details? id=com. noshufou.<br />
android. su& hl=en]<br />
[6] Netzwerk Log: [https:// play. google. com/<br />
store/ apps/ details? id=com. googlecode.<br />
networklog& hl=en]<br />
[7] AFWall+: [https:// play. google. com/ store/<br />
apps/ details? id=dev. ukanth. ufirewall]<br />
[8] Titanium Backup: [https:// play. google.<br />
com/ store/ apps/ details? id=com.<br />
keramidas. TitaniumBackup]<br />
[9] Holger Gantikow, Markus Feilner, „Der<br />
Admin-Touch“: <strong>Linux</strong>-<strong>Magazin</strong> 12/13, S. 68<br />
[10] Hans-Peter Merkel, Markus Feilner, „Frei,<br />
aber offen?“: <strong>Linux</strong>-<strong>Magazin</strong> 10/11, S. 40<br />
[11] Cyanogenmod:<br />
[http:// www. cyanogenmod. org]<br />
[12] Hans-Peter Merkel, Markus Feilner „Wider<br />
das Vergessen“: <strong>Linux</strong>-<strong>Magazin</strong> 03/11,<br />
S. 90<br />
[13] Viaforensics: [https:// viaforensics.<br />
com/ android‐forensics/<br />
google‐nexus‐yaffs2‐images. html]<br />
[14] Yaffs: [http:// www. yaffs. net]<br />
[15] Wear Leveling: [http:// de. wikipedia. org/<br />
wiki/ Solid‐State‐Drive]<br />
[16] Markus Feilner, Hans-Peter Merkel,<br />
„Flüchtige Spuren“: <strong>Linux</strong>-<strong>Magazin</strong> 11/13,<br />
S. 68<br />
[17] Sample Memory Images:<br />
[http:// code. google. com/ p/ volatility/ wiki/<br />
SampleMemoryImages]<br />
[18] Eigene Memory Dumps:<br />
[http:// code. google. com/ p/ volatility/ wiki/<br />
AndroidMemoryForensics]<br />
[19] Googles NDK: [http:// developer. android.<br />
com/ tools/ sdk/ ndk/ index. html]<br />
Der Autor<br />
Hans-Peter Merkel ist mit<br />
dem Schwerpunkt Datenforensik<br />
seit vielen Jahren<br />
in der Open-Source-<br />
Community aktiv. Er bildet<br />
Mitarbeiter von Strafverfolgungsbehörden<br />
in Europa, Asien und Afrika aus<br />
und engagiert sich als Gründer und Vorsitzender<br />
bei Freioss und <strong>Linux</strong>4afrika.
Sysadmin<br />
www.linux-magazin.de Triple O 02/2014<br />
76<br />
Open Stack deployen mit Triple O<br />
Oh, oh, oh!<br />
Der Begriff Cloud umfasst auch das Prinzip, Vorgänge so weit wie möglich zu systematisieren und zu automatisieren.<br />
Doch geht es darum, die Cloud dazu zu nutzen, sich selbst zu automatisieren, dann trennt sich<br />
die Spreu vom Weizen. Open Stack will das Problem angehen und bringt Triple O. Martin Loschwitz<br />
© John Roman, 123RF.com<br />
verwaltet: Vom vollautomatisierten Starten<br />
über Skalieren in die Breite bis zum<br />
Shutdown gibt es nichts, um das sich<br />
Heat nicht kümmern könnte.<br />
Der Open-Stack-Hype geht weiter. Manche<br />
Szenekenner fürchten bereits um die<br />
Vielfalt freier Software, weil sich immer<br />
mehr Unternehmen öffentlich zu Open<br />
Stack bekennen und andere Cloud-Lösungen<br />
ins Hintertreffen geraten.<br />
Kinderschuhe<br />
Zusatzlösungen von Drittherstellern<br />
sprießen allerorten aus dem Boden. Verschiedenste<br />
Hersteller versprechen, alle<br />
möglichen administrativen Aufgaben im<br />
Open-Source-Cloud-Management aus<br />
den Händen des Administrators zu nehmen<br />
und der Automatisierung zu übergeben.<br />
Gleichzeitig geht ein Aspekt in der<br />
Cloud-Debatte unter: Clouds machen den<br />
Kunden zwar das flexible und automatisierte<br />
Benutzen von IT-Dienstleistungen<br />
möglich, schaffen es aber immer noch<br />
nicht oder nur unzureichend, den Betreibern<br />
von IT-Plattformen das Einrichten<br />
der Cloud selbst zu erleichtern.<br />
Das Cloud-Deployment selbst steckt – abseits<br />
teuerer proprietärer Produkte – noch<br />
in den Kinderschuhen. Und weil die ersten<br />
Open-Stack-Versionen dank undurchsichtiger<br />
Abläufe, einer lückenhaften<br />
Installation und einer unzureichenden<br />
Dokumentation bisweilen schwierig in<br />
Betrieb zu nehmen waren, misstrauten<br />
viele Admins der Lösung. An dem Image<br />
ändert wohl auch nichts, dass Suse („20<br />
Minuten bis zur Open-Stack-Cloud“) oder<br />
Red Hat Setuptools anpreisen, mit denen<br />
sich Open Stack schneller installieren<br />
lässt als so manches Betriebssystem. Die<br />
Insellösungen der großen Distributoren<br />
können nicht darüber hinwegtäuschen,<br />
dass in der Deploymentkette von Open<br />
Stack einiges im Argen lag.<br />
Ist die Cloud aber erstmal installiert, ist<br />
der Rest kein Thema mehr: Heat, das in<br />
Open Stack Havana Einzug in die Cloud-<br />
Umgebung hielt, ist eine vollständige<br />
Orchestrierungslösung, die eine VM den<br />
gesamten Lebenszyklus lang komfortabel<br />
Heat, Packstack, Kickstack,<br />
Razor, Foreman, Crowbar<br />
Aber wie kommen Admins an den Punkt,<br />
an dem Heat schlussendlich funktioniert,<br />
zusammen mit sämtlichen anderen Open-<br />
Stack-Komponenten? Und wie tragen sie<br />
dem Umstand Rechnung, dass auch die<br />
Cloud-Umgebung selbst dynamisch in die<br />
Breite skalieren soll? Dass es also früher<br />
oder später notwendig sein dürfte, die<br />
vorhandene Open-Stack-Installation um<br />
mehrere Gastgeber zu erweitern, komfortabel<br />
und automatisiert?<br />
Hier greifen Admins bisher zu sehr unterschiedlichen<br />
Lösungen, beispielsweise<br />
solche, die auf den Puppet-Modulen aufbauen.<br />
Red Hats Packstack fällt in diese<br />
Kategorie [1], Kickstack [2] ebenso. Aber<br />
damit Puppet laufen und auch Open<br />
Stack installieren kann, bedarf es eines<br />
installierten Betriebssystems. Das könnte<br />
gegebenenfalls Razor [3] leisten, und per<br />
Foreman [4] wäre eine solche Installation<br />
auch zu warten. Doch sieht sich der<br />
Admin dann schon wieder einem ganzen<br />
Haufen von Zusatztools gegenüber, die<br />
mit Open Stack erstmal nichts zu tun<br />
haben. Suse geht seinen eigenen Weg mit<br />
dem von Dell entwickelten Crowbar [5]<br />
samt Chef, doch ist diese Kombination<br />
noch nicht fertig. HP tauchte derweil mit<br />
einer eigenen Lösung auf: Triple O [6].<br />
Funktionalität recyclen<br />
Die Grundidee hinter Triple O ist denkbar<br />
einfach: Weil es in Open Stack ja
sämtliche Werkzeuge schon gibt, die<br />
für automatische Installation sowie Orchestrierung<br />
notwendig sind, sollte es<br />
möglich sein, diese auch auf nacktem<br />
Metall zu nutzen. Denn ob ein Rechner,<br />
der automatisiert installiert werden soll,<br />
eine virtuelle Maschine oder echtes Blech<br />
ist, macht in den meisten Fällen keinen<br />
Unterschied.<br />
Die HP-Entwickler fragten sich folglich,<br />
ob man nicht ein „Meta-Open-Stack“<br />
bauen könnte, das Hardware verwaltet<br />
und komplette Open-Stack-Umgebungen<br />
anbietet. Genau darauf zielt Triple O ab:<br />
Die Abkürzung steht für „Open Stack On<br />
Open Stack“.<br />
um virtuelle Maschinen zu kümmern,<br />
nicht aber um echte Hardware. Während<br />
sich bei VMs beispielsweise die<br />
Ressourcen voraussagen, sogar notfalls<br />
(um)definieren lassen, ist physische<br />
Hardware die meiste Zeit eine eher fixe<br />
Konfiguration, deren Vor- und Nachteile<br />
ein Deployment-Werkzeug im Hinterkopf<br />
haben muss. Triple O muss sich folglich<br />
mit wechselnden Konventionen im Open<br />
Stack-Universum beschäftigen und diese<br />
gegebenenfalls anpassen.<br />
Von zentraler Bedeutung ist in diesem<br />
Kontext der »baremetal«-Treiber, der in<br />
Open Stack Nova für Hardware die gleichen<br />
Funktionen bietet wie es üblicherweise<br />
die Virtualisierungstreiber tun.<br />
Nova ist in dieser Hinsicht sehr modular<br />
aufgebaut: Über einen einzelnen Eintrag<br />
in der Konfiguration von »nova.conf« lässt<br />
sich festlegen, welchen Virtualisierungstreiber<br />
Nova einsetzen soll, um virtuelle<br />
Maschinen zu starten (Listing 1).<br />
Im Triple-O-Kontext verwaltet Nova aber<br />
keine virtuellen Maschinen, sondern<br />
echte Systeme – der Baremetal-Treiber<br />
tritt quasi als Vermittler auf. Auf der einen<br />
Seite nimmt er von Nova entsprechende<br />
Befehle entgegen, auf der anderen<br />
Seite wickelt er die gewünschten<br />
Arbeitsschritte auf den Servern ab. Am<br />
Ende des Vorgangs ist aus dem zuvor<br />
Triple O 02/2014<br />
Sysadmin<br />
www.linux-magazin.de<br />
77<br />
Praxischeck<br />
In der Realität ist allerdings nicht alles<br />
so einfach, wie es auf den ersten Blick<br />
den Anschein hat. Denn Open Stack ist<br />
bis dato maßgeblich unter der Vorgabe<br />
entwickelt worden, sich hauptsächlich<br />
Listing 1: »nova.conf«<br />
01 [default]<br />
02 compute_driver=nova.virt.baremetal.driver.BareMetalDriver<br />
03 firewall_driver = nova.virt.firewall.NoopFirewallDriver<br />
04 scheduler_host_manager=nova.scheduler.baremetal_host_manager.BaremetalHostManager<br />
05 ram_allocation_ratio=1.0<br />
06 reserved_host_memory_mb=0
Sysadmin<br />
www.linux-magazin.de Triple O 02/2014<br />
78<br />
jungfräulichen Server<br />
ein Hypervisor-<br />
Knoten geworden, der<br />
sich sich wiederum<br />
durch Nova und den<br />
Baremetal-Treiber verwalten<br />
lässt.<br />
Ironic<br />
Derzeit arbeiten die<br />
Open-Stack-Entwickler<br />
übrigens an einem<br />
Refactoring des<br />
Baremetal-Treibers:<br />
Er wird zum eigenen<br />
Projekt namens Ironic und soll mehr<br />
Aufmerksamkeit bekommen als bisher.<br />
Wenn der Baremetal-Server in Nova dafür<br />
sorgt, dass Hardware im Sinne des<br />
Admins mit einem Betriebssystem ausgestattet<br />
wird, dann bedarf es dafür einer<br />
zentralen Komponente, die weiß, was für<br />
ein Server aus welcher Hardware denn<br />
entstehen soll. In Triple O kümmert sich<br />
Tuskar um das physische Inventar. De<br />
facto erlaubt Tuskar es einem Administrator,<br />
Server mit ihrer Hardware-Konfiguration<br />
abzuspeichern, ihnen anschließend<br />
Open-Stack-Dienste zuzuweisen,<br />
die Triple-O-Funktionen installieren und<br />
passend konfigurieren.<br />
Tuskar<br />
Der Inventardienst kommt mit einem eigenen<br />
Plugin für das Dashboard, also das<br />
Open-Stack-Webinterface, und passt sich<br />
so nahtlos in das gewohnte Open-Stack-<br />
Nutzungskonzept ein. In Tuskar lassen<br />
sich überdies Rechnerklassen anlegen,<br />
sogar die Einteilung in Racks unterstützt<br />
es. Das ist besonders dann praktisch,<br />
wenn die Entscheidung über die verwendete<br />
Hardware auch auf Grundlage<br />
des Standortes eines Systems fallen soll,<br />
beispielsweise, um Disaster-Recovery in<br />
angemessener Zeit zu ermöglichen.<br />
Unter der Haube funktioniert Tuskar wie<br />
praktisch alle anderen Open Stack-Dienste<br />
auch: Einem API, das<br />
quasi als Schnittstelle<br />
zur Außenwelt dient,<br />
stehen verschiedene<br />
Processing-Engines<br />
zur Seite, darunter<br />
auch Open Stack Heat.<br />
Abbildung 1: Triple O rückt Rechnern sogar mit IPMI zu Leibe, um sie zum Reboot zu zwingen und PXE-Images aufzuspielen.<br />
Seine Benutzerauthentifizierung wickelt<br />
Tuskar selbstverständlich über die Open-<br />
Stack-Komponente Keystone ab.<br />
Dieses Tatsache wirft freilich das klassische<br />
Henne-Ei-Problem auf: Damit Tuskar<br />
Open Stack mit Hilfe des Baremetal-Treibers<br />
für Nova installieren kann,<br />
benötigt es Keystone, doch ist dieses ja<br />
selbst eine Open-Stack-Komponente.<br />
Ganz ohne händische Installation kann<br />
es insofern auch bei Triple O nicht gehen,<br />
obgleich die Entwickler im Augenblick<br />
einen gelinde gesagt sehr innovativen<br />
Weg wählen, um das Problem zu lösen:<br />
Sie empfehlen, eine lokale Cloud mittels<br />
Devstack [7] zu bootstrappen, um aus<br />
dieser heraus dann die für Triple O benötigten<br />
Komponenten zu installieren.<br />
Unschön ist das vor allem deshalb, weil<br />
die Devstack-Entwickler ausdrücklich<br />
vom Einsatz ihrer Software in produktiven<br />
Umgebungen abraten. Devstack ist<br />
vorrangig gedacht für Entwickler, die an<br />
Open Stack arbeiten und regelmäßig frische<br />
Umgebungen für Tests brauchen,<br />
also Instanzen, denen der dauerhafte<br />
Charakter der Unternehmens-IT nicht<br />
zukommt.<br />
Wer sich über die Devstack-Hürde traut,<br />
kann Triple O immerhin ausgiebig testen.<br />
Die Devstack-Cloud benötigt Triple O ja<br />
nur ganz kurz – der Admin sollte sie laut<br />
Entwickler-Vorstellung nur dazu nutzen,<br />
eine echte Open-Stack-Cloud aufs Blech<br />
zu bringen. Die bildet dann die Grundlage<br />
für alle weitere Arbeiten. Es schadet<br />
folglich sicher nicht, diese Initial-Cloud in<br />
eine virtuelle Maschine zu verbannen.<br />
Hitziges Helferlein<br />
Grundsätzlich benötigt Triple O sämtliche<br />
Dienste, die Open Stack im Moment<br />
bereit hält; von besonderer Bedeutung ist<br />
das Orchestration-Tool Heat. Bei ihnenbedient<br />
sich Triple O, um spezifischen<br />
Rechnern eine Rolle zuzuweisen. Erkennt<br />
Triple O auf Zuruf des Admins einen in<br />
Tuskar bereits angelegten Host, stößt es<br />
eine große Welle von Prozessen an, die<br />
auf diesem Host sowohl die Installation<br />
des Betriebssystems vornimmt als auch<br />
die Dienste installiert, die für Open Stack<br />
notwendig sind.<br />
Hierzu bedient sich Triple O wiederum<br />
einer Vielzahl Zusatzprogramme. Da<br />
sind einerseits »os‐collect‐config«, »os‐apply‐config«<br />
sowie »os‐refresh‐config«: Am<br />
Namen unschwer zu erkennen handelt<br />
es sich hier um Tools, die die Konfiguration<br />
einzelner Hosts einerseits aus den in<br />
Nova vorab hinterlegten Metadaten auslesen,<br />
auf den Zielsystemen anwenden<br />
und auch Sorge dafür tragen, dass diese<br />
aktuell bleiben.<br />
Hinzu kommt der »disk‐image‐builder«:<br />
Dieser fertigt auf Grundlage bestehender<br />
Systeme Golden-Master-Images an, die<br />
Abbildung 2: Triple O erweitert auch den »nova«-Befehl. »baremetal‐node‐list« zeigt alle ausgerollten Hardware-Nodes.
www.linux-magazin.de<br />
Triple O 02/2014<br />
Sysadmin<br />
79<br />
Abbildung 3: Viel zu tun – und viele Entwickler, die mit großem Aufwand daran arbeiten: Triple O ist derzeit eines der aktivsten Open-Stack-Projekte, und im System<br />
für Code-Review („Gerrit“) finden sich etliche Einträge für Triple O. Das liegt auch am Engagement von HP.<br />
Triple O nutzen kann, um PXE-basiert auf<br />
neuen Hosts automatisch ein Betriebssystem<br />
abzulegen (Abbildung 1).<br />
Images bauen mit dem<br />
Builder und Glance<br />
Der gesamte Vorgang funktioniert mit virtuellen<br />
Systemen nicht anders, stets kommen<br />
die benötigten Images aus Glance.<br />
Im Triple-O-Kontext unterscheidet sich<br />
lediglich die Art und Weise, wie diese<br />
erstellt werden, weil beim Anlegen von<br />
Images für echtes Blech andere Faktoren<br />
zutreffen als bei virtuellen Maschinen.<br />
Echte Server verlangen beispielsweise<br />
meist spezifische Hardwaretreiber (Abbildung<br />
2).<br />
Triple O pflegt eine eigene Sammlung von<br />
Heat-Templates, die auf der Grundlage<br />
der zuvor beschriebenen Komponenten<br />
die Installation neuer Hosts automatisieren.<br />
Der Lifecycle-Pfad ist damit klar:<br />
Ein Admin hängt einen neuen Host ins<br />
Rack, hinterlegt für diesen die vorgesehene<br />
Rolle in Tuskar und unter Umständen<br />
spezifische Konfigurationsparameter,<br />
schaltet das System ein und um den Rest<br />
kümmert sich Heat, das im Hintergrund<br />
ein Master-Image aus Glance über PXE<br />
installiert.<br />
Am Ende steht ein fertig installierter<br />
Open-Stack-Knoten, der selbst Teil einer<br />
Open-Stack-Cloud ist (der „Bare-Metal-<br />
Cloud“), jedoch ansonsten ein ganz normales<br />
Mitglied einer Open-Stack-Installation<br />
darstellt – mit allen Features und<br />
Möglichkeiten, die der Cloud-Manager<br />
ansonsten bietet.<br />
Pfiffiger Ansatz, aber noch<br />
ein weiter Weg<br />
Triple O unterscheidet sich von den anderen<br />
Deploymentsystemen für Open Stack<br />
maßgeblich dadurch, dass es selbst die<br />
Open-Stack-Funktionen nutzt, um sich<br />
auf die Hardware zu bringen. Andere<br />
Lösungen erfinden das Rad neu oder<br />
bauen um Open Stack mühsam eine Integration<br />
für eines der bestehenden Deploymentsysteme<br />
wie Puppet oder Chef.<br />
Verglichen damit wirkt der Triple-O-Ansatz<br />
pfiffig, denn er recyclet vorhandene<br />
Funktionen und adaptiert diese nur dort,<br />
wo es notwendig ist.<br />
Noch hat Triple O allerdings einen weiten<br />
Weg vor sich. Der Rewrite des Baremetal-<br />
Treibers für Nova, der am Ende Ironic<br />
heißen und ein eigenes Projekt sein soll,<br />
ist in vollem Gange, die Entwickler planen,<br />
diesen Prozess bis zur „Icehouse“-<br />
Release im April 2014 ein gutes Stück<br />
voran zu bringen. Zeit sollten sie aber<br />
auch investieren, Triple O selbst in ein<br />
schöneres Kleid als Devstack zu packen.<br />
Denn allein diese Tatsache verleiht dem<br />
Projekt derzeit einen gewissen Bastlercharme<br />
und wirkt auf Enterprise-Kunden<br />
abschreckend.<br />
Langfristig ist mit Triple O aber zu rechnen:<br />
HP investiert selbst viel Zeit und<br />
Entwicklerkapazität in das Projekt, und<br />
auch andere Entwickler begeistern sich<br />
offenbar für die Lösung. Wer einen Blick<br />
auf aktuelle Triple-O-Vorgänge werfen<br />
will, kann das übrigens durch den Triple-<br />
O-Incubator in Github tun (Abbildung 3,<br />
[8]). Dort finden sich stets die aktuellen<br />
Projekte, an denen die Triple O-Developer<br />
gerade arbeiten. (mfe) <br />
n<br />
Infos<br />
[1] Packstack: [https:// wiki. openstack. org/<br />
wiki/ Packstack]<br />
[2] Kickstack:<br />
[https:// github. com/ hastexo/ kickstack/]<br />
[3] Razor:<br />
[http:// github. com/ puppetlabs/ Razor]<br />
[4] Foreman: [http:// theforeman. org]<br />
[5] Crowbar:<br />
[https:// github. com/ crowbar/ crowbar]<br />
[6] Triple O:<br />
[https:// wiki. openstack. org/ wiki/ TripleO]<br />
[7] Devstack: [http:// www. devstack. org]<br />
[8] Triple-O-Incubator auf Github: [https://<br />
github. com/ openstack/ tripleo‐incubator]<br />
Der Autor<br />
Martin Gerhard Loschwitz<br />
arbeitet als Principal Consultant<br />
bei Hastexo.<br />
Er beschäftigt sich dort<br />
intensiv mit Open-Source-<br />
Hochverfügbarkeitslösungen<br />
und pflegt in seiner Freizeit den <strong>Linux</strong>-Cluster-Stack<br />
für Debian GNU/<strong>Linux</strong>.
Forum<br />
www.linux-magazin.de Winterrätsel 02 /2014<br />
80<br />
Wer weiß am besten Bescheid über Programmiersprachen?<br />
Winterrätsel<br />
Wenn die Tage kalt und kurz, die Nächte lang und langweilig sind, wird es Zeit für das Winterrätsel des <strong>Linux</strong>-<br />
<strong>Magazin</strong>s. In den 20 harten Nüssen verbergen sich diesmal Begriffe aus der wunderbaren Welt der Programmiersprachen<br />
und deren wechselhafter Geschichte. Nils Magnus<br />
Programmiersprachen sind für manche nur Buchstabensalat, und<br />
doch stecken in ihnen ganze Universen – mit Konstrukten, Idiomen<br />
und Historie. Nur wer diese Welt der Länge und Breite nach durchschritten<br />
hat, kennt die Antworten auf die folgenden Fragen.<br />
Das Lösungswort ergibt sich aus Anwendung der jeweils ersten<br />
Buchstaben der einzelnen Lösungswörter, eingesetzt in das im<br />
Kasten „So funktioniert's“ gezeigte Schema. Das Wort bezeichnet<br />
ein Paper, in dem ein maßgeblicher Compilerbauer eine bedauerliche<br />
Ergänzung zu Moores Gesetz beklagt.<br />
1<br />
Akronyme sind für Programmiersprachen durchaus beliebt, rekursive<br />
allemal. Welche Sprache erfand ein Mann mit dänischem<br />
Pass fürs World Wide Web?<br />
2Ein <br />
britischer Turing-Award-Gewinner entwickelte eine der<br />
ersten Sprachen mit polymorpher Typinferenz und typsicherer<br />
Ausnahmebehandlung. Sie gilt als Urahnin einer ganzen<br />
Reihe von Abkömmlingen. Wie heißt jener, der objektorientierte<br />
Ansätze einbrachte und damit mehrere Programmierwettbewerbe<br />
gewann?<br />
Der Legende nach motivierte den ursprünglichen Autor zur<br />
Namenswahl seiner Skriptsprache ein Gleichnis aus dem<br />
3 Matthäus-Evangelium. Darin sucht ein Händler nach Preziosen.<br />
Was durchschreitet im selben Bibeltext das Wappentier der<br />
Sprache?<br />
4<br />
Das Einrücken von Code als syntaktisches Element ist bei Programmierern<br />
umstritten. Python-Fans beispielsweise preisen<br />
diese Form der Blockmarkierung, andere bleiben skeptisch.<br />
Die Entwickler welcher Sprache mussten zumindest in deren Urform<br />
manche Codefragmente auf bestimmte Spalten einrücken?<br />
5 entworfene die größte Verbreitung gefunden hat. Später war<br />
Ein eidgenössischer Compiler-Erfinder schuf eine ganze<br />
Kaskade an Sprachen, wovon die erste und von ihm allein<br />
ihm eine Sprache nicht genug, und er entwarf mit Kollegen an einer<br />
europäischen Hochschule noch ein dazu passendes Betriebssystem<br />
und einen zugehörigen Rechner. Wie lautet das germanische Äquivalent<br />
der Programmierumgebung?<br />
6<br />
Ein Entwickler benannte seine Sprache eines Tages nach<br />
einer Geschmacksrichtung eines Löschwasser-Sudes um. Ursprünglich<br />
taufte der in seinem Heimatland mit einem Orden<br />
ausgezeichnete Entwickler die Sprache aber nach einem soliden<br />
Laubbaum. Welchem?<br />
7<br />
Viele Programmiersprachen haben eine wechselhafte Entwicklung<br />
hinter sich. Die hier gesuchte Sprache zeigt sich besonders<br />
vielgesichtig, denn sie startete als objektorientierte<br />
C-Variante, verlebte ihre Kindheit in einem vernetzten Rollenspiel,<br />
um schließlich als Implementierungssprache eines mittlerweile fast<br />
vergessenen Webservers zu reüssieren.<br />
8<br />
Die meisten Compiler oder Interpreter zerlegen den Quellcode<br />
in Token – und akzeptieren an vielen Stellen rund um diese<br />
eine besondere Zeichenklasse, die zwar keine Bedeutung hat,<br />
jedoch das Code-Studium vereinfacht. Die hier gesuchte Sprache<br />
bildet eine Ausnahme, weil sie diese Symbole zum einzigen Prinzip<br />
erhebt und praktisch unsichtbar bleibt. Wie heißt die Sprache?<br />
9<br />
Die gesuchte Sprache trat als Verbindungsglied zwischen<br />
Hoch- und Maschinensprache auf, inspirierte den heutigen<br />
Quasistandard für die Systemprogrammierung und legte eine<br />
Grundlage für Objektcode.<br />
© Vichaya Kiatying-Angsulee, 123RF.com
Meist lassen sich die Fragen durch ein einzelnes Wort beantworten, sonst zählt das erste Wort,<br />
bei Namen der Nachname. Jeweils der erste Buchstabe ist auf [http://linux-magazin.de/winter] oder in<br />
das unten abgedruckte Diagramm einzutragen. Beide berechnen die Lösung durch die angegebene Addition. Dabei gilt:<br />
A µ 0, B µ 1, … Ist eine Summe größer als das Äquivalent des Z, gibt es einen Überlauf zum A. Beispiel: X + D = B.<br />
So funktioniert’s<br />
+<br />
L<br />
=<br />
+<br />
+<br />
B<br />
=<br />
+<br />
+<br />
J<br />
=<br />
+<br />
+<br />
O<br />
=<br />
+<br />
+<br />
W<br />
=<br />
+<br />
+<br />
R<br />
=<br />
+<br />
+<br />
U<br />
=<br />
+<br />
+<br />
H<br />
=<br />
+<br />
+<br />
S<br />
=<br />
+<br />
+<br />
P<br />
=<br />
+<br />
+<br />
O<br />
=<br />
+<br />
+<br />
B<br />
=<br />
+<br />
+<br />
T<br />
=<br />
+<br />
+<br />
F<br />
=<br />
+<br />
+<br />
K<br />
=<br />
+<br />
+<br />
D<br />
=<br />
+<br />
+<br />
L<br />
=<br />
+<br />
+<br />
P<br />
=<br />
+<br />
+<br />
D<br />
=<br />
+<br />
+<br />
N<br />
=<br />
Winterrätsel 02/2014<br />
Forum<br />
er sehr früh das Konzept der höheren Programmiersprache<br />
einführte, benötigte der Entwurf eines Hardware-Entwicklers<br />
geschlagene 29 Jahre bis zur ersten<br />
10Obwohl<br />
Implementierung. Welche Sprache hatte ihr Schöpfer ursprünglich<br />
ins Auge gefasst, um seine Rechner zu programmieren?<br />
immer stellen krude Syntax oder besonders abstrakte<br />
Sprachkonstrukte die größten Hürden auf. Ein exotischer<br />
11Nicht<br />
Sprachentwurf erwartete ursprünglich entweder einen Fernschreiber<br />
mit einer Hardware-Backspace-Implementierung oder<br />
eine Latex-Klasse, um allein den Code anzuzeigen. Welcher Turing-<br />
Award-Gewinner entwickelte sie?<br />
sein Sprachentwurf Klasse(n) haben würde, wollte<br />
der in Skandinavien geborener Entwickler eigentlich in<br />
12Dass<br />
ihrem Namen verankern. Wie hieß der Mitarbeiter des<br />
Erfinders, der für den tatsächlichen, schnöde auf die Vorgängerin<br />
verweisenden Namen verantwortlich zeichnet?<br />
ein populäres, spektakulärerweise nicht in Sonatenhauptsatz-Form<br />
verfasstes und nächtliche Lichteffekte<br />
13Ob<br />
thematisierendes Klavierstück eines deutschen Komponisten<br />
Inspiration für den Namen einer Programmierumgebung war, ist<br />
nicht überliefert. Die Tonart seines ersten Satzes weist aber auf die<br />
Sprache hin. Wie heißt deren Open-Source-Implementierung?<br />
Steuersprache des Unix-Urvaters war einem Briten<br />
zu oll. Er entwickelte daraufhin seine eigene Fassung,<br />
14Eine<br />
die syntaktisch auf jedem aktuellen <strong>Linux</strong>-System große<br />
Bedeutung besitzt. Welcher Entwickler hat seit über 20 Jahren den<br />
Posten inne, sich um ihren interaktionsfreudigen Wiedergänger zu<br />
kümmern?<br />
Pionierin wirkte maßgeblich an der Entwicklung<br />
einer frühen Hochsprache mit, die zu beherrschen heute<br />
15Welche<br />
fast einer Beschäftigungsgarantie gleichkommt? Die Mathematikerin<br />
war bei US-Präsidenten und -Showmastern zu Gast.<br />
der Wappengestaltung mal abgesehen spielen Tiere<br />
nur in wenigen Programmiersprachen eine nennenswerte<br />
16Von<br />
Rolle. Bei welcher Sprache, gerne auch in der Bildung<br />
eingesetzt, bleibt ein possierliches Reptil dagegen unabdingbar?<br />
verbreitesten Datentypen bei Programmiersprachen<br />
sind Repräsentationen für Zahlen und Zeichenfolgen. Welche<br />
Sprache macht hier eine Ausnahme, da sie erstmals<br />
17Die<br />
Vorformen von regulären Ausdrücken in den Mittelpunkt rückte?<br />
alles, was nicht belegbar ist, keine Wahrheit darstellt,<br />
nennen Logiker die Closed-World-Assumption. Welche<br />
18Dass<br />
Sprache baut darauf auf? Der Entwickler beschreibt in ihr<br />
zwar das Problem, nicht aber den Lösungsweg.<br />
angehende Mathematikerin neigte in ihrer Jugend<br />
zu Schüchternheit. Nachdem sie der Überlieferung nach<br />
19Eine<br />
in einem renommierten Forschungszentrum angeheuert<br />
hatte, benannte sie die dort mit ihrem Team entwickelte Sprache<br />
selbstironisch nach unverbindlichen Partygesprächen. Von welcher<br />
Klasse erbt jede Instanz innerhalb dieser Sprache?<br />
das Who-is-Who von Compilerbauexperten liest sich<br />
die Liste der Entwickler eine frühen Sprache, die schon<br />
20Wie<br />
in den 1960er Jahren das strukturierte Programmieren<br />
ermöglichte. Da Entwickler sie gerade in ihren I/O-Operationen uneinheitlich<br />
implementierten, kam die gesuchte Sprachfamilie kaum<br />
zum Einsatz, beeinflusste aber ihre Nachfolger konzeptionell.<br />
TV-Recorder zu gewinnen<br />
Rätselfreunde sollten den Lösungssatz und<br />
die Antworten der Fragen bis zum 15. Februar<br />
an [winter@linux-magazin.de] schicken. Als<br />
Preis lockt eine Videorecorder- und TV-<br />
Soft ware von DVB Link für den Raspberry<br />
Pi inklusive kompatiblem USB-Empfänger.<br />
Alle 100%ig richtigen Antworten nehmen an<br />
der Verlosung teil. Ist keine Einsendung korrekt,<br />
fällt das Los zwischen<br />
allen mit den meisten richtigen<br />
Antworten. Das <strong>Linux</strong>-<strong>Magazin</strong><br />
veröffentlicht<br />
den Namen des Gewinners.<br />
Der Rechtsweg ist ausgeschlossen.<br />
(jk/mhu) n<br />
www.linux-magazin.de<br />
81
Forum<br />
www.linux-magazin.de Recht 02/2014<br />
82<br />
Bring Your Own Device<br />
Knackpunkt Privatgerät<br />
Beim „Bring your own device“, also beim Einsatz privater mobiler Geräte am Arbeitsplatz, lauern rechtliche<br />
Fallstricke – für das Unternehmen ebenso wie für Angestellte. Christian Solmecke<br />
© nito500, 123RF.com<br />
Eine zunehmende Zahl von Unternehmen<br />
erlaubt es ihren Mitarbeitern, private<br />
Mobilgeräte wie etwa Smartphones,<br />
Tablets oder Laptops auch während ihrer<br />
Arbeitszeit im Betrieb zu nutzen. Die<br />
Gründe für dieses als „Bring your own<br />
device“ (BYOD) bekannt gewordene Phänomen<br />
sind vielfältig. Einige Unternehmer<br />
nennen Kostengründe, andere wollen<br />
es ihren Mitarbeitern ermöglichen,<br />
private und berufliche Aufgaben leichter<br />
zu verbinden, da sich dies positiv auf die<br />
Arbeitsleistung auswirke.<br />
Doch der Einsatz privater Geräte im Unternehmen<br />
kommt in Deutschland mit<br />
ein paar rechtlichen Risiken im Schlepptau.<br />
Insbesondere aus der Perspektive<br />
von Datenschutz und Arbeitsrecht gibt<br />
es einiges, was Unternehmer beachten<br />
sollten, bevor sie ihren Mitarbeitern den<br />
Zugriff auf das interne Netz mit unternehmensfremden<br />
Geräten gestatten. Umgekehrt<br />
sollten sich auch die Mitarbeiter<br />
bereits im Vorfeld mit der rechtlichen<br />
Situation beschäftigen, sonst kommen<br />
unter Umständen ungeahnte Probleme<br />
auf sie zu.<br />
Geschützte Daten<br />
Beim Einsatz ihrer privat mitgebrachten<br />
elektronischen Geräte speichern und<br />
verarbeiten die Mitarbeiter automatisch<br />
auch sensible Daten des Unternehmens.<br />
Dazu zählen etwa Betriebsgeheimnisse<br />
und personenbezogene Daten von Mitarbeitern<br />
oder Kunden. Hier stellt sich die<br />
Frage, inwieweit Mitarbeiter beim Einsatz<br />
privater Geräte für einen Datenmissbrauch<br />
oder Datenverlust haften.<br />
Die rechtliche Einordnung des Problems<br />
gilt unter Juristen als umstritten. Im Ergebnis<br />
sind sich jedoch alle einig: Der<br />
Arbeitgeber hat dafür zu sorgen, dass<br />
die Mitarbeiter die nötigen datenschutzrechtlichen<br />
Vorkehrungen einhalten. Dies<br />
ergibt sich zumindest aus § 9 des Bundesdatenschutzgesetzes<br />
(BDSG), der besagt:<br />
„Öffentliche und nicht-öffentliche Stellen,<br />
die selbst oder im Auftrag personenbezogene<br />
Daten erheben, verarbeiten oder<br />
nutzen, haben die technischen und organisatorischen<br />
Maßnahmen zu treffen,<br />
die erforderlich sind, um die Ausführung<br />
der Vorschriften dieses Gesetzes […] zu<br />
gewährleisten.“<br />
Unternehmer müssen die oft sensiblen<br />
Daten vor dem Zugriff von außen schützen.<br />
Und sie müssen dafür sorgen, dass<br />
beim Schreiben von E-Mails und beim<br />
Speichern von Dokumenten geeignete<br />
Verschlüsselungsmethoden zum Einsatz<br />
kommen. Zudem sollten sie private und<br />
betriebliche Daten trennen.<br />
Vor allem Letzteres entpuppt sich als<br />
wichtiger Punkt: Vermischen sich private<br />
E-Mails mit geschäftlicher Korrespondenz,<br />
ist es dem Arbeitgeber verboten,<br />
diese E-Mails ohne Erlaubnis des Arbeitnehmers<br />
zu lesen. Tut er es doch, verstößt<br />
er gegen das Fernmeldegeheimnis.<br />
Anders herum sollten weder die Kinder,<br />
noch die Lebenspartner der Mitarbeiter<br />
auf die geschäftlichen Daten zugreifen<br />
können.<br />
Es ist Sache des Unternehmers, ein entsprechendes<br />
Verbot gegenüber den Beschäftigten<br />
auszusprechen und sie zum<br />
Einhalten der Verbote und Sicherheitsmaßnahmen<br />
anzuhalten. Möglicherweise<br />
ist zusätzlich eine Schulung im Umgang<br />
mit gängigen Sicherheitsmaßnahmen nötig.<br />
Zu den üblichen Maßnahmen gehört<br />
es etwa, immer einen aktuellen Virenschutz<br />
bereitzuhalten und keine unzertifizierte<br />
Software zu installieren.<br />
Um den Datenschutz durchzusetzen,<br />
muss das Unternehmen auch die Möglichkeit<br />
haben, die Daten zu kontrollieren. Zu<br />
diesem Zweck sind Zugriffe auf die privaten<br />
Geräte der Mitarbeiter unvermeidbar.<br />
Der Unternehmer muss die Beschäftigten
allerdings über die Art und die Häufigkeit<br />
der Zugriffe in Kenntnis setzen – und<br />
diese müssen dem Eingriff zustimmen.<br />
Zudem darf die Kontrolle nicht in einem<br />
unverhältnismäßigen Maße erfolgen. Die<br />
Akteure müssen die Maßnahmen mit<br />
dem Persönlichkeitsrecht des Mitarbeiters<br />
abwägen und zudem das Grundrecht<br />
auf Gewährleistung der Vertraulichkeit<br />
und Integrität informationstechnischer<br />
Systeme achten.<br />
Nicht zuletzt ist der Arbeitnehmer nach<br />
einer Kündigung dazu verpflichtet, alle<br />
unternehmensbezogenen Daten von seinen<br />
mobilen Geräten zu löschen.<br />
Wer haftet wofür?<br />
© kurhan, 123RF.com<br />
Auch die arbeitsrechtlichen Probleme, die<br />
sich im Zusammenhang mit BYOD ergeben,<br />
sind nicht zu unterschätzen. Bereits<br />
im Vorfeld sollten sich die Mitarbeiter<br />
bewusst machen, welche Konsequenzen<br />
für ihr Arbeitsverhältnis entstehen, wenn<br />
sie fahrlässig die angeordneten Sicherheitsbestimmungen<br />
umgehen.<br />
Bei einem Verlust oder einer Beschädigung<br />
des Geräts haftet in der Regel das<br />
Unternehmen. Genauso verhält es sich<br />
grundsätzlich auch bei Datenklau oder<br />
ähnlichen Vorfällen. Anders sieht die<br />
Sache aus, wenn der Arbeitnehmer die<br />
vereinbarten Sicherheitsvorkehrungen<br />
nicht getroffen und so den Datenverlust<br />
begünstigt hat.<br />
In diesem Fall kommen die Grundsätze<br />
der gestuften Arbeitnehmerhaftung zur<br />
Geltung. Das heißt, der Mitarbeiter haftet<br />
nur bei leichter Fahrlässigkeit nicht für<br />
sein Handeln. Liegen hingegen vorsätzliches<br />
Handeln oder<br />
grobe Fahrlässigkeit<br />
vor, haftet der Arbeitnehmer<br />
allein.<br />
Daher sollten Arbeitgeber<br />
und Mitarbeiter<br />
stets vertraglich miteinander<br />
regeln, in welchem<br />
Umfang Letztere<br />
das Gerät in der Firma<br />
nutzen dürfen und unter<br />
welchen Bedingungen.<br />
Dabei wäre auch<br />
zu klären, inwieweit<br />
die private Nutzung<br />
während der Arbeitszeit<br />
erfolgen darf.<br />
Der Arbeitgeber darf<br />
Mitarbeiter natürlich<br />
nicht vertraglich dazu verpflichten, private<br />
Geräte während der Arbeitszeit zu<br />
nutzen. Umgekehrt kann sich aber das<br />
Recht, ein privates Gerät im betrieblichen<br />
Umfeld einzusetzen, aus betrieblicher<br />
Übung, also aus der Gewohnheit heraus,<br />
ergeben. Das ist gefährlich, denn meist<br />
handelt es sich um einen schleichenden<br />
Prozess, den die IT-Abteilung des Unternehmens<br />
nicht rechtzeitig erfasst, sodass<br />
keine Zeit bleibt, ausreichende Sicherheitsvorkehrungen<br />
für Datensicherheit<br />
und -schutz zu treffen.<br />
Ist im Unternehmen ein Betriebsrat tätig,<br />
muss dieser zudem vor der Einführung<br />
von BYOD-Regeln seine Zustimmung geben.<br />
Unternehmen sollten darüber hinaus<br />
nicht vergessen, dass sich durch den<br />
Einsatz privater Geräte im Arbeitsalltag<br />
die üblichen Arbeitszeiten der Mitarbeiter<br />
verschieben könnten. Auch dafür<br />
Abbildung 1: Bevor Firmen private Geräte ins eigene Netzwerk lassen, sollten sie sich rechtlich absichern.<br />
Abbildung 2: Verhält er sich grob fahrlässig, kann ein Mitarbeiter vollständig<br />
für den Verlust von Daten haften, etwa bei einem Datendiebstahl.<br />
sollte das Unternehmen Regelungen treffen<br />
und gegebenenfalls den Betriebsrat<br />
anhören.<br />
Klärungsbedarf besteht häufig auch in<br />
der Frage, inwieweit sich die Unternehmen<br />
an den Anschaffungs- und Wartungskosten<br />
für die privaten Geräte beteiligen<br />
müssen. Gesetzlich ist geregelt,<br />
dass der Arbeitgeber seinen Mitarbeitern<br />
das notwendige Arbeitsmaterial zur Verfügung<br />
stellen muss.<br />
Fazit<br />
Ob BYOD im Unternehmen positive Effekte<br />
zeitigt, muss jeder Unternehmer<br />
nach Abwägung der Vor- und Nachteile<br />
für sich selbst entscheiden. Fest steht,<br />
dass er rechtliche und technische Vorkehrungen<br />
treffen sollte, bevor er den<br />
Mitarbeitern die Nutzung privater Geräte<br />
erlaubt. So wird die BYOD-Strategie nicht<br />
zum Fiasko. (kki)<br />
n<br />
Der Autor<br />
Die Kölner Kanzlei Wilde<br />
Beuger Solmecke hat sich<br />
auf die Beratung der IT- und<br />
Onlinebranche spezialisiert.<br />
Rechtsanwalt Christian Solmecke<br />
(40) hat in den vergangenen<br />
Jahren den Bereich IT-und E-Commerce<br />
stetig ausgebaut und betreut Medienschaffende<br />
und Web-2.0-Plattformen. Daneben ist er Geschäftsführer<br />
des Deutschen Instituts für Kommunikation<br />
und Recht im Internet (DIKRI) an der<br />
Cologne Business School [http://www.dikri.de].<br />
© Hugo Felix, 123RF.com<br />
Recht 02/2014<br />
Forum<br />
www.linux-magazin.de<br />
83
Forum<br />
www.linux-magazin.de Bücher 02/2014<br />
84<br />
Ein Wireshark-Buch und ein funktionales Kochbuch<br />
Tux liest<br />
Die Bücherseite hat sich ein praktisch ausgerichtetes Buch zur Netzwerkanalyse mit Wireshark geangelt.<br />
Als Beifang gibt es ein exzentrisches Koch- und Programmierbuch aus dem Hause O’Reilly. Mathias Huber<br />
Das Open-Source-Programm Wireshark<br />
ist der Tausendsassa der Netzwerkanalyse.<br />
Wer aber zum ersten Mal davor<br />
sitzt, fühlt sich vermutlich von den vielen<br />
Ansichten und Funktionen überfordert.<br />
Wireshark-Praxis<br />
Abhilfe schafft das auf Deutsch erhältliche<br />
Buch „Wireshark 101“ von Laura<br />
Chappell. Die etablierte Dozentin erarbeitet<br />
mit dem Leser die Bedienung des<br />
Tools in rund 50 praktischen Übungen.<br />
Dabei helfen reichlich mit Screen shots<br />
versehene Anleitungen im Buch und<br />
vorgefertigte Netzwerk-Captures, die es<br />
unter [http:// wiresharkbook. com] kostenlos<br />
zum Herunterladen gibt.<br />
Es handelt sich um eine Wireshark-Einführung,<br />
nicht um einen Netzwerkkurs.<br />
Das Wissen über Switches, Router und<br />
die Schichten des OSI-Modells muss der<br />
Leser bereits mitbringen. Die Lektionen<br />
reichen vom Aufzeichnen an geeigneter<br />
Stelle im Netzwerk über Filterausdrücke<br />
mit Feldbezeichnungen, Vergleichsoperatoren<br />
und regulären Ausdrücken bis zur<br />
Suche nach Latenzen.<br />
Die Wireshark-Oberfläche ist nicht für<br />
Deutsch lokalisiert, die Menüpunkte<br />
sind im Buch daher mit den englischen<br />
Original-Beschriftungen bezeichnet. Als<br />
Lern- und Verständnishilfe folgt in der<br />
deutschen Buchausgabe allerdings in<br />
Info<br />
Laura Chappell:<br />
Wireshark 101<br />
Mitp, 2013<br />
350 Seiten<br />
45 Euro<br />
ISBN 978-3-8266-9713-5<br />
Klammern die deutsche Übersetzung. An<br />
anderer Stelle hat der Verlag eher gepatzt:<br />
Das Capture-Tool »dumpcap« taucht viel<br />
zu oft als »dumbcap« auf.<br />
Das Buch hilft dem Leser dabei, alltägliche<br />
Netzwerkprobleme mit Wireshark zu<br />
analysieren. Dazu dienen Einfärbungsregeln<br />
für die Schlüsselwerte bestimmter<br />
Protokolle, das Erzeugen von Statistiken<br />
und Diagrammen oder die Recherche<br />
nach den geschwätzigsten Rechnern. In<br />
die Nähe der forensischen Netzwerkanalyse<br />
wagt sich die Rekonstruktion von<br />
übertragenen Dateien aus HTTP- und<br />
FTP-Traffic. Zum Abschluss gibt es ein<br />
eigenes Kapitel zu Wiresharks Kommandozeilentools<br />
Tshark, Capinfos, Editcap<br />
und Mergecap.<br />
Für das nicht besonders dicke Taschenbuch<br />
ist der Preis von 45 Euro eigentlich<br />
zu hoch angesetzt. Der Leser erhält als<br />
Gegenwert aber eine Menge lehrreicher<br />
Trainingsstunden.<br />
Lambda-Curry<br />
Das „Curry-Buch“ von der deutschen<br />
O’Reilly-Tochter ist ein ungewöhnlicher<br />
Band, geradezu ein Buch-Experiment. Es<br />
setzt auf eine Analogie zwischen Programmieren<br />
und Kochen. Das Konzept<br />
kreist um den Namen Curry, den eine<br />
Gattung indischer Speisen mit einem<br />
amerikanischen Logiker teilt, von dem<br />
einige Grundlagen der funktionalen Programmierung<br />
stammen.<br />
Dieser Titel macht dem Leser also das<br />
funktionale Paradigma schmackhaft,<br />
beginnend mit Funktionen höherer Ordnung<br />
und Closures, bald darauf mit der<br />
nach Curry benannten teilweisen Funktionsanwendung.<br />
Als Programmiersprache<br />
für die Beispiele verwenden die Autoren<br />
Javascript, sie implementieren damit<br />
sogar den Lambda-Kalkül. Auch Eventbasierte<br />
Programme und Continuations<br />
setzen sie um. Daneben erfährt der Leser<br />
auch Wissenswertes über andere Sprachen<br />
wie C++, Haskell und Python.<br />
Das Curry-Buch behandelt das gesamte<br />
funktionale Grundwissen, das Trio Map,<br />
Filter und Reduce ebenso wie Komposition,<br />
Rekursion, Memoization und Pattern<br />
Matching. Was aber die immer wieder<br />
gesuchten Parallelen zur indischen Küche<br />
dem Leser bringen sollen, bleibt schleierhaft<br />
– außer er kocht ebenso gerne<br />
wie er programmiert. Eine Aussage wie<br />
„ein bisschen ist Rekursion das Chicken<br />
Tikka Masala der funktionalen Programmierung“<br />
bringt kaum Gewinn. Dabei<br />
wollen die Autoren nur sagen, dass auch<br />
bekannte Features neue und interessante<br />
Seiten zeigen können.<br />
Der fachliche Inhalt des Bands ist unbestritten,<br />
auch wenn der Schwierigkeitsgrad<br />
der Textabschnitte stark schwankt.<br />
Am ehesten eignet es sich daher für Programmierer,<br />
die schon mit dem Funktionalen<br />
in Berührung gekommen sind<br />
und mehr wissen wollen. Die Darstellungsform<br />
mit den indischen Rezepten<br />
trägt dazu allerdings mehr Verwirrung<br />
als Nutzen bei – die ursprünglich originelle<br />
Idee wirkt rasch überstrapaziert.<br />
Es bleibt dabei: Programmier- und Kochbücher<br />
sollte man zwischen separaten<br />
Buchdeckeln beziehen.<br />
n<br />
Info<br />
Jens Ohlig, Stefanie<br />
Schirmer, Hannes<br />
Mehnert:<br />
Das Curry-Buch<br />
O’Reilly, 2013<br />
210 Seiten<br />
30 Euro (E-Book 24 Euro)<br />
ISBN 978-3-86899-369-1
Hardware<br />
www.linux-magazin.de Picam 02/2014<br />
86<br />
Der Raspberry Pi als Webcam mit Bewegungssensor<br />
Big Pi is watching you<br />
Für den Scheckkarten-PC gibt es eine passende Kamera, die der Besitzer direkt an einen eigenen Connector<br />
anschließt und die Bilddaten mit sehr wenig Overhead liefert. Dieser Test zeigt, wo es hakt und wie ein paar<br />
<strong>Linux</strong>-Befehle und -Pipes so manches Problem lösen. Konstantin Agouros<br />
der herunter – fertig ist der Einbau. Die<br />
meisten WLAN-Dongles erkennt der Pi<br />
automatisch, im Test handelt es sich um<br />
einen USB-Stick von Edimax.<br />
Einlochen<br />
© zadvornova, 123RF.com<br />
Heimserver, Multimedia, Steueranlage<br />
für die Home-Automation oder als Sensorzentrale<br />
fürs Schiff – der Raspberry<br />
Pi macht in vielen Szenarien eine gute<br />
Figur, das zeigte zuletzt der Schwerpunkt<br />
im vorigen <strong>Linux</strong>-<strong>Magazin</strong>. Auch die kostengünstige<br />
Video-Überwachung liegt im<br />
Trend, doch sind die meisten erhältlichen<br />
Kameras keine gute Empfehlung: Ein Kollege<br />
des Autors hat vor wenigen Wochen<br />
in einem Blogpost beschrieben, welche<br />
haarsträubenden Sicherheitslücken die<br />
typischerweise <strong>Linux</strong>-basierten Web- und<br />
Netcams mitbringen [1].<br />
Nach solcher Lektüre sieht sich der <strong>Linux</strong>-Admin<br />
lieber nach Alternativen um<br />
und landet zwangsläufig beim Raspberry<br />
Pi mit dem Addon Picam [2].<br />
Die Hardware<br />
Das benötigte Set kostet nicht die Welt,<br />
Abbildung 1 zeigt die im Folgenden verwendeten<br />
Komponenten: Wer die Kamera<br />
auch an Orten nutzen will, wo kein Ethernet-Kabel<br />
liegt, braucht ein Wifi-Dongle,<br />
dazu ein Gehäuse. Das Beispielpaket bei<br />
RS Electronics [2] kostete 85 Euro, eine<br />
Speicherkarte ließe sich sicherlich auch<br />
anderweitig günstiger besorgen. Doch die<br />
mit mehreren Recovery-Images bespielte<br />
SD-Karte erspart für den geringen Mehrpreis<br />
durchaus Arbeit.<br />
Die Webseite des Raspberry-Projekts hat<br />
der Kamera eine extra Seite mit Anleitungen<br />
gewidmet [3]. Dort dokumentiert<br />
auch ein Video die Schritte zur Installation<br />
der Kamera. Neben dem Ethernet-<br />
Port (Abbildung 2) befindet sich der<br />
Konnektor für die Kamera.<br />
Wer an dieser Stelle noch nie etwas angeschlossen<br />
hat, den überrascht der Halter,<br />
der im Port steckt. Den muss der stolze<br />
Besitzer von Pi und Picam zunächst<br />
anheben, damit er das Flachbandkabel<br />
einstecken kann. Dessen blaue Seite<br />
muss zum Ethernet-Connector zeigen,<br />
anschließend drückt er den Halter wie-<br />
Das Flachbandkabel verbindet die Kamera<br />
mit dem Pi-Board, ist ungefähr 15<br />
Zentimeter lang und biegsam, sollte aber<br />
nicht geknickt werden. Die Platine des<br />
Kameramoduls selbst misst knapp 2 Quadratzentimeter,<br />
der optische Sensor 0,5<br />
Quadratzentimeter und ist etwa 3 Millimeter<br />
hoch.<br />
Im Prinzip ist es möglich, ein Loch in den<br />
Deckel der meisten erhältlichen Gehäuse<br />
zu schneiden, durch den der Kamerasensor<br />
freie Sicht hat. Dann kann der<br />
Bastler die Platine von oben her festschrauben,<br />
muss aber viel Sorgfalt walten<br />
lassen, vor allem beim Falten des Kabels.<br />
Er sollte sich bereits vorher überlegen,<br />
wo die Kamera zum Einsatz kommen<br />
soll, oder gleich ein zur Picam passendes<br />
Gehäuse bestellen.<br />
Bevor er die Kamera verwenden kann,<br />
muss der Besitzer sie aktivieren. Dafür<br />
benutzt er als Administrator auf dem Pi<br />
am besten »raspi‐config«. Läuft der Mini-<br />
PC mit der neuesten Software-Release, ist<br />
der fünfte Menupunkt »Enable Camera«<br />
(Abbildung 3) zuständig. Ein Reboot<br />
macht die Änderung wirksam.<br />
Raspberry Pi HD Video Camera<br />
Auflösung Foto: 5 Megapixel (2592 x 1944)<br />
Auflösung Video: 1080 p mit bis zu 30 Fps,<br />
bei 720 p 60 Fps, bei VGA sogar 90 Fps<br />
Objektiv: Blende 2,9, Brennweite 3,6 mm<br />
(entspricht 36 mm Weitwinkel einer DSLR)<br />
Preis: ca. 30 Euro inkl. MwSt
In der im Beispiel verwendeten Raspian-<br />
Distribution befinden sich zwei Binaries,<br />
für die Interaktion mit der Kamera: »raspistill«<br />
und »raspivid«. Wie die Namen<br />
schon vermuten lassen, dient »raspistill«<br />
dem Erzeugen von Bildern und »raspivid«<br />
zeichnet Videodaten auf.<br />
Das erste Testfoto schießt »raspistill ‐o<br />
test.jpg«. Das Programm beherrscht viele<br />
Optionen. Mit »‐w« und »‐h« beispielsweise<br />
lassen sich Breite und Höhe angeben,<br />
die Option »‐e Encoding« erlaubt<br />
es, PNG, Gif oder Bitmap-Dateien statt<br />
der Standard-Jpeg-Bilder zu erzeugen.<br />
Auch kann der Benutzer Einfluss auf die<br />
Belichtungswerte des Bildes nehmen.<br />
Erwähnenswert ist auch die Option »‐tl<br />
Sekunden«, die für Zeitraffer-Aufnahmen<br />
(englisch: Timelapse) alle paar Sekunden<br />
ein Bild erstellt.<br />
Das Kommando bietet auch eine <strong>Vorschau</strong><br />
für die Konsole des Pi: Dabei schreiben<br />
Raspivid und Raspistill direkt in den Videospeicher,<br />
sodass eine X11-Umgebung<br />
nicht notwendig ist. Abbildung 4 zeigt<br />
einen Screenshot.<br />
Das Kommando »raspivid« teilt viele Optionen<br />
mit »raspistill«, beispielsweise die<br />
Auflösung der Aufnahme. Allerdings gibt<br />
hier die Option »‐t« an, wie viele Millisekunden<br />
die Aufnahme lang sein soll,<br />
mit 0 weist der Admin den Pi an, endlos<br />
aufzunehmen. Der Aufruf »raspivid ‐t<br />
10000 ‐o test.h264« erzeugt folglich eine<br />
zehnsekündige Video-Aufnahme. Auch<br />
hier gibt es eine Reihe von Parametern,<br />
die die Aufnahmequalität beeinflussen,<br />
sogar Video-Effekte sind möglich.<br />
Das Ausgabeformat ist<br />
in der Videoversion<br />
allerdings mit einem<br />
H.264-Strom bereits<br />
festgeschrieben. Mit<br />
dem Dateityp-Identifizierer<br />
»file« lässt sich<br />
die Ausgabedatei als<br />
»JVT NAL sequence,<br />
H.264 video @ L 40«<br />
klassifizieren. Gerade<br />
damit kommt der<br />
Videoformat-Tausendsasa<br />
Ffmpeg prima<br />
zurecht, auch Ffplay<br />
spielt es problemlos<br />
ab, Mplayer nur mit etwas Nachhilfe,<br />
Xine versagt, aber VLC funktioniert.<br />
Im Netzwerk<br />
Diese Bilder im Netz bereitzustellen ist<br />
relativ einfach. So kann ein Skript in<br />
regelmäßigen Abständen Raspistill aufrufen<br />
und dabei eindeutige Dateinamen<br />
vergeben. Diese landen im Verzeichnis<br />
eines Webservers, wobei das Skript<br />
noch die hilfreiche Option »‐l Linkname«<br />
kennt. Listing 1 zeigt, wie der Admin<br />
sicherstellt, dass in der Datei »latest.png«<br />
immer das neueste Bild hinterlegt ist.<br />
Dabei ist allerdings Vorsicht geboten: Die<br />
Option »‐l« legt überraschenderweise einen<br />
Hard-, keinen Softlink an.<br />
Auch echte Videostreams sind möglich,<br />
hier bieten sich zwei Vorgehensweisen<br />
an: Einerseits könnte der Pi die Capture-<br />
Daten in eine Datei schreiben oder sie<br />
Abbildung 2: Neben dem Ethernet-Connector sitzt der Anschluss für die<br />
Picam, er ist etwa 15 Millimeter breit und von einem Deckel geschützt.<br />
andererseits gleich live übers Netzwerk<br />
übertragen. Auf der Picam-Homepage findet<br />
sich auch gleich ein Ansatz zur Übertragung<br />
mit Netcat und fürs Abspielen<br />
mit Mplayer. Das Ganze ist simpel und<br />
nutzt klassische <strong>Linux</strong>-Tools: Auf dem<br />
empfangenden Rechner, der das Video<br />
darstellen soll, startet der Anwender:<br />
nc ‐l ‐p 12345 | mplayer ‐fps 31 ‐cache U<br />
1024 ‐<br />
Netcat nimmt so auf Port 12345 Verbindungen<br />
entgegen und reicht die Daten<br />
an Mplayer durch, der sie mit diesen<br />
Parametern brav abspielt. Auf dem Pi<br />
mit Kamera startet der Anwender dann<br />
das Kommando:<br />
raspivid ‐t 0 ‐o ‐ |nc Zielrechner 12345<br />
Fertig ist die Live-Video-Übertragung!<br />
Dabei entsteht ein Datenstrom von rund<br />
20 MBit/s bei Full-HD-Videos. Das Bild<br />
ist zwar flüssig, kommt aber mit leichter<br />
Verzögerung. Bemerkenswert ist, dass<br />
laut Top der Raspivid-Prozess gerade mal<br />
8 Prozent der Raspberry-CPU braucht,<br />
der Netcat-Prozess dagegen, der die Daten<br />
weiterreicht, knapp 50 Prozent.<br />
Wer als Empfänger ebenfalls einen Pi<br />
nutzen will, folgt der Empfehlung der<br />
Picam 02/2014<br />
Hardware<br />
www.linux-magazin.de<br />
87<br />
Listing 1: Raspistill-Schleife<br />
01 #! /bin/bash<br />
02 <br />
03 cd /var/www/htdocs<br />
04 while true<br />
05 do<br />
06 raspistill ‐o pic‐`date +"%d.%m.%Y‐%H:%M:%S"`.jpg<br />
‐l latest.jpg<br />
Abbildung 1: Die Einzelteile des Test-Setups: Ein Pi Model B, die Picam, die notwendige SD-Card sowie ein<br />
Wifi-Dongle. An Gehäusen herrscht kein Mangel, auch spezielle Picam-Gehäuse mit Guckloch gibt es zuhauf.<br />
07 sleep 60<br />
08 done
Hardware<br />
www.linux-magazin.de Picam 02/2014<br />
88<br />
Abbildung 3: »Enable Camera« aktiviert die Treiber des Kameramoduls.<br />
Homepage und spielt das Video mit dem<br />
Kommando »/opt/vc/src/hello_pi/hello_<br />
video/hello_video.bin buffer« ab. In der<br />
getesteten Hardwarekonfiguration mit<br />
dem Edimax-WLAN-Dongle funktionierte<br />
das Streaming in voller Auflösung auch<br />
über WLAN mit 802.11n. Doch war auf<br />
dem empfangenden Rechner noch eine<br />
Umkodierung mittels Ffmpeg nötig (einfach<br />
innerhalb der Nc-Empfangs-Pipe),<br />
da dort nur VLC installiert war und der<br />
Desktop-Client nicht mit dem gestreamten<br />
Daten zurechtkam.<br />
Wer jetzt ruckelnde Bilder wegen CPUoder<br />
Bandbreitenproblemen registriert,<br />
sollte versuchen, die Video-Auflösung<br />
oder die Framerate im Aufruf von Raspivid<br />
zu reduzieren.<br />
Motion Detection<br />
Die hohe Kunst der Raumüberwachung<br />
ist die vollautomatische Bewegungserkennung<br />
(Motion Detection) samt Aktion<br />
bei unerwarteter Bewegung (Motion) im<br />
überwachten Objekt. Mit den bisher vorgestellten<br />
Methoden, also der pauschalen<br />
Vollaufzeichnung von Videos oder Fotos,<br />
entstehen Unmengen uninteressanter<br />
Bilder oder Stunden aussagelosen Videomaterials.<br />
Als Kriterium für „interessant“<br />
oder überhaupt für Bewegungen inner-<br />
halb der Bilder ziehen<br />
Überwachungsspezialisten<br />
deutliche Änderungen<br />
in der beobachteten<br />
Szene heran,<br />
die in stark divergierenden<br />
Bildern resultieren.<br />
Bilder oder<br />
Videosequenzen, die<br />
sich nicht oder nur<br />
marginal vom vorherigen<br />
Bild unterscheiden,<br />
soll die Software<br />
sofort löschen.<br />
Bei klassischen Webcams hat der Autor<br />
mit der Software Motion [4] gute Erfahrungen<br />
gesammelt. Sie basiert auf dem<br />
Standard-<strong>Linux</strong>-Videostack Video4linux<br />
und den zugehörigen Devicedateien. Im<br />
Test unterstützte die Picam Motion leider<br />
nicht. Ein wenig Recherche fördert aber<br />
ein Python-Skript [5] zu Tage, das die<br />
Arbeit ebenso erfolgreich erledigt.<br />
Die Software nimmt zunächst ein Bild<br />
auf, verpasst den Dateien einen Zeitstempel<br />
im Dateinamen und speichert sie.<br />
Dann vergleicht das Skript in einem niedrig<br />
auflösenden Stream immer zwei aufeinanderfolgende<br />
Bilder. Überschreiten<br />
die Veränderungen einen Schwellenwert,<br />
dann speichert der Pi ein hochauflösendes<br />
Bild. Die Abbildungen 5 und 6 zeigen<br />
ein einfaches Playmobil-Testmuseum<br />
im Normalzustand und nachdem ungebetener<br />
Besuch eingedrungen ist. Wie die<br />
Bilder zeigen, hängt die Bildqualität stark<br />
vom vorhandenen Licht ab.<br />
Noch fehlt eine Lösung, um einen Live-<br />
Videostream mehreren Clients verfügbar<br />
zu machen, am besten im Webbrowser.<br />
Da helfen entweder das altertümliche,<br />
aber verbreitete Flash oder modernes<br />
HTML 5 mit Video-Unterstützung. Noch<br />
einfacher ist jedoch die Variante mit Motion<br />
Jpeg (Mjpeg). So ein Video ist eine<br />
einfache Serie von Jpeg-Dateien. Auf die<br />
Anfrage eines Clients schickt der Server<br />
eine Serie von Bildern zurück, die der<br />
Browser als Film anzeigt.<br />
Mjpeg-Streamer<br />
Im Setup für Pi und Picam findet sich unter<br />
[6] eine Anleitung, wie eine Kombination<br />
aus Mjpeg-Streamer und der Picam<br />
funktioniert. Der Code für den Mjpeg-<br />
Streamer liegt nicht im Standard-Raspian-<br />
Repository, daher muss ihn der Anwender<br />
aus den Quellen bauen. Dabei reicht es,<br />
die Komponenten für eine Datenquelle<br />
und einen HTTP-Output zu übersetzen.<br />
Anschließend startet er »raspistill« mit<br />
der Timelapse-Option und speichert das<br />
so erzeugte Bild in einem Ordner, den<br />
Mjpeg-Streamer überwacht. Ein möglicher<br />
Aufruf von Raspistill wäre:<br />
raspistill ‐‐nopreview ‐w 640 ‐h 480 ‐q 5 U<br />
‐o /tmp/stream/pic.jpg ‐tl 100 ‐t 9999999 U<br />
‐th 0:0:0 &<br />
Dabei ließe sich die Auflösung durch die<br />
Parameter »‐w« und »‐h« ändern. Den<br />
Streamer startet der Anwender (nach der<br />
Installation gemäß Anleitung auf [7])<br />
folgendermaßen:<br />
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer U<br />
‐i "input_file.so ‐f /tmp/stream ‐n pic.jpg" U<br />
‐o "output_http.so ‐w /usr/local/www"<br />
Der Autor<br />
Konstantin Agouros arbeitet<br />
bei der N.runs Professionals<br />
GmbH als Berater für Netzwerksicherheit.<br />
Dabei liegt<br />
sein Schwerpunkt im Bereich<br />
der Mobilfunknetze.<br />
Sein Buch „DNS/DHCP“ ist bei Open Source Press<br />
erschienen.<br />
Abbildung 4: Eine X11-Umgebung auf dem Raspi ist nicht zwingend notwendig, weil die Tools auch <strong>Vorschau</strong>en<br />
an der Konsole anzeigen können.
Abbildung 5: Das Test-Museum birgt zwei überragend<br />
wertvolle Kunstschätze …<br />
Abbildung 6: … und der alles überwachende Raspberry<br />
Pi hat einen bösen Einbrecher erkannt.<br />
Abbildung 7 zeigt einen Screenshot der<br />
Webseite, die den Livestream präsentiert.<br />
Wer die Zeile<br />
<br />
Gehäuse für die Außenmontage, aber<br />
wer sich nicht mit den Lösungen von der<br />
Stange zufriedengeben will, kann – oder<br />
muss – seine Handwerkskünste unter Beweis<br />
stellen. (mfe)<br />
n<br />
in sein HTML einbaut, kann ihn in einer<br />
eigenen Webseite anzeigen.<br />
Fazit<br />
Die Möglichkeiten, eine Netzwerkkamera<br />
zur Raumüberwachung zu bauen, sind<br />
vielfältig. Im Gegensatz zu den Kameras<br />
mit Embedded <strong>Linux</strong>, die unter [1] untersucht<br />
wurden, lässt sich ein gehärtetes<br />
System aber besser selbst aufbauen, da<br />
der Admin bei einem vollwertigen <strong>Linux</strong><br />
selbst IPtables-Regeln definieren, den<br />
Datenstrom durch ein VPN leiten und<br />
viele andere Vorkehrungen treffen kann.<br />
Preislich gibt es günstigere Alternativen,<br />
die aber bei Weitem nicht die Flexibilität<br />
oder Sicherheit bieten wie die Lösung mit<br />
dem Raspberry Pi.<br />
Die geschilderten Versuche stellen beileibe<br />
nicht das Ende der Fahnenstange<br />
dar: Für Nachtaufnahmen<br />
ist mittlerweile<br />
sogar eine Infrarotversion<br />
der Picam lieferbar.<br />
Auch ließe sich<br />
der Stream auf große<br />
Streamingplattformen<br />
leiten, die dann die<br />
Daten in verschiedenen<br />
Formaten und<br />
Auflösungen anbieten<br />
könnten.<br />
Am kniffligsten für den<br />
Bastler ist in der Tat<br />
noch die Verpackung<br />
der ganzen Kombination.<br />
Zwar finden sich<br />
auch professionelle<br />
Infos<br />
[1] Sicherheit moderner Netzkameras:<br />
[http:// blog. nruns. com/ blog/ 2013/ 10/ 28/<br />
Surveillance‐Cameras‐Security‐Sergio/]<br />
[2] RS Electronics:<br />
[http:// www. de.rs-online.com]<br />
[3] Picam:<br />
[http:// www. raspberrypi. org/ camera]<br />
[4] Motion: [http:// www. lavrsen. dk/ foswiki/<br />
bin/ view/ Motion/ WebHome]<br />
[5] Codebeispiel zur Bewegungserkennung:<br />
[http:// www. raspberrypi. org/ phpBB3/<br />
viewtopic. php? t=45235]<br />
[6] Beispiel einer Webcam-Anwendung:<br />
[http:// www. raspberrypi. org/ phpBB3/<br />
viewtopic. php? t=56209]<br />
[7] Installation eines Mjpeg-Servers:<br />
[http:// blog. miguelgrinberg. com/ post/<br />
how‐to‐build ‐and‐run‐mjpg ‐streamer‐on<br />
‐the‐raspberry‐pi]<br />
Abbildung 7: Einbruch erkannt: Die Webseite des Mjpeg-Streamers.
Know-how<br />
www.linux-magazin.de Kern-Technik 02/2014<br />
90<br />
Kernel- und Treiberprogrammierung mit dem <strong>Linux</strong>-Kernel – Folge 72<br />
Kern-Technik<br />
In PCs und Embedded-Geräten sind Sensoren und Aktoren oft mit dem I 2 C-Bus angebunden. <strong>Linux</strong> unterstützt<br />
das mit einem eigenen Subsystem, das sich auf dem Raspberry Pi ausprobieren lässt. Jürgen Quade, Eva-Katharina Kunst<br />
© psdesign1, Fotolia<br />
72<br />
Ob Bewegung, Position, Beschleunigung,<br />
Temperatur oder Druck: Mit immer mehr<br />
Sensoren erfassen Smartphones, Tablets,<br />
PCs und eingebettete Systeme ihre Umwelt<br />
und den eigenen Zustand. Um den<br />
damit verbundenen Hardware-Aufwand<br />
überschaubar zu halten, setzen die Hersteller<br />
auf einfache Bussysteme wie I²C,<br />
die über zwei Anschlussleitungen serialisiert<br />
Daten übertragen (siehe Kasten<br />
„Inter-Integrated Circuit“).<br />
Die I²C-Geräte, auch Clients oder Slaves<br />
genannt, deserialisieren den Datenstrom,<br />
dekodieren ihn und schicken abhängig<br />
vom übertragenen Kommando serialisiert<br />
eine Antwort zurück. Kommandos, Parameter<br />
und Antworten sind für jeden Gerätetyp<br />
unterschiedlich. Der <strong>Linux</strong>-Kernel<br />
bedient sie jeweils mit einem eigenen<br />
I²C-Client-Treiber.<br />
Neben diesen I²C-Client-Treibern gibt es<br />
die I²C-Adapter-Treiber. Diese sind auf<br />
dem Steuerrechner<br />
für das Serialisieren<br />
und Deserialisieren<br />
der Daten sowie den<br />
Versand und Empfang<br />
über die beiden<br />
Leitungen zuständig.<br />
Da I²C recht weit verbreitet<br />
ist, unterstützt<br />
die Hardware vieler<br />
Prozessoren diesen<br />
Vorgang.<br />
Fehlt diese Unterstützung,<br />
kann man aber<br />
auch zwei GPIO-<br />
Pins verwenden und<br />
die seriellen Signale<br />
selbst generieren. Der<br />
Fachmann spricht<br />
von Bit-Banging [1].<br />
Dieses Bit-Banging lagert<br />
der <strong>Linux</strong>-Kernel<br />
nochmals in einen dritten Treibertyp aus,<br />
nämlich den I²C-Algorithmus-Treiber. Der<br />
Algorithmus-Treiber und der I²C-Adapter-<br />
Treiber bilden damit das I²C-Core-System,<br />
über das die unterschiedlichen Client-<br />
Treiber die Daten transferieren (siehe<br />
Abbildung 1).<br />
Wie von anderen Kernel-Subsystemen<br />
gewohnt findet man die Hardware-Hierarchie<br />
(Adapter, Algorithmus, Geräte)<br />
im Sys-Dateisystem des <strong>Linux</strong>-Kernels<br />
I 2 C: Inter-Integrated Circuit<br />
I 2 C, ausgesprochen „I Quadrat C“, ist ein serieller<br />
Datenbus. Da er Hardware-technisch nur<br />
über eine Datenleitung (SDA) und eine Taktleitung<br />
(SCL) realisiert ist und das Übertragungsprotokoll<br />
einfacher Natur ist, lassen sich damit<br />
preiswert unterschiedlichste Geräte ansprechen,<br />
die typischerweise keine hohen Anforderungen<br />
an die Übertragungsbandbreite stellen.<br />
Es handelt sich um einen Master-/Slave-Bus,<br />
wieder. Unter »/sys/class/i2c‐adapter/«<br />
sind die bereitstehenden I²C-Adapter<br />
aufgelistet. Das können auf modernen<br />
Systemen durchaus zehn Stück sein. Der<br />
Minicomputer Raspberry Pi zeigt nach<br />
dem Laden des I²C-Adapter-Treibers allerdings<br />
lediglich die beiden Adapter »i2c‐0«<br />
und »i2c‐1« an:<br />
cd /sys/class<br />
modprobe i2c‐bcm2708<br />
cd i2c‐adapter/<br />
ls # => i2c‐0 i2c‐1<br />
Ein Algorithmus-Treiber ist im Fall des<br />
Himbeer-Kleincomputers nicht notwendig,<br />
da der verbaute Broadcom-Chip die<br />
beiden angezeigten Adapter in Hardware<br />
realisiert.<br />
Zwei Leitungen<br />
Der Chip des ersten Adapters (des »i2c‐0«)<br />
ist übrigens mit zwei Leitungen auf dem<br />
Stecker P5 verbunden. Auch für die Raspberry-Pi-Kamera<br />
kommt er zur Verwendung.<br />
Der zweite Adapter (»i2c‐1«) ist<br />
über die Doppelstiftleiste P1 mit den Pins<br />
3 (SDA) und 5 (SCL) besser zu erreichen<br />
und ermöglicht das Anschließen<br />
von I²C-Peripherie, zum Beispiel Temperatursensoren,<br />
DA- oder AD-Wandler,<br />
LCD-Displays, Uhrenbausteinen oder<br />
Port expandern (siehe Abbildung 2).<br />
der bei einer 7-Bit-Adresse 112 Geräte (Slaves)<br />
ansprechen kann. Eine Variante des Busses<br />
verwendet 10 Bit für bis zu 1136 Geräte.<br />
Eine Abwandlung von I 2 C ist der SMBus, der<br />
System Management Bus. Er ist Hardwaretechnisch<br />
identisch mit I 2 C, definiert darauf<br />
aber ein anderes Übertragungsprotokoll. <strong>Linux</strong><br />
stellt für diese Variante eine Reihe zusätzlicher<br />
Zugriffsfunktionen bereit.
Die Autoren haben an ihren Raspberry<br />
Pi per I²C einen Portexpander vom Typ<br />
PCA 9555 der Firma NXP angeschlossen.<br />
Der Chip bietet 16 Portleitungen, die sich<br />
frei konfigurierbar zur Eingabe oder zur<br />
Ausgabe programmieren lassen (siehe<br />
Kasten „Portexpander PCA 9555“).<br />
Der Expander hat am I²C-Bus die hexadezimale<br />
Adresse 0x20.<br />
Unabhängig von der angeschlossenen<br />
Peripherie bietet <strong>Linux</strong> mit dem Kernelmodul<br />
»i2c‐dev« einen generischen I²C-<br />
Client-Treiber an. Der Kasten „Zugriff<br />
über den generischen I 2 C-Client-Treiber“<br />
erläutert, wie man damit Kommandos<br />
an die Peripherie sendet und Antworten<br />
entgegennimmt.<br />
Sklaventreiber<br />
Effizienter und für den Applikationsentwickler<br />
angenehmer ist aber ein eigenständiger<br />
I²C-Client-Treiber, er kann dem<br />
Anwender die Konfiguration und das Bitgeschiebe<br />
abnehmen.<br />
Er greift dann einfach<br />
Client<br />
nach dem »open()« per<br />
»read()« und »write()« Adapter<br />
auf die Hardware zu.<br />
Der I²C-spezifische Algorithmus<br />
Teil eines eigenständigen<br />
Slave-Treibers ist<br />
durchaus überschaubar<br />
[2]. Komplizierter<br />
gestaltet sich dagegen<br />
die Integration in einen<br />
normalen Geräte‐<br />
Hardware<br />
treiber.<br />
Kern des spezifischen<br />
Teils ist ein I²C-Treiberobjekt (Listing<br />
1, Zeilen 83 bis 90). Es speichert unter<br />
anderem einen Namen, eine Liste von<br />
Gerätekennungen und die Adressen einer<br />
Probe- und einer Remove-Funktion. Der<br />
Programmierer übergibt es durch Aufruf<br />
von »i2c_add_driver()« dem I²C-Core –<br />
meist beim Laden des Treibers innerhalb<br />
von »mod_init()« (Tabelle 1). Beim Entla‐<br />
»pca9555«<br />
»i2c_bcm2708« Adapter<br />
I 2 C-Core<br />
Algorithmus<br />
SDA<br />
SCL<br />
Clients (Slaves)<br />
Treiber<br />
»#1A«<br />
Temperatur<br />
I 2 C<br />
»#20«<br />
Portexpander<br />
Raspberry Pi<br />
»#69«<br />
LCD<br />
Abbildung 1: I 2 C benötigt für den Hardwarezugriff verschiedene Treiber.<br />
den des Treibers (Funktion »mod_exit()«)<br />
meldet dieser zuvor die Peripherie durch<br />
Aufruf von »i2c_del_driver()« beim I²C-<br />
Core wieder ab.<br />
Ist im System ein Gerät mit der im I²C-<br />
Treiberobjekt angegebenen Kennung bekannt,<br />
ruft das Core die Probe-Funktion<br />
auf. Entfernt jemand das Gerät später,<br />
tritt die Remove-Funktion in Aktion. Im<br />
Kern-Technik 02/2014<br />
Know-how<br />
www.linux-magazin.de<br />
91
4<br />
Know-how<br />
www.linux-magazin.de Kern-Technik 02/2014<br />
92<br />
1<br />
3V3 5V<br />
SDA<br />
2 5V<br />
3 GND<br />
TXD<br />
GND RXD<br />
17 18<br />
27 GND<br />
22 23<br />
3V3 24<br />
MOSI GND<br />
MISO 25<br />
SCLK CS0<br />
GND CS1<br />
DSI (DISPLAY)<br />
Power<br />
SCL<br />
Raspberry Pi<br />
http ://w ww.raspberrypi.org<br />
Rev2<br />
Video-Out<br />
Rah men der Probe-Funktion überprüft<br />
der Client-Treiber – soweit das Hardwaretechnisch<br />
möglich ist –, ob das mit Namen<br />
und Busadresse übergebene Gerät<br />
(»struct i2c_client«) tatsächlich existiert.<br />
Abhängig vom Gerät könnte man dazu<br />
zum Beispiel ein Statuswort auslesen.<br />
Senden und empfangen<br />
Die Funktion »i2c_master_send()« dient<br />
dazu, Kommandos zum Gerät zu senden,<br />
»i2c_master_rcv()« dazu, eine Antwort<br />
einzulesen. Beide übernehmen im ersten<br />
Parameter die Datenstruktur vom Typ<br />
»i2c_client«, die den Slave spezifiziert, im<br />
zweiten Parameter eine Speicher adresse,<br />
ab der die zu schreibenden Daten zu<br />
finden sind respektive ab der die Funktion<br />
»i2c_master_rcv« die empfangenen<br />
Daten ablegt.<br />
Der dritte Parameter gibt die Anzahl der<br />
zu schreibenden oder zu empfangenden<br />
Bytes an. Die Probe-Funktion im Client-<br />
Treiber gibt übrigens 0 zurück, falls sie<br />
das angefragte Gerät bedient, sonst einen<br />
Wert ungleich 0. Die Remove-Funktion ist<br />
in den meisten Fällen noch einfacher auf‐<br />
GPIO<br />
HDMI<br />
Audio<br />
CSI (CAMERA)<br />
ETHERNET<br />
gebaut: Sie returniert<br />
direkt 0.<br />
Knackpunkt bei der<br />
Aktivierung der Probe-<br />
Funktion durch den<br />
Kernel ist die Gerätekennung<br />
(»struct i2c_<br />
device_id«). Anders<br />
als USB- oder PCI-Geräte<br />
haben I²C-Geräte<br />
per se keine (zentral<br />
verteilte) Identifikationsnummern<br />
(IDs).<br />
<strong>Linux</strong> verwendet alternativ<br />
einen Namen<br />
und die Slave-Adresse<br />
am I²C-Bus. Diese fehlende Standardisierung<br />
erschwert das automatische Erkennen<br />
von I²C-Geräten, sodass man sie<br />
dem System mehr oder minder von Hand<br />
bekannt machen muss.<br />
OK<br />
PWR<br />
FDX<br />
LNK<br />
10M<br />
Abbildung 2: SDA und SCL des I 2 C-Busses werden mit Pin 3 und Pin 5 des<br />
Rasp berry Pi verbunden.<br />
USB 2x<br />
Quelle: raspberrypi.org<br />
Bekannt machen<br />
Zur Bekanntgabe gibt es drei Methoden<br />
[3]. Ein im System fest integriertes Gerät<br />
kann der Treiber mit Hilfe der Struktur<br />
»i2c_board_info« und des zugehörigen<br />
Makros »I2C_BOARD_INFO« bekannt gegeben.<br />
Zur Übergabe an den Kernel dient<br />
die Funktion »i2c_register_board_info()«,<br />
die neben der I²C-Adapternummer die<br />
Adresse und die Länge der »struct i2c_<br />
board_info« übergeben bekommt.<br />
Sind im Rechner mehrere I²C-Adapter<br />
vorhanden und steht im Vorhinein nicht<br />
fest, welcher Adapter eine spezifische Peripherie<br />
anspricht, meldet der Entwickler<br />
die über »struct i2c_board_info« und das<br />
Makro »I2C_BOARD_INFO« spezifizierten<br />
Slaves mit der Funktion »i2c_new_<br />
driver()« an. Ist zusätzlich die Geräteadresse<br />
nicht genau bekannt, verwendet<br />
man »i2c_new_probed_device()«. Diese<br />
Funktion bekommt zusätzlich eine Liste<br />
mit möglichen I²C-Adressen übergeben.<br />
Die daraufhin vom I²C-Core aufgerufene<br />
Probe-Funktion im Treiber kann versuchen<br />
an den I²C-Adressen ein unterstütztes<br />
Gerät zu identifizieren.<br />
Als dritte Methode gibt der Admin I²C-<br />
Slaves über das Sys-Filesystem bekannt.<br />
Im Verzeichnis »/sys/class/i2c‐adapter/«<br />
legt das I²C-Core für jeden vorhandenen<br />
Adapter ein Unterverzeichnis an, in diesem<br />
Unterverzeichnis unter anderem die<br />
Dateien »new_device« und »delete_device«.<br />
Das folgende Kommando macht<br />
das Gerät bekannt:<br />
echo Devicename I 2 C‐Addresse > neues_Device<br />
Zum Abmelden reicht es aus, die eindeutige<br />
I²C-Adresse auf die Datei »delete_device«<br />
zu schreiben (»echo 0x20>delete_<br />
device«). Für jedes auf diese Art angemeldete<br />
Gerät legt das Sys-Dateisystem einen<br />
Ordner an. Dieser hat einen Namen, der<br />
sich aus der Adapternummer und der I²C-<br />
Adresse zusammensetzt, beispielsweise<br />
»1‐0020« (siehe Abbildung 3).<br />
Klassengesellschaft<br />
Technisch vorgesehen, aber nicht empfohlen<br />
ist eine vierte Methode, bei der<br />
der Treiber die komplette Suche nach<br />
den Slaves übernimmt. In diesem Fall<br />
muss das I²C-Treiber-Objekt die Methode<br />
»detect« unterstützen. Da das Erkennen<br />
von Geräten durch das plumpe Senden<br />
von Daten an alle angeschlossenen Geräte<br />
Gefahren in sich birgt, ist es nur<br />
für bestimmte Geräteklassen (Hardware-<br />
Monitoring, Grafikkarten, Speicherbausteine)<br />
erlaubt. Dazu gibt der Adapter an,<br />
welche Klassen er unterstützt, und der<br />
Gerätetreiber verrät, für welche Klasse<br />
er zuständig ist.<br />
Tabelle 1: Liste der I 2 C-Funktionen<br />
Funktionsname Aufgabe<br />
i2c_add_driver Anmelden des Treibers beim I 2 C-Core<br />
i2c_del_driver Abmelden des Treibers beim I 2 C-Core<br />
i2c_master_send Senden von Daten über den I 2 C-Bus<br />
i2c_master_rcv Datenempfang über den I 2 C-Bus<br />
i2c_register_board_info Gibt dem I 2 C-Core für den angegebenen Adapter ein neues I 2 C-Gerät<br />
bekannt<br />
i2c_get_adapter Gibt auf Basis der Adapternummer die Kernel-Repräsentation (Datenstruktur)<br />
zurück<br />
i2c_new_device Gibt dem I 2 C-Core ein neues I 2 C-Gerät bekannt<br />
i2c_new_probed_device Fordert den I 2 C-Core auf, den Treiber nach I 2 C-Geräten suchen zu lassen<br />
Tabelle 2: Register des Portexpanders<br />
PCA 9555<br />
Adresse Bedeutung<br />
0 Input 0<br />
1 Input 1<br />
2 Output 0<br />
3 Output 1<br />
4 Polarity Inversion 0<br />
5 Polarity Inversion 1<br />
6 Configuration 0<br />
7 Configuration 1
Die bisher vorgestellten I²C-Komponenten<br />
muss man noch in einem Gerätetreiber<br />
kombinieren, der einfachen Zugriff auf<br />
das Gerät per »read()« und »write()« ermöglicht.<br />
Basis kann ein Standardtreiber<br />
sein, wie ihn etwa die Kern-Technik-Folge<br />
70 [4] verwendet hat.<br />
Der in Listing 1 gezeigte Treiber für den<br />
Raspberry Pi klinkt sich beim Laden<br />
(»mod_init()«, Zeile 110) in das I²C-Core<br />
ein und gibt den Slave an Adapter 1 mit<br />
der Adresse 0x20 bekannt (Zeile 121). Das<br />
ruft die Funktion »pca9555_probe()« auf,<br />
die die gewünschte Konfiguration vornimmt:<br />
Port 0 des PCA 9555 als Ausgang,<br />
Kern-Technik 02/2014<br />
Know-how<br />
Listing 1: Treiber für den Portexpander »pca9555.c«<br />
001 #include <br />
002 #include <br />
003 #include <br />
004 #include <br />
005 #include <br />
006 <br />
007 static dev_t pca9555_dev_number;<br />
008 static struct cdev *driver_object;<br />
009 static struct class *pca9555_class;<br />
010 static struct device *pca9555_dev;<br />
011 static struct i2c_adapter *adapter;<br />
012 static struct i2c_client *slave;<br />
013 <br />
014 static struct i2c_device_id<br />
pca9555_idtable[] = {<br />
015 { "pca9555", 0 }, { }<br />
016 };<br />
017 MODULE_DEVICE_TABLE(i2c, pca9555_idtable);<br />
018 <br />
019 static struct i2c_board_info info_20 = {<br />
020 I2C_BOARD_INFO("pca9555", 0x20),<br />
021 };<br />
022 <br />
023 static ssize_t driver_write( struct file<br />
*instanz,<br />
024 const char __user *user, size_t count,<br />
loff_t *offset )<br />
025 {<br />
026 unsigned long not_copied, to_copy;<br />
027 char value=0, buf[2];<br />
028 <br />
029 to_copy = min( count, sizeof(value) );<br />
030 not_copied=copy_from_user(&value, user,<br />
to_copy);<br />
031 to_copy ‐= not_copied;<br />
032 <br />
033 if( to_copy > 0 ) {<br />
034 buf[0] = 0x02; // output port 0<br />
035 buf[1] = value;<br />
036 i2c_master_send( slave, buf, 2 );<br />
037 }<br />
038 return to_copy;<br />
039 }<br />
040 static ssize_t driver_read( struct file<br />
*instanz,<br />
041 char __user *user, size_t count, loff_t<br />
*offset )<br />
042 {<br />
043 unsigned long not_copied, to_copy;<br />
044 char value, command;<br />
045 <br />
046 command = 0x01; // input port 1<br />
047 i2c_master_send( slave, &command, 1 );<br />
048 i2c_master_recv( slave, &value, 1 );<br />
049 <br />
050 to_copy = min( count, sizeof(value) );<br />
051 not_copied=copy_to_user( user, &value,<br />
to_copy);<br />
052 return to_copy ‐ not_copied;<br />
053 }<br />
054 <br />
055 static int pca9555_probe( struct i2c_client<br />
*client,<br />
056 const struct i2c_device_id *id )<br />
057 {<br />
058 char buf[2];<br />
059 <br />
060 printk("pca9555_probe: %p %p \"%s\"‐ ",<br />
client,id,id‐>name);<br />
061 printk("slaveaddr: %d, name: %s\n",<br />
client‐>addr,client‐>name);<br />
062 if (client‐>addr != 0x20 ) {<br />
063 printk("i2c_probe: not found\n");<br />
064 return ‐1;<br />
065 }<br />
066 // Konfiguration Port 0 als Output<br />
067 buf[0] = 0x06; // direction port 0<br />
068 buf[1] = 0x00; // output<br />
069 i2c_master_send( client, buf, 2 );<br />
070 return 0;<br />
071 }<br />
072 <br />
073 static int pca9555_remove( struct i2c_client<br />
*client )<br />
074 {<br />
075 return 0;<br />
076 }<br />
077 static struct file_operations fops = {<br />
078 .owner= THIS_MODULE,<br />
079 .write= driver_write,<br />
080 .read = driver_read,<br />
081 };<br />
082 <br />
083 static struct i2c_driver pca9555_driver = {<br />
084 .driver = {<br />
085 .name = "pca9555",<br />
086 },<br />
087 .id_table = pca9555_idtable,<br />
088 .probe = pca9555_probe,<br />
089 .remove = pca9555_remove,<br />
090 };<br />
091 <br />
092 static int __init mod_init( void )<br />
093 {<br />
094 if( alloc_chrdev_region(<br />
&pca9555_dev_number,0,1,"pca9555")owner = THIS_MODULE;<br />
100 driver_object‐>ops = &fops;<br />
101 if( cdev_add(driver_object,<br />
pca9555_dev_number,1) )<br />
102 goto free_cdev;<br />
103 pca9555_class = class_create(<br />
THIS_MODULE, "pca9555" );<br />
104 if( IS_ERR( pca9555_class ) ) {<br />
105 pr_err( "pca9555: no udev<br />
support\n");<br />
106 goto free_cdev;<br />
107 }<br />
108 pca9555_dev = device_create(<br />
pca9555_class, NULL,<br />
109 pca9555_dev_number, NULL, "%s",<br />
"pca9555" );<br />
110 dev_info(pca9555_dev, "mod_init\n");<br />
111 <br />
112 if (i2c_add_driver(&pca9555_driver)) {<br />
113 pr_err("i2c_add_driver failed\n");<br />
114 goto destroy_dev_class;<br />
115 }<br />
116 adapter = i2c_get_adapter(1); // Adapter<br />
sind durchnummeriert<br />
117 if (adapter==NULL) {<br />
118 pr_err("i2c_get_adapter failed\n");<br />
119 goto del_i2c_driver;<br />
120 }<br />
121 slave = i2c_new_device( adapter,<br />
&info_20 );<br />
122 if (slave==NULL) {<br />
123 pr_err("i2c_new_device failed\n");<br />
124 goto del_i2c_driver;<br />
125 }<br />
126 return 0;<br />
127 del_i2c_driver:<br />
128 i2c_del_driver(&pca9555_driver);<br />
129 destroy_dev_class:<br />
130 device_destroy( pca9555_class,<br />
pca9555_dev_number );<br />
131 class_destroy( pca9555_class );<br />
132 free_cdev:<br />
133 kobject_put( &driver_object‐>kobj );<br />
134 free_device_number:<br />
135 unregister_chrdev_region(<br />
pca9555_dev_number, 1 );<br />
136 return ‐EIO;<br />
137 }<br />
138 <br />
139 static void __exit mod_exit( void )<br />
140 {<br />
141 dev_info(pca9555_dev, "mod_exit");<br />
142 device_destroy( pca9555_class,<br />
pca9555_dev_number );<br />
143 class_destroy( pca9555_class );<br />
144 cdev_del( driver_object );<br />
145 unregister_chrdev_region(<br />
pca9555_dev_number, 1 );<br />
146 i2c_unregister_device( slave );<br />
147 i2c_del_driver(&pca9555_driver);<br />
148 return;<br />
149 }<br />
150 module_init( mod_init );<br />
151 module_exit( mod_exit );<br />
152 MODULE_LICENSE("GPL");
Know-how<br />
www.linux-magazin.de Kern-Technik 02/2014<br />
94<br />
Abbildung 3: Im Sys-Dateiystems lassen sich I 2 C-Geräte verwalten.<br />
Abbildung 4: Bei geladenem Treiber lassen sich Daten einfach per Echo ausgegeben.<br />
Port 1 als Eingang. Die Zugriffsfunktion<br />
»driver_write()« stellt ein I²C-Paket zusammen,<br />
das aus dem Kommando »0x02«<br />
(Ausgabe auf Port 0) und dem von der<br />
Applikation übergebenen Wert besteht<br />
(Zeile 34).<br />
Die Funktion »i2c_master_send()« schickt<br />
es auf den Weg, »driver_read()« zeigt,<br />
dass zum Lesen auf I²C-Ebene erst ein<br />
Schreibzugriff erfolgen muss (Zeile 47).<br />
Den vom I²C-Bus gelesenen Wert kopiert<br />
»copy_to_user()« in den Speicherbereich<br />
der Applikation. Wer den Treiber auf dem<br />
Raspberry Pi ausprobieren möchte, darf<br />
nicht vergessen zuerst den I²C-Adapter-<br />
Treiber mit dem Kommando »modprobe<br />
i2c_bcm2708« zu laden. Wie man den<br />
Treiber (cross oder nativ) kompiliert, ist<br />
unter [4] und [5] beschrieben.<br />
Der Treiber stellt das Gerät »/dev/<br />
pca9555« zur Verfügung, auf das der<br />
Programmierer mit »open()«, »close()«,<br />
»read()« und »write()« zugreift. Er kann<br />
aber auch einfach per »echo« einen Wert<br />
ausgeben (Abbildung 4). Der in Listing<br />
1 vorgestellte Treiber für den PCA 9555 ist<br />
sehr rudimentär und kann den parallelen<br />
Zugriff auf angeschlossene Geräte noch<br />
nicht verhindern. Auch ist die Festlegung<br />
von Ein- und Ausgabeleitungen fest einkodiert.<br />
Kurzum: Er bietet noch reichlich<br />
Gelegenheiten zur Verbesserung.<br />
Vorteil für Programmierer<br />
Er zeigt aber, dass I²C-Slaves sich rasch<br />
mit einem <strong>Linux</strong>-Gerätetreiber versorgen<br />
lassen, der Anwendungsentwicklern das<br />
Programmieren erleichtert. (mhu) n<br />
Zugriff über den generischen I 2 C-Treiber<br />
Mit »i2c_dev« besitzt der <strong>Linux</strong>-Kernel einen<br />
generischen Treiber, über den man ohne sonstigen<br />
Client-Treiber auf I 2 C-Geräte (Slaves )<br />
zugreifen kann [6]. Auf dem Raspberry Pi<br />
unter Raspbian lädt man den Treiber über<br />
das Kommando »modprobe i2c_dev« in den<br />
Kernel. Danach stellt er für jeden I 2 C-Adapter<br />
im Verzeichnis »/dev/« eine Gerätedatei zur<br />
Verfügung. Diese kann der Programmierer per<br />
»open()« öffnen. Das über den zurückgegebenen<br />
Filedeskriptor zu bedienende Gerät gibt<br />
er dann per »ioctl()« unter Spezifikation der<br />
Portexpander PCA 9555<br />
Als Portexpander bietet der PCA9555 zweimal<br />
8 Bit (Port 0 und Port 1) parallele Ein-/Ausgabe<br />
(GPIO) über I 2 C. Die I 2 C-Adresse ist vom<br />
Hersteller auf einen Bereich zwischen 0x20<br />
und 0x27 vorgegeben und wird vom Entwickler<br />
über die Anschlusspins A0, A1 und A2 festgelegt.<br />
Der Baustein verfügt über insgesamt acht<br />
Register (Tabelle 2), die beim Schreiben über<br />
I 2 C vom ersten Byte, dem so genannten Befehl<br />
(Command), adressiert werden.<br />
Die Werte 6 und 7 wählen dabei die Konfigurationsregister<br />
für den Port 0 und Port 1 aus. Der<br />
I 2 C-Adresse dem I 2 C-Core bekannt. Anschließend<br />
lassen sich I 2 C-Pakete per »read()« und<br />
»write()« zwischen dem Adapter und dem am<br />
Bus angehängten Gerät verschicken.<br />
Dabei ist zu beachten, dass die Applikation<br />
das Protokoll selbst implementieren muss, im<br />
Fall des PCA 9555 beispielsweise gehört die<br />
Konfiguration der Ein-/Ausgabe-Richtung der<br />
I/O-Ports dazu. Will die Applikation Daten lesen,<br />
muss sie zuerst das I 2 C-Kommando per<br />
»write()« zum Gerät senden, um die Antwort<br />
per »read()« entgegenzunehmen.<br />
beim Schreiben in die Registeradressen 6 oder<br />
7 übergebene Parameter legt fest, welcher Pin<br />
als Eingabe und welcher als Ausgabe fungiert.<br />
Die Ausgabe selbst erfolgt durch Schreiben der<br />
Register 2 und 3. Hier enthält der Parameter<br />
jeweils das auszugebende Bitmuster.<br />
Das Einlesen ist nur über das Schreiben mit<br />
nachfolgendem Lesen zu realisieren. Beim<br />
Schrei ben an Adresse 0 wird der Port 0 zum<br />
Einlesen ausgewählt, die Adresse 1 wählt Port<br />
1 aus. Der eingelesene Wert wird mit dem nachfolgenden<br />
Lesen übertragen.<br />
Infos<br />
[1] Bit-Banging: [https:// de. wikipedia. org/<br />
wiki/ Bit‐Banging]<br />
[2] Venkatesh Yadav, „I2c driver in <strong>Linux</strong>“:<br />
[http:// venkateshabbarapu. blogspot. de/<br />
2012/ 11/ i2c‐driver‐in‐linux. html]<br />
[3] <strong>Linux</strong>-Kernel-Dokumentation zu I 2 C:<br />
[https:// www. kernel. org/ doc/<br />
Documentation/ i2c/ instantiating‐devices]<br />
[4] Quade, Kunst, „Kern-Technik 70 – Gerätetreiber<br />
für GPIO“: <strong>Linux</strong>-<strong>Magazin</strong> 10/13,<br />
S. 102<br />
[5] Quade, Kunst, „Kern-Technik 69 – ARM-<br />
Kernel generieren“: <strong>Linux</strong>-<strong>Magazin</strong> 08/13,<br />
S. 86<br />
[6] <strong>Linux</strong>-Kernel-Dokumentation zum I 2 C-<br />
Device-Interface: [https:// www. kernel. org/<br />
doc/ Documentation/ i2c/ dev‐interface]<br />
Die Autoren<br />
Eva-Katharina Kunst, Journalistin, und Jürgen<br />
Quade, Professor an der Hochschule Niederrhein,<br />
sind seit den Anfängen von <strong>Linux</strong> Fans von Open<br />
Source. In der Zwischenzeit ist die dritte Auflage<br />
ihres Buches „<strong>Linux</strong> Treiber entwickeln“<br />
erschienen.
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 02/2014<br />
96<br />
CPAN-Neueingänge<br />
Gesund im Alter<br />
Schon viele mögen den Skript-Altvater Perl für tot erklärt haben. Doch sie irren, wie ein wirklich interessierter<br />
Blick auf die Neueingänge des Softwarerepository CPAN zeigt. Michael Schilli<br />
© Duncan Noakes, 123RF.com<br />
1 #!/usr/local/bin/perl ‐w<br />
2 use strict;<br />
3 use Speech::Google::TTS;<br />
4<br />
5 my $tts = Speech::Google::TTS‐>new();<br />
6<br />
7 $tts‐>{'lang'} = 'de';<br />
Listing 1: »text2speech«<br />
8 $tts‐>say_text( "Ja was ist denn da los?!");<br />
9 system "mplayer", $tts‐>as_filename();<br />
„Als Zarathustra aber allein war, sprach<br />
er also zu seinem Herzen: Sollte es denn<br />
möglich sein! Dieser alte Heilige hat in<br />
seinem Walde noch nichts davon gehört,<br />
dass Perl tot ist!“ – frei nach Friedrich<br />
Nietzsche, er möge verzeihen.<br />
Keine Frage, Perl als Programmiersprache<br />
hat an Bedeutung verloren. Kaum ein<br />
Jungspund bringt mehr die Geduld auf,<br />
sich mit den zugegebenermaßen wunderlichen<br />
Eigenheiten der früher führenden<br />
Skriptsprache herumzuschlagen. Seit<br />
Jahren wandert die Mehrheit in mehrere<br />
Richtungen davon. Das scheint die Produktionswut<br />
eingefleischter Perl-Hacker<br />
aber nicht zu beeinträchtigen. Es vergeht<br />
kaum ein Tag, an dem nicht 50 neue Modulversionen<br />
auf dem CPAN unter [2]<br />
auftauchen (Abbildung 1).<br />
Dieser Perl-Snapshot greift einige der besonders<br />
nützlichen sowie einige der unterhaltsamsten<br />
heraus, welche die Perl-<br />
Community in den letzten zwei Wochen<br />
veröffentlicht hat.<br />
The King’s Speech<br />
Geschriebenen Text in gesprochene<br />
Worte umzuwandeln, das erfordert einen<br />
so genannten Sprachsynthesizer –<br />
algorithmisch ist das ganz klar die Oberklasse<br />
der Informatik, die viel Gehirnschmalz<br />
und Rechenpower kostet. Statt<br />
sich selbst abzumühen, klinkt sich das<br />
CPAN-Modul Speech::Google::TTS [3]<br />
in die milliardenschwere Infrastruktur<br />
des Google-Konzerns ein, indem es die<br />
Website [http:// translate. google. com]<br />
zweckentfremdet. Dort bietet Google<br />
Wort-für-Wort-Übersetzungen eingetippter<br />
Textphrasen an.<br />
Unten an der Textbox klebt ein Lautsprechersymbol,<br />
nach jedem Klick darauf<br />
diktiert eine <strong>Computer</strong>stimme den dort<br />
eingefügten Text (Abbildung 2). Das in<br />
Listing 1 verwendete Modul fängt den<br />
Sound ab und speichert ihn als Wav-Datei<br />
im »/tmp«-Verzeichnis. Die Methode<br />
»as_filename()« zerrt den zugehörigen<br />
Dateinamen ins Licht, und der Aufruf<br />
des Mplayer-Binary in Zeile 9 spielt den<br />
gesprochenen Text ab.<br />
Die Vorlese-Sprache stellt Zeile 7 auf<br />
»de« ein, also Deutsch, damit aus dem<br />
Lautsprecher kein Denglisch mit amerikanischem<br />
Akzent quillt. Wer schon<br />
immer einen zähen Buildjob mit einem<br />
zackigen „Ende der Kaffeepause, zurück<br />
zum Arbeitsplatz!“ akustisch beenden<br />
wollte – mit einem Skript bietet sich nun<br />
die Gelegenheit dazu. Das Modul erfordert<br />
außerdem das Paket Mpg123, das<br />
Ubuntu sich mit »apt‐get install mpg123«<br />
problemlos zu Eigen macht.<br />
Schwer für des Menschen<br />
Hirn: Makefiles analysieren<br />
Wer ist nicht schon einmal vor einem<br />
komplizierten Makefile verzweifelt? Die<br />
Make-Syntax ist nicht gerade leserlich,<br />
und spätestens wenn ein Target von drei<br />
weiteren abhängt und jedes wiederum<br />
…, dann wird es sehr mühsam zu ergründen,<br />
wo der Fehler steckt. Das CPAN-Modul<br />
GraphViz::Makefile [4] macht sich<br />
auf, um die Abhängigkeiten zwischen<br />
Online PLUS<br />
In einem Screencast demonstriert<br />
Michael Schilli das Beispiel: [http://<br />
www.linux-magazin.de/2014/02/plus]
Abbildung 1: Jeden Tag landen auf der Recent-Seite des CPAN etwa 50 neue<br />
Modulversionen – ein schlagender Beweis für eine aktive Community.<br />
den Make-Targets mit dem Paket Graphviz<br />
grafisch aufzubereiten.<br />
Der Fairness halber sei gesagt, dass<br />
GraphViz::Makefile zurzeit nur Spielzeug-Makefiles<br />
sauber darstellt: Sobald<br />
die Syntax eine gewisse Komplexität überschreitet,<br />
gleichen die erzeugten Grafen<br />
einem von einem Tornado aufgewirbelten<br />
Heuhaufen. Aber das im Make-Tutorial<br />
[5] zu Schulungszwecken verwendete<br />
Makefile verarbeitet GraphViz::Makefile<br />
sehr ordentlich, wie der von Listing 3<br />
erzeugte Graph in Abbildung 3 zeigt.<br />
Dazu nimmt der Konstruktor von Graph-<br />
Viz::Makefile in Zeile 7 erst ein optionales<br />
»GraphViz«-Objekt<br />
entgegen. Ist der Parameter<br />
auf »undef« gesetzt,<br />
erzeugt Graph-<br />
Viz::Makefile ein eigenes<br />
Graphviz-Objekt.<br />
Der zweite Parameter<br />
ist auf »Makefile« eingestellt,<br />
sucht sich<br />
also das Makefile aus<br />
dem aktuellen Verzeichnis<br />
heraus.<br />
Um nun den Graphen<br />
eines Target zu<br />
erzeugen, nimmt die<br />
Methode »generate()«<br />
in Zeile 9 den Namen<br />
des Target entgegen (in Listing 2 ist das<br />
»all«). Von hier beginnt der Graph seinen<br />
Weg. Am glücklichen Ende speichert<br />
die Methode »GraphViz‐>as_png()« den<br />
Graphen als »makefile.png«-Bild (Abbildung<br />
3). Das Modul mag noch in den<br />
Kinderschuhen stecken, sein Konzept<br />
besticht schon jetzt.<br />
Unsichtbare Dienerschaft<br />
Perl-Programmierer, die ein Modul oder<br />
Skript aufs CPAN stellen, vergessen<br />
schon mal, die Abhängigkeiten zu anderen<br />
CPAN-Modulen anzugeben. Folglich<br />
schlägt die Installation bei allen Anwendern<br />
fehl, die auf ihren Systemen die<br />
abhängigen Module nicht durch Zufall<br />
schon eingebunden haben. Das CPAN-<br />
Modul Module::ScanDeps [6] beherbergt<br />
das Skript »scandeps.pl«, das als Argument<br />
ein Skript oder Modul erwartet und<br />
die darin gefundenen Abhängigkeiten<br />
ausspuckt.<br />
Auf das eben in Listing 3 vorgestellte<br />
Skript mit<br />
scandeps.pl make2viz<br />
Perl-Snapshot 02/2014<br />
Programmieren<br />
www.linux-magazin.de<br />
97<br />
Der Weg zum PNG<br />
Abbildung 2: Das CPAN-Modul Speech::Google::TTS<br />
nutzt den hochentwickelten Sprachsynthesizer auf<br />
der Seite Translate.google.com.<br />
Abbildung 3: Das CPAN-Modul GraphViz::Makefile<br />
hat das Makefile aus Listing 2 grafisch aufbereitet.
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 02/2014<br />
98<br />
01 all: hello<br />
angewendet, ergibt sich die Ausgabe in<br />
Abbildung 4. Wer hätte gedacht, dass<br />
tief im Bauch von GraphViz::Makefile das<br />
Modul IPC::Run::Win32Helper einen Teil<br />
der Verdauung übernimmt?! <strong>Linux</strong>-Systeme<br />
binden es zweifellos zu Unrecht ein,<br />
fehlt es auf der Installationsplattform jedoch,<br />
würde Perl das Skript abbrechen.<br />
Mehr-Gänge-Menü<br />
In manchem Kommandozeilen-Utility<br />
for dert dessen Programmierer vom Benutzer<br />
etwas komplexere Eingaben ab.<br />
Für Perl offeriert CPAN etliche Textter-<br />
02<br />
03 hello: main.o factorial.o hello.o<br />
04 g++ main.o factorial.o hello.o ‐o hello<br />
05<br />
06 main.o: main.cpp<br />
07 g++ ‐c main.cpp<br />
08<br />
09 factorial.o: factorial.cpp<br />
10 g++ ‐c factorial.cpp<br />
11<br />
12 hello.o: hello.cpp<br />
13 g++ ‐c hello.cpp<br />
14<br />
15 clean:<br />
16 rm ‐rf *o hello<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03<br />
04 use GraphViz::Makefile;<br />
05<br />
06 my $gm = GraphViz::Makefile‐>new(<br />
07 undef, "Makefile" );<br />
08<br />
09 $gm‐>generate( "all" );<br />
10<br />
11 open my $ofh, ">", "makefile.png" or<br />
12 die $!;<br />
13 print $ofh $gm‐>GraphViz‐>as_png;<br />
14 close $ofh;<br />
Listing 2: »Makefile«<br />
Listing 3: »make2viz«<br />
minal-Menüsimulationen.<br />
In der Liste der<br />
neuen Modulversionen<br />
sticht Term::Menus<br />
[7] heraus, denn es<br />
bietet eine komfortabel<br />
programmierbare<br />
Schnittstelle für Fälle<br />
an, bei denen der User<br />
einen Eintrag aus umfangreichen<br />
Listen<br />
auswählen muss.<br />
Listing 4 zeigt als<br />
Beispiel ein Skript, bei<br />
dem der Benutzer eine<br />
Datei aus einem Homeverzeichnis<br />
auswählen<br />
soll. Jahrelang unterlassene Aufräumarbeiten<br />
haben offensichtlich dazu geführt,<br />
dass dort 73 Dateien liegen. Die passen<br />
im Ganzen auf keine Terminalseite. Wie<br />
Abbildung 5 zeigt, stellt Text::Menus jeweils<br />
zehn Dateien dar und gestattet dem<br />
User mit [D] runter- und mit [U] die Liste<br />
heraufzuscrollen.<br />
Durch Eingabe einer Zahl wählt der User<br />
schließlich einen Eintrag aus. Der landet<br />
im Skript »menu« dann als Rückgabeparameter<br />
der Funktion »pick()« in der<br />
Variablen »$selection«. Term::Menus bietet<br />
noch andere Funktionen, etwa Mehrfachauswahlen<br />
oder Untermenüs. Alles<br />
sehr praktisch, wenn man bedenkt, dass<br />
Skriptprogrammierer dafür nur ein paar<br />
Zeilen Code aufwenden müssen.<br />
Nuggets finden<br />
Das Schlaglicht auf die CPAN-Recent-Liste<br />
einiger Tage zeigt, dass es sich durchaus<br />
lohnt, hier öfter nach Goldklümpchen<br />
Abbildung 4: Das Skript »make2viz« zieht einige versteckte Module heran,<br />
wie Module::ScanDeps schnell herausfindet.<br />
zu sieben. Neben routinemäßigen Wartungsreleases<br />
gängiger Module glitzern<br />
am Boden der Pfanne immer wieder gute<br />
Ideen für mehr Programmier-Effizienz<br />
oder Unterhaltsames aus der Welt der<br />
sehr lebendigen Perl-Community.<br />
„Mitschaffende sucht Zarathustra, Miterntende<br />
und Mitfeiernde sucht Zarathustra:<br />
Was hat er mit Herden und Hirten<br />
und Leichnamen zu schaffen!“ (Friedrich<br />
Nietzsche) (jk)<br />
n<br />
Infos<br />
[1] Listings zu diesem Artikel:<br />
[ftp:// www. linux‐magazin. de/ pub/ listings/<br />
magazin/ 2014/ 02/ Perl]<br />
[2] Aktuell eingegangene CPAN-Modul-Versionen:<br />
[http:// search. cpan. org/ recent]<br />
[3] Speech::Google::TTS: [http:// search. cpan.<br />
org/ ~nielsd/ Speech‐Google‐TTS‐074/]<br />
[4] GraphViz::Makefile: [http:// search. cpan.<br />
org/ ~srezic/ GraphViz‐Makefile‐1. 17]<br />
[5] Make-Tutorial:<br />
[http:// mrbook. org/ tutorials/ make]<br />
[6] Module::ScanDeps: [http:// search. cpan.<br />
org/ ~rschupp/ Module‐ScanDeps‐1. 12/]<br />
[7] Term::Menus: [http:// search. cpan. org/<br />
~reedfish/ Term‐Menus‐2. 49/]<br />
Listing 4: »menu«<br />
1 #!/usr/local/bin/perl ‐w<br />
2 use strict;<br />
3 use Term::Menus;<br />
4<br />
5 my @files = sort glob "~/*";<br />
6 my $banner=" Please pick an file:";<br />
7 my $selection = pick( \@files, $banner);<br />
8 print "You chose '$selection'\n";<br />
Abbildung 5: Das Navigieren in sehr lange Dateilisten,<br />
hier im Homeverzeichnis des Perlmeisters<br />
Schilli, verlangt nach kreativen Mitteln.<br />
Der Autor<br />
Michael Schilli arbeitet<br />
als Software-Engineer bei<br />
Yahoo in Sunnyvale, Kalifornien.<br />
In seiner seit 1997<br />
laufenden Kolumne forscht<br />
er jeden Monat nach praktischen<br />
Anwendungen der Skriptsprache Perl.<br />
Unter [mschilli@perlmeister. com] beantwortet<br />
er gerne Fragen.
Alle Artikel des Jahres<br />
2013 auf einer DVD!<br />
JAhres-DVD<br />
2013<br />
Open Suse 13.1<br />
Offizielles<br />
64-Bit-<strong>Linux</strong> aus<br />
Nürnberg<br />
• Zwölf Ausgaben<br />
komplett als hTML<br />
und PDF<br />
• Durchdachte<br />
Navigation, die<br />
mit jedem Brow ser<br />
funktioniert<br />
• Blitzschnelle<br />
Volltextsuche<br />
• Alle Listings<br />
Jetzt gleich bestellen!<br />
www.linux-magazin.de/DVD2013 oder 089 - 99 34 11 - 00
Programmieren<br />
www.linux-magazin.de Angular JS 02/2014<br />
100<br />
Webanwendungen mit dem Framework Angular JS<br />
Web ohne Knoten<br />
Angular JS ist der aktuelle Shootingstar unter den Webframeworks. Die Javascript-Bibliothek bringt bewährte<br />
Konzepte der Rich-Client-Entwicklung in den Browser und entwirrt Ansichten und Daten. Carsten Zerbst<br />
© antonprado, 123RF.com<br />
JS-Webanwendung aus einer Applikation<br />
mit einem oder mehreren Controllern.<br />
Die Controller sind für die Daten eines<br />
Arbeitsbereichs (Scope) im Model zuständig.<br />
Applikation, Controller und<br />
Model sind in Javascript implementiert.<br />
Hier lassen sich normale Javascript-Funktionen<br />
und -Variablen verwenden, die<br />
Software drängt dem Entwickler keine<br />
speziellen Basisklassen auf.<br />
Die Definition der Ansichten basiert auf<br />
dem bewährten HTML, dessen Vokabular<br />
aber um spezielle Direktiven für das dynamische<br />
Verhalten erweitert wird. Diese<br />
Anweisungen wertet Angular JS zur Laufzeit<br />
aus, eine direkte Manipulation des<br />
DOM aus den Controllern ist weder notwendig<br />
noch erwünscht.<br />
Kaum ein anderes Programmierthema<br />
ist dermaßen im Fluss wie die Entwicklung<br />
von Webanwendungen. Ein klarer<br />
Trend der letzten Jahre ist die zunehmende<br />
Verlagerung der Anwendung vom<br />
Server in den Browser. Triebfeder ist hier<br />
vor allem die Verbesserung der Reaktionszeit.<br />
Anstelle des klassischen Abrufs<br />
ganzer Seiten fragen moderne Single-<br />
Page-Anwendungen nur noch Teile der<br />
Seite oder Rohdaten vom Server ab und<br />
integrieren sie per Javascript in die bestehende<br />
Ansicht. Auch das Überprüfen<br />
von Nutzereingaben oder das Filtern von<br />
Daten findet möglichst im Browser statt.<br />
Lohn der Mühe sind schnell reagierende<br />
Webanwendungen mit dem Bedienungskomfort<br />
nativer Anwendungen.<br />
Gordischer Knoten<br />
Die Entwickler solcher Anwendungen<br />
müssen aber oft einen hohen Preis zahlen,<br />
schnell sind sie in einen gordischen<br />
Knoten aus HTML, Javascript, CSS und<br />
Servercode verstrickt. Daher greifen viele<br />
auf Javascript-Bibliotheken wie Jquery<br />
[1] zurück, im Endeffekt beschäftigen<br />
sie sich aber nach wie vor mit der Manipulation<br />
des im Browser dargestellten<br />
Document Object Model (DOM).<br />
Das MIT-lizenzierte Framework Angular<br />
JS [2] verspricht dagegen, den Knoten zu<br />
lösen. Das bei Google<br />
entwickelte Framework<br />
bringt bewährte<br />
Konzepte aus der Rich-<br />
Client-Entwicklung in<br />
den Browser. An die<br />
Stelle der aufwändigen<br />
und fehlerträchtigen<br />
Manipulationen auf<br />
Ebene der HTML-Elemente<br />
tritt ein sauberes<br />
Model-View-Controller-Konzept.<br />
Wie Abbildung 1 zeigt,<br />
besteht eine Angular-<br />
Model:<br />
App<br />
Model:<br />
Router<br />
Flugs eingefügt<br />
Was sich kompliziert anhören mag, führt<br />
in der Praxis erstaunlich schnell zum Ergebnis.<br />
Die Listings 1 und 2 implementieren<br />
eine komplette Webanwendung<br />
zum Anlegen und Anzeigen von Kontaktdaten<br />
(Abbildung 2). Das erste Listing<br />
enthält die Ansicht, die sich erst auf den<br />
zweiten Blick von normalem, statischem<br />
wechselt<br />
Model:<br />
Controller<br />
Model:<br />
Controller<br />
Model:<br />
Controller<br />
kontrolliert<br />
gebunden<br />
View Model:<br />
»$scope«<br />
View:<br />
HTML<br />
Abbildung 1: Der Aufbau von Angular-JS-Anwendungen folgt der Architektur<br />
Model-View-Controller (MVC).
Abbildung 2: Templates und Binding ermöglichen das lokale Bearbeiten von Daten.<br />
HTML unterscheidet. Einstiegspunkt ist<br />
die Verknüpfung des HTML-Dokuments<br />
mit der Angular-JS-Applikation durch<br />
die Direktive »ng‐app« (Listing 1, Zeile<br />
1). Innerhalb des Dokuments verbindet<br />
»ng‐controller« einzelne Bereiche mit einem<br />
Controller (Listing 1, Zeile 3).<br />
funktioniert das Binding zwischen HTML<br />
und dem Controller jedoch auch in der<br />
Gegenrichtung.<br />
Die Eingabefelder des Formulars ab Zeile<br />
14 sind über »ng‐model« an Variablen im<br />
Controller gebunden, jede Eingabe wirkt<br />
sich in den Variablen aus und umgekehrt.<br />
Dies nutzt die im Controller definierte<br />
Funktion »neuerKontakt()«. Sie ist per<br />
»ng‐submit«-Direktive an das Formular<br />
gebunden, erzeugt aus den drei »edit*«-<br />
Variablen ein neues Kontaktobjekt und<br />
packt es in das Array »kontakte«. Diese<br />
Änderungen erkennt das Binding und<br />
aktualisiert automatisch die Ansicht in<br />
der Tabelle. Dafür ist kein Umweg über<br />
einen Server notwendig, sodass die Anwendung<br />
sehr fließend reagiert.<br />
Schon dieses kleine Beispiel lässt die<br />
Leistungsfähigkeit von Angular JS erahnen.<br />
Wenige Zeilen HTML und Javascript<br />
reichen aus, um Daten ohne Umweg über<br />
den Server zu bearbeiten und anzuzeigen.<br />
Ein HTTP-Server wäre bei diesem<br />
Beispiel nur erforderlich, um das HTML<br />
und Javascript aus den Listings 1 und 2<br />
einmalig an den Browser auszuliefern.<br />
Danach arbeitet Angular JS ohne weiteren<br />
Serverkontakt.<br />
Server-seitiger Code wird mit Angular JS<br />
nur dann erforderlich, wenn die Webanwendung<br />
etwa Informationen aus einer<br />
Datenbank lesen soll oder sie Daten<br />
an den Server schickt. Die Sprache für<br />
den Server-seitigen Code gibt Angular JS<br />
nicht vor, es kann genauso gut Python<br />
Angular JS 02/2014<br />
Programmieren<br />
www.linux-magazin.de<br />
101<br />
In beiden Richtungen<br />
Nachdem diese Fleißarbeit erledigt ist,<br />
zeigen sich die Vorzüge von Angular JS<br />
– hier die bidirektionale Bindung zwischen<br />
dem im Controller definierten<br />
Model (Listing 1, ab Zeile 4) und dem<br />
HTML. Dabei ersetzt das Framework alle<br />
zwischen doppelten geschweiften Klammern<br />
geschriebenen Variablennamen im<br />
Browser durch ihre jeweiligen Werte. Der<br />
Anwender bekommt nicht »{{titel}}« angezeigt,<br />
sondern den im Controller definierten<br />
Wert »Kontakte«.<br />
Das funktioniert nicht nur für direkt<br />
verfügbare Variablen: Die »ng‐repeat«-<br />
Direktive läuft über das Array »kontakte«<br />
und stellt jedes Element in einer eigenen<br />
Zeile der Tabelle dar. Das entspricht<br />
vom Konzept her den bekannten Serverseitigen<br />
Templatesystemen wie JSP oder<br />
Freemarker [3] – mit dem Unterschied,<br />
dass es im Browser passiert. Die HTML-<br />
Datei lässt sich einfach lokal öffnen (nur<br />
Google Chrome verweigert dabei das<br />
Ausführen von Javascript). Anders als<br />
bei Server-seitigen Templatesystemen<br />
Listing 1: HTML-Template für die Webanwendung<br />
01 <br />
14 Vorname : <br />
03 <br />
15 Name : <br />
05 <br />
16 EMail : <br />
EMail<br />
17 <br />
07 <br />
18 <br />
08 {{kontakt.vorname}}<br />
19 <br />
09 {{kontakt.name}}<br />
20 <br />
10 {{kontakt.email}}<br />
<br />
11 <br />
21 <br />
12 <br />
22 <br />
13 <br />
23 <br />
Listing 2: Javascript für die Webanwendung<br />
01 'use strict';<br />
08 ];<br />
02 angular.module('LMTemplateAnwendung', [])<br />
09 $scope.neuerKontakt = function() {<br />
03 .controller('BindingCtrl', function($scope) { 10 $scope.kontakte.push({name:<br />
04 $scope.titel = 'Kontakte';<br />
$scope.editName, vorname: $scope.editVorname,<br />
05 $scope.kontakte = [<br />
email: $scope.editEmail});<br />
06 {id: 1, name: 'Normalverbraucher',<br />
11 $scope.editName = '';<br />
vorname: 'Otto', 'email':<br />
12 $scope.editVorname = '';<br />
'otto.Normalverbraucher@lm.de'},<br />
13 $scope.editEmail = '';<br />
07 {id: 2, name: 'Mustermann', vorname:<br />
14 };<br />
'Erika', 'email': 'erika.mustermann@lm.de'}<br />
15 });
Programmieren<br />
www.linux-magazin.de Angular JS 02/2014<br />
102<br />
Diese drei kleinen Beispiele haben nur<br />
einen Bruchteil des von Angular JS gebotenen<br />
Funktionsumfangs gezeigt. Es lässt<br />
sich aber erkennen, dass das Framework<br />
das Entwickeln sauber strukturierter<br />
Anwendungen erlaubt, da es eine klare<br />
Trennung zwischen der Ansicht in den<br />
HTML-Templates und der Logik und den<br />
Daten im Javascript erlaubt. Einzelne<br />
HTML-Elemente aus dem Javascript dioder<br />
PHP oder eine Java-Anwendung in<br />
einem Application Container sein.<br />
Nachgeladen<br />
Die saubere Trennung zwischen der Darstellungsdefinition<br />
im HTML und der Datenhaltung<br />
im Controller legt den nächsten<br />
Schritt nahe: das getrennte Laden der<br />
Daten vom Server (Abbildung 3). Dieser<br />
liefert die kleine statische Seite sofort an<br />
den Browser, die Daten lassen sich zu<br />
einem beliebigen Zeitpunkt anfragen und<br />
in die Anzeige integrieren.<br />
Die dazu notwendigen Änderungen im<br />
HTML sind minimal (Listing 3), die<br />
»ng‐init«-Direktive ruft nach dem abgeschlossenen<br />
Laden die Funktion »ladeKontakte()«<br />
auf. Diese findet sich im<br />
01 <br />
02 <br />
03 Filter: <br />
04 <br />
Listing 3: Template für das Laden<br />
und Suchen<br />
05 <br />
06 {{kontakt.vorname}}<br />
07 [...]<br />
08 <br />
09 <br />
10 Meldung : {{meldung}}<br />
<br />
11 <br />
12 <br />
13 <br />
14 <br />
15 <br />
Controller (Listing 4) und nutzt die<br />
Funktionalitäten von Angular JS zum<br />
Laden von Ressourcen.<br />
Nach dem erfolgreichen Download<br />
kommt die in »success()« hinterlegte<br />
Funktion zum Aufruf. Sie übergibt die<br />
Kontakte aus den Json-Daten an den<br />
Scope, was wiederum über das Binding<br />
die Anzeige aktualisiert. Wenn es beim<br />
Laden zu einem Fehler kommt, aktiviert<br />
dies stattdessen die in »error()« hinterlegte<br />
Funktion, die eine Fehlermeldung<br />
in den Scope schiebt.<br />
Das Laden und Ausführen der Funktionen<br />
geschieht dabei asynchron, die<br />
Anwendung blockiert nie. Auch in diesem<br />
Beispiel ist kein Server-seitiger Code<br />
notwendig, die Kontakte liegen einfach<br />
als Datei »kontakte.json« auf dem Webserver.<br />
Wer Daten aus einer Datenbank<br />
bereitstellen möchte, setzt dies beispielsweise<br />
in der Java-Welt mit JAX-RS in<br />
Tomcat [4] oder mit einem vollwertigen<br />
Application Container [5] um.<br />
Seitenweise<br />
Ein weiteres Merkmal moderner Webanwendungen<br />
ist das Umschalten zwischen<br />
verschiedenen Ansichten, ohne die<br />
ganze Seite neu zu laden (Abbildung<br />
4). Diesen Wechsel ermöglicht die Anweisung<br />
»ng‐view«, ein kleines Beispiel<br />
findet sich in den Listings 5, 6 und 7.<br />
Das Listing 5 enthält die Masterseite,<br />
die »ng‐view«-Direktive in Zeile 8 ersetzt<br />
Angular JS zur Laufzeit durch jeweils<br />
eine der Ansichten. Für das Umschalten<br />
der Ansichten ist der Router in Listing<br />
7 zuständig. Er bestimmt (Zeilen 3 und<br />
4), welche Ansicht für welche Adresse<br />
zuständig ist, außerdem definiert Zeile 5<br />
die Standardansicht.<br />
Zur Laufzeit aktiviert der Router je nach<br />
Adresse die entsprechende Ansicht, zum<br />
Umschalten enthält die Masterseite in<br />
den Zeilen 5 und 6 Links. Die einzelnen<br />
Ansichten sind wieder normale HTML-<br />
Templates, die alle Features von Angular<br />
JS nutzen dürfen (Listing 6).<br />
Das Aufteilen einer Anwendung in mehrere<br />
Ansichten bietet eine Reihe von<br />
Vorteilen: Jede der Ansichten wird erst<br />
bei Bedarf vom Server geladen, das Umschalten<br />
geschieht ohne Neuladen der<br />
gesamten Seite und jede Ansicht samt<br />
der daran hängenden Businesslogik und<br />
Daten lässt sich unabhängig von den anderen<br />
entwickeln.<br />
Und mehr<br />
Listing 4: Javascript zum<br />
Herunterladen der Daten<br />
01 angular.module('LMJSONAnwendung', [])<br />
02 .controller('JSONCtrl', function($scope, $http) {<br />
03 $scope.kontakte = [];<br />
04 $scope.meldung = '';<br />
05 <br />
06 $scope.ladeKontakte = function() {<br />
07 $http({method: 'GET', url: 'kontakte.json'}).<br />
08 success(function(data, status) {<br />
09 $scope.kontakte = data;<br />
10 }).<br />
11 error(function(data, status) {<br />
12 $scope.meldung = "Laden der Kontakte<br />
fehlgeschlagen (" + status + ")";<br />
13 });<br />
14 };<br />
15 });<br />
Abbildung 3: Json-Daten lassen sich separat laden sowie lokal sortieren und filtern.
Abbildung 4: Die »ng‐view«-Direktive erlaubt es, ohne Neuladen zwischen Ansichten umzuschalten.<br />
rekt zu manipulieren ist nie notwendig,<br />
was die Entwicklung wesentlich entkoppelt.<br />
Zum Funktionsumfang von Angular<br />
JS gehören das Formatieren von Daten<br />
(Datumswerte), Eingabeprüfung, Internationalisierung<br />
und vieles mehr.<br />
Als Basis für eigene Entwicklungen bietet<br />
Angular-seed [6] bereits fertige Anwendungsgerüste,<br />
auf deren Grundlage auch<br />
mehrere Entwickler ohne Konflikte an<br />
großen Anwendungen arbeiten können.<br />
Sie kommen noch schneller zum Ziel,<br />
wenn sie die Highlevel-Komponenten<br />
von Ngmodules [7] nutzen. Darin finden<br />
sich zum Beispiel fertige Tabellen mit<br />
Sortierung, Paginierung und Suche, aber<br />
auch Gantt-Charts, Balkengrafiken oder<br />
File-Upload-Elemente.<br />
Infos<br />
[1] Jquery: [https:// jquery. com]<br />
[2] Angular JS: [http:// angularjs. org]<br />
[3] Freemarker: [http:// freemarker. org]<br />
[4] JAX-RS: [http:// blog. zuehlke. com/ rest<br />
‐basierte‐webapplikation‐mit‐jersey<br />
‐und‐angularjs‐teil1/]<br />
[5] Angular JS mit Java EE7:<br />
[https:// blogs. oracle. com/ geertjan/ entry/<br />
angularjs_meets_java_ee_7]<br />
[6] Angular-seed: [https:// github. com/<br />
angular/ angular‐seed]<br />
[7] Angular-JS-Module: [http:// ngmodules.<br />
org]<br />
[8] Karma: [http:// karma‐runner. github. io]<br />
[9] Mit Angular JS gemacht:<br />
[http:// builtwith. angularjs. org]<br />
[10] Alog von Geert Wielenga:<br />
[https:// blogs. oracle. com/ geertjan]<br />
[11] Egghead: [http:// egghead. io]<br />
[12] Angular-JS-DE: [http:// angularjs. de]<br />
[13] Listings zum Artikel:<br />
[http:// www. linux‐magazin. de/ static/<br />
listings/ magazin/ 2014/ 02/ angular]<br />
Logik und Anzeige zu trennen zeigt neben<br />
der guten Wartbarkeit einen weiteren<br />
Effekt: Die Anwendung lässt sich mit akzeptablem<br />
Aufwand testen. Bei Jquerybasierten<br />
Anwendungen beschäftigt sich<br />
ein Großteil des Anwendungscodes mit<br />
der direkten Manipulation vom HTML.<br />
Daher muss ein Test immer in Kombination<br />
mit HTML ablaufen. Bei Angular<br />
JS dagegen arbeiten die Controller mit<br />
normalen Javascript-Datenobjekten, was<br />
sich mit Javascript-Testframeworks wie<br />
Karma [8] problemlos prüfen lässt.<br />
Praktisch anwenden<br />
Wer mit Angular JS umgesetzte Webanwendungen<br />
anschauen will, findet unter<br />
[9] ein paar Beispiele. Dazu gehören neben<br />
kleinen und mittleren Webanwendungen<br />
auch Publikumsschlager wie Googles<br />
Youtube-Player für die Playstation 3. Der<br />
Autor hat auch bei typischen Business-<br />
Anwendungen mit CRUD-Funktionalität<br />
(Create, Read, Update, Delete) auf einem<br />
REST-Backend positive Erfahrungen mit<br />
dem Framework gemacht.<br />
Auch abseits üblicher Pfade kommt Angular<br />
JS zunehmend zum Einsatz: Geert<br />
Wielenga von Oracle etwa zeigt in seinem<br />
Blog, wie man damit Android-Apps baut,<br />
die lokal Daten speichern und auf die<br />
Kamera zugreifen [10]. Insgesamt hilft<br />
Listing 7: Javascript für mehrere Ansichten<br />
01 angular.module('LMViewAnwendung', ['ngRoute']).<br />
02 config(['$routeProvider', function($routeProvider) {<br />
Angular JS, moderne Webanwendungen<br />
mit akzeptablen Aufwand zu programmieren.<br />
Statt mit dem aufwändigen und<br />
fehlerträchtigen Manipulieren einzelner<br />
HTML-Elemente darf sich der Entwickler<br />
mit dem Verarbeiten der eigentlichen Daten<br />
beschäftigen.<br />
Zum Einstieg bietet die Angular-JS-Website<br />
[1] ein Tutorial sowie die API-Dokumentation.<br />
Empfehlenswert sind auch<br />
die Videos bei Egghead [11]. Derzeit entwickelt<br />
sich unter [12] ein deutschsprachiges<br />
Portal zum Thema. (mhu) n<br />
Der Autor<br />
Carsten Zerbst arbeitet als Teamleiter im CADund<br />
PDM-Umfeld für die Automobil-, Luft- und<br />
Raumfahrtindustrie. Sein Schwerpunkt ist die<br />
Beratung von Kunden sowie die Umsetzung von<br />
Java-basierter Individual-Software. Zurzeit sucht<br />
er in Hamburg neue Teammitglieder.<br />
03 $routeProvider.when('/view1', {templateUrl: 'partials/view1.html', controller: 'View1Ctrl'});<br />
04 $routeProvider.when('/view2', {templateUrl: 'partials/view2.html', controller: 'View2Ctrl'});<br />
05 $routeProvider.otherwise({redirectTo: '/view1'});<br />
06 }]).<br />
07 controller('View1Ctrl', function($scope) {<br />
08 $scope.titel = 'Titel 1';<br />
09 });<br />
Listing 5: HTML-Template für die<br />
Masterseite<br />
01 <br />
02 <br />
03 <br />
04 Ansicht 1<br />
05 Ansicht 2<br />
06 <br />
07 <br />
08 <br />
09 <br />
10 <br />
11 <br />
<br />
12 <br />
13 <br />
14 <br />
15 <br />
Listing 6: HTML-Template für eine<br />
Ansicht<br />
01 {{titel}}<br />
02 Ansicht 1<br />
Angular JS 02/2014<br />
Programmieren<br />
www.linux-magazin.de<br />
103
Programmieren<br />
www.linux-magazin.de C++11 02/2014<br />
Modernes C++ in der Praxis – Folge 14<br />
Neue Ausdruckskraft<br />
In klassischem C++11 gestalten sich das<br />
Füllen eines Containers und das Ausgeben<br />
seiner Elemente sehr wortreich.<br />
Listing 1 exerziert dies für den sequenziellen<br />
»std::vector« und den assoziativen<br />
Container »std::unordered_map« durch.<br />
Details zu den assoziativen Containern<br />
lassen sich im vorigen Artikel [1] dieser<br />
Serie nachlesen.<br />
Die Arbeit beginnt mit dem Füllen des<br />
Containers. Dazu muss der Program-<br />
104<br />
In C++11 lässt sich manches prägnanter formulieren als in klassischem C++. Dieser Artikel zeigt, wie die neue<br />
Range-basierte For-Schleife und die automatische Typableitung dabei helfen. Rainer Grimm<br />
C++11<br />
asynchrone Aktionen<br />
override<br />
decltype man den End-Vektor »vecItEnd« verwenden<br />
kann, muss dieser die Position direkt<br />
Move-Semantik<br />
Neue Container<br />
auto<br />
hinter dem Vektor referenzieren. Das er-<br />
Variadic Templates<br />
ledigt in Zeile 19 die Zuweisung:<br />
bind<br />
std::vector::const_iterator vecItEnd=U<br />
Type Traits<br />
C++11<br />
myVec.end()<br />
Alias Templates<br />
Tuple<br />
Der Rest der For-Schleife ist schnell er-<br />
default<br />
function<br />
klärt: Die Inkrement-Operation »++vecIt«<br />
Range-basierte<br />
C++11<br />
(Zeile 21) setzt den Iterator jeweils um<br />
nullptr<br />
For-Schleife<br />
eine Position weiter, der Ausdruck »*ve-<br />
Zufallszahlen<br />
Zeitbibliothek cIt« in Zeile 22 dereferenziert die einzel-<br />
delete<br />
final<br />
nen Elemente und gibt sie aus.<br />
Benutzerdefinierte Literale<br />
Smart Pointer Noch aufwändiger gestaltet sich die Aus-<br />
Hashtabellen<br />
static_assert<br />
reguläre Ausdrücke<br />
gabe des assoziativen Containers in den<br />
Threads Zeilen 32 bis 37. Dabei folgt sie dem<br />
Lambda-Funktionen<br />
Array<br />
gleichen Kochrezept: Der Code definiert<br />
gleich zu Anfang zwei Iteratoren (Zeilen<br />
32 und 33). Dabei ist »unordIt« ein konstanter<br />
Einfache Dinge sollten einfach, schwierige<br />
Dinge möglich sein. Was wie die<br />
mierer beim »std::vector« jedes einzelne<br />
Element mit »push_back()« (Zeilen 12<br />
bis 16) auf den Vektor schieben. Zwar<br />
besorgt diese Operation den notwendigen<br />
Speicher für die neuen Elemente, sie ist<br />
aber unangenehm wortreich.<br />
Container füllen<br />
Iterator, der in der For-Schleife<br />
über alle Elementen iteriert, »unordEnd«<br />
verweist hinter das Ende des Containers.<br />
Da die Elemente des assoziativen Containers<br />
Paare sind, referenziert das Programm<br />
sie mit den Bezeichnern »first« für<br />
den Schlüssel und »second« für den Wert.<br />
Mit viel Code entsteht so das bisschen<br />
Ausgabe in Abbildung 1.<br />
oberste Maxime jeder Programmiersprache<br />
klingt, war in C++ lange keine Selbstverständlichkeit.<br />
Dank der Range-basierten<br />
For-Schleife und der automatischen<br />
Typableitung in C++11 gehört das aber<br />
der Vergangenheit an. Standardaufgaben<br />
wie das Arbeiten mit einem Container<br />
gehen mit dem starken Duo deutlich einfacher<br />
von der Hand.<br />
Die harte Tour<br />
Der neue Container »std::unordered_<br />
map« ist mit der klassischen Syntax<br />
ähnlich kompliziert zu füllen. Für jedes<br />
Schlüssel-Wert-Paar ist eine eigene Anweisung<br />
notwendig (Zeilen 28 bis 30).<br />
Sind die Container gefüllt, geben die Zeilen<br />
21 und 35 ihren Inhalt aus. Auch das<br />
gestaltet sich sehr umständlich.<br />
Bei »std::vector«, dem sequenziellen Container,<br />
definiert Zeile 18 einen konstanten<br />
Iterator für den Vektor. Der Programmierer<br />
initialisiert ihn in der For-Schleife in<br />
Zeile 21 mit dem Ausdruck »vecIt= my-<br />
Vec.begin()« für den Beginn des Vektors.<br />
Nun findet die Iteration bis zum Ende des<br />
Vektors »vecIt != vecItEnd« statt. Damit<br />
Kompakter<br />
Das ist aber erst die halbe Geschichte in<br />
C++. Um Zeilen wie 18 bis 23 deutlich<br />
kompakter zu schreiben, hat sich für se-<br />
Abbildung 1: Ausgeben der Container »std::vector«<br />
und »std::unordered_map«.
quenzielle Container ein Idiom etabliert,<br />
das zwar kürzer, aber auch schwerer verständlich<br />
ist. Mit dem Ausdruck<br />
std::copy(myVec.begin(),myVec.end(), U<br />
std::ostream_iterator(std::cout," "))<br />
lassen sich alle Elemente des Vektors in<br />
einer Zeile ausgeben. Dabei kopiert der<br />
Algorithmus »std::copy()« die Elemente<br />
von »myVec.begin« bis »myVec.end« auf<br />
den Ausgabe-Iterator »std::ostream_iterator«.<br />
Der ist mit der Ausgabe »std::cout«<br />
verbunden und schreibt auf sie alle Zahlen,<br />
durch Leerzeichen getrennt.<br />
Schon einfacher machen einige C++11-<br />
Features das in Listing 2. Ähnlich kompakt<br />
wie der Sourcecode gestaltet sich<br />
die Erklärung des einfachen Programms.<br />
In den Zeilen 10 und 15 initialisiert es<br />
den sequenziellen Container »std::vector«<br />
und den assoziativen »std::unordered_<br />
map«-Container mit deren Elementen.<br />
Dazu kommen Initialisierer-Listen mit geschweiften<br />
Klammern zum Einsatz. Der<br />
einzige Unterschied zwischen den beiden<br />
Initialisierungen besteht darin, dass der<br />
sequenzielle Container durch Elemente,<br />
der assoziative durch Schlüssel-Wert-<br />
Paare initialisiert wird.<br />
Die Range-basierte For-Schleife macht<br />
in Kombination mit der automatischen<br />
Typableitung durch »auto« die Ausgabe<br />
der Container (Zeilen 11 und 16) kurz<br />
und prägnant. In dem Ausdruck<br />
for ( auto myInt: myVec ) std::cout
Programmieren<br />
www.linux-magazin.de C++11 02/2014<br />
106<br />
01 #include <br />
02 #include <br />
03 #include <br />
04 #include <br />
05 #include <br />
06 #include <br />
07 <br />
08 int main(){<br />
09 <br />
( auto& myInt: myArray )« mittels Referenz<br />
annimmt. Das gilt auch für die<br />
Elemente des Vektors in Zeile 19 und die<br />
des Strings in Zeile 25.<br />
Der Code bildet die Vektorelemente auf<br />
ihre Wurzel und die Buchstaben des<br />
Strings auf ihr großgeschriebenes Pendant<br />
ab. Abbildung 2 zeigt die Ausgabe<br />
des Programms. Die Mächtigkeit der<br />
automatischen Typableitung mit »auto«<br />
10 std::cout
Abbildung 2: Die Range-basierte For-Schleife kann die Elemente sequenzieller<br />
Container an Ort und Stelle modifizieren.<br />
rufe in den Zeilen 39 und 41 geben den<br />
Typ aus (Abbildung 3). Wie die beiden<br />
Schlüsselwörter »auto« und »decltype«<br />
zusammenarbeiten, um den Rückgabetyp<br />
des Funktionstemplate »add« direkt zu<br />
bestimmen, lässt sich am besten anhand<br />
von Abbildung 4 erklären.<br />
Der Ausgangspunkt ist das erste Funktionstemplate,<br />
in dem der fehlende Rückgabetyp<br />
durch drei Fragezeichen »???«<br />
angedeutet ist. In dem anschließenden<br />
modifizierten Funktionstemplate leitet<br />
Abbildung 3: Verschiedene<br />
Anwendungen von »auto«.<br />
»auto« (1) den so genannten verzögerten<br />
Rückgabetyp ein – verzögert, da dieser<br />
erst mit dem Pfeil (2) folgt. Dabei ermittelt<br />
das Schlüsselwort »decltype« (3) aus<br />
dem Ausdruck »fir + sec« (4) den konkreten<br />
Typ des Rückgabewerts.<br />
Zugegeben, die Syntax ist zwar mächtig,<br />
aber redundant. Schließlich muss der<br />
Programmierer im »decltype«-Ausdruck<br />
den Ausdruck hinter der Return-Anweisung<br />
nochmals angeben. Das wird sich<br />
aber mit C++14 ändern.<br />
2014 wird ein wichtiges Jahr für die<br />
Weiterentwicklung von C++11. Mit dem<br />
Standard C++14 werden die Neuerungen<br />
aus C++11 den letzten Feinschliff erhalten.<br />
Das betrifft sowohl die Kernsprache<br />
mit generischen Lambda-Funktionen<br />
und der vereinfachten Ermittlung des<br />
Rückgabetyps einer Funktion als auch<br />
die neue Multithreading-Funktionalität<br />
mit Reader-Writer-Locks und die Standardbibliothek.<br />
Beispielsweise wird der<br />
Umgang mit Smart Pointern und Tupeln<br />
mächtiger. Grund genug, um im nächsten<br />
Artikel dieser Reihe in die C++-Kristallkugel<br />
zu schauen und einen Blick in die<br />
Zukunft zu wagen. (mhu) n<br />
Infos<br />
[1] Rainer Grimm, „Geschwindigkeit zählt“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 12/13, S. 100<br />
[2] »decltype«: [http:// en. cppreference. com/<br />
w/ cpp/ language/ decltype]<br />
C++11 02/2014<br />
Programmieren<br />
www.linux-magazin.de<br />
107<br />
1<br />
template <br />
??? add(T1 fir, T2 sec){<br />
return fir + sec;<br />
}<br />
template <br />
auto add(T1 fir, T2 sec) -> decltype(fir + sec){<br />
return fir + sec; 2 3 4<br />
}<br />
Abbildung 4: Mit dem Schlüsselwort »auto« lässt sich der Typ automatisch bestimmen. In C++11 ist der dazu<br />
erforderliche Code allerdings noch ein wenig redundant.<br />
Der Autor<br />
Rainer Grimm arbeitet als<br />
Software-Architekt und<br />
Gruppenleiter bei der Metrax<br />
GmbH in Rottweil. Insbesondere<br />
die Software auf<br />
den Defibrillatoren ist ihm<br />
eine Herzensangelegenheit. Im Dezember 2011 ist<br />
sein Buch „C++11: Der Leitfaden für Programmierer<br />
zum neuen Standard“ im Verlag Addison-Wesley<br />
erschienen.
Service<br />
www.linux-magazin.de IT-Profimarkt 02/2014<br />
108<br />
PROFI<br />
MARKT<br />
Sie fragen sich, wo Sie maßgeschneiderte<br />
<strong>Linux</strong>-Systeme und kompetente<br />
Ansprechpartner zu Open-Source-Themen<br />
finden? Der IT-Profimarkt weist Ihnen<br />
als zuverlässiges Nachschlagewerk<br />
den Weg. Die hier gelisteten Unternehmen<br />
beschäftigen Experten auf ihrem<br />
Gebiet und bieten hochwertige Produkte<br />
und Leistungen.<br />
Die exakten Angebote jeder Firma entnehmen<br />
Sie deren Homepage. Der ersten<br />
Orientierung dienen die Kategorien<br />
Hardware, Software, Seminaranbieter,<br />
Systemhaus, Netzwerk/TK und Schulung/Beratung.<br />
Der IT-Profimarkt-Eintrag<br />
ist ein Service von <strong>Linux</strong>-<strong>Magazin</strong><br />
und <strong>Linux</strong>User.<br />
Online-Suche<br />
Besonders bequem finden Sie einen<br />
<strong>Linux</strong>-Anbieter in Ihrer Nähe über die<br />
neue Online-Umkreis-Suche unter:<br />
[http://www.it-profimarkt.de]<br />
Informationen<br />
fordern Sie bitte an bei:<br />
Medialinx AG<br />
Anzeigenabteilung<br />
Putzbrunner Str. 71<br />
D-81739 München<br />
Tel.: +49 (0)89/99 34 11-23<br />
Fax: +49 (0)89/99 34 11-99<br />
E-Mail: anzeigen@linux-magazin.de<br />
IT-Profimarkt – Liste sortiert nach Postleitzahl<br />
1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />
4= Fachliteratur 4= Seminaranbieter 5 = Software 5 = Software 6 = Schulung/Beratung 6 = Firma Anschrift Telefon Web 1 2 3 4 5 6<br />
Schlittermann internet & unix support 01099 Dresden, Tannenstr. 2 0351-802998-1 www.schlittermann.de √ √ √ √<br />
imunixx GmbH UNIX consultants 01468 Moritzburg, Heinrich-Heine-Str. 4 0351-83975-0 www.imunixx.de √ √ √ √ √<br />
Heinlein Support GmbH 10119 Berlin, Schwedter Straße 8/9b 030-405051-0 www.heinlein-support.de √ √ √ √ √<br />
TUXMAN <strong>Computer</strong> 10369 Berlin, Anton-Saefkow-Platz 8 030-97609773 www.tuxman.de √ √ √ √ √<br />
Compaso GmbH 10439 Berlin, Driesener Strasse 23 030-3269330 www.compaso.de √ √ √ √ √<br />
elego Software Solutions GmbH 13355 Berlin, Gustav-Meyer-Allee 25 030-2345869-6 www.elegosoft.com √ √ √ √<br />
verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-4610-0 www.verion.de √ √ √<br />
Logic Way GmbH 19061 Schwerin, Hagenower Str. 73 0385-39934-48 www.logicway.de √ √ √ √<br />
Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de √ √ √ √ √<br />
JEL Ingenieurbuero 23911 Einhaus, Hauptstr. 7 04541-8911-71 www.jeltimer.de √<br />
talicom GmbH<br />
30169 Hannover,<br />
Calenberger Esplanade 3<br />
0511-123599-0 www.talicom.de √ √ √ √ √<br />
teuto.net Netzdienste GmbH 33602 Bielefeld, Niedenstr. 26 0521-96686-0 www.teuto.net √ √ √ √ √<br />
LINET Services GmbH 38118 Braunschweig, Cyriaksring 10a 0531-180508-0 www.linet-services.de √ √ √ √ √ √<br />
beitco | behrens it-consulting<br />
38154 Königslutter am Elm,<br />
Westernstr. 25<br />
04435-9537330-0 www.beitco.de √ √ √ √ √<br />
OpenIT GmbH 40599 Düsseldorf, In der Steele 33a-41 0211-239577-0 www.OpenIT.de √ √ √ √ √<br />
<strong>Linux</strong>-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de √ √ √ √ √<br />
<strong>Linux</strong>hotel GmbH 45279 Essen, Antonienallee 1 0201-8536-600 www.linuxhotel.de √<br />
OpenSource Training Ralf Spenneberg 48565 Steinfurt, Am Bahnhof 3-5 02552-638755 www.opensourcetraining.de<br />
Intevation GmbH 49074 Osnabrück, Neuer Graben 17 0541-33508-30 intevation.de √ √ √ √<br />
Sigs Datacom GmbH 53842 Troisdorf, Lindlaustraße 2c 02241-2341-201 sigs-datacom.de √<br />
uib gmbh 55118 Mainz, Bonifaziusplatz 1b 06131-27561-0 www.uib.de √ √ √ √<br />
LISA GmbH 55411 Bingen, Elisenhöhe 47 06721-49960 www.lisa-gmbh.de √ √ √ √ √<br />
GONICUS GmbH 59755 Arnsberg, Moehnestr. 55 02932-9160 www.gonicus.com √ √ √ √ √<br />
saveIP GmbH 64283 Darmstadt, Saalbaustr. 8-10 06151-666266 www.saveip.de √ √ √ √ √<br />
<strong>Linux</strong>Haus Stuttgart<br />
Manfred Heubach EDV und Kommunikation<br />
Waldmann EDV Systeme + Service<br />
70565 Stuttgart,<br />
Hessenwiesenstrasse 10<br />
0711-2851905 www.linuxhaus.de √ √ √ √ √<br />
73728 Esslingen, Hindenburgstr. 47 0711-4904930 www.heubach-edv.de √ √ √ √<br />
74321 Bietigheim-Bissingen, Pleidelsheimer<br />
Str. 25<br />
IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />
07142-21516 www.waldmann-edv.de √ √ √ √ √<br />
√<br />
(S.110)
Seminare<br />
IT-Onlinetrainings<br />
MEDIALINX<br />
Mit Experten lernen. IT-ACADEMY<br />
IT-Sicherheit Grundlagen<br />
mit Prof. Dr.<br />
Tobias Eggendorfer,<br />
Hochschule<br />
Ravensburg-Weingarten<br />
299 €<br />
www.medialinx-academy.de<br />
1-9-Anzeige-IT-Sicherheit-Grundlagen.indd 1<br />
02.08.2013 11:52:51 Uhr
Service<br />
www.linux-magazin.de IT-Profimarkt Markt 02/2014<br />
110<br />
IT-Profimarkt/Seminare<br />
IT-Profimarkt – Liste sortiert nach Postleitzahl (Fortsetzung von S. 108)<br />
Firma Anschrift Telefon Web 1 2 3 4 5 6<br />
in-put Das <strong>Linux</strong>-Systemhaus 76133 Karlsruhe, Moltkestr. 49 0721-6803288-0 www.in-put.de √ √ √ √ √ √<br />
Bodenseo 78224 Singen, Pomeziastr. 9 07731-1476120 www.bodenseo.de √ √ √<br />
<strong>Linux</strong> Information Systems AG 81739 München, Putzbrunnerstr. 71 089-993412-0 www.linux-ag.com √ √ √ √ √<br />
<strong>Linux</strong>Land International GmbH 81739 München, Putzbrunnerstr. 71 089-99341441 www.linuxland.de √ √ √ √ √ √<br />
Synergy Systems GmbH 81829 München, Konrad-Zuse-Platz 8 089-89080500 www.synergysystems.de √ √ √ √ √<br />
B1 Systems GmbH 85088 Vohburg, Osterfeldstrasse 7 08457-931096 www.b1-systems.de √ √ √ √ √<br />
ATIX AG 85716 Unterschleißheim, Einsteinstr. 10 089-4523538-0 www.atix.de √ √ √ √ √ √<br />
Tuxedo <strong>Computer</strong>s GmbH 86343 Königsbrunn , Zeppelinstr. 3 0921 / 16 49 87<br />
87 - 0<br />
OSTC Open Source Training and<br />
Consulting GmbH<br />
90425 Nürnberg,<br />
Waldemar-Klink-Str. 10<br />
www.linux-onlineshop.de √ √ √ √<br />
0911-3474544 www.ostc.de √ √ √ √ √ √<br />
Dipl.-Ing. Christoph Stockmayer GmbH 90571 Schwaig, Dreihöhenstr. 1 0911-505241 www.stockmayer.de √ √ √<br />
pascom - Netzwerktechnik GmbH &<br />
Co.KG<br />
94469 Deggendorf, Berger Str. 42 0991-270060 www.pascom.net √ √ √ √ √<br />
RealStuff Informatik AG CH-3007 Bern, Chutzenstrasse 24 0041-31-3824444 www.realstuff.ch √ √ √<br />
CATATEC CH-3013 Bern, Dammweg 43 0041-31-3302630 www.catatec.ch √ √ √<br />
Syscon Systemberatungs AG CH-8003 Zürich, Zweierstrasse 129 0041-44-4542010 www.syscon.ch √ √ √ √ √<br />
Würth Phoenix GmbH IT-39100 Bozen, Kravoglstraße 4 0039 0471 56 41 11 www.wuerth-phoenix.com √ √ √ √<br />
IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />
n
Embedded <strong>Linux</strong><br />
Beratung - Schulung - Entwicklung<br />
Imagery: Earth by NASA / The Blue Marble Project - http://visibleearth.nasa.gov | Penguin Variant by Larry Ewing, Simon Budig & Anja Gerwinski<br />
<strong>Linux</strong> Portierung - Web - AJAX - Qt - Echtzeit<br />
www.pengutronix.de<br />
+49 (5121) 20 69 17 - 0<br />
Einfach auf LinuX<br />
umstEigEn!<br />
4 x im Jahr kompaktes <strong>Linux</strong>-Know-how - IMMER mit 2 DVDs<br />
15%<br />
sparen<br />
EASYLINUX-JAHRES-ABO<br />
NUR 33,30E*<br />
JEtzt gratis<br />
zum abo: ❱• aktuelle ausgabe<br />
*Preise außerhalb Deutschlands<br />
siehe www.easylinux.de/abo<br />
raspberry Pi geek<br />
• Easy<strong>Linux</strong> mega-archiv Jahres-DVD<br />
2012 (alle artikel aus<br />
10 Jahren EL auf einer DVD)<br />
(Wert 24,75 E, solange Vorrat reicht)<br />
JETZT GLEICH BESTELLEN!<br />
www.easylinux.de/abo<br />
oder per Telefon 07131 / 2707 274<br />
Sie können die Bestellung des Easy<strong>Linux</strong> Abos innerhalb von 14 Tagen per Fax, Email oder Brief widerrufen.<br />
Sie möchten das Abo nach dem ersten Jahr nicht länger beziehen? Kein Problem. Sie können nach einem Jahr<br />
jederzeit und fristlos kündigen. Geld für bereits bezahlte, aber noch nicht gelieferte Ausgaben erhalten Sie zurück.<br />
Garantiert!<br />
EL_1-4_DIN_Abo_ArchivDVD_3010-2013.indd 1<br />
30.10.2013 14:40:44 Uhr
Service<br />
www.linux-magazin.de Inserenten 02/2014<br />
112<br />
Inserentenverzeichnis<br />
1blu AG http://www.1blu.de 9<br />
ADMIN http://www.admin-magazin.de 77<br />
Android User GY http://www.android-user.de 73<br />
CANDAN THE WEB COMPANY http://www.canhost.de 29<br />
ConSol Software GmbH http://www.consol.de 15<br />
Contabo http://www.contabo.de 45, 49<br />
Deutsche Messe AG http://www.cebit.de 19<br />
Easy<strong>Linux</strong> http://www.easylinux.de 111<br />
embedded projects GmbH http://www.embedded-projects.net 111<br />
Fernschule Weber GmbH http://www.fernschule-weber.de 109<br />
GIMP-<strong>Magazin</strong> http://www.gimp-magazin.de 21<br />
Heinlein Support GmbH http://www.heinlein-support.de 2<br />
Holger Jakobs, IT-Beratung und ‐Schulung http://www.plausibolo.de 109<br />
Ico Innovative <strong>Computer</strong> GmbH http://www.ico.de 37<br />
<strong>Linux</strong>-Hotel http://www.linuxhotel.de 7<br />
<strong>Linux</strong>-<strong>Magazin</strong> http://www.linux-magazin.de 91, 99, 115<br />
<strong>Linux</strong>-<strong>Magazin</strong> Online http://www.linux-magazin.de 107<br />
<strong>Linux</strong>User http://www.linuxuser.de 97<br />
Medialinx AG http://www.medialinx-gruppe.de 11, 54<br />
Medialinx IT-Academy http://www.medialinx-academy.de 109, 110<br />
Open Source Press GmbH http://www.opensourcepress.de 89<br />
Org.-Team der Chemnitzer <strong>Linux</strong>-Tage 17<br />
Pengutronix e.K. http://www.pengutronix.de 111<br />
PlusServer AG http://www.plusserver.de 13, 39, 63,<br />
75, 85, 95<br />
Raspberry Pi Geek http://www.raspberry-pi-geek.de 27<br />
Schlittermann internet & unix support http://schlittermann.de 111<br />
Stockmayer GmbH http://www.stockmayer.de 109<br />
Thomas Krenn AG http://www.thomas-krenn.com 116<br />
Webtropia http://www.webtropia.com 25, 35<br />
Einem Teil dieser Ausgabe liegt eine Beilage der Firma HACKATTACK IT SECURITY<br />
GmbH (http://www.hackattack.com) bei. Wir bitten unsere Leser um freundliche<br />
Beachtung.<br />
Veranstaltungen<br />
18.01.2014<br />
Education Freedom Day<br />
Weltweit<br />
01.-02.02.2014<br />
FOSDEM’14<br />
ULB Campus Solbosch<br />
1050 Brüssel, Belgien<br />
https://fosdem.org/2014/<br />
17.-18.02.2014<br />
SEP to the Top<br />
Tegernsee, Germany<br />
http://www.sep.de<br />
17.-20.02.2014<br />
USENIX FAST ’14<br />
Santa Clara, CA, USA<br />
https://www.usenix.org/conference/fast14<br />
21.-23.02.2014<br />
SCALE 12x<br />
Los Angeles, CA, USA<br />
https://www.socallinuxexpo.org/scale12x<br />
25.-27.02.2014<br />
Wearables DevCon 2014<br />
San Francisco, CA, USA<br />
http://wearablesdevcon.com<br />
26.-27.02.2014<br />
Cloud Expo Europe 2014<br />
London, UK<br />
http://www.cloudexpoeurope.com<br />
26.-27.02.2014<br />
Data Centre World<br />
London, UK<br />
http://www.datacentreworld.com<br />
31.03.-02.04.2014<br />
Big Data TechCon<br />
Boston, MA, USA<br />
http://www.bigdatatechcon.com<br />
02.-04.04.2014<br />
USENIX NSDI ’14<br />
Seattle, WA, USA<br />
https://www.usenix.org/conference/nsdi14<br />
02.-05.04.2014<br />
LibreGraphicsMeeting 2014<br />
Universität Leipzig<br />
04109 Leipzig<br />
http://libregraphicsmeeting.org/2014/<br />
26.-27.04.2014<br />
<strong>Linux</strong>Fest Northwest 2014<br />
Bellingham, WA, USA<br />
http://www.linuxfestnorthwest.org<br />
29.04.-01.05.2014<br />
Android Builders Summit<br />
San Jose, CA, USA<br />
events.linuxfoundation.org/events/android-builderssummit<br />
29.04.-01.05.2014<br />
Embedded <strong>Linux</strong> Conference 2014<br />
San Jose, CA, USA<br />
http://events.linuxfoundation.org/events/embeddedlinux-conference<br />
05.-06.05.2014<br />
ELS’14 – 7th European Lisp Symposium<br />
Paris<br />
http://www.european-lisp-symposium.org<br />
12.05.2014<br />
Mailserver-Konferenz 2013<br />
Berlin, Deutschland<br />
http://www.heinlein-support.de/mailserver-konferenz<br />
13.-14.05.2014<br />
Secure <strong>Linux</strong> Administration Conference 2013<br />
Berlin, Deutschland<br />
http://www.heinlein-support.de/slac<br />
27.-30.05.2014<br />
Android DevCon 2014<br />
Boston, MA, USA<br />
www.andevcon.com<br />
02.-03.06.2014<br />
Automotive <strong>Linux</strong> Summit<br />
Tokyo, Japan<br />
http://events.linuxfoundation.org/events/automotivelinux-summit-spring<br />
04.-06.06.2014<br />
CloudOpen Japan 2014<br />
Tokyo, Japan<br />
http://events.linuxfoundation.org/events/cloudopenjapan<br />
04.-06.06.2014<br />
<strong>Linux</strong>Con Japan 2014<br />
Tokyo, Japan<br />
http://events.linuxfoundation.org/events/linuxcon-japan<br />
13.-14.06.2014<br />
Texas <strong>Linux</strong> Fest 2014<br />
Austin, Texas, USA<br />
http://2014.texaslinuxfest.org<br />
23.-24.06.2014<br />
Enterprise End User Summit<br />
New York, NY, USA<br />
http://events.linuxfoundation.org/events/enterpriseend-user-summit<br />
23.-25.06.2014<br />
Cloud DevCon: AWS Developer Con 2014<br />
San Francisco, CA, USA<br />
http://www.clouddevcon.net<br />
20.-22.08.2014<br />
CloudOpen North America 2014<br />
Chicago, IL, USA<br />
http://events.linuxfoundation.org/events/cloudopennorth-america<br />
20.-22.08.2014<br />
<strong>Linux</strong>Con North America 2014<br />
Chicago, IL, USA<br />
http://events.linuxfoundation.org/events/linuxconnorth-america<br />
20.-22.08.2014<br />
USENIX Security ’14<br />
San Diego, CA, USA<br />
https://www.usenix.org/conference/usenixsecurity14<br />
13.-15.10.2014<br />
CloudOpen Europe 2014<br />
Düsseldorf, Germany<br />
http://events.linuxfoundation.org/events/cloudopeneurope
Impressum<br />
<strong>Linux</strong>-<strong>Magazin</strong> eine Publikation der <strong>Linux</strong> New Media, einem<br />
Geschäftsbereich der Medialinx AG<br />
Redaktionsanschrift Putzbrunner Str. 71<br />
81739 München<br />
Tel.: 089/993411-0<br />
Fax: 089/993411-99 oder -96<br />
Internet<br />
www.linux-magazin.de<br />
E-Mail<br />
redaktion@linux-magazin.de<br />
Geschäftsleitung<br />
Chefredakteur<br />
stv. Chefredakteure<br />
Redaktionsltg. Online<br />
Brian Osborn (Vorstand), bosborn@medialinx-gruppe.de<br />
Hermann Plank (Vorstand), hplank@medialinx-gruppe.de<br />
Jan Kleinert (V.i.S.d.P.), jkleinert@linux-magazin.de (jk)<br />
Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />
Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Print- und Onlineredaktion<br />
Aktuell, Forum, Software, Kristian Kissling, kkissling@linux-magazin.de (kki)<br />
Programmierung Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Sysadmin, Know-how Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />
Ständige Mitarbeiter Zack Brown, Mela Eckenfels, Heike Jurzik (hej), Charly<br />
Kühnast, Martin Loschwitz, Michael Schilli, Tim Schürmann,<br />
Mark Vogelsberger, Uwe Vollbracht<br />
Schlussredaktion<br />
Grafik<br />
Bildnachweis<br />
DELUG-DVD<br />
Chefredaktionen<br />
International<br />
Produktion<br />
Onlineshop<br />
Abo-Infoseite<br />
Abonnenten-Service<br />
ISSN 1432 – 640 X<br />
Jürgen Manthey<br />
Mike Gajer<br />
xhoch4, München (Titel-Illustration)<br />
123RF.com, Fotolia.de, Photocase.com, Pixelio.de und andere<br />
Thomas Leichtenstern, tleichtenstern@linux-magazin.de (tle)<br />
<strong>Linux</strong> <strong>Magazin</strong>e International<br />
Joe Casad (jcasad@linux-magazine.com)<br />
<strong>Linux</strong> <strong>Magazin</strong>e Poland<br />
Artur Skura (askura@linux-magazine.pl)<br />
<strong>Linux</strong> <strong>Magazin</strong>e Spain<br />
Paul C. Brown (pbrown@linux-magazine.es)<br />
<strong>Linux</strong> <strong>Magazin</strong>e Brasil<br />
Rafael Peregrino (rperegrino@linuxmagazine.com.br)<br />
Christian Ullrich, cullrich@linux-magazin.de<br />
www.medialinx-shop.de<br />
www.linux-magazin.de/Produkte<br />
A.B.O. Verlagservice GmbH<br />
Gudrun Blanz (Teamleitung)<br />
abo@medialinx-gruppe.de<br />
Tel.: +49-(0)7131-2707-274<br />
Fax: +49-(0)7131-2707-78-601<br />
Preise Print Deutschland Österreich Schweiz Ausland EU<br />
No-Media-Ausgabe 4 6,40 4 7,05 Sfr 12,80 (siehe Titel)<br />
DELUG-DVD-Ausgabe 4 8,50 4 9,35 Sfr 17,— (siehe Titel)<br />
Jahres-DVD (Einzelpreis) 4 14,95 4 14,95 Sfr 18,90 4 14,95<br />
Jahres-DVD (zum Abo 1 ) 4 6,70 4 6,70 Sfr 8,50 4 6,70<br />
Mini-Abo (3 Ausgaben) 4 3,— 4 3,— Sfr 4,50 4 3,—<br />
Jahresabo No Media 4 65,20 4 71,90 Sfr 107,50 4 84,60<br />
Jahresabo DELUG-DVD 4 87,90 4 96,90 Sfr 142,80 4 99,90<br />
Preise Digital Deutschland Österreich Schweiz Ausland EU<br />
Heft-PDF Einzelausgabe 4 6,40 4 6,40 Sfr 8,30 4 6,40<br />
DigiSub (12 Ausgaben) 4 65,20 4 65,20 Sfr 84,80 4 65,20<br />
DigiSub (zum Printabo) 4 12,— 4 12,— Sfr 12,— 4 12,—<br />
HTML-Archiv (zum Abo 1 ) 4 12,— 4 12,— Sfr 12,— 4 12,—<br />
Preise Kombiabos Deutschland Österreich Schweiz Ausland EU<br />
Mega-Kombi-Abo 2 4 143,40 4 163,90 Sfr 199,90 4 173,90<br />
Profi-Abo 3 4 181,90 4 198,80 Sfr 235,90 4 219,90<br />
1<br />
nur erhältlich in Verbindung mit einem Jahresabo Print oder Digital<br />
2<br />
mit <strong>Linux</strong>User-Abo (DVD) und beiden Jahres-DVDs, inkl. DELUG-Mitgliedschaft (monatl.<br />
DELUG-DVD)<br />
3<br />
mit ADMIN-Abo und beiden Jahres-DVDs<br />
Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises<br />
oder einer aktuellen Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei<br />
Verlän gerung neu zu erbringen. Andere Abo-Formen, Ermäßigungen im Ausland etc.<br />
auf Anfrage.<br />
Adressänderungen bitte umgehend mitteilen, da Nachsendeaufträge bei der Post nicht<br />
für Zeitschriften gelten.<br />
Pressemitteilungen<br />
Marketing und Vertrieb<br />
Mediaberatung D, A, CH<br />
presse-info@linux-magazin.de<br />
Petra Jaser, pjaser@linux-magazin.de<br />
Tel.: +49 (0)89 / 99 34 11 – 24<br />
Fax: +49 (0)89 / 99 34 11 – 99<br />
Michael Seiter, mseiter@linux-magazin.de<br />
Tel.: +49 (0)89 / 99 34 11 – 23<br />
Mediaberatung USA Ann Jesse, ajesse@linux-magazine.com<br />
und weitere Länder Tel.: +1 785 841 8834<br />
Darrah Buren, dburen@linux-magazine.com<br />
Tel.:+1 785 856 3082<br />
Pressevertrieb<br />
Druck<br />
Es gilt die Anzeigen-Preisliste vom 01.01.2013.<br />
MZV Moderner Zeitschriften Vertrieb GmbH & Co. KG<br />
Ohmstraße 1, 85716 Unterschleißheim<br />
Tel.: 089/31906-0, Fax: 089/31906-113<br />
Vogel Druck GmbH, 97204 Höchberg<br />
Der Begriff Unix wird in dieser Schreibweise als generelle Bezeichnung für die Unixähnlichen<br />
Betriebssysteme verschiedener Hersteller benutzt. <strong>Linux</strong> ist eingetragenes<br />
Marken zeichen von Linus Torvalds und wird in unserem Markennamen mit seiner<br />
Erlaubnis verwendet.<br />
Eine Haftung für die Richtigkeit von Veröffentlichungen kann trotz sorgfältiger Prüfung<br />
durch die Redaktion vom Verlag nicht übernommen werden. Mit der Einsendung von<br />
Manus kripten gibt der Verfasser seine Zustimmung zum Abdruck. Für unverlangt<br />
eingesandte Manuskripte kann keine Haftung übernommen werden.<br />
Das Exklusiv- und Verfügungsrecht für angenommene Manuskripte liegt beim Verlag. Es<br />
darf kein Teil des Inhalts ohne ausdrückliche schriftliche Genehmigung des Verlags in<br />
irgendeiner Form vervielfältigt oder verbreitet werden.<br />
Copyright © 1994 – 2014 Medialinx AG<br />
Impressum 02/2014<br />
Service<br />
www.linux-magazin.de<br />
113<br />
Krypto-Info<br />
GnuPG-Schlüssel der <strong>Linux</strong>-<strong>Magazin</strong>-Redaktion:<br />
pub 1024D/44F0F2B3 2000-05-08 Redaktion <strong>Linux</strong>-<strong>Magazin</strong><br />
<br />
Key fingerprint = C60B 1C94 316B 7F38 E8CC E1C1 8EA6 1F22 44F0 F2B3<br />
Public-Key der DFN-PCA:<br />
pub 2048R/7282B245 2007-12-12,<br />
DFN-PGP-PCA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />
<br />
Key fingerprint = 39 D9 D7 7F 98 A8 F1 1B 26 6B D8 F2 EE 8F BB 5A<br />
PGP-Zertifikat der DFN-User-CA:<br />
pub 2048R/6362BE8B (2007-12-12),<br />
DFN-PGP-User-CA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />
<br />
Key fingerprint = 30 96 47 77 58 48 22 C5 89 2A 85 19 9A D1 D4 06<br />
Root-Zertifikat der CAcert:<br />
Subject: O=Root CA, OU=http://www.cacert.org, CN=CA Cert Signing Authority/<br />
Email=support@cacert.org<br />
SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33<br />
MD5 Fingerprint=A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B<br />
GPG-Schlüssel der CAcert:<br />
pub 1024D/65D0FD58 2003-07-11 [expires: 2033-07-03]<br />
Key fingerprint = A31D 4F81 EF4E BD07 B456 FA04 D2BB 0D01 65D0 FD58<br />
uid CA Cert Signing Authority (Root CA) <br />
Autoren dieser Ausgabe<br />
Konstantin Agouros Big Pi is watching you 86<br />
Zack Brown Zacks Kernel-News 20<br />
Mela Eckenfels Gute Geschäfte 56<br />
Rainer Grimm Neue Ausdruckskraft 104<br />
Dominik Honnef Frag die Bots 34<br />
Eva-Katharina Kunst Kern-Technik 90<br />
Charly Kühnast Durchgepustet 65<br />
Martin Loschwitz Oh, oh, oh! 76<br />
Nils Magnus Winterrätsel 80<br />
Hans-Peter Merkel Risiko managen 66<br />
Jürgen Quade Kern-Technik 90<br />
Michael Schilli Gesund im Alter 98<br />
Tim Schürmann PDF im Vollwaschgang 28<br />
Tim Schürmann Wider das Vergessen 40<br />
Christian Solmecke Knackpunkt Privatgerät 82<br />
Daniel Stender Doku-Maschine 50<br />
Uwe Vollbracht Tooltipps 62<br />
Carsten Zerbst Web ohne Knoten 100
Service<br />
www.linux-magazin.de <strong>Vorschau</strong> 02/2013 03/2014 02/2014 01/2013<br />
114<br />
<strong>Vorschau</strong><br />
03/2014 Dachzeile<br />
Erhellendes über Darkmail<br />
© Viktoriya Malova, 123RF.com<br />
Neue Töne aus der Storage-Kiste<br />
NAS, DAS, SAN, I-SCSI, Raid … – die Klänge aus der Klassik-<br />
Disc-Abteilung sind bekannt. Der Schwerpunkt des nächsten<br />
<strong>Linux</strong>-<strong>Magazin</strong>s dagegen lässt es rocken: Nach einem Newcomer-Soloprogramm<br />
unter dem Namen „Red Hat Storage<br />
Server“ und einer wohltemperierten Variation über Deduplizierung<br />
in modernen Dateisystemen kommt die atonale Riak<br />
Cluster Suite zur Aufführung, die einen zu Amazons S3 kompatiblen<br />
Cloudspeicher für Dateien aufbaut.<br />
Der (stilistisch jetzt schon etwas überstrapazierte) musikalische<br />
Reigen schließt mit zwei volkstümlichen Stücken aus<br />
Savanna, einer Kleinstadt in Illinois, und Manila, der philippinische<br />
Hauptstadt. Die unter diesen Namen auftretenden Projekte<br />
tüfteln an stimmigen Storagekomponenten für den aktuellen<br />
Ohrwurm Open Stack.<br />
MAGAZIN<br />
Überschrift<br />
Wenn Phil Zimmerman (PGP) und NSA-Widersacher Ladar Levison<br />
(Lavabit) ihren neuen sicheren Kommunikationsdienst<br />
ins Licht rücken, darf und soll man genau hinschauen. Zwei<br />
<strong>Linux</strong>-<strong>Magazin</strong>-Autoren, sie sind ausgewiesene E-Mail- und<br />
Security-Spezialisten, tun genau das.<br />
Erwärmendes im Meteor<br />
Viele Webprogrammierer halten Meteor für die heißeste Sache<br />
seit Ruby on Rails, weil es auf dem Server und dem Client mit<br />
gleichen APIs hantiert. Das <strong>Linux</strong>-<strong>Magazin</strong> überprüft, wie gut<br />
das Javascript-Framework die Entwickler von Webanwendungen<br />
tatsächlich unterstützt.<br />
Heimleuchtendes für verlorenen Speicher<br />
Seltsam: Egal wie viele RAM-Riegel im Rechner stecken – irgendwann<br />
wird der Speicher immer knapp und die Performance<br />
rutscht in den Keller. Ein Informatik-Professor begibt<br />
sich auf Ursachenforschung in die Niederungen der <strong>Linux</strong>-<br />
Speicherverwaltung und entwickelt eine Gegenstrategie.<br />
Die Ausgabe 03/2014<br />
erscheint am 6. Februar 2014<br />
© Paolo De Santis, 123RF<br />
<strong>Vorschau</strong><br />
auf 02/2014<br />
Die nächste Ausgabe erscheint am 16.01.2014<br />
Absichern und überwachen<br />
Um die eigenen Daten auf dem Rechner zu schützen, gibt es<br />
nur einen Weg: Ein System sauber aufsetzen, alle Einfalls tore<br />
schließen und anschließend den geschaffenen Idealzustand regelmäßig<br />
kontrollieren.<br />
In der Open-Source-Welt finden sich eine ganze Reihe Tools,<br />
die Sie beim Testen des Systems und beim Überwachen im laufenden<br />
Betrieb unterstützen. Wir stellen in der kommenden<br />
Ausgabe eine sinnvolle Sammlung von Werkzeugen vor, die<br />
unter keinen Umständen auf dem System fehlen sollten, wenn<br />
Sie sich vor Eindringlingen schützen möchten.<br />
E-Books verwalten<br />
Der E-Book-Reader Calibre erweist sich nicht nur als ausgezeichnete<br />
Lese-Software für digitale Literatur, er hilft Ihnen<br />
auch beim Verwalten der papierlosen Wälzer, die sonst schnell<br />
in den Tiefen der Verzeichnisse verloren gingen.<br />
Digitales Tagebuch<br />
Ein handgeschriebenes Tagebuch gehört heute zu einer aussterbenden<br />
Art. Wenn Sie Ihr Leben nicht gleich online stellen<br />
möchten, dann bieten digitale Tagebücher wie Liferea und<br />
Rednotebook einen guten Kompromiss.
ADMIN und <strong>Linux</strong>-<strong>Magazin</strong><br />
am Apple Newsstand!<br />
Jetzt NEU!<br />
Jetzt GRATIS<br />
testen!<br />
Alternativ finden Sie alle Titel der Medialinx AG auch bei:<br />
PagePlace, iKiosk, OnlineKiosk und Leserauskunft