26.02.2014 Aufrufe

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!