Linux-Magazin Mission fürs Web (Vorschau)
Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!
Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.
01/12<br />
Anzeige:<br />
STRATO Hosting<br />
Power<br />
Für Anwender mit hohen Ansprüchen<br />
Hosting<br />
strato.de/hosting siehe Seite 86/87<br />
AKTION BIS<br />
31.12.2011!<br />
STR1211_TKS_PowerHosting_120x17 1<br />
23.11.2011 10:40:28 Uhr<br />
Härteste <strong>Linux</strong>-<br />
Nuss der Welt<br />
Der Winterrätsel-Knacker<br />
gewinnt ein HTC Sensation XL S. 94<br />
Bürger-Tools<br />
Wofür Liquid-<br />
Demo cracy-Programme<br />
gut sind S. 68<br />
Deployment<br />
Fog verwaltet und verteilt<br />
System-Images im eigenen<br />
Rechnerpool S. 90<br />
<strong>Mission</strong><br />
<strong>fürs</strong> <strong>Web</strong><br />
Bei welchen Techniken Programmierer<br />
und Admins jetzt einsteigen sollten<br />
■ Grafisch aufregende HTML-5-Anwendungen<br />
mit Canvas, SVG und <strong>Web</strong>sockets S. 28<br />
■ Flow3, ein PHP-Framework mit zeitgemäßer<br />
MVC-Architektur S. 34<br />
■ Javascript-<strong>Web</strong>server Node.js S. 40<br />
■ Sicherheitspannen: Reinfall beim Zufall S. 48<br />
■ Nginx & PHP-FPM beschleunigen Magento-Shop S. 54<br />
■ Profi-Tipps für Panoramafotos S. 60<br />
■ Google-Authenticator-Praxis S. 78<br />
Datendiebstahl-sichere Programme schreiben mit der Java-SE-Security-Bibliothek S. 112<br />
www.linux-magazin.de<br />
Deutschland Österreich Schweiz Benelux Spanien Italien<br />
4 5,95 4 6,70 sfr 11,90 4 7,00 4 7,95 4 7,95<br />
4 192587 305954 01
Managed<br />
Hosting<br />
sicher, flexibel und verfügbar<br />
Profitieren Sie von:<br />
aktueller Clustertechnologie<br />
ISO 27001 zertifiziertem<br />
Hochsicherheits-Datacenter<br />
Hosting direkt am DE-CIX<br />
IPv4 und IPv6 Anbindung<br />
24/7 Service und Support<br />
Entdecken Sie den Unterschied<br />
Professionelles Hosting mit persönlichem<br />
und kompetentem Support.<br />
Individuelle Hostinglösungen vom Server<br />
bis zum Clustersystem. Beratung, Planung<br />
und Service 24/7.<br />
Wir bieten über 10 Jahre Erfahrung in<br />
Hosting und Systemadministration.<br />
Für mehr Performance, Sicherheit und<br />
Verfügbarkeit, jeden Tag, rund um die Uhr.<br />
hostserver.de/hosting<br />
Managed Hosting<br />
zertifiziert nach<br />
ISO 9001 : 2008<br />
0 30 / 420 200 24 hostserver.de<br />
Berlin Marburg Frankfurt am Main
<strong>Web</strong> der Besserung<br />
Login 01/2011<br />
Editorial<br />
Der <strong>Linux</strong>-Kernel war in seiner Anfangszeit alles andere als vollkommen. Der<br />
Stand der Wissenschaft hätte 1991 wirklich etwas anderes vorgesehen als einen<br />
monolithischen Systemkern für den 386-Prozessor. Das prangerte der Betriebssystem-Professor<br />
und Minix-Erfinder Andrew S. Tanenbaum auch bald öffentlich<br />
an. 20 Jahre später aber findet sich das einst so mangelhafte <strong>Linux</strong> unter den<br />
erfolgreichsten Betriebssystemen. Minix dagegen fristet sein Dasein nach wie vor<br />
hauptsächlich in Gelehrtenstuben. Außerdem, so merkte der Kernelentwickler<br />
Alan Cox auf der <strong>Linux</strong>con Europe im Oktober an, hat „sich in der Praxis der<br />
Kernelprogrammierung einiges als falsch herausgestellt, was die akademische<br />
Betriebssystemforschung lange behauptet hat“.<br />
Etwa zur gleichen Zeit wie <strong>Linux</strong> nahm das World Wide <strong>Web</strong> seinen Anfang. Was<br />
Mathias Huber, stellv. Chefredakteur der CERN-Informatiker Tim Berners-Lee vorstellte, war ebenfalls recht unvollkommen.<br />
HTML und HTTP stellten eine wenig niveauvolle Implementierung eines<br />
Hypertext-Systems dar, die viele Wünsche offen ließ. Wie so etwas richtig auszusehen hätte, darüber zerbrachen<br />
sich Wissenschaftler schon seit Jahrzehnten den Kopf. Stellvertretend sei hier das Projekt Xanadu genannt,<br />
das der US-amerikanische Gelehrte Theodor Holm Nelson in den 60er Jahren entwarf.<br />
Während wir heute im WWW-Alltag veraltete Links resigniert akzeptieren, sollten in Xanadu Verweise nie ihre<br />
Gültigkeit verlieren. Außerdem sind sie bidirektional angelegt, enthalten also nicht nur das Wohin, sondern auch<br />
das Woher. Statt Zitate zu kopieren, sollten Xanadu-Anwender sie von der Original-Referenzstelle einbinden, was<br />
sich Transklusion nannte. Mit einer solchen Einbindung geht auch die Vorstellung eines Trans-Copyright einher,<br />
das den Urheber nennt und die Nutzung mit Kleinstbeträgen vergütet. Eine weitere spannende Idee Nelsons<br />
war die Zuordnung der Inhalte in eine öffentliche und in eine private Domäne, die sich aber verknüpfen ließen:<br />
Ein wissenschaftlicher Aufsatz etwa könnte öffentlich sein, die mit einzelnen Passagen verknüpften Notizen<br />
und Aufgabenlisten des Autors dagegen privat.<br />
Wer das WWW schon länger benutzt, der weiß, wie sehr vor allem am Anfang die Realität von einem solchen<br />
Ideal abwich. Doch das einfach gestrickte <strong>Web</strong> lud zum Mitmachen ein, wuchs und entwickelte sich weiter. Bald<br />
gab es Bilder, Formulare und Suchmaschinen. In den vergangenen Jahren haben viele fleißige Programmierer<br />
weitere Mängel der Hypertext-Implementierung behoben: Wenigstens innerhalb eines Wikis verweisen Links<br />
nun auch zurück und Mediendateien werden aus einem übergreifenden Archiv eingebunden. Zudem beschreiben<br />
die Trackbacks der Blogs das Woher von Verweisen.<br />
Die Schwerpunkt-Artikel dieses <strong>Linux</strong>-<strong>Magazin</strong>s sind ein weiterer Beitrag zur Vervollkommnung des unvollkommenen<br />
WWW: <strong>Web</strong>sockets etwa führen bidirektionale Kommunikation zwischen Client und Server ein und<br />
Frameworks wie Flow3 verlagern das Augenmerk des Entwicklers von der Kleinarbeit auf eine höhere Ebene<br />
der Abstraktion. Die bodenständige Sorge um Performance bleibt allerdings weiterhin ein Thema. Doch mit<br />
schlanken <strong>Web</strong>servern wie Node.js und Nginx sowie dem Prozessmanager PHP-FPM gibt es vielversprechende<br />
neue Lösungsansätze. Die <strong>Web</strong>site-Hacks von Tobias Eggendorfer zeigen schließlich, dass die Entwickler neben<br />
aller Freude über neue Features die Sicherheit nicht vernachlässigen dürfen.<br />
Was aus dem Projekt Xanadu wurde? Das komplexe, ehrgeizig konzipierte System hat bisher nur unvollständige<br />
Implementierungen erfahren. Sie hießen daher auch nicht Xanadu, sondern Udanax, und haben keinen größeren<br />
Anwenderkreis erreicht.<br />
www.linux-magazin.de<br />
3
Inhalt<br />
www.linux-magazin.de 01/2012 01/2012<br />
4<br />
In diesen Tagen bricht das <strong>Web</strong> zu neuen Welten auf, die dessen Möglichkeiten sinnvoll erweitern.<br />
Im Browser etwa geben HTML-5-Features wie Canvas und <strong>Web</strong>sockets ihr Debüt. Die<br />
Ausmaße des Flow3-Universums zeichnen sich jetzt ab, und Admins beschleunigen wahlweise<br />
ihre <strong>Web</strong>server mit Node.js oder ihren <strong>Web</strong>shop mit Nginx auf Lichtgeschwindigkeit.<br />
Aktuell<br />
Titelthema: <strong>Web</strong>entwicklung<br />
6 N ew s<br />
n Android 4 auf Pandaboard<br />
n Visio-Import für Open Office<br />
n Sugar CRM 6.3: Archiv und Admin-Tool<br />
n Open Suse 12.1: Snapshots und Cloud<br />
n Zarafa bringt Videokonferenzen<br />
n Viel Neues bei Typo3 4.6<br />
28 HTML-5-GUI-Programmierung<br />
Titel<br />
Client-Server-Anwendungen plus grafische<br />
Oberfläche programmieren mit<br />
HTML 5, Jquery, Visualize und Autobahn.<br />
40 Schneller als Apache<br />
Mit Ereignisorientierung überrascht der<br />
Javascript-basierte <strong>Web</strong>server Node.js<br />
vor allem bei der Performance.<br />
14 Zahlen & Trends<br />
n 38 000 Stellen<br />
für IT-Experten<br />
n Mozilla verliert<br />
Firefox-Designer<br />
n Wirbel um UEFI<br />
n Peter Ganten<br />
neuer OSBA-Chef<br />
n CCC fordert<br />
Offenlegung des<br />
Bundestrojaners<br />
22 Zacks Kernel-News<br />
Das Galaxy Note:<br />
Samsungs Geräte<br />
erobern den Markt.<br />
n Kernel.org: Tross der Rückkehrer<br />
n Virtualbox am Pranger<br />
n Suspend-Daemon für <strong>Linux</strong><br />
n Akku-Patch für PCI-Karten mit ASPM<br />
Aus den Daten der <strong>Web</strong>statistiken erzeugt<br />
Visualize ein anschauliches Balkendiagramm<br />
mit stets aktuellen Werten.<br />
34 Enterprise-Flow<br />
Das PHP-Framework Flow, ursprünglich<br />
als Typo3-Unterbau geplant, macht<br />
Enterprise-<strong>Web</strong>anwen dungen Beine.<br />
Die virtuelle Maschine zeigt die Beispielanwendung<br />
zur Latenzmessung.<br />
48 <strong>Web</strong>sicherheit<br />
Zufallsgeneratoren, Kreditkartennummern<br />
und ein kleines Wunderland.<br />
Zufall oder Hack? Gute Vorhersagbarkeit bedeutet<br />
schlechte Sicherheit.<br />
24 <strong>Linux</strong>con Europe 2011<br />
Rund 900 Besucher drängten zu den<br />
Vorträgen in Prag, um Linus Torvalds<br />
persönlich zu sehen.<br />
Hat die Installation geklappt, zeigt sich dem<br />
Anwender die Startseite von Flow.<br />
54 Schnelleres Shoppen<br />
So geht’s: Nginx und PHP-FPM beschleunigen<br />
Magento-Shops.<br />
<strong>Linux</strong>-Prominenz in Prag: Kernelentwickler<br />
Ted Ts’o (links) und Alan Cox bei einer informellen<br />
Besprechung in der Sitzgruppe.<br />
DELUG-DVD<br />
TOOL<br />
Doppelseitige DVD, Details auf S. 59<br />
Open Suse 12.1<br />
TOOL<br />
TOOL<br />
Das Nürnberger <strong>Linux</strong> in der<br />
32-Bit-Version mit Kernel 3.1<br />
Ubuntu 11.10 Server<br />
TOOL<br />
n Mit Google Authen ti cator und<br />
Node.js als Virtual Appliance<br />
TOOL<br />
n 32- und 64-Bit-ISO-Dateien<br />
TOOL<br />
E-Book gratis.<br />
Denny Carl, „Praxiswissen Ajax“<br />
Mailserver-Konf.<br />
Neues Video-Futter für Admins<br />
Panoramafotos<br />
500 MByte zum Experimentieren
01/2012 01/2012<br />
Inhalt<br />
60 Runde Sache<br />
Wenn Motive oder Unterschiede zwischen<br />
hell und dunkel zu groß sind,<br />
helfen Profi-<strong>Linux</strong>-Tools dem Fotografen<br />
beim Erstellen digitaler Panoramen.<br />
78 Zweifach gesichert<br />
Zwei-Faktor-Authentifizierung muss<br />
nicht kompliziert und teuer sein. Googles<br />
Tool nutzt das Android-Smartphone,<br />
beispielsweise für den SSH-Login.<br />
118 Zettels Trauma<br />
Mike Schilli sagt der Zettelwirtschaft<br />
den Kampf an. Sein virtueller Zettelkasten<br />
synchronisiert automatisch<br />
und funktioniert auch offline.<br />
www.linux-magazin.de<br />
5<br />
Software<br />
Sysadmin<br />
Know-how<br />
59 Einführung<br />
Auf der DELUG-DVD: Suse 12.1, Ubuntu<br />
Server, Node.js, 500 MByte Panorama-<br />
Fotos, ein O’Reilly-E-Book und Videos.<br />
60 <strong>Linux</strong>-HDR-Panoramen<br />
Titel<br />
400 Fotos und ein selbst gebauter Panoramakopf:<br />
Professionelles Stitching und<br />
Rendering mit Hugin, Blender und Co.<br />
77 Einführung<br />
Aus dem Alltag eines Sysadmin: Charly<br />
besucht die Open-Rhein-Ruhr-Konferenz.<br />
78 Googles zwei Faktoren<br />
Titel<br />
Sichere Zwei-Wege-Authentifizierung mit<br />
PAM-Lib und Android-Telefonen.<br />
84 Suse Cloud<br />
Auch die Nürnberger springen auf den<br />
Cloud-Zug auf und bauen auf Open Stack.<br />
104 Kern-Technik 60<br />
Der Emulator Qemu ermöglicht plattformunabhängiges<br />
Kernel- und Modul-<br />
Debugging auf Hochsprachen-Niveau.<br />
Programmieren<br />
110 Bash Bashing – Folge 18<br />
Diesmal: Bash Completion, die Auto vervollständigung<br />
der interaktiven Shell.<br />
112 Krypto mit Java<br />
Titel<br />
Die Java-SE-Security-Bibliothek gibt dem<br />
Programmierer alles an die Hand, was er<br />
für sichere Anwendungen braucht.<br />
Simple Bedienung macht Hugin zum gelungenen<br />
Tool für den ambitionierten Hobbyfotografen.<br />
68 Bitparade<br />
Titel<br />
Adhocracy, Liquid Feedback, Liquidizer<br />
und - außer Konkurrenz - Votorola. Was<br />
taugen Liquid-Democracy-Tools?<br />
Der Suse Manager kommt mit Android-App.<br />
90 Deployment mit Fog<br />
Titel<br />
Das Admin-System verwaltet Unternehmens-PCs<br />
und verteilt Software.<br />
Forum<br />
Die Java SE Library bringt Datenverschlüsselung,<br />
Prüfsummen und Signaturen.<br />
Liquidizer bietet dem Anwender sieben Möglichkeiten,<br />
seine Präferenzen auszudrücken.<br />
Immer im Blick: Das aktuelle Stimmungsbild.<br />
74 Tooltipps<br />
GUIs für eigene Skripte mit Gtkdialog. Procmeter<br />
überwacht »/proc«, Fdupe doppelte<br />
Dateien. Dazu RSS Tail, Snarsshe für den<br />
Remote-Sync und der <strong>Web</strong>server Monkey.<br />
94 Winterrätsel<br />
Titel<br />
Das große<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
Winterrätsel für<br />
lange Abende.<br />
96 Recht<br />
Der BGH zu Hosting-Providern und Blogs.<br />
100 Bücher<br />
„<strong>Web</strong>-Sicherheit“ und<br />
„Metasploit“.<br />
102 Leserbriefe<br />
Auf den Punkt gebracht.<br />
Zu gewinnen: Ein HTC<br />
Sensation XL<br />
118 Perl-Snapshot<br />
Mit Evernote, Facebooks Thrift-Library<br />
und ein wenig Skripting verhindert<br />
Perlmeister Schilli, dass ein Windstoß<br />
seine Notizen durcheinander bringt.<br />
Service<br />
3 Editorial<br />
124 IT-Profimarkt<br />
. 128 Veranstaltungen<br />
. 128 Inserenten<br />
. 129 Impressum<br />
130 <strong>Vorschau</strong>
Aktuell<br />
www.linux-magazin.de News 01/2012<br />
6<br />
News<br />
Transformer Prime mit Quadcore-Prozessor und Tegra 3<br />
Mit optionaler Dockingtastatur mutiert das<br />
Transformer zu einer Art Notebook.<br />
Asus hat ein 10-Zoll-<br />
Tablet auf Quadcore-<br />
Basis mit Android als<br />
Betriebssystem vorgestellt.<br />
Der Hersteller<br />
kann sich rühmen, das<br />
erste Gerät mit Nvidias<br />
Tegra-3-Quadcore-<br />
Prozessor (je 1,5 GHz)<br />
plus GPU ankündigen<br />
zu können. Das Besondere<br />
an den Transformer-Modellen<br />
ist<br />
die optionale Dockingstation,<br />
die das Tablet<br />
zum Notebook mit<br />
Tastatur macht.<br />
Der Verkaufsstart ist<br />
laut Ankündigung<br />
noch offen: Ein genaues<br />
Verfügbarkeitsdatum<br />
für Deutschland und Österreich<br />
wird zu einem späteren<br />
Zeitpunkt bekannt gegeben.<br />
Preise stehen dagegen schon<br />
fest: Das Eee Pad Transformer<br />
Prime wird in Deutschland<br />
als 64-GByte-Modell ohne Dockingstation<br />
und als 32-GByte-<br />
Bundle inklusive Dockingtastatur<br />
zu einem empfohlenen<br />
Preis von jeweils 600 Euro<br />
erhältlich sein.<br />
Das Display soll besonders<br />
brillant sein und mit dem inzwischen<br />
häufig eingesetzten<br />
Gorilla-Glas auch bruchsicher.<br />
Zur Ausstattung gehören eine<br />
8-Megapixel-Kamera mit LED-<br />
Blitz und auf der Vorderseite<br />
eine 1,2-Megapixel-Kamera.<br />
Die große Kamera kann Full-<br />
HD-Videos mit 1080 p aufnehmen,<br />
was laut Asus im<br />
Tablet-Bereich ebenfalls ein<br />
Novum ist. USB, ein Micro-<br />
SD-Kartenleser und ein Micro-HDMI-Port<br />
zählen zu den<br />
Schnittstellen.<br />
Die Akkulaufzeit soll im angedockten<br />
Zustand 18 Stunden<br />
betragen, ein bislang unerreichter<br />
Wert bei Tablets, wie<br />
Asus herausgefunden hat. Mit<br />
knapp mehr als 8 Millimetern<br />
Höhe und 586 Gramm ist das<br />
Gerät ein dünnes Leichtgewicht.<br />
Amethyst-Grau und<br />
Champagner-Gold lautet die<br />
Farbauswahl.<br />
n<br />
Fedora 16 mit Kernel 3.1 und Cloud-Tools<br />
Red Hats Community-<strong>Linux</strong><br />
Fedora ist in Version 16 mit<br />
dem Codenamen „Verne“ erschienen.<br />
Während der Nickname<br />
sich auf den französischen<br />
Autor Jules Verne bezieht,<br />
widmen die Entwickler<br />
die Version ausdrücklich dem<br />
kürzlich verstorbenen Unix-<br />
Erfinder Dennis Ritchie.<br />
Fedora 16 bringt mit Gnome<br />
3.2 und KDE 4.7 frische Versionen<br />
der Desktopumgebungen.<br />
Im System stecken zudem<br />
Kernel 3.1 und Grub 2.<br />
Der Ext-4-Treiber ist im neuen<br />
Fedora auch für die Dateisysteme<br />
Ext 2 und 3 zuständig.<br />
Daneben haben die Entwickler<br />
Sys-V-Init-Skripte auf das<br />
in Version 15 eingeführte Init-<br />
System Systemd portiert.<br />
Außerdem enthält die Distribution<br />
noch einiges an<br />
neuer Software <strong>fürs</strong> Cloud<br />
Computing, unter anderem<br />
die Oberfläche Aeolus Conductor,<br />
die IaaS-Implementierung<br />
Condor Cloud und das<br />
verteilte Dateisystem Heka<br />
FS. Software-Entwickler finden<br />
beispielsweise Perl 5.14,<br />
die GCC-Python-Plugins, die<br />
Haskell-Plattform sowie D2,<br />
die neueste Version der Programmiersprache<br />
D.<br />
Zum Herunterladen [http://<br />
fedoraproject.org/get‐fedora] gibt<br />
es Images für x86-/x86_64-<br />
PCs. So genannte Spins sind<br />
auch verfügbar, etwa Varianten<br />
mit LXDE- und Xfce-Desktop.<br />
Auch für Amazons Cloud<br />
EC2 existieren Images. n<br />
Fedora 16 verwendet als Standard-Desktopumgebung Gnome 3.2.
Vertrauen<br />
Sie auf über<br />
Android 4 ist auf dem Pandaboard heimisch<br />
Googles neue Android-Version<br />
4.0 („Ice Cream Sandwich“)<br />
läuft auf dem Pandaboard von<br />
Texas Instruments. Android 4<br />
unterstützt das ARM-basierte<br />
Entwicklerboard, auf dem<br />
sich auch andere <strong>Linux</strong>-Distributionen<br />
betreiben lassen,<br />
Blockdiagramm für das Pandaboard mit 1-GHz-ARM-Cortex-Prozessor.<br />
von Haus aus, wie Jay Goluguri<br />
von Texas Instruments<br />
in einem Youtube-Video demonstriert.<br />
Das Pandaboard besitzt einen<br />
OMAP-4430-Prozessor mit<br />
zwei ARM-Cortex-9-Kernen,<br />
die mit 1 GHz laufen. Daneben<br />
bietet es Full-HD-Video<br />
(1080 p), Open-GL-Unterstützung<br />
sowie einen HD-<br />
MI-Ausgang. 1 GByte RAM,<br />
Ethernet, WLAN, USB- und<br />
JTAG-Anschluss sowie Audio<br />
komplettieren das System.<br />
Weitere Informationen und<br />
das Video mit Jay Goluguris<br />
Demonstration gibt es auf<br />
[http://pandaboard.org], den passenden<br />
Quelltext dazu beim<br />
Android-Open-Source-Projekt<br />
[http://source.android.com/source/<br />
building‐devices.html]. n<br />
Jahre<br />
Erfahrung<br />
SSL-Zertifikate<br />
bereits ab 15 E pro Jahr<br />
www.psw.net<br />
Ihre Vorteile<br />
Bis zu<br />
90 Tage<br />
längere Laufzeit*<br />
Jederzeit<br />
kostenloser<br />
Austausch **<br />
Visio-Import kommt in Libre Office 3.5<br />
Der Import von Microsoft-<br />
Visio-Diagrammen in Libre<br />
Office Draw macht Fortschritte.<br />
Er soll in Version 3.5 des<br />
freien Büropakets einziehen,<br />
die Anfang 2012 erscheint.<br />
Das berichtet Libre-Office-<br />
Entwickler Fridrich Strba in<br />
seinem Blog. Nach seiner humorvollen<br />
Einschätzung bleiben<br />
nur noch jene 5 Prozent<br />
der Features umzusetzen, die<br />
„in der Regel 95 Prozent der<br />
Zeit in Anspruch nehmen“.<br />
Bisherige Resultate finden sich<br />
in der Bibliothek Libvisio, die<br />
unter LGPL lizenziert ist.<br />
Innerhalb von nur drei Monaten<br />
habe das Visio-Team einen<br />
sehr originalgetreuen Import<br />
realisiert, schreibt Strba weiter.<br />
Zur Mannschaft gehören<br />
Valek Filippov von Gnome,<br />
der Gentoo-Entwickler Tomas<br />
Chvatal sowie Eilidh McAdam ,<br />
Stipendiatin des Google Summer<br />
of Code. Für Fortschritte<br />
sorgten Hacking Sessions<br />
beim Hackfest in München<br />
und auf der Libre Office Conference<br />
2011 in Paris.<br />
Im Blogeintrag [http://fridrich.<br />
blogspot.com/2011/11/it‐has‐been<br />
‐long‐time‐since‐i‐last‐time.html]<br />
gibt es Screenshots von Dokumentenimporten.<br />
Ungeduldige<br />
können Daily Builds der<br />
Entwickler ausprobieren. n<br />
Libre Office 3.5 inbegriffen: Ein in Draw importiertes Visio-Diagramm.<br />
Zusätzliche Lizenzen<br />
ohne Aufpreis *<br />
Unkomplizierte Lieferung<br />
auf Rechnung ***<br />
Persönlicher<br />
Support<br />
in deutsch, englisch,<br />
spanisch und polnisch<br />
Sonderkonditionen für<br />
Reseller<br />
sprechen Sie uns an<br />
* in den Produktlinien<br />
Lite, Silver und Gold<br />
** während der Laufzeit<br />
*** bei Pay-as-you-Go
Aktuell<br />
www.linux-magazin.de News 01/2012<br />
8<br />
Colorhug: Open-Source-Kolorimeter<br />
Der Entwickler Richard<br />
Hughes hat ein preiswertes<br />
Farbmessgerät entwickelt,<br />
dessen Hard- und Software<br />
unter freien Lizenzen stehen.<br />
Das Colorhug genannte<br />
Kästchen eignet sich zum Kalibrieren<br />
von Computerbildschirmen.<br />
Das Gerät misst 33<br />
mal 43 mal 21 Millimeter und<br />
besitzt einen USB-Anschluss.<br />
Die Messwerte lasen sich in<br />
ein ICC-Farbprofil umrechnen.<br />
Fedora 16 etwa bringt die<br />
erforderliche Software bereits<br />
Colorhug heißt dieses Kolorimeter,<br />
dessen Soft-, Firm- und Hardware<br />
Open Source sind.<br />
Bausatz: <strong>Linux</strong> from Scratch 7.0<br />
mit, daneben steht sie zum<br />
freien Download bereit.<br />
Der Produktpreis von 60 britischen<br />
Pfund (70 Euro) liegt<br />
deutlich unter dem proprietärer<br />
Produkte etwa von Pantone,<br />
die jedoch einen größeren<br />
Funktionsumfang bieten. Die<br />
ersten Besteller erhalten das<br />
Gerät zum ermäßigten Preis<br />
von 48 GBP (56 EUR), da<br />
Hughes noch mit Kinderkrankheiten<br />
rechnet und sich<br />
die Mitarbeit interessierter<br />
Entwickler wünscht.<br />
Weitere Informationen und<br />
Bestellmöglichkeit gibt es auf<br />
der Produktseite [http://www.<br />
hughski.com]. Der freie Quelltext<br />
für Client und Firmware<br />
sowie Schaltpläne und Platinenlayout<br />
für die Hardware<br />
lagern auf dem Github-Konto<br />
unter [https://gitorious.org/<br />
colorhug]. Zum Download steht<br />
außerdem eine <strong>Linux</strong>-Live-CD<br />
mit der Software. Für Colorhug<br />
existiert derzeit ausschließlich<br />
<strong>Linux</strong>-Software. n<br />
Das auf ein von Grund auf<br />
selbst gebautes <strong>Linux</strong> spezialisierte<br />
Projekt <strong>Linux</strong> from<br />
Scratch (LFS) hat die Version<br />
7.0 seiner Anleitung veröffentlicht.<br />
In ihr sind diverse<br />
Neuerungen enthalten. Ein<br />
Teil davon betrifft die eingesetzten<br />
Komponenten.<br />
So setzt das Projekt nun auf<br />
den aktuellen Kernel 3.1, die<br />
GCC 4.6.1 und Glibc 2.14.1.<br />
Zudem führt die Anleitung<br />
das neue Verzeichnis »/run«<br />
ein, das Programme wie Udev<br />
zum Speichern von Runtime-<br />
Informationen nutzen. Die<br />
Bootskripte seien entsprechend<br />
angepasst, heißt es<br />
beim Projekt.<br />
Außerdem dienen die neu<br />
eingeführten MD5-Prüfsummen<br />
dem <strong>Linux</strong>-Baumeister<br />
zur Kontrolle der Integrität<br />
aller heruntergeladenen<br />
Komponenten. Neben technischen<br />
Änderungen hat die<br />
LFS-Anleitung redaktionelle<br />
Pflege erfahren, was sich in<br />
präziseren und besser verständlichen<br />
Texten äußere, so<br />
die LFS-Macher. LFS ist auf<br />
den Projektseiten [http://www.<br />
linuxfromscratch.org] aufrufbar<br />
und dort auch in einer Download-Version<br />
zu haben. n<br />
<strong>Web</strong>framework Happstack leicht gemacht<br />
Sugar CRM 6.3: Archiv und Admin-Tools<br />
Sugar CRM, Hersteller der<br />
gleichnamigen Software <strong>fürs</strong><br />
Customer-Relationship-Management,<br />
hat die Version 6.3<br />
veröffentlicht. Sie bringt Anwendern<br />
E-Mail-Archivierung<br />
sowie diverse neue Tools und<br />
vereinfacht die Integration anderer<br />
Anwendungen.<br />
Die „engere Integration mit<br />
Applikationen von Drittanbietern,<br />
schnelleres Feedback<br />
bei der Echtzeit-Kollaboration<br />
und verbesserte Kontrollmechanismen“<br />
nennt [http://www.<br />
sugarcrm.com] als wichtigste<br />
neue Errungenschaften.<br />
Dazu zählen Massen-Updates,<br />
Rollen- oder Richtlinien-basierte<br />
Zugriffe, ein verbessertes<br />
Lead-Management (vor<br />
allem bei der Überführung<br />
neuer Kontakte in Kunden)<br />
und auch die neuen Funktionen<br />
von Sugar Logic. Das<br />
Administrationstool kann<br />
jetzt beispielsweise Daten importieren,<br />
Formeln erstellen,<br />
Module umbenennen und<br />
Massen-Updates managen.<br />
Happstack, ein Framework<br />
für <strong>Web</strong>anwendungen in der<br />
Programmiersprache Haskell,<br />
existiert jetzt auch in einer<br />
vereinfachten Ausgabe für<br />
Einsteiger. Für Happstack-<br />
Lite haben die Entwickler die<br />
wichtigsten Datentypen und<br />
Funktionen in einem einzigen<br />
Modul zusammengeführt. Zudem<br />
vereinfachten sie die Typsignaturen<br />
und verwendeten<br />
weniger Typklassen.<br />
Die Happstack-Lite-Anwendungen<br />
sind laut den Machern<br />
vollkommen kompatibel zur<br />
großen Ausgabe des Frameworks.<br />
Wer klein angefangen<br />
hat, kann also später noch bedenkenlos<br />
wachsen. Vor allem<br />
aber soll das übersichtliche Tutorial<br />
[http://happstack.com/docs/<br />
happstack‐lite/happstack‐lite.html]<br />
Happstack-Einsteigern hilfreich<br />
sein. Es behandelt unter<br />
anderem das Routing innerhalb<br />
der Applikation, HTML-<br />
Templates, URL-Parameter,<br />
Formulardaten, Cookies und<br />
das Thema Datei-Uploads.<br />
Das Dokument ist in Literate<br />
Haskell geschrieben und lässt<br />
sich deshalb als Programmcode<br />
ausführen.<br />
n<br />
Der verbesserte Import-Wizard<br />
erlaubt es dem Hersteller<br />
zufolge jetzt auch, Daten<br />
oder externe Mails aus Quellen<br />
wie Google zu importieren<br />
und zu archivieren. Eine<br />
Quick-Edit-Funktion ermöglicht<br />
es Anwendern, noch<br />
mehr Änderungen direkt in<br />
Listenfeldern, Subpanels oder<br />
Berichten anzuwenden. Mehr<br />
Details, etwa zum vielfach<br />
nachgefragten „Import Duplicate<br />
Fields checking“ beim<br />
Datenimport, finden sich im<br />
Entwicklerblog.<br />
Sugar CRM gilt als Marktführer<br />
bei Open-Source-CRM-Systemen,<br />
die Macher verweisen<br />
auf stattliche 10 Millionen<br />
Downloads, 850 000 Anwender<br />
und mehr als tausend Erweiterungsprojekte,<br />
etwa auf<br />
Sugarforge zu finden. Anfang<br />
2012 soll Version 6.4 kommen.<br />
Sugar CRM 6.3 steht als<br />
Community Edition frei zur<br />
Verfügung, die Enterprise-Variante<br />
kostet ab 360 US-Dollar<br />
pro User und Jahr. n
1&1 WEBHOSTING<br />
INKLUSIVE<br />
CLICK & BUILD APPS!<br />
Bei 1&1 treffen über 20 Jahre <strong>Web</strong>hosting-Erfahrung auf modernste Technik<br />
in deutschen Hochleistungs-Rechenzentren. Mehr als 1.000 IT-Profis entwickeln<br />
unsere hochwertigen Lösungen permanent weiter. 1&1 bietet Ihnen alles, was Sie für<br />
Ihren professionellen Internetauftritt brauchen:<br />
✓<br />
65 kostenlos installierbare<br />
Click & Build Applikationen<br />
Joomla, Wordpress, Gallery und viele Apps mehr!<br />
Inklusive Software- und Sicherheits-Updates.<br />
✓ Marken-Design-Software<br />
z. B. Adobe Dreamweaver ® , NetObjects Fusion ® 1&1 Edition<br />
✓<br />
Doppelte Sicherheit<br />
paralleles Hosting Ihrer <strong>Web</strong>site in zwei Hightech-<br />
Rechenzentren an verschiedenen Orten<br />
&<br />
✓ 24h-Profi-Hotline<br />
und kostenloser E-Mail-Support.<br />
1&1 DUAL HOSTING<br />
*<br />
AKTIONEN BIS 31.12.11<br />
WEBSITE<br />
1&1 DUAL PERFECT<br />
■ 6 DOMAINS INKLUSIVE<br />
■ 5 GB <strong>Web</strong>space<br />
■ UNLIMITED Tr a f fi c<br />
■ UNLIMITED Click & Build Apps<br />
6 MONATE FÜR<br />
danach<br />
9,99 €/Monat*<br />
0,–€/Monat*<br />
.DE UND .INFO DOMAIN<br />
0, 29 €<br />
im Monat,<br />
danach ab 0,49 €/Monat.*<br />
Weitere Spar-Aktionen im Internet.<br />
0 26 02 / 96 91<br />
0800 / 100 668<br />
www.1und1.info<br />
* 1&1 Dual Perfect, 6 Monate 0,– €/Monat, danach 9,99 €/Monat. Einmalige Einrichtungsgebühr 9,60 €. Software wird zum Download bereitgestellt.<br />
.de und .info Domain 1 Jahr 0,29 €/Monat, danach .de 0,49 €/Monat und .info 1,99 €/Monat. Keine Einrichtungsgebühr. Alle Pakete 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt.
Aktuell<br />
www.linux-magazin.de News 01/2012<br />
10<br />
Open Suse 12.1 mit Snapshots, Cloud und Go<br />
Das Open-Suse-Projekt hat<br />
Version 12.1 seiner <strong>Linux</strong>-<br />
Distribution veröffentlicht.<br />
Die neue Release verwendet<br />
Kernel 3.1 mit Verbesserungen<br />
an den Dateisystemen<br />
Ext 4 und Btrfs sowie mit<br />
Treibern für Hardware wie<br />
Microsoft Kinect, die Apple<br />
I-Sight-<strong>Web</strong>cam oder AMDs<br />
Llano-Fusion-APUs. Um den<br />
Start von Diensten kümmert<br />
sich Systemd, um das Booten<br />
Grub 2.<br />
Auf dem Desktop findet der<br />
Anwender Gnome 3.2 und<br />
Das GUI-Programm Snapper ist in Open Suse 12.1 für Btrfs-Snapshots zuständig.<br />
KDE Plasma Workspaces 4.7<br />
inklusive des neuen Farbmanagements<br />
Oyranos CMS. Alternativ<br />
stehen LXDE 0.5 und<br />
Xfce 4.8 als Desktopumgebungen<br />
zur Auswahl. Unter den<br />
Anwendungen finden sich<br />
Fire fox 7, Chromium 17, Libre<br />
Office 3.4.3 und Calligra 2.4<br />
Beta 3 (vormals Koffice).<br />
Sax, das Konfigurationstool<br />
für den X-Server erlebt in<br />
Form von Sax 3 ein Comeback.<br />
Suses Admintool lässt<br />
sich auch als <strong>Web</strong>yast per<br />
Browser bedienen. Wer sich<br />
für Btrfs als Dateisystem entscheidet,<br />
findet außerdem das<br />
grafische Snapshot-Tool Snapper<br />
im Lieferumfang, das Rollbacks<br />
ermöglicht.<br />
Daneben bedient das neue<br />
Open Suse auch den Cloud-<br />
Trend, sei es mit Owncloud<br />
zum Hosten von Multimediaund<br />
Kalenderdateien oder mit<br />
Tools wie Virt-Manager, Eucalyptus,<br />
Open Nebula und<br />
Open Stack.<br />
Entwickler finden auf dem<br />
System unter anderem GCC<br />
4.6.2, LLVM 3 und Googles<br />
Programmiersprache Go. Daneben<br />
können sie ihren eigenen<br />
Open Build Service aufsetzen<br />
oder Tests mit Open<br />
QA automatisieren.<br />
Auf der Open-Suse-Site findet<br />
sich die Produktbeschreibung<br />
[http://en.opensuse.org/Product_<br />
highlights], die weitere Details<br />
auflistet. Die Download-Mirrors<br />
[http://software.opensuse.<br />
org/121/de] sind aktualisiert<br />
und bieten DVD-Images für<br />
Installation oder Live-Betrieb,<br />
für Gnome und KDE sowie 32-<br />
und 64-Bit-PCs.<br />
n<br />
Typo3 4.6 – viel Neues und weniger Altes<br />
Toucan W – Settopbox mit Android<br />
Mit Leistungsoptimierung zum<br />
einen und Codebereinigung<br />
zum anderen ist das freie CMS<br />
Typo3 in Runde 4.6 gegangen.<br />
Die Macher haben wie stets<br />
auf Rückwärtskompatibilität<br />
geachtet, in der neuen Version<br />
wird aber der inzwischen<br />
veraltete Internet Explorer 6<br />
nicht mehr im Backend unterstützt,<br />
was im Gegenzug den<br />
Einsatz von modernerem CSSund<br />
HTML-Code ermögliche.<br />
PHP 5.3 ist zudem Grundlage<br />
für die 4.6.<br />
In puncto Sicherheit sind bei<br />
Neuinstallationen die Erweiterungen<br />
»saltedpasswords« und<br />
»rsaauth« standardmäßig aktiviert.<br />
Wenn die entsprechenden<br />
Server-Voraussetzungen<br />
vorhanden sind, kommen die<br />
beiden Extensions auch zum<br />
Einsatz. Die Entwickler empfehlen<br />
Nutzern, die nur ein<br />
Upgrade machen, diese Extensions<br />
aus Sicherheitsgründen<br />
manuell einzuschalten.<br />
Saltedpasswords streut zufällige<br />
Zeichen in Passwörter<br />
und erschwert Angreifern so<br />
das Knacken extrem. Rsaauth<br />
nutzt Verschlüsselung bei der<br />
Nutzeranmeldung.<br />
Ein verbessertes Caching-<br />
Framework, ein stark überarbeiteter<br />
Extensions-Manager<br />
und ein neues Formular-Element<br />
zählen ebenfalls zu den<br />
hinzugewonnenen Errungenschaften<br />
des CMS.<br />
Die Release Notes unter [http://<br />
typo3.org/download/release‐notes/<br />
typo3‐46/] berichten detailliert<br />
über weitere Änderungen und<br />
Verbesserungen.<br />
n<br />
Der russische Hersteller Iconbit<br />
hat einen Full-HD-Mediaplayer<br />
auf Basis von Android<br />
2.2 vorgestellt. Zielobjekte<br />
des mit einer Fernbedienung<br />
ausgelieferten Players sind<br />
hochauflösende TV-Geräte,<br />
denen er als netzwerktauglicher<br />
Zuspieler via HDMI oder<br />
Komponenten-Eingang dient.<br />
Der Nutzer hat Zugriff auf den<br />
Android-Market. Mit<br />
der bewegungssensiblen<br />
Fernbedienung<br />
lässt sich ein Mauszeiger<br />
auf dem TV-Gerät<br />
steuern.<br />
Soziale Netzwerke,<br />
Browser-Anwendung<br />
und Multimedia-Dateien<br />
sind Spezialitäten<br />
der Box. Filme<br />
spielt sie aus dem<br />
Speicher oder von Festplatten<br />
und SD-Karten in 1080 p ab.<br />
Hardware-seitig sind ein ARM-<br />
Cortex-Prozessor mit 1 GHz<br />
und 512 MByte RAM verbaut.<br />
Als interner Speicher dienen<br />
4 GByte NAND-Flash. Der<br />
Hersteller empfiehlt 190 Euro<br />
als Preis des Toucan [http://de.<br />
iconbit.com/catalog/android/iconbit<br />
_toucan_w/].<br />
n<br />
Android-Box mit vielseitigen Einsatzmöglichkeiten<br />
im Wohnzimmer – der Toucan W.
Richtig schreibt<br />
man mit Duden<br />
Ebenfalls erhältlich für <strong>Linux</strong>:<br />
Die neue Rechtschreibprüfung<br />
8.0 für Open-<br />
Office und LibreOffice<br />
Preis 19,95 J<br />
Das große Wörterbuch<br />
der deutschen Sprache<br />
199,95 J<br />
Richtiges und<br />
gutes Deutsch<br />
19,95 J<br />
Ab sofort im Handel und im Internet unter www.duden.de
Aktuell<br />
www.linux-magazin.de News 01/2012<br />
12<br />
Kurznachrichten<br />
Tails 0.9: Das auf dem Debian-Live-Projekt fußende Amnesic Incognito<br />
Live System (Tails) dient als Live-Distribution, um das Internet anonym<br />
zu nutzen. Neu: Update auf Version 0.2.2.34 des Onion-Routers Tor, in<br />
der einige Sicherheitsmängel behoben sind. Auch der auf Version 3.0.0<br />
aktualisierte Kernel sowie der Browser Iceweasel 3.5.16 bügeln einige<br />
Bugs aus. Als neues Paket dabei ist Metadata Anonymisation (MAT),<br />
das verräterische Metadaten aus mehreren Dateitypen entfernt. Lizenz:<br />
GPLv3 [https://tails.boum.org]<br />
Octopussy 1.0.0: Die in Perl und XML umgesetzte Open-Source-Anwendung<br />
überwacht Logdateien und kann die Protokolle zahlreicher Dienste sammeln.<br />
Neu: Insbesondere haben die Entwickler Funktionen für Dienste<br />
auf Mac OS X überarbeitet und die <strong>Web</strong>oberfläche des Systems auf die<br />
Javascript-Bibliothek Jquery umgestellt. Zum Empfang der eingehenden<br />
Protokolldaten kann nun wahlweise Rsyslog oder Syslog-NG zum Einsatz<br />
kommen. Lizenz: GPLv3 [http://www.8pussy.org]<br />
Samhain 3.0.0: Intrusion-Detection-Software für <strong>Linux</strong>, Free BSD, Solaris<br />
und weitere Unix-artige Systeme, die als Daemon die Integrität von Dateien<br />
mittels Prüfsummen überwacht. Neu: Unter <strong>Linux</strong> läuft das Inotify-<br />
Feature des Kernels, das die Software auf veränderte Dateien hinweist.<br />
Als angenehme Nebenwirkung reduziert dies die I/O-Last. Daneben gibt<br />
es ausführlichere Debugging-Informationen für IPv6-Probleme. Außerdem<br />
haben die Entwickler einen Bug bei der Kombination von Prelink und SUID-<br />
Prüfung behoben. Lizenz: GPL [http://la‐samhna.de/samhain/]<br />
<strong>Web</strong>yast 0.3: Eine <strong>Web</strong>oberfläche für Suses Setup- und Administrationstool,<br />
das aus Zeitgründen den Einzug in die Open-Suse-Version 12.1<br />
verpasst hat. Neu: Durch einen neuen Caching-Mechanismus haben die<br />
Entwickler den Start der Administrationsmodule beschleunigt, die nun<br />
nach ein, zwei Sekunden zur Verfügung stehen sollen. Daneben haben die<br />
<strong>Web</strong>yast-Macher die Architektur der Anwendung vereinfacht. Statt je eines<br />
<strong>Web</strong>servers für den Dienst und die Benutzeroberfläche ist jetzt nur noch<br />
ein einziger im Einsatz. Das macht nicht nur das Leben aller Mitentwickler<br />
einfacher, sondern halbiert auch den Speicherverbrauch. Lizenz: LGPLv2<br />
[https://github.com/webyast/webyast]<br />
Edit with Emacs 1.10: Eine Erweiterung für den Chrome-Browser, die Textfelder<br />
zum Bearbeiten an den Unix-Editor schickt. Neu: Das Addon, das<br />
auch in Chromium funktioniert, ignoriert nun schreibgeschützte Textfelder<br />
und findet bearbeitbare Div-Elemente, wie sie Google+ verwendet. Zum<br />
Auffinden der Elemente dient nun Jquery, daneben hat der Autor Alex<br />
Bennée die Erkennung in dynamischen Seiten verbessert und die Einstellungsseite<br />
erweitert. In der zugehörigen Emacs-Erweiterung »edit-server.<br />
el« kann der Anwender nun einen Standardmodus konfigurieren sowie<br />
Editor-Modi bestimmten URLs zuordnen. Lizenz: GPLv3 [https://github.<br />
com/stsquad/emacs_chrome]<br />
Rippit 0.1.0: Der einfache CD-Ripper für die Kommandozeile richtet sich<br />
an Anwender, die Audio-CDs in Dateien überführen möchten, ohne dabei<br />
viel Hand anlegen zu müssen. Neu: Der erste Meilenstein des Tools nutzt<br />
als Zielformat den freien und verlustfreie Codec Flac. Interpreten und<br />
Titel holt sich die Software vom Dienst Musicbrainz und bildet daraus den<br />
Dateinamen. Daneben kann Rippit Fehler ignorieren sowie einen einzelnen<br />
Track rippen – damit sind die Optionen aber schon erschöpft. Lizenz:<br />
GPLv2 [https://fedorahosted.org/rippit/]<br />
Taskjuggler 3.0.0: Das Rewrite der Projektmanagement-Software in Ruby<br />
hat rund fünf Jahre in Anspruch genommen und liegt nun als erste stabile<br />
Release vor. Neu: Zu den jüngsten Features gehören die Berechnung des<br />
Vollzeitäquivalents (Full-time Equivalent, FTE) und verbesserte Stylesheets<br />
für die HTML-Berichte. Daneben bietet Taskjuggler umfangreiche<br />
Funktionen <strong>fürs</strong> Projektmanagement und verwaltet Aufgaben, Ressourcen<br />
und Konten, kann Zuweisungskonflikte lösen und gibt den Status als Bericht<br />
und in einem Dashboard aus. Die neue Version läuft auf <strong>Linux</strong>, Unix,<br />
Windows und Mac OS X und lässt sich als Rubygem installieren. Lizenz:<br />
GPLv2 [http://www.taskjuggler.org]<br />
Hiawatha 7.8: Ein freier <strong>Web</strong>server, der sowohl als Quelltext-Tarball sowie<br />
als Binärdatei für Mac OS X und Windows zur Verfügung steht. Neu: Der<br />
Server kann nun die Ausgabe von CGI-Programmen im Cache zwischenspeichern,<br />
um die Performance zu erhöhen. Dabei steuert die Anwendung<br />
das Cache-Verhalten per CGI-Header. Zudem haben die Entwickler ein<br />
Timeout-Problem beim Verarbeiten von großen POST-Anfragen mit SSL<br />
behoben. Das Ereignis »BanOnWrongPassword« wird nun auch bei der<br />
Eingabe eines falschen Passworts ausgelöst. Lizenz:GPLv2 [http://www.<br />
hiawatha‐webserver.org]<br />
Zarafas Groupware integriert Videokonferenzen<br />
Der deutsch-holländische Hersteller<br />
Organisatoren starten die Browser-Plugin verbinden,<br />
der freien Collaborati-<br />
on-Suite Zarafa hat ein neues<br />
Plugin vorgestellt, das kostenlos<br />
Videokonferenzen ins<br />
<strong>Web</strong>frontend der Groupware<br />
integriert. Die neuen<br />
Funktionen integrieren<br />
zu diesem Zweck die<br />
Dienste des Spezialisten<br />
Spreed, laut Zarafa<br />
„Technologieführer<br />
für <strong>Web</strong>-Meeting Software“.<br />
Video, Telefonie<br />
und gemeinsame Präsentationen<br />
seien damit<br />
<strong>Web</strong>meetings für Teilnehmer,<br />
die einen Link per E-Mail<br />
erhalten und so an der Konferenz<br />
teilnehmen. Bis zu<br />
drei Kontakte lassen sich per<br />
kostenlos und auch ohne vorherige<br />
Registrierung. Unter<br />
Windows, <strong>Linux</strong> und auf Macs<br />
stehen dabei auch zusätzliche<br />
Werkzeuge wie Whiteboards<br />
und Mindmaps zur<br />
Verfügung.<br />
Das <strong>Web</strong>meeting-Plugin<br />
steht bei Zarafa unter<br />
[http://download.zarafa.com/community/final/<br />
Plugins/Spreed/1.0/] zum<br />
Download. Eine Demonstration<br />
der Technologie<br />
ist auf Zarafas<br />
jetzt auf Mausklick<br />
<strong>Web</strong>seiten ebenfalls<br />
möglich.<br />
Videokonferenzen mit Spreed in Zarafas Groupware. verfügbar.<br />
n<br />
Mercurial 2.0 für<br />
große Dateimengen<br />
Mercurial, das freie System<br />
zur Versionskontrolle, bringt<br />
in Ausgabe 2.0 Bugfixes und<br />
neue Features mit. So bietet<br />
die Standardextension „Largefiles“<br />
die Möglichkeit, mit<br />
großen Dateibeständen umzugehen,<br />
die Rede ist von<br />
mehreren Hundert MByte. Die<br />
Daten sind außerhalb gespeichert<br />
und werden bei Bedarf<br />
heruntergeladen.<br />
Den Download der Quellen<br />
und Versionen für Mac OS X<br />
und Windows gibt es beim<br />
Projekt [http://mercurial.selenic.<br />
com]. (ofr/mfe/mhu/uba) n
WEBHOSTING<br />
Einfach. Günstig.<br />
<strong>Web</strong>hosting-Pakete von netclusive unterstützen TYPO3, Joomla!, osCommerce,<br />
Drupal, WordPress, MediaWiki und vieles mehr. Jeder Tarif verfügt über<br />
unbegrenztes Transfervolumen und PHP5-Unterstützung.<br />
Unser Helpdesk unterstützt Sie gerne bei der Einrichtung Ihrer <strong>Web</strong>site.<br />
Sind Sie mit unserem Service oder unseren Produkten unzufrieden,<br />
erhalten Sie Ihr Geld in den ersten 30 Tagen zurück.<br />
Bestellen Sie noch heute ohne Risiko und nutzen Sie Ihr netclusive<br />
<strong>Web</strong>hosting-Paket für 3 Monate kostenlos.<br />
Die Aktion „3 Monate kostenlos“ gilt nur für ausgesuchte<br />
Tarife. Die Aktion endet voraussichtlich am 31.12.2011.<br />
Unsere Tarife im Überblick:<br />
ENTRY EASY USER ADVANCED PROFESSIONAL BUSINESS<br />
Domains 1 1 2 3 5 10<br />
<strong>Web</strong>space 250 MB 500 MB 1000 MB 4000 MB 10.000 MB unbegrenzt<br />
Traffic unbegrenzt unbegrenzt unbegrenzt unbegrenzt unbegrenzt unbegrenzt<br />
E-Mails 5 20 100 300 1000 2500<br />
Spamfilter/Virenschutz <br />
PHP 5.3 / PHP 5.2 <br />
MySQL 5-Datenbanken optional 1 2 5 10 unbegrenzt<br />
Perl, Python - - <br />
SSL-Proxy - - - <br />
Garantierte Verfügbarkeit 99,9% 99,9% 99,9% 99,9% 99,9% 99,9%<br />
Tägliche Datensicherung <br />
Telefonsupport <br />
Einrichtungsgebühr 0,- € 0,- € 0,- € 0,- € 0,- € 0,- €<br />
Preis monatlich<br />
3 MONATE<br />
KOSTENLOS<br />
DANACH 1,49 €<br />
3 MONATE<br />
KOSTENLOS<br />
DANACH 2,49 €<br />
3 MONATE<br />
KOSTENLOS<br />
DANACH 3,99 €<br />
3 MONATE<br />
KOSTENLOS<br />
DANACH 6,99 €<br />
3 MONATE<br />
KOSTENLOS<br />
DANACH 9,99 €<br />
3 MONATE<br />
KOSTENLOS<br />
DANACH 19,99 €<br />
Alle Preise verstehen sich monatlich inklusive der gesetzlichen Mehrwertsteuer. Die Zahlung erfolgt grundsätzlich per Bankeinzug. Auslandskunden zahlen per Vorkasse. Die aktuellen Domainpreise können Sie unter<br />
http://www.netclusive.de/domainpreise einsehen. Die Vertragslaufzeit beträgt wahlweise 24 bzw. 12 Monate (zzgl. einmaliger Einrichtungsgebühr 9,99 EUR, Aktion 3 Monate kostenlos entfällt). Sie verlängert sich<br />
automatisch um weitere 24 bzw. 12 Monate, wenn der Vertrag nicht mit einer Frist von 30 Tagen zum Ende der jeweiligen Laufzeit gekündigt wurde. Die Abrechnung erfolgt jeweils jährlich im Voraus.<br />
0800 638 2587<br />
www.netclusive.de
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 01/2012<br />
14<br />
Zahlen & Trends<br />
Bitkom: 38 000 offene Stellen für IT-Experten<br />
Laut einer Umfrage des Branchenverbands<br />
Bitkom unter<br />
1500 Geschäftsführern und<br />
Personalern gibt es in Deutschland<br />
38 000 offene Stellen für<br />
IT-Experten.<br />
Die nach Angaben des Verbandes<br />
repräsentative Umfrage<br />
hat das Meinungsforschungsinstitut<br />
Aris durchgeführt.<br />
Konsultiert wurden<br />
Manager aller Branchen. Im<br />
Vergleich zu der Erhebung im<br />
Vorjahr ist die Zahl der offenen<br />
Stellen um 10 000 angestiegen.<br />
Das zeigt sich auch<br />
in den Statements der Befragten:<br />
58 Prozent sagen, dass<br />
ein Mangel an IT-Spezialisten<br />
herrsche. Im Einzelnen sucht<br />
die ITK-Branche rund 16 000<br />
IT-Mitarbeiter, überwiegend<br />
im Bereich Software und IT-<br />
Dienstleistungen. Besonders<br />
Software-Entwickler sind<br />
Mangelware, 84 Prozent der<br />
ITK-Firmen mit freien Plätzen<br />
suchen Programmierer.<br />
Offene Stellen und die gesuchten Bewerberprofile laut der Unfrage der Bitkom.<br />
Anders sieht es in den übrigen<br />
Branchen aus, dort sind<br />
bei den darauf entfallenden<br />
IT-Jobs insbesondere Admins<br />
gefragt, 59 Prozent der befragten<br />
Unternehmen suchen<br />
einen.<br />
Die Gehaltsstruktur hat der<br />
Branchenverband [http://www.<br />
bitkom.org] von der Personalberatung<br />
Kienbaum untersuchen<br />
lassen. Resultat: Die Einkommen<br />
von IT-Spezialisten<br />
in der ITK-Branche stiegen im<br />
laufenden Jahr im Schnitt um<br />
4,7 Prozent. Auf die gesamte<br />
Industrie ausgeweitet liege die<br />
Gehaltssteigerung bei 2,7 Prozent,<br />
haben die Personalberater<br />
ermittelt.<br />
n<br />
Mozilla verliert Firefox-Designer<br />
Skriptum zum Internetrecht<br />
Skizzenhaft: Menüvorschlag vom scheidenden Firefox-<br />
Designer Alex Faaborg.<br />
Nach fünf Jahren als Designer<br />
für den Mozilla-Browser<br />
Firefox verlässt Alex Faaborg<br />
das Team. Er wolle sich nun<br />
neuen Design-Themen widmen,<br />
erläutert er zu seinem<br />
Wechsel und macht dem Mozilla-Team<br />
ein Kompliment: Er<br />
sei sehr herzlichen, freundlichen<br />
und leidenschaft lichen<br />
Menschen begegnet.<br />
Faa borg bezeichnet<br />
das Design<br />
der Awesome-Bar<br />
und der One-<br />
Klick-Book marks<br />
als Highlights in<br />
Firefox 3, das<br />
Noti fication-System<br />
und die Sync-<br />
Interfaces als<br />
Schmuckstücke in<br />
Firefox 4. n<br />
Thomas Hoeren, Professor<br />
am Institut für Informations-,<br />
Telekommunikations- und<br />
Medienrecht der Universität<br />
Münster, hat das dort gepflegte<br />
Kompendium zum Internetrecht<br />
in einer aktuellen<br />
Fassung veröffentlicht.<br />
Mit dem Skript „Internetrecht“<br />
versucht Jurist Hoeren die aktuelle<br />
Rechtslage abzubilden,<br />
ist sich, wie im Vorwort zu<br />
lesen, aber selbst im Klaren<br />
darüber, dass das <strong>Web</strong> und<br />
die Rechtsprechung dazu eine<br />
Dynamik aufweisen, mit der<br />
schwer mitzuhalten ist. Schon<br />
deshalb sei die Online-Ausgabe<br />
die bessere Wahl, weil<br />
das Kompendium als gedrucktes<br />
Buch schon bei Erscheinen<br />
überholt sei.<br />
Eine Rechtsberatung ersetze<br />
das Skript keinesfalls, heißt es<br />
deshalb. Dennoch dient das<br />
als PDF veröffentlichte Buch<br />
als Überblick und Einblick in<br />
die Rechte und Pflichten des<br />
Internets. Fast 600 Seiten stark<br />
ist das Skript für den kostenlosen<br />
Download [http://www.<br />
uni‐muenster.de/Jura.itm/hoeren/<br />
materialien/Skript/Skript_Internetrecht_Oktober_2011.pdf]<br />
bestimmt.<br />
Das Urheberrecht und<br />
sonstige Rechte an dem umfangreichen<br />
Werk bleiben<br />
aber beim Verfasser. n
Fedora-Fork Fuduntu hat sich abgenabelt<br />
Nach einem Jahr Arbeit hat<br />
sich die <strong>Linux</strong>-Distribution<br />
Fuduntu mit Release 14.12 im<br />
November auf eigene Beine<br />
gestellt. Was als Fork von<br />
Fedora 14 begann, ist nun in<br />
der Lage, sein <strong>Linux</strong> mit einer<br />
eigenen Toolchain zu bauen<br />
(so genanntes Self-Hosting),<br />
schreiben die Fuduntu-Macher<br />
in ihren Erläuterungen<br />
zur neuen Release.<br />
Zu den wichtigsten Neuerungen<br />
der Version 14.12 gehören<br />
Kernel 3.0.7 und X.org 1.11.1,<br />
die Unterstützung für neue<br />
Hardware bringen. Daneben<br />
bringt die Distribution lizenzierte<br />
Pakete von Adobe Flash<br />
und Fluendos MP3-Codec mit.<br />
Neu dabei ist der Remote-<br />
Desktop-Client Remmina, der<br />
die bisherige Software Vinagre<br />
ablöst und die Protokolle RDP,<br />
VNC, NX und XDMCP unterstützt.<br />
Außerdem weisen die Entwickler<br />
darauf hin, dass sie<br />
den Schlüssel zum Signieren<br />
der Softwarepakete geändert<br />
haben. Eine Anleitung zum<br />
Update findet sich ebenso wie<br />
weitere Informationen sowie<br />
ISO-Images zum Download<br />
auf der Fuduntu-Homepage<br />
[http://www.fuduntu.org]. n<br />
Fuduntu besitzt nun eine eigene Toolchain.<br />
Adobe: HTML 5 statt mobilem Flashplayer<br />
Adobe hat in einem Blogpost<br />
mitgeteilt, dass das Unternehmen<br />
bei mobilen Geräten<br />
auf den Flashplayer verzichtet<br />
und stattdessen auf den<br />
HTML-5-Standard setzt. Für<br />
Adobe nimm Danny Winokur,<br />
Vice President und General<br />
Manager des Interactive Development,<br />
Stellung. Er sieht die<br />
HTML-5-Entwicklung so weit<br />
fortgeschritten und vielseitig<br />
unterstützt, dass es damit die<br />
beste Lösung für mobile Geräte<br />
sei, so Winokur. Zudem<br />
schreibt der Manager, dass<br />
HTML 5 teilweise exklusiv auf<br />
Mobilgeräten vorzufinden sei.<br />
Damit spielt er auf das weitverbreitete<br />
iPhone von Apple<br />
an, das keine Flash-Unterstützung<br />
mitbringt.<br />
Adobe will künftig zwar den<br />
Flash-Entwicklern dabei helfen,<br />
ihre Anwendungen via<br />
Adobe Air für die jeweiligen<br />
App-Stores zu packen, aber<br />
keine weiteren Entwicklungen<br />
am Flashplayer vornehmen<br />
und nur noch pflichtgemäß<br />
kritische Lücken in der Software<br />
stopfen.<br />
n
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 01/2012<br />
16<br />
Windows only? Wirbel um Secure-Boot im UEFI-Bios<br />
Red Hat und Canonical beleuchten<br />
in einem gemeinsamen<br />
White paper die Hintergründe<br />
der Forderung<br />
von Microsoft nach einer<br />
Secure-Boot-Option im UEFI-<br />
Bios. Dass Microsoft für sein<br />
kommendes Windows 8 an<br />
die Hardwarehersteller eine<br />
Empfehlung für eine entsprechende<br />
Option gegeben hat,<br />
nährt besonders die Befürchtung,<br />
dass der Konzern darin<br />
auch einen Weg sehen könnte,<br />
andere Betriebssysteme auszuschließen.<br />
In ihrem Papier sehen beide<br />
Unternehmen das UEFI-Bios<br />
– Canonical sitzt auch als Mitglied<br />
im UEFI-Forum – technologisch<br />
als einen Schritt<br />
in die richtige Richtung an,<br />
von dem die Nutzer nicht nur<br />
durch schnellere Bootzeiten,<br />
längeren Akkulaufzeiten und<br />
komfortablere Konfigurationsmöglichkeiten<br />
profitieren<br />
können.<br />
Das in der jüngsten UEFI-<br />
Spezifikation 2.3.1 in Kapitel<br />
27 beschriebene Secure Boot<br />
sei im Sinne des Erfinders<br />
als Schutz vor Malware gedacht,<br />
indem das Bios nur<br />
signierte Software beim Booten<br />
ausführt, so Canonical in<br />
seinem Beitrag zum Thema.<br />
Dem stimme Canonical zwar<br />
zu, nicht jedoch der Art, wie<br />
Microsoft das Feature für<br />
Windows 8 als spezielle Implementation<br />
für sich reservieren<br />
will.<br />
Die PC-Hersteller sollten<br />
stattdessen tunlichst einen<br />
Mechanismus einführen, mit<br />
dem der Nutzer Secure Boot<br />
nach eigenem Gusto mit vertrauenswürdiger<br />
Software<br />
bestücken kann, die Möglichkeit,<br />
alternative Betriebssysteme<br />
von USB-Sticks und<br />
anderen Medien auszuführen,<br />
inklusive. Um auch technisch<br />
wenig versierten Nutzern die<br />
Konfiguration von Secure<br />
Boot zu erleichtern, sollte die<br />
Option überdies auch ganz<br />
abschaltbar sein.<br />
Das Whitepaper [http://blog.<br />
canonical.com/2011/10/28/white‐paper‐secure‐boot‐impact‐on‐linux/]<br />
gibt einen tieferen Einblick in<br />
die umstrittene Thematik. Die<br />
Autoren sind Jeremy Kerr<br />
(Technical Architect, Canonical),<br />
James Bottomley (Kernelentwickler)<br />
und Matthew Garrett<br />
(Senior Software Engineer<br />
bei Red Hat).<br />
Neben den beiden <strong>Linux</strong>-Firmen<br />
hat kurz darauf auch die<br />
<strong>Linux</strong> Foundation ein Papier<br />
mit ähnlich kritischen Ansichten<br />
zum Thema UEFI-Bios<br />
veröffentlicht.<br />
n<br />
Smartphone-Markt wächst – Samsung Nr. 1<br />
Samsung erobert mit seinen Smartphones<br />
und Android-Geräten den<br />
Markt im Sturm, hier das Galaxy Note.<br />
Der US-Marktforscher IDC hat<br />
den weltweiten Smartphone-<br />
Markt für das dritte Quartal<br />
2011 analysiert und sieht ihn<br />
im Jahresvergleich um rund<br />
43 Prozent wachsen. Die Liste<br />
der Top-5-Hersteller führt nun<br />
Samsung an, der den Spitzenplatz<br />
von Apple – nun<br />
Zweiter – übernimmt. Noch<br />
im vorangegangenen Quartal<br />
war Nokia (jetzt Platz drei)<br />
von Apple verdrängt worden.<br />
HTC und RIM (Blackberry)<br />
folgen auf den Plätzen vier<br />
und fünf.<br />
Weltweit seien 118 Millionen<br />
Smartphones verkauft worden,<br />
so IDC, im dritten Quartal<br />
2010 waren es noch 83 Millionen.<br />
Trotz steigender Nachfrage<br />
hatte IDC mit einem<br />
stärkeren Anstieg gerechnet,<br />
nachdem im zweiten Quartal<br />
der Smartphone-Markt noch<br />
um fast 67 Prozent gewachsen<br />
war.<br />
Verantwortlich dafür sei wohl<br />
der verzögerte Marktstart von<br />
Apples iPhone, das in den Vorjahren<br />
in seinen Kernmärkten<br />
Westeuropa und USA jeweils<br />
das dritte Quartal beflügelt<br />
hatte. Der Spitzenplatz von<br />
Samsung könnte im vierten<br />
Quartal umkämpft sein. n<br />
Firefox ist im<br />
siebten Jahr<br />
Zum siebenjährigen Bestehen<br />
des Firefox hat die Mozilla-<br />
Vorsitzende Mitchell Baker ein<br />
kurzes Resümee gezogen und<br />
in die Zukunft der Entwicklung<br />
geschaut. Beim Start, so<br />
Baker in ihrem Blogbeitrag,<br />
seien Browser weder Nutzerorientiert<br />
noch von besonderer<br />
Qualität gewesen. Die damalige<br />
Herausforderung habe<br />
auch geheißen, den dominierenden<br />
kommerziellen Herstellern<br />
Paroli zu bieten und<br />
deren kontrollierende Marktmacht<br />
zu brechen. Browser,<br />
das habe Mozilla damals erkannt,<br />
seien ein wichtiges Instrument.<br />
Den zukünftigen Anforderungen,<br />
die Mobilität, Datentausch,<br />
Privatsphäre und Datenschutz<br />
heißen, werde sich<br />
Mozilla ebenfalls stellen. „Das<br />
ist unsere Zukunft“, so Baker.<br />
Der Nutzer bleibe dabei immer<br />
an erster Stelle. n<br />
Kabinett für Libre<br />
Office<br />
Nach der Besetzung der Vorstandschaft<br />
hat das freie Büropaket<br />
Libre Office – oder<br />
besser die dahinter stehende<br />
Stiftung – das Membership<br />
Committee (MC) eingeführt.<br />
Die noch in der Gründungsphase<br />
befindliche Document<br />
Foundation (TDF) besetzt mit<br />
dem Membership Committee<br />
ein Gremium, zu dessen<br />
Aufgaben die Verwaltung<br />
von Mitgliedschaftsanträgen<br />
und -änderungen sowie die<br />
Überwachung der künftigen<br />
Wahlen des Board of Directors<br />
zählen.<br />
Letzteres wählt seinerseits einige<br />
Stiftungsmitglieder aus,<br />
um damit das MC zu besetzen.<br />
Die derzeitigen sieben Gremiumsmitglieder<br />
heißen André<br />
Schnabel, Fridrich Strba, Norbert<br />
Thiebaud, Simon Phipps<br />
und Sophie Gautier. Als deren<br />
Stellvertreter fungieren Cor<br />
Nouws und Drew Jensen. n
WEBHOSTING · SCHULUNGEN · SUPPORT<br />
Professionelle Hostinglösungen<br />
Performance & Verfügbarkeit<br />
auf höchstem Niveau<br />
Managed Server Lösungen vom Profi<br />
„Ich setze auf <strong>Linux</strong> –<br />
genau wie mein <strong>Web</strong>hoster!“<br />
Der Open Source Gedanke ist mir wichtig<br />
und ich finde es großartig, dass Mittwald<br />
sich so aktiv für die Communitys einsetzt.<br />
Hinzukommt, dass Performance und Verfügbarkeit<br />
einfach stimmen und ich mich<br />
auf das 24/7-Monitoring und den kompetenten<br />
Service vollkommen verlassen kann.<br />
Ich fühle mich rundum wohl!<br />
Performance-Hungrige nutzen z. B.<br />
Managed Server Lösungen 6.0<br />
Hochwertige Server-Hardware<br />
300 % Magento-Performance<br />
Bis zu 24 Prozessorkerne<br />
Bis zu 128 GB Arbeitsspeicher<br />
Leistungsstarke Server-HDDs<br />
Hardware-RAID 1/10 (optional)<br />
Individuell konfigurierbar<br />
Bereits ab monatlich:<br />
€ 99,99*<br />
Alle Angebote richten sich ausschließlich an Gewerbetreibende<br />
Alle Hostinglösungen unter: www.mittwald.de<br />
Rufen Sie uns kostenlos an: 0800 / 440 3000<br />
* Alle genannten Preise verstehen sich monatlich zzgl. MwSt. Die einmalige Einrichtungsgebühr für die Managed Server<br />
6.0 beträgt 149,- €. Die Vertragslaufzeiten und Abrechnungszeiträume betragen für die Managed Server 6.0 zwischen<br />
12 und 36 Monate. Automatische Vertragsverlängerung um 12 Monate, wenn der Vertrag nicht mit einer Frist von<br />
30 Tagen zum Ende der jeweiligen Vertragslaufzeit gekündigt wird.<br />
www.mittwald.de
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 01/2012<br />
18<br />
Peter Ganten neuer OSBA-Chef<br />
Die Open Source Business<br />
Alliance (OSBA), deren 235<br />
Mitglieder sich aus dem Zusammenschluss<br />
von Lisog<br />
(128 Mitglieder) und dem<br />
<strong>Linux</strong>-Verband Live (107 Mitglieder)<br />
rekrutieren, hat auf<br />
ihrer jüngsten Mitgliederversammlung<br />
im Monat November<br />
einen neuen Vorstand<br />
gewählt.<br />
Als neuer Vorsitzender folgt<br />
Peter Ganten nun auf Karl-<br />
Heinz Strassemeyer, der aus<br />
Peter Ganten von Univention übernimmt<br />
den Vorsitz bei der OSBA.<br />
Altersgründen ausscheidet.<br />
Ganten ist im Hauptberuf<br />
Geschäftsführer der Bremer<br />
Univention GmbH. Zu Stellvertretern<br />
wurden Holger<br />
Dyroff (Suse) und Thomas<br />
Uhl (Topalis Holding) bestimmt.<br />
Die OSBA [http://www.<br />
osb‐alliance.com] betrachtet sich<br />
als „führendes Netzwerk von<br />
Organisationen, die Open<br />
Source Software entwickeln,<br />
darauf aufbauen und sie anwenden“.<br />
Gegenwärtig arbeiten vier<br />
Arbeitsgruppen schon an Vertragsbedingungen<br />
für die Beschaffung<br />
von IT-Leistungen,<br />
die Open-Source-Anbieter<br />
nicht mehr benachteiligen,<br />
an einer Betriebssystemunabhängigen<br />
Thin-Client-<br />
Infrastruktur, an einem Open-<br />
Source-Cloud-Stack sowie an<br />
einer Verbesserung der Interoperabilität<br />
des ODF-Formats<br />
mit dem Microsoft-OOXML-<br />
Format.<br />
n<br />
Apache gibt Java-Projekt Harmony auf<br />
Die Apache Foundation hat<br />
das Projekt Harmony aufs<br />
Abstellgleis geschickt. Mit<br />
einem eindeutigen Votum<br />
stimmten die Mitglieder des<br />
Project Management Comittee<br />
im November dafür, Harmony<br />
aufzugeben und in den<br />
so genannten Attic-Bereich zu<br />
verschieben. Damit scheiterte<br />
der 2005 gestartete Versuch<br />
von Apache, eine freie Java-<br />
Umsetzung zu schaffen.<br />
Das Projekt hatte von Beginn<br />
an mit vielen Widrigkeiten zu<br />
kämpfen, unter anderem mit<br />
der hartnäckigen Weigerung<br />
der Java-Besitzer Sun und<br />
später Oracle, das für die Zertifizierung<br />
nötige Technology<br />
Compatibility Kit herauszugeben.<br />
Apache hatte später<br />
aus Protest dagegen sogar<br />
OSBF gründet Cloud-Initiative<br />
den Java-Community-Prozess<br />
verlassen.<br />
Dass IBM sich zudem für die<br />
Weiterentwicklung des von<br />
Oracle forcierten Open JDK<br />
und eine Zusammenarbeit mit<br />
Oracle aussprach, zählte zu<br />
den weiteren Stolpersteinen<br />
von Harmony. IBM zählte zu<br />
den Gründern und Unterstützern.<br />
Statt Harmony als inoffizielle<br />
und nicht zertifizierte<br />
Java-Entwicklung weiter zu<br />
unterstützen, habe IBM nun<br />
einen Richtungswechsel hin<br />
zu Open JDK vollzogen, sagte<br />
der IBM-Verantwortliche Bob<br />
Sutor zur Entscheidung seines<br />
Unternehmens. Daraufhin gab<br />
auch der Harmony-Projektverantwortliche<br />
Tim Ellison sein<br />
Plazet zu der Entscheidung<br />
von IBM.<br />
n<br />
Freshmeat heißt jetzt Freecode<br />
Das bekannte Softwareverzeichnis<br />
Fresh meat bekommt<br />
einen neuen Namen und heißt<br />
nun Freecode. Vor 14 Jahren<br />
baute sich Patrick Lenz zur<br />
besseren Übersicht über aktuelle<br />
Versionen des <strong>Linux</strong>-<br />
Kernels und zu weiterer Software<br />
eine <strong>Web</strong>site. Das daraus<br />
entstandene Freshmeat-Verzeichnis<br />
steht unter Leitung<br />
des Unternehmens Geeknet<br />
seit über zehn Jahren als Anlaufstelle<br />
für Interessierte an<br />
freier Software bereit.<br />
Nun hat sich Betreiber Geeknet<br />
(ehemals Sourceforge)<br />
– wie Patrick Lenz schreibt<br />
– aus Marketinggründen entschlossen<br />
den Namen in Freecode<br />
zu ändern [http://freecode.<br />
com/articles/whats‐in‐a‐name].<br />
Insbesondere in den USA haben<br />
sich die Marketingleute<br />
wohl die Zähne daran ausgebissen,<br />
Sponsoren für „Freshmeat“<br />
zu finden. Der Name<br />
habe bei potenziellen Kunden<br />
zu allerlei Assoziationen geführt,<br />
die allesamt wenig mit<br />
freier Software zusammenhängen,<br />
schreibt Lenz. Der<br />
Namenswechsel soll dieses<br />
Problem nun lösen. Eine entsprechende<br />
Weiterleitung der<br />
URL [http://freshmeat.net] auf<br />
[http://freecode.com] ist schon<br />
eingerichtet.<br />
n<br />
Der Open Source Business<br />
Foundation e. V. hat eine<br />
Open-Source-Cloud-Initiative<br />
ins Leben gerufen. Taufpaten<br />
der neuen Initiative sind die<br />
OSBF-Mitgliedsunternehmen<br />
Talend, Open-Xchange, Suse<br />
<strong>Linux</strong>, Microsoft und Zimory.<br />
Sie wollen dafür sorgen, das<br />
das Prinzip Offenheit, das bereits<br />
für den Erfolg der Open-<br />
Source-Bewegung verantwortlich<br />
sei, auch im Cloud-Umfeld<br />
um sich greift.<br />
Konkret soll es ein „Open<br />
Cloud Zertifikat“ geben, dass<br />
sich Anwender selbst verleihen<br />
können, wenn sie meinen<br />
mit den Leitlinien der<br />
Initiative übereinzustimmen.<br />
Die Initiative ihrerseits soll<br />
dieses selbst verliehene Zertifikat<br />
gegebenenfalls wieder<br />
aberkennen können, wenn ihr<br />
Verstöße gegen die Vorgaben<br />
bekannt werden. Zum anderen<br />
ist auch ein „Open Cloud<br />
Award“ geplant, der bereits<br />
im kommenden Jahr erstmals<br />
vergeben werde.<br />
Von den zahlreichen bereits<br />
existierenden Gremien für<br />
offenes Cloud Computing<br />
oder die Standardisierung<br />
im Cloud-Umfeld – etwa der<br />
Open Cloud Initiative [http://<br />
www.opencloudinitiative.org], dem<br />
Open Cloud Manifesto oder<br />
der IEEE Cloud Computing<br />
Standards Study Group – will<br />
sich die neue Initiative der<br />
OSBF dadurch abheben, dass<br />
sie sich nicht allein technischen<br />
Fragen widmet, sondern<br />
auch die rechtlichen und<br />
sozialen Rahmenbedingungen<br />
des Trendthemas Cloud in den<br />
Fokus rückt.<br />
n
NUR 3,56€ *<br />
pro vServer in der Customer Cloud<br />
NEU: AB 10. NOVEMBER 2011<br />
Endlich mit der Cloud<br />
mal richtig sparen!<br />
Die Private Cloud, die sich jedes Unternehmen leisten kann. Sparen Sie Ressourcen,<br />
Manpower und Budget: Ab 15,45 €* pro Monat können Sie sich Ihre eigene Virtual- Core®<br />
Customer Cloud ins Unternehmen holen und Ihre IT-Kapazitäten durch Virtualisierung so<br />
flexibel wie noch nie gestalten.<br />
6 Monate kostenlos testen unter www.virtual-core.de<br />
* Preise inkl. MwSt.<br />
Virtual-Core® ist eine eingetragene Marke der Firma KAMP Netzwerkdienste GmbH – www.kamp.de
Aktuell<br />
www.linux-magazin.de Zahlen & Trends 01/2012<br />
20<br />
Firefox-Version mit Bing als Standardsuche<br />
Mozilla gibt eine angepasste<br />
Version seines Firefox-Browsers<br />
heraus, die Microsofts<br />
Suchmaschine Bing als<br />
Standardsuche im Suchfeld<br />
oben rechts und in der Schnellstartleiste<br />
einsetzt. Zudem<br />
ist Bing.com schon als Startseite<br />
des Firefox eingetragen.<br />
<strong>Linux</strong>-Nutzer, sie werden es<br />
wohl verschmerzen können,<br />
zählen nicht zur Zielgruppe<br />
der Special-Edition, der angepasste<br />
Firefox-Browser ist<br />
ausschließlich für Mac OS X<br />
und Windows gedacht.<br />
Sorry, keine <strong>Linux</strong>-Unterstützung beim Firefox mit Bing.<br />
Bereits im vergangenen Jahr<br />
hatte Mozilla angekündigt,<br />
Bing in seine Auswahl aufzunehmen.<br />
Damals hieß die<br />
Reihenfolge der angezeigten<br />
Suchmaschinen und verwandter<br />
Services Google (als<br />
Default-Einstellung), Yahoo,<br />
Bing, Amazon, E-Bay und<br />
Wikipedia.<br />
Mozilla finanziert sich zu<br />
einem guten Teil über die<br />
Gelder der Suchmaschinenbetreiber,<br />
die großes Interesse<br />
daran haben, sich im populären<br />
Browser präsentieren zu<br />
können. Der Firefox mit Bing,<br />
für den es eine eigene <strong>Web</strong>site<br />
gibt [http://www.firefoxwithbing.<br />
com], erweitert nach Mozillas<br />
eigenen Angaben die Partnerschaft<br />
mit Microsoft. n<br />
CCC fordert Offenlegung des Bundestrojaners<br />
Auch eine weitere Version<br />
des so genannten Bundestrojaners,<br />
die über Antiviren-<br />
Spezialist Kaspersky an den<br />
Chaos Computer Club gelangte,<br />
genüge nicht den Ansprüchen<br />
an Rechtsstaat und<br />
IT-Sicherheit – zu diesem Ergebnis<br />
kommt der CCC und<br />
fordert, den Quelltext der<br />
Software offenzulegen.<br />
Eine „fabrikneue“ Version sei<br />
es, die ihm zugetragen wurde,<br />
glaubt der CCC und kommt<br />
<strong>Linux</strong> New Media im Ubuntu Software Center<br />
Das in den Ubuntu-<strong>Linux</strong>-Versionen<br />
integrierte Softwaremanagement-System<br />
[http://www.<br />
ubuntu.com/ubuntu/features/ubuntu‐software‐centre],<br />
in dem auch<br />
kommerzielle Anwendungen<br />
zu haben sind, wird um Verlagsangebote<br />
erweitert.<br />
In eigener Sache: Eine Kooperation<br />
mit der hinter Ubuntu<br />
stehenden Firma Canonical<br />
bringt die <strong>Linux</strong>-New-Media-Titel<br />
„<strong>Linux</strong> <strong>Magazin</strong>e“,<br />
„Ubuntu User“ und „Admin“<br />
in digitaler Form ins Ubuntu<br />
Software Center.<br />
Das Center ist ab sofort erst<br />
mit den englischsprachigen<br />
Ausgaben der genannten<br />
<strong>Magazin</strong>e bestückt. Die<br />
deutschsprachigen Ausgaben<br />
„<strong>Linux</strong>-<strong>Magazin</strong>“, „Ubuntu<br />
zu dem Schluss: „Entgegen allen<br />
Beteuerungen der Verantwortlichen<br />
kann der Trojaner<br />
weiterhin gekapert, beliebiger<br />
Code nachgeladen und auch<br />
die angeblich revisionssichere<br />
Protokollierung manipuliert<br />
werden.“<br />
Der CCC stellt deshalb Forderungen<br />
auf, die den sofortigen<br />
Stopp jedes Trojaner-Einsatzes<br />
und eine „Forbidden Tree“-Lösung<br />
beinhalten. Bei der wäre<br />
jede Verwertung in einem Verfahren<br />
ausgeschlossen, wenn<br />
Daten von einer infiltrierten<br />
Festplatte stammen.<br />
Zudem fordert der CCC angesichts<br />
der als mangelhaft<br />
eingeschätzten Qualität der<br />
Software die Quelltexte und<br />
Prüfprotokolle für alle bereits<br />
vergangenen Einsätze offenzulegen.<br />
Auch von künftigen<br />
Einsätzen sollten jeweils<br />
Quellcode, Binärdateien und<br />
Protokolle öffentlich sein, so<br />
der Computer-Club. n<br />
User“ und „Admin“ folgen in<br />
Kürze nach.<br />
Käufer erhalten die <strong>Magazin</strong>e<br />
als hochwertige PDF-Dokumente.<br />
„Der Vertrieb unserer<br />
<strong>Magazin</strong>e über das Ubuntu<br />
Software Center eröffnet uns<br />
einen neuen Weg, unsere<br />
Kunden global zu erreichen“,<br />
sagt Brian Osborn, CEO der<br />
<strong>Linux</strong> New Media. n<br />
Debconf 2012 in<br />
Nicaragua<br />
Die 12. Debian-Entwicklerkonferenz<br />
findet vom 8. bis<br />
14. Juli 2012 in Nicaraguas<br />
Hauptstadt Managua statt.<br />
Das hat das Debian-Projekt<br />
nun mitgeteilt. Der Konferenz<br />
mit Vorträgen und Birdsof-a-Feather-Runden<br />
(BoF)<br />
geht am 7. Juli ein Debian<br />
Day voraus, auf dem sich die<br />
freie <strong>Linux</strong>-Distribution der<br />
Öffentlichkeit präsentiert. Bereits<br />
eine Woche früher, am 1.<br />
Juli, startet das Debcamp, zu<br />
dem die Projektmitglieder anreisen,<br />
um sich persönlich zu<br />
besprechen und gemeinsam<br />
zu programmieren.<br />
Mit der Auswahl von Nicaragua<br />
findet die internationale<br />
Konferenz erstmals in<br />
einem mittelamerikanischen<br />
Land statt. Eine rudimentäre<br />
<strong>Web</strong>site für die Debconf 12 ist<br />
bereits unter [http://debconf12.<br />
debconf.org] online gegangen.<br />
Derzeit suchen die Veranstalter<br />
aber noch Sponsoren<br />
sowie ehrenamtliche Helfer.<br />
(jcb/mfe/mhu/uba) n
FÜR EIN SICHERES GEFÜHL!<br />
Professionelle InterNetX Server-Lösungen.<br />
Wir entwickeln mit Ihnen Ihr Sicherheitskonzept<br />
und stellen individuell konfigurierte Server bereit.<br />
24/7 Support durch geschulte Techniker<br />
Zertifiziertes Tier 3 Data Center<br />
1 GBit/s Uplink ohne Begrenzung<br />
Nur Markenhardware von DELL ® , CISCO ® , AMD ®<br />
Jetzt informieren:<br />
www.internetx.eu<br />
DOMAINS<br />
GRATIS*<br />
www.internetx.eu<br />
*Das Angebot richtet sich nur an Gewerbetreibende und kann in der Zeit vom 1.10. bis 31.12.2011 über www.internetx.eu bestellt werden. Die Domain-Registrierung betrifft ausschließlich .EU-Neuregistrierungen<br />
(bis zu 10 Domains gratis) für das 1. Jahr. Die Policies der Registry EURid sind maßgeblich. Weitere Informationen unter: www.internetx.eu
Aktuell<br />
www.linux-magazin.de Kernel-News 01/2012<br />
22<br />
Zacks Kernel-News<br />
Kernel.org: Tross der Rückkehrer<br />
Noch immer sind die Scherben<br />
des Einbruchs in die Kernel.<br />
org-Server nicht ganz zusammengekehrt.<br />
Die betroffenen<br />
Maschinen sind zwar wieder<br />
in Betrieb, doch die Dienste –<br />
dazu gehört auch das Git-Hosting<br />
– stehen erst nach und<br />
nach wieder zur Verfügung,<br />
und zwar nach Möglichkeit<br />
besser abgesichert. Viele Entwickler<br />
vertrauen den Kernel.<br />
org-Servern nun wieder ihr<br />
Repository an.<br />
So teilt etwa Nicholas A. Bellinger<br />
mit, dass das SCSI-Target-Modul<br />
LIO wieder auf Git.<br />
kernel.org verfügbar ist. Konrad<br />
Wilk von Oracle schreibt,<br />
sein Xen-Quelltext sei ebenfalls<br />
dort zu finden, und der<br />
Suse-Entwickler Takashi Iwai<br />
betreibt sein Sound-Repository<br />
auch auf dem Kernel-Server.<br />
Weitere Rückkehrer sind Chris<br />
Ball mit dem MMC-Code für<br />
Multimediakarten, Roland<br />
Dreier mit der Infiniband-Unterstützung<br />
sowie Theodore Y.<br />
Ts’o mit seinem Dateisystem<br />
Ext 4.<br />
Die Störungen durch den Einbruch<br />
klingen ab, doch die<br />
neuen Sicherheitsmaßnahmen<br />
und Arbeitsabläufen nehmen<br />
nur langsam Form an. Seiner<br />
Mail zu Kernel 3.1 fügte Linus<br />
Torvalds an: „Ich hätte gerne<br />
eine Echtheitsbestätigung<br />
für die Pull-Requests. Bei<br />
den geringen Änderungen in<br />
der vergangenen »‐rc«-Phase<br />
hatte ich noch die Zeit, mir<br />
einzelne Commits anzusehen<br />
und sie zu prüfen. Im Merge-<br />
Window mit rund 11 KByte<br />
verändertem Code, die ich in<br />
»linux‐next« sehe, ist das aber<br />
nicht mehr machbar. Benutzt<br />
also bitte Git.kernel.org oder<br />
einen anderen vertrauenswürdigen<br />
Host.“<br />
Unterdessen wächst das Vertrauensnetzwerk,<br />
das die Kernelprogrammierer<br />
knüpfen.<br />
Dazu treffen sie sich persönlich<br />
mit anderen Entwicklern,<br />
denen sie vertrauen, und signieren<br />
deren öffentliche GPG-<br />
Schlüssel. Im Oktober veranstaltete<br />
Jonathan Cameron im<br />
englischen Cambridge eine<br />
Key-Signing-Party, H. Peter<br />
Anvin eine im kalifornischen<br />
Santa Clara. Von Peter stammt<br />
auch eine Anleitung, nach der<br />
Kernelentwickler ihre Benutzerkonten<br />
wieder aktivieren<br />
und mit ihrem kryptographischen<br />
Schlüssel Teil des<br />
neuen <strong>Web</strong> of Trust werden<br />
können.<br />
Greg Kroah-Hartman beschreibt,<br />
wie Entwickler die<br />
Sicherheit ihrer eigenen Rechner<br />
überprüfen sollen. Dazu<br />
meint er: „Der Einbruch auf<br />
Kernel.org und damit verbundenen<br />
Servern hat gezeigt,<br />
dass die Rechner einiger<br />
Kernelentwickler ebenfalls<br />
kompromittiert waren.“ n<br />
Wie einige andere Git-Repositories ist auch der Code für das Dateisystem Ext 4<br />
auf die Kernel.org-Server zurückgekehrt.<br />
Suspend-Daemon für <strong>Linux</strong><br />
Der Suse-Entwickler Neil<br />
Brown arbeitet unter [http://<br />
neil.brown.name/git/lsusd] an einem<br />
<strong>Linux</strong>-Suspend-Daemon.<br />
Der Dienst soll eine einfache<br />
Schnittstelle bieten, die kontrolliert,<br />
wann und wie Suspend<br />
to Disk erfolgt. Laufende<br />
Software kommuniziert über<br />
Dateien in »/var/run/suspend/«<br />
mit dem Daemon. Diese<br />
Datei-basierte Schnittstelle<br />
an einem ungewöhnlichen Ort<br />
erntete Kritik.<br />
Das ist wenig überraschend,<br />
gibt es doch bereits eine verwirrende<br />
Auswahl an Schnittstellen<br />
zwischen Userspace<br />
und Kernel, unter anderem<br />
»/proc«, »/sys«, I/O-Controls<br />
und Systemaufrufe. Daneben<br />
diskutierte die Mailingliste<br />
weitere technische Probleme.<br />
Dazu gehört, dass Neils Code<br />
ursprünglich nur als Proof of<br />
Concept gedacht war. Für den<br />
Praxiseinsatz müsste er robuster<br />
werden, mehr Features<br />
aufweisen und mehr Fälle berücksichtigen.<br />
Von diesem Punkt aus verzweigte<br />
sich die Diskussion,<br />
bis Rafael J. Wysocki bemerkte:<br />
„Du ziehst immer mehr<br />
Änderungen am Kernel in<br />
Betracht, nur damit du etwas<br />
im Userspace implementieren<br />
kannst, das wiederum andere<br />
Änderungen am Kernel ersparen<br />
soll. Das hört sich total<br />
verkehrt an.“ Trotz aller Kritik<br />
lehnt aber niemand die grundlegende<br />
Idee eines Suspend-<br />
Daemon für <strong>Linux</strong> ab. n
Virtualbox am Pranger<br />
Der Red-Hat-Entwickler Dave<br />
Jones lässt kein gutes Haar an<br />
Virtualbox. Er schreibt: „Die<br />
Menge an Bugreports, die wir<br />
von Virtualbox-Anwendern<br />
bekommen, ist erstaunlich.<br />
Die Software steht unter GPL,<br />
aber das bedeutet leider nicht,<br />
dass sie auch gut ist.“ Fast alle<br />
Bugs sähen wie beschädigte<br />
Speicherbereiche aus, fährt<br />
Jones fort: kaputte Listen, kaputte<br />
Page-Tabellen und unerklärliche<br />
Abstürze.<br />
Dave hat daher ein Patch<br />
eingereicht, das den Kernel<br />
als „tainted“ (beschmutzt)<br />
markiert, wenn Virtualbox<br />
geladen ist. Das Gleiche geschieht<br />
auch bei unfertigen<br />
Treibern aus dem »staging/«-<br />
Verzeichnis. Ist der Kernel als<br />
beschmutzt markiert, schicken<br />
Bugreport-Tools nicht<br />
automatisch einen Fehlerbericht.<br />
Daves Patch besteht<br />
aus wenigen Zeilen, in einem<br />
Quelltext-Kommentar steht:<br />
„Virtualbox ist Mist.“<br />
Das Patch gefällt Greg Kroah-<br />
Hartman so gut, dass er es<br />
gerne in den Kernel von Open<br />
Suse aufnehmen möchte. Der<br />
Suse-Entwickler fügt an: „Wir<br />
sollten eine Liste mit solchen<br />
Modulen anlegen.“<br />
Das führte zur Zuspitzung<br />
der Diskussion, die in dem<br />
Vorschlag gipfelte, alles außerhalb<br />
des offiziellen <strong>Linux</strong>-<br />
Quelltextes aus dem Kernel<br />
auszusperren, was sich mittels<br />
GPG-Signaturen machen<br />
ließe. Das ging Alan Cox zu<br />
weit, der ein intellektuelles<br />
Wettrüsten befürchtete. Das<br />
Tainting sei einfach nur dazu<br />
da, das Debuggen von Kernelproblemen<br />
einfacher zu<br />
machen, meint er.<br />
Frank Mehnert, der Virtualbox-Maintainer,<br />
zeigt Verständnis<br />
dafür, dass die Entwickler<br />
Fehlermeldungen bei<br />
geladenen externen Modulen<br />
lieber ignorieren möchten. Er<br />
wünscht sich aber, dass die<br />
Markierung für seine Virtualisierungssoftware<br />
nicht gerade<br />
»TAINT_CRAP« bleibe. n<br />
Akku-Patch<br />
Das Active State Power Management<br />
(ASPM) von PCI-<br />
Express-Karten macht einigen<br />
Laptop-Benutzern Ärger: Ihre<br />
Akkulaufzeit unter <strong>Linux</strong> ist<br />
kürzer als unter Windows.<br />
Ein Patch des Red-Hat-Entwicklers<br />
Matthew Garrett soll<br />
nun Abhilfe schaffen.<br />
Der Programmierer hat sich<br />
angesehen, wie Windows mit<br />
den Energiesparfunktionen<br />
der Karten umgeht. Mit seinem<br />
Code konnte Garrett ungefähr<br />
5 Watt auf einem ruhenden<br />
Thinkpad X220 einsparen. Die<br />
Ubuntu-Entwickler wollen<br />
den gepatchten Kernel einer<br />
Testserie unterziehen. (Zack<br />
Brown/mhu)<br />
n<br />
Kernel-News 01/2012<br />
Aktuell<br />
www.linux-magazin.de<br />
23<br />
1. Lernen Sie!<br />
Ja, „training-on-the-job“, oft praktiziert, aber nicht<br />
überzeugend. Denn die Kollegen haben nie Zeit<br />
für echte Erklärungen, außerdem werden „Neue“<br />
sofort von dem vereinnahmt, was im Unternehmen<br />
schon seit Ewigkeiten tradiert wird. Warum gibt's<br />
seit 2000 Jahren Schulen und Universitäten?<br />
„LERNEN“ ist eine vollwertige Tätigkeit, auf die<br />
man sich konzentrieren muß, die man nicht 'mal<br />
eben so nebenbei tun kann, und die immer auch<br />
eine Prise „Erneuerung“ beinhalten sollte!<br />
2. Ineffiziente Arbeit nicht akzeptieren!<br />
Je spezialisierter Sie arbeiten, desto weniger<br />
echte, fachliche Kollegen haben Sie in Ihrem eigenen<br />
Unternehmen. Wir stellen deshalb Gruppen<br />
zusammen, in denen Sie neben hilfsbereiten<br />
Kollegen mit ähnlichen Kenntnissen an IHREM<br />
Projekt arbeiten. Und ständig ist ein fachlicher Berater<br />
anwesend.<br />
„Guided Coworking“ nennen wir das, und es<br />
könnte DIE Lösung für so manches Projekt sein,<br />
das in Ihrer Firma „hakt“.<br />
3. Hintergrund<br />
Wer den riesigen OpenSource-Baukasten schnell<br />
beherrschen muß, geht zu einer unserer über 100<br />
Schulungen. Wer das bereits kann, aber schneller<br />
mit seinen Projekten vorankommen will, der<br />
kommt mit seiner Arbeit zum Guided Coworking.<br />
Wir sind eine der erfolgreichsten Schulungseinrichtungen<br />
im gesamten Bereich „OpenSource“<br />
- sowohl für Admins, als auch für Entwickler.<br />
Siehe www.linuxhotel.de
Aktuell<br />
www.linux-magazin.de <strong>Linux</strong>con 01/2012<br />
24<br />
Die erste <strong>Linux</strong>con Europe<br />
Gipfeltreffen in Europa<br />
Die erste <strong>Linux</strong>con in Europa hat sich als Besuchermagnet herausgestellt. Im Oktober 2011 drängten sich rund<br />
900 Besucher in den überfüllten Konferenzräumen des Clarion-Hotels in Prag, um Linus Torvalds zu sehen.<br />
Daneben gab es eine Menge Vorträge von hohem fachlichen Niveau. Mathias Huber<br />
Abbildung 1: Erstmals veranstaltete die <strong>Linux</strong> Foundation eine<br />
<strong>Linux</strong>con in Europa. Auf dem Kernelentwickler-Podium ließ sich<br />
ein gutgelaunter Linus Torvalds auf die Fragen des Publikums ein.<br />
Linus Torvalds persönlich bekamen<br />
<strong>Linux</strong>-Enthusiasten in<br />
Europa bisher so gut wie nie<br />
zu sehen. Das hat sich mit der<br />
ersten <strong>Linux</strong>con Europe, die<br />
vom 24. bis 28. Oktober 2011<br />
in Prag stattfand, geändert.<br />
Kernelentwickler<br />
zum Anfassen<br />
Die veranstaltende <strong>Linux</strong><br />
Foundation hatte den jährlichen<br />
Kernel Summit auf die<br />
Tage unmittelbar vor der Konferenz<br />
an denselben Ort gelegt.<br />
So blieben nicht nur Torvalds<br />
(Abbildung 1), sondern auch<br />
andere Kernelentwickler wie<br />
Greg Kroah-Hartman, Alan<br />
Cox oder Ted Ts’o zur <strong>Linux</strong>con<br />
und waren in<br />
den Gängen des Clarion-Kongresshotels<br />
für ein Schwätzchen<br />
zu haben (Abbildung<br />
2).<br />
Ein Kernel-Podium<br />
bildete nach der Begrüßung<br />
durch Jim<br />
Zemlin, dem CEO der<br />
<strong>Linux</strong> Foundation,<br />
den Auftakt zum Vortragsprogramm.<br />
Auf<br />
der Bühne saßen Torvalds,<br />
Cox sowie der<br />
Embedded-Spezialist<br />
Thomas Gleixner<br />
und Paul McKenney<br />
von IBM. Sie stellten<br />
sich den Fragen, die<br />
der moderierende<br />
Entwickler Lennart<br />
Poettering (Red Hat) gesammelt<br />
hatte.<br />
Dazu gehörte die Frage, wie<br />
wichtig den Entwicklern die<br />
Kompatibilität des Kernels<br />
mit Userspace-Programmen<br />
sei. „Den Benutzer zu stören<br />
ist tabu“, betonte der <strong>Linux</strong>-<br />
Erfinder. Zudem erklärte er:<br />
„Beim Versionswechsel zu<br />
Kernel 3.0 gab es Programme,<br />
die einfach schon an der Versionsnummer<br />
scheiterten.<br />
So ein Programm ist einfach<br />
schlecht geschrieben. Dennoch<br />
haben wir ein Flag eingerichtet,<br />
das auf Wunsch als<br />
Version 2.6.40 angibt. Eigentlich<br />
ein idiotisches Patch –<br />
aber es zeigt, wie wichtig uns<br />
der Userspace ist.“<br />
Als künftige Aufgaben sehen<br />
die Kernelentwickler die weitere<br />
Verbesserung der Energie-<br />
Effizienz und Skalierbarkeit<br />
des freien Betriebssystems.<br />
Vor allem aber wollen sie aufpassen,<br />
dass ihnen die Komplexität<br />
des Codes nicht über<br />
den Kopf wächst. Torvalds:<br />
„Das ist beispielsweise bei<br />
den Treibern so, die ständig<br />
viel neue Hardware unterstützen<br />
müssen.“<br />
Cloud-Zeitalter<br />
Mit Skalierbarkeit beschäftigte<br />
sich auch der Vortrag des Ext-<br />
4-Entwicklers Theodore Ts’o,<br />
der derzeit bei Google angestellt<br />
ist. Dort arbeitet er daran,<br />
das <strong>Linux</strong>-Dateisystem an<br />
die Erfordernisse des Cloud<br />
Computing anzupassen. Es<br />
gehe dabei vor allem um Wirtschaftlichkeit,<br />
betonte der<br />
Programmierer: „Man nutzt<br />
die Energie-Effizienz großer<br />
Rechenzentren und sorgt dafür,<br />
dass die Server gut ausgelastet<br />
sind.“<br />
Dabei liefen viele Jobs auf<br />
einer einzigen Maschine, sodass<br />
dem Dateisystem weniger<br />
Arbeitsspeicher für die<br />
Bitmaps zur Verfügung stehe,<br />
die die Zuordnung der Blöcke<br />
speichern. Landen diese Daten<br />
folglich im Swap, kommt<br />
es zu großen Verzögerungen<br />
bei Systemaufrufen wie »fallocate()«<br />
und »unlink()«. Hier<br />
schafft das Ext-4-Feature Bigalloc<br />
Abhilfe. Statt Blockgrößen<br />
von 4 KByte verwendet<br />
das Dateisystem so genannte<br />
Cluster, die bei einer Größe<br />
von 1 MByte besonders effizient<br />
werden. Somit fallen<br />
weniger Einträge in den Bitmaps<br />
an, die zudem häufiger<br />
aufgerufen werden und so im<br />
Arbeitsspeicher bleiben.<br />
Zu den ersten Wünschen seines<br />
Arbeitgebers Google habe<br />
jedoch gehört, Ext 4 auch<br />
ohne Journaling zu betreiben,<br />
erzählte Ted Ts’o. Der Suchmaschinenkonzern<br />
stellt die<br />
Konsistenz der Daten durch<br />
das hauseigene Cluster-Dateisystem<br />
sicher, das Journal ist<br />
dabei überflüssig und führt<br />
nur zu Performance-Einbußen.<br />
Daher blieb Google auch<br />
lange bei Ext 2, bis Ts’o die<br />
Option zum Abschalten des<br />
Journaling umsetzte.<br />
Daneben hat der Dateisystem-Entwickler<br />
ein Feature<br />
namens Punch geschaffen,<br />
das vor allem beim Einsatz<br />
von Virtualisierung nützlich<br />
ist. Es kann Speicherplatz innerhalb<br />
einer Datei freigeben,<br />
also sozusagen ein Loch hineinstanzen<br />
(punch). Unter<br />
Virtualisierungslösungen ist<br />
jede Festplatte der Gastsysteme<br />
als Datei implementiert.<br />
Löscht der Gast Dateien auf<br />
seiner virtuellen Platte, sorgt<br />
Punch dafür, dass auch der<br />
Host den Speicherplatz wiederverwenden<br />
kann. Damit<br />
lässt sich der Plattenplatz auf
Abbildung 2: Die Kernelentwickler Ted Ts’o (links) und Alan Cox bei einer informellen<br />
Besprechung in der Sitzgruppe.<br />
dem Gastgeber effizient nutzen,<br />
sogar Überprovisionieren<br />
ist möglich.<br />
Chris Mason von Oracle (Abbildung<br />
3) demonstrierte auf<br />
seinem Laptop das Konkurrenz-Dateisystem<br />
Btrfs. Das<br />
Publikum im überfüllten Saal<br />
staunte nicht schlecht, als<br />
der Referent auf der Kommandozeile<br />
ein Programm<br />
namens »btrfs‐corrupt‐block«<br />
aufrief, um eine Version der<br />
Metadaten zu beschädigen.<br />
Doch das diente lediglich zur<br />
Demonstration eines neuen<br />
Features namens Scrub, das<br />
das Dateisystem im Hintergrund<br />
wieder repariert.<br />
Der Code stammt von Arne<br />
Jansen, der beim <strong>Web</strong>hoster<br />
Strato arbeitet.<br />
Dateisystem-<br />
Reparatur<br />
Vom Red-Hat-Entwickler Josef<br />
Bacik kommt ein Recovery-<br />
Tool für Btrfs, das sich derzeit<br />
im Betastadium befindet. Es<br />
kümmert sich um den Root<br />
Tree Block, die Wurzel einer<br />
Btrfs-Partition. Ist diese beschädigt,<br />
lässt sich das Dateisystem<br />
nicht einmal einhängen.<br />
Baciks Programm hilft,<br />
indem es die nächstältere intakte<br />
Kopie verwendet. Dank<br />
der standardmäßigen Commit-<br />
Frequenz von 30 Sekunden ist<br />
diese nicht viel älter als das<br />
zerstörte Original. Das Feature<br />
ist rückwärtskompatibel<br />
und soll in Kernel 3.2 Einzug<br />
halten.<br />
Embedded-<br />
Konferenz<br />
Gleichzeit zur <strong>Linux</strong>con fand<br />
in den benachbarten Konferenzräumen<br />
die Embedded<br />
<strong>Linux</strong> Conference Europe<br />
(ELCE) statt. Dort beschäftigte<br />
sich beispielsweise Arnd<br />
Bergmann vom Linaro-Projekt<br />
mit USB-Sticks, CF- und SD-<br />
Karten sowie SSDs preisgünstiger<br />
Machart.<br />
Er analysierte solchen Flashspeicher<br />
anhand des Timings<br />
verschiedener Schreib- und<br />
Lesetests und identifizierte<br />
zwei Typen: Der eine ist für<br />
schnelle lineare Schreibvorgänge<br />
optimiert, wie sie etwa<br />
bei Video-Aufnahmen<br />
die Regel sind.<br />
Schreibzugriffe auf<br />
beliebige logische<br />
Blöcke (Random<br />
Write) verlaufen dagegen<br />
langsam. Der<br />
andere Typ erlaubt<br />
schnelleres Random<br />
Write, muss aber<br />
mit aufwändigem<br />
Umsortieren neuen<br />
Platz schaffen, wenn<br />
die freien physikalischen<br />
Blöcke ausgehen.<br />
Seine Befunde<br />
zu einzelnen Modellen und<br />
Fabrikaten hält Bergmann im<br />
Linaro-Wiki fest [1].<br />
Eher einen Schnappschuss<br />
aus seiner Arbeit als endgültige<br />
Befunde zeigte Yoshitake<br />
Kobayashi von Toshiba.<br />
Er arbeitet an Produkten für<br />
Aufzüge und Kraftwerke, die<br />
Langzeitunterstützung von<br />
mehr als zehn Jahren benötigen.<br />
Nach einigen Jahren ist<br />
die originale Hardware aber<br />
nicht mehr verfügbar, also<br />
muss er sich auf die Suche<br />
nach einer Kernelversion machen,<br />
die zwar neue Hardware<br />
unterstützt, aber gleichzeitig<br />
mit der bestehenden Software<br />
zusammenarbeitet.<br />
Doch was Kobayashi als „automatisierten<br />
Regressionstest“<br />
angekündigt hatte, stellte sich<br />
eher als Sammlung handgestrickter<br />
Skripte in Kombination<br />
mit dem <strong>Linux</strong> Test Project<br />
(LTP) heraus. Die Zuhörer<br />
empfahlen dringend, die Auswertung<br />
der Testprotokolle zu<br />
automatisieren.<br />
Wesentlich systematischer<br />
geht das <strong>Linux</strong> Driver Verification<br />
Project [2] vor, das<br />
Alexei Choroschilow von der<br />
Russischen Akademie der<br />
Wissenschaften vorstellte.<br />
Mit Hilfe statischer Code-<br />
Analyse und geballter Cluster-Rechenleistung<br />
sucht es in<br />
Kerneltreibern nach typischen<br />
Fehlern wie etwa Nullpointer-<br />
Abbildung 3: Der Btrfs-Erfinder Chris Mason von<br />
Oracle diskutiert künftige Features seines <strong>Linux</strong>-<br />
Dateisystems.<br />
Dereferenzierung. Das Projekt<br />
hat bereits zahlreiche Patches<br />
in den offiziellen Kernel eingebracht.<br />
Es bleibe aber eine<br />
Herausforderung, schloss<br />
Choroschilow seine Ausführungen,<br />
Suchkriterien für weitere<br />
Fehler zu formulieren.<br />
Positiv<br />
In den Keynotes verbreiteten<br />
die Größen der <strong>Linux</strong>-<br />
Industrie gute Stimmung<br />
und klopften der Entwicklergemeinde<br />
und dem eigenen<br />
Unternehmen auf die Schulter:<br />
Der neue Suse-CEO Nils<br />
Brauckmann zum Beispiel bat<br />
Andreas Pöschl vom Automobilbauer<br />
BMW auf die Bühne,<br />
der vom erfolgreichen SLES-<br />
Einsatz auf den Unternehmensservern<br />
berichtete. Tim<br />
Burke, Vater von Red Hats<br />
Enterprise-<strong>Linux</strong>, stellte fest:<br />
„Um eine Distribution groß<br />
zu machen, braucht es eine<br />
ganze Community.“<br />
Positiv darf auch die <strong>Linux</strong><br />
Foundation auf ihre europäische<br />
Konferenz zurückblicken:<br />
Der Veranstalter konnte<br />
mit 900 rund doppelt so viele<br />
Besucher verzeichnen wie<br />
prognostiziert. Neben zahlreichen<br />
Besuchern aus Tschechien<br />
und einigen aus Polen<br />
zog offenbar vor allem die<br />
Embedded-Konferenz auch<br />
viele Teilnehmer aus Ostasien<br />
an. Im Jahr 2012 soll die Konferenz<br />
in Barcelona über die<br />
Bühne gehen [3]. n<br />
Infos<br />
[1] Flash Card Survey:<br />
[https:// wiki. linaro. org/<br />
WorkingGroups/ Kernel/<br />
Projects/ FlashCardSurvey]<br />
[2] <strong>Linux</strong> Driver Verification Project:<br />
[http:// linuxtesting. org/<br />
results/ ldv]<br />
[3] <strong>Linux</strong>con Europe: [https://<br />
events. linuxfoundation. org/<br />
events/ linuxcon‐europe]<br />
<strong>Linux</strong>con 01/2012<br />
Aktuell<br />
www.linux-magazin.de<br />
25
Beherrschen Sie<br />
Ihre Infrastruktur<br />
Server innerhalb 1h verfügbar*<br />
Cloud Ready (ESXI, Hyper-V, Virtuozzo)<br />
Virtual Rack**<br />
Support 6 Tage die Woche<br />
Eingriffsgarantie innerhalb 1h***<br />
SuperPlan 2011 BestOF EG 2011 BestOF MG Hybrid 2011<br />
Intel Core i5-2400<br />
4x3.1+ GHz<br />
6 MB L2 - QPI 5 GT/sec<br />
RAM 16 GB DDR3<br />
Festplatte : 2x 2TB - SATA2<br />
RAID SOFT 0/1<br />
Anbindung : 100 Mbit/s<br />
Bandbreite : 100 Mbit/s<br />
IPv4 + IPv6<br />
84, 99 €<br />
inkl. MwSt./Monat 249,<br />
Intel Xeon i7 W3520<br />
4x2(HT)x2.66+ GHz<br />
8 MB L2 - QPI 4.8 GT/sec<br />
RAM 24 GB DDR3<br />
Festplatte : 2x 2TB - SATA2<br />
RAID SOFT 0/1<br />
Anbindung : 1 Gbit/s Lossless<br />
Bandbreite : 1 Gbit/s<br />
IPv4 + IPv6<br />
129, 98 €<br />
inkl. MwSt./Monat<br />
Intel Bi Xeon E5606<br />
2x4x2.13+ GHz<br />
2x8 MB L2 - QPI 2x 4.8 GT/sec<br />
RAM 24 GB DDR3 ECC<br />
Festplatten: 2x 40GB Intel SSD 2x 3TB SATA 2<br />
RAID : HARD 0/1 MegaRAID 6 Gbit/s<br />
Anbindung : 10 Gbit/s Lossless<br />
Bandbreite : 10 Gbit/s<br />
IPv4 + IPv6<br />
98 €<br />
inkl. MwSt./Monat<br />
* : Verfügbarkeit unter Vorbehalt der Validierung Ihrer Bestellung und im Rahmen der verfügbaren Bestände<br />
** : Optional<br />
*** : Eingriffsgarantie innerhalb 1h auf nicht erreichbaren Server<br />
Mehr Informationen: www.ovh.de/DS oder 0049 (0) 681 906730<br />
Ortsnetznummer<br />
Domains E-Mails Hosting
Testen Sie unsere<br />
dedizierten Server<br />
VPS<br />
Server<br />
Private<br />
Cloud<br />
OVH.DE<br />
Cloud Telefonie SMS Europas <strong>Web</strong>hoster Nr. 1
Titelthema<br />
www.linux-magazin.de HTML 5 01/2012<br />
28<br />
HTML-5-Anwendungen mit Canvas, SVG und <strong>Web</strong>sockets<br />
Blühende Oberflächen<br />
Dank HTML 5 lassen sich Client-Server-Anwendungen mit grafischer Oberfläche programmieren, wie sie das<br />
<strong>Web</strong> bisher nicht kannte. Dieser Artikel zeigt, wie das mit Canvas, SVG und <strong>Web</strong>sockets geht. Die Bibliotheken<br />
Jquery, Visualize und Autobahn helfen bei der Arbeit. Andreas Möller<br />
© Elena Elisseeva, 123RF.com<br />
Die neue Generation der Hypertext<br />
Mark up Language heißt HTML 5 [1] und<br />
ist mehr als nur eine Auszeichnungssprache.<br />
Im Zuge ihrer Spezifikation ist eine<br />
Reihe von Technologien entstanden, die<br />
<strong>Web</strong>anwendungen einen Innovationsschub<br />
bescheren. Besonders vielversprechend<br />
sind das Element Canvas und das<br />
<strong>Web</strong>socket-Protokoll.<br />
Canvas eröffnet die Möglichkeit, Grafiken<br />
mittels Javascript zu zeichnen – und<br />
das Hardware-beschleunigt. So lassen<br />
sich beispielsweise Diagramme aus Benutzereingaben<br />
oder veränderlichen Daten<br />
direkt im Browser generieren. Dank<br />
Online PLUS<br />
Einen Screencast zur Arbeit mit <strong>Web</strong>sockets<br />
finden Sie unter [http:// www.<br />
linux‐magazin. de/ plus/ 2012/ 01].<br />
des <strong>Web</strong>socket-Protokolls können Server<br />
und Browser sich unabhängig voneinander<br />
Nachrichten schicken. Damit<br />
lösen <strong>Web</strong>sockets das einseitige Frageund-Antwort-Spiel<br />
zwischen Client und<br />
Server gemäß HTTP-Protokoll ab. Diese<br />
Starrheit war bisher ein Hemmnis für alle<br />
Anwendungsfälle, in denen der Client auf<br />
eine Statusänderung der Servers wartet,<br />
etwa bei einem Chat.<br />
GUI mit Socket<br />
Dieser Artikel demonstriert die Techniken<br />
anhand eines Beispiels, das die Speicherauslastung<br />
eines entfernten Servers grafisch<br />
im Browser anzeigt. Dabei kommen<br />
Canvas für die Grafik und <strong>Web</strong>sockets als<br />
Netzwerkprotokoll zum Einsatz. Außerdem<br />
zeigen die praktischen Bibliotheken<br />
Visualize und Autobahn, was sie können.<br />
Das HTML-5-Element Canvas [2] liefert<br />
eine bemalbare Leinwand, als Zeichenwerkzeug<br />
dient Javascript. Dabei sind<br />
verschiedene Maltechniken, Kontexte genannt,<br />
im Angebot. Derzeit gibt es einen<br />
Kontext zum Zeichnen in zwei Dimensionen<br />
[3] sowie einen für drei Dimensionen:<br />
<strong>Web</strong> GL [4].<br />
Das Ergebnis ist eine rechteckige Leinwand<br />
aus kleinen, eingefärbten Quadraten<br />
– eine Bitmapgrafik. Sie ist allerdings<br />
nicht skalierbar. Diesem Mangel begegnet<br />
aber ein anderes HTML-5-Feature: Es besteht<br />
die Möglichkeit, SVG-Grafiken in<br />
Dokumente einzubetten. SVG, Scalable<br />
Vector Graphics [5], ist ein XML-Vokabular<br />
für die Beschreibung von Vektorgrafiken.<br />
Canvas wie auch SVG nutzen ähnliche<br />
Konzepte, um Grafiken aufzubauen. Sie<br />
können beispielsweise Pfade mit geraden<br />
oder gebogenen Begrenzungen anlegen,<br />
schließen, füllen und umranden.<br />
Das Bitmapverfahren überträgt das Bild<br />
einmalig auf eine Leinwand mit einer<br />
festen Anzahl von Quadraten (feste Auflösung).<br />
Es färbt dabei durch Maloperationen<br />
eingeschlossene oder überstrichene<br />
Quadrate ein.<br />
Abbildung 1: Vergleich zwischen Zeichnungen mittels<br />
Canvas (oben, Bitmap mit fester Auflösung) und SVG<br />
(unten, skalierbare Vektorgrafik).
Die Vektorgrafik dagegen wird auf eine<br />
Leinwand mit einer variablen Anzahl von<br />
Quadraten skalierbar gemalt. Listing 1<br />
zeichnet zweimal den gleichen Kegel, per<br />
Canvas und per SVG. Die Ausführung<br />
der Canvas-Grafik geschieht im »script«-<br />
Bereich des HTML-Dokuments. Nach<br />
Auswahl des Canvas-Elements selektiert<br />
der Javascript-Code den »2d«-Kontext<br />
und zeichnet.<br />
Die SVG-Grafik dagegen ist nach dem<br />
Canvas-Element im Körper des HTML-<br />
Dokuments eingebettet. Die Pfadbeschreibung<br />
»d="M10,0 L0,20 Q10,25 20,20 Z"«<br />
fällt im Vergleich zu den Canvas-Befehlen<br />
äußerst kompakt aus. Die Buchstaben der<br />
Maloperation entsprechen ungefähr den<br />
Canvas-Funktionsaufrufen. Die Ausgabe<br />
ist in Abbildung 1 zu sehen, die beim<br />
genauen Hinsehen den Qualitätsunterschied<br />
offenbart.<br />
Obwohl die Spezifikation von HTML 5<br />
noch nicht abgeschlossen ist, gibt es bereits<br />
Anwendungen für das Canvas-Element.<br />
Ein gutes Beispiel ist das Jquery-<br />
Plugin Visualize [7], das aus HTML-Tabellen<br />
automatisch Diagramme erzeugt.<br />
Visualize ist ein Plugin für die Javascript-<br />
Bibliothek Jquery [8]. Sie verdeckt viele<br />
Schwächen von Javascript und unterstützt<br />
neuere Versionen gängiger <strong>Web</strong>browser<br />
wie Firefox 2.0+, Google Chrome, Opera<br />
9.0+, Safari 3.0+ und Microsofts Internet<br />
Explorer 6.0+.<br />
Die Bibliothek adressiert die Elemente<br />
eines HTML-Dokuments mittels der<br />
kompakten CSS-Selektoren anstelle der<br />
schwer handhabbaren DOM-Schnittstelle<br />
und bietet für die so ausgewählten Elemente<br />
eine Vielzahl praktischer Funktionen.<br />
Unter anderem vereinfacht Jquery<br />
die Ereignis-Behandlung, ermöglicht<br />
Animationen und bietet Ajax-Methoden.<br />
Beispielsweise kann der Programmierer<br />
mit dem kompakten Ausdruck<br />
$('.story').click(function() {U<br />
alert($(this).text())})<br />
für jedes HTML-Element mit der Eigenschaft<br />
»class="story"« einen Eventhandler<br />
vereinbaren. Klickt der Anwender<br />
dann auf eines dieser Elemente, hebt<br />
Javascript dessen Inhalt mit einer Meldung<br />
hervor.<br />
Getreu dem Motto „Write less, do more“<br />
verwendet die Bibliothek für Methoden<br />
einfache Bezeichner wie »each()«,<br />
»map()«, »click()« oder »bind()«. Zusätzlich<br />
ist Jquery durch eine Vielzahl<br />
von Plug ins erweiterbar. Die Bibliothek<br />
wurde für den Einsatz in der Produktion<br />
bestmöglich komprimiert. Außerdem<br />
unterstützt Jquery den Standard CSS 3.<br />
HTML 5 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
29<br />
Effekte<br />
Neben Pfaden bieten der 2-D-Kontext<br />
von Canvas und SVG noch viele weitere<br />
Gestaltungsmöglichkeiten, beispielsweise<br />
Farbverläufe, Schatten, Transparenzeffekte,<br />
Gruppierungen, Transformationen<br />
sowie einfache Formen wie Quadrate,<br />
Kreisbögen, kubische und quadratische<br />
Bézierkurven (Splines). Canvas-<br />
2-D kann Grafiken zudem Pixel für Pixel<br />
behandeln. Einen sehr guten Einblick in<br />
die Verwendung des Canvas-Elements<br />
und von SVG in HTML 5 gibt Peter<br />
Kreußels Artikel „Malkasten“ aus dem<br />
<strong>Linux</strong>-<strong>Magazin</strong> 11/11 [6].<br />
Dem sei noch hinzugefügt, dass beim<br />
Canvas-Element in HTML 5 alle Browser<br />
erstmals von Hardwarebeschleunigung<br />
Gebrauch machen. Die Rechenoperationen<br />
für Grafiken laufen dabei auf der<br />
Grafikkarte statt auf der CPU ab. Zudem<br />
referenziert die HTML-5-Spezifikation<br />
SVG 1.2 (Tiny). Tiny ist eine Teilmenge<br />
von SVG 1.1. Dieses Profil wurde mit<br />
Rücksicht auf die einheitliche Verwendbarkeit<br />
von SVG auf vielen Geräteklassen<br />
zusammengestellt.<br />
Abbildung 2: Die HTML-Tabelle aus Listing 3, wie sie<br />
im <strong>Web</strong>browser aussieht.<br />
Listing 1: Kegel-Grafik mittels Canvas und SVG<br />
01 <br />
13 ctx.quadraticCurveTo(10,25,20,20)<br />
02 <br />
14 ctx.closePath();<br />
03 <br />
15 ctx.fill();<br />
04 <br />
16 }<br />
05 window.onload = function() {<br />
17 <br />
06 var cv = document.<br />
18 <br />
getElementsByTagName("canvas")[0];<br />
19 <br />
07 cv.width = cv.height = 25;<br />
08 var ctx = cv.getContext("2d");<br />
20 <br />
09 ctx.beginPath();<br />
21 <br />
11 ctx.moveTo(10, 0);<br />
22 <br />
12 ctx.lineTo(0, 20);<br />
23 <br />
Listing 2: Tortendiagramm mit Visualize<br />
01 $('table.pie').visualize({type: 'pie', pieMargin: 10});<br />
Listing 3: Visualize-Beispiel<br />
01 <br />
02 <br />
03 <br />
04 <br />
17 Visits<br />
05 <br />
18 <br />
06 <br />
19 <br />
<br />
20 Winter1100<br />
07 <br />
21 Frühling1100<br />
08 $(document).ready(function(){<br />
09 $('table.pie').visualize({type: 'pie',<br />
22 Sommer866<br />
pieMargin: 10});<br />
23 Herbst1000<br />
10 });<br />
24 <br />
11 <br />
12 <br />
13 <br />
25 <br />
26 <br />
27
Titelthema<br />
www.linux-magazin.de HTML 5 01/2012<br />
30<br />
Abbildung 3: Das Tortendiagramm aus Listing 3 in der Browseransicht.<br />
Abbildung 5: Aus den Daten in Abbildung 4 entsteht ein Balkendiagramm.<br />
01 GET /chat HTTP/1.1<br />
Jquery und Visualize sind unter MIT- sowie<br />
GPL-Lizenz verfügbar.<br />
Um ein Diagramm mittels Visualize darzustellen,<br />
wendet der <strong>Web</strong>entwickler die<br />
gleichnamige Methode auf eine Menge<br />
von mit Jquery ausgewählten Tabellen<br />
an. Für jede Tabelle liest Visualize<br />
die Daten aus und erstellt daraus ein<br />
Linien-, Torten-, Bereichs- oder Balken-<br />
Diagramm. Dazu zeichnet Jquery das<br />
Diagramm in ein Canvas-Element, das es<br />
standardmäßig nach der Tabelle einfügt.<br />
Die Form der Diagramme lässt sich durch<br />
Parameter des Funktionsaufrufs sowie<br />
durch CSS-Regeln beeinflussen.<br />
Torten oder Balken<br />
Die Listings 2 und 3 erzeugen für jede<br />
Tabelle der Klasse »pie« ein Tortendiagramm.<br />
Als ersten Parameter erwartet die<br />
Funktion »visualize()« ein Objekt mit Konfigurationsparametern.<br />
Den Diagramm-<br />
02 Host: server.example.com<br />
03 Upgrade: websocket<br />
04 Connection: Upgrade<br />
05 Sec‐<strong>Web</strong>Socket‐Key: dGhlIHNhbXBsZSBub25jZQ==<br />
06 Origin: http://example.com<br />
07 Sec‐<strong>Web</strong>Socket‐Protocol: chat, superchat<br />
08 Sec‐<strong>Web</strong>Socket‐Version: 13<br />
Listing 4: <strong>Web</strong>socket-Anfrage des<br />
Clients<br />
01 HTTP/1.1 101 Switching Protocols<br />
02 Upgrade: websocket<br />
03 Connection: Upgrade<br />
Listing 5: Server bestätigt<br />
Verbindung<br />
04 Sec‐<strong>Web</strong>Socket‐Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=<br />
typ gibt »type« an (»pie«, »line«, »area«,<br />
»bar«). Die Breite ist durch »width«, die<br />
Höhe durch »height« definiert.<br />
Der Parameter »parseDirection« legt fest,<br />
wie Visualize die Werte in der Tabelle<br />
interpretiert: In der Standardeinstellung<br />
»parseDirection=x« entnimmt es die<br />
Werte einer Datenreihe jeweils aus einer<br />
Zeile, bei »y« aus einer Spalte. Die erste<br />
Zelle bezeichnet die Datenreihe (etwa<br />
»Winter« in Listing 3). Visualize bietet<br />
noch eine Vielzahl weiterer Optionen [9].<br />
Es kann auch Datenreihen filtern oder<br />
das Diagramm auf einen Auslöser (Trigger)<br />
hin aktualisieren. Wer sich ein Bild<br />
vom Funktionsumfang machen möchte,<br />
sollte die Beispiele aus der Distribution<br />
und den Quellcode der Bibliothek »visualize.jQuery.js«<br />
lesen.<br />
In Listing 3 wartet die Jquery-Methode<br />
»ready()« mit der Ausführung der übergebenen<br />
Funktion, bis das HTML-Dokument<br />
vollständig geladen ist. Abbildung<br />
2 zeigt die HTML-Tabelle, Abbildung 3<br />
das mit Visualize erzeugte Diagramm.<br />
In Abbildung 4 ist eine weitere HTML-<br />
Tabelle zu sehen, die Abbildungen 5 bis<br />
7 zeigen die Visualisierung als Balken-,<br />
Bereichs- und Liniendiagramm.<br />
Um das Übermitteln von <strong>Web</strong>seiten<br />
kümmert sich das HTTP-Protokoll: Der<br />
Client stellt eine Anfrage (Request) an<br />
Abbildung 4: Diese HTML-Tabelle dient als Datenbasis<br />
für Visualize-Diagramme.<br />
einen HTTP-Server und erhält eine Antwort<br />
(Response). Deshalb blieben bisher<br />
Zustandsänderungen eines Dienstes so<br />
lange unbemerkt, bis der Client den Zustand<br />
vom HTTP-Server abfragte.<br />
Gute Unterhaltung<br />
<strong>Web</strong>sockets [10] verwandeln nun das<br />
einseitige Frage-und-Antwort-Spiel zwischen<br />
Client und Server in bidirektionale<br />
Kommunikation. Zur Eröffnung eines<br />
<strong>Web</strong>sockets sendet der Client dem Server<br />
eine Anfrage mittels HTTP (Listing<br />
4). Erwidert der Server diese Anfrage<br />
mit einem Handschlag (Listing 5), so<br />
treten Client und Server in Verbindung –<br />
falls der Server in seinem Handshake die<br />
korrekte Antwort auf den mitgeschickten<br />
<strong>Web</strong>socket-Key gegeben hat.<br />
Dazu hängt der Server an den generierten<br />
zufälligen Client-Key den Globally<br />
Unique Identifier (GUID) »258EAFA5‐E91<br />
4‐47DA‐95CA‐C5AB0DC85B11« an, bildet<br />
den Hashwert des Resultats und schickt<br />
ihn Base-64-kodiert zurück. So beweist er<br />
dem Client, dass ein geeigneter Endpunkt<br />
die Daten verarbeitet hat.<br />
Die Kopfzeilen markieren außerdem das<br />
letzte Paket einer Nachricht, übertragen<br />
einen Schlüssel für die Maskierung der<br />
Daten und geben die Länge an. Für Nachrichten<br />
vom Typ Text wird eine Byte-Folge<br />
gemäß dem UTF-8-Zeichensatz erwartet.<br />
Wie bei HTTP lässt sich die Übertragung<br />
per SSL schützen.<br />
Nach dem Beenden der Verbindung<br />
wird auch die TCP/IP-Verbindung wieder<br />
abgebaut. Abbildung 8 zeigt einen<br />
Vergleich der Protokolle <strong>Web</strong>sockets und<br />
HTTP. Die Kommunikation des verbin-
HTML 5 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
31<br />
Abbildung 6: Die <strong>Web</strong>statistik als Bereichsdiagramm.<br />
Abbildung 7: Auch das Liniendiagramm gehört zum Visualize-Repertoire.<br />
dungslosen HTTP-Protokolls ist nach der<br />
Antwort (Response) des HTTP-Servers<br />
beendet. Das <strong>Web</strong>socket-Protokoll hingegen<br />
durchläuft eine Serie von Zuständen,<br />
in denen die zugrunde liegende TCP/<br />
IP-Verbindung bis zum Erreichen des<br />
Zustands »closed« erhalten bleibt. Die<br />
Festschreibung des <strong>Web</strong>socket-Protokolls<br />
auf Basis eines RFC befindet sich derzeit<br />
noch in der Entwurfsphase.<br />
Sockets per Javascript<br />
HTML-5-Dokumente bieten eine Schnittstelle<br />
[11], um <strong>Web</strong>sockets mit Javascript<br />
zu nutzen. Um ein <strong>Web</strong>socket-Objekt in<br />
Javascript zu initialisieren, muss der Programmierer<br />
die Adresse des <strong>Web</strong>socket-<br />
Servers angegeben. <strong>Web</strong>socket-Server<br />
adressiert man mit URLs, anstelle des<br />
»http« steht jedoch der Schemabezeichner<br />
»ws« am Anfang, etwa in »ws://localhost:9000«<br />
in Listing 6.<br />
Ist die <strong>Web</strong>socket-Verbindung aufgebaut,<br />
kann der Entwickler Eventhandler nutzen.<br />
Der Javascript-Interpreter ruft sie<br />
beim Eintreten bestimmter Ereignisse auf:<br />
»onopen« nach eröffneter Verbindung,<br />
»onerror« bei einem Fehler, »onmessage«,<br />
wenn ein Nachricht eingetroffen ist, und<br />
»onclose«, wenn die Verbindung erfolgreich<br />
geschlossen wurde.<br />
Zum Senden einer Nachricht dient die<br />
Methode »send()«, die als Parameter die<br />
Nachricht entgegennimmt. Die Methode<br />
»close()« beendet die Verbindung. Sie<br />
kann zwei optionale Parameter aufnehmen:<br />
einen numerischen Code sowie einen<br />
Text als Begründung für das Schließen<br />
der Verbindung. Das <strong>Web</strong>socket-<br />
Objekt besitzt zudem schreibgeschützte<br />
Attribute. So speichert »readyState« den<br />
aktuellen Status der Verbindung (»CON-<br />
NECTION: 0«, »OPEN: 1«, »CLOSING:<br />
2«, »CLOSED: 3«), »buffered Amount«<br />
die Anzahl noch nicht versandter Bytes<br />
und »protocol« die verwendete Version<br />
des Protokolls. Das Attribut »extension«<br />
informiert über die vom Server vorgegebenen<br />
Erweiterungen.<br />
Die <strong>Web</strong>sockets sind in den Browsern<br />
Chrome 14+, Firefox 7+ und MSIE 10<br />
am besten implementiert [12]. Für die<br />
Initialisierung eines <strong>Web</strong>socket-Objekts<br />
01 // Initialisiere <strong>Web</strong>socket‐Objekt<br />
02 var ws = new <strong>Web</strong>socket('ws://localhost:9000');<br />
03 // Notiere Status des <strong>Web</strong>sockets alle 5s<br />
04 var oiv = setInterval(function() { console.<br />
log(ws.readyState) }, 5000);<br />
05 // Sende lokale Zeit zum Server<br />
06 ws.onopen = function() {<br />
07 ws.send(time.toLocaleTimeString());<br />
08 }<br />
09 // Notiere Fehler<br />
10 ws.onerror = function() {<br />
11 console.log('Error!');<br />
im Mozilla-Browser 7 und 8 ist bisher<br />
noch die Vorsilbe »Moz« erforderlich.<br />
Die Funktion »websocket()« in Listing<br />
7 gleicht diese Ausnahme aus, indem sie<br />
im Fehlerfall die Initialisierung für den<br />
Mozilla-Browser ausprobiert.<br />
Autobahn<br />
Listing 6: Nutzung von <strong>Web</strong>sockets per Javascript<br />
Listing 7: Funktion »websocket()«<br />
01 function websocket(url) {<br />
02 try {<br />
03 return new <strong>Web</strong>Socket(url);<br />
04 } catch (e) {<br />
05 try {<br />
06 return new Moz<strong>Web</strong>Socket(url);<br />
Listing 8: Installation von Autobahn<br />
01 sudo apt‐get install python‐dev<br />
02 sudo apt‐get install python‐setuptools<br />
Das Open-Source-Projekt Autobahn [13]<br />
bietet Bibliotheken zum Anlagen von<br />
<strong>Web</strong>socket-Clients für Jquery, Python<br />
und Android, daneben ein Python-Frame-<br />
12 }<br />
13 // Notiere eingehende Nachricht und schließe<br />
Verbindung<br />
14 ws.onmessage = function(e) {<br />
15 console.log(e.data);<br />
16 ws.close(99, 'First message closes<br />
connection.');<br />
17 }<br />
18 // Beende Notation des Status<br />
19 ws.onclose = function() {<br />
20 clearInterval(oiv);<br />
21 }<br />
07 } catch(e) {<br />
08 return null;<br />
09 }<br />
10 }<br />
11 }<br />
03 wget http://pypi.python.org/packages/2.7/a/autobahn/autobahn‐0.4.2‐py2.7.egg<br />
04 sudo easy_install autobahn‐0.4.2‐py2.7.egg
Titelthema<br />
www.linux-magazin.de HTML 5 01/2012<br />
32<br />
01 import sys, csv, json<br />
work für <strong>Web</strong>socket-Server sowie eine<br />
Protokoll-Testsuite, die auch einen detaillierten<br />
Überblick über den Stand der<br />
Implementierung [14] von <strong>Web</strong>sockets<br />
in Browsern gibt. Alle Quelltexte sind<br />
unter der Apache-2-Lizenz veröffentlicht.<br />
Das Server-Framework basiert auf<br />
Twisted [15], einer ereignisgesteuerten<br />
Netzwerkmaschine. Das Python-Framework<br />
Twisted macht es einfach, robuste<br />
Netzwerkanwendungen, beispielsweise<br />
Server, zu implementieren, und ist unter<br />
der MIT-Lizenz verfügbar.<br />
Die Installation von Autobahn zusammen<br />
mit Twisted unter Ubuntu <strong>Linux</strong> 11.04<br />
zeigt Listing 8. <strong>Web</strong>sockets eignen sich<br />
gut für Serverdienste, auf die der Anwender<br />
per <strong>Web</strong>browser zugreift. Im Folgenden<br />
soll mit Hilfe von Autobahn und<br />
HTML 5 ein Dienst im Stil der Standard-<br />
Netzwerkdienste von <strong>Linux</strong> entstehen.<br />
Meminfo-Dienst<br />
Der zu erstellende Dienst Meminfo soll<br />
periodisch Daten über die Speicherauslastung<br />
des Hosts aus der Datei »/proc/<br />
meminfo« auslesen und per Netzwerk<br />
zur Verfügung stellen. Der Browser stellt<br />
Listing 9: Meminfo-Server<br />
02 from twisted.internet import reactor<br />
03 from autobahn.websocket import<br />
<strong>Web</strong>SocketServerFactory, <strong>Web</strong>SocketServerProtocol<br />
04 <br />
05 class MeminfoServerProtocol(<strong>Web</strong>SocketServerProtocol):<br />
06 <br />
07 def onOpen(self):<br />
08 self.factory.meminfo(self)<br />
09 <br />
10 class MeminfoServerFactory(<strong>Web</strong>SocketServerFactory):<br />
11 <br />
12 protocol = MeminfoServerProtocol<br />
13 <br />
14 def meminfo(self, client):<br />
15 reader = csv.reader(open('/proc/meminfo'),<br />
delimiter=':', skipinitialspace=True)<br />
16 dic=dict()<br />
17 for row in reader:<br />
18 dic[row[0]] = row[1]<br />
19 client.sendMessage(json.dumps(dic))<br />
20 reactor.callLater(5, self.meminfo, client)<br />
21 <br />
22 if __name__ == '__main__':<br />
23 <br />
24 factory = MeminfoServerFactory()<br />
25 reactor.listenTCP(9000, factory)<br />
26 reactor.run()<br />
Sekunden wird die Funktion erneut aufgerufen<br />
(Zeile 20).<br />
Die Klasse »MeminfoServerProtocol« ist<br />
ebenfalls eine Ableitung einer Autobahn-<br />
Klasse – von »<strong>Web</strong>SocketServerProtocol«.<br />
Diese Klasse definiert Eventhandler<br />
analog zur <strong>Web</strong>socket-Schnittstelle in<br />
Javascript. Hier wird nach der Neueröffnung<br />
einer Verbindung (»onOpen«)<br />
die Methode »meminfo()« aus der Klasse<br />
»MeminfoServerFactory« aufgerufen. Zusätzlich<br />
ließen sich noch Eventhandler<br />
für die Ereignisse »onMessage«, »onError«<br />
oder »onClose« definieren. Die<br />
Main-Methode des Python-Programms<br />
(Zeile 22) bindet eine Instanz von »MeminfoServerFactory«<br />
mit »reactor« an die<br />
lokale Rechneraddresse sowie TCP-Port<br />
9000 und startet sie.<br />
Die HTML-Seite zum Abfragen des Dienstes<br />
ist in Listing 10 zu sehen. Diese bindet<br />
die notwendigen CSS- und Javascript-<br />
Ressourcen ein. Im »script«-Bereich des<br />
Dokuments startet die Funktion »memsie<br />
mittels Visualize<br />
C<br />
grafisch dar.<br />
Zur Datenübermittlung<br />
kommt das Json-<br />
Connecting<br />
Format zum Einsatz.<br />
Die Javascript Object<br />
Notation (Json, [16]),<br />
Open<br />
ist eine der Sprache<br />
Javascript entnommene<br />
Beschreibung<br />
Closing<br />
von Objekten. Beispielsweise<br />
beschreibt<br />
Closed<br />
»{"Jahreszeit":"Fr\u0<br />
0fchling","Monate":["<br />
M\u00e4rz","April","<br />
Mai"],"Durchschnitt":<br />
8.6}« das Objekt<br />
»Früh ling« bestehend<br />
aus drei Schlüssel-Wert-Paaren. Der Wert<br />
des Feldes »Jahreszeit« enthält die Zeichenkette<br />
»Frühling«, »Monate« eine Liste<br />
von Zeichenketten und der Wert des Feldes<br />
»Durchschnitt« die Fließkommazahl<br />
»8.6«. Json kodiert Sonderzeichen gemäß<br />
Unicode als vierstellige hexadezimale<br />
Zahl mit Präfix »\u«.<br />
Beim Umsetzen des Meminfo-Servers<br />
mit Autobahn (Listing 9) lassen sich<br />
fehlende Funktionen durch den Import<br />
von Python-Modulen nachrüsten. Der<br />
<strong>Web</strong> socket-Server »MeminfoServerFactory«<br />
leitet sich von der Klasse »<strong>Web</strong>SocketServerFactory«<br />
ab. Diese Klasse<br />
enthält die Methode »meminfo()«, die<br />
Daten mit dem CSV-Reader aus der Datei<br />
»/proc/meminfo« ausliest und in ein so<br />
genanntes Dictonary überführt (Zeilen<br />
14 bis 16). Das Programm übersetzt dieses<br />
Dictonary in eine Json-formatierte<br />
Zeichenkette (Zeilen 17 und 18) und<br />
überträgt sie dann mit »sendMessage()«<br />
an den verbundenen Client. Nach fünf<br />
Handshake<br />
Send<br />
Handshake<br />
<strong>Web</strong>sockets<br />
»ws://localhost:9000«<br />
S<br />
C<br />
Request<br />
Response<br />
S<br />
HTTP<br />
»http://localhost:80«<br />
Abbildung 8: <strong>Web</strong>sockets (links) und HTTP (rechts) im Vergleich: <strong>Web</strong>sockets<br />
nutzen die bestehende TCP/IP-Verbindung für die gesamte Sitzung.<br />
Abbildung 9: Der Meminfo-Dienst zeichnet ein regelmäßig aktualisiertes Diagramm in den Browser.
info()« aus der Datei »js/meminfo.js« die<br />
Abfrage. Die Funktion »meminfo()« ist in<br />
Listing 11 zu sehen. Sie initialisiert eine<br />
Verbindung durch Aufrufen der Funktion<br />
»websocket()«.<br />
Nach erfolgreicher Eröffnung (»onopen«)<br />
hängt der Code dem HTML-Dokument<br />
mit der Jquery-Methode »append()« eine<br />
leere Tabelle sowie einen Bereich zur<br />
Ausgabe des Diagramms an. Beim Eintreffen<br />
einer Nachricht (»onmessage«)<br />
übersetzt das Skript die Json-formatierte<br />
Zeichenkette in ein Javascript-Objekt.<br />
Falls dies gelingt, bekommt die Tabelle<br />
eine weitere Zeile aus Werten der Nachricht<br />
angehängt. Die Auswahl der Werte<br />
aus dem Objekt geschieht durch das Auslesen<br />
der Schlüssel aus dem Kopf der<br />
Tabelle. Sobald die Tabelle mehr als 20<br />
Zeilen enthält, löscht der Code die jeweils<br />
erste Zeile.<br />
Falls die Rückübersetzung der Json-formatierten<br />
Zeichenkette fehlschlägt, wird<br />
ein Fehler notiert. Abschließend löscht<br />
Javascript das bestehende Diagramm und<br />
erstellt es neu, indem es die Funktion<br />
»visualize()« aufruft. Abbildung 9 zeigt<br />
den Meminfo-Client bei der Arbeit.<br />
Ausblick<br />
HTML 5 beschert dem <strong>Web</strong> eine ganze<br />
Reihe von Neuerungen, die es nachhaltig<br />
verändern dürften. Das Canvas-Element<br />
wird mehr kontextbezogene Grafiken<br />
hervorbringen. <strong>Web</strong>sockets bieten eine<br />
Schnittstelle zu einer bisher unbekannten<br />
Zahl von Diensten. Der in diesem Artikel<br />
implementierte Meminfo-Dienst deutet<br />
an, wie sich Daten verschiedener Dienste<br />
im <strong>Web</strong> zusammenführen lassen.<br />
Damit geht HTML 5 gut gerüstet in die<br />
Zukunft, in der Herausforderungen wie<br />
beispielsweise das „<strong>Web</strong> der Dinge“ warten.<br />
Auch die weitere Entwicklung von<br />
Javascript bleibt spannend. Mit der Ausweitung<br />
seiner Schnittstellen auf lokale<br />
Ressourcen des Clients entwickeln sich<br />
HTML-5-Dokumente zu Bausteinen verteilter<br />
Anwendungen weiter. (mhu) n<br />
Infos<br />
[1] HTML 5: [http:// www. w3. org/ TR/ html5/]<br />
[2] Canvas: [http:// www. w3. org/ TR/<br />
html5/ the‐canvas‐element. html#<br />
the‐canvas‐element]<br />
[3] 2-D-Kontext:<br />
[http:// dev. w3. org/ html5/ 2dcontext/]<br />
[4] <strong>Web</strong> GL: [http:// www. khronos. org/<br />
registry/ webgl/ specs/ latest/ # 2]<br />
[5] SVG: [http:// www. w3. org/ TR/ SVGTiny12/]<br />
[6] Peter Kreußel, „Malkasten“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 11/11, S. 46<br />
[7] Visualize:<br />
[https:// github. com/ filamentgroup/<br />
jQuery‐Visualize/ zipball/ master]<br />
[8] Jquery: [http:// jquery. com]<br />
[9] Weitere Visualize-Optionen: [http:// www.<br />
filamentgroup. com/ lab/ update_to_jquery_<br />
visualize_accessible_charts_with_html5_<br />
from_designing_with/]<br />
[10] <strong>Web</strong>sockets: [http:// tools. ietf. org/ html/<br />
draft‐ietf‐hybi‐thewebsocketprotocol‐17]<br />
[11] <strong>Web</strong>sockets in HTML-5-Dokumenten:<br />
[http:// dev. w3. org/ html5/ websockets/]<br />
[12] <strong>Web</strong>socket-Unterstützung in Browsern:<br />
[http:// en. wikipedia. org/ wiki/ <strong>Web</strong>Socket#<br />
Browser_support]<br />
Listing 10: HTML-5-Seite als Speicher-Monitor<br />
01 <br />
02 <br />
03 <br />
04 <br />
05 <br />
06 <br />
<br />
01 function meminfo(url, cont) {<br />
02 url = url?url:"ws://localhost:9000";<br />
03 var count = 0;<br />
04 var ws = websocket(url);<br />
05 <br />
06 if (ws === null) {<br />
07 return null;<br />
08 }<br />
09 <br />
10 // Erstellen des Ausgabetabletts<br />
11 ws.onopen = function(e) {<br />
12 $(cont?cont:'body').append('Meminfo von<br />
'+url+'\<br />
14 MemFree<br />
Shmem\<br />
15 SwapFree<br />
\<br />
16 ');<br />
17 }<br />
18 <br />
19 // Empfangene Daten einfügen<br />
[13] Autobahn:<br />
[http:// www. tavendo. de/ autobahn/]<br />
[14] Testergebnisse zu <strong>Web</strong>socket-<br />
Implementierungen:<br />
[http:// www. tavendo. de/ autobahn/<br />
testsuite/ report/ clients/ index. html]<br />
[15] Python-Framework Twisted:<br />
[http:// twistedmatrix. com/ trac/]<br />
[16] Json: [http:// www. json. org]<br />
[17] Quelltext zum Artikel: [http:// www.<br />
linux‐magazin. de/ static/ listings/ magazin/<br />
2012/ 01/ html‐5/]<br />
Der Autor<br />
Der Diplom-Physiker Andreas Möller [http://<br />
pamoller. com] beschäftigt sich seit zehn Jahren<br />
mit der Entwicklung von Internetsoftware. Dazu<br />
zählen Datenbank- und <strong>Web</strong>anwendungen sowie<br />
Arbeiten im Bereich Single Source Publishing. Daneben<br />
hat er an Büchern, Lernprogrammen und<br />
E-Books mitgearbeitet. Zurzeit ist er als Berater<br />
und freier Autor tätig.<br />
07 <br />
08 <br />
Listing 11: Funktion »meminfo()« fragt Meminfo-Server ab<br />
09 $(document).ready(function() { meminfo()<br />
} )<br />
10 <br />
11 <br />
12 <br />
13 <br />
20 ws.onmessage = function(e) {<br />
21 count++; // closure<br />
22 try {<br />
23 var obj = jQuery.parseJSON(e.data);<br />
24 $('#meminfo tbody').append<br />
(''+count+''+<br />
25 $('#meminfo thead th').map(function() {<br />
return ''+<br />
26 (Math.round(parseInt(obj[$(this).<br />
text()])/1000))+'';}<br />
27 ).get().join('')+'');<br />
28 if (count > 20) {<br />
29 $('#meminfo tr:eq(1)').remove();<br />
30 }<br />
31 } catch(e) {<br />
32 console.log('Protokoll‐Fehler');<br />
33 }<br />
34 $('#meminfochart').empty()<br />
35 $('#meminfo.line').visualize({type: 'line',<br />
parseDirection: 'y',<br />
36 'height':'200px', 'width':'500px'},<br />
$('#meminfochart'));<br />
37 }<br />
38 }<br />
HTML 5 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
33
Titelthema<br />
www.linux-magazin.de Flow3 01/2012<br />
34<br />
<strong>Web</strong>anwendungen mit dem PHP-Framework Flow3<br />
Starker PHP-Fluss<br />
Eigentlich sollte Flow3 nur der Unterbau einer neuen Typo3-Version werden. Nach mehrjähriger Entwicklung<br />
kam Ende Oktober 2011 jedoch ein modernes PHP-Framework heraus, in dessen Kielwasser Enterprise-<strong>Web</strong>anwendungen<br />
rasch Fahrt aufnehmen. Tim Schürmann<br />
© Vladimir D Ivanovic, 123RF.com<br />
Im Jahr 2007 war das Contentmanagement-System<br />
Typo3 in die Jahre gekommen.<br />
Zwar erfreute sich die Open-<br />
Source-Software anhaltender Beliebtheit,<br />
ihr gewachsener Unterbau hatte jedoch<br />
eine Generalüberholung nötig. Die dazu<br />
erforderlichen umfangreichen Umbauarbeiten<br />
hätten allerdings die Stabilität des<br />
kompletten Systems gefährdet. Also entschlossen<br />
sich die Typo3-Entwickler, die<br />
Version 5 (Codename Phoenix) komplett<br />
neu zu schreiben.<br />
Im ersten Schritt sollte dazu ein moderner<br />
Unterbau her, der aktuellen Entwicklungs-<br />
und Programmierkonzepten<br />
folgt. An diese Aufgabe wagten sich<br />
Robert Lemke und Karsten Dambekalns<br />
sowie zahlreiche freiwillige Helfer aus<br />
der Typo3-Gemeinde. Fünf Jahre später<br />
können die Entwickler ein interessantes<br />
Framework vorweisen, das sich auch unabhängig<br />
von Typo3 zum Schreiben großer<br />
<strong>Web</strong>anwendungen eignet. Die erste<br />
stabile Version des Flow3 [1] getauften<br />
Systems erschien Ende Oktober 2011. Vorausgegangen<br />
waren zahlreiche Vorabund<br />
Testversionen, die Entwickler bauten<br />
Flow3 im Laufe der Zeit sogar mehrfach<br />
komplett um.<br />
Das hielt jedoch ein großes Unternehmen<br />
in Deutschland nicht davon ab, bereits<br />
auf den Vorabversionen seine Kundendatenbank<br />
aufzubauen [2]. Welches Unternehmen<br />
das ist, mochten die Entwickler<br />
bislang nicht verraten. Flow3 erscheint<br />
jedenfalls so attraktiv, dass sich eine genauere<br />
Inspektion lohnt.<br />
Buzzword-Bingo<br />
Im Kern ist Flow3 eine Sammlung von<br />
PHP-Klassen, mit denen man schnell<br />
eine eigene <strong>Web</strong>anwendung stricken<br />
kann. So muss sich der Anwendungsentwickler<br />
beispielsweise nicht mehr selbst<br />
darum kümmern, einzelne PHP-Objekte<br />
irgendwie in eine relationale Datenbank<br />
zu pressen. Flow3 soll vor allem mittlere<br />
und große <strong>Web</strong>anwendungen antreiben.<br />
Deren Entwicklung erfordert eine gute<br />
und geordnete Planung. Daher setzt<br />
Flow3 auf Entwurfsmuster und moderne<br />
Programmiertechniken. Dazu zählen<br />
in erster Linie Model-View-Controller<br />
(MVC), Dependency Injection, Domain-<br />
Driven-Design und aspektorientierte Programmierung.<br />
Hinzu kommt eine exzessive<br />
Nutzung der in PHP 5.3 eingeführten<br />
Namensräume (Namespaces) sowie der<br />
eigentlich von PHP gar nicht unterstützten<br />
Annotationen.<br />
Wem jetzt ob der vielen Begriffe der Kopf<br />
schwirrt, der sei beruhigt: Wer in Flow3<br />
einsteigen möchte, muss lediglich mit<br />
der objektorientierten Programmierung<br />
und dem Model-View-Controller-Konzept<br />
vertraut sein.<br />
Model, View und Controller<br />
Jede Flow3-Anwendung besteht aus mehreren<br />
Teilen (Abbildung 1): Wann immer<br />
der Benutzer eine Aktion auslöst, aktiviert<br />
Flow3 einen so genannten Controller.<br />
Der übernimmt die Kontrolle und<br />
leitet alle weiteren Maßnahmen ein. Benötigt<br />
er Informationen aus der Datenbank,<br />
befragt er ein Repository. Dies zapft<br />
die Datenbank an und verpackt das zurückgelieferte<br />
Ergebnis in ein handliches<br />
PHP-Objekt, das so genannte Model. Das<br />
Repository spricht übrigens nicht direkt<br />
mit der Datenbank, es greift im Hintergrund<br />
auf das in Flow3 integrierte Framework<br />
Doctrine 2 zurück [3].<br />
Letzter Helfer im Bunde ist die View. Sie<br />
bastelt aus den Informationen im Model<br />
und einer Layout-Vorlage die fertige <strong>Web</strong>seite.<br />
Dabei zur Hand geht ihr die eigens<br />
für Flow3 entwickelte Template-Engine<br />
namens Fluid. Dies ermöglicht es dem
Model<br />
(z.B. eine Adresse)<br />
3<br />
Flow3 01/2012<br />
Titelthema<br />
Controller<br />
1<br />
Repository<br />
2<br />
Datenbank<br />
View<br />
Layout<br />
4<br />
5<br />
Abbildung 1: Eine <strong>Web</strong>anwendung besteht in Flow3 mindestens aus vier<br />
Klassen und der Layoutvorlage in Form einer HTML-Datei. Die Ziffern zeigen<br />
die typische Reihenfolge der Aufrufe.<br />
Abbildung 2: Diese Meldungen verraten, dass das Hilfsskript »flow3« die Dateirechte<br />
erfolgreich setzen konnte. Die gezeigten Parameter für das Skript eignen sich für eine<br />
Installation unter Ubuntu 11.10.<br />
www.linux-magazin.de<br />
35<br />
Framework zugleich, Inhalte und Optik<br />
geschickt zu trennen.<br />
Das alles klingt ziemlich aufwändig. Für<br />
eine komplette Adressen-Anwendung<br />
oder eine kleine Filmdatenbank benötigt<br />
man jedoch lediglich drei eigene PHP-<br />
Klassen und eine mit Fluid-Befehlen<br />
angereicherte HTML-Datei. Und selbst<br />
diese vier generiert Flow3 auf Wunsch<br />
halbautomatisch.<br />
Für eine Flow3-Installation sind zunächst<br />
ein <strong>Web</strong>server und PHP ab Version 5.3.2<br />
erforderlich. Diese im Vergleich zu anderen<br />
Contentmanagement-Systemen recht<br />
hohe PHP-Version ist unter anderem den<br />
verwendeten Namespaces geschuldet.<br />
Als <strong>Web</strong>server empfehlen die Flow3-<br />
Entwickler Apache 2 mit aktiviertem<br />
»mod_rewrite«-Modul.<br />
Wer Daten speichern möchte, braucht<br />
noch eine Datenbank. Flow3 kommt mit<br />
allen zurecht, für die ein PDO-Treiber<br />
existiert, darunter natürlich die beliebte<br />
MySQL [4]. Eine passende Laufzeitumgebung<br />
stellt beispielsweise XAMPP<br />
[5] dar, unter Ubuntu 11.10 installiert<br />
man alternativ die Pakete »apache2«,<br />
»mysql‐server«, »php5«, »php5‐cli« und<br />
»php5‐mysql«.<br />
Sind alle Voraussetzungen erfüllt, lädt<br />
der Anwender das Flow3-Archiv herunter<br />
und entpackt es im »DocumentRoot«-Verzeichnis<br />
– unter Ubuntu wäre dies »/var/<br />
Tabelle 1: Verzeichnisse einer Flow3-Installation<br />
Verzeichnis<br />
Configuration/<br />
Data/<br />
Packages/Framework/<br />
Packages/Application/<br />
<strong>Web</strong>/<br />
www«, bei XAMPP »/opt/lampp/htdocs«.<br />
Dabei entsteht der Ordner »FLOW3‐1.0.0«<br />
mit den Unterverzeichnissen aus Tabelle<br />
1. Das »<strong>Web</strong>«-Verzeichnis beziehungsweise<br />
die darin liegende Datei »index.<br />
php« ist der zentrale Einsprungspunkt der<br />
neuen <strong>Web</strong>anwendung – sie steuert der<br />
Benutzer mit seinem Browser an. Flow3<br />
selbst steckt vollständig in »Packages/<br />
Framework«, bei einem Update ist folglich<br />
nur diesen Ordner zu aktualisieren.<br />
Rechtsschutz<br />
Während des Betriebs schreibt Flow3<br />
immer wieder in einige seiner Verzeichnisse.<br />
Folglich muss der Admin dem Benutzer,<br />
unter dem der <strong>Web</strong>server läuft,<br />
entsprechende Schreibrechte einräumen.<br />
Das allein reicht aber noch nicht aus:<br />
Über ein Hilfsskript lässt sich Flow3 auch<br />
über die Kommandozeile starten. Der<br />
Anwendungsentwickler benötigt somit<br />
ebenfalls Schreibrechte. Um all dies sicherzustellen,<br />
wechselt man im Terminal<br />
ins Unterverzeichnis »FLOW3‐1.0.0« und<br />
startet das dort lagernde Skript »flow3«:<br />
sudo ./flow3 core:setfilepermissionsU<br />
tim www‐data www‐data<br />
Dabei ist das erste »www‐data« jener Benutzer,<br />
unter dem der <strong>Web</strong>server läuft,<br />
das hinterste »www‐data« dessen Gruppe<br />
Inhalt<br />
Konfigurationsdateien der Anwendung<br />
Persistente und temporäre Daten: Cache, Logs, Ressourcen und Datenbank<br />
Flow3 selbst<br />
PHP-Dateien/Pakete der eigenen Anwendungen<br />
Öffentliches <strong>Web</strong>verzeichnis und Einsprungspunkt<br />
und »tim« schließlich der Benutzername<br />
des Anwendungsentwicklers. Der obige<br />
Befehl ist für Ubuntu gedacht (Abbildung<br />
2), XAMPP-Nutzer verwenden:<br />
sudo /opt/lampp/bin/php flow3 U<br />
core:setfilepermissions tim nobody nogroup<br />
Dieser Befehl setzt aber nur die Dateirechte.<br />
Es ist zudem sicherzustellen, dass<br />
der Anwendungsentwickler auch in der<br />
Benutzergruppe des <strong>Web</strong>servers steht.<br />
Kickstart<br />
Nun lässt sich mit dem Browser die URL<br />
»http:// localhost/ FLOW3‐1. 0. 0/ <strong>Web</strong>« ansteuern.<br />
Es dauert ein paar Sekunden,<br />
bis Flow3 seinen Initialisierungsvorgang<br />
abgeschlossen hat. Zumindest während<br />
der Entwicklung sollte allen PHP-Skripten<br />
mindestens 250 MByte Hauptspeicher<br />
zur Verfügung stehen. Gegebenenfalls<br />
muss man dazu das »memory_limit« in<br />
der »php.ini« heraufsetzen. Hat die Initialisierung<br />
geklappt, erscheint die Seite<br />
aus Abbildung 3.<br />
Wer Apache 2 mit aktiviertem »mod_<br />
rewrite« einsetzt, bekommt sie jedoch<br />
sehr wahrscheinlich nicht zu Gesicht –<br />
das ist etwa in einer XAMPP-Umgebung<br />
der Fall. Abhilfe schafft ein virtueller<br />
Host, der zur Flow3-Installation führt.<br />
Unter XAMPP fügt der Benutzer dazu der<br />
Konfigurationsdatei »/opt/lampp/etc/<br />
httpd.conf« die Zeilen aus Listing 1 hinzu:<br />
Listing 1: »httpd.conf« für XAMPP<br />
01 NameVirtualHost *:80<br />
02 <br />
03 <br />
04 DocumentRoot /opt/lampp/htdocs/FLOW3‐1.0.0/<strong>Web</strong>/<br />
05 ServerName beispiel.local<br />
06
Titelthema<br />
www.linux-magazin.de Flow3 01/2012<br />
36<br />
01 TYPO3:<br />
02 FLOW3:<br />
03 persistence:<br />
Die Datei »/etc/hosts« erhält zusätzlich<br />
folgende Zeile:<br />
127.0.0.1 beispiel.local<br />
Danach ist ein Neustart des <strong>Web</strong>servers<br />
erforderlich, bevor unter »http:// beispiel.<br />
local« die gewünschte Seite zu sehen ist.<br />
Erscheint die Seite aus Abbildung 3, ist<br />
Flow3 einsatzbereit.<br />
Packstation<br />
04 backendOptions:<br />
Alle PHP-Dateien und Ressourcen einer<br />
Anwendung fasst Flow3 in Paketen (Packages)<br />
zusammen. Jedes Paket erhält einen<br />
eindeutigen Namen, den so genannten<br />
Package Key. Er setzt sich aus dem<br />
Firmennamen des Entwicklers und einem<br />
frei wählbaren Paketnamen zusammen.<br />
Möchte beispielsweise die Roxy GmbH<br />
eine Verwaltung für Kinofilme erstellen,<br />
könnte sie alle dazu gehörenden PHP-<br />
05 driver: 'pdo_mysql'<br />
06 dbname: 'filme' # Name der Datenbank<br />
07 user: 'root' # Benutzer der Datenbank<br />
08 password: 'geheim' # Passwort der Datenbank<br />
09 host: '127.0.0.1' # Datenbank‐Host<br />
01
Abbildung 4: Der automatisch erzeugte Standardcontroller liefert nur eine schlichte Textmeldung.<br />
deren CMS nicht selbst an. Der Anwender<br />
muss das per Kommandozeile tun:<br />
mysql ‐u root<br />
CREATE DATABASE filme;<br />
exit<br />
Unter XAMPP steckt »mysql« im Unterverzeichnis<br />
»/opt/lampp/bin«. Sobald<br />
die Datenbank existiert, erzeugt<br />
./flow3 doctrine:migrate<br />
darin alle von Flow3 benötigten Datenbanktabellen.<br />
Model-Bau<br />
Als Nächstes teilt der Anwendungsentwickler<br />
Flow3 mit, welche Daten es in<br />
der Datenbank unterbringen soll. Dazu<br />
legt er ein passendes Model an. In Flow3<br />
sind Models nichts anderes als einfache<br />
PHP-Objekte. Die Filmverwaltung<br />
braucht also nur eine Klasse, die die Daten<br />
eines Films kapselt. Der Einfachheit<br />
halber sollen das hier nur der Filmname<br />
und eine Kurzbeschreibung sein.<br />
Eine passende PHP-Klasse erzeugt das<br />
»flow3«-Skript:<br />
Demnach soll das Framework eine Klasse<br />
»Film« anlegen, die zum Paket »Roxy.<br />
Filme« gehört. Sie kapselt zwei Member-<br />
Variablen namens »titel« und »beschreibung«,<br />
die Zeichenketten aufnehmen<br />
(»string«). Die Klasse »Film« liegt in der<br />
Datei »/FLOW3‐1.0.0/Packages/Application/Roxy.Filme/Classes/Domain/Model/<br />
Film.php«. Wie Listing 3 zeigt, besteht<br />
sie nur aus den zwei Variablen nebst<br />
Getter- und Setter-Methoden.<br />
Normalerweise würde ein PHP-Entwickler<br />
jetzt Datenbanktabellen einrichten<br />
und sich dann überlegen, wie er die Informationen<br />
aus den Variablen dort hineinprügelt.<br />
Um all das kümmert sich<br />
netterweise Flow3 – vorausgesetzt man<br />
greift dem System ein wenig unter die<br />
Arme. Dies geschieht durch so genannte<br />
Annotationen, die in Kommentaren versteckt<br />
sind. Sie geben Flow3 Informationen<br />
über eine Klasse, eine Methode oder<br />
ein Attribut.<br />
Da PHP von Haus aus keine Annotationen<br />
beherrscht, verwendet Flow3 seine<br />
eigene Syntax. Gemäß dieser beginnen<br />
Annotationen immer mit einem »@«. Das<br />
»@var string« in Listing 3 etwa weist darauf<br />
hin, dass die Variable »$titel« einen<br />
String aufnimmt. Diese Information hilft<br />
dem Framework später, eine passende<br />
Datenbanktabelle zu erstellen.<br />
Als Nächstes benötigt die <strong>Web</strong>anwendung<br />
ein Repository, das ein Film-Objekt entgegennimmt<br />
und in die Datenbank steckt<br />
beziehungsweise dort herausholt. Flow3<br />
verlangt, dass für jedes zu speichernde<br />
Model ein eigenes Repository existiert.<br />
Um eines anzulegen, muss man einfach<br />
eine neue Klasse von »Repository« ableiten.<br />
Auch diese Aufgabe übernimmt<br />
auf Wunsch das »flow3«-Skript. Ein zum<br />
»Film« passendes Repository erzeugt:<br />
./flow3 kickstart:model Roxy.Filme FilmU<br />
titel:string beschreibung:string<br />
./flow3 kickstart:repository Roxy.Filme Film<br />
Die generierte Datei »/FLOW3‐1.0.0/<br />
Packages/Application/Roxy.Filme/Clas-<br />
Tabelle 2: Verzeichnisstruktur<br />
eines Package<br />
Verzeichnis Inhalt<br />
Classes/ Alle PHP-Klassen<br />
Configuration/ Konfigurationsdateien<br />
Documentation/ Dokumentation<br />
Meta/ Metadaten beziehungsweise<br />
grundlegende Informationen<br />
über das Package<br />
Resources/ Weitere Ressourcen wie<br />
Bilder und (Fluid-)Templates<br />
Tests/ Unit-Tests
Titelthema<br />
www.linux-magazin.de Flow3 01/2012<br />
38<br />
01
ces/Private/Layouts/Default.html«. Sie<br />
enthält den Grundaufbau einer jeden<br />
<strong>Web</strong>seite, das so genannte Layout. Darin<br />
könnte man beispielsweise ein Firmenlogo<br />
einbinden, das dann auf allen Seiten<br />
der Anwendung zu sehen sein würde. In<br />
diesem einfachen Beispiel besteht das<br />
Layout nur aus einer einfachen HTML-<br />
Seite (Listing 6).<br />
Flutschende Vorlagen<br />
Die merkwürdigen, mit einem »
Titelthema<br />
www.linux-magazin.de Node.js 01/2012<br />
40<br />
Anfragen an <strong>Web</strong>server schneller beantworten mit Node.js<br />
Ereignisorientiert<br />
Die Javascript-basierte Programmierumgebung für <strong>Web</strong>entwicklung Node.js bändigt den Ressourcen-Hunger<br />
von Echtzeit-<strong>Web</strong>anwendungen wie Onlinespielen oder Chatservern. Dank eines ereignisorientierten Ansatzes<br />
kommt Node.js dabei mit einem <strong>Web</strong>server-Thread pro Instanz aus. Peter Kreußel<br />
zu haben, der den Fokus zurückholt,<br />
wenn das Dateisystem oder die Datenbank<br />
ihren Beitrag geleistet haben.<br />
Schnellimbiss oder<br />
Restaurant?<br />
© fl0wer, photocase.com<br />
Ein <strong>Web</strong>server in Javascript? Manch erfahrener<br />
<strong>Web</strong>server-Administrator oder<br />
<strong>Web</strong>programmierer mag bei dieser Vorstellung<br />
zunächst den Kopf schütteln.<br />
Doch genau das bringt das auf Googles<br />
V8-Javascript-Interpreter aufsetzende<br />
Node.js-Projekt [1] und glänzt dabei mit<br />
überraschend positiven Ergebnissen.<br />
Schneller serviert<br />
Seit der ersten Präsentation durch seinen<br />
Initiator Ryan Dahl auf der Jsconf Ende<br />
2009 [2] hat Node.js viel Aufmerksamkeit<br />
auf sich gezogen. Das liegt primär<br />
sicherlich daran, weil das Projekt mit<br />
dem Anspruch antritt, den im flotten<br />
C programmierten Apache und andere<br />
<strong>Web</strong>server bei der Performance zu schlagen.<br />
Die Software ermuntert <strong>Web</strong>anwendungen<br />
dazu, ihren <strong>Web</strong>server einfach<br />
selbst mitzubringen. Admins und Programmierer<br />
können dann komplett auf<br />
Apache & Co. verzichten.<br />
Seinen Geschwindigkeitsvorsprung erringt<br />
Node.js nicht etwa dadurch, dass<br />
der <strong>Web</strong>server-Code schneller wäre, sondern<br />
weil es mit den Wartezeiten der CPU<br />
auf das langsamere Dateisystem oder die<br />
Datenbank anders umgeht als konventionelle<br />
Serversoftware.<br />
Apache arbeitet mit mehreren Threads<br />
oder Prozessen. Braucht eine Instanz<br />
Daten von der Festplatte, so dreht sie<br />
Däumchen, bis diese vorliegen. Parallel<br />
ablaufende Serverinstanzen und der<br />
Scheduler des Kernels kompensieren<br />
das wieder teilweise. Node.js dagegen<br />
kümmert sich darum selbst: Es arbeitet<br />
nach dem Prinzip der ereignisorientierten<br />
Programmierung und benötigt nur einen<br />
Thread pro CPU, um die Rechenleistung<br />
des Servers voll auszunutzen.<br />
Muss der Thread auf externe Daten warten,<br />
legt er seinen bisherigen Auftrag<br />
einfach beiseite und wendet sich neuen<br />
Aufgaben zu. Das macht er jedoch nicht,<br />
ohne vorher einen Eventhandler gesetzt<br />
Die Vorteile dieser Arbeitsweise erklärt<br />
am besten der Vergleich zwischen einem<br />
Schnellimbiss und einem konventionellen<br />
Restaurant. In der Burgerbude ist eine<br />
Bedienung so lange für einen Gast zuständig,<br />
bis dieser sein Essen erhalten hat.<br />
Da sie die Fleischklopse mit Brötchen in<br />
der Regel nur auf das Tablett legen muss,<br />
kommt es auch nur selten zu Leerlauf. In<br />
der konventionellen Gastronomie dagegen<br />
würde es zu exorbitanten Lohnkosten<br />
führen, bliebe jeder Kellner bis zum Eintreffen<br />
des Essens beim Gast. Die Küchenlatenz<br />
ist hier einfach zu groß.<br />
Daher nimmt die Bedienung dort eine<br />
Bestellung auf, übermittelt sie der Küche<br />
und wendet sich dann dem nächsten Gast<br />
zu, statt zu warten, bis das Essen zubereitet<br />
ist. Sie arbeitet nach dem Prinzip<br />
der Event-Warteschlange. In wohlorganisierten<br />
Gaststätten schaut der Kellner<br />
auch nicht laufend in der Küche vorbei.<br />
Vielmehr macht ihn üblicherweise der<br />
Koch mit einem kleinen Glöckchen darauf<br />
aufmerksam, dass ein weiteres Gericht<br />
zum Servieren am Tisch bereitsteht,<br />
ähnlich einer Event-Notification.<br />
DELUG-DVD<br />
DELUG-DVD<br />
Auf der DELUG-DVD finden<br />
sich alle Beispiele aus diesem Artikel als Javascript-Dateien.<br />
In einer virtuellen Maschine<br />
ist Node.js auf Ubuntu 11.10 Server vorinstalliert.<br />
Zwei Beispielanwendungen (der Latenztest<br />
und ein einfacher Chatroom) stehen dort<br />
zum Test bereit, sie liegen in »/srv/node«.
In Javascript übernehmen Callbackfunktionen<br />
und Eventhandler die Rolle des<br />
Glöckchens. Das Javascript-Eventsystem<br />
funktioniert ohne Polling, also ohne ständiges<br />
Nachfragen in der Küche, ob das<br />
Essen vielleicht schon fertig sei. Im Betriebssystem<br />
kümmern sich überdies auch<br />
der Kernel und sein Scheduler um eine<br />
sinnvolle Aufgabenverteilung.<br />
Javascript ist seit seinen Anfangsversionen<br />
dafür ausgelegt, auf Benutzereingaben<br />
zu reagieren. Jeder <strong>Web</strong>entwickler<br />
kennt auf Mausaktivitäten bezogene<br />
Events wie »onClick()«, an die sich nicht<br />
nur eine, sondern beliebig viele Aktionen<br />
andocken lassen. Das Node-Modul<br />
»Events« funktioniert ähnlich [3]. Auch<br />
das Observer-Design-Pattern (Abbildung<br />
1, [4]), mit dem sich zur Laufzeit beliebig<br />
viele Funktionsaufrufe an ein Ereignis anbinden<br />
lassen, ist bereits eingebaut.<br />
Ein weiteres Verfahren, mit dem sich Ereignisabfolgen<br />
verketten lassen, sind die<br />
Callbackfunktionen. Dabei erhält eine<br />
Funktion eine weitere<br />
als Parameter,<br />
die sie aufruft, sobald<br />
ein bestimmter<br />
Zustand erreicht<br />
ist. Callback-<br />
Methode<br />
funktionen lassen<br />
sich in der funktionalen<br />
Sprache<br />
Javascript elegant<br />
Methode<br />
umsetzen, da der<br />
Entwickler Funktionen<br />
an Variablen<br />
binden oder Lambda-Funktionen<br />
direkt<br />
als Parameter<br />
übergeben darf.<br />
Umständliche Hilfskonstrukte<br />
wie die<br />
Funktions-Pointer in C/C++ sind daher<br />
nicht mehr erforderlich.<br />
Ein Beispiel für den Einsatz eines Eventhandlers<br />
zeigt der Code der Hello-World-<br />
Anwendung auf Nodejs.org (Lis ting 1),<br />
»emitter.on()«<br />
»emitter.on()«<br />
»emitter.on()«<br />
Methode<br />
Event<br />
Methode<br />
»emitter.on()«<br />
»emitter.on()«<br />
»emitter.on()«<br />
Methode<br />
Methode<br />
Abbildung 1: Beim Observer-Design-Pattern subskribieren sich mehrere Methoden<br />
für ein Event. Tritt es ein, dann ruft die Laufzeitumgebung sie auf, ohne dass<br />
sich der Entwickler weiter darum kümmern muss.<br />
der sich ähnlich auch als Start- oder Bootcode<br />
in komplexen Node.js-Anwendungen<br />
findet. Die erste Zeile bindet das im<br />
Lieferumfang von Node. js enthaltene Modul<br />
»http« an die Variable »http«. Selbst<br />
Node.js 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
41<br />
MAGAZIN<br />
SondErAkTion<br />
Testen Sie jetzt<br />
3 Ausgaben<br />
für 3 Euro!<br />
nUr<br />
MiT dVd!<br />
Coupon senden an: <strong>Linux</strong>-<strong>Magazin</strong> Leser-Service A.B.O.<br />
Postfach 1165, 74001 Heilbronn<br />
JA,<br />
ich möchte die nächsten 3 <strong>Linux</strong>-<strong>Magazin</strong>-Ausgaben für nur E 3*, statt<br />
E 17,40*, testen. Wenn mich das <strong>Linux</strong>-<strong>Magazin</strong> überzeugt und ich 14 Tage<br />
nach Erhalt der dritten Ausgabe nicht schriftlich abbestelle, erhalte ich das <strong>Linux</strong>-<strong>Magazin</strong> jeden<br />
Monat zum Vorzugspreis von nur E 5,13* statt E 5,80* im Einzelverkauf, bei jährlicher Verrechnung.<br />
Ich gehe keine langfristige Verpflichtung ein. Möchte ich das <strong>Linux</strong>-<strong>Magazin</strong> nicht mehr beziehen,<br />
kann ich jederzeit schriftlich kündigen. Mit der Geld-zurück-Garantie für bereits bezahlte,<br />
aber nicht gelieferte Ausgaben.<br />
Name, Vorname<br />
Straße, Nr.<br />
PLZ<br />
Ort<br />
Datum<br />
Unterschrift<br />
Gleich bestellen, am besten mit dem Coupon<br />
oder per<br />
• Telefon: 07131 / 2707 274 • Fax 07131 / 2707 78 601<br />
• E-Mail: abo@linux-magazin.de<br />
Mit großem Gewinnspiel (Infos unter: www.linux-magazin.de/probeabo)<br />
*Preis gilt für Deutschland<br />
Mein Zahlungswunsch: Bequem per Bankeinzug Gegen Rechnung<br />
BLZ<br />
Konto-Nr.<br />
Bank<br />
Beliefern Sie mich bitte ab der Ausgabe Nr.<br />
LM1124M
Titelthema<br />
www.linux-magazin.de Node.js 01/2012<br />
42<br />
geschriebene Module (einfache<br />
Java script-Dateien)<br />
bindet der »require()«-Befehl<br />
ein. Der Aufruf von<br />
»http.createServer()« reicht<br />
bereits aus, um einen <strong>Web</strong>server<br />
zu erzeugen (Abbildung<br />
2).<br />
Der an das von »create-<br />
Server()« zurückgegebene<br />
Serverobjekt direkt angeschlossene<br />
»listen()«-Aufruf<br />
schaltet den <strong>Web</strong>server<br />
für den lokalen Rechner<br />
und Port 1337 scharf. Damit<br />
der Server bei einem<br />
eingehenden Request weiß,<br />
was er zu tun hat, erwartet<br />
er eine Callbackfunktion<br />
wie »handler(request, response)«,<br />
die er bei jeder eingehenden<br />
Anfrage aufruft.<br />
Der Requesthandler erhält als Parameter<br />
das Requestobjekt, das die URL der Anfrage<br />
und vom Server gesendete (POST)-<br />
Daten enthält. Den Umgang damit erleichtert<br />
das Node.js-Modul »querystring«<br />
[6]. Die einfache Beispielanwendung<br />
ignoriert jedoch das Requestobjekt und<br />
sendet unabhängig von der Anfrage den<br />
01 var http = require('http');<br />
02 var handler = function (request, response) {<br />
03 response.writeHead(200, {'Content‐Type':<br />
'text/plain'});<br />
04 response.write('Hallo, Leser!');<br />
05 response.end();<br />
06 };<br />
Listing 1: »helloworld.js«<br />
07 http.createServer(handler).listen(1337, "127.0.0.1");<br />
08 console.log('Server running at<br />
http://127.0.0.1:1337/');<br />
Abbildung 2: Die virtuelle Maschine auf der DELUG-DVD zeigt die simple Beispielanwendung zur Latenzmessung aus Listing 2.<br />
Text »Hallo, Leser!«. Dazu benutzt sie<br />
»response«, also das zweite dem Requesthandler<br />
vom Server übergebene Objekt.<br />
Die aufgerufenen Methoden »write-<br />
Head()«, »write()« und »end()« erklären<br />
sich von selbst.<br />
Gezieltes Warten<br />
Stünde an der Stelle des statischen Textes<br />
»Hallo, Leser!« dynamisch aufbereiteter<br />
HTML-Code, so läge schon eine vollwertige<br />
Node.js-<strong>Web</strong>anwendung vor. Doch<br />
das Besondere an Node.js zeigt eine um<br />
einen Haltepunkt erweiterte Version des<br />
Requesthandlers (Listing 2). Bei ihr endet<br />
der Request in Zeile 13 erst einmal unverrichteter<br />
Dinge und gibt die Kontrolle an<br />
die Node-Laufzeitumgebung zurück, die<br />
auf weitere Anfragen wartet. Unabhängig<br />
davon ruft 1000 Millisekunden später der<br />
in Zeile 13 gesetzte Javascript-Timer ihn<br />
mit der Zahl der gerade aktiven Anfragen<br />
und vor allem mit dem »response«-Objekt<br />
als Parameter erneut auf.<br />
Statt dieses Timeouts steht in einer realen<br />
Node-Anwendung normalerweise eine<br />
Datenbankabfrage oder ein Befehl, der<br />
eine größere Menge Daten vom Dateisystem<br />
einliest. Genau wie der Timer-Befehl<br />
würde dieser jedoch den Code, der die<br />
Daten weiterverarbeitet, per Callback<br />
aufrufen. Dieses »response«-Objekt zeigt<br />
immer noch auf die Anfrage zum Zeitpunkt<br />
des Aufrufs von »handler()«, egal<br />
wie viele weitere Requests inzwischen<br />
eingegangen sind. Das »EndRequest«-<br />
Callback gibt nun einen »Content‐Type«-<br />
Header sowie einen kurzen Text aus und<br />
schickt ihn durch Aufruf der Methode<br />
»end()« an den richtigen Client.<br />
Die Demoanwendung aus dem Listing 2<br />
findet sich ebenfalls auf der DELUG-DVD<br />
dieses <strong>Magazin</strong>s und lässt sich mit »node<br />
Listing 2: »haltepunkt.js«<br />
01 var parallelRequests = 0; //globaler Zähler<br />
02 var http = require("http"); //importiere Node‐Modul http<br />
03 <br />
04 //Callback beim Eintreffen eines Requests<br />
05 var handler = function(request, response){<br />
06 //Ausgabe auf der Konsole bestätigt Request<br />
07 console.log("Request eingegangen bei " + new Date().getTime()/1000);<br />
08 //Parallel‐Request‐Zähler erhöhen<br />
09 parallelRequests++;<br />
10 console.log(parallelRequests + " parallele Requests");<br />
11 <br />
12 //Request wird erst in 1 Sekunde ausgeliefert (simuliert<br />
Datenbank‐Latenz o.ä.)<br />
13 setTimeout(EndRequest, 1000, parallelRequests, response);<br />
14 }<br />
15 <br />
16 //Wartezeit vorbei, Request kann ausgeliefert werden<br />
17 var EndRequest = function(RequestCount, response){<br />
18 response.writeHead(200, {"Content‐Type": "text/plain"});<br />
19 response.write("Parallele Requests: " + RequestCount );<br />
20 response.end();<br />
21 //fertig, ein laufender Request weniger<br />
22 parallelRequests‐‐;<br />
23 }<br />
24 <br />
25 //Server starten und auf Port 1337 scharf schalten<br />
26 http.createServer(handler).listen(1337);
srv/node/latency.js« starten. Ein Aufruf<br />
von »IP_der_virtuellen_Maschine:1337«<br />
im Browser zeigt die Anzahl der wartenden<br />
Request beim Eingang der Anfrage<br />
an (Abbildung 2). Dies werden pro<br />
Aufruf je zwei Anfragen sein, denn der<br />
Browser fordert vor der eigentlichen Seite<br />
auch die Datei »favicon.ico« für das Icon<br />
in der Adressenleiste an.<br />
Last erzeugen mit Ab<br />
Das wiederholte Betätigen der Taste [F5]<br />
im Browser sorgt nun für etwas Last auf<br />
dem Server. Bei jedem eingehenden Request<br />
meldet er sich an der Konsole mit<br />
Zeitstempel und der Anzahl der noch<br />
nicht abgearbeiteten Requests. Browser<br />
vermeiden es jedoch, zu viele Requests<br />
gleichzeitig an einen Server zu senden.<br />
Für ernsthafte Last sorgt erst ein <strong>Web</strong>server-Benchmark<br />
wie das in praktisch<br />
jedem Indianerpaket enthaltene Apache-<br />
Benchmark-Binary »ab« [7].<br />
Der Aufruf von »ab ‐n 10000 ‐c 1000<br />
http://127.0.0.1:1337/« auf der Servermaschine<br />
sendet zehnmal nacheinander 1000<br />
gleichzeitige Anfragen an die Node.js-<br />
Anwendung. Für Überblick über den<br />
Speicherbedarf von Node sorgt der Aufruf<br />
von »watch ‐n1 "ps u ‐C node"« in einer<br />
zweiten Konsole.<br />
Abbildung 3 zeigt, wie spielend Node.js<br />
die bis zu 1000 gleichzeitigen Anfragen<br />
bewältigt. Der vom Node-Binary belegte<br />
Speicher erhöht sich von etwa 9 MByte<br />
auf maximal 52 MByte und geht nach<br />
dem Abarbeiten des letzten Requests<br />
wegen der Garbage Collection in der<br />
Javascript-Engine schlagartig wieder annähernd<br />
auf den Wert vor dem Bombardement<br />
zurück.<br />
Im Vergleich zu mit Threads oder Prozessen<br />
arbeitenden <strong>Web</strong>servern sind die<br />
etwas mehr als 50 MByte Speicherkosten<br />
für 1000 aufgestaute Anfragen lächerlich<br />
gering, vor allem dann, wenn man bedenkt,<br />
dass es hier nicht um statische,<br />
sondern um mit einer Server-seitigen<br />
Skriptsprache erzeugte Seiten geht. Dass<br />
die einfache Beispielanwendung keine<br />
große CPU-Last erzeugt, liegt natürlich<br />
daran, dass sie außer zu warten keinerlei<br />
Arbeit verursacht. Muss ein konventioneller<br />
<strong>Web</strong>server aber bei einer Anfrageflut<br />
viele neue Instanzen inklusive<br />
Skriptinterpreter starten, kostet dies einige<br />
Prozessorzeit.<br />
Die Beispielanwendung demonstriert eindrucksvoll:<br />
Obwohl Node.js konstant in<br />
nur einem Thread abläuft, nimmt es dank<br />
seiner Event-gesteuerten Architektur sehr<br />
effizient neue Anfragen entgegen, bevor<br />
die alten abgearbeitet sind.<br />
Ajax-Anwendungen<br />
Das macht Node.js auch für die Admins<br />
von Ajax-Anwendungen interessant. Solche<br />
vom Browser initiierten, asynchronen<br />
Serveranfragen sorgen seit 2005 für<br />
immer komfortablere <strong>Web</strong>anwendungen.<br />
Node.js 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
43<br />
www.android–user.de
Titelthema<br />
www.linux-magazin.de Node.js 01/2012<br />
44<br />
Neben Vorbehalten gegen Event-gesteuerte<br />
Programmierung treffen Node.js<br />
auch die Vorurteile gegen die Programmiersprache<br />
Javascript, vor allem in Sachen<br />
Geschwindigkeit. Doch der Sprachen-Benchmark<br />
auf Debian-Alioth.org<br />
[13] beweist, dass Googles V8-Interpreter,<br />
den auch Node.js nutzt, verbreitete<br />
Server-seitige Skriptsprachen wie PHP,<br />
Perl oder Python bei vielen Tests mit<br />
Leichtigkeit in die Tasche steckt. Wenn<br />
Skripte in aktuellen Browsern immer<br />
noch langsam ablaufen, liegt dies daran,<br />
dass sie Manipulationen an einer HTML-<br />
Seite vornehmen. Auf das Konto des Javascript-Interpreters<br />
geht dabei nur ein<br />
geringer Bruchteil der Laufzeit, den Löwenanteil<br />
verschlingt die Rendering-Engine<br />
des Browsers.<br />
Oft gilt Javascript auch als Sprache mit<br />
geringen Ausdrucksmöglichkeiten und<br />
schlechtem Design. Und tatsächlich begehaltene<br />
Anfragen<br />
eignet. Die Requests<br />
sind nicht an Threads<br />
oder Prozesse gebunden,<br />
sondern lediglich<br />
an ein Javascript-Objekt,<br />
das wenig RAM<br />
belegt.<br />
Ein gangbarer Weg für<br />
einen Long-Polling-<br />
Server auf der Basis<br />
von Node.js ist es, jedem<br />
eingehenden Pol-<br />
Abbildung 3: Mit 1000 Anfragen pro Sekunde feuert »ab« auf die Node.js-<br />
Anwendung aus dem Listing 2. Dabei bleibt die Speicherbelegung erfreulich ling-Request zunächst<br />
niedrig und geht dank Garbage Collection auch schnell wieder zurück. einen Timer zuzuweisen,<br />
nach dessen Ablauf<br />
die Anwendung dem Client mitteilt,<br />
Die reagieren im Idealfall fast so flott<br />
auf Benutzereingaben wie Deskopprogramme.<br />
Schwieriger umzusetzen ist Arrays speichern sowohl die Request-<br />
dass keine Statusänderungen vorliegen.<br />
dagegen das Echtzeit-ähnliche Reagieren objekte als auch die Zeiger auf aktive<br />
auf Server-seitige Statusänderungen, weil Timer. Tritt dann eine Statusänderung<br />
HTTP nämlich nicht für Server-Push-Verfahren<br />
taugt.<br />
und nutzt die Requestobjekte, um alle<br />
ein, löscht die Anwendung die Timer<br />
Nur mit zwei Workarounds können <strong>Web</strong>entwickler<br />
kontern: Entweder fragt der Weil in diesem Szenario typischerweise<br />
wartenden Clients zu benachrichtigen.<br />
Client den Zustand des Servers in regelmäßigen<br />
Abständen ab oder der Server erhalten, weicht die Performance nicht<br />
alle Pollingclients die gleiche Nachricht<br />
lässt den einmal geöffneten Polling-Request<br />
so lange unbeantwortet, bis eine aus dem Listing ab.<br />
allzu sehr von der der einfachen Demo<br />
Statusänderung oder ein Timeout eintritt Auch die offizielle Beispielanwendung<br />
(Long Polling Requests, Abbildung 4). des Node.js-Projekts, ein Chatserver [9],<br />
demonstriert den effizienten Einsatz von<br />
Kometenhaft<br />
Long Polling. Auch dieses Chatprogramm<br />
ist auf der <strong>Linux</strong>-<strong>Magazin</strong>-DVD enthalten,<br />
es startet mit »cd /srv/node; node<br />
node_chat/server.js«.<br />
Das C10K-Problem<br />
Doch auch konventionelle <strong>Web</strong>server bieten<br />
inzwischen Lösungsansätze für das<br />
so genannte C10k-Problem (C10k steht<br />
für 10 000 gleichzeitige Verbindungen).<br />
Seit Version 6 von Ende 2006 stellt Jetty<br />
[10] <strong>Web</strong>anwendung Methoden zur Verfügung,<br />
die Requests von Serverinstanzen<br />
trennt und in einen Speicher sparenden<br />
Schlafmodus versetzt. Für den ohnehin<br />
ereignisorientierten <strong>Web</strong>server Nginx gibt<br />
es ein HTTP-Push-Modul, das Message-<br />
Queues direkt im <strong>Web</strong>server umsetzt [11].<br />
Anwendungen, die das nutzen, funktionieren<br />
allerdings nur in Nginx.<br />
Auch der Platzhirsch Apache nimmt sich<br />
der Comet-Anwendung an: Das Multi-<br />
Processing Module »event« durchbricht<br />
die bisherige Koppelung einer Anfrage<br />
Nur das zweite Verfahren macht wirklich<br />
Echtzeit-nahe Reaktionen möglich.<br />
Das in Amerika nach Ajax am häufigsten<br />
verkaufte Putzmittel Comet hat den<br />
Autor eines Blogposts, der die Technik<br />
schon 2006 ausführlich beschrieben hat<br />
[8], zum Projektnamen Comet inspiriert.<br />
Aber auch die technisch genauere Bezeichnung<br />
Long polling requests findet<br />
sich häufiger in der Literatur.<br />
Zwar funktioniert das Verfahren aus Sicht<br />
des Clients problemlos, doch es stellt den<br />
Server vor eine große Herausforderung:<br />
Jeder eingeloggte Benutzer hält eine<br />
<strong>Web</strong>server-Instanz dauerhaft im Speicher,<br />
in der Regel inklusive Laufzeitumgebung<br />
für eine Programmiersprache. Der Zahl<br />
der Anwender, die ein Thread-basierter<br />
Server bedienen kann, sind damit klare<br />
Grenzen gesetzt.<br />
Anders Node.js: Listing 2 zeigt nämlich<br />
auch, dass die ereignisorientierte Architektur<br />
sich gut für viele simul tane, offenan<br />
einen Thread oder Prozess. Bisher<br />
kennzeichnen es die Apache-Entwickler<br />
noch als experimentell, doch offenbar<br />
wird sich dies spätestens mit der künftigen<br />
Apache-Version 2.3 ändern [12].<br />
Spaghetticode?<br />
Bei Event-gesteuerter Programmierung<br />
fällt unter Entwicklern oft das Schimpfwort<br />
„Spaghetticode“, das auf die oft<br />
unübersichtlichen Relationen zwischen<br />
Events und zugeordneten Handlern anspielt.<br />
Es ist auch nicht von der Hand zu<br />
weisen, dass das Auslagern von logisch<br />
direkt an die Datenbankabfrage anschließendem<br />
Code in eine Callbackfunktion<br />
die Struktur verkompliziert und die Wartung<br />
erschwert.<br />
Zumindest wenn eine Comet-Anwendung<br />
identische Nachrichten an viele Clients<br />
versendet, gilt aber das Gegenteil: Beim<br />
klassischen Apache-Setup ohne MPM-<br />
Worker ist jedem wartenden Client ein<br />
Prozess zugeordnet. Tritt ein Ereignis ein,<br />
über das alle Clients zu benachrichtigen<br />
sind, müssen alle Forks identische Nachrichten<br />
absenden, was nur mit Hilfe der<br />
Interprozess-Kommunikation gelingt. In<br />
Node.js-Anwendung genügt dagegen eine<br />
Schleife, die über die zwischengespeicherten<br />
Anfrage-Objekte iteriert.<br />
Unterschätzt: Javascript
lastet Javascript seine Entwickler mit<br />
Schwächen, die noch aus den übereilten<br />
Releases zu Beginn des Browser-Kriegs<br />
zwischen Netscape und Microsoft herrühren.<br />
Im Kern handelt es sich aber<br />
um eine flexible und mächtige Sprache,<br />
die für funktionale wie auch objektorientierte<br />
Programmierung taugt. Wer sich<br />
von ihrem Potenzial überzeuge möchte,<br />
sollte das freie Onlinebuch „Eloquent<br />
JavaScript“ [14] konsultieren.<br />
Einer der Gründe, Javascript als Sprache<br />
für Node.js zu wählen, war seinen Entwicklern<br />
zufolge, dass Javascript – ursprünglich<br />
aus Sicherheitsgründen – nie<br />
auf das Dateisystem zugreift. So ließ sich<br />
eine Laufzeitumgebung kreieren, deren<br />
Performance nicht von der I/O-Last des<br />
Systems abhängt.<br />
Dabei dürfen die mit Node umgesetzten<br />
Anwendungen selbstverständlich<br />
auch auf Dateien zugreifen: Das Modul<br />
»file system« kapselt die üblichen Posix-<br />
Funktion. Praktisch alle seine Methoden<br />
akzeptieren eine Callbackfunktion als Parameter<br />
und laufen asynchron im Hintergrund<br />
ab. So erlauben sie die Umsetzung<br />
des Node-Credos: Der Codefluss endet<br />
an jeder Stelle, an der die Software auf<br />
externe Daten wartet. Erst eine Callbackfunktion<br />
holt den Fokus zurück, sobald<br />
das Einlesen abgeschlossen ist.<br />
Weitere Node-Kernmodule sind das<br />
bereits vorgestellte Modul »Http«, das<br />
auch in einer Spielart für sichere Verbindungen<br />
vorliegt (»Https«). »Net« öffnet<br />
TCP- oder Unix-Sockets, »TSL« Open-<br />
SSL-Verbindungen. DNS-Lookups sind<br />
mit »Dns« möglich. Es gibt einen Debugger,<br />
der Breakpoints setzt oder einen<br />
Einzelschritt-Modus aktiviert.<br />
»Cluster« startet mehrere Node-Instanzen,<br />
um von Multiprozessorsystemen<br />
zu profitieren. Bisher ist dazu ein expliziter<br />
Aufruf im Programmcode erforderlich.<br />
Informationen über die Anzahl<br />
der Prozessoren liefert das Modul »Os«.<br />
Nach Aussage des Node.js-Initiators<br />
ist für künftige Node-Version auch ein<br />
Kommandozeilen-Parameter »‐‐balance«<br />
geplant, der den Anwendungscode von<br />
dieser Aufgabe entbindet.<br />
Wo sind die Tools?<br />
Die Node.js-Pakete der meisten Distributionen<br />
bringen das grundlegende Handwerkszeug<br />
für des Erstellen von <strong>Web</strong>anwendungen<br />
inklusive <strong>Web</strong>server mit.<br />
Viele Hilfsmittel, die Java-, PHP- oder<br />
Ruby-Entwickler als Selbstverständlichkeit<br />
betrachten, fehlen jedoch noch, zum<br />
Beispiel die Datenbankanbindung, ein<br />
Modell-View-Controller-Framework, ein<br />
Template-System oder eine Bibliothek für<br />
Standardaufgaben.<br />
Wer sich jedoch im Github-Wiki des<br />
Node-Projekts die Liste der externen Module<br />
ansieht [15], stellt fest, dass in der<br />
kurzen Lebensdauer von Node.js bereits<br />
ein reiches Ökosystem an Erweiterungen<br />
herangewachsen ist. Dort sind meh-<br />
Node.js 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
45<br />
Alles zum ThemA Android<br />
Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />
Neu!<br />
Kennenlernangebot:<br />
3 AusgAben<br />
für nur 3 euro<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
Titelthema<br />
www.linux-magazin.de Node.js 01/2012<br />
46<br />
rere Hundert Module gelistet, die viele<br />
Themenbereiche wie das Einbinden von<br />
MySQL, PostgreSQL oder SQLite und vieler<br />
No-SQL-Datenbanken, Erzeugen von<br />
Grafik- oder PDF-Dateien, Internationalisierung<br />
oder XML-Parsing abdecken.<br />
Rails, Python, Ruby<br />
Selbst größere Frameworks wie Railwayjs<br />
[16] oder Express-On-Railway [17], die<br />
beide einen Teil der Rails-Features nach<br />
Node.js portieren, gibt es bereits. Dafür,<br />
dass sich Module samt Abhängigkeiten<br />
bequem installieren lassen, sorgt der Paketmanager<br />
Npm [18], der sich als Quasi-<br />
Standard für Node.js etablierte.<br />
Node.js ist nicht das einzige <strong>Web</strong>framework,<br />
das den so genannten Reactor-<br />
Design-Pattern für die Server-seitige<br />
Programmierung in einer Skriptsprache<br />
nutzbar macht. Bereits seit 2002 existiert<br />
das Python-Projekt Twisted [19], das wie<br />
Node.js eine Event-orientierte Architektur<br />
aufweist und wie dieses das Erstellen<br />
eines <strong>Web</strong>servers mit wenigen Zeilen<br />
Code erlaubt. Zu den Twisted-Nutzern<br />
zählen Canonical, das die Software für<br />
Launchpad und Ubuntu One einsetzt,<br />
und Lucasfilm, das damit die firmeneigene<br />
Render-Farm optimiert.<br />
Auf Rubyforge gibt es seit April 2006 mit<br />
Eventmachine [20] eine Bibliothekskomponente<br />
mit ähnlicher Zielsetzung.<br />
Sowohl Twisted als auch Eventmachine<br />
eignen sich nicht nur für Server-, sondern<br />
auch für Client-Komponenten, doch laufen<br />
diese Python- oder Ruby-Anwendung<br />
nicht in einem <strong>Web</strong>browser.<br />
Anwendungsbeispiel<br />
Ein Anwendungsfall, bei dem es auch<br />
viel Arbeit spart, den gleichen Code auf<br />
dem Server und im Browser nutzen zu<br />
können, sind beispielsweise Client-seitige<br />
Plausibilitätschecks für Benutzereingaben.<br />
Hier prüft eine in Javascript<br />
geschriebene Programmlogik die Werte,<br />
die der Benutzer in ein Formular eingegeben<br />
hat, ohne sie vorher zum Server<br />
abzuschicken. So informiert sie den Anwender<br />
bei ungültigen Eingaben in Sekundenbruchteilen,<br />
ohne den Server zu<br />
beanspruchen. Aus Sicherheitsgründen<br />
muss der Server die Werte aber dennoch<br />
ein zweites Mal überprüfen. Mit Node.js<br />
ist es hier aber immerhin möglich, den<br />
Prüfcode beim Client und auf dem Server<br />
erneut zu verwenden.<br />
Ein Nachteil von Node.js ist seine Jugend:<br />
Die Software bringt ein API, das<br />
sich nach Angaben der Entwickler „noch<br />
stark im Fluss“ befindet. Dass im Moment<br />
existierende Anwendungen oft<br />
nicht mit der aktuellen Node.js-Version<br />
funktionieren, bekam auch der Autor des<br />
<strong>Linux</strong>-<strong>Magazin</strong>s bei der Suche nach geeigneter<br />
Testsoftware zu spüren.<br />
Hohe Performance trotz<br />
komplexer Struktur<br />
Javascript und die hochperformante V8-<br />
Engine eignen sich allen Vorurteilen zum<br />
Trotz ausgezeichnet für die ereignisorientierte<br />
Server-seitige Programmierung.<br />
Bei Comet-Anwendungen bietet Node.js<br />
überragende Performance. Da diese Technik<br />
einen Echtzeit-nahen Server-Push erlaubt,<br />
lassen sich mit ihr Anwendungen<br />
für Online-Kooperation, ‐Kommunikation<br />
und ‐Spiele effizient umsetzen.<br />
Die schiere Zahl der Bibliotheken und<br />
Frameworks, die seit 2009 aus dem Boden<br />
geschossen sind, überrascht und<br />
spiegelt das rege Interesse wieder, das<br />
<strong>Web</strong>entwickler der interessanten neuen<br />
Anfrage 1 Antwort 1<br />
Anfrage 2 Antwort 2<br />
Anfrage 3 Antwort 3<br />
Anfrage an HD HD liefert Daten Anfrage an DB DB liefert Daten Timeout<br />
Abbildung 4: Comet-Anwendungen reagieren dank Long-Polling-Requests in Echtzeit auf Server-Ereignisse.<br />
Dabei beantwortet der Server die Polling-Anfrage des Clients so lange nicht, bis entweder eine bestimmte<br />
Laufzeit überschritten ist oder eine Nachricht für die Clients vorliegt.<br />
Technik entgegenbringen. Bausätze mit<br />
einem Umfang wie Spring, Symfony,<br />
Rails oder Django sind allerdings noch<br />
nicht darunter.<br />
Node.js wird es kaum gelingen, Platzhirsche<br />
wie Java, PHP, Ruby, Python oder<br />
Perl aus dem Feld zu schlagen, denn<br />
als Manko bleibt die durch die Ereignisorientierung<br />
verursachte komplizierte<br />
Codestruktur. Dafür kann die junge, aufstrebende<br />
Entwicklungsumgebung als Alleinstellungsmerkmal<br />
für sich verbuchen,<br />
dass sie viele Tausend Long-Polling-Requests<br />
ohne großen Speicherverbrauch<br />
verkraftet. (mfe)<br />
n<br />
Infos<br />
[1] Node.js: [http:// nodejs. org]<br />
[2] Ryan Dahls Node.js-Vortrag:<br />
[http:// jsconf. eu/ 2009/ video_nodejs_by_<br />
ryan_dahl. html]<br />
[3] Events in Node.js: [http:// elegantcode.<br />
com/ 2011/ 02/ 21/ taking‐baby‐steps‐with<br />
-node‐js‐implementing‐events/]<br />
[4] Observer-Design-Pattern:<br />
[http:// de. wikipedia. org/ wiki/<br />
Observer_%28Entwurfsmuster%29]<br />
[5] Libevent: [http:// libevent. org]<br />
[6] Node Modul Query Strings: [http:// nodejs.<br />
org/ docs/ v0. 6. 1/ api/ querystring. html]<br />
[7] Apache-Benchmark AB: [http:// httpd.<br />
apache. org/ docs/ 2. 0/ programs/ ab. html]<br />
[8] Blogpost, der den Begriff Comet prägte:<br />
[http:// infrequently. org/ 2006/ 03/ comet<br />
‐low‐latency‐data‐for‐the‐browser/]<br />
[9] Chat-Demo des Node.js-Projekts:<br />
[http:// chat. nodejs. org]<br />
[10] Jetty: [http:// jetty. codehaus. org/ jetty/]<br />
[11] Nginx-Push-Modul:<br />
[http:// pushmodule. slact. net]<br />
[12] Mod_event in Apache 2.3: [http:// httpd.<br />
apache. org/ docs/ trunk/ mod/ event. html]<br />
[13] Programmiersprachen-Shootout:<br />
[http:// shootout. alioth. debian. org]<br />
[14] „Eloquent JavaScript“:<br />
[http:// eloquentjavascript. net]<br />
[15] Node-Module: [https:// github. com/<br />
joyent/ node/ wiki/ modules]<br />
[16] Railwayjs: [http:// railwayjs. com]<br />
[17] Express-On-Railway: [https:// github. com/<br />
1602/ express‐on‐railway]<br />
[18] Npm: [http:// npmjs. org]<br />
[19] Twisted: [http:// twistedmatrix. com/ trac/<br />
wiki/ TwistedProject]<br />
[20] Eventmachine:<br />
[http:// rubyeventmachine. com]
„Engpässe<br />
bei Festplatten?<br />
Für uns<br />
kein Thema!“<br />
Thomas Wilhelm,<br />
Purchasemanager<br />
Thomas Krenn kann liefern!<br />
Trotz Lieferengpässen haben wir uns umfassend mit Festplatten bevorratet und können bis Ende des Jahres liefern.*<br />
* Nur in Verbindung mit dem Kauf eines Servers<br />
Thomas Krenn steht für Server made in Germany. Wir<br />
assemblieren und liefern europaweit innerhalb von 24<br />
Stunden. Unter www.thomas-krenn.com können Sie<br />
Ihre Server individuell konfi gurieren.<br />
Unsere Experten sind rund um die Uhr für Sie unter<br />
+49 (0) 8551 9150-0 erreichbar<br />
(CH: +49 (0) 848207970, AT +43 (0) 7282 20797-3600)<br />
Informieren Sie sich unter: www.thomas-krenn.com/festplatten_liefern<br />
Made in Germany!<br />
Verkauf erfolgt ausschließlich an Gewerbetreibende, Firmen, Freiberufler (Ärzte, Rechtsanwälte etc.), staatliche Institutionen und Behörden. Druckfehler, Irrtümer und Änderungen in Preis und Ausstattung vorbehalten.<br />
Unsere Versandkosten richten sich nach Gewicht und Versandart. Genaue Preisangaben finden Sie unter: www.thomas-krenn.com/versandkosten. Thomas-Krenn.AG, Speltenbach-Steinäcker 1, D-94078 Freyung
Titelthema<br />
www.linux-magazin.de <strong>Web</strong>sicherheit 01/2012<br />
48<br />
Gute Vorhersagbarkeit bedeutet schlechte Sicherheit<br />
Seltener Zufall<br />
Während <strong>Linux</strong>-<strong>Magazin</strong>-Autor und Modellbahn-Fan Tobias Eggendorfer die <strong>Web</strong>site eines Ausflugsziels hackt,<br />
macht sich der Informatikprofessor Gedanken über die Vorhersagbarkeit von Zufällen, PHP-Funktionen und<br />
Kreditkartennummern. Tobias Eggendorfer<br />
© Chris Baker, 123RF.com<br />
Die liebevoll gestaltete Modelleisenbahn-<br />
Landschaft „Miniatur Wunderland“ [1] in<br />
Hamburg erfreut ihre Besucher so sehr,<br />
dass es Tage gibt, an denen diese stundenlang<br />
auf Einlass warten müssen. Wer<br />
das nicht riskieren will, reserviert vor her<br />
über die <strong>Web</strong>seite eine Uhrzeit (Abbildung<br />
1), zu der er über eine Fast-Lane<br />
direkt zur Kasse vordringen darf. Klar,<br />
dass gute Termine ruck, zuck ausgebucht<br />
sind. Eines Abends überlegte ich mit einem<br />
Gast, am nächsten Tag ins Miniatur<br />
Wunderland zu gehen. Doch die Wartezeitprognose<br />
betrug gruselige zwei Stunden,<br />
und auf der <strong>Web</strong>seite waren die für<br />
uns nützlichen Timeslots rot.<br />
Ein paar Klicks auf Links mit grünen<br />
Zeiten zeigten mir jedoch, dass die URL<br />
neben dem Wunschdatum auch ein Feld<br />
»time« übergibt, das augenscheinlich<br />
keine Uhrzeit ist (Abbildung 2). Meine<br />
erste Vermutung war, dass »time« einfach<br />
ein Index in der Liste der Timeslots ist.<br />
Also probiere ich einen nicht legitimen<br />
Link für die Zeit 13 bis 14 Uhr zu erzeugen,<br />
obwohl die Auswahlseite den Slot<br />
rot und nicht mehr reservierungsfähig<br />
anzeigt. Tatsächlich: Anders als die Auswahlseite<br />
prüft die Reservierungsseite die<br />
Verfügbarkeit eines Slots nicht. Errate ich<br />
also den Index, kann ich für jede Zeit –<br />
grüne wie rote – reservieren.<br />
It’s »time« to say hello!<br />
Am nächsten Tag, pünktlich 13 Uhr im<br />
Miniatur Wunderland, durften mein Gast<br />
und ich tatsächlich die Fast-Lane passieren<br />
– freie Bahn im Hacker-Wunderland.<br />
Nach unserer Rückkehr überkam mich<br />
abermals die Neugier. Denn der Index<br />
wies einen seltsamen Offset auf, außerdem<br />
wollte ich das Error-Handling noch<br />
etwas auf die Probe stellen. Also wählte<br />
ich einen Index, der sicher nicht vorgesehen<br />
ist: 100 (Abbildung 3).<br />
Dabei zeigt sich, dass der Wert gar kein<br />
Index ist, sondern einfach das Doppelte<br />
der Anfangszeit des Timeslots. Für ungerade<br />
Werte ergibt sich der Einlass zur<br />
halben Stunde. Nach einem bisschen Experimentieren<br />
erkenne ich, dass die Anwendung<br />
»time« als Signed-64-Bit-Integer<br />
ablegt. Denn bei „Zeiten“ größer als etwa<br />
9 Trillionen (2 63 ) und für negative Werte<br />
erscheint die kuriose Fehlermeldung »Hacking<br />
attempt, script execution stoped!«.<br />
Die Anwendung checkt offenbar auch<br />
das Datum nicht, weil ich für längst vergangene<br />
Tage reservieren darf.<br />
Was haben die Programmierer falsch gemacht?<br />
Wirksam wäre, wenn ihre Bestätigungsseite<br />
den Timeslot und das Datum<br />
abermals prüfen würde. Wenn sie das<br />
nicht wollen oder können, müssten sie<br />
zumindest verhindern, dass der Link für<br />
Dritte vorhersagbar ist. Dafür sollten die<br />
Entwickler jedem Zeitslot eine für die jeweilige<br />
Sitzung zufällige, aber eindeutige<br />
ID zuordnen. Der Aufwand, diese ID auf<br />
der Zielseite zu überprüfen, gleicht aber<br />
wohl dem, die Verfügbarkeit des Timeslots<br />
erneut zu prüfen.<br />
PHP-Session-ID<br />
Apropos Sitzung: Das Miniatur Wunderland<br />
vergibt eine PHP-Session-ID, wohl<br />
um das Surfverhalten der Nutzer zu verstehen.<br />
Im Hinblick auf den Datenschutz<br />
darf man das kritisch sehen, aber auch<br />
im Hinblick auf Vorhersagbarkeit liefern<br />
Session-IDs ein Beispiel – zumindest bis<br />
PHP 5.3.1, wie Samy Kamkar [2] auf der<br />
Blackhat 2010 [3] zeigte.<br />
Miniatur Wunderland nutzt PHP 5.2.6,<br />
wie ich im HTTP-Header mit Firebug<br />
[4] herausfinde (Abbildung 4). Damit<br />
sind die Session-IDs vorhersagbar, auch
Abbildung 1: Wer vor dem Wunderland nicht warten will, reserviert sich seine Einlasszeit im Vorhinein.<br />
wenn der dadurch anrichtbare Schaden<br />
überschaubar bleibt. Zum Demonstrieren<br />
des Angriffsprinzips eignet sich die<br />
Site allerdings schön: Jede Session bekommt<br />
eine zufällige, aber eindeutige ID<br />
zugewiesen. Ein Blick in die Funktion<br />
»php_session_create_id()« im PHP-API<br />
zeigt, dass die ID als Ausgangswert den<br />
aktuellen, Mikrosekunden-genauen Unix-<br />
Zeitstempel, die IP des Clients und einen<br />
Zufallswert beinhaltet. Das Konstrukt ist<br />
148 Bit lang. Zum Tarnen wendet PHP<br />
auf diese Bitfolge eine Hashfunktion an,<br />
was auf die Zufälligkeit allerdings keine<br />
Auswirkung hat.<br />
Die IP des entfernten Rechners ist leicht<br />
zu ermitteln, am einfachsten, indem man<br />
das Opfer über einen Linkverkürzer wie<br />
Tinyurl oder Bit.ly auf eine eigene Seite<br />
lotst und in die Zugriffslogs des <strong>Web</strong>servers<br />
schaut. Damit sind schon 4 Byte,<br />
also 32 Bit der ID bekannt.<br />
Samy Kamkar möchte die Session-IDs in<br />
sozialen Netzen ausspähen. Er schlägt<br />
NEU! AUCH IN<br />
DER SCHWEIZ<br />
Abbildung 2: Gute Zeiten, schlechte Zeiten: Wer sich an die Regeln hält, klickt in der PHP-Applikation einen<br />
Link an und kann einen Platz für die Fast-Lane reservieren.
Titelthema<br />
www.linux-magazin.de <strong>Web</strong>sicherheit 01/2012<br />
50<br />
Abbildung 3: 50 bis 51 Uhr? Im Wunderland hat der Tag offenbar mehr als 24 Stunden.<br />
vor, sich einfach mit dem Adressaten des<br />
Angriffs virtuell zu befreunden, dann<br />
sähe man die Einlogzeit – den zweiten<br />
Bestandteil der Session-ID. Gangunterschiede<br />
zur lokalen Uhr lassen sich anhand<br />
des HTTP-Headers (Abbildung 4)<br />
erkennen. Dank der Zeit sind weitere<br />
4 Byte der Session-ID bekannt – fehlen<br />
noch 84 Bit. Den größten Teil macht ein<br />
64 Bit große Zufallswert aus, den die<br />
Funktion »php_combined_lcg()« liefert.<br />
Die prüft zunächst, ob der Zufallszahlengenerator<br />
schon initialisiert ist.<br />
Pseudo ist eben nicht echt<br />
Pseudozufallszahlen werden durch ein<br />
Berechnungsschema ermittelt, im Fall<br />
des hier verwendeten LCG-Algorithmus<br />
(linearer Kongruenzgenerator) handelt<br />
es sich um eine rekursiv definierte Folge<br />
X n+1 =(aX n +c) mod m. Jeder Zufallswert<br />
X n+1 hängt also vom vorherigen<br />
Zufallswert X n ab. Darum wird die Folge<br />
vorhersagbar, sobald ihr Startwert bekannt<br />
ist, denn die Parameter a (Faktor)<br />
und m (Modul) sind konstant.<br />
Die Kunst ist es, einen nicht vorhersagbaren<br />
Startwert zu finden. In PHP erledigt<br />
dies »lcg_seed()« (Listing 1). Die Funktion<br />
setzt den 64 Bit langen Startwert aus zwei<br />
gleich langen Teilwerten »s1« und »s2«<br />
zusammen. »s2« bildet die Prozess-ID des<br />
<strong>Web</strong>servers ab, deren Wertebereich in<br />
der Praxis die theoretischen 32 Bit nicht<br />
mal annähernd ausnutzt. Der Standard-<br />
<strong>Linux</strong>-Kernel begrenzt ihn in »threads.h«<br />
auf 16 Bit. Viele Systeme vergeben die<br />
PIDs sogar aufsteigend, andere reservieren<br />
einen relativ kleinen Bereich. Lässt<br />
das Zielsystem gar eine PHP-Injection zu,<br />
würde »getmypid()« die <strong>Web</strong>server-PID<br />
sogar genau ausgeben.<br />
Auch »s1« nutzt nicht die vollen 32 Bit<br />
aus: Listing 1 verknüpft die Unix-Epoche<br />
(t1) mit den logisch negierten Mikrosekunden<br />
(t2) per XOR, also s1=t1<br />
XOR (NOT t2). Doch ist t2 stets kleiner<br />
1000 000. Damit ändern sich nur die niederwertigsten<br />
20 Bits von t2, die anderen<br />
sind stets 0 (invertiert dann 1). Somit<br />
lassen sich die oberen 12 Bits direkt aus<br />
der Systemzeit ermitteln.<br />
Der genaue Startzeitpunkt des Prozesses<br />
ist in einem Zeitfenster von 2 20 Sekunden<br />
(rund 12 Tage) unerheblich. Denn<br />
praktischerweise startet Apache Instanzen<br />
nach einer bestimmten Anzahl von<br />
Anfragen neu. Das bedeutet, dass mit<br />
einer ausreichend hohen Wahrscheinlichkeit<br />
ein solcher Neustart innerhalb der<br />
letzten zwölf Tage stattfand – t2 ist also<br />
nicht mehr signifikant.<br />
Die niederwertigen 20 Bits von »s1« verbleiben<br />
als einzige Unbekannte. Das sind<br />
ausreichend wenig Werte, um sie durch<br />
einen Brute-Force-Angriff zu ermitteln.<br />
Samy Kamkar hat dafür ein kleines Beispielprogramm<br />
[5] geschrieben und ein<br />
Patch für PHP 5.3.1 eingereicht, das dann<br />
in PHP 5.3.2 eingeflossen ist und sogar<br />
nach 5.2.13 zurückportiert wurde.<br />
Die Alternative<br />
Tatsächlich weist die neue Version in<br />
Listing 2 eine höhere Entropie auf: Zum<br />
einen verschiebt die Zeile 7 für »s1«<br />
die gelieferten Mikrosekunden um 11<br />
Listing 1: »lcd_seed()« von PHP 5.3.1<br />
01 /* Auszug aus ext/standard/lg.cm, gekürzt um<br />
einige IFDEFs */<br />
02 <br />
03 static void lcg_seed(TSRMLS_D)<br />
04 {<br />
05 struct timeval tv;<br />
06 if (gettimeofday(&tv, NULL) == 0) {<br />
07 LCG(s1) = tv.tv_sec ^<br />
(~tv.tv_usec);<br />
08 } else {<br />
09 LCG(s1) = 1;<br />
10 }<br />
11 LCG(s2) = (long) getpid();<br />
12 LCG(seeded) = 1;<br />
13 }<br />
Listing 2: »lcd_seed()« von PHP 5.3.8<br />
01 /* Auszug aus ext/standard/lg.c, gekürzt um<br />
einige IFDEFs */<br />
02 <br />
03 static void lcg_seed(TSRMLS_D)<br />
04 {<br />
05 struct timeval tv;<br />
06 if (gettimeofday(&tv, NULL) == 0) {<br />
07 LCG(s1) = tv.tv_sec ^<br />
(tv.tv_usec
Bit nach links, was genau den Teil der<br />
Epoche maskiert, der sich am wenigsten<br />
stark ändert. Auf diese Weise schließt<br />
sich das oben abgeschätzte Zwölf-Tage-<br />
Fenster. Zum anderen fragt Zeile 14 die<br />
Systemzeit ein zweites Mal ab, um die<br />
Mikrosekunden als Verschiebungsparameter<br />
für »s2« zu gewinnen.<br />
Kreditkartennummer erraten<br />
Laut einer Google-Suche, also der landläufigen<br />
Meinung, lassen sich Kreditkartennummern<br />
nicht erraten. Diner’s Club vergibt 14-stellige<br />
Kartennummern, American Express 15-stellige<br />
und Visa und Mastercard nur noch 16-stellige.<br />
Damit ergeben sich 10 14 bis 10 16 Möglichkeiten<br />
für Kartennummern – theoretisch.<br />
In der Praxis schränkt die Anatomie der Nummernvergabe<br />
den Wertebereich ein: Die erste<br />
Ziffer gibt den Schwerpunkt der Industriebranche<br />
an, der die Karte angehört. So sind Visa und<br />
Mastercard echte Banken und starten mit den<br />
Ziffern 4 und 5, während American Express aus<br />
der Reisebranche stammt und die 3 trägt.<br />
Die ersten sechs Stellen einer Kreditkartennummer<br />
geben an, welche Bank die Karte ausgegeben<br />
hat. Zudem enthalten sie oft einen<br />
Hinweis auf die Kartenart. So lässt sich bei<br />
American Express an den ersten Ziffern ablesen,<br />
aus welcher Region die Karte stammt und<br />
welcher Kartenlevel assoziiert ist. Eine deutsche<br />
American Express beginnt mit 3750 [10],<br />
eine Platinum mit 37508. Bei Lufthansa sind in<br />
der Banknummer meinen Informationen zufolge<br />
der Status des Kunden und die Art der Karte<br />
(mit/ohne Businesspaket) kodiert.<br />
Die darauf folgenden Positionen, mit Ausnahme<br />
der letzten, geben die bankinterne Kundennummer<br />
wieder. Eine Besonderheit konnte ich bei<br />
American Express beobachten: Dort markieren<br />
die Stellen 12 bis 14, ob es sich um die Partneroder<br />
Hauptkarte handelt. Hauptkarten scheinen,<br />
sofern es Partnerkarten gibt, stets 300 als<br />
Wert zu haben. Partnerkarten tragen den Wert<br />
»10Fortlaufende_Nummer_der_Partnerkarte«.<br />
Andere Banken vergeben die interne Kundennummer<br />
offenbar auch nach einem Schema, das<br />
einfachste dürften aufsteigende Nummern sein.<br />
Die Prüfsumme<br />
Die letzte Zahl der Kreditkartennummer ist eine<br />
Prüfziffer, um Übertragungsfehler zu entdecken.<br />
Sie errechnet sich nach dem sehr einfachen<br />
Luhn-Algorithmus, der von rechts kommend jede<br />
zweite Stelle mit 2 multipliziert. Sollte das<br />
Ergebnis größer 9 sein, wird 9 subtrahiert. Aus<br />
diesen Ziffern und den verbleibenden Stellen<br />
entsteht die Summe. Ist sie durch 10 rest los<br />
teilbar, ist die Kartennummer gültig.<br />
Durch die Gewichtung der benachbarten Stellen<br />
sind Zahlendreher sofort offensichtlich, die<br />
Sicherheit einer kryptographischen Prüfsumme<br />
Zugleich versuchen die PHP-Macher mit<br />
dieser Maßnahme auch die Zufälligkeit<br />
von »s2« zu erhöhen. Das erscheint allerdings<br />
wenig weise, denn der Wert wird<br />
sich zwischen den beiden kurz aufeinanderfolgenden<br />
Aufrufen nicht wesentlich<br />
ändern, vermutlich nur in den niederwertigsten<br />
4 bis 5 Bit.<br />
ist jedoch nicht zu erreichen. Die Prüfsumme<br />
eignet sich für einen Schnellcheck, ob eine Kreditkartennummer<br />
gültig ist. Darum überrascht<br />
es nicht, dass es im Netz eine Vielzahl von Kreditkartengeneratoren<br />
gibt, die für diesen ersten<br />
Test plausible Nummern erzeugen.<br />
Sternchen an verschiedenen Stellen<br />
Onlineshops verkürzen eine Kreditkartennummer<br />
bei der Ausgabe, um den Klau der Kartendaten<br />
zu erschweren. Amazon gibt nur die<br />
letzten vier Stellen und den Typ der Karte aus,<br />
American Express nennt in Kunden-E-Mails und<br />
beim Onlinebanking die letzten fünf. Samsonite<br />
schreibt in die Bestellbestätigung die ersten<br />
vier und letzten beiden Ziffern. Bei Sixt finden<br />
sich die ersten vier und die letzten vier Stellen.<br />
Auf Tankbelegen sehe ich eigentlich alle weiteren<br />
Varianten. Einen Hochgenuss bereitete mir<br />
neulich ein Onlineshop, der alle – bis auf die<br />
letzte Stelle der Kartennummer – offen listet.<br />
Aller Anfang ist leicht<br />
Zwar shiftet Zeile 15 diese Mikrosekunden<br />
wieder um 11 Bit nach links, der<br />
Bereich ist aber maximal 16 Bit lang, auf<br />
Standardsystemen ohne Randomisierung<br />
der Prozess-ID eher 11 bis 12 Bit. Damit<br />
wird nur das oberste Bit der PID maskiert.<br />
»s2« ist nun immerhin nicht mehr<br />
zur Hälfte mit Nullen gefüllt, ähnelt dafür<br />
In Kenntnis dieser Umstände kommen Angreifer<br />
wieder ein Stück weiter: Ist die letzte Ziffer<br />
bekannt, begrenzt sie den Wertevorrat aller<br />
anderen Stellen. Wäre nur eine Stelle unkenntlich,<br />
so lässt sich die sofort herleiten. Bei zwei<br />
versternten Stellen erwartet man 100 Ratemöglichkeiten,<br />
tatsächlich sind es nur neun. Beispiel<br />
American Express: Die Kartennummer hat 15<br />
Stellen, die letzten fünf Stellen, verrät American<br />
Express freiwillig, lauten 71047. Die ersten<br />
vier sind auch bekannt: 3750. Damit bleiben<br />
noch sechs zu ratende Stellen.<br />
Wer den Kartennutzer mal beobachtet hat, kennt<br />
die Farbe der Karte und damit deren Level. Alternativ<br />
lässt sich an der 104 erkennen, dass<br />
es sich um eine Partnerkarte handeln könnte<br />
– und es gibt nur wenige Kartenlevel, die vier<br />
Partnerkarten erlauben. Damit bleiben fünf offene<br />
Stellen. Statt der spontan zu erwartenden<br />
100 000 Möglichkeiten gibt es hier nur 5904<br />
gültige Kartennummern. Das lässt sich logisch<br />
herleiten oder auch empirisch bestimmen.<br />
In einem Restaurant neulich tarnte der Beleg<br />
des Bezahlterminals gerade mal die letzten drei<br />
Stellen von American Express. Die viert letz te<br />
macht klar, dass es sich um eine Partnerkar te<br />
handelt. Damit sind die Werte der beiden vorletzten<br />
Stellen begrenzt. Die letzte Stelle errechnet<br />
sich nach Luhn. Damit sinken die Variationsmöglichkeiten<br />
von den sowieso schon mageren<br />
10 3 auf eine (Partnerkarten sind durchnummeriert).<br />
Hier wird jeder Schuss ein Treffer.<br />
Wer es selbst probieren möchte, findet in Listing<br />
3 ein kleines Programm, das abhängig von den<br />
bekannten, also fixierten Stellen (»1« im Array<br />
»fixed«) einer beliebigen Kartennummer alle<br />
möglichen gültigen Kartennummern mit der<br />
gleichen Prüfsumme ermittelt. Der Algorithmus<br />
ist bewusst simpel gestaltet und iteriert<br />
rekursiv durch alle Kombinationen.<br />
Etwas Mathematik<br />
Mit mehr Energie lässt sich erkennen, dass aufgrund<br />
der Struktur der Prüfsumme bestimmte<br />
Permutationen über einen Treffer auch Treffer<br />
sein müssen. Die Nummern darf ein weiterer<br />
Durchlauf ausblenden. Außerdem lassen sich<br />
zwei benachbarte Ziffern tauschen, wenn man<br />
sie geeignet verdoppelt oder halbiert. Mathematisch<br />
handelt es sich eigentlich um ein<br />
(stark) unterbestimmtes, nicht homogenes lineares<br />
Gleichungssystem. Darum lassen sich aus<br />
einer Lösung weitere direkt herleiten.<br />
Die Konsequenz<br />
Gelingt es einem Angreifer, über mehrere Shops,<br />
Belege oder E-Mails verschiedene Teile einer<br />
Kreditkartennummer zu ermitteln, reduziert er<br />
so die Anzahl der möglichen Varianten. Kennt<br />
er zudem den Kartentyp (siehe oben), schränkt<br />
das den Wertevorrat weiter ein. Besonders effektiv<br />
sind die Akzeptanzstellen, die die letzte<br />
Ziffer, die Prüfziffer, nicht ausblenden, was für<br />
fast alle Onlineshops gilt.<br />
Die beste Lösung wäre, wenn alle Shops die<br />
Prüfziffern „versternen“ würden. Angreifern<br />
macht es zudem das Leben schwer, wenn Zahlen<br />
aus dem mittleren Bereich, also nach der sechsten<br />
Ziffer, getarnt bleiben. Für weiter vorne<br />
stehende Ziffern lohnt der Aufwand nicht, die<br />
sind sowieso leicht ermittelbar.<br />
Für einige Karten konnte ich schon Informationen<br />
zum Aufbau ermitteln, doch ist das nur ein<br />
überschaubarer Vorrat. Um weiter zu recherchieren,<br />
würde ich mich freuen, wenn an dem<br />
Thema Interessierte mir von eigenen Erkenntnissen<br />
berichten. Insbesondere interessieren<br />
mich bankinterne BIN-Konstruktionen analog zu<br />
den Beispielen Lufthansa und American Express<br />
sowie Besonderheiten innerhalb der Kundennummer,<br />
wie bei Amex-Partnerkarten.<br />
<strong>Web</strong>sicherheit 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
51
Titelthema<br />
www.linux-magazin.de <strong>Web</strong>sicherheit 01/2012<br />
52<br />
01 #!/bin/perl<br />
aber S1 ziemlich, was theoretisch Raum<br />
für neue Abschätzungen gibt. Sinnvoller<br />
wäre es, eine andere schwer vorhersagbare<br />
Zufallsquelle für »s2« heranzuziehen,<br />
statt ein zweites Mal die Systemzeit.<br />
Auf <strong>Linux</strong>-Systemen steht mit »/dev/random«<br />
bereits ein sehr guter Zufallsdatengenerator<br />
zur Verfügung.<br />
GCC macht’s jetzt besser<br />
Zufällig war der Zufall gerade erst Ende<br />
September 2011 bei GCC ein Thema, als<br />
Andi Kleen ein Patch [6] für den Compiler<br />
vorschlug, das das Seeding des GCC-<br />
Zufallszahlengenerators verbessert. Denn<br />
der initialisiert sich bis heute mit einer<br />
Mischung aus Prozess-ID und Systemzeit.<br />
Kleen fiel dieses Problem auf, als<br />
er in einer massiv parallelen Umgebung<br />
eine unzureichende Zufallszahlenqualität<br />
diagnostizierte.<br />
Er schlägt als Verbesserung vor, »/dev/<br />
urandom« – sofern verfügbar – als Quelle<br />
für den Seed zu verwenden. Dabei bleibt<br />
jedoch ein kleines Zufalls-Restrisiko:<br />
02 @cc = (3,7,5,0,8,1,2,3,4,5,7,1,0,0,7);<br />
03 @fixed = (1,1,1,1,1,1,0,0,0,0,1,1,1,1,1);<br />
04 <br />
05 sub test_rekursiv<br />
06 { my ($stelle, @ccnum) = @_;<br />
07 my ($val, $pos, $summe);<br />
08 if ($stelle < $#ccnum)<br />
09 { if ($fixed[$stelle] == 1)<br />
10 { test_rekursiv($stelle + 1, @ccnum);<br />
11 }<br />
12 else<br />
13 { for ($val = 0; $val < 9; $val++)<br />
14 { $ccnum[$stelle]=$val;<br />
15 test_rekursiv($stelle +1, @ccnum);<br />
16 }<br />
17 }<br />
18 }<br />
19 else<br />
Listing 3: Kartennummer raten<br />
20 { for ($summe=0, $pos=0; $pos 9) ? $ccnum[$pos]*2‐9 :<br />
$ccnum[$pos]*2);<br />
22 }<br />
23 if (($summe % 10) == 0 )<br />
24 { print "Gueltige Nr: @ccnum\n";<br />
25 }<br />
26 }<br />
27 }<br />
28 <br />
29 test_rekursiv(0, @cc);<br />
Abbildung 4: Wer nicht an der Konsole per Telnet HTTP tippen will, nutzt zum Beispiel das Analysetool Firebug,<br />
um dem fremden Server seine Versionsdaten abzuluchsen.<br />
Während »/dev/random« nur Zahlen liefert,<br />
solange sein Vorrat an durch Sys temereignisse<br />
gefütterten Zufallsdaten ausreicht,<br />
emittiert »/dev/urandom« immer<br />
Zahlen. Deshalb könnte »/dev/random«<br />
blockieren und so den zugehörigen Prozess<br />
zum Stillstand bringen, bis wieder<br />
zufällige Ereignisse anfallen. Das ist für<br />
viele Anwendungen nicht tolerierbar,<br />
weshalb sich ein Ausweichen auf »/dev/<br />
urandom« empfiehlt. Damit sinkt zwar<br />
geringfügig die Zufälligkeit, allerdings ist<br />
das Eintreten des Effekts für den Angreifer<br />
nicht vorhersagbar.<br />
Bind und Open SSL binnen<br />
eines Jahres im Visier<br />
Ein Pseudozufallszahlen-Generator erwies<br />
sich 2008 auch als Ursache für DNS-<br />
Poisoning-Angriffe auf verschiedene<br />
BSD-Unixe, darunter Open BSD und Mac<br />
OS X [7]. Seit 1997 war bekannt, dass<br />
vorhersagbare, aufsteigende DNS-Anfragen-IDs<br />
ein Sicherheitsrisiko darstellen.<br />
Open BSD hatte darum damals schon<br />
einen Zufallszahlengenerator in seine<br />
Bind-Variante integriert, dabei aber – neben<br />
einem statischen UDP-Port – übersehen,<br />
wie stark der LCG-Algorithmus vom<br />
Startwert abhängt und wie wenig er sich<br />
für sichere Anwendungen eignet. Es gibt<br />
wesentlich bessere, kryptographisch sichere<br />
Zufallszahlengeneratoren.<br />
Ebenfalls 2008 erwischte es die Open-<br />
SSL-Implementierung von Debian mit<br />
einer auf Zufallszahlen zurückzuführende<br />
Sicherheitslücke [8]. Durch ein<br />
Patch reduzierte sich der Startwert des<br />
Zufallszahlengenerators auf die Prozess-<br />
ID. Die maximal 16 Bit große Nummer<br />
vergab Debian aufsteigend. Ab dann war<br />
es leicht, zum Beispiel alle möglichen<br />
SSH-Keys einer Maschine vorauszuberechnen.<br />
Die dafür notwendigen Tools<br />
demonstriert [9].<br />
Strategien für die Praxis<br />
Sind trivialen Fälle wie beim Miniatur<br />
Wunderland abgehakt, wird klar: Das<br />
Hauptproblem fast aller digitaler Zufallszahlengeneratoren<br />
ist ihre Pseudo-<br />
Der Autor<br />
Prof. Dr. Tobias Eggendorfer lehrt in Hamburg IT-<br />
Forensik und ist freiberuflicher IT-Berater [http://<br />
www. eggendorfer. info]. Wenn die Arbeit und die<br />
Länge der Warteschlange es zulassen, besucht<br />
er auch gerne spontan das Miniatur Wunderland.<br />
Dort bewundert er, wie Computer-gesteuert am<br />
Knuffinger Airport Großeinsätze der Feuerwehr<br />
realitätsnah stattfinden. Als häufiger Miniatur-<br />
Wunderland-Besucher hofft Eggendorfer, dass die<br />
<strong>Web</strong>site die im Artikel beschriebenen Schwachstellen<br />
nicht so bald ausrangiert, als Sicherheitsspezialist<br />
allerdings schon.
zufälligkeit. Die Berechnung von Pseudozufallszahlen<br />
zu verstehen setzt eine<br />
Portion Neugier und mathematisches<br />
Interesse voraus. Man muss aber nicht<br />
Träger der Fields-Medaille sein, um zu<br />
kapieren, dass eine 148-Bit-Zufallszahl<br />
für eine Session-ID besser sein muss, als<br />
eine mit 64 Bit, die aus vorhersagbaren<br />
Werten kombiniert ist.<br />
Beim verwendeten Seed lohnt es sich<br />
zu überlegen, woher die Zufallsdaten<br />
stammen. Folgt der Zufall einem Muster,<br />
dann wiegt der Generator seine Anwender<br />
in falscher Sicherheit. (Ein Beispiel<br />
aus einem Gebiet beleuchtet der Kasten<br />
„Kreditkartennummer erraten“.) Viele<br />
Kryptoalgorithmen erzeugen aber ihre<br />
Schlüssel mit Zufallszahlen. Sind die (in<br />
Teilen) vorhersagbar, lässt sich die Verschlüsselung<br />
leicht(er) knacken.<br />
Für die Praxis heißt das: Wer seinen Zufallszahlengenerator<br />
sicher seeden will,<br />
der sollte auch echt zufällige Daten verwenden.<br />
Bevor man jedoch selbst versucht<br />
das Rad neu zu erfinden, lohnt<br />
sich das Beschäftigen mit »/dev/random«.<br />
Der erzeugt seine Zufallszahlen<br />
aus dem „Rauschen“ des Systems und<br />
ist so nicht vorhersagbar. Außerdem gibt<br />
es nur so lange Daten, wie auch ausreichend<br />
Umgebungsrauschen vorhanden<br />
ist. Initialisiert man mit einem solchen<br />
Zufallswert einen kryptographisch sicheren<br />
Zufallszahlengenerator, ist es mit der<br />
Vorhersagbarkeit vorbei.<br />
Außerdem lohnt es sich, auf bessere Zufallszahlenalgorithmen<br />
als LCG zurückzugreifen.<br />
Neben »lcg_rand()« bietet PHP<br />
die Funktionen »mt_rand()«, im Wesentlichen<br />
eine schnellere LCG-Implementation,<br />
und »rand()«, die sich auf den<br />
Zufallszahlengenerator des verwendeten<br />
C-Compilers stützt. (jk)<br />
n<br />
Infos<br />
[1] Miniatur Wunderland:<br />
[http:// www. miniatur‐wunderland. de]<br />
[2] Seite von Samy Kamkar:<br />
[http:// www. samy. pl]<br />
[3] Samy Kamkar, „Phpwn: Attacking sessions<br />
and pseudo-random numbers in PHP“:<br />
Blackhat US 2010<br />
[4] Firebug: [http:// www. getfirebug. com]<br />
[5] Phpwn, „Attack on PHP sessions and random<br />
numbers“: [Http:// samy. pl/ phpwn/]<br />
[6] GCC-Patch „Use urandom to get random<br />
seed“: [http:// gcc. gnu. org/ ml/<br />
gcc‐patches/ 2011‐09/ msg01769. html]<br />
[7] Amit Klein, Open BSD DNS Cache Poisoning:<br />
[http:// www. trusteer. com/ sites/<br />
default/ files/ OpenBSD_DNS_Cache_Poisoning_and_Multiple_OS_Predictable_IP_ID_<br />
Vulnerability. pdf]<br />
[8] Debian-Sicherheitsankündigung für Open<br />
SSL: [http:// www. debian. org/ security/<br />
2008/ dsa‐1571]<br />
[9] Debian-Open-SSL-Lücke: [http://<br />
digitaloffense. net/ tools/ debian‐openssl/]<br />
[10] Bank-Identifikationsnummern:<br />
[http:// en. wikipedia. org/ wiki/ List_of_<br />
Bank_Identification_Numbers]<br />
<strong>Web</strong>sicherheit 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
53<br />
ADMIN<br />
Netzwerk & Security<br />
Online-Archiv<br />
Rund 2.000 Seiten Artikel,<br />
Studien und Workshops aus<br />
fünf Jahren Technical Review<br />
+<br />
nur<br />
4,-e*<br />
im Monat<br />
Onlinezugriff auf alle<br />
Heftartikel aus dem<br />
ADMIN-<strong>Magazin</strong><br />
der Jahrgänge<br />
2009 bis 2011!<br />
Volltextsuche<br />
Praxisrelevante Themen<br />
für alle IT-Administratoren<br />
* Angebot gültig nur<br />
für Abonnenten eines<br />
Print- oder vollen<br />
digitalen ADMIN Abos<br />
Bestellen Sie unter: www.admin-magazin.de/archiv
Titelthema<br />
www.linux-magazin.de Magento-Hosting 01/2012<br />
54<br />
Magento-Shop mit Nginx und PHP-FPM<br />
Schneller shoppen<br />
Das freie Shopsystem Magento bietet viele Features und lässt sich mit eigenem PHP-Code erweitern. Wer zudem<br />
Wert auf bestmögliche Performance legt, betreibt die Open-Source-Software mit dem kleinen <strong>Web</strong>server<br />
Nginx und dem schnellen Prozessmanager PHP-FPM. Jan Brinkmann<br />
© Dmitriy Shironosov, 123RF.com<br />
Der Open-Source-<strong>Web</strong>shop Magento [1]<br />
ist aus gutem Grund beliebt: Die freie E-<br />
Commerce-Software besitzt einen großen<br />
Fundus an Plugins und lässt sich elegant<br />
durch selbst geschriebene PHP-Klassen<br />
anpassen und erweitern. Wer sie aber mit<br />
dem weitverbreiteten Apache-<strong>Web</strong>server<br />
betreibt, holt aus seinem Shopsystem<br />
nicht die optimale Performance heraus.<br />
Dieser <strong>Web</strong>server deckt mit seinen zahlreichen<br />
Modulen zwar verschiedenste<br />
Anforderungen an eine <strong>Web</strong>hosting-<br />
Umgebung ab, entstand aber zu Beginn<br />
der 90er Jahre mit wenig Augenmerk auf<br />
seine Performance.<br />
Der Bedarf an performanten und skalierbaren<br />
Hostinglösungen ist mit zunehmender<br />
Popularität des WWW immer<br />
weiter gestiegen, was zur Entwicklung<br />
schlanker <strong>Web</strong>server wie Lighttpd und<br />
Nginx [2] führte. Diese bieten ganz bewusst<br />
nicht den großen Funktionsumfang<br />
von Apache. Dafür sind die unterstützten<br />
Features aber im Hinblick auf<br />
Performance und optimale Ausnutzung<br />
vorhandener Ressourcen implementiert.<br />
Nginx-Freunde etwa sagen gerne, ihr<br />
Lieblingsserver mache nur einen Bruchteil<br />
dessen, was Apache kann – dafür<br />
aber um ein Vielfaches schneller.<br />
Klein und flink<br />
Seine Stärken kann Nginx besonders<br />
beim Verarbeiten vieler parallel eingehender<br />
HTTP-Requests ausspielen. Das zeigt<br />
unter anderem ein Benchmark, den der<br />
Hoster <strong>Web</strong>faction ausgeführt hat [3]. Er<br />
kontrastiert die Performance von Nginx<br />
mit einer Apache-Installation mit dem<br />
Multi-Processing-Modul (MPM) Worker,<br />
das am ehesten vergleichbar ist.<br />
Während Nginx es auch noch bei knapp<br />
4000 gleichzeitigen Verbindungen schafft,<br />
eine kleine statische Datei etwa 10 000-<br />
mal pro Sekunde auszuliefern, sinkt die<br />
Apache-Performance bereits bei ungefähr<br />
500 gleichzeitigen Verbindungen deutlich.<br />
Der betagte <strong>Web</strong>server schafft hier<br />
nur noch 6000 Anfragen, mit zunehmender<br />
Anzahl der parallelen HTTP-Requests<br />
sinkt der Wert auf etwa 2500 Antworten<br />
in der Sekunde. Zweifelsohne noch immer<br />
ein beeindruckender Wert, aber doch<br />
nur ein Viertel der von Nginx gezeigten<br />
Leistung.<br />
Daneben macht der konstante Speicherbedarf<br />
Nginx als Server auch für kleine<br />
Shops mit begrenzten Ressourcen interessant.<br />
Er arbeitet – wie Node.js auch<br />
– Event-basiert und startet für neue<br />
Requests keine neuen Prozesse oder<br />
Threa ds. Im zitierten Benchmark bleibt<br />
sein Speicherbedarf bei etwa 2,5 MByte,<br />
während Apache nahezu linear mit der<br />
Anzahl gleichzeitiger Verbindungen immer<br />
speicherhungriger wird und schließlich<br />
mit 40 MByte ungefähr das 16-fache<br />
belegt. Ein Test gegen Ende dieses Artikels<br />
wird zeigen, dass sich Nginx auch<br />
als Server für Magento bestens schlägt.<br />
PHP-FPM<br />
Die zweite wichtige Komponente für<br />
Ressourcen-schonendes Magento-Hosting<br />
heißt PHP-FPM [4]. Diese Abkürzung<br />
bezeichnet einen „Fast CGI Process Manager“<br />
für PHP. Es handelt sich um eine<br />
PHP-spezifische Umsetzung des Fast-<br />
CGI-Prinzips [5]. Um die Latenz bis zur<br />
Beantwortung einer eingehenden HTTP-<br />
Anfrage zu verkürzen, hält der Prozessmanager<br />
persistente PHP-Interpreter-<br />
Prozesse bereit.<br />
Geht eine Anfrage bei Nginx ein, die ein<br />
PHP-Skript bearbeiten muss, reicht PHP-<br />
FPM sie an einen dieser bereits laufenden<br />
Interpreter weiter. Da die Laufzeitum-
Browser<br />
HTTP:80<br />
Nginx<br />
gebung bereits initialisiert ist, muss die<br />
Anfrage nur noch die PHP-Anwendung<br />
durchlaufen. Nginx erhält das Ergebnis<br />
und sendet es an den Browser (siehe<br />
Abbildung 1).<br />
Da nicht immer wieder ein neuer PHP-<br />
Interpreter startet, verringert dieses Verfahren<br />
die Latenz gegenüber dem herkömmlichen<br />
CGI-Ansatz deutlich. Ein<br />
zusätzlicher Pluspunkt von PHP-FPM:<br />
Die Trennung von <strong>Web</strong>server und PHP-<br />
Interpreter macht die Hostingumgebung<br />
TCP:9000<br />
Abbildung 1: Das Zusammenspiel von Nginx, PHP-FPM und PHP-Prozessen.<br />
PHP-FPM<br />
leichter skalierbar: Bei Bedarf lassen sich<br />
PHP-FPM und Nginx einfach auf separaten<br />
Systemen betreiben.<br />
Grundinstallation<br />
»magento«<br />
PHP<br />
PHP<br />
PHP<br />
PHP<br />
PHP<br />
PHP<br />
Resource Pools<br />
Die Installation von PHP-FPM hat sich<br />
bedeutend vereinfacht, seit der Prozessmanager<br />
in die PHP-Version 5.3.3 eingegangen<br />
ist. Das Einspielen als separates<br />
Patch gehört damit der Vergangenheit<br />
an. Da die meisten Distributionen bereits<br />
entsprechende Binärpakete bereithalten,<br />
entfällt auch das Kompilieren von PHP.<br />
Unter Debian oder Ubuntu installiert das<br />
folgende Kommando die benötigten Komponenten:<br />
sudo apt‐get install php5‐fpm nginxU<br />
mysql‐server php5‐mysql php5‐gd php5‐curl<br />
Debian und Ubuntu richten dabei bereits<br />
passende Initskripte ein und starten die<br />
Dienste. Wer sie von Hand neu hochfahren<br />
muss, verwendet folgende Befehle:<br />
sudo /etc/init.d/nginx restart<br />
sudo /etc/init.d/php5‐fpm restart<br />
sudo /etc/init.d/mysql restart<br />
Empfehlenswert sind zudem das PHP-<br />
Hardening-Patch Suhosin [6] und der<br />
Cache APC [7].<br />
Ob Nginx korrekt gestartet ist, lässt sich<br />
mit einem Aufruf der Serveradresse im<br />
<strong>Web</strong>browser testen. Erscheint dort die<br />
Seite „Welcome to Nginx“, war die Installation<br />
erfolgreich.<br />
Magento-Hosting 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
55<br />
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
Titelthema<br />
www.linux-magazin.de Magento-Hosting 01/2012<br />
56<br />
01 user www‐data;<br />
02 worker_processes 2;<br />
Die Basiskonfiguration unter Debian und<br />
Ubuntu ist für den produktiven Magento-<br />
Betrieb nicht optimal. Daher empfiehlt<br />
es sich, die Konfiguration in der Datei<br />
»/etc/nginx/nginx.conf« an die eigenen<br />
Rahmenbedingungen anzupassen.<br />
Nginx-Optimierung<br />
Listing 1 zeigt einen Auszug aus der Konfigurationsdatei.<br />
Von besonderem Interesse<br />
ist die Option »worker_processes«.<br />
Ein guter Richtwert für diese Prozesse<br />
liegt zwischen 1 und der Anzahl der CPU-<br />
Kerne des jeweiligen Systems. Wenn auf<br />
dem System noch weitere Anwendungen<br />
neben Nginx laufen, etwa PHP-FPM und<br />
MySQL, sollte es weniger Worker-Prozesse<br />
geben, als CPU-Kerne im System<br />
vorhanden sind.<br />
Die Direktive »worker_connections« legt<br />
fest, wie viele parallele Verbindungen ein<br />
Worker-Prozess annehmen darf. Im Beispiel<br />
oben sind dies 48, was bei zwei<br />
Worker-Prozessen insgesamt 96 gleichzeitige<br />
Verbindungen ermöglicht. Das<br />
sind relativ wenige im Vergleich zu der<br />
03 pid /var/run/nginx.pid;<br />
04 <br />
05 events {<br />
06 worker_connections 48;<br />
07 }<br />
01 [magento]<br />
Listing 1: Auszug aus »nginx.conf«<br />
02 ; IP und Port für den Ressource Pool<br />
03 listen = 127.0.0.1:9000<br />
04 <br />
05 ; Systembenutzer und Gruppe<br />
06 user = www‐data<br />
07 group = www‐data<br />
08 <br />
09 ; dynamische Prozessanzahl<br />
10 pm = dynamic<br />
11 <br />
12 ; maximale Anzahl PHP Interpreter<br />
13 ; und maximale Anzahl gleichzeitiger Requests<br />
14 pm.max_children = 96<br />
15 <br />
16 ; initiale Anzahl der PHP Interpreter<br />
17 pm.start_servers = 16<br />
18 pm.min_spare_servers = 10<br />
19 pm.max_spare_servers = 70<br />
Listing 2: Ressource-Pool-<br />
Konfiguration<br />
Standardkonfiguration,<br />
die 1024 Verbindungen<br />
pro Worker-<br />
Prozess erlaubt.<br />
Das liegt daran, dass<br />
Nginx in der Regel<br />
nur statische Dateien<br />
ausliefert oder als<br />
Reverse Proxy und<br />
Loadbalancer eingesetzt<br />
wird. Der Engpass<br />
ist hier nämlich<br />
nicht Nginx, sondern<br />
der Speicherbedarf<br />
der PHP-Interpreter.<br />
Magento benötigt<br />
aufgrund seiner Komplexität<br />
vergleichsweise<br />
viel Speicher.<br />
Die Limitierung der<br />
Nginx-Verbindungen<br />
orientiert sich daher<br />
an den maximal verfügbaren<br />
PHP-Ressourcen.<br />
Die auf PHP bezogenen<br />
Konfigurationsdateien<br />
liegen unter Debian und Ubuntu<br />
im Verzeichnis »/etc/php5/fpm«. Relevant<br />
ist dort zunächst die Datei »php.ini«,<br />
die Einstellungen für den PHP-Interpreter<br />
enthält. Da Magento relativ hungrig nach<br />
Arbeitsspeicher ist, sollte der Admin den<br />
Wert für das »memory_limit« auf »128M«<br />
erhöhen. Zusätzlich empfehlenswert ist<br />
es, die Option »expose_php« auf »off« zu<br />
setzen, damit die verwendete PHP-Version<br />
nicht öffentlich gemacht wird.<br />
Resource Pools<br />
Danach gilt es, die PHP-FPM-Konfiguration<br />
an die Hosting-Umgebung anzupassen.<br />
Die PHP-Interpreter, die Nginx<br />
zur Verfügung stehen, sind in einem<br />
Ressource Pool zusammengefasst. Die<br />
Konfiguration dieses Pools bestimmt<br />
unter anderem, wie viele Prozesse starten<br />
und auf welchem Port PHP-FPM auf<br />
Verbindungen wartet. Je nachdem, über<br />
welchen Port Nginx mit PHP-FPM kommuniziert,<br />
lassen sich auf diese Weise<br />
unterschiedliche Pools ansprechen. Das<br />
spielt für diesen Artikel aber keine Rolle,<br />
da nur ein Pool für den Magento-Shop<br />
anzulegen ist. Wer mehrere <strong>Web</strong>sites auf<br />
demselben System betreibt, kann diesen<br />
Abbildung 2: Systeminformation: Die »phpinfo()«-Ausgabe in einer Umgebung<br />
mit Nginx und PHP-FPM.<br />
aber jeweils einen eigenen Ressource<br />
Pool zuweisen.<br />
Debian und Ubuntu speichern die Konfigurationen<br />
für Resource Pools im Verzeichnis<br />
»/etc/php5/fpm/pool.d/«. PHP-<br />
FPM liest bei einem Neustart alle Dateien<br />
darin, die auf ».conf« enden, und stellt<br />
die entsprechenden Ressourcen bereit.<br />
Listing 2 zeigt die Konfiguration für den<br />
Pool »magento«.<br />
Dem Beispielserver für diesen Artikel<br />
stehen 16 GByte Arbeitsspeicher zur Verfügung.<br />
Die Angabe »pm.max_children«<br />
definiert, wie viele PHP-Interpreter maximal<br />
laufen dürfen (Zeile 14). Ähnlich<br />
wie bei einem Apache-<strong>Web</strong>server, der<br />
mit Prefork-MPM arbeitet, ist dies auch<br />
die maximal mögliche Anzahl gleichzeitiger<br />
Verbindungen. Das auf 128 MByte<br />
gesetzte »memory_limit« sorgt dafür, dass<br />
PHP-Prozesse maximal 96 * 128 MByte<br />
Arbeitsspeicher belegen, in Summe also<br />
rund 12 GByte. Somit bleiben 4 GByte für<br />
andere Prozesse auf dem System übrig.<br />
Nginx-Host definieren<br />
Die Konfigurationsdateien für Nginx-Sites<br />
liegen bei Debian und Ubuntu im Verzeichnis<br />
»/etc/nginx/sites‐available/«.
Dort befindet sich nach der Installation<br />
bereits die Datei »default«, sie dient als<br />
Grundlage für die Konfiguration des Magento-Shops.<br />
Nach einigen Anpassungen<br />
sieht sie aus wie in Listing 3, das die Einträge<br />
in den Kommentarzeilen erläutert.<br />
Dateien schützen<br />
Von besonderer Relevanz ist der Abschnitt<br />
für den Zugriffsschutz (Zeilen 22<br />
bis 24). Nginx kennt im Unterschied zu<br />
Apache keine ».htaccess«-Dateien. Die<br />
vergleichbare Funktionalität steckt in der<br />
Konfigurationsdatei der Site. Auch dies<br />
ist das Ergebnis einer bewussten Designentscheidung<br />
der Nginx-Entwickler: Die<br />
Flexibilität einer Konfiguration on the<br />
Fly mittels ».htaccess«-Dateien geht zu<br />
Lasten der Performance, denn bei jeder<br />
HTTP-Anfrage prüft der Server die Existenz<br />
dieser Dateien und wertet sie gegebenenfalls<br />
aus, bevor er die Anfrage<br />
bearbeitet.<br />
Die Konfiguration in Listing 3 stellt jedoch<br />
sicher, dass spezielle Verzeichnisse<br />
und Dateien, die Magento ansonsten<br />
per ».htaccess«-Regeln vor dem Zugriff<br />
schützt, nicht über das <strong>Web</strong> erreichbar<br />
sind. Das sind zum Beispiel Konfigurationsdateien,<br />
in denen das Passwort und<br />
der Benutzername für die Datenbankverbindung<br />
hinterlegt sind.<br />
Nach einem Neustart der beteiligten<br />
Dienste ist die neue Konfiguration aktiv.<br />
Um die PHP-Abarbeitung zu testen, kann<br />
der Admin eine PHP-Datei im Verzeichnis<br />
»/var/www/html« ablegen und sie mit<br />
dem Inhalt<br />
<br />
füllen. Ruft er anschließend die Serveradresse<br />
inklusive des Dateipfads im<br />
Browser auf – etwa mit »http://localhost/<br />
info.php« –, ist bei erfolgreicher Einrichtung<br />
eine Infoseite mit allerhand Interessantem<br />
über die Serverumgebung zu<br />
sehen (Abbildung 2).<br />
Als abschließender Schritt fehlt jetzt noch<br />
die Magento-Installation selbst, die unter<br />
anderem im Magento-Wiki beschrieben<br />
ist. Hier muss der Anwender nichts gesondert<br />
beachten, da mit Nginx und<br />
PHP-FPM eine vollständige Hostingumgebung<br />
für die Ansprüche der Software<br />
bereitsteht. Danach ist der Shop bereit für<br />
einen kleinen Benchmark, den der Kasten<br />
„Performance-Zahlen“ beschreibt.<br />
Im Vergleich zu Apache mit »mod_php«<br />
schneidet die Nginx-Konfiguration aus<br />
diesem Artikel blendend ab: Sie bedient<br />
rund eineinhalbmal so viele Anfragen pro<br />
Sekunde wie die Konkurrenz.<br />
Ausblick<br />
Eine sinnvolle Erweiterung der hier beschriebenen<br />
Konfiguration für den produktiven<br />
Betrieb ist SSL-Verschlüsselung,<br />
um die Daten der Kunden zu schützen.<br />
Das lässt sich aber ohne Schwierigkeiten<br />
mit Hilfe der offiziellen Dokumenta-<br />
Magento-Hosting 01/2012<br />
Titelthema<br />
www.linux-magazin.de<br />
57<br />
Alles zum ThemA Android<br />
Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />
DigisuB: nur 34,90 € im Jahr (12 PDFs)<br />
Neu!<br />
+ Lesen Sie News und<br />
Artikel fast 1 Woche<br />
vor dem Kiosk!<br />
Jetzt bestellen unter:<br />
www.android–user.de/digisub<br />
Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de
Titelthema<br />
www.linux-magazin.de Magento-Hosting 01/2012<br />
58<br />
beantwortete Anfragen/s<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
4,88<br />
3,39<br />
Nginx/PHP-FPM<br />
4,76<br />
150<br />
200<br />
gleichzeitige Anfragen<br />
tion einrichten. Für stärker frequentierte<br />
Magento-Installationen ist zudem das<br />
Nginx-Modul »upstream« interessant. Da-<br />
2,96<br />
Apache/Mod_PHP<br />
Abbildung 3: Die Konfiguration mit Nginx beantwortet rund eineinhalbmal<br />
so viele Anfragen pro Sekunde wie Apache.<br />
Der Autor<br />
Jan Brinkmann arbeitet seit über zehn Jahren mit<br />
Open-Source-Software und bloggt darüber unter<br />
[http:// the‐luckyduck. de]. Er ist bei der Code-x<br />
GmbH aus Paderborn im Bereich Magento angestellt<br />
und arbeitet daneben als freiberuflicher<br />
<strong>Web</strong>entwickler.<br />
mit lassen sich Nginx und PHP<br />
getrennt und auf unterschiedlichen<br />
Systemen betreiben, was<br />
die Skalierung von <strong>Web</strong>projekten<br />
sehr vereinfacht.<br />
Der Autor dieses Beitrags hat in<br />
mehreren Magento-Projekten,<br />
bei denen er auch die Einrichtung<br />
der Hostingumgebung betreut<br />
hat, durchweg positive Erfahrungen<br />
mit Nginx gemacht.<br />
Speziell bei kleineren Shops,<br />
denen nur begrenzte Ressourcen<br />
zur Verfügung standen,<br />
erzielte er dank des geringeren<br />
Speicherbedarfs sehr gute Ergebnisse.<br />
Wer derzeit noch einen Apache-<strong>Web</strong>server<br />
mit »mod_php«<br />
betreibt, kann bei Interesse<br />
Nginx und PHP-FPM parallel konfigurieren<br />
und nach erfolgreicher Einrichtung<br />
im produktiven Betrieb ausprobieren. Bei<br />
Bedarf lässt sich dann jederzeit wieder<br />
die bewährte Apache-Variante in Betrieb<br />
nehmen. (mhu)<br />
n<br />
Infos<br />
[1] Magento Commerce:<br />
[http:// www. magentocommerce. com]<br />
[2] Nginx: [http:// www. nginx. org]<br />
[3] „10.000 Requests per Second with<br />
Nginx“: [http:// blog. webfaction. com/<br />
a‐little‐holiday‐present]<br />
[4] PHP-FPM: [http:// php‐fpm. org]<br />
[5] Fast-CGI-Ansatz:<br />
[http:// de. wikipedia. org/ wiki/ FastCGI]<br />
[6] PHP-Hardening mit Suhosin: [http:// www.<br />
hardened‐php. net/ suhosin/]<br />
[7] PHP-Accelerator APC:<br />
[http:// pecl. php. net/ package/ APC]<br />
[8] Apache-HTTP-Server-Benchmarking-<br />
Tool: [http:// httpd. apache. org/ docs/ 2. 2/<br />
programs/ ab. html]<br />
Performance-Zahlen<br />
Ein einfacher Performance-Test vergleicht<br />
eine Magento-Installation mit Nginx und PHP-<br />
FPM mit der Kombination aus Apache und<br />
»mod_php«. Als Testsystem dient ein Rechner<br />
mit dem Quadcore-Prozessor Phenom II<br />
von AMD mit 3,2 GHz sowie mit 8 GByte RAM.<br />
Als Betriebssystem kommt Ubuntu 11.10 zum<br />
Einsatz.<br />
Das Apache-Benchmark-Tool »ab« [8] ruft<br />
die Startseite des Magento-Shops auf. Das<br />
geschieht einmal mit 150 gleichzeitigen Anfragen,<br />
einmal mit 200. Abbildung 3 zeigt,<br />
dass die Nginx-Konfiguration mit durchschnittlich<br />
4,88 Anfragen pro Sekunde rund<br />
eineinhalbmal so viele beantwortet wie<br />
Apache (3,39). Bei 200 parallelen Requests<br />
fällt der Unterschied mit 4,76 gegenüber 2,96<br />
Anfragen sogar noch deutlicher aus.<br />
Listing 3: Host-Konfiguration für Nginx<br />
01 server {<br />
02 listen 80;<br />
03 server_name localhost;<br />
04 root /var/www/html/;<br />
05 autoindex off;<br />
06 <br />
07 # Gzip‐Komprimierung<br />
08 gzip on;<br />
09 gzip_min_length 1100;<br />
10 gzip_buffers 4 8k;<br />
11 gzip_proxied any;<br />
12 gzip_types text/plain text/css application/x‐javascript<br />
text/javascript application/json;<br />
13 <br />
14 location / {<br />
15 index index.php;<br />
16 try_files $uri $uri/ @handler;<br />
17 expires 30d;<br />
18 }<br />
19 <br />
20 <br />
21 # .htaccess‐Schutz ersetzen<br />
22 location ~ (/(app/|includes/|lib/|/pkginfo/|var/|<br />
report/config.xml)|/\.svn/|/.hta.+) {<br />
23 deny all;<br />
24 }<br />
25 <br />
26 # statische Dateien direkt ausliefern<br />
27 location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {<br />
28 access_log off;<br />
29 expires 30d;<br />
30 root /var/www/html/;<br />
31 }<br />
32 <br />
33 # / an den Magento‐Frontcontroller weiterleiten<br />
34 location @handler {<br />
35 rewrite / /index.php;<br />
36 }<br />
37 <br />
38 # PHP an PHP‐FPM weiterreichen<br />
39 location ~ \.php$ {<br />
40 if (!‐e $request_filename) { rewrite / /index.php last; }<br />
41 <br />
42 expires off;<br />
43 fastcgi_pass 127.0.0.1:9000;<br />
44 fastcgi_param SCRIPT_FILENAME<br />
$document_root$fastcgi_script_name;<br />
45 include /etc/nginx/fastcgi_params;<br />
46 }<br />
47 }
In eigener Sache: DELUG-DVD<br />
Suse 12.1, Ubuntu 11.10, Ajax<br />
Einführung 01/2012 12/2010<br />
Software<br />
Auch diesen Monat bekommen die DELUG-Käufer die doppelte Datenmenge zum einfachen Preis: Auf der einen<br />
Seite der DVD findet sich die neueste Suse-Version 12.1, auf der anderen liegt Ubuntu 11.10 Server in 32 und 64<br />
Bit und als Appliance. Dazu gibt’s ein kostenloses Ajax-E-Book von O’Reilly, Videos und viel Software. Markus Feilner<br />
www.linux-magazin.de<br />
59<br />
Inhalt<br />
60 Pnorama-Fotos<br />
Wenn Bildausschnitt und Belichtungsumfang<br />
der Digitalkamera nicht reichen,<br />
helfen <strong>Linux</strong>-Tools, überlappende Bilder<br />
und Belichtungsreihen zu einem Panorama<br />
zusammenzufügen.<br />
68 Bitparade<br />
Adhocracy, Liquid Feedback, Liquidizer<br />
und – außer Konkurrenz – Votorola: Wofür<br />
taugen aktuelle Liquid-Democrazy-Tools ?<br />
74 Tooltipps<br />
Gtkdialog, Monkey, RSS Tail, Procmeter,<br />
Fdupe und Snarsshe im Kurztest.<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 />
Open Suse 12.1<br />
Von Seite B der DVD bootet das neueste<br />
Produkt aus Nürnberg: Die eigentlich fällige<br />
12.0 hat Suse elegant übersprungen,<br />
die neue Version hört auf den Namen<br />
12.1 und bringt eine lange Liste neuer<br />
Software: Zu Kernel 3.1, Btrfs, Treiber<br />
für Microsofts Kinect oder Apples I-Sight-<br />
<strong>Web</strong>cam und AMD-Llano-Fusion-APUs<br />
gesellen sich Gnome 3.2, KDE 4.7, Xfce<br />
4.8, Firefox 7, Chromium 17, Libre Office<br />
3.4.4 und jede Menge neuer Server- und<br />
Desktopprogramme.<br />
Wer die andere Seite der DVD<br />
einlegt und per Browser die<br />
Datei »index.html« öffnet, findet<br />
gleich als Erstes den Menüpunkt<br />
»Exklusiv«, der zu Denny<br />
Carls O’Reilly-E-Book „Praxiswissen<br />
Ajax“ (Abbildung 2)<br />
führt. Das passt thematisch<br />
zum <strong>Web</strong>-Schwerpunkt dieses<br />
<strong>Magazin</strong>s und unterstützt nicht<br />
nur Einsteiger in die Advanced-<br />
Javascript-And-XML-Programmierung.<br />
Ubuntu-, Google- und<br />
Node.js-Appliance<br />
Unter dem Menüpunkt »Virtual<br />
Appliance« liegen neben den ISO-Dateien<br />
der neuesten Ubuntu-Server-Variante in<br />
32 und 64 Bit, sondern auch eine handlich<br />
verpackte virtuelle Oneiric-Maschine,<br />
in der die Autoren der Artikel zu Googles<br />
Authenticator (Sysadmin-Rubrik) und<br />
Node.js (Titelthema) die im Artikel ver-<br />
Abbildung 2: Kostenlos auf der DELUG-DVD:<br />
„Praxiswissen Ajax“ aus dem Hause O’Reilly.<br />
Abbildung 1: Unter Suse 12.1 (komplett auf Seite B der DVD) hat<br />
Sax sein Comeback. Yast hat <strong>Web</strong>fähigkeiten und Backups gelernt.<br />
wendeten Beispiele eingebaut haben. Zusammen<br />
mit der Google-App (beispielsweise<br />
für Android) testen DELUG-Leser so<br />
schnell die Zwei-Faktor-Authentifizierung<br />
am <strong>Linux</strong>-System oder die Performance<br />
des Javascript-<strong>Web</strong>servers Node.js.<br />
Software und Videos<br />
Zu den Werkzeugen aus der Bitparade,<br />
den Tooltipps, dem Artikel zu Fog und<br />
Zarafas brandneuem Z-Admin 1.0 kommen<br />
auf der DVD noch knapp 500 MByte<br />
aus dem Panoramafoto-Artikel. Hier finden<br />
Interessierte Hobby-Fotografen alle<br />
Projektdateien, Skripte und die knapp<br />
400 Originale der Bilder, mit denen sie<br />
in Hugin, Blender und Luminance HDR<br />
effektvolle Panoramen und HDR-Bilder<br />
erzeugen. Wem das noch nicht reicht, der<br />
bedient sich an den Videos von der Berliner<br />
Mailserverkonferenz 2011 mit den<br />
Entwicklern Timo Sirainen (Dovecot),<br />
Wietse Venema (Postfix), Mark Martinec<br />
(Amavis) und Gastgeber Peer Heinlein<br />
(Revisionssichere Archivierung). n
Software<br />
www.linux-magazin.de Panorama-Fotos 01/2012<br />
60<br />
Professionelles Stitching und Rendering von Digitalfotos mit <strong>Linux</strong>-Tools<br />
Runde Sache<br />
Manche Orte passen nicht auf ein Bild, manche Stimmungen verlangen nach einem größeren Belichtungsumfang,<br />
als die Kamera hergibt. Eine ganze Reihe von Open-Source-Werkzeugen hilft dabei, überlappende Bilder<br />
und Belichtungsreihen zu einem kompletten Bild zusammenzufügen. Text und Fotos: Fritz Reichmann, Markus Feilner<br />
Abbildung 1: Das Bild vom Schrannenplatz in Erding zeigt: Oberbayern wirkt bisweilen wie ein anderer Planet.<br />
n Dynamic Range Information: Von einem<br />
Motiv erzeugt der Fotograf mehrere<br />
Aufnahmen mit unterschiedlichen<br />
Belichtungsstufen: unterbelichtete,<br />
richtig belichtete und überbelichtete.<br />
Auf den unterbelichteten sind die hellen<br />
Stellen korrekt, auf dem überbelichteten<br />
die dunklen, in der Mitte die<br />
mittleren. Wer so eine Belichtungsreihe<br />
miteinander verbindet, kommt<br />
dem Ideal schon sehr viel näher.<br />
Zusätzlich dazu bietet es sich an, die<br />
erstellten Panoramafotos auf dreidimensional<br />
wirkende Oberflächen zu rendern.<br />
Abbildung 1 zeigt den Schrannenplatz<br />
in Erding im Abendlicht als eine eigene<br />
kleine Welt für sich. Dafür notwendig<br />
sind nur ein wenig Begeisterung <strong>fürs</strong><br />
Fotografieren, eine Digitalkamera mit<br />
manueller Belichtung, Fokussierung und<br />
Weißabgleich – in der Regel ist das schon<br />
bei Spiegelreflexkameras mittlerer Preisklasse<br />
gegeben – und ein <strong>Linux</strong>-PC.<br />
Das menschliche Sehvermögen ist ein<br />
Wunderwerk der Natur. Zwar sind Linse<br />
wie auch der Rest des Auges mit vielen<br />
Fehlern behaftet, doch mit dem Sehzentrum<br />
und der Rechenpower des Gehirns<br />
dahinter ist der Mensch in der Lage, auch<br />
schwierigste Lichtverhältnisse auszugleichen.<br />
So entsteht fast immer ein Bild, auf<br />
dem in den hellsten Lichtquellen und<br />
den dunkelsten Schatten noch Konturen<br />
erkennbar sind. Dazu kommt die annähernd<br />
perfekte Rundumsicht, wenn der<br />
Betrachter seinen Kopf bewegt.<br />
Im Vergleich dazu tun sich auch modernste<br />
Digitalkameras schwer. Doch mit<br />
einigen freien Softwareprojekten und ein<br />
wenig Experimentierfreudigkeit brauchen<br />
auch Digitalfotografen nicht zu verzagen,<br />
nur weil der Sensor mit den Lichtverhältnissen<br />
überfordert ist oder wenn das<br />
Weitwinkelobjektiv nicht ausreicht, um<br />
das Urlaubspanorama einzufangen.<br />
Panorama und DRI<br />
Gerade bei digitalen Bildern bieten sich<br />
zwei Vorgehensweisen an, die sich auch<br />
noch vortrefflich kombinieren lassen, um<br />
im Idealfall bessere Fotos zu erzeugen,<br />
als die Kamera eigentlich hergibt.<br />
n Panorama-Stitching: Das Zusammensetzen<br />
mehrerer Bilder (nebeneinander<br />
oder übereinander) zu einem größeren<br />
Bild. Der Fotograf fertigt von seinem<br />
Standort aus eine Bilderserie der Umgebung<br />
an und fügt – von Software<br />
unterstützt – das Ergebnis in einem<br />
deutlich größeren Bild zusammen.<br />
Motiv und Licht<br />
Der im Artikel beschriebene Ablauf kann<br />
sich durchaus als zeitaufwändig erweisen<br />
und lohnt deshalb wahrscheinlich nur für<br />
besondere Motive. Gut eignen sich Orte,<br />
die in allen Blickrichtungen interessant<br />
sind. Zum Beispiel Gartenanlagen neben<br />
schönen Schlössern, öffentliche zentrale<br />
Plätze, das Innere großer Gebäude wie<br />
Bahnhöfe und Kirchen oder die freie Na-<br />
DELUG-DVD<br />
Auf der DELUG-DVD finden Sie<br />
DELUG-DVD<br />
die Original-JPGs aller im Artikel verwendeten<br />
Panoramen sowie die im Artikel verwendeten<br />
Skripte und Projektfiles zum Nachbauen der<br />
Anleitung.
LINUX<br />
Lassen Sie Ihre <strong>Linux</strong>-Projekte von einem<br />
Team erledigen, das Sie GLÜCKLICH macht.<br />
Abbildung 2: Übersichtlich zeigen Fotomanagement-Programme wie Digikam die einzelnen Bilder.<br />
tur. Sollen die Bilder später zu einem kleinen<br />
Planeten zusammengefügt werden,<br />
also in einer Projektion, die der Spiegelung<br />
auf einer über den Kopf gehaltenen<br />
Christbaumkugel ähnelt (Abbildung 1),<br />
sollte der Fotograf darauf achten, dass<br />
Bebauung oder Bewuchs in der Umgebung<br />
in jeder Richtung etwa gleich hoch<br />
sind und idealerweise vom Standort aus<br />
gesehen in einem vertikalen Winkel von<br />
30 bis 45 Grad erscheinen.<br />
Je höher der vertikale Winkel eines Objekts<br />
ist, desto größer wird es in der Projektion<br />
als Planetenbild verzerrt. Kirchturmspitzen,<br />
Laternenlampen und hohe<br />
Zweige von vielleicht sogar blühenden<br />
Bäumen setzen spannende Akzente und<br />
dürfen darum gerne in einem höherem<br />
Winkel stehen. Es ist ein wenig Übung<br />
erforderlich, um zu erkennen, was genau<br />
wie wirken wird. Hilfreich als mobile<br />
<strong>Vorschau</strong> ist stets der Blick auf eine spiegelnde<br />
Christbaumkugel.<br />
Belichtung und Zeitpunkt<br />
Beim Aufnehmen eines Bildes lässt es sich<br />
bei Panorama-Aufnahmen nicht vermeiden,<br />
dass einige Bilder direkt in die Lichtquellen<br />
zielen. Wegen der resultierenden<br />
starken Kontraste ergibt eine Rundumaufnahme<br />
nur als Belichtungsreihe wirklich<br />
Sinn. Abbildung 2 zeigt die für den Mini-<br />
Planeten aus Erding verwendeten Bilder<br />
in der Digikam-<strong>Vorschau</strong> [1].<br />
Die Aufnahme von teilweise einigen<br />
Hundert Bildern wird aber einige Zeit<br />
in Anspruch nehmen, deshalb sollte der<br />
Ort möglichst statisch sein. Andernfalls<br />
würden in der Zwischenzeit große Wolken,<br />
Schiffe, Lastwagen und dergleichen<br />
vorbeiziehen und das Zusammenfügen<br />
der Bilder scheitern. Die sich ändernde<br />
Helligkeit des Himmels gleicht die Software<br />
Hugin [2] erstaunlich gut aus, sie<br />
lässt sich aber notfalls auch noch später<br />
in Gimp [3] korrigieren.<br />
Den besten Aufnahmezeitpunkt bei einer<br />
Mischbeleuchtung aus natürlichem<br />
und künstlichem Licht, zum Beispiel bei<br />
Gebäuden in einer Stadt, gibt die so genannte<br />
blaue Stunde, wenn die künstlichen<br />
und natürlichen Lichter etwa gleich<br />
hell sind. Das ist meistens etwa 30 bis 45<br />
Minuten vor und nach Sonnenauf- und<br />
-untergang der Fall. Findet die Aufnahme<br />
zu einer normalen Tageszeit statt, hilft es,<br />
die Sonne hinter einem Busch oder Haus<br />
zu verstecken, sodass zwar klar ist, wo<br />
sie sich befindet, sie aber das Bild nicht<br />
unnötig stört.<br />
Standort<br />
Den richtigen Standort zu finden kann<br />
durchaus einige Zeit und vergebliche Versuche<br />
in Anspruch nehmen. Vor allem<br />
der Untergrund macht dem Fotografen<br />
zu schaffen: Direkt unter der Kamera befindet<br />
sich schließlich das Stativ. Um es<br />
FACHLICH GUT.<br />
... unterstützt uns seit einigen<br />
Jahren fachkundig und rund um die<br />
Uhr bei Betrieb und Troubleshooting<br />
unserer für den Flugbetrieb wichtigen<br />
<strong>Linux</strong>-Cluster.<br />
Markus Haake, Head of IT-Infrastructure<br />
EFFIZIENT.<br />
...lange Diskussionen und Planungen<br />
waren unnötig. Die Heinleins haben<br />
mit ihrer Erfahrung ein überzeugendes<br />
Konzept fertig auf den Tisch gelegt.<br />
Marcus Lindner, Head of Corporate Network/Office-IT<br />
FERTIG.<br />
... innerhalb der recht sportlichen<br />
Vorgabe von zwei Wochen wurden<br />
alle Punkte umgesetzt.<br />
Holger Bürger, Director Site Operations<br />
http://www.heinlein-support.de
Software<br />
www.linux-magazin.de Panorama-Fotos 01/2012<br />
62<br />
Abbildung 3: Ein selbst gebauter Panoramakopf [5]<br />
vermindert die Parallaxe.<br />
später leichter wegretuschieren zu können,<br />
sollte der Boden direkt unter der<br />
Kamera leicht kopierbar sein. Ideal sind<br />
kleine zufällige Strukturen wie zum Beispiel<br />
Gras oder feiner Kies. Tendenziell<br />
schlecht sind Kacheln oder Mosaikbilder,<br />
weil sich die entstehenden gebogenen<br />
Abbildungen davon nur mit viel Zeitaufwand<br />
nachzeichnen lassen.<br />
Unabdingbar ist eine Kamera, die über<br />
ein manuelles Programm verfügt, das es<br />
gestattet, Blende, Belichtungsdauer, Fo-<br />
kussierung und Weißabgleich fest einzustellen.<br />
Außerdem bedarf es eines Stativs,<br />
eines kabelgebundenen Auslösers, frisch<br />
geladener leistungsfähiger Batterien –<br />
und viel Platz auf der Speicherkarte ist<br />
erforderlich. Das Objektiv sollte so viel<br />
Weitwinkel aufweisen, dass es im Hochformat<br />
den Bereich der Wipfel bis hin<br />
zum Zenit auf einem Bild erfasst. Hilfreich<br />
sind eine Kamera, die die Bilder im<br />
Rohformat (Raw) speichert, damit sich<br />
Belichtung und Weißabgleich auch noch<br />
nachträglich korrigieren lassen, ein gegebenenfalls<br />
selbst gebauter Panoramakopf<br />
(Abbildung 3) und eine Graukarte für<br />
den korrekten Weißabgleich.<br />
USB-Steuerung<br />
Luxuriöse Profikameras glänzen mit besonders<br />
weiten Belichtungsreihen oder<br />
lassen sich über USB vom Laptop aus<br />
steuern. Dann löst Gphoto2 [4] die Belichtung<br />
berührungsfrei aus, der Anwender<br />
steuert Blende und Verschlusszeit an<br />
der Kommandozeile (Tabelle 1). Unbedingt<br />
zu vermeiden sind Polarisationsfilter<br />
und Blitzgeräte, weil sie Lichtverhältnisse<br />
negativ verändern. Für den Anfang<br />
mag es auch ausreichen, ohne Stativ aus<br />
der Hand zu fotografieren (Abbildungen<br />
4 und 5). Doch führt die dabei entstehende<br />
Parallaxe zu Bildfehlern, die nur<br />
mit viel Zeitaufwand oder auch gar nicht<br />
korrigierbar sind (Abbildung 6). Mit professionellen<br />
Ansprüchen sind Aufnahmen<br />
„aus der Hand“ daher nicht vereinbar.<br />
Outdoor-Ausrüstung<br />
Für diesen Artikel verwendeten die Autoren<br />
ein solides Manfrotto-Stativ, eine<br />
Canon EOS 400 D und eine EOS 30 D,<br />
das 18-55-Millimeter-Standard- und ein<br />
15-80-Millimeter-EFS-Objektiv, einen BG-<br />
E3-Batteriegriff, einen RC-1-Kabelauslöser,<br />
einen selbst gebastelten Panoramakopf<br />
[5], ein über USB-Kabel angeschlossenes<br />
Netbook mit Gphoto2, zahllose<br />
aufgeladene Batterien, ein Ladegerät <strong>fürs</strong><br />
Auto und eine 16-GByte-Speicherkarte –<br />
eine etwas gehobene, aber noch typische<br />
Hobbyausrüstung.<br />
Die Auflösung der Kamera allein ist auch<br />
nicht unbedingt entscheidend. Beim Stitching<br />
ergibt sie sich viel mehr aus Objektivwinkel<br />
und Kamera-Auflösung. Auch<br />
mit einem Teleobjektiv lassen sich Bilder<br />
in nahezu beliebiger Auflösung erzeugen,<br />
derartige Gigapixel-Fotografie ist heutzutage<br />
ein populäres Hobby. Für diesen Artikel<br />
ist die Auflösung gängiger Kameras<br />
voll ausreichend, jedes Megapixel mehr<br />
erhöht nur den Rechenaufwand.<br />
Abbildung 4: Das Weltkulturerbe Kloster Melk, ohne Stativ geschossen. Die sieben Einzelbilder kombiniert Hugin problemlos, aber mit perspektivischer Verzerrung.
Tabelle 1: Kamerasteuerung mit Gphoto2<br />
Funktion<br />
Möglichkeiten der Kamera auflisten<br />
Auf der Speicherkarte speichern<br />
ISO-Empfindlichkeit 100 einstellen<br />
Rohdatenformat Raw setzen<br />
Weißabgleich für Kunstlicht einstellen<br />
Manueller Belichtungsmodus<br />
Blende 8 auswählen<br />
For-Schleife für Belichtungsreihe<br />
Befehl<br />
Fotos herunterladen gphoto2 ‐P<br />
Fotoverzeichnisse ansehen gphoto2 ‐L<br />
Fotos löschen<br />
gphoto2 --list-config<br />
gphoto2 --set-config /main/settings/capturetarget=1<br />
gphoto2 --set-config-index /main/imgsettings/iso=0<br />
gphoto2 --set-config-index /main/imgsettings/imageformat=6<br />
gphoto2 --set-config-index /main/imgsettings/whitebalance=3<br />
gphoto2 --set-config-index /main/capturesettings/autoexposuremode=3<br />
gphoto2 --set-config-index /main/capturesettings/aperture=9<br />
for i in $(seq 2 6 50); do gphoto2 --set-config-index /main/capturesettings/shutterspeed=$i; gphoto2<br />
--capture-image; done<br />
gphoto2 ‐D ‐f /store_00000001/DCIM/105CANON<br />
Diese Befehle funktionierten im Test mit einer Canon EOS 400 D. Die EOS 30 D konnte keine Blenden- und Belichtungswerte via Gphoto2 entgegennehmen.<br />
Panorama-Fotos 01/2012<br />
Software<br />
www.linux-magazin.de<br />
63<br />
Die Bilder für den Erding-Planeten sind in<br />
fünf horizontalen Reihen aufgenommen.<br />
Nachbarbilder überlappen einander horizontal<br />
und vertikal bis zur Mitte der Aufnahmen.<br />
So ist jeder Punkt mindestens<br />
viermal abgelichtet. Bei diesem Vorgehen<br />
entstehen bei einer Belichtungsreihe von<br />
drei Bildern (Blenden: ‐2, 0,+2) schnell<br />
über 200 Einzelaufnahmen. Der Aufwand<br />
lohnt sich allerdings, denn so bilden die<br />
Fotos die großen Helligkeitsunterschiede<br />
im Gegenlicht noch ab und eignen sich<br />
als HDR-Bild [6]. Das Hochformat deckt<br />
den naturgemäß strukturarmen Himmel<br />
am angenehmsten ab.<br />
In der Dämmerung steigen die Belichtungszeiten<br />
leicht auf einige Sekunden,<br />
der Kabelauslöser schützt vor dem Verwackeln.<br />
Alle Fotos aufzunehmen kann<br />
länger als eine halbe Stunde dauern. Zügiges<br />
und sauberes Arbeiten ist gefragt,<br />
auch weil sich die Lichtverhältnisse binnen<br />
30 Minuten doch stark ändern. Außerdem<br />
erweist sich die Übertragung der<br />
Fotos im Rohformat auf die Speicherkarte<br />
oft als Engpass. Dazu kommen etwaige<br />
Batteriewechsel. Je nach Kamera ist hier<br />
die richtige Vorgehensweise das Ergebnis<br />
vieler Versuche.<br />
Wer die Aufnahme als HDR-Lichtquelle<br />
in Blender einsetzen will, sollte eine Belichtungsreihe<br />
mit mehr als vier Blendenstufen<br />
erstellen, weil sich erfahrungsgemäß<br />
nur dann harte Schlagschatten in<br />
Blender erreichen lassen. Im Extremfall<br />
sollte sich die hellste Belichtung an der<br />
Sonnenoberfläche, die dunkelste an den<br />
schwärzesten Schatten orientieren.<br />
Gphoto2 und die Kamera<br />
Für Situationen, in denen die in der Kamera<br />
verfügbare Belichtungsreihe nicht<br />
ausreicht, lässt sich die Belichtung über<br />
ein USB-Kabel mit Gphoto2 steuern. Der<br />
Aufwand lohnt besonders, wenn das Bild<br />
später als so genannte HDR-Lichtquelle<br />
für Raytracing [7] dienen soll. Programme<br />
wie Blender können den hohen<br />
Dynamikumfang einer solchen zusammengesetzten<br />
Aufnahme verarbeiten,<br />
und die korrekte Belichtung der Lichtquelle<br />
führt im Raytracing am Ende zu<br />
jener Lichtsituation, die eben genau so<br />
ist wie bei der Aufnahme.<br />
Die Kommandos aus Tabelle 1 sind auf<br />
eine Canon EOS 400 D zugeschnitten,<br />
würden mit etwas Anpassung aber auch<br />
mit anderen Kameramodellen funktionieren.<br />
Eine solche Belichtungsreihe würde<br />
sich nebenbei auch ausgezeichnet mit<br />
Luminance-HDR [8] zu einem HDR-Bild<br />
zusammensetzen lassen. Auf der ebenfalls<br />
getesteten Canon EOS 30 D stehen<br />
leider nicht alle dieser Funktionen zur<br />
Verfügung.<br />
Eine Belichtungsreihe über 18 Blendenstufen<br />
verlangt sehr viel Zeit. Mit einem<br />
Fischauge-Objektiv, das einen extremen<br />
Weitwinkel bietet, reduziert sich immerhin<br />
die Anzahl der Bilder drastisch, allerdings<br />
auch die Auflösung der zusammengesetzten<br />
Aufnahme. Als Lichtquelle für<br />
eine Raytracing-Szene reicht eine geringe<br />
Auflösung jedoch völlig.<br />
Abbildung 5: Die Donauschleife mit Weinbergen und Bahnstrecke in der Wachau in einer gut 240 Grad breiten Aufnahme (Canon EOS 30 D, kein Stativ, sechs Bilder).
Software<br />
www.linux-magazin.de Panorama-Fotos 01/2012<br />
64<br />
01 for i in $(ls raw/*.CR2);<br />
Weil das Raytracing-Verfahren annimmt,<br />
das dunkelste Bild stelle die korrekt belichtete<br />
Aufnahme der Lichtquellen dar,<br />
fließt dessen Bildrauschen am stärksten<br />
ins Raytracing ein. Deshalb sollte der Fotograf<br />
für diese Aufnahmen unbedingt<br />
eine niedrige ISO-Zahl einstellen, um das<br />
Rauschen möglichst bereits bei der Aufnahme<br />
unter Kontrolle zu bringen.<br />
Digitale Nachbearbeitung<br />
02 # Dateinamen sind nummeriert wie raw/_MG_1234.CR2<br />
03 do j=$(echo $i | cut ‐d\/ ‐f 2 | cut ‐d\. ‐f 1);<br />
04 # In $j steht jetzt _MG_1234<br />
Listing 1: Raw-Entwicklung<br />
05 nice ufraw‐batch ‐‐overwrite raw/$j.CR2<br />
-‐compression=90 ‐‐out‐type=jpeg ‐‐output jpg/$j.JPG;<br />
07 done<br />
rapee [9] oder – unter Windows – Adobes<br />
Lightroom oder Photoshop sind hier<br />
die Werkzeuge der Wahl für den ambitionierten<br />
Hobbyfotografen. Gimp greift<br />
wie andere <strong>Linux</strong>-Raw-Programme auch<br />
entweder auf die Bibliothek Dcraw oder<br />
das handlichere Ufraw [10] zurück, die<br />
beide in allen gängigen Distributionen<br />
enthalten sind.<br />
Das beste Bild der gesamten Fotoreihe,<br />
also jenes Foto, auf dem das Motiv am<br />
besten getroffen und ideal belichtet ist,<br />
liefert die richtigen Einstellungen für den<br />
Raw-Import. Die liest das Ufraw-Plugin<br />
von Gimp komfortabel ein und korrigiert<br />
soweit nötig die Belichtung und den<br />
Weißabgleich automatisch. Das satte Blau<br />
des Himmels aus Abbildung 1 macht erst<br />
der an der relativ warmen künstlichen<br />
Belichtung ausgerichtete Weißabgleich<br />
möglich. Ganz nebenbei erhalten die Motive<br />
so auch recht knackige Farben.<br />
Das Speichern dieses Bildes aus Ufraw<br />
heraus erzeugt im Heimatverzeichnis des<br />
Anwenders eine Datei ».ufrawrc«, die als<br />
Vorlage für die nun folgende Massenverarbeitung<br />
der restlichen Bilder dient.<br />
Die Rohdaten liegen dabei im Verzeichnis<br />
»raw«, auf der gleichen Ebene existiert<br />
Nach all dem Fotografieren geht es endlich<br />
an den Computer. Das „Entwickeln“<br />
digitaler Bilder umfasst die Belichtungskorrektur,<br />
den Weißabgleich und andere<br />
Feineinstellungen an den Bilddaten im<br />
Rohformat – so wie der Sensor sie empfangen<br />
hat – und den Export in gängige<br />
JPG-Dateien. Tools wie Gimp, Rawtheein<br />
Verzeichnis »jpg«. Die For-Schleife<br />
aus Listing 1 erledigt jetzt die Entwicklung<br />
vom Rohformat nach JPG.<br />
Stitching, Bewegung und<br />
Rauschen<br />
Je nach Kamera lauten die Dateinamen<br />
anders, die Cut-Kommandos muss der<br />
Anwender entsprechend anpassen. Nach<br />
dieser Schleife liegen im »jpg«-Verzeichnis<br />
die entwickelten Bilddateien, alle korrigiert<br />
um die Belichtungseinstellungen<br />
und den Weißabgleich des optimalen Fotos.<br />
Jetzt geht es ans Zusammenfügen der<br />
großen Anzahl von Bildern, was natürlich<br />
möglichst automatisch ablaufen soll.<br />
Die optimale Lösung ist eine Mischung<br />
aus Kommandozeile und Hugin-GUI (Abbildung<br />
7).<br />
Die besten Ergebnisse erreicht, wer die<br />
Bilder um jeweils etwa die Hälfte überlappen<br />
lässt. Bei wenigen Bildern (Abbildungen<br />
4 bis 6) reicht das Hugin-GUI<br />
vollkommen. Im Test erwies es sich aber<br />
oberhalb von 200 Bildern als instabil,<br />
mindestens das erste Zusammenfügen<br />
sollte dann von der Kommandozeile aus<br />
stattfinden. Im Paket »hugin« sind dafür<br />
Abbildung 6: Auch in alten Gebäuden wie der historischen Schnupftabakfabrik in Regensburg lassen sich gute Ergebnisse erzielen. Wer wie hier jedoch nur vier Bilder<br />
als Basis nimmt und ohne Stativ arbeitet, stellt Hugin bisweilen vor Probleme, zum Beispiel bei der schiefen Oberkante der Truhe rechts unten im Bild.
einige CLI-Tools enthalten. So ist zum<br />
Beispiel »Autopano‐sift‐c« in der Lage,<br />
markante Stellen in Bildern zu erkennen,<br />
die auch auf mehreren Fotos vorkommen.<br />
Passen sie zusammen, setzt das<br />
Programm dort einen Kontrollpunkt, der<br />
es ermöglicht, die Bilder wie ein Mosaik<br />
aneinanderzufügen. Dieser Schritt ist<br />
aber sehr rechenaufwändig und enthält<br />
systematische Fehlerquellen.<br />
Bei sich bewegenden Gegenständen wie<br />
Fahrzeugen oder auch bei Menschen erkennt<br />
das Programm zwar die Zugehörigkeit.<br />
Hat sich das Objekt in der Zwischenzeit<br />
jedoch bewegt, stimmt seine Position<br />
nicht mehr. Auch das Bildrauschen in<br />
kontrastarmen Bildern stellt ein Problem<br />
dar, das sich jedoch schon bei der Aufnahme<br />
durch die Wahl einer niedrigen<br />
ISO-Empfindlichkeit vermeiden lässt. Die<br />
Fotos, die trotzdem noch Fehler verursachen,<br />
löscht der Anwender am besten<br />
manuell, sie sind über ihre allzu großen<br />
Fehlerabstände leicht zu finden.<br />
Zu guter Letzt steht der Algorithmus<br />
teils vor den gleichen Aufgaben wie das<br />
menschliche Auge, vor allem bei sich<br />
streng wiederholenden Mustern. Dann<br />
landet ein Referenzpunkt leicht mal<br />
fälschlicherweise bei der Kachel nebenan.<br />
Trotzdem lohnt es sich, immer<br />
hoffnungsvoll mit der Automatik anzufangen.<br />
Auf der Kommandozeile lautet<br />
der Befehl:<br />
autopano‐sift‐c ‐‐maxmatches 15 ‐‐maxdim U<br />
2000 J1.pto _MG_*JPG<br />
Die Berechnung dauert bei 200 Bildern<br />
schon mal eine halbe Stunde und liefert<br />
eine Datei »J1.pto«, die alle Kontrollpunkte<br />
auflistet. Die Beschränkung auf<br />
nur 15 Punkte (»maxmatches 15«) ist<br />
sinnvoll, damit Autopano bei Bildern,<br />
die besonders günstige Bedingungen<br />
haben, nicht so viele Punkte hinzufügt.<br />
Das würde die anderen Bilder dominieren<br />
und das spätere manuelle Eingreifen<br />
komplizieren.<br />
Ist das Panorama als Belichtungsreihe<br />
aufgenommen, die üblicherweise aus<br />
drei jeweils gleich ausgerichteten Bildern<br />
besteht, fügt der Anwender noch weitere<br />
Punkte hinzu. Zwar ist klar, dass sich<br />
jeweils drei Bilder exakt überlappen, aber<br />
wegen der Unter- und Überbelichtung<br />
erarbeitet der Algorithmus ausgerechnet<br />
in diesem Fall ungenauere Ergebnisse.<br />
Abhilfe schafft, in die Datei »J1.pto« noch<br />
fünf gleichmäßig übers Bild verteilte<br />
Punkte einzufügen, die jeweils identische<br />
Bilder mit unterschiedlicher Belichtung<br />
sauber miteinander verbinden. Auch das<br />
geht automatisch, Listing 2 zeigt die entsprechende<br />
Schleife.<br />
Kontrollpunkte entfernen<br />
Das Kommando »celeste_standalone ‐i<br />
J1.pto ‐o J2.pto« entfernt aus der Liste<br />
der Kontrollpunkte jene, die unsinnig<br />
erscheinen, weil sie zum Beispiel auf<br />
sich bewegenden Gegenständen im Bild<br />
liegen. Dabei entsteht eine neue Datei<br />
Kennen Sie<br />
den schon?<br />
Stefan Kania schwört auf die<br />
Kombination Samba + LDAP als<br />
preiswerten, vor allem aber flexiblen<br />
Ersatz für MS ActiveDirectory.<br />
Seit 1995 nutzt er <strong>Linux</strong> und<br />
betreut mit seinem Know-how<br />
mittelständische Firmen. Als Trainer schafft<br />
er es, seit über 10 Jahren die graue Theorie<br />
mit seiner umfangreichen Praxiserfahrung zu<br />
verbinden.<br />
Seine nächsten Kurse:<br />
Samba und LDAP<br />
LDAP-Server<br />
WIR KÖNNEN NOCH MEHR...<br />
Hochperformante <strong>Web</strong>cluster<br />
DNS und DNSsec<br />
04.06.<br />
23.04.<br />
14.03.<br />
PHP- / <strong>Web</strong>serversicherheit<br />
<strong>Linux</strong> Admin Fortgeschrittene<br />
HA-Virtualisierungscluster m. KVM<br />
14.03.<br />
19.03.<br />
19.03.<br />
19.03.<br />
Abbildung 7: Kamera-Einstellungen und Belichtungsreihen kombiniert Hugin zu einem Panoramafoto.<br />
http://www.heinlein-support.de/kurse
Software<br />
www.linux-magazin.de Panorama-Fotos 01/2012<br />
66<br />
Abbildung 8: Die Belichtungsreihen aus jeweils drei Bildern fügt Luminance HDR<br />
zu einem Belichtungsstapel zusammen.<br />
Abbildung 9: Tux mit Glaskugel im Licht des Schrannenplatzes in Erding. HDR und<br />
DRI erzeugen hier die extremen Falschfarben.<br />
»J2.pto«. Unterschiedliche Dateinamen<br />
erleichtern den Schritt zurück.<br />
Jetzt stellt der Auto-Optimiser die Anordnung<br />
der Bilder her und optimiert diese<br />
mit »autooptimiser ‐a ‐p ‐l ‐s ‐o J3.pto<br />
J2.pto«. Nun wartet die Datei »J3.pto«<br />
aufs Laden in Hugins GUI. Dort klickt der<br />
Hobby-Stitcher auf die Liste der Kontrollpunkte<br />
und sortiert sie nach Abständen.<br />
Die am weitesten auseinanderdriftenden<br />
Kontrollpunkte sind normalerweise<br />
falsch, die sollte er gleich löschen. Hier<br />
sind Augenmaß und Erfahrung gefragt,<br />
erst mit der Zeit stellt sich beim Anwender<br />
ein sicheres Gefühl für die maximal<br />
akzeptable Entfernung unter verschiedenen<br />
Umständen ein.<br />
Eher unkompliziert ist der nächste<br />
Schritt: zwei Mausklicks, erst auf »Optimieren«<br />
und dann »Alles«. Je mehr gute<br />
und sinnvoll verteilte Kontrollpunkte<br />
Listing 2: Kontrollpunkte in<br />
Belichtungsreihen<br />
01 s=$(echo $(ls *JPG | wc ‐l) ‐3 | bc);<br />
02 for i in $(seq 0 3 $s); do j=$(echo "$i+1" | bc);<br />
k=$(echo "$i+2" | bc);<br />
03 echo "c n$i N$j x492.08 y584.21 X492.08 Y584.21 t0<br />
04 c n$i N$j x2181.18 y620.08 X2181.18 Y620.08 t0<br />
05 c n$i N$j x396 y3585 X396 Y3585 t0<br />
06 c n$i N$j x2333.13 y3437.67 X2333.13 Y3437.67 t0<br />
07 c n$i N$j x1196.26 y1935.27 X1196.26 Y1935.27 t0<br />
08 c n$i N$k x492.08 y584.21 X492.08 Y584.21 t0<br />
09 c n$i N$k x2181.18 y620.08 X2181.18 Y620.08 t0<br />
10 c n$i N$k x396 y3585 X396 Y3585 t0<br />
11 c n$i N$k x2333.13 y3437.67 X2333.13 Y3437.67 t0<br />
12 c n$i N$k x1196.26 y1935.27 X1196.26 Y1935.27 t0" >><br />
J1.pto;<br />
13 done<br />
Hugin vorfindet, desto besser wird jetzt<br />
das Ergebnis ausfallen. Dieser Schritt ist<br />
bei der Erstellung eines Panoramas mit<br />
Abstand der arbeitsaufwändigste, weil es<br />
notwendig werden kann, manuell zusätzliche<br />
Referenzpunkte hinzuzufügen.<br />
Störer ausfindig machen<br />
Die schlechtesten, störenden Kontrollpunkte<br />
finden sich durch Drehen an der<br />
Schraube der Bildvariablen: Der Reiter<br />
»Optimieren« im Hugin-GUI hilft dabei<br />
– vor allem durch den Eintrag »Alles«.<br />
Danach liegen die schlechten Kontrollpunkte<br />
(meist die mit den größten Distanzen)<br />
leicht erkennbar oben in der<br />
Kontrollpunkteliste, sofern diese nach<br />
den Abständen sortiert ist.<br />
Leider bleiben immer wieder richtig gesetzte<br />
Kontrollpunkte übrig, die nach der<br />
Optimierung weit auseinander liegen.<br />
Meist gehen diese Punkte auf unsauberes<br />
Arbeiten während der Aufnahme<br />
zurück, zum Beispiel wenn der Hobbyfotograf<br />
freihändig ohne Panoramakopf<br />
fotografiert hat und so eine Parallaxe in<br />
den Bildern vorliegt. In einem gewissen<br />
Rahmen lassen sich solche Fehler nachträglich<br />
beheben, indem der Anwender<br />
Online PLUS<br />
Auf <strong>Linux</strong>-<strong>Magazin</strong> Online PLUS finden<br />
Sie alle Projektdateien der Huginund<br />
Blender-Arbeitsschritte und die Skripte<br />
aus diesem Artikel unter [http:// www.<br />
linux‐magazin. de/ plus/ 2012/ 01/].<br />
an den wichtigen Stellen, also solchen<br />
mit viel Struktur, viele Kontrollpunkte<br />
von Hand setzt und an den Stellen, an<br />
denen Fehler beim Zusammenfügen weniger<br />
auffallen würden (zum Beispiel Rasenflächen),<br />
löscht.<br />
Hier gibt es keine allgemeingültigen<br />
Tipps, zu unterschiedlich sind Motive<br />
und potenzielle Fehlerquellen. Doch Parallaxen<br />
lassen sich auch künstlerisch<br />
einsetzen: So wie die Parallaxe zwischen<br />
dem linken und rechten Auge das räumliche<br />
Sehen erst ermöglicht oder Astronomen<br />
in verschiedenen Jahreszeiten die<br />
Entfernung zu Sternen berechnen lässt<br />
(dank der unterschiedlichen Position der<br />
Erde auf ihrer Bahn um die Sonne), erlaubt<br />
sie es auch, die dreidimensionale<br />
Struktur von Objekten zu berechen. In<br />
Grenzen funktioniert das recht gut, ein<br />
guter Einstieg für die Technik ist die Software<br />
Bundler, die es unter [11] zu laden<br />
gibt. Ob einem Abbildung 4 gefällt, ist<br />
wohl Geschmackssache.<br />
Zu guter Letzt: Planeten-<br />
Projektion mit Blender<br />
Um einen kleinen Planeten zu erzeugen,<br />
etwa den von Abbildung 1, wählt<br />
der Anwender in Hugin die Projektion<br />
»Stereographisch«. Die Blickrichtung der<br />
stereographischen Projektion muss ungefähr<br />
senkrecht nach unten zeigen, damit<br />
sich die Umgebung automatisch als Kugel<br />
abbildet. Wer die Fotoreihe mit horizontaler<br />
Blickrichtung beginnt und Hugin<br />
das erste Bild als Blickrichtung für die
Projektion reicht, braucht den Blick nur<br />
um 90 Grad nach unten zu drehen, indem<br />
er dies entweder mit der Maus in der<br />
<strong>Vorschau</strong> des Reiters »Move and Drag«<br />
bewerkstelligt oder hier als »Nickwinkel«<br />
90 Grad eingibt.<br />
Das Hugin-GUI bietet an, die Bilder als<br />
HDR zu speichern. Leider führten die<br />
so erzeugten Dateien im Test zu seltsamen<br />
Ergebnissen in Luminance HDR<br />
oder Blender [12]: Die Bilder sehen sehr<br />
unnatürlich aus. Besser ist es, den Menüpunkt<br />
»Einzelne Belichtungsebenen zusammenfügen«<br />
zu wählen. Der erzeugt<br />
pro Belichtungsreihe ein Bild, das sich<br />
mit Luminance HDR zu einem Belichtungsstapel<br />
zusammenfügen lässt.<br />
Dieser Stapel liefert dann sowohl in der<br />
HDR-Entwicklung als auch als Lichtquelle<br />
in Blender natürlicher wirkende Farben.<br />
Wegen der vielen vollständig überlappenden<br />
Bilder tritt häufig der Fehler »mask<br />
is entirely black« auf. Wer das vermeiden<br />
will, gibt als Option für »enblend« vorbeugend<br />
»‐‐fine‐mask« ein.<br />
Damit die Aufnahmen als Lichtquellen<br />
in Blender dienen können, wählt der Anwender<br />
als Projektion »Fischauge« und<br />
einen Bildwinkel von 360 Grad, speichert<br />
die einzelnen Belichtungsebenen einzeln<br />
und fügt sie mit Hilfe von Luminance<br />
HDR zu einem HDR-Stack zusammen,<br />
wie es Abbildung 8 zeigt.<br />
Im Open-EXR-Format gespeichert lässt<br />
diese aus zahlreiche Einzelfotos gewonnene<br />
Lichtumgebung die Szene in sehr<br />
natürlichem Licht erscheinen. In Blender<br />
lädt man sie über den »World«-Button<br />
und »Real Sky«, wählt bei »Environment<br />
Lightning« die »Sky Texture«, als »World<br />
Texture« den Eintrag »Image or Movie«,<br />
als Bild die vorher erzeugte EXR-Datei<br />
und als Mapping »Angular Map«.<br />
Untergrund<br />
Damit ein in die Szene gesetztes Objekt<br />
nicht aussieht, als schwebe es in der Luft,<br />
bietet es sich an, direkt unter dem Objekt<br />
eine durchsichtige Ebene (»Plane«)<br />
hinzuzufügen, die den Schatten des Objekts<br />
aufnimmt. So entsteht die Illusion,<br />
das Objekt stünde direkt auf dem Boden.<br />
Abbildung 9 zeigt Tux [13] mit einer<br />
Glaskugel und Erding-Rendering. n<br />
Sicheres und komfortables Login mit Chipkarte statt Benutzername/Passwort.<br />
Sie möchten den neuen Personalausweis für<br />
das Login in Ihrer <strong>Web</strong>anwendung nutzen?<br />
OWOK hilft Ihnen bei der Realisierung.<br />
Panorama-Fotos 01/2012<br />
Software<br />
www.linux-magazin.de<br />
67<br />
Infos<br />
[1] Digikam: [http:// www. digikam. org]<br />
[2] Hugin: [http:// hugin. sourceforge. net]<br />
[3] Gimp: [http:// www. gimp. org]<br />
[4] Gphoto2: [http:// www. gphoto. org]<br />
[5] Bauanleitung für einen Panoramakopf:<br />
[http:// www. dslr‐forum. de/ showthread.<br />
php? t=435827]<br />
[6] Peter Kreußel, „Foto-Mix“: <strong>Linux</strong>-<strong>Magazin</strong><br />
05/08, S. 48<br />
[7] Raytracing: [http:// en. wikipedia. org/ wiki/<br />
Ray_tracing_(graphics)]<br />
[8] Luminance HDR<br />
[http:// qtpfsgui. sourceforge. net]<br />
[9] Thomas Leichtenstern, „Alles unter einem<br />
Dach: <strong>Linux</strong>-User 09/10, S. 32<br />
[10] Ufraw: [http:// ufraw. sourceforge. net]<br />
[11] Bundler: [http:// phototour. cs. washington.<br />
edu/ bundler/]<br />
[12] Blender: [http:// www. blender. org]<br />
[13] Tux als Blender-Mesh: [http:// kde‐look.<br />
org/ content/ show. php/ ? content=57336]<br />
Der Autor<br />
Fritz Reichmann arbeitet als Software Development<br />
Engineer bei der Amadeus Data Processing GmbH.<br />
Der leidenschaftliche Hobbyfotograf nutzt beruflich<br />
und privat <strong>Linux</strong> seit Kernel 1.2.12.<br />
Mit OWOK steht eine nutzerfreundliche<br />
Komplettlösung für das Login per Chipkarte<br />
zur Verfügung, die mit geringem Aufwand<br />
schnell in beliebige <strong>Web</strong>-Applikationen eingebunden<br />
werden kann.<br />
Freeware Softwarekomponenten<br />
Authentifizierung durch Smartcard<br />
und PIN<br />
Maximaler Datenschutz<br />
Hochsichere Verschlüsselung<br />
Sichere Authentifizierung für <strong>Web</strong>-Applikationen<br />
mit neuem Personalausweis und/oder OWOK-Karte.<br />
Jetzt informieren:<br />
www.reiner-sct.com/owok<br />
powered by
Software<br />
www.linux-magazin.de Bitparade 01/2012<br />
68<br />
Vier Liquid-Democracy-Tools im Test<br />
Alle Macht dem Volke<br />
Das Tauziehen um „Stuttgart 21“ und die explodierende Zahl an Online-Petitionen machen klar, dass die Bürger<br />
nach mehr Mitbestimmung und Demokratie rufen. Sie wollen nicht mehr nur als Wahlvieh alle vier Jahre an die<br />
Urnen gebeten werden, sondern direkten Einfluss nehmen – Liquid Democracy soll es möglich machen. Mela Eckenfels<br />
Skalierbarkeit steht. Darüber hinaus prüft<br />
der Test, wie die Systeme Abstimmungen<br />
steuern, beeinflussen und auswerten, ob<br />
die Tools Diskussionen möglich machen<br />
und Stimmen an andere Personen abgeben<br />
können. Last but not least, stehen<br />
die Privatsphäre der Anwender und die<br />
Usability auf dem Prüfstand.<br />
E Adhocracy<br />
© BlauSicht, photocase.com<br />
Es war eine Premiere mit Hindernissen:<br />
Die Enquetekommission „Internet und<br />
digitale Gesellschaft“ des Deutschen Bundestages,<br />
die unter dem Eindruck der<br />
Petition gegen die „Zensursula“-Netzsperren<br />
mit über 130 000 Teilnehmern<br />
gegründet wurde, wollte einen 18. Sachverständigen<br />
zu Wort kommen lassen:<br />
das Volk. Eine Instanz der Liquid-Democracy-Software<br />
Adhocracy [1] sollte das<br />
möglich machen.<br />
Als es Zeit wurde, die Pläne umzusetzen,<br />
waren den CDU-Mitgliedern der Kommission<br />
die Kosten zu hoch. Die Netzgemeinde<br />
lästerte, dass wohl eher die Angst<br />
vor dem Ungeheuer „direkte Bürgerbeteiligung“<br />
den Ausschlag gegeben habe.<br />
Erst im September letzten Jahres konnte<br />
man sich einigen – die Obleute-Runde beschloss,<br />
die Bürgerinnen und Bürger zur<br />
Mitarbeit einzuladen ([2], [3]).<br />
Andere Parteien taten sich da leichter. Sie<br />
erkannten Liquid Democracy als Strategie<br />
gegen die zunehmende Politikverdrossenheit<br />
und als Mittel, um die eigene<br />
Basis besser in die Entscheidungsfindung<br />
einzubinden. Die Parteien Bündnis 90/<br />
Die Grünen, Die Linke, SPD und FDP<br />
experimentieren seit einiger Zeit mit Adhocracy,<br />
die Piratenpartei mit Liquidizer<br />
[4] und Liquid Feedback [5]. Ein viertes<br />
Tool namens Votorola [6] macht von sich<br />
Reden, steckt aber noch in der Entstehungsphase<br />
(siehe Kasten „Votorola“).<br />
Es tritt daher im folgenden Vergleichstest<br />
außer Konkurrenz an.<br />
Liquid-Democracy-Tools helfen überall<br />
dort, wo es unterschiedliche Strömungen<br />
und Meinungen gibt, einen gemeinsamen<br />
Weg zu finden. So spricht nichts dagegen,<br />
eine solche Software für Abstimmungen<br />
bei Open-Source-Projekten einzusetzen<br />
und Kompromisse zu erarbeiten, etwa<br />
welche Features kommende Programmversionen<br />
haben sollen.<br />
Diese Bitparade untersucht, welche Anforderungen<br />
die Tools an Server und<br />
<strong>Web</strong>browser stellen und wie es um die<br />
Adhocracy ist ein Projekt des seit 2009<br />
bestehenden Vereins Liquid Democracy<br />
e. V. und der Kandidat mit der größten<br />
Einsatzerfahrung. Nicht nur die zuvor genannten<br />
Parteien, auch die Stadt München<br />
setzte für den „Münchner Tag der Offenen<br />
Verwaltung“ (Munich Open Government<br />
Day, „Mogdy“, [7]) auf Adhocracy (siehe<br />
Abbildung 1). Derzeit ist meist Version 1.1<br />
im Einsatz, aber die Entwickler arbeiten<br />
bereits am Sprung auf 1.2. Interessierte<br />
Nutzer können unter [8] eine kostenlose<br />
Instanz testen.<br />
Für den Betrieb auf einem eigenen Server<br />
benötigt die Python-Software eine Skriptumgebung<br />
der Version 2.5 oder höher,<br />
PostgreSQL, den Suchserver Solr [9],<br />
die Messaging-Anwendung Rabbit MQ<br />
[10] und den Cacheserver Memcached<br />
[11]. Für den Standard-Mietwebspace ist<br />
Adhocracy damit zu anspruchsvoll, ein<br />
Rootserver ist die Minimalvoraussetzung<br />
für eine eigene Installation.<br />
Im Adhocracy-Paradebeispiel, der Installation<br />
der Internet-Enquete, verwaltet das<br />
Tool derzeit um die 2000 Anwender mit<br />
zirka je 300 Papieren und Vorschlägen,<br />
fast 20 000 Ereignisse und 12 000 Stimmen.<br />
Die Solr-Suche hat insgesamt über<br />
5000 Dokumente indiziert.<br />
Bei diesem Liquid-Democracy-Tool beginnt<br />
der Weg einer neuen Abstimmung
®<br />
opensourcepress.de<br />
SOFTWARE<br />
mit einem Vorschlag und einer Diskussion:<br />
Ritas Kommune betreibt eine Adhocracy-Instanz.<br />
Dort legt sie einen Account<br />
an, meldet sich an und bringt ihren Antrag<br />
ein. Rita möchte weniger Verkehrslärm<br />
in ihrer Straße. Helmut, Willy und alle<br />
anderen Mitglieder der Instanz können<br />
ihre Meinung dazu im Diskussionsbereich<br />
äußern. Mit einem kleinen Pfeil-Tool in<br />
der oberen linken Ecke stimmen sie dem<br />
Vorschlag zu oder lehnen ihn ab. So entsteht<br />
ein erstes Meinungsbild.<br />
Rita muss aber auch die Umsetzung<br />
selbst ausarbeiten, denn ohne die gibt es<br />
keine Abstimmung. Da sie sich eine Umgehungsstraße<br />
als Lösung des Problems<br />
gut vorstellen kann, beschreibt sie in der<br />
Umsetzung die Trasse. Willy wiederum<br />
findet eine Umgehungsstraße mit Trasse<br />
durch das Naturschutzgebiet des keuchenden<br />
Buntmarders völlig überflüssig<br />
und schlägt daher eine Alternative vor.<br />
Virtuelle Debatte<br />
Die Diskussion geht hoch her. Alle Mitglieder<br />
können nicht nur die Vorschläge bewerten,<br />
sondern auch jeden Diskussionsbeitrag.<br />
Margarete hat dafür aber einfach<br />
keine Zeit. Auch wenn ihr der keuchende<br />
Buntmarder ziemlich egal ist, Naturschutz<br />
ist eines ihrer Lieblingsthemen und sie<br />
weiß, dass sie meist der gleichen Meinung<br />
wie Willy ist. Deswegen delegiert sie ihre<br />
Stimme an Willy, der nun für zwei abstimmen<br />
kann.<br />
Nicht alle Vorschläge kommen bis zur<br />
Abstimmungsphase, sondern nur solche,<br />
die ein gewisses Quorum erreicht<br />
haben. Eine Benachrichtigung, dass die<br />
Abstimmung beginnt, gibt es nicht. Hier<br />
hilft nur, das Thema aktiv zu beobachten.<br />
Adhocracy zeigt dann einen weiteren<br />
Frame mit »Dafür«-, »Dagegen«- und<br />
»Enthalten«-Schaltflächen.<br />
Das Benutzerinterface ist aufgeräumt und<br />
deutlich übersichtlicher als bei den anderen<br />
Kandidaten. Geübten Foren- oder<br />
Social-Media-Nutzern gibt es keinerlei<br />
Rätsel auf, sie dürften sich schnell<br />
zurechtfinden. Wer solche Plattformen<br />
im Internet bisher gemieden hat, der<br />
benötigt sicherlich ein bisschen mehr<br />
Einarbeitungszeit.<br />
Jede Abstimmung und jeder Beitrag ist in<br />
Adhocracy immer einsehbar und Daten<br />
überträgt das Tool unverschlüsselt. Privatsphäre<br />
ist nur in Form von Pseudonymen<br />
gewährleistet, und die sind einigen<br />
Nutzern ein Dorn im Auge. So sprach<br />
sich der Vorsitzende der Enquetekommission<br />
Axel E. Fischer vehement gegen<br />
openSUSE 12.1<br />
umfassend · einfach · stabil<br />
2 DVDs (Installations- und Live-Systeme für 32- und 64-Bit)<br />
+ gedrucktes Handbuch 352 Seiten<br />
+ E-Book „Root-Server einrichten und absichern“<br />
+ zahlreiche weitere AddOns<br />
ISBN 978-3-941841-66-6 · 59,95 [D]<br />
opensourceschool.de<br />
Abbildung 1: Das Projekt Mogdy setzt auf Adhocracy. Mit der Kampagne „Fixmystreet für München“ wollen<br />
Bürger den Zustand der Straßen verbessern.<br />
TRAINING<br />
Nagios<br />
C++<br />
SUSE<br />
Git<br />
Apache LPI 301<br />
JavaScript<br />
Novell<br />
TYPO3<br />
Inhouse-Schulungen<br />
Android<br />
Metasploit<br />
Asterisk<br />
Kerberos<br />
CSS3<br />
Samba<br />
PostgreSQL<br />
Hadoop<br />
Lua<br />
ExtJS<br />
Nmap<br />
HTML5<br />
OTRS Bacula<br />
LPIC-2<br />
LPIC-1<br />
UML<br />
PHP<br />
Perl<br />
Qt<br />
KVM Magento<br />
Mainframe<br />
IPv6<br />
OpenLayers<br />
jQuery<br />
Anfragen unter:
Software<br />
www.linux-magazin.de Bitparade 01/2012<br />
70<br />
Pseudonyme aus. Um mit Liquid Democracy<br />
aber nicht den gläsernen Bürger zu<br />
schaffen, arbeitet der Entwicklerverein<br />
an Reputationssystemen. Die Implementierung<br />
eines Karma-Systems haben die<br />
Macher aber vorerst gestoppt.<br />
E Liquid Feedback<br />
Liquid Feedback ist ein Kind des Public<br />
Software Group e. V. und entstand 2009.<br />
Das Tool steht unter der MIT-Lizenz. Der<br />
Entwicklerverein arbeitet zwar unabhängig<br />
von der Piratenpartei, Entstehung und<br />
Entwicklung der Software sind aber eng<br />
mit ihr verknüpft.<br />
Liquid Feedback ist in Lua [12] implementiert,<br />
arbeitet mit einem PostgreSQL-<br />
Backend und benötigt einen CGI-fähigen<br />
<strong>Web</strong>server. Außerdem verlangt das Tool<br />
nach <strong>Web</strong> MCP [13] und Rocketwiki<br />
[14] – beide stammen ebenfalls aus der<br />
Schmiede der Public Software Group. Mit<br />
gemietetem <strong>Web</strong>space spielt Liquid Feedback<br />
zusammen, wenn ein Shellzugang<br />
und damit auch Zugriff auf den Cron-<br />
Dienst zur Verfügung steht. Wer einen<br />
Rootserver hat, ist auf der sicheren Seite.<br />
Eine öffentliche Testinstanz steht unter<br />
[15] bereit, sie eignet sich aber nicht für<br />
den produktiven Einsatz.<br />
Auf die Flaggschiff-Installation der Piratenpartei<br />
greifen gegenwärtig mehr als<br />
5000 Mitglieder zu, die 2000 Initiativen<br />
und 1000 Themen eingestellt haben. Die<br />
zugehörige Datenbank ist knapp 600<br />
MByte groß.<br />
Liquid Feedback ist hierarchischer strukturiert<br />
als Adhocracy. Jede Instanz besitzt<br />
Bereiche, in denen sich die Themen befinden.<br />
Diese entsprechen den Vorschlägen<br />
in Adhocracy. Wäre Rita ein Mitglied<br />
der Piratenpartei, müsste sie ihre Idee für<br />
die Umgehungsstraße im Themenbereich<br />
„Umwelt, Verkehr, Energie“ einordnen<br />
(siehe Abbildung 2). Ihre Idee durchläuft<br />
dann mehrere Phasen: Zuerst muss<br />
sie das Quorum bestehen, in dem zehn<br />
Prozent aller angemeldeten Benutzer ihre<br />
Idee zumindest als diskussionswürdig<br />
befinden müssen. Kommt das Quorum<br />
nicht zustande, beendet das System die<br />
Initiative automatisch.<br />
Diskussionskultur<br />
Abbildung 2: Liquid Feedback ordnet Themen in bestimmte Bereiche ein. Diese müssen zunächst Stimmen<br />
sammeln, bevor ein Vorschlag in die Diskussionsphase gelangt.<br />
Erreicht Ritas Vorschlag das Quorum, beginnt<br />
die Diskussion. Helmut und Willy<br />
können nun Gegeninitiativen entwerfen.<br />
Ein handliches Diskussionstool bietet Liquid<br />
Feedback in der derzeitigen Version<br />
nicht. Je nach Instanz generiert das System<br />
stattdessen automatisierte Links in<br />
angeschlossene Forensysteme. Ist auch<br />
die Diskussionsphase beendet, gilt die<br />
Initiative als eingefroren, was kurzfristige<br />
Änderungen am Abstimmungstext verhindern<br />
soll. Hat sich die zwischenzeitliche<br />
Diskussion als unfruchtbar erwiesen<br />
und ist damit die Unterstützerzahl unter<br />
die zehn Prozent des ersten Quorums<br />
abgesunken, scheitert der Vorschlag und<br />
eine Abstimmung findet nicht statt. Blieb<br />
das Interesse erhalten, dürfen Rita, Helmut,<br />
Willy und Margarete endlich zur<br />
virtuellen Urne schreiten.<br />
Hier nehmen sie Ideen an oder lehnen sie<br />
ab oder sortieren Konkurrenzideen, die<br />
sich eventuell in der Diskussionsphase<br />
herausgebildet haben, nach ihren Präferenzen.<br />
Willy würde die Umgehungsstraße<br />
durchs Naturschutzgebiet wahrscheinlich<br />
ganz ans Ende seiner Liste<br />
einfügen, eine Straße durch ein weniger<br />
problematisches Gebiet an die erste Stelle<br />
setzen und Tempo 30 im besagten Wohngebiet<br />
als akzeptable Alternative und somit<br />
an Position zwei sehen.<br />
Delegationen spielen in Liquid Feedback<br />
eine wichtige Rolle. Der Wert einer Delegation<br />
beträgt immer genau eine Stimme.<br />
Bekommt Willy die Delegationen von 134<br />
Mitgliedern seines Naturschutzvereins<br />
übertragen, wiegt seine Stimme für die<br />
Alternative zur Umgehungsstraße genau<br />
135 Stimmen. Während bei Adhocracy<br />
Delegationen derzeit unbegrenzt bestehen<br />
bleiben, hat die Liquid-Feedback-<br />
Refe renz installation der Piraten kürzlich<br />
ein Verfallsdatum implementiert. So muss<br />
sich beispielsweise Margarete nun in regelmäßigen<br />
Abständen Gedanken machen,<br />
ob sie ihre Delegation weiterhin<br />
auf Willy überträgt oder ob sie inzwischen<br />
nicht mehr so ganz von dessen<br />
Kompetenz überzeugt ist. Zeigt sie kein<br />
Interesse an einer direkten Teilnahme und<br />
kümmert sich auch nicht um eine neue<br />
Delegation, verfällt die Stimme.<br />
So durchdacht das Wahlsystem und die<br />
Abstimmungsphasen bei diesem Tool<br />
auch sind, in puncto Usability müssen<br />
Anwender deutliche Abstriche machen.<br />
Derzeit erfordert die Software genügend<br />
Zeit und Willen, sich einzuarbeiten. Ein<br />
kleines Entwicklerteam namens Saftige<br />
Kumquat ist daher angetreten, um eine<br />
Lösung zu finden, und arbeitet an einer<br />
alternativen Oberfläche mit Codenamen<br />
Bombay Crushed [16].<br />
Ursprünglich bestand Liquid Feedback<br />
auf Klarnamen, welche die Betreiber eindeutig<br />
den Parteimitgliedern zuordnen<br />
konnten. Damit war das Abstimmungsverhalten<br />
jedes einzelnen Mitglieds glä-
sern und alle mit Zugang zum System<br />
konnten es nachvollziehen. Nach einigen<br />
Diskussionen erweiterten die Entwickler<br />
das Tool, es lässt inzwischen Pseudonyme<br />
zu. Die sind jedoch vom System weiterhin<br />
verifizierbar, um Abstimmungsbetrug<br />
zu verhindern.<br />
E Liquidizer<br />
Der Informatiker Stefan Dirnstorfer rief<br />
Liquidizer 2011 ins Leben. Er hat die Software<br />
in Scala implementiert und verwendet<br />
das Liftweb Framework [17], Graphviz<br />
[18] und Gnuplot [19] sowie Apache<br />
Maven [20]. Der Code ist über Github<br />
verfügbar und steht unter der MIT-Lizenz.<br />
Für den Hausgebrauch geht Liquidizer<br />
mit dem Jetty-<strong>Web</strong>server [21] und einer<br />
H2-Datenbank [22] über Port 8080 in<br />
Betrieb. Ein Rootzugang ist nicht nötig,<br />
der Einsatz auf einem üblichen <strong>Web</strong>hosting-Paket<br />
könnte aber an Apache Maven<br />
scheitern. Alternativ arbeitet Liquidizer<br />
mit einem Apache <strong>Web</strong>server und einem<br />
SQL-Backend zusammen – eine Variante,<br />
die bessere Backup- und Replikationsmöglichkeiten<br />
bietet.<br />
Ihre Feuertaufe erlebte die Software im<br />
Mai 2011 zum Bundesparteitag der Piratenpartei.<br />
Um die 1000 Benutzer wählten<br />
die bevorzugte Reihenfolge der zur<br />
Abstimmung stehenden Anträge. Den<br />
Nutzeransturm meisterte Liquidizer problemlos;<br />
ein Manipulationsversuch über<br />
eine angebliche Sicherheitslücke verhinderte<br />
aber den Einsatz der gewonnenen<br />
Ergebnisse [23].<br />
Abbildung 3: Liquidizer-Anwender haben insgesamt sieben Möglichkeiten, ihre Präferenzen auszudrücken.<br />
Direkt darüber ist das aktuelle Stimmungsbild eingeblendet.<br />
Liquidizer setzt auf ein komplexes mathematisches<br />
Verfahren, das sich vom<br />
binären Ja/Nein verabschiedet. Stattdessen<br />
verleiht die Software den Stimmen<br />
auf einer Skala von ‐3 bis +3 ein Gewicht<br />
(siehe Abbildung 3). Stehen beispielsweise<br />
drei Anträge zur Wahl, in denen<br />
der beste Editor der Welt zu küren ist,<br />
muss sich der Wähler nicht endgültig für<br />
Emacs, Vi oder Joe entscheiden. Stattdessen<br />
kann er mit seiner Wertung festlegen,<br />
dass er den Joe eigentlich ganz gerne<br />
mag, den Vi aber ein bisschen mehr und<br />
den Emacs doch nicht so richtig.<br />
Auch Liquidizer kennt Delegationen, nutzt<br />
hier aber ebenfalls mathematische Abhängigkeiten,<br />
die den Wert der Stimme und<br />
der Delegationen beeinflussen. So ist nicht<br />
jede Delegation zwingend eine Stimme.<br />
Der Mediator<br />
Dieser Testkandidat eignet sich nicht dazu,<br />
absolute Antworten zu finden, fängt aber<br />
Stimmungsbilder ein und bildet Kompromisse<br />
ab, mit denen die Mehrzahl der<br />
Teilnehmer leben könnte. Auch zur Meinungsbildung<br />
taugt Liquidizer weniger.<br />
Bitparade 01/2012<br />
Software<br />
www.linux-magazin.de<br />
71<br />
Votorola<br />
Dieses Projekt stammt von einer kleinen Entwicklergruppe,<br />
die weitgehend unabhängig von<br />
Vereinen oder Parteien agiert. Die Software<br />
befindet sich im Prototyp-Stadium, sieht aber<br />
bereits jetzt recht vielversprechend aus. Das<br />
Tool steht unter der MIT-Lizenz. Es benötigt<br />
Open JDK oder die Java-Laufzeitumgebung<br />
von Sun in Version 1.6. Darüber hinaus sind<br />
Semantic Mediawiki 1.5.5 und PostgreSQL ab<br />
Version 8.4 sowie eine Reihe gängiger Mediawiki-Erweiterungen<br />
[25] und die Eigenproduktion<br />
der Votorola-Macher namens Mailish<br />
Username [26] erforderlich. Momentan testet<br />
Metagovernment [27] die Anwendung,<br />
weitere Alphatester sind laut Aussagen der<br />
Macher aber erwünscht.<br />
Was Votorola vor allem von den anderen Kandidaten<br />
unterscheidet, sind die offenen Strukturen<br />
und das Konzept der kommunikativen Delegationen.<br />
Während Letztere bei Adhocracy,<br />
Liquidizer und Liquid Feedback eher ein zusätzliches<br />
Feature sind, spielen sie bei Votorola eine<br />
zentrale Rolle. Das Konzept ist schnell erklärt:<br />
Ein Anwender veröffentlicht nicht etwa eine<br />
Idee und sammelt dann Stimmen für diese, sondern<br />
sucht bei Votorola andere Wähler, die ihre<br />
Stimmen auf seine Version der Idee delegieren.<br />
Ein Wähler, der 100 Stimmen auf sich versammelt<br />
hat, kann nun mit einem anderen Wähler<br />
in Verhandlung treten.<br />
War Anna beispielsweise sehr überzeugend<br />
und hat 500 Delegationen für ihre Umgehungsstraße<br />
auf sich versammelt und Chris<br />
400 Delegationen, die den keuchenden Buntmarder<br />
retten möchten, kann er versuchen,<br />
mit Anna ein Übereinkommen zu treffen. Sie<br />
erhält dann auch seine 400 Stimmen, wenn sie<br />
einer alternativen Trasse zustimmt. Mit nun<br />
900 Stimmen haben sie ganz gute Chancen<br />
gegen Bens 600 Stimmen, die er sammeln<br />
konnte, weil er die Umgehungsstraße viel zu<br />
teuer und eine Tempo-30-Zone völlig ausreichend<br />
findet.<br />
Delegationen und Diskussionen befinden sich<br />
bei Votorola wahrlich beständig im Fluss. Die<br />
Benutzeroberfläche erinnert in der aktuellen<br />
Version stark an ein Mediawiki (siehe Abbildung<br />
4). Was aber auf den ersten Blick vertraut wirkt,<br />
verwirrt bei genauem Hinschauen. Die Navigation<br />
ist zu unübersichtlich und eher etwas für<br />
gestandene Techies als für politisch interessierte<br />
Normaluser. Noch gibt es also viel zu tun,<br />
wollen die Entwickler das flexible und komplexe<br />
System selbsterklärend abbilden.
Software<br />
www.linux-magazin.de Bitparade 01/2012<br />
72<br />
Abbildung 4: Votorola basiert auf Mediawiki, was bei der Benutzeroberfläche noch deutlich zu sehen ist (hier<br />
ein Abstimmungsvorschlag zur Veröffentlichung von Lehrmaterial).<br />
Die Diskussionsseiten der Anträge haben<br />
nicht viel mehr zu bieten als die Kommentarfunktionen<br />
eines Blogs. Das reicht<br />
aber, um dem Wähler die Möglichkeit<br />
zu geben, sein Abstimmungsverhalten zu<br />
begründen, echte Diskussionswerkzeuge<br />
fehlen jedoch.<br />
Liquidizer empfängt seine Nutzer auf den<br />
ersten Blick mit einem freundlichen und<br />
aufgeräumten Interface. Es verschleiert<br />
geschickt die Lernkurve und den benötigten<br />
Aufwand, wenn der Politikinteressierte<br />
wirklich verstehen will, wie das<br />
genaue Gewicht seiner Stimme zustande<br />
kommt. Die Visualisierung der Delegationen<br />
oder des Abstimmungsverlaufs schaffen<br />
zwar Transparenz, erschlagen aber<br />
den technisch unbedarften Benutzer mit<br />
einem Riesenpaket Information.<br />
Auch in Bezug auf ihre Privatsphäre<br />
müssen Wähler Zugeständnisse machen.<br />
Zwar können sie alle ihre Informationen<br />
jederzeit rückstandsfrei aus dem System<br />
entfernen, bleiben sie aber dabei, ist ihr<br />
gesamtes Abstimmungsverhalten inklusive<br />
ein- und ausgehender Delegationen<br />
für jeden einsehbar.<br />
Wahlfieber<br />
Bei der Installation und Wartung unterscheiden<br />
sich die Kandidaten kaum –<br />
alle benötigen mindestens einen Rootserver<br />
mit Shellzugriff, ein einfaches<br />
Hosting paket reicht nicht aus. Bei der<br />
Wahrung der Privatsphäre hat Liquid<br />
Feedback leicht die Nase vorn. Dieses<br />
Tool punktet ebenfalls mit einem wohlgeordneten<br />
Wahlvorgang. Liquidizer wartet<br />
mit einem durchdachten Konzept und<br />
mathematischen Feinheiten auf. Sieger<br />
im Test ist jedoch eindeutig Adhocracy.<br />
Die Software überzeugt am Ende durch<br />
ihre Benutzerfreundlichkeit. Ohne lange<br />
Einarbeitungszeit kann auch der technisch<br />
unbewanderte Politikfan schnell im<br />
Abstimmungs- und Wahlkampf mitmischen,<br />
und darum geht es letztendlich<br />
bei Liquid Democracy.<br />
Es bleibt die Frage, ob dieses Konzept am<br />
Ende eine Zukunft hat. Wenn Bündnis<br />
90/Die Grünen laut ihrem Impulspapier<br />
„Keine Angst vor Piraten – keine Angst<br />
vor den BürgerInnen“ [24] Liquid-Democracy-Werkzeuge<br />
einsetzen wollen,<br />
damit Delegierte an Delegierte delegieren<br />
können, sind diese nur noch Hilfsmittel<br />
für den reibungslosen politischen<br />
Arbeitsablauf ohne jede basisdemokratische<br />
Komponente.<br />
Noch pessimistischer drückte es der Politikwissenschaftler<br />
Tilman Mayer von der<br />
Universität Bonn aus. Zu einer Pressekonferenz<br />
der Piratenpartei befragt, äußerte er<br />
die Vermutung: „Sie [die Bürger] wollen<br />
nicht so eine starke Partizipation.“ Ob er<br />
angesichts des um sich greifenden Massenprotestes<br />
und einer um Antworten in<br />
sozialen und ökonomischen Fragen verlegenen<br />
politischen Kaste recht behält, wird<br />
sich zeigen. (hej)<br />
n<br />
Infos<br />
[1] Adhocracy: [http:// code. adhocracy. de]<br />
[2] Bürgerbeteiligung mit Adhocracy:<br />
[http:// www. bundestag. de/<br />
internetenquete/ Adhocracy/ index. jsp]<br />
[3] Adhocracy im Bundestag:<br />
[http:// www. bundestag. de/<br />
internetenquete/ Online‐<br />
Buergerbeteiligung_Uebersicht/ index. jsp]<br />
[4] Liquidizer: [http:// liquidizer. github. com]<br />
[5] Liquid Feedback:<br />
[http:// liquidfeedback. org]<br />
[6] Votorola: [http:// zelea. com/ project/<br />
votorola/ home. xht]<br />
[7] Munich Open Government Day:<br />
[http:// www. muenchen. de/ Rathaus/ dir/<br />
limux/ mogdy/ index. html]<br />
[8] Adhocracy-Testzugang:<br />
[http:// adhocracy. de]<br />
[9] Apache Solr:<br />
[http:// lucene. apache. org/ solr]<br />
[10] Rabbit MQ: [http:// www. rabbitmq. com]<br />
[11] Memcached: [http:// memcached. org]<br />
[12] Lua: [http:// www. lua. org]<br />
[13] <strong>Web</strong> MCP: [http:// www.<br />
public‐software‐group. org/ webmcp]<br />
[14] Rocketwiki: [http:// www.<br />
public‐software‐group. org/ rocketwiki]<br />
[15] Liquid-Feedback-Testsystem:<br />
[http:// lqfb. de/ testlogin]<br />
[16] Alternative Liquid-Feedback-Oberfläche:<br />
[http:// saftigekumquat. wordpress. com]<br />
[17] Liftweb: [http:// liftweb. net]<br />
[18] Graphviz: [http:// www. graphviz. org]<br />
[19] Gnuplot: [http:// www. gnuplot. info]<br />
[20] Apache Maven:<br />
[http:// maven. apache. org]<br />
[21] Jetty: [http:// www. eclipse. org/ jetty]<br />
[22] H2-Datenbank:<br />
[http:// www. h2database. com]<br />
[23] Analyse des Liquidizer-Manipulationsversuchs:<br />
[http:// wiki. piratenpartei. de/<br />
Liquidizer/ BPT11. 1/ Attacke]<br />
[24] Impulspapier: [http:// gruene‐beta. de/<br />
offenes‐impulspapier]<br />
[25] Zusätzliche Mediawiki-Module:<br />
[http:// u. zelea. com/ w/ Special:Version]<br />
[26] Malish Username:<br />
[http:// zelea. com/ project/<br />
MailishUsername/ MailishUsername. xht]<br />
[27] Metagovernment:<br />
[http:// metagovernment. org]
Unsere Besten 2011<br />
neu<br />
neu<br />
ISBN 978-3-89721-319-7, 34,90 €<br />
ISBN 978-3-86899-139-0, 29,90 €<br />
neu<br />
ISBN 978-3-89721-601-3, 34,90 €<br />
neu<br />
ISBN 978-3-86899-119-2, 24,90 € ISBN 978-3-86899-125-3, 24,90 €<br />
ISBN 978-3-86899-145-1, 34,90 €<br />
neu<br />
ISBN 978-3-89721-316-6 34,90 €<br />
ISBN 978-3-86899-114-7, 29,90 €<br />
ISBN 978-3-86899-114-7, 29,90 €<br />
Blog:<br />
community.oreilly.de/blog<br />
Google+:<br />
http://bit.ly/googleplus_oreillyverlag<br />
Facebook:<br />
facebook.com/oreilly.de<br />
Twitter:<br />
twitter.com/OReilly_Verlag<br />
O’REILLY ®<br />
www.oreilly.de
Software<br />
www.linux-magazin.de Tooltipps 01/2012<br />
74<br />
Werkzeuge im Kurztest<br />
Tooltipps<br />
Gtkdialog 0.8.0<br />
GUIs für eigene Skripte basteln<br />
Quelle: [http:// code. google. com/ p/<br />
gtkdialog]<br />
Lizenz: GPLv2<br />
Alternativen: Zenity, Xdialog<br />
Monkey 0.20.1<br />
Kompakter und schneller <strong>Web</strong>server<br />
Quelle: [http:// www. monkey‐project. com]<br />
Lizenz: GPLv2<br />
Alternativen: Lighttpd, Nginx<br />
Rsstail 1.8<br />
RSS-Reader für die Konsole<br />
Quelle: [http:// www. vanheusden. com/<br />
rsstail]<br />
Lizenz: GPLv3<br />
Alternativen: Snownews, Newsbeuter<br />
Eigene Programme mit grafischen Oberflächen<br />
auszustatten ist dank Gtkdialog<br />
äußerst komfortabel. Das Werkzeug erlaubt<br />
es, das GUI in einer einfachen XMLartigen<br />
Syntax zu beschreiben, und arbeitet<br />
mit allen Interpretern zusammen, die<br />
Dateien, Standard-I/O oder Umgebungsvariablen<br />
unterstützen.<br />
Über zwanzig vordefinierte Fensterstrukturen<br />
stehen bereit, darunter einfache<br />
Auswahlmenüs und Fortschrittsbalken.<br />
Gtkdialog setzt auf die GTK-Bibliotheken,<br />
um die Fenster in einer X-Umgebung darzustellen.<br />
Die Archivdatei enthält eine<br />
Reihe von Anwendungsbeispielen für<br />
unterschiedliche Fenstertypen, die anschaulich<br />
beschreiben, welche Einsatzmöglichkeiten<br />
das jeweilige Element bietet.<br />
Enthalten sind ebenfalls Anleitungen<br />
für die Zusammenarbeit mit der Bash<br />
und Awk. Eine Manpage besitzt Gtkdialog<br />
nicht, dafür eine Infoseite und ein<br />
»doc«-Verzeichnis mit HTML-Referenzen<br />
für alle Fenstertypen.<br />
★★★★★ Mit Gtkdialog peppen Entwickler<br />
ihre Programme auf und erstellen ohne<br />
viel Aufwand schicke grafische Oberflächen.<br />
Davon profitieren besonders Awkund<br />
Shellskripte, die über kein eigenes<br />
API für GUIs verfügen.<br />
n<br />
Monkey ist ein schlanker und leistungsfähiger<br />
HTTP/1.1-kompatibler <strong>Web</strong>server<br />
und besticht vor allem durch seine<br />
Geschwindigkeit. Der Fokus liegt auf<br />
der Auslieferung statischer Seiten. Zum<br />
Darstellen dynamischer Inhalte greift<br />
Monkey auf das Palm-Plugin zurück.<br />
Der Server beherrscht feste Threads und<br />
den asynchronen Modus, der die Nutzung<br />
nicht geblockter Sockets erlaubt.<br />
Auf diese Weise kann Monkey extrem<br />
viele Anfragen bearbeiten, ohne dabei<br />
Verbindungen zu blockieren.<br />
Jede Site ist ein virtueller Host mit einer<br />
eigenen Konfigurationsdatei. Hier definiert<br />
der Admin außer dem Namen oder<br />
der IP-Adresse ein Dokumentenverzeichnis<br />
und den Aufenthaltsort der Logdateien.<br />
Die mitgelieferten Beispiele sind<br />
gut strukturiert und enthalten aussagekräftige<br />
Kommentare, sodass sich erfahrene<br />
Admins sofort zurechtfinden.<br />
Die Haupteinrichtungsdatei enthält den<br />
Port, auf dem Monkey eingehende Verbindungen<br />
erwartet, sowie die Anzahl<br />
der Threads, die der Server startet. Weitere<br />
Parameter legen das Keep-alive-<br />
Verhalten, die Request-Größe und den<br />
Indexdateityp fest.<br />
★★★★★ Monkey ist ein performanter<br />
<strong>Web</strong>server, der sich gut zur Darstellung<br />
statischer Sites eignet. Wer dynamische<br />
Inhalte anbieten will, greift besser zu<br />
einer anderen Lösung.<br />
n<br />
Wie der Name ahnen lässt, handelt es<br />
sich bei diesem Tool um einen RSS-Reader<br />
für die Konsole. Er beobachtet Feeds<br />
und aktualisiert die Anzeige, wenn er einen<br />
neuen Artikel entdeckt – ähnlich wie<br />
»tail ‐f«. Dazu ruft der Anwender »rsstail<br />
‐u« zusammen mit einer oder mehreren<br />
URLs auf. Darf es etwas detaillierter sein,<br />
geben Parameter wie »‐a«, »‐p«, »‐t« oder<br />
»‐d« Informationen über Autor, Veröffentlichungsdatum,<br />
Zeitstempel und eine Beschreibung<br />
des Feed aus.<br />
In der Voreinstellung überprüft Rsstail<br />
alle 15 Minuten, ob es neue Artikel gibt.<br />
Alternativ definiert der Anwender hinter<br />
»‐i« ein eigenes Intervall in Sekunden. Für<br />
oft aktualisierte Feeds besteht die Möglichkeit,<br />
nur Einträge der letzten Minuten<br />
oder Stunden anzuzeigen. Filteroptionen<br />
sorgen für mehr Übersicht. So reduziert<br />
der Anwender mit »‐b« lange Beschreibungen<br />
auf eine Bytezahl seiner Wahl.<br />
Über »‐n« schränkt er die Zahl der Feeds<br />
ein, mit »‐H« entfernt Rsstail alle HTML-<br />
Tags. Das Tool kann laut Manpage auch<br />
mit Proxyservern umgehen; auf einem<br />
Testsystem klappte die Zusammenarbeit<br />
mit Squid jedoch nicht.<br />
★★★★★ Rsstail ist ein sehr praktisches<br />
Tool für alle Anwender, die oft auf der<br />
Konsole arbeiten und dabei ihre abonnierten<br />
Newsfeeds im Auge behalten<br />
möchten.<br />
n
Procmeter 3.5d<br />
Monitor für das »/proc«-Verzeichnis<br />
Quelle: [http:// www. gedanken. demon. co. uk/<br />
procmeter3]<br />
Lizenz: GPLv2<br />
Alternativen: Gkrellm, Conky<br />
Fdupe 1.7<br />
Dateidubletten aufspüren<br />
Quelle: [http:// neaptide. org/ projects/ fdupe]<br />
Lizenz: Free for non-commercial Purpose<br />
Alternativen: Dupseek, Dupeguru<br />
Snarsshe 11.10.12<br />
Remotesysteme mit Rsync archivieren<br />
Quelle: [http:// www. cogent‐it. com/<br />
software/ snarsshe]<br />
Lizenz: GPLv2<br />
Alternativen: Synbak, Burp<br />
Tooltipps 01/2012<br />
Software<br />
www.linux-magazin.de<br />
75<br />
Ein Blick ins Verzeichnis »/proc« offenbart<br />
aktuelle Informationen zum Zustand<br />
des eigenen Systems. Allerdings gleicht<br />
manche Suche der nach der berühmten<br />
Nadel im Heuhaufen. Procmeter beobachtet<br />
die Kernel-Informationen und bereitet<br />
sie grafisch auf. Das Tool präsentiert<br />
die gesammelten Daten wahlweise<br />
interaktiv in einer grafischen Oberfläche<br />
oder schreibt sie in eine Protokolldatei.<br />
Für den GUI-Einsatz bietet Procmeter verschiedene<br />
Looks an: GTK 1, GTK 2 oder<br />
Xaw. Dabei ist ebenfalls eine Variante für<br />
kleine LCD-Displays.<br />
Das Programmfenster ist in so genannte<br />
Panels gegliedert. Diese stellen die ermittelten<br />
Werte der einzelnen Module als<br />
Text, Graph oder Balken dar. Procmeter<br />
bietet unter anderem Module für »acpi«,<br />
»biff«, »cpuinfo«, »loadavg«, »netdev«,<br />
»meminfo« und »vmstat« an, die der Anwender<br />
nur aktivieren muss. Dazu bedient<br />
er sich der rechten Maustaste und<br />
wählt die Komponenten im Kontextmenü<br />
aus. Über die linke Maustaste positioniert<br />
und konfiguriert er die Module.<br />
Alle so vorgenommenen Einstellungen<br />
sind nur temporär. Um Procmeter immer<br />
mit derselben Ansicht zu starten, legt der<br />
Nutzer eine Konfigurationsdatei namens<br />
»~/.procmeterrc« an. Informationen zu<br />
deren Syntax und eine Beispieldatei enthält<br />
die Manpage zu »procmeterrc«.<br />
★★★★★ Procmeter ist ein flexibler Systemmonitor,<br />
den Anwender ganz nach<br />
ihren Bedürfnissen einrichten. Das Tool<br />
passt sein Look & Feel an gängige Oberflächen<br />
an und macht sogar auf LCDs<br />
eine gute Figur, was es für den Einsatz<br />
auf Embedded Devices prädestiniert. n<br />
Fdupe ist ein kleines und kompaktes<br />
Perl-Skript, das den Anwender dabei unterstützt,<br />
Dateidubletten zu finden. Das<br />
Tool untersucht und vergleicht dazu den<br />
Inhalt, nicht die Dateinamen. Zusätzliche<br />
Perl-Module sind nicht erforderlich<br />
– ein Aufruf von »/usr/bin/perl fdupe.<br />
pl« genügt.<br />
Beim Start definiert der Nutzer mehrere<br />
Dateien oder Verzeichnisse, die Fdupe<br />
dann rekursiv scannt. Im ersten Schritt<br />
erstellt das Skript eine Liste aller dort enthaltenen<br />
Dateien und sortiert diese absteigend<br />
nach ihrer Größe. Danach prüft<br />
und vergleicht Fdupe alle Fundstücke, die<br />
gleich groß sind. Dazu zerlegt das Tool<br />
sie in 32-Byte-Segmente und gleicht diese<br />
jeweils miteinander ab.<br />
Die gefundenen Dublette gibt Fdupe<br />
übersichtlich gegliedert auf Stdout aus,<br />
identische Dateien erscheinen dabei als<br />
Block. Jeder Abschnitt beginnt mit der<br />
Größenangabe, gefolgt vom Dateinamen<br />
und dem vollständigen Pfad. Der Programmierer<br />
empfiehlt auf der Projekthomepage,<br />
die Ausgabe in eine Datei<br />
umzuleiten, möchte der Nutzer die Ergebnisse<br />
mit einem Skript oder anderen<br />
Tools weiterverarbeiten.<br />
Während die Entwicklung in den letzten<br />
neun Jahren ruhte, gibt es seit Ende<br />
2011 wieder Neuerungen. Neben einigen<br />
Fehlerkorrekturen implementierte<br />
der Macher das oft gewünschte Feature,<br />
auch Dateien und nicht nur Verzeichnisse<br />
beim Start angeben zu dürfen.<br />
★★★★★ Zugegeben, für die Jagd auf<br />
Dateidubletten gibt es unter <strong>Linux</strong> komfortablere<br />
und effizientere Tools. Wer<br />
aber nach einem kleinen Programm ohne<br />
große Abhängigkeiten sucht, der findet in<br />
Fdupe einen praktischen Helfer. n<br />
Snapshots via Rsync in a simple Shell Environment<br />
– so der lange Name – ist eine<br />
Skriptsammlung, die bei der regelmäßigen<br />
Datenarchivierung hilft. Dazu sichert<br />
Snarsshe Momentaufnahmen entfernter<br />
Systeme in regelmäßigen Abständen und<br />
speichert sie in einem lokalen Repository.<br />
Im Hintergrund arbeiten GNU-Tools wie<br />
»sed«, »grep« und »find«.<br />
Für die eigentliche Übermittlung der Daten<br />
nutzt Snarsshe Rsync via SSH. Dabei<br />
überträgt Rsync genau den Zustand, in<br />
dem sich das Remotesystem befindet.<br />
Der Admin muss also selbst dafür sorgen,<br />
dass alle Dateien oder Datenbanken<br />
geschlossen sind, oder entsprechende<br />
Sicherungstools verwenden. Die lokale<br />
Kopie landet im Verzeichnis »/backup/<br />
snapshots«. Dieser Pfad lässt sich nicht<br />
ändern. Der Entwickler empfiehlt, dem<br />
Verzeichnis eine eigene Partition zu<br />
spendieren. Über Umgebungsvariablen<br />
ist einstellbar, wie viele Snapshots immer<br />
vorhanden sein sollen, wann eine Kopie<br />
als veraltet gilt und wie viel Plattenplatz<br />
im Repository existieren muss.<br />
Sichert das Tool Daten zum ersten Mal,<br />
erstellt es das Backupverzeichnis eigenständig<br />
und baut danach die Rsync-Verbindung<br />
auf. Zu jedem Snapshot gehört<br />
eine Logdatei auf dem lokalen Rechner.<br />
Der Link »latest« zeigt auf den neuesten<br />
Snapshot – so muss der Nutzer nicht<br />
lange suchen.<br />
★★★★★ Snarsshe ist eine interessante<br />
Skriptsammlung, die sich um die regelmäßige<br />
Sicherung entfernter Systeme<br />
kümmert. Da es kaum Abhängigkeiten<br />
aufweist, ist es fast überall lauffähig.<br />
(U. Vollbracht/hej)<br />
n
<strong>Linux</strong>-<strong>Magazin</strong><br />
ACADEMY<br />
LPIC-1<br />
All-in-One Solution<br />
✓<br />
✓<br />
✓<br />
Stellen Sie Ihr <strong>Linux</strong>-Wissen mit<br />
einer Zertifizierung unter Beweis!<br />
Nutzen Sie die volle Flexibilität bei<br />
der Zeiteinteilung Ihrer Schulung!<br />
Holen Sie sich alles, was Sie<br />
benötigen, in einem Paket!<br />
LPIC-1 Komplettpaket* nur € 1.249<br />
*Zertifizierung als „Junior Level <strong>Linux</strong> Professional“<br />
(zzgl. MwSt.)<br />
100% flexibel!<br />
Weitere Infos: academy.linux-magazin.de/solution
Aus dem Alltag eines Sysadmin: Open Rhein Ruhr<br />
Großer Regionalbahnhof<br />
Einführung 01/2012<br />
Sysadmin<br />
Die beste Bildung findet, laut Goethe, ein gescheiter Mensch auf Reisen. <strong>Magazin</strong>-Kolumnist Charly hat das<br />
letzte Wochenende in Oberhausen verbracht. Charly Kühnast<br />
Inhalt<br />
78 Google Authenticator<br />
Quelloffene und flexible Zwei-Faktor-<br />
PAM-Authentifizierung, die sogar zwei<br />
Kommunikationskanäle nutzt.<br />
84 Suse Cloud<br />
Open-Stack-Produkt, das Kunden mit<br />
grafischer Konfiguration und einer Android-App<br />
gewinnen will.<br />
90 Fog<br />
Festplattenkopien von PCs anfertigen,<br />
verwalten, administrieren und über einen<br />
ganzen PC-Pool verteilen.<br />
Ich mag offene <strong>Linux</strong>-Messen, also solche,<br />
bei denen sich sowohl Unternehmen<br />
als auch Vereine, Usergroups und andere<br />
nicht kommerziellen Aussteller treffen.<br />
Die größte der Art ist der <strong>Linux</strong>tag, aber<br />
es gibt regionale Nacheiferer. In Oberhausen,<br />
eine halbe Autostunde von meiner<br />
Haustür entfernt, verleiht das Rheinische<br />
Industriemuseum eine Ausstellungshalle<br />
für die Open Rhein Ruhr [1].<br />
Die erste Open Rhein Ruhr 2009 war ein<br />
Familientreffen der üblichen Verdächtigen.<br />
Es gab gute Vorträge, Pizza und<br />
Stände <strong>Linux</strong>-affiner Unternehmen. Wer<br />
fehlte, waren die Normalos. Letzte Woche<br />
bei meinem Besuch der dritten Auflage<br />
der offenen Messe sehe ich in den Hallen<br />
viele Normale, auch der veranstaltende<br />
Verein hat die Organisation im Griff – das<br />
unter der Last ächzende Messe-WLAN<br />
treibt niemanden mehr in den Wahnsinn,<br />
Dect und Pizza-Proxy funktionieren dafür<br />
umso besser.<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 />
Den Samstag verbringe<br />
ich damit, Admin- und<br />
Programmierer-Bekanntschaften<br />
aufzufrischen<br />
und den einen oder anderen<br />
Vortrag zu hören.<br />
Am Sonntag dann wuseln<br />
Anwender und Gewerbetreibende<br />
durch<br />
die Gänge und informieren<br />
sich über Homebanking,<br />
Abrechnungssoftware<br />
und freie Telefonanlagen.<br />
Der Myth-TV-<br />
Stand ist dicht umlagert.<br />
Das mag an der laufenden<br />
Formel-1-Übertragung<br />
liegen, aber das<br />
schicke <strong>Linux</strong>-Mediencenter allein macht<br />
auch schon genug Eindruck.<br />
So mancher, ich beispielsweise, bleibt<br />
nach dem Studieren des Programms noch<br />
ein wenig länger als geplant. In gleich<br />
vier Räumen laufen an beiden Tagen Vorträge.<br />
Stärker besetzt als in den vergangenen<br />
Jahren ist der „Enduser“-Track.<br />
Hier geht es beispielsweise um Libre<br />
Office, überwiegend richtet sich dieser<br />
Track aber an kleine und mittelständische<br />
Unternehmen. Rechnungseingangs-<br />
Workflow, Groupware, Clouddienste,<br />
Zeitmanagement und Office-Automation<br />
sind gefragte Themen. Angehende Selbstständige<br />
lernen in „Gründen mit freier<br />
Software“ einen Fehlstart zu vermeiden.<br />
Nase zu und durch<br />
<strong>Linux</strong>-Profis brüten nebenan über ihren<br />
LPI-, BSD-Cert- und Typo3-Prüfungen.<br />
Eine Tür weiter laufen die Admin-Vorträge,<br />
in denen ich mich zu Bind 10 und<br />
Git auf den neuesten Stand bringen lasse.<br />
Als begeisterter, aber lötkolbenscheuer<br />
Bastler setzt mich der „Open Hardware“-<br />
Abbildung 1: Bei Bahnchef Jörg Pleumann geht’s mit einem Arduino-<br />
Grundmodul, CAN-Bus und Railuino-Hack den ganzen Tag rund.<br />
Track auf die richtige Schiene, die ins<br />
Land der Arduino-Programmierung führt.<br />
Nach einer Einführung in die einzelnen<br />
Derivate und deren Erweiterungen zeigt<br />
Jörg Pleumann seinen Railuino-Hack. Er<br />
koppelt ein Arduino-Grundmodul mit einem<br />
CAN-Bus-Shield und steuert damit<br />
eine Märklin-Bahn (Abbildung 1).<br />
An der Eisenbahn wird’s wohl nicht liegen,<br />
dass die Luft in den Vortragsräumen<br />
zum Schneiden ist – eigentlich mein einziger<br />
Kritikpunkt an der Veranstaltung.<br />
Im Gehen drehe ich, gewissermaßen zum<br />
Luft holen, noch eine Runde durch die<br />
reguläre Ausstellung des Industriemuseums,<br />
denn der Eintritt ist für Besucher der<br />
Open Rhein Ruhr frei. Den Organisatoren<br />
ist es gelungen, eine Veranstaltung für<br />
<strong>Linux</strong>-Anwender, ‐Profis und ‐Neulinge<br />
zu etablieren. Der <strong>Linux</strong>tag wirbt mit<br />
dem Slogan „Where .com meets .org“,<br />
der regional ausgerichteten Open Rhein<br />
Ruhr gelingt das Kunststück auch. (jk)n<br />
Infos<br />
[1] Open Rhein Ruhr: [http:// openrheinruhr. de]<br />
www.linux-magazin.de<br />
77
Sysadmin<br />
www.linux-magazin.de Google Authenticator 01/2012<br />
78<br />
Zwei-Faktor-Authentifizierung mit Android-Telefon<br />
Zweifach gesichert<br />
Zwei-Faktor-Authentifizierung gilt als teuer und exotisch. Doch mit Googles Authenticator existiert eine flexible<br />
und quelloffene Lösung, die sogar zwei Kommunikationskanäle nutzt. Über ein Android-Telefon und ohne<br />
Verbindung zum Datenkraken Google lassen sich so <strong>Linux</strong>-Server und -Dienste absichern. Philipp Neuhaus<br />
führt einen Zähler mit, der bei Benutzer<br />
und Dienst stets auf dem aktuellen Stand<br />
gehalten sein will. TOTP dagegen steht<br />
für Time-based OTP und befindet sich<br />
derzeit noch in der Spezifizierungsphase<br />
[3]. Bei diesem Algorithmus sorgt kein<br />
Zähler dafür, dass sich der Wert ändert,<br />
sondern schlicht die Zeit. Diese Abhängigkeit<br />
von der aktuellen Uhrzeit macht<br />
das OTP vergänglich, es ist nur für eine<br />
kurze Zeitspanne nutzbar.<br />
Initialisierung mit QR-Code<br />
© Ralf Herschbach, Fotolia<br />
Wissen und Besitz gelten als hervorragendes<br />
Paar, wenn es darum geht,<br />
sichere Authentifizierung zu bewerkstelligen.<br />
Weder der erfolgreiche Brute-<br />
Force-Angriff auf ein Passwort noch der<br />
Diebstahl des Token allein ermöglichen<br />
das unbefugte Eindringen ins System. Gelangt<br />
dann ein One-Time-Passwort auch<br />
noch über einen getrennten Kanal zum<br />
Anwender, steht einem sicheren Login<br />
nichts im Wege.<br />
Google und Onlinebanking<br />
Der Internetriese Google zeigt derzeit<br />
mit einer Smartphone-App und einem<br />
PAM-Modul, wie das funktionieren kann.<br />
Weil Letzteres als RFC standardisiert ist<br />
und sich nach dem flexiblen Standard<br />
der Pluggable Authentication Modules<br />
(PAM) richtet, können Admins ohne<br />
großen Aufwand einzelnen Usern und<br />
Diensten unterschiedliche Authentifizierungsmethoden<br />
verordnen.<br />
Geldhäuser nutzen seit den Anfängen<br />
des Onlinebankings ähnliche Systeme,<br />
lange Jahre mit Hilfe von papierenen<br />
TAN-Listen, mittlerweile überwiegend<br />
über dynamisch per Smartcard erzeugte<br />
TANs oder mit per SMS versandten One-<br />
Time-TANs. Für die Fernwartung gibt<br />
es Hardware-Tokens, die eine von fest<br />
verbauter Kryptohardware erzeugte Zahlenfolge<br />
zum Abtippen präsentieren oder<br />
sich über USB als Tastatur ausgeben, auf<br />
der der Anwender sein Geheimnis direkt<br />
eingibt, oder Zertifikate und Keys für den<br />
Zugriff sicher verwahren [1].<br />
TOTP und HOTP<br />
Experten unterscheiden grob zwischen<br />
Systemen auf TOTP- und auf HOTP-Basis.<br />
HOTP steht für HMAC-based OTP (Onetime<br />
Password) und nutzt einen in RFC<br />
4226 [2] spezifizierten Algorithmus auf<br />
Basis eines Hashwerts, der sich bei jeder<br />
Benutzung ändert. Der Algorithmus<br />
Auch die Anmeldung bei Google erlaubt<br />
es, das Konto mit einer Zwei-Faktor-Authentifikation<br />
abzusichern [4]. Dabei hat<br />
der Benutzer die Wahl zwischen dem<br />
Empfang einer SMS mit der TAN oder<br />
dem Einsatz einer Smartphone-App, die<br />
Google über die <strong>Web</strong>seite für Android,<br />
I-OS und Blackberry bereitstellt.<br />
Nach dem Scan eines QR-Codes auf der<br />
<strong>Web</strong>seite erhält die Anwendung einen<br />
Initialisierungswert und kann ab sofort<br />
aktuelle TANs zum Login berechnen.<br />
Der Quelltext [5] unterliegt der Apache<br />
License 2.0 und steht frei zum Download.<br />
Die App unterscheidet den Google<br />
Authenticator auch im Wesentlichen von<br />
Projekten wie Lin OTP [6], denen kein<br />
zweiter Kommunikationskanal für die<br />
Authentifizierung zur Verfügung steht.<br />
DELUG-DVD<br />
Auf der DELUG-DVD dieses <strong>Magazin</strong>s<br />
finden Admins ein virtuelles Image<br />
DELUG-DVD<br />
eines Ubuntu-Servers, in das sie sich mit Hilfe<br />
der Google-Authenticator-App als Anwender<br />
»gatekeeper« einloggen. Dazu nutzen sie<br />
den SSH-Key von der DELUG-DVD oder das<br />
Passwort »linux-magazin« und den QR-Code<br />
aus Abbildung 3.
www.linux-magazin.de<br />
Google Authenticator 01/2012<br />
Sysadmin<br />
79<br />
Abbildung 2: Eine Anmeldung an der SSH mit Googles Authenticator. Nach der Eingabe des Kennworts fordert<br />
der Server den Benutzer zur Eingabe des Verification-Codes auf. Beim Login mit einem Private Key erfolgt<br />
die Abfrage des Verification-Key direkt.<br />
Abbildung 1: Die Smartphone-Applikation von Google<br />
präsentiert sich aufgeräumt und zeigt oben eine<br />
TOTP-Ziffer, unten das HOTP-Eingabefeld.<br />
Weil sich im Ordner »libpam« des Mercurial-Repository<br />
auch die Quellen eines<br />
PAM-Moduls finden, lassen sich nahezu<br />
beliebige <strong>Linux</strong>-Server-Dienste absichern,<br />
auf Wunsch für einzelne User und dank<br />
PAM mit verschiedenen Methoden.<br />
Mathematik<br />
Der mathematische Algorithmus zum Berechnen<br />
des HOTP-Werts ist im RFC offen<br />
dokumentiert und basiert auf:<br />
Diese Formel addiert binär zum Schlüssel<br />
K Byte-weise 0x36 und verkettet ihn<br />
mit dem Zähler C. Aus dem Ergebnis<br />
berechnet sich der SHA1-Hash, der an<br />
die Byte-weise Addition des Schlüssels<br />
mit dem Wert 0x5c angehängt ist und<br />
von dem dann abermals der SHA1-Hash<br />
berechnet wird.<br />
Dieser String wäre eigentlich schon ein<br />
geeigneter Wert, das Abtippen durch den<br />
Benutzer erweist sich aber als zu langwierig.<br />
Daher wählt die Truncate-Funktion<br />
4 Bytes aus, aus denen per Modulo-<br />
Division durch 10 6 ein rein numerischer<br />
Wert entsteht, der auch auf Smartphones<br />
leicht einzugeben ist.<br />
Obwohl der Algorithmus komplex erscheint,<br />
kann ihn selbst einfache Hardware<br />
leicht bewerkstelligen. Alle Berechnungen<br />
sowohl für den Client auf dem<br />
Token als auch für den Server sind offline<br />
möglich, eine Verbindung zu einem Authentifizierungsserver<br />
ist nicht nötig.<br />
Ob dieses Vorgehen angesichts der Bedrohungen<br />
und der vergleichsweise<br />
schlechten Administrierbarkeit moderner<br />
Smartphones [7] in der Praxis die<br />
Sicherheit erhöht, muss jeder Admin für<br />
sich entscheiden. Für die Vertrauenswürdigkeit<br />
des Endgeräts ist in fast allen Fällen<br />
ohnehin der Benutzer zuständig, es<br />
entzieht sich immer noch dem Einfluss<br />
des Admin. Erfreulich für Datenschutzsensible<br />
Anwender ist jedoch, dass sowohl<br />
PAM-Modul als auch Smartphone-<br />
Applikation (Abbildung 1) komplett ohne<br />
Onlinekontakt zu Google auskommen.<br />
Auf dem eigenen Server<br />
Wer den Google Authenticator auf dem<br />
eigenen Server verwenden will (Abbildung<br />
2), muss zuerst das PAM-Modul<br />
kompilieren. Den Quellcode hat er mit<br />
»hg clone https://code.google.com/p/<br />
google‐authenticator/« rasch geklont.
Sysadmin<br />
www.linux-magazin.de Google Authenticator 01/2012<br />
80<br />
Jetzt finden sich im Ordner »libpam« die<br />
Sourcen des Moduls. Fürs erfolgreiche<br />
Kompilieren bedarf es des Distributionspakets<br />
»libpam« mit seinen Headern. Das<br />
optionale Paket »libqrencode« erleichtert<br />
die Einrichtung der Smartphone-Applikation.<br />
Der Quellcode ist recht kompakt<br />
und daher zügig mit einem einfachen<br />
»make« übersetzt.<br />
Weil die Authentifizierung auch auf der<br />
aktuellen Zeit basiert, sollten sowohl Server<br />
als auch Smartphone die Uhrzeit aus<br />
dem Netz beziehen, über NTP oder aus<br />
dem Mobilfunknetz.<br />
Makefile-Anpassungen für<br />
Ubuntu<br />
Auf Ubuntu-Systemen muss der Admin<br />
eventuell noch das Makefile anpassen.<br />
Es benötigt meist noch ein »‐ldl« als zusätzliche<br />
Option in der Zeile:<br />
DEF_LDFLAGS := $(shell [ `uname` = SunOS ] &&U<br />
echo ' ‐mimpure‐text') $$ $(LDFLAGS) ‐ldl<br />
Sind alle Abhängigkeiten erfüllt, sollte<br />
das Übersetzen sauber durchlaufen und<br />
den Weg für die Installation mittels »make<br />
install« frei machen, die das PAM-Modul<br />
»pam_google_authenticator.so« und die<br />
ausführbare Datei »google‐authenticator«<br />
an ihren Bestimmungsort kopiert.<br />
Deren Pfade sind leider nicht immer korrekt,<br />
bei Ubuntu Server (32 Bit) muss<br />
der Administrator danach beispielsweise<br />
noch manuell einen entsprechenden<br />
Symlink mit »ln ‐s /usr/lib/pam_google_<br />
authenticator.so /lib/i386‐linux‐gnu/<br />
security/« setzen.<br />
Google Authenticator zeigt<br />
den QR-Code am Terminal<br />
Das Programm Google Authenticator<br />
übernimmt jetzt die Rolle des Konfigurationstools,<br />
das dem Benutzer die komplexe<br />
Einrichtung und Erzeugung seines<br />
Schlüssels und der Parameter abnimmt.<br />
Jeder Benutzer muss vor dem Aktivieren<br />
einmal »google‐authenticator« aufrufen,<br />
weil es den Schlüssel erzeugt, den es<br />
dem User Base32-kodiert anzeigt und den<br />
dieser in die Google-Authenticator-App<br />
auf dem Smartphone eingibt.<br />
Ist das Modul mit der QR-Bibliothek kompiliert,<br />
dann wird es (auch in textbasierten<br />
Terminals, Abbildung 3) einen<br />
QR-Code generieren, den der Anwender<br />
mit der Smartphone-App abfotografieren<br />
kann. Außerdem zeigt der Authenticator<br />
noch fünf Notfallcodes an, die bei Verlust<br />
des Smartphones dafür sorgen, dass der<br />
Benutzer sich anmelden kann, um einen<br />
neuen Key zu erzeugen.<br />
Um den SSH-Daemon nach der Eingabe<br />
des Kennworts noch das One-Time-Passwort<br />
abfragen zu lassen, muss der Admin<br />
die PAM-Konfiguration in der Datei<br />
»/etc/pam.d/sshd« anpassen. Je nachdem,<br />
ob er vor oder nach dem Benutzerkennwort<br />
das One-Time-Passwort verlangen<br />
will, muss er die Zeile »auth required<br />
pam_google_authenticator.so« vor oder<br />
hinter der Standardzeile einfügen, bei<br />
Ubuntu beispielsweise »@include common‐account«.<br />
SSH-Server konfigurieren<br />
Den Open-SSH-Server weist eine Änderung<br />
in der »/etc/ssh/sshd_config« an,<br />
Challenge-Response-Authentifikation zu<br />
erlauben. Dazu ändert der Admin einfach<br />
den Wert von »ChallengeResponseAuthentication«<br />
von »no« auf »yes«.<br />
Jetzt ist die Zwei-Faktor-Authentifikation<br />
aktiviert. Ab diesem Moment sollte sich<br />
der Tester, der die Authentifikation per<br />
SSH auf einem entfernten Rechner konfiguriert,<br />
immer eine Rootshell zur Sicherung<br />
offen halten und die Anmeldung<br />
nur an einem zweiten Terminal testen.<br />
Anderenfalls läuft er Gefahr, sich dauerhaft<br />
aus seinem Server auszusperren.<br />
Wenn alles richtig eingerichtet ist, fragt<br />
die SSH nach dem Kennwort nun den<br />
Listing 1: »pam_proxy.c«<br />
01 /*<br />
02 This script was altered to work with an SSH‐Gatekeeper by<br />
03 Philipp Neuhaus. The original program check_user.c was<br />
04 contributed by Shane Watts.<br />
05 [Modifications by AGM and kukuk]<br />
06 */<br />
07 <br />
08 #include <br />
09 #include <br />
10 #include <br />
11 <br />
12 static struct pam_conv conv = {<br />
13 misc_conv,<br />
14 NULL<br />
15 };<br />
16 <br />
17 int main(int argc, char *argv[])<br />
18 {<br />
19 pam_handle_t *pamh=NULL;<br />
20 int retval;<br />
21 const char *user="nobody";<br />
22 if(argc == 2) {<br />
23 user = argv[1];<br />
24 }<br />
25 if(argc > 2) {<br />
26 fprintf(stderr, "Usage: pam_proxy [username]\n");<br />
27 exit(1);<br />
28 }<br />
29 <br />
30 retval = pam_start("pam_proxy", user, &conv, &pamh);<br />
31 if (retval == PAM_SUCCESS)<br />
32 retval = pam_authenticate(pamh, 0); /* is user really user? */<br />
33 if (retval == PAM_SUCCESS)<br />
34 retval = pam_acct_mgmt(pamh, 0); /* permitted access? */<br />
35 <br />
36 /* This is where we have been authorized or not. */<br />
37 <br />
38 if (retval == PAM_SUCCESS) {<br />
39 fprintf(stdout, "Authenticated\n");<br />
40 } else {<br />
41 fprintf(stdout, "Not Authenticated\n");<br />
42 }<br />
43 if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close <strong>Linux</strong>‐PAM */<br />
44 pamh = NULL;<br />
45 fprintf(stderr, "check_user: failed to release authenticator\n");<br />
46 exit(1);<br />
47 }<br />
48 <br />
49 return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */<br />
50 }
Verification-Code ab und gibt nach der<br />
korrekten Eingabe die Shell frei.<br />
Ist dies trotz korrektem Code nicht der<br />
Fall, findet der Admin in den SSH- oder<br />
Auth-Logs, etwa in »/var/log/auth.log«,<br />
nützliche Hinweise auf den Fehler. Eine<br />
häufige Ursache ist, dass ein Anwender<br />
»google‐authenticator« noch nicht oder<br />
nicht richtig aufgerufen hat. Ebenfalls<br />
hilfreich kann es sein, mit der richtigen<br />
PAM-Konfiguration den Einsatz auf wenige<br />
User zu beschränken. Alternativ<br />
liegt unter [8] ein Patch bereit, das vor<br />
allem in der Migrationsphase dienlich ist:<br />
Es sorgt dafür, dass das PAM-Modul den<br />
Verification-Code nur abfragt, wenn eine<br />
Konfigurationsdatei namens ».google‐authenticator«<br />
im Homeverzeichnis des Benutzers<br />
vorhanden ist.<br />
Leider funktioniert die Anmeldung mit<br />
Public Key und Zwei-Faktor-Authentifizierung<br />
nur, wenn sich der Benutzer mit<br />
einem Kennwort anmeldet.<br />
Kniffliges Zusammenspiel<br />
mit Public Keys<br />
Beim Anmelden über den öffentlichen<br />
Schlüssel übergeht der Open-SSH-Daemon<br />
die PAM-Konfiguration komplett<br />
und gibt die Shell ohne Abfrage des<br />
zusätzlichen Codes frei. Dies ist jedoch<br />
kein Fehler, sondern liegt daran, dass die<br />
Public-Key-Authentifizierung per Definition<br />
das eigentliche Standardverfahren<br />
ist. Durch die Absicherung der Clientseitigen<br />
privaten Schlüssel mit einer Passphrase<br />
ist dieses Verfahren bereits sehr<br />
sicher, allerdings ist es nicht möglich,<br />
diese Verschlüsselung für den Client zu<br />
erzwingen. Auch hier kann die Zwei-Faktor-Authentifizierung<br />
hilfreich sein.<br />
Um auch bei der Anmeldung mit dem<br />
Public Key den Verification-Code abfragen<br />
zu können, bedienen sich Admins<br />
eines Tricks: Sie zwingen die SSH dazu,<br />
statt der Shell des Benutzers einen Gatekeeper<br />
zu starten, der wiederum eine<br />
PAM-Abfrage startet. Nach erfolgreichem<br />
Login startet der Gatekeeper die eigentliche<br />
Shell, sonst beendet er die Sitzung.<br />
Gatekeeper<br />
Ein solcher Gatekeeper findet sich unter<br />
[9], doch benötigt er für den Einsatz<br />
mit dem PAM-Modul von Google noch<br />
ein paar Modifikationen. Eine angepasste<br />
Version findet sich im Git-Repository<br />
[10], auf der virtuellen Ubuntu-Server-<br />
Maschine der DELUG-DVD ist sie für<br />
einen User (»gatekeeper«) beispielhaft<br />
eingerichtet. Das Gatekeeper-Skript ruft<br />
Google Authenticator 01/2012<br />
Sysadmin<br />
www.linux-magazin.de<br />
81<br />
Listing 2: »ssh_gatekeeper.sh«<br />
01 #/bin/bash<br />
02 ## Calomel.org ssh_gatekeeper.sh<br />
03 #<br />
04 ## This script is run by the ForceCommand directive in the sshd_config.<br />
05 ## It expects the user SSH'ing to the box to answer the $QUERY question<br />
06 ## before being allowed a shell. Permissions of this script should be<br />
07 ## owned by root and executable by all other users (chmod 755)". Rsync,<br />
08 ## sftp and sshfs are allowed through, but scp is denied.<br />
09 <br />
10 ## Disconnect clients who try to quit the script (Ctrl‐c)<br />
11 trap jail INT<br />
12 jail()<br />
13 {<br />
14 kill ‐9 $PPID<br />
15 exit 0<br />
16 }<br />
17 <br />
18 ## Allow SSH. Clients can ssh to the box and then answer the $QUERY<br />
question.<br />
19 if [ ‐z "$SSH_ORIGINAL_COMMAND" ];<br />
20 then<br />
21 ## This is the question the client needs to know the answer to. Here we<br />
22 ## are asking for the current minute, day of the month and hour<br />
23 ## (24‐hour time). If the date is "Mon Jan 10 13:25:00 EST 2020"<br />
24 ## then the answer is "251013"<br />
25 QUERY=`date +%M%d%H`<br />
26 <br />
27 ### The welcome message. This can be helpful or completely arbitrary<br />
28 ### depending on your user. Here we use a random quote as we are<br />
29 ### expecting the user to already know the question.<br />
30 echo ""<br />
31 echo " All truths are easy to understand once they are"<br />
32 echo " discovered; the point is to discover them."<br />
33 echo " ‐Galileo Galilei"<br />
34 echo ""<br />
35 <br />
36 ### The Decision<br />
37 ### If the answer is correct give the user their shell.<br />
38 ### If the answer is wrong, log the attempt and kill the connection.<br />
39 pam=`pam_proxy $USER`<br />
40 if [ $? ‐eq 0 ];<br />
41 then<br />
42 echo 'Authenticated'<br />
43 $SHELL ‐l<br />
44 exit 0<br />
45 else<br />
46 logger "ssh_gatekeeper $USER login failed from $SSH_CLIENT"<br />
47 echo 'Authentication falied'<br />
48 kill ‐9 $PPID<br />
49 exit 0<br />
50 fi<br />
51 fi<br />
52 <br />
53 ## Allow RSYNC. Rsync can not be used with the question above.<br />
54 ## We need to let the command though so our shell environment is clean.<br />
55 if [ `echo $SSH_ORIGINAL_COMMAND | awk '{print $1}'` = rsync ];<br />
56 then<br />
57 $SHELL ‐c "$SSH_ORIGINAL_COMMAND"<br />
58 exit 0<br />
59 fi<br />
60 <br />
61 ## Allow sftp and sshfs. Make sure the path to your sftp‐server binary<br />
62 ## is correctly expressed below. We need to let the command though so<br />
63 ## our shell environment is clean.<br />
64 if [ `echo $SSH_ORIGINAL_COMMAND | awk '{print $1}'` =<br />
"/usr/lib/openssh/sftp‐server" ];<br />
65 then<br />
66 $SHELL ‐c "$SSH_ORIGINAL_COMMAND"<br />
67 exit 0<br />
68 fi<br />
69 <br />
70 ## Default deny. This is the last command to catch all other command<br />
71 ## input. If the client tries to use anything other than ssh or rsync<br />
72 ## the connection is dropped. SCP is denied.<br />
73 kill ‐9 $PPID<br />
74 exit 0
Sysadmin<br />
www.linux-magazin.de Google Authenticator 01/2012<br />
82<br />
Abbildung 3: Vor der ersten Anmeldung muss ein Anwender das<br />
Programm Google Authenticator einmal starten und den QR-Code<br />
einscannen. Ab dann ermöglichen die von der Android-App erzeugten<br />
Ziffern das Login.<br />
das Programm »pam_proxy« auf, das mit<br />
dem PAM-Backend kommuniziert.<br />
Übersetzen<br />
Die Datei »pam_proxy.c« aus Listing 1<br />
lässt sich einfach mit »gcc ‐o pam_proxy<br />
pam_proxy.c ‐lpam ‐lpam_misc« übersetzen.<br />
Das Kompilat »pam_proxy« und<br />
die »ssh_gatekeeper.sh« sollte der Admin<br />
nach »/usr/sbin« oder »/usr/local/sbin«<br />
kopieren, wo es für Root verfügbar ist.<br />
Auch für »pam_proxy« muss in »/etc/<br />
pam.d« eine funktionierende Konfiguration<br />
vorliegen. Im einfachsten Fall enthält<br />
sie nur die Zeile »auth required pam_<br />
google_authenticator.so«.<br />
Mit den richtigen PAM-Einstellungen<br />
kann ein Benutzer »pam_proxy« an der<br />
Konsole aufrufen und nach der Aufforderung<br />
das aktuelle TOTP eingeben. Ist die<br />
Konfiguration korrekt, gibt der Rechner<br />
»Authenticated« aus, bei falscher Konfiguration<br />
oder falschem TOTP ein wenig<br />
überraschendes »Not authenticated«.<br />
Für die Zusammenarbeit<br />
des Gatekeeper mit Diensten<br />
wie der SSH gibt es<br />
zwei Möglichkeiten: Eine<br />
wäre es, den SSH-Gatekeeper<br />
als »ForceCommand«<br />
in der »sshd_config« anzugeben.<br />
Dann ist jeder Benutzer<br />
– systemweit – dazu<br />
gezwungen, bei der Anmeldung<br />
TOTPs anzugeben.<br />
Sollen sich auch Backupoder<br />
andere Skripte von anderen<br />
Rechnern automatisiert<br />
anmelden können, ist<br />
die Pam-Konfiguration in<br />
»pam_ proxy« so zu ändern,<br />
dass sie diese Benutzer von<br />
der erzwungenen erweiterten<br />
Authentifikation ausnimmt.<br />
Alternativ lässt sich der<br />
Zwang zur Zwei-Faktor-<br />
Authentifizierung auch<br />
noch in einer benutzerspezifischen<br />
»authorized_<br />
keys«-Datei konfigurieren.<br />
Ausnahmen<br />
Um dies zu erreichen, platziert<br />
der Administrator in<br />
»~/.ssh/authorized_keys« des gewünschten<br />
Benutzers vor dem SSH-Pub-<br />
Key das auszuführende Kommando<br />
»COMMAND="/usr/local/bin/ssh_gatekeeper.sh"<br />
ssh‐rsa AAAAB3 [...]«. Das<br />
sorgt dafür, dass der Daemon statt der<br />
eigentlichen Shell des Benutzers zuerst<br />
das Gatekeeper-Skript startet. Ist die<br />
PAM-Authentifizierung erfolgreich, startet<br />
die Shell, andernfalls kappt der SSH-<br />
Server die Verbindung. Listing 2 zeigt<br />
das ganze Skript.<br />
Neben der Anmeldung an der Shell sind<br />
aber auch andere Anwendungen besonders<br />
schützenswert. Dazu zählen zum<br />
Beispiel Fernwartungswerkzeuge wie<br />
PHP My Admin, aber auch Benutzerkonten<br />
bei Foren oder anderen <strong>Web</strong>anwendungen.<br />
Dank der Standardisierung in<br />
zwei RFCs existieren mehrere Bibliotheken,<br />
die das ermöglichen.<br />
Für Java liefert das RFC den nötigen<br />
Code als Referenzimplementation bereits<br />
mit. Dabei ist darauf zu achten, dass<br />
die Smartphone-Applikation von Google<br />
den Key als Base32-kodierten String erwartet,<br />
die Java-Bibliothek ihn aber als<br />
Hex-String verarbeitet. Auch für PHP gibt<br />
es bereits eine funktionierende Implementierung.<br />
Ein richtiger Schritt<br />
Obwohl alle Grundlagen vollständig<br />
frei verfügbar sind, nutzen bisher nur<br />
wenige Admins die Möglichkeiten einer<br />
erweiterten Authentifizierung. Komplexität<br />
und Preismodelle der kommerziellen<br />
Produkte schrecken wahrscheinlich<br />
viele von ihnen noch ab. Für das Unix-<br />
Umfeld hat Google mit seinem flexiblen<br />
und standardkonformen PAM-Modul und<br />
den zugehörigen Apps aber schon einen<br />
wichtigen ersten Schritt in die richtige<br />
Richtung getan. (mfe)<br />
n<br />
Infos<br />
[1] Felix Kronlage, Markus Feilner, „Magisches<br />
Leuchten“: <strong>Linux</strong>-<strong>Magazin</strong> 12/10, S. 40<br />
[2] RFC 4226:<br />
[http:// tools. ietf. org/ html/ rfc4226]<br />
[3] Draft zum TOTP-Algorithmus:<br />
[http:// tools. ietf. org/ id/<br />
draft‐mraihi‐totp‐timebased‐06. txt]<br />
[4] Google-Hilfe: [http:// www. google. com/<br />
support/ accounts/ bin/ static. py? page=<br />
guide. cs& guide=1056283& topic=1056284]<br />
[5] Google Code Repository: [http:// code.<br />
google. com/ p/ google‐authenticator/]<br />
[6] Michael Kromer, „Doppelt gesichert“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 02/10, S. 68<br />
[7] Markus Feilner, „Schwächstes Glied“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 10/11, S. 54<br />
[8] Patch <strong>fürs</strong> PAM-Modul:<br />
[http:// code. google. com/ p/<br />
google‐authenticator/ issues/ detail? id=32]<br />
[9] SSH-Gatekeeper-Skript:<br />
[https:// calomel. org/ openssh. html]<br />
[10] GIT-Repository mit dem modifizierten<br />
Gatekeeper- und PAM-Skript: [https://<br />
github. com/ TeGuy/ 2‐Factor‐Auth]<br />
Der Autor<br />
Philipp Neuhaus arbeitet<br />
gegenwärtig in der medizinischen<br />
Informatik und ist<br />
nebenbei seit zehn Jahren in<br />
der Open-Source-Community<br />
unterwegs. Neben offenen<br />
Softwareprojekten interessiert er sich auch für<br />
offene Hardware.
Ein Roboter,<br />
der was macht?!<br />
Zitter doch<br />
nicht so!<br />
Wenn ich das<br />
nur früher<br />
gewusst hätte...<br />
Gut zu wissen!<br />
Und das geht<br />
wirklich?<br />
Das beste<br />
Betriebssystem<br />
So sieht die<br />
Zukunft aus!
Sysadmin<br />
www.linux-magazin.de Suse Cloud 01/2012<br />
84<br />
Suses neues Cloud-Produkt im Kurztest<br />
Grünes Erwachen<br />
Auch Suse springt auf den Cloud-Zug auf und bietet mit der Suse Cloud ein Open-Stack-basiertes Produkt an,<br />
das Kunden mit grafischen Konfigurationstools und einer Admin-App für Android ködern soll. Ob es sich lohnt,<br />
die Wolke im typischen Nürnberger Grün anzuschaffen, zeigt dieser Artikel. Martin Gerhard Loschwitz<br />
© Sergiy Trofimov, 123RF<br />
Kein Thema dominiert die IT-Landschaft<br />
derzeit so stark wie das Cloud Computing.<br />
Neue Produkte <strong>fürs</strong> Wolkenmanagement<br />
schießen wie Pilze aus dem Boden,<br />
immer umfassender werden die Cloudlösungen<br />
auf dem Markt. Suse nutzte seine<br />
hausinterne Konferenz Brainshare 2011<br />
[1] in Salt Lake City, um sein wolkiges<br />
Engagement zu verkünden. Michael Miller,<br />
bei Suse sowohl für den Bereich der<br />
Partnerschaften wie auch für das Marketing<br />
verantwortlich, erläuterte eine umfassende<br />
Strategie, mit der das Unternehmen<br />
den Rechenzentren das Einrichten<br />
von Clouds erleichtern will.<br />
Durchaus ernst gemeint<br />
Und um gar nicht erst den Eindruck entstehen<br />
zu lassen, Suse meine es mit dem<br />
Thema nicht wirklich ernst, lieferte Miller<br />
Handfestes: Images mit einer Testversion<br />
von Suses Cloud standen schon während<br />
der Ankündigung im Suse Studio bereit<br />
[2]. Das Preisgefüge ist dagegen noch<br />
unklar. Natürlich will kein Hersteller den<br />
Wolken-Hype verschlafen. Das gilt umso<br />
mehr für die Produzenten von Betriebssystemen<br />
– besonders im Enterprise-Segment,<br />
also in einem Teich, in dem Suse<br />
traditionell gerne fischt.<br />
Andererseits ist die zunehmende Verwolkung<br />
der IT für die Hersteller von<br />
<strong>Linux</strong>-Systemen und deren klassische<br />
Supportmodelle aber auch eine nicht<br />
zu unterschätzende Gefahr. Bisher galt:<br />
Wer Systeme mit <strong>Linux</strong> betreibt, schließt<br />
meist einen Supportvertrag ab, um im<br />
Falle eines Problems Hilfe zu bekommen.<br />
In der Regel waren das vor allem Probleme,<br />
die aus der Kombination von <strong>Linux</strong><br />
mit bestimmter Hardware folgten.<br />
In der Cloud müssen sich Unternehmen<br />
aber mit diesen klassischen Problemen<br />
von IT-Setups nur mehr am Rande befassen.<br />
Die Umgebungen, die KVM und<br />
Xen auf <strong>Linux</strong> bieten, sind wohlbekannt<br />
und verfügen über eine ausgezeichnete<br />
<strong>Linux</strong>-Unterstützung. Wer seine Dienste<br />
in die Cloud migriert, entscheidet sich daher<br />
zunehmend für ein System ohne Supportvertrag<br />
(meist Debian oder Ubuntu),<br />
dafür aber mit regelmäßigen Updates<br />
ohne Zusatzkosten.<br />
Für Probleme auf Hardware- und Hostsystem-Ebene<br />
ist dann der Cloudanbieter<br />
zuständig. So geht den etablierten<br />
Distributoren einiger Umsatz durch die<br />
Lappen, denn statt etlicher Subscriptions<br />
gehen nur noch ein paar Abos für die<br />
Hostsysteme über die Ladentheke. Es ist<br />
insofern nicht verwunderlich, dass die<br />
Systemintegratoren verstärkt um Cloudanbieter<br />
werben und probieren, hier den<br />
Fuß in die Türe zu kriegen.<br />
SLES 11 als Grundlage<br />
Wie macht ein Distributor einem Unternehmen<br />
aber den Aufbau einer Cloud<br />
schmackhaft? Das Stichwort heißt Integration.<br />
Was für die Cloudbenutzer mit<br />
scheinbar spielerischer Leichtigkeit funktioniert,<br />
setzt auf Systemebene einiges an<br />
Arbeit voraus: Das Anlegen neuer Images<br />
und virtueller Maschinen, das Buchen<br />
zusätzlicher Rechenpower und die Erweiterung<br />
von Plattenplatz per <strong>Web</strong>interface<br />
bedingen diverse Arbeitsschritte<br />
im Hintergrund.<br />
Schafft es der Distributor, der IT-Abteilung<br />
einer Firma diese Arbeit abnehmen,<br />
dann bringt er sich gut in Stellung. Und<br />
genau hier setzt Suses neues Produkt an:<br />
die Suse Cloud. Als Grundsystem dient
Abbildung 1: Tenants (Kunden) und User, also Benutzer, lassen sich mit Suses Cloud zentral verwalten.<br />
der Suse <strong>Linux</strong> Enterprise Server (SLES).<br />
Das ist für den Distributor nützlich, weil<br />
er so nicht noch ein zusätzliches Basissystem<br />
pflegen muss und sich auch kein<br />
neues Konkurrenzprodukt im eigenen<br />
Haus schafft.<br />
Das Herzstück der Suse Cloud und somit<br />
das eigentliche Killer-Feature ist Open<br />
Stack [3]. Das Cloud-Framework, das aus<br />
der Kooperation des <strong>Web</strong>hosters Rackspace<br />
mit der Weltraumbehörde Nasa entstand,<br />
bietet die Infrastruktur, um Cloudtypische<br />
Aufgaben zu erledigen [4].<br />
Open Stack<br />
Open Stack besteht aus drei Komponenten,<br />
aus denen sich Kunden schnell eine<br />
neue virtuelle Instanz zusammenklicken,<br />
und beinhaltet die Verwaltung für Imagefiles<br />
namens Glance. Dazu kommen Swift<br />
und Nova, die die Verwaltung der vorhandenen<br />
Ressourcen zusammen abwickeln.<br />
Ersteres sorgt für redundanten<br />
Datenspeicher in der Wolke, das zweite<br />
kümmert sich um das Verteilen der virtuellen<br />
Maschinen auf die Hardware, die<br />
der Cloud zur Verfügung stehen.<br />
Der Haken: Die einzelnen Open-Stack-<br />
Dienste erfordern eine umfangreiche<br />
Konfiguration. Eine im Netz kursierende<br />
Installationsanleitung für Ubuntu [5] erstreckt<br />
sich über mehrere Bildschirmseiten.<br />
Der Aufbau einer Cloud ist mit Open<br />
Stack also alles andere als leicht.<br />
Die Suse Cloud dagegen soll laut Hersteller<br />
die Open-Stack-Komponenten in SLES<br />
nahtlos integrieren und den Administratoren<br />
von SLES-Systemen einen großen<br />
Teil der Setup-Arbeit abnehmen. Mit dem<br />
Versprechen „Cloud-Stack installieren<br />
und loslegen“ will Suse Unternehmen<br />
in die Wolke locken. Um auch die letzten<br />
kritischen Stimmen verstummen zu<br />
lassen, setzt Suse auf die Open-Stack-<br />
Version Diablo, die erst kürzlich erschien<br />
und ein renoviertes <strong>Web</strong>interface mit vielen<br />
neuen Funktionen bringt [6].<br />
Erste Eindrücke<br />
Wer sich einen Überblick über die auf<br />
der Brainshare vorgestellte <strong>Vorschau</strong> verschaffen<br />
will, hat mehrere Optionen. Alle<br />
für den Betrieb der Cloudumgebung notwendigen<br />
Pakete finden sich einerseits im<br />
Build Service von Open Suse unter [7].<br />
Sie lassen sich auf SLES 11 SP1 oder auch<br />
Open Suse 11.4 installieren, bequemer<br />
sind aber die vorgefertigten Images. Nach<br />
der Anmeldung im Suse Studio steht eine<br />
».img«-Datei für USB-Sticks sowie eine<br />
bootbares ISO-Datei bereit.<br />
Für die Installation auf einem Computer<br />
ist das ISO-File wohl die einfachste<br />
Variante. Es bringt einen sehr schlanken<br />
SLES, der im Textmodus durch die Installation<br />
führt und schließlich ein lauffähiges<br />
Suse-Cloud-System erzeugt. Der<br />
Yast-Installer kommt ohne Partitionierer<br />
daher und überschreibt stets den Inhalt<br />
der ersten Platte, die er findet, etwas<br />
Vorsicht ist also geboten.<br />
Das Preview-Image installiert keine grafische<br />
Oberfläche, sodass im Anschluss an<br />
die Installation nur der Login als Root am<br />
Terminal möglich ist. Zuvor prangt auf<br />
dem Bootscreen gut sichtbar ein »Powered<br />
by Open-Stack«-Logo, das auch auf<br />
der Kommandozeile den ansonsten typischen<br />
Pinguin oben links verdrängt. Das<br />
Passwort für »root« lautet »openstack«.<br />
Das Login am System ist für den Admin<br />
aber letztlich nur von wenig Interesse,<br />
denn der zentrale Dreh- und Angelpunkt<br />
für Sysadmins bei Cloudlösungen ist<br />
das <strong>Web</strong>interface, das Open Stack Dashboard.<br />
Es ist mit jedem Standardbrowser<br />
nach der Installation unter der IP des<br />
Testsystems zu erreichen. (Logindaten:<br />
»admin« und »openstack«).<br />
Open Stack Dashboard<br />
Nach dem Anmelden grüßt freundlich<br />
das Open Stack Dashboard, das Suse in<br />
der aktuellen Version optisch gründlich<br />
überarbeitet hat und das nun wesentlich<br />
mehr Optionen unter seiner Oberfläche<br />
vereint. Mit grundlegenden Modifikationen<br />
hat sich Suse dagegen bisher zurück-<br />
Abbildung 2: Fünf Flavors sind ab Werk definiert, neue fügt der Admin per Mausklick im Dashboard hinzu.<br />
Suse Cloud 01/2012<br />
Sysadmin<br />
www.linux-magazin.de<br />
85
Sysadmin<br />
www.linux-magazin.de Suse Cloud 01/2012<br />
86<br />
gehalten, das Dashboard ist technisch<br />
praktisch unverändert. Damit bleibt es<br />
allerdings auch hinter der Version zurück,<br />
die die Keynote präsentierte.<br />
Ansichten, Flavors, Tenants,<br />
Kunden und Verwaltung<br />
Das jetzt erhältliche Dashboard kennt<br />
zwei Ansichtsarten, nämlich das »User<br />
Dashboard« und das »System<br />
Panel«. Mit dem zweiten legen<br />
Administratoren neue Cloudbenutzer<br />
an, verwalten vorhandene<br />
Images und schaffen neue<br />
VM-Instanzen. Hinzu kommen<br />
noch statistische (Monitoring-)<br />
Funktionen, mit deren Hilfe die<br />
Cloudverwalter den Überblick<br />
behalten.<br />
In Open Stack gibt es Kunden<br />
(Tenants, Abbildung 1) und<br />
Benutzer (User), die einzelnen<br />
Tenants zugeordnet sind. Für jeden<br />
Benutzer kann der Admin<br />
einstellen, welche Rolle ihm<br />
zukommen soll und welche Berechtigungen<br />
ihm zustehen. So<br />
wird es möglich, dass Kunden<br />
ihre virtuellen Maschinen selbst<br />
verwalten, ohne dass ein Cloud-<br />
Admin sich um die Details kümmern<br />
muss.<br />
Images und CLI<br />
Das Open-Stack-Imagesystem<br />
bildet die Grundlage für den Betrieb<br />
von virtuellen Maschinen.<br />
Über den Menüpunkt »Images«<br />
sehen die Admins der Wolke,<br />
welche Abbilddateien verfügbar<br />
sind. Eine Funktion, um aus dem<br />
<strong>Web</strong>interface heraus neue Images<br />
hinzuzufügen, existiert im<br />
Augenblick noch nicht, da hilft<br />
nur der Rückgriff auf die Kommandozeile.<br />
Aus der Menge vorhandener<br />
Images können Benutzer eines<br />
wählen, um es in einer neuen<br />
Instanz zu starten. Hier kommen<br />
die Flavors ins Spiel, also<br />
vorgefertigte Hardwareprofile<br />
für virtuelle Maschinen (Abbildung<br />
2). Die Nutzer haben beim<br />
Starten einer neuen Instanz die<br />
Möglichkeit, im Dashboard einen Flavor<br />
auszuwählen, der die Hardware für ihre<br />
neue Instanz definiert.<br />
Der Suse Manager<br />
Auch für Benutzer hält das Dashboard<br />
einige interessante Funktionen bereit. Die<br />
»Image«-Seite listet auf, welche Images<br />
die Wolke bereitstellt. Über »Instances«<br />
lässt sich eine neue virtuelle Maschine<br />
starten, die eines der Images verwendet.<br />
Per Klick ist von hier aus die Konsole des<br />
virtuellen Systems erreichbar, was dessen<br />
Konfiguration auch ohne SSH-Verbindung<br />
möglich macht.<br />
Notwendig ist das in der Regel jedoch<br />
nicht: Generiert ein Benutzer im Dashboard<br />
beim Punkt »Keys« (Abbildung 3)<br />
einen neuen Schlüssel oder fügt er mit<br />
Der perfekte Auftritt macht<br />
unseren Erfolg: auf dem Laufsteg<br />
und im <strong>Web</strong>.<br />
STRATO Hosting<br />
Für Anwender mit hohen Ansprüchen<br />
Ihre <strong>Web</strong>site mit echten Profi-Features<br />
Bis zu 12 Domains und 10.000 MB Speicher<br />
Unlimited Traffic und 20 MySQL-Datenbanken<br />
Profi-Features: PHP, Perl, Python und Ruby 8<br />
Erfolgreicher durch einzigartige <strong>Web</strong>site-Gestaltungtaltung<br />
Persönliche<br />
<strong>Web</strong>site-Designs<br />
Individuelle<br />
Texte<br />
Stefan Klos<br />
Professionelle<br />
Videos<br />
* Alle PowerPlus-Pakete 3 Monate 0 €/mtl., danach PowerPlus 6,90 € mtl., PowerPlus L 14,90 €/mtl. und PowerPlus XL<br />
24,90 €/mtl. Einrichtungsgebühr 14,90 €. Mindestvertragslaufzeit 6 Monate. Preise inkl. MwSt.<br />
STR1211_DE_AZ_PowerHosting_270x190,5_v2 1
»Import« einen neuen Key hinzu, so wird<br />
dieser beim Booten der neuen Instanz<br />
von Open Stack automatisch in der virtuellen<br />
Maschine installiert. Wenn das<br />
Image selbst einen SSH-Server enthält,<br />
ist nach dem Start der VM also auch ein<br />
SSH-Login möglich.<br />
Die Freitags-Keynote zur Brainshare<br />
enthielt noch eine weitere Überraschung:<br />
eine Android-App (Abbildung 4) für den<br />
mobilen Zugriff auf den Suse Manager.<br />
Suses Manager-Produkt (Abbildung 5,<br />
[8]) soll es Admins insgesamt leichter<br />
machen, die vorhandenen Systeme zu<br />
warten. Besonders die ferngesteuerten<br />
Updates und das Sammeln von Laufzeitinformationen<br />
sind die Aufgabe von<br />
Suse Manager. Am ehesten lässt sich der<br />
Funktionsumfang mit dem des Red Hat<br />
Network Satellite vergleichen. Auch die<br />
Stefan Klos<br />
www.famepr.de<br />
Erstellt mit dem PowerPlus-Paket<br />
Power Hosting<br />
schon ab<br />
AKTION BIS<br />
31.12.2011!<br />
Jetzt bestellen unter: strato.de / hosting<br />
Servicetelefon: 0 18 05 - 055 055<br />
(0,14 €/Min. aus dem dt. Festnetz, Mobilfunk max. 0,42 €/Min.)<br />
*<br />
€/Mon.*<br />
für 3 Monate<br />
Suse Cloud besitzt eine Anbindung an<br />
den Manager; eine neue Instanz in der<br />
Cloud erscheint als System automatisch<br />
auch im Suse Manager.<br />
Eine Android-App steuert<br />
den Suse Manager<br />
Komplett macht das geplante Portfolio<br />
aber erst besagte Android-App [9]), die<br />
der Entwickler James Tan während<br />
der Brainshare erstmals<br />
öffentlich vorführte. Mit ihr lassen<br />
sich vom Smartphone aus<br />
System-Updates über den Suse<br />
Manager einspielen und zusätzliche<br />
Statusinformationen<br />
herausfinden. Suse verspricht<br />
Admins damit, dass sie immer<br />
und überall einsatzbereit sein<br />
können.<br />
Dass Suse das noch recht junge<br />
Manager-Produkt mit seinen<br />
anderen Diensten vernetzen<br />
will, ist nur konsequent. Allerdings<br />
dürfte der Einstiegspreis<br />
viele mögliche Kunden abschrecken:<br />
Die Manager-Lizenz allein<br />
schlägt mit über 13 000 Euro zu<br />
Buche und für jeden Virtualisierungsknoten<br />
kommen noch mal<br />
knapp 200 Euro hinzu.<br />
Fazit<br />
Die vorgestellte Preview für<br />
die Suse Cloud vermittelt einen<br />
Einruck davon, wie Suse<br />
Unternehmen die eigene Cloud<br />
schmackhaft machen will. Der<br />
Kern der Idee ist offensichtlich,<br />
die Installation von Open Stack<br />
so einfach und komfortabel wie<br />
möglich zu gestalten.<br />
Bis das so weit ist, wird allerdings<br />
noch einige Zeit vergehen<br />
– Suse erhebt nicht den Anspruch,<br />
dass die jetzt vorgestellten<br />
Pakete in irgendeiner Form<br />
alltagstauglich wären. Letztlich<br />
handelt es sich bisher um kaum<br />
mehr als für Suse vorbereitete<br />
Open-Stack-Pakete.<br />
Die finale Version soll auf Open<br />
Stack Essex basieren, das am 5.<br />
April 2012 verfügbar sein soll.<br />
Für die Fertigstellung der Suse<br />
Suse Cloud 01/2012<br />
Sysadmin<br />
www.linux-magazin.de<br />
87<br />
14.11.11 19:17
Sysadmin<br />
www.linux-magazin.de Suse Cloud 01/2012<br />
88<br />
Abbildung 3: Schlüsselerzeugung leicht gemacht mit Suses Cloud: Im <strong>Web</strong>interface gibt der Admin den<br />
Key ein, mit dem er später per SSH auf die neue virtuelle Maschine zugreifen will.<br />
Cloud kursieren verschiedene Daten, vor<br />
dem nächsten Frühjahr dürfte aber nicht<br />
damit zu rechnen sein.<br />
Denn einerseits hält Suse die aktuelle<br />
Diablo-Version nicht für marktreif – man<br />
habe nur jetzt schon Pakete veröffentlicht,<br />
um die Unterstützung für Open<br />
Stack deutlich zu zeigen, so heißt es. Andererseits<br />
ist die Liste von Features, die<br />
bis dahin noch ihren Weg in das Produkt<br />
finden sollen, beträchtlich. Die Cloudumgebung<br />
soll zum Beispiel vollkommen<br />
Infos<br />
[1] Brainshare 2011:<br />
[http:// www.novell.com/brainshare/suse]<br />
[2] Download-<strong>Web</strong>site im Suse Studio:<br />
[http:// susestudio. com/ a/ vszMWq/<br />
suse‐cloud‐powered‐by‐openstacktm]<br />
[3] Open Stack: [http:// www. openstack. org]<br />
[4] Stefan Seyfried, Christian Berendt, „Cactus<br />
im Anmarsch“: <strong>Linux</strong>-<strong>Magazin</strong> 05/11, S. 72<br />
[5] Open Stack Bexar auf Ubuntu: [http:// docs.<br />
openstack. org/ bexar/ openstack‐compute/<br />
admin/ content/ ch03s02. html]<br />
[6] Martin Loschwitz, „Dunkle Wolken“:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 12/11, S. 22<br />
[7] Pakete für andere Systeme:<br />
[http:// download. opensuse. org/<br />
repositories/ Virtualization:/ Cloud:/<br />
Open%20Stack:/ Diablo/]<br />
[8] Markus Feilner, „Cebit 2011: Suse Manager<br />
– Spacewalk für SLES“:<br />
[http:// www. linux‐magazin. de/ NEWS/ Cebit‐<br />
2011‐Suse‐Manager‐Spacewalk‐fuer‐SLES]<br />
[9] Videos zur Android-App für den Suse Manager:<br />
[http:// www. youtube. com/ watch?<br />
v=_L2NHF5SVm0# t=7m20s]<br />
App bei Redaktionsschluss<br />
noch nicht<br />
verfügbar. Suse will<br />
sich noch nicht in<br />
die Karten schauen<br />
lassen.<br />
Völlig unklar ist<br />
bisher auch, in welcher<br />
Weise Suse das<br />
neue Produkt nach<br />
seiner Fertigstellung<br />
vermarkten möchte.<br />
Abbildung 4: Suse arbeitet Denkbar wäre, dass<br />
an einer Android-App, mit es als Extension<br />
der sich der Suse Manager<br />
von überall aus einsetzen<br />
lassen soll.<br />
firmiert, so wie es<br />
schon jetzt die High-<br />
Availability-Erweiterung<br />
vormacht. Gut<br />
agnostisch im Hinblick auf den verwendeten<br />
Hypervisor sein, also sowohl KVM<br />
als auch Xen unterstützen – und auch diverse<br />
proprietäre Produkte wie VMwares<br />
Virtualisierungsplatzhirsch V-Sphere.<br />
möglich ist aber auch, dass Novell ein<br />
fertiges Paket schnürt, das zwar auf SLES<br />
basiert, aber separat vermarktet wird. Die<br />
Details wollen die Franken erst nächstes<br />
Jahr bekanntgeben. Wer eine grüne<br />
Wolke auf Suse-Basis plant, darf also gespannt<br />
sein. (mfe)<br />
n<br />
Vorreiter dank Android<br />
Die angepriesene Android-App, mit der<br />
Administratoren Suse-Instanzen in der<br />
Cloud fernsteuern können, ist zweifellos<br />
interessant. Zwar ist der Suse Manager<br />
nicht Cloud-spezifisch. Die Möglichkeit,<br />
virtuelle SLES-Instanzen per Handy aus<br />
der Ferne zu steuern, könnte aber dennoch<br />
ein guter Grund dafür sein, auch in<br />
der Wolke auf SLES zu setzen – zumindest<br />
für liquide Kunden. Leider war die<br />
Der Autor<br />
Martin Gerhard Loschwitz<br />
arbeitet als Principal Consultant<br />
bei der Firma Hastexo.<br />
Er beschäftigt sich dort<br />
unter anderem intensiv mit<br />
Lösungen für Hochverfügbarkeit.<br />
In seiner Freizeit pflegt er den <strong>Linux</strong>-<br />
Cluster-Stack für Debian GNU/<strong>Linux</strong>.<br />
Abbildung 5: Der Suse Manager dient zur zentralen Steuerung der eigenen Serverlandschaft. Mit ihm spielen<br />
Admins Updates ein, ähnlich wie bei Red Hats Satellite-Servern.
Entdecken Sie Open Source auf der CeBIT 2012<br />
Open Source Forum, Park und Project Lounge<br />
Besuchen Sie das größte Business-Event Europas für freie Software<br />
Profitieren Sie von internationalen Kontakten und qualifizierten Fachgesprächen<br />
Informieren Sie sich über aktuelle Trends und Themen im Open Source Forum<br />
6.–10. MÄRZ 2012 • HANNOVER<br />
Heart of the digital world<br />
Deutsche Messe AG • Messegelände • Hannover, Germany • Tel. +49 511 89-0<br />
cebit.com
Sysadmin<br />
www.linux-magazin.de Fog 01/2012<br />
90<br />
Im Test: Zentrales PC-Deployment mit Fog<br />
Nebel – gut <strong>fürs</strong> Image<br />
Fog nennt sich ein Admin-System, das auf Zuruf Festplattenkopien von PCs anfertigt, verwaltet, administrieren<br />
hilft und über einen ganzen PC-Pool verteilt. Das Ganze gehört nicht in den Dunstkreis der Virtualisierung,<br />
sondern schaltet per PXE ein Menü vor das Betriebssystem auf der lokalen Festplatte. Konstantin Agouros<br />
© no more lookism, photocase.com<br />
An Software zum Erzeugen und Wiedereinspielen<br />
einer ganzen Festplatte oder<br />
einzelner Partitionen herrscht eigentlich<br />
kein Mangel: von Norton Ghost [1] über<br />
True Image [2] bis zu Clonzilla [3], Partimage<br />
[4] und einige mehr. Auch die<br />
freie <strong>Linux</strong>-Software Fog [5] zieht Abbilder<br />
über das Netz und verteilt sie an<br />
andere Systeme. Es handelt sich also um<br />
kein klassisches Backup-, sondern um<br />
ein Deployment-Tool. Denn das System<br />
besitzt einige praktische Funktionen wie<br />
das automatische Anlegen von Benutzern<br />
oder das Anmelden eines Host im<br />
Active Directory nach Neuinstallation.<br />
Es ist eher mit Snap Deploy [6] aus der<br />
Windows-Schiene zu vergleichen.<br />
Administratoren, die Verantwortung für<br />
viele Clients tragen, versuchen so viel<br />
wie möglich zu automatisieren. Windows<br />
selbst bietet eine unbeaufsichtigte<br />
Installation, ähnlich zu Kickstart [7] bei<br />
Red-Hat-Systemen. Neben der Grundinstallation<br />
gehören zu einem System gewöhnlich<br />
weitere Software und Treiber.<br />
Es bietet sich an, für Gruppen gleichartiger<br />
Hosts einen Abzug eines fertig<br />
installierten Systems anzulegen und ihn<br />
auf die anderen PCs zu verteilen – genau<br />
dies tut Fog. Grundlage des folgenden<br />
Artikels ist die Version 0.32, also eine<br />
neuere als die 0.27, die noch mit der<br />
DELUG-DVD im <strong>Linux</strong>-<strong>Magazin</strong> 11/2011<br />
unter die <strong>Linux</strong>-Menschheit kam.<br />
Die Architektur<br />
Die Basis des Systems bildet ein DHCP-<br />
Server, der auf PXE-Bootrequests von<br />
Clients reagiert und ihnen entweder ein<br />
Bootmenü oder gleich einen Netzboot<br />
anbietet. Der Fog-Server stellt die Startdaten<br />
per TFTP und NFS bereit. Eine<br />
LAMP-Kombination und einige selbst<br />
geschriebene Tools verwalten das ganze<br />
Ensemble. Normalerweise liegen die PC-<br />
Images auf den Festplatten des Servers.<br />
Reicht der Platz bei vielen Clients nicht<br />
aus oder erweist sich der Datendurchsatz<br />
als ungenügend, kann Fog auch die<br />
Dienste von Storage Nodes in Anspruch<br />
nehmen. Die bieten nicht nur den Platz<br />
für viele Images, sondern stehen möglicherweise<br />
auch netztopologisch näher an<br />
den Clients als der Fog-Server.<br />
Die verwalteten PCs sollten das Netzwerk<br />
als erste Bootquelle haben, damit Fog sie<br />
fernsteuern kann. Ein Fog-Client zeigt<br />
nach dem Start das per Syslinux erzeugte<br />
Menü in Abbildung 1 an. Der erste Eintrag<br />
initiiert das Booten von der lokalen<br />
Festplatte, er startet auch nach einem<br />
Time out. Über die anderen Einträge registriert<br />
der Bediener den PC in der Fog-<br />
Datenbank, startet Memtest, fertigt ein<br />
Plattenimage an oder lässt sich Informationen<br />
über den Host anzeigen.<br />
Bei allen Menüpunkten außer dem ersten<br />
bootet ein <strong>Linux</strong>-Kernel, der über Bootparameter<br />
erfährt, was der Benutzer ausgewählt<br />
hat. Das regulär star tende Betriebssystem<br />
darf eine <strong>Linux</strong>-Dis tribution<br />
sein, Fog ist Client-seitig aber auf Windows<br />
XP, Vista und 7 optimiert.<br />
Um einen PC zu einer Fog-Aktion zu veranlassen,<br />
ohne dass ein Bediener vor dem<br />
Gerät sitzt, läuft auf Windows-Clients ein<br />
Service, der in Intervallen beim Server<br />
nachfragt, ob eine Aufgabe ansteht. Ist<br />
dies der Fall und kein Benutzer eingeloggt,<br />
startet der Service den Rechner<br />
neu. Der sich anschließende Netzwerkboot<br />
nimmt die vorgesehene Konfiguration<br />
vor und erledigt übertragene Aufgaben<br />
wie das Anfertigen eines Abbilds.<br />
Walten im Nebel<br />
Fog stattet den Arbeitsplatz des Administrators<br />
mit einer optisch sehr ansprechenden<br />
<strong>Web</strong>oberfläche aus, die die
Abbildung 1: Der Bootscreen eines Fog-Clients nach dem Start übers Netz.<br />
Arbeitsschritte gut gegliedert präsentiert<br />
(Abbildung 2). Im Zentrum der Verwaltungsaufgaben<br />
stehen die Hosts: Ihre<br />
Daten gelangen entweder durch das Registrieren<br />
im PC-Bootmenü, manuell per<br />
<strong>Web</strong>-GUI oder durch das Hochladen einer<br />
CSV-Datei in die Datenbank (Abbildung<br />
3). Als logische Abstraktionsebene kann<br />
Fog Hosts in Gruppen ordnen. Jede Aktion,<br />
die der Server auf einem Host anzustoßen<br />
vermag, darf der Admin auch auf<br />
eine Gruppe anwenden.<br />
Im nächste Schritt widmet sich der Admin<br />
den Abbildern. Er legt eines an, indem er<br />
einen Namen, den Dateinamen (auch<br />
wenn die Datei noch nicht existiert), einen<br />
Typ und die so genannte Speichergruppe<br />
angibt. Der Typ darf das Image<br />
einer NTFS-Partition sein, das sich auch<br />
verkleinern lässt, um<br />
Speicherplatz zu sparen,<br />
oder ein Image<br />
mit mehreren Partitionen<br />
oder das einer<br />
ganzen Festplatte. Bei<br />
den letz ten beiden<br />
Methoden ist Resizing<br />
nicht möglich. Ein Test<br />
ergab, dass bei geklonten<br />
<strong>Linux</strong>-Systemen<br />
die Partitionsgrößen<br />
ebenfalls fix bleiben,<br />
auch wenn im Zielsystem<br />
eine größere Festplatte<br />
ihren Dienst<br />
verrichtet.<br />
Der nächste Menüpunkt verwaltet die<br />
eben erwähnten Speichergruppen. Eine<br />
Speichergruppe bekommt die Speicherknoten<br />
zugeordnet – so vorhanden. Der<br />
Admin gibt für jeden Speicherknoten dessen<br />
IP-Adresse, Usernamen und Passwort<br />
zur Absicherung der Kommunikation an<br />
sowie den Pfad, in dem die Images liegen,<br />
und die maximale Anzahl an Clients, die<br />
dieser Node bedienen kann.<br />
Snapins und Tasks<br />
Eine Aufgabe, die ein Client automatisch<br />
ausführen soll, bindet der Admin über<br />
ein so genanntes Snapin ein. Es kann<br />
dabei um die Installation eines Softwarepakets<br />
gehen oder das Ausführen eines<br />
Windows-Powershell-Skripts. Leider hat<br />
&<br />
Abbildung 2: Fogs <strong>Web</strong>oberfläche für den Administrator – nach dem Einloggen sieht dieser zuerst das Dashboard<br />
mit Nutzungsstatistiken.
Sysadmin<br />
www.linux-magazin.de Fog 01/2012<br />
92<br />
Fog sein Snapin-Konzept nur für Windows-Clients<br />
implementiert.<br />
Aufgaben, die der Client auf logisch tieferer<br />
Ebene absolvieren soll, heißen in Fog<br />
Tasks. Die verordnet der Admin einem<br />
oder einer Gruppe von Hosts. Die ausgewählten<br />
Maschinen führen die Task<br />
beim nächsten Reboot aus. Neben dem<br />
Ausrollen oder Erstellen eines Abbilds<br />
ermöglicht das Advanced-Menü eine<br />
Hardware-Inventur, einen Virusscan mit<br />
Clam AV, eine Festplattenanalyse, das<br />
Löschen der Festplatte in verschiedenen<br />
Güteklassen, das Retten von Dateien und<br />
das Zurücksetzen des Passworts. Ebenfalls<br />
als Plugin ist jene Komponente implementiert,<br />
die auf Windows-Clients die<br />
Snapins ausführt.<br />
In Sachen Tasks für <strong>Linux</strong>-Clients gibt<br />
sich Fog abermals karg: Das Klonen von<br />
<strong>Linux</strong>-Systemen funktioniert zwar wie erwähnt.<br />
Auch das Anlegen von Benutzern<br />
gelingt Fog, indem es auf dem Client ein<br />
»useradd« ausführen lässt. Einen Clientservice,<br />
der auf Spezifika einzelner <strong>Linux</strong>-<br />
Distributionen Rücksicht nehmen kann<br />
und die typischen PC-Admin-Aufgaben<br />
abdeckt, suchten die Tester allerdings<br />
vergeblich.<br />
Drucken, Active Directory,<br />
Standby & Co.<br />
Auf den Clients kann Fog noch weitere<br />
Aktionen veranlassen, beispielsweise den<br />
Hostnamen ändern oder bestimmte Verzeichnisse<br />
löschen. Wer das Plugin zum<br />
Aufräumen der Benutzer aktiviert, sollte<br />
sich noch vor dem Klonen überlegen,<br />
welche vorhandenen Benutzernamen er<br />
nicht löschen darf, und diese entsprechend<br />
in die Liste der geschützten Accounts<br />
eintragen.<br />
Fog kann Drucker zentral verwalten und<br />
automatisch auf Windows-Clients verankern<br />
oder das Anmelden im Active Directory<br />
(Maschinenaccount) erledigen. Unter<br />
»Green Fog« findet sich ein Plugin, das<br />
die Rechner in den Schlafmodus ver setzt.<br />
Eine Auto-Logout-Komponente be endet<br />
die Sitzung bei Nicht-Aktivität. Das System<br />
führt auch Buch über gefundene Viren<br />
sowie das An- und Abmelden von<br />
Benutzern – hier sollte der Admin vorher<br />
mit dem Betriebsrat oder Datenschutzbeauftragten<br />
reden, da solche Maßnahmen<br />
in Deutschland und anderen europäischen<br />
Ländern mitbestimmungspflichtig<br />
sind. Schließlich erzeugt Fog noch umfangreiche<br />
Reports über die Menge der<br />
Images und Aktivitäten des Systems.<br />
Nebel des Grauens<br />
So ausgeklügelt das Fog-System auch<br />
ist, darf man seinen Architekten auch<br />
offensichtliche Unzulänglichkeiten vorhalten,<br />
so die Robustheit: Auftretende<br />
Fehler erkennt Fog nur teilweise. Beim<br />
Versuch, ein Image auf eine viel zu kleine<br />
Festplatte zurückzuspielen, bekamen die<br />
Tester zwar eine Fehlermeldung auf dem<br />
bootenden Clientrechner zu Gesicht, das<br />
<strong>Web</strong>-GUI auf dem Server meldete die<br />
Task aber als erfolgreich abgeschlossen –<br />
genau solche Effekte schätzt der Admin<br />
eines PC-Pools aber nicht.<br />
Der zweite Schwachpunkt ist die Sicherheit:<br />
Der Windows-Client kommuniziert<br />
mit dem Fog-Server per einfachem HTTP.<br />
Genauso verfährt das zum Absolvieren<br />
einer Task übers Netz gestartete <strong>Linux</strong>-<br />
System auf dem Client: Es überträgt seine<br />
Daten zum Fog-Server im Klartext, eine<br />
Authentisierung in irgendeiner Richtung<br />
findet nicht statt. Angreifern bietet Fog<br />
also genug Angriffsfläche, um Kontrolle<br />
über die Clients zu erlangen. Dabei wäre<br />
eine Abhilfe mit HTTPS mit Authentisierung<br />
leicht zu schaffen.<br />
Deployment zum Nulltarif<br />
Die Open-Source-Software Fog ist abgesehen<br />
von Sicherheitsproblemen und<br />
rudimentärem Fehlerhandling gut durchdacht.<br />
Der zentrale Server verwaltet die<br />
auf den PCs hergestellten und geklonten<br />
Images, stößt Tasks an und erledigt per<br />
Snapins auf Windows-Systemen wichtige<br />
administrative Arbeiten. Durch das<br />
Konzept der Storage Nodes scheint die<br />
Lösung zudem für Größeres gerüstet – in<br />
den Benutzerforen finden sich Berichte<br />
über Fog-Installationen, die eine vierstellige<br />
Anzahl Clients versorgen. (jk) n<br />
Infos<br />
[1] Ghost: [http:// de. norton. com/ ghost/]<br />
[2] True Image: [http:// www. acronis. de/<br />
homecomputing/ products/ trueimage/]<br />
[3] Clonezilla: [http:// clonezilla. org]<br />
[4] Partimange: [http:// www. partimage. org]<br />
[5] Fog: [http:// www. fogproject. org]<br />
[6] Snap Deploy: [http:// www. acronis. de/<br />
enterprise/ products/ snapdeploy/]<br />
[7] Dokumentation zu Kickstart:<br />
[http:// fedoraproject. org/ wiki/ Anaconda/<br />
Kickstart]<br />
Abbildung 3: Hier dreht sich alles um einen in Fog registrierten Host. Über das Menü links kann der Admin<br />
den betreffenden PC administrieren.<br />
Der Autor<br />
Konstantin Agouros arbeitet bei der N.runs AG<br />
als Berater für Netzwerksicherheit. Dabei liegt<br />
sein Schwerpunkt im Bereich Telekommunikationsanbieter.<br />
Sein Buch „DNS/DHCP“ ist bei Open<br />
Source Press erschienen.
Open Source goes<br />
Präsentieren auch Sie sich auf der größten Sonderausstellung<br />
der CeBIT 2012 zum Thema <strong>Linux</strong> und freie Software –<br />
hervorragend platziert in Halle 2!<br />
Kleine und mittlere Unternehmen treffen hier auf hochrangige Entscheider.<br />
Nirgendwo sonst finden Sie eine bessere Business-Umgebung für Ihre<br />
Open-Source-Lösungen.<br />
Ein rundum perfekter Messeauftritt ‒<br />
maximaler Erfolg mit minimalem Aufwand:<br />
• individuelle Standgrößen ab 4 m²<br />
• Alles-inklusive-Service (Standbau, Catering, Konferenzräume, u.v.m.)<br />
• direkte Ansprache zahlreicher Neukunden<br />
• ausgewählte Fachvorträge und Keynotes im Open Source Forum<br />
• Kontakt zur internationalen Open Source Community<br />
Jetzt anmelden!<br />
www.open-source-park.de<br />
oder 0 26 1 - 20 16 902<br />
In Kooperation mit:<br />
Veranstalter:<br />
pluspol.de<br />
Marketing Kommunikation Internet
Forum<br />
www.linux-magazin.de Winterrätsel 01/2012<br />
94<br />
Das große <strong>Linux</strong>-<strong>Magazin</strong> Winterrätsel für lange Abende<br />
Winterrätsel<br />
Haustiere, Heiß- und Kaltgetränke, Ortswechsel von Maintainern, deren Beiträge zu Science-Fiction-Romanen …<br />
Nur, wer sich in der Geek-Geschichte der letzten tausend Jahre auskennt, hat eine Chance, das Lösungswort<br />
zu knacken und ein HTC Sensation XL zu gewinnen. Viel Spaß beim Knobeln! Nils Magnus<br />
1Ein Computer, der aussieht wie ein Borg-Raumschiff, diente<br />
einem inzwischen geadelten Entwickler als Plattform für ein<br />
Informationssystem. Der Chef des Unternehmens, das diesen<br />
Computer herstellte, griff nicht nur auf einen Mach-Kernel, sondern<br />
auch auf eine freie Unix-Variante zurück. Welcher Universitätsstandort<br />
hat sich in deren Namen verewigt?<br />
2Die Universität aus der vorangegangenen Frage brachte<br />
eine Art eigene Distribution heraus. Ihr ursprünglicher<br />
Maintainer ist auch der Autor eines universellen Unix-Werkzeugs,<br />
das Eingabeströme modifiziert. Wie heißt der Entwickler?<br />
3Den programmtechnischen Antagonisten zum Werkzeug<br />
aus der vorangegangenen Frage entwickelte ein Visionär,<br />
der heute viel in der Welt herum kommt. Um sich gegen<br />
Müdigkeit zu wappnen, verlangt er regelmäßig nach einer ganz<br />
bestimmten koffeinhaltigen Brausesorte. Noch mehr präferiert er<br />
jedoch ein anderes Getränk. Welches?<br />
Haustiere, Papageien und Hunde<br />
4Die Person aus Frage 3 hat klare Vorstellungen zu Haustieren,<br />
etwa zu Papageien und Hunden. Von einer weiteren<br />
Spezies fordert er Freundlichkeit als Wesensmerkmal. Ein<br />
solches Exemplar lebt offenbar mit dem Maintainer eines umfangreichen<br />
Projektes zusammen, denn er beklagt Tippschwierigkeiten,<br />
wenn sein tierischer Mitbewohner in der Nähe weilt. Aber ein anderes<br />
Tier verletzte ihn down under. Welches?<br />
5Der Titel eines in gewisser Weise preisgekrönten Science-<br />
Fiction-Films, der ein Jahr nach der Vorstellung einer weit<br />
verbreiteten funktionalen Programmiersprache in die Kinos<br />
kam, inspirierte einen Ingenieur zum Betriebssystemnamen. Vorher<br />
hatte er jedoch seinerseits eine ebenfalls wegweisende Programmiersprache<br />
entworfen. Die beiden Entwickler starben beide kurz<br />
hintereinander. Nach wem ist der renommierte Preis benannt, der<br />
beiden verliehen wurde?<br />
6Für äußerst wertvoll halten Anwender das Wort eines Buchautors<br />
und Analysten, der sogar einen wissenschaftlichen<br />
Beitrag für einen seitenstarken Bestsellerroman beisteuern<br />
durfte. Derselbe Schmöker enthält sogar ein Programm in einer<br />
bekannten Skriptsprache, auf deren neues Major Release ihre Fans<br />
schon seit Jahren warten. Welchem Entwickler könnte der neue<br />
Interpreter für diese Sprache gut gefallen, wenn man allein ihren<br />
Namen zugrunde legte?<br />
7Wer wissen will, was beispielsweise der Begriff „snarf“ bedeutet<br />
und was er mit „slurp“ zu tun hat, greift meist zu einem<br />
Standardwerk, das ein durchaus umstrittener Publizist<br />
und gelegentlicher Entwickler verwaltet. Eines seiner bekanntesten<br />
Essays inspirierte sogar eine Distribution bei der Namensgebung<br />
einer eigenen Software. Wie heißt das Gegenstück zu diesem Tool,<br />
das meist im Kernel zum Einsatz kommt?<br />
Steinalt und trotzdem gut<br />
8HTML und Browser, die es verarbeiten, hatten bislang ein<br />
Silbentrennungs-Problem. Mit Firefox 8 soll sich das ändern,<br />
denn Mozilla borgt sich aus einem Programmpaket<br />
Code und Daten, um künftig Texte zu umbrechen. Die Software hat<br />
schon ein paar Dekaden auf dem Buckel, wirkt aber jung gegenüber<br />
einem noch älteren Werkzeug mit ähnlicher Funktion. Welcher Systemprogrammierer<br />
entwarf das ältere Paket ursprünglich?<br />
9Als Sprachentwickler hatte der Macher einer Austauschsoftware,<br />
die zeitweise knapp die Hälfte der Internetkommunikation<br />
erledigte, kein gutes Händchen. Ihre Konfigurationsdateien<br />
waren gefürchtet. Sein Lebenspartner hingegen befasste<br />
sich mehr mit Dateisystemen und deren Werkzeugen. Welcher Organisation<br />
stand der Partner zweimal vor?<br />
universelle Methode, mehrere Programme derartig<br />
zu verbinden, dass die Ausgabe eines Werkzeugs dem<br />
10Die<br />
nachfolgenden als Eingabe dient, gilt als ein Schlüsselprinzip<br />
von Unix. Ein Beispiel dafür ist das Tool »sort«, das<br />
ursprünglich der gleiche Entwickler wie der Architekt des Prinzips<br />
entworfen hat. Mit wem veröffentlichte er gemeinsam ein Paper für<br />
einen Algorithmus, der heute noch die Grundlage eines wichtigen<br />
Programms bildet?<br />
College-Informatik-Urahnen<br />
der ursprünglichen Unix-Entwickler schuf auch ein<br />
Werkzeug, um andere Tools aufzurufen. Es stellte sich<br />
11Einer<br />
jedoch als nur begrenzt flexibel und programmierbar heraus.<br />
Das änderte einige Jahre später ein anderer Programmierer<br />
durch eine Neuimplementierung, die heute noch als Urahn einer<br />
Familie von Skriptsprachen gilt. Er promovierte an einem College<br />
160 Jahre, nachdem an gleicher Stelle welcher Hardwareentwickler<br />
sein Studium aufgenommen hatte?
So funktioniert’s<br />
Meist lassen sich die Fragen durch ein einzelnes Wort beantworten, sonst zählt das erste Wort,<br />
bei Namen der Nachname. Jeweils der erste Buchstabe ist auf [http://linux-magazin.de/winter] oder in<br />
das unten abgedruckte Diagramm einzutragen. Beide berechnen die Lösung durch die angegebene Addition. Dabei gilt:<br />
A µ 0, B µ 1, … Ist eine Summe größer als das Äquivalent des Z, gibt es einen Überlauf zum A. Beispiel: X + D = B.<br />
+<br />
Q<br />
=<br />
+<br />
+<br />
I<br />
=<br />
+<br />
+<br />
S<br />
=<br />
+<br />
+<br />
U<br />
=<br />
+<br />
+<br />
M<br />
=<br />
+<br />
+<br />
J<br />
=<br />
+<br />
+<br />
+<br />
Q :<br />
=<br />
+<br />
C<br />
=<br />
+<br />
+<br />
Z<br />
=<br />
+<br />
+<br />
O<br />
=<br />
+<br />
+<br />
0<br />
=<br />
+<br />
+<br />
Y<br />
=<br />
+<br />
+<br />
T<br />
=<br />
+<br />
+<br />
A<br />
=<br />
+<br />
+<br />
D<br />
=<br />
+<br />
+<br />
L<br />
=<br />
+<br />
+<br />
C<br />
=<br />
+<br />
+<br />
K<br />
=<br />
+<br />
+<br />
M<br />
=<br />
Winterrätsel 01/2012<br />
Forum<br />
meisten Entwickler glauben an die These eines<br />
amerikanischen Logikers, dass letztlich alle Programmiersprachen<br />
gleich mächtig in ihrer Berechnungskraft<br />
12Die<br />
seien. Der helle Kopf verglich dazu mehrere Konzepte von Handlungsanweisungen<br />
für Computer. Diese Anleitungen wiederum haben<br />
ihren Namen von einem arabischen Weisen, der eine wichtige Ziffer<br />
in die abendländische Wissenschaft einbrachte. Welche?<br />
Eichhörnchen, Habichte und Hirsche<br />
boshaftes Eichhörnchen, ein Habicht und vier Hirsche<br />
spielen eine Rolle in der Sage, die auch namensgebend<br />
für eine Softwaresammlung war, die sich dem<br />
13Ein<br />
Benutzerkomfort verschrieben hat. Welcher Kernelentwickler hat<br />
sie ins Leben gerufen?<br />
ist aus. Das Portal für Open-Source-Software<br />
änderte kürzlich seinen Namen. Es ist Teil eines<br />
14Frischfleisch<br />
weitverzweigten Unternehmensnetzwerks, dessen<br />
Keimzelle ursprünglich einmal <strong>Linux</strong>-Support und eigene Hardware<br />
anbieten wollte. Ihr damaliger Chef ist heute noch als Cloud-Visionär<br />
im Geschäft. Wie heißt er?<br />
Entwickler diverser Telefonhard- und ‐software<br />
und unermüdliche Pfotenklopfer gegen den Missbrauch<br />
15Der<br />
freier Lizenzen ist auch ein maßgeblicher Architekt<br />
von Sicherheitskomponenten für den <strong>Linux</strong>-Kernel. Eines der Standardwerke<br />
für den Einsatz solcher Systeme stammt vom einem<br />
Autor, den seine Fans als Teil der Computerfolklore oft liebevoll mit<br />
welchem Karatestar verwechseln?<br />
zeitversetzt Aufgaben durchzuführen, nutzen Systemverwalter<br />
ein Werkzeug, dessen ursprünglicher Autor<br />
auch dabei half, eine Reihe weiterer nützlicher und<br />
17Um<br />
für Netze unverzichtbarer Services zu entwerfen, darunter zwei<br />
elementare Auskunftsdienste. Der Dienst auf der unteren Netzwerkschicht<br />
arbeitet dabei meist auf einem Protokoll, für den ein Unternehmer<br />
und Kernelhacker erst einmal Treiber entwickeln musste.<br />
Nebenher befasste er sich auch noch mit <strong>Linux</strong>-HPC. Nach welchem<br />
sagenhaften Held benannte er seinen Supercomputer?<br />
selbst als zänkische Eidechse bezeichnen zu<br />
lassen, ist wohl Ausdruck der Geisteshaltung, die es<br />
18Sich<br />
braucht, um aus der Konkursmasse eines großen Gekabbels<br />
ein weit verbreitetes Open-Source-Projekt zu formen. Eingeweihte<br />
wissen, dass die Leiterin gelegentlich Sprüche aus einem<br />
hypothetischen Buch der Bibel zitiert. Welcher Dämon tritt dort<br />
meist als Gegenspieler auf?<br />
Von der ersten zur letzten Aufgabe<br />
manches Open-Source-Projekt kommt mit dem Abarbeiten<br />
der Aufgaben in seinem Ticketsystem nicht<br />
19So<br />
hinterher. Seit über sieben Jahren nagt ein Projekt immer<br />
noch an seinem ersten Eintrag, der sich auf einen späteren Top-<br />
Zuträger zum <strong>Linux</strong>-Kernel 3.0 bezog. Von diesem Zuträger wurden<br />
ein Tag nach welchem feierlichen Anlass vertrauliche Dokumente<br />
publik, die sich damals noch sehr kritisch über <strong>Linux</strong> äußerten?<br />
www.linux-magazin.de<br />
95<br />
sind auf einem <strong>Linux</strong>-Rechner äußerst seltene<br />
Gäste, mit Würmern kämpfen Administratoren im Zeichen<br />
des Pinguins jedoch von Zeit zu Zeit. Der Autor<br />
16Viren<br />
des ersten weiter verbreiteten Wurms im Internet konnte für seine<br />
Missetaten auf Informationen in seinem Familienkreis zurückgreifen.<br />
An welchem Protokollstack arbeitete sein Vater und warnte vor<br />
dessen Implementationen?<br />
HTC Sensation XL zu gewinnen<br />
Die meisten Fragen lassen sich durch ein Wort beantworten. Bei Namen<br />
zählt der Nachname, ansonsten das erste Wort. Der Lösungssatz ist ein<br />
Zitat samt Urheber. Wer diesen korrekt zusammen mit den 19 Antworten<br />
bis zum 8. Januar 2012 an [winter@linux‐magazin. de] schickt, nimmt<br />
automatisch an einer Verlosung teil. Falls niemand auf den Satz kommt,<br />
bestimmt die Redaktion anhand der richtigen Teillösungen den besten<br />
Mitspieler. Das <strong>Linux</strong>-<strong>Magazin</strong> veröffentlicht voraussichtlich<br />
in Ausgabe 03/12 den Namen des Gewinners.<br />
Der Rechtsweg ist ausgeschlossen.<br />
Als Preis für das nicht gerade einfache Rätsel winkt<br />
ein Android-3.5-Smartphone, dessen Touchscreen-Diagonale<br />
beeindruckende 11,9 Zentimeter misst: Das<br />
HTC Sensation XL, das regulär für rund 620 Euro zu<br />
haben ist. Auf dessen Rückseite sitzt eine 8-Megapixel-Kamera<br />
mit 28-Millimeter-Weitwinkellinse<br />
und f/2.2-Blendenöffnung sowie ein BSI-Sensor für<br />
Aufnahmen bei schwierigen Lichtverhältnissen.<br />
Das Winterrätsel online unter:<br />
www.linux-magazin.de/winter
Forum<br />
www.linux-magazin.de Recht 01/2012<br />
96<br />
BGH-Urteil zu Hosting-Providern und Blogs<br />
Eine Frage der Ehre<br />
Provider sitzen in der Zwickmühle: Sie hosten <strong>Web</strong>seiten für zahlende Kunden. Tauchen dort aber ehrenrührige<br />
Inhalte auf, drohen deftige Schadensersatzforderungen. Die Frage, auf wessen Seite Provider sich besser<br />
stellen sollten, regelt der deutsche Bundesgerichtshof nun in einem Urteil. Fred Andresen<br />
© Wavebreak Media Ltd, 123RF.com<br />
Der Bundesgerichtshof (BGH) hat vor<br />
einigen Wochen ein Urteil gesprochen, in<br />
dem er die Haftung eines Blogproviders<br />
konkretisiert, der für ehrverletzende Äußerungen<br />
Dritter auf seiner Seite verantwortlich<br />
ist [1]. Wer ein Blog auf seiner<br />
<strong>Web</strong>site betreibt, sorgt nicht nur für Traffic,<br />
der die eigene Seite in der Community<br />
und für Suchmaschinen bekannt macht,<br />
er öffnet auch Tür und Tor für Trolle und<br />
ungebeten Gäste, die die (vermeintliche)<br />
Anonymität des Internets nutzen, um unsachlich<br />
zu argumentieren, Flamewars<br />
anzuzetteln und persönliche Diffamierungen<br />
abzulassen.<br />
Kein Wunder, dass sich dabei der eine<br />
oder andere Betroffene auf den Schlips<br />
getreten fühlt und im besten Fall um<br />
Richtigstellung bemüht ist. Im schlimmsten<br />
Fall tritt jedoch auch echter finanzieller<br />
Schaden ein – etwa wenn die Umsätze<br />
eines Unternehmers stark mit dem<br />
Ruf in der Öffentlichkeit gekoppelt sind<br />
und Umsatzeinbußen auf Rufschädigung<br />
zurückzuführen sind. Daneben drohen<br />
Schmerzensgeldansprüche wegen einer<br />
erlittenen Beleidigung, die allerdings in<br />
der Regel nicht in die Höhen von Umsatzschäden<br />
reichen. Es geht also ums Geld<br />
und um die Ehre!<br />
Leicht zu beeinflussen<br />
Der vernünftige Mensch, so ließe sich<br />
argumentieren, gibt nichts auf anonyme<br />
Anschuldigungen und Beleidigungen. An<br />
dieses Ideal glaubt die Rechtsprechung<br />
jedoch nicht, und wohl aus gutem Grund:<br />
Eine Studie aus dem Jahr 2006 hat herausgefunden,<br />
dass bis zu einem Drittel<br />
der Internetnutzer den Privatkommentaren<br />
in Blogs vertraut [2]. Seit dem Jahr<br />
2006 dürfte der Einfluss von Blogs eher<br />
noch gewachsen sein.<br />
Ungerechtfertigte Schmähkritik und beleidigende<br />
Angriffe sind aber nicht nur<br />
verboten, sondern unter Strafe gestellt.<br />
Die Paragrafen 185 ff. über Beleidigung,<br />
üble Nachrede und Verleumdung füllen<br />
einen ganzen Abschnitt des Strafgesetzbuchs<br />
[3]. Und sie gelten unabhängig<br />
von Ort und Art der Äußerung, was das<br />
Internet mit einbezieht.<br />
Daneben hält das Gesetz Vorschriften wie<br />
Paragraf 824 BGB parat, der die Haftung<br />
für eine Kreditschädigung durch wahrheitswidrige<br />
Tatsachenbehauptung oder<br />
‐verbreitung regelt [4]. Diese Kreditschädigung<br />
ist für Unternehmen ein Pendant<br />
zur Ehrverletzung bei natürlichen Personen.<br />
Im Internet gelten also die gleichen<br />
Spielregeln wie andernorts, Betroffene<br />
können sich gegen Rufschädigung und<br />
Ehrverletzung wehren – aber wie?<br />
Zur klassischen Konstellation – Geschädigter<br />
auf der einen und Schädiger auf der<br />
anderen Seite – gesellen sich im Internet<br />
noch weitere Akteuere, die den Content<br />
und damit die Beleidigung nur durchleiten.<br />
Oft sind das Blogbetreiber, die Beiträge<br />
eines Dritten auf ihren <strong>Web</strong>seiten<br />
veröffentlichen. Daneben kommt in der<br />
Regel noch der Provider ins Spiel, der<br />
auf seinen Servern das Blog hostet. Den<br />
Grad der Verantwortung der Beteiligten<br />
versuchen Gesetz und Rechtsprechung<br />
seit Langem in den Griff zu bekommen,<br />
der BGH hat nun für ein wenig mehr<br />
Klarheit gesorgt.<br />
Üble Nachrede<br />
Im konkreten Fall ging es um die Klage<br />
gegen einen großen Suchmaschinenbetreiber<br />
auf Unterlassung der Verbreitung<br />
eines Blogeintrags. Der Betreiber hatte<br />
ein Blog gehostet, dessen Autor in einem<br />
Beitrag einem in Spanien ansässigen<br />
deutschen Unternehmer unterstellt,
Rechnungen eines Rotlicht-Clubs vom<br />
Firmenkonto zu begleichen. Das zuerst<br />
angerufene Landgericht hatte zugunsten<br />
des Klägers auf Unterlassung entschieden,<br />
die Berufung des Beklagten beim<br />
Oberlandesgericht war erfolglos.<br />
Daraufhin hatte er Revision beim BGH<br />
eingelegt, der die Angelegenheit zur erneuten<br />
Entscheidung an das Berufungsgericht<br />
zurückverwiesen hat. In seiner<br />
Entscheidung hat der BGH zudem bestimmt,<br />
unter welchen Voraussetzungen<br />
ein Provider als Störer für ehrverletzende<br />
Äußerungen auf einem von ihm gehosteten<br />
Blog haftet. Eine Störung ist im sachrechtlichen<br />
Sinne die Beeinträchtigung<br />
eines fremden Rechtsgutes.<br />
Beim Störer unterscheidet man zwischen<br />
dem Handlungsstörer, der die Störung<br />
begeht, und dem Zustandsstörer, der<br />
eine störende Sache unterhält. Die Zustandsstörung<br />
besteht in diesem Fall im<br />
Bereitstellen des Servers, der der Veröffentlichung<br />
der Äußerung dient. Wer<br />
vor Gericht einen Unterlassungsanspruch<br />
geltend machen will, muss diesen gegen<br />
einen Störer richten.<br />
Haftungsfragen<br />
Die Voraussetzungen, die der BGH für die<br />
Inanspruchnahme des Hostproviders aufgestellt<br />
hat, konkretisieren die bisherige<br />
Rechtslage. Bislang galt per Gesetz eine<br />
Haftungserleichterung. Die besagte, dass<br />
Provider für die von ihnen gehosteten<br />
Informationen (also Inhalte Dritter) nicht<br />
haften, sofern sie von deren Rechtswidrigkeit<br />
keine Kenntnis haben und für sie<br />
auch keine Tatbestände oder Umstände<br />
erkennbar sind, aus denen sich die<br />
Rechtswidrigkeit erschließt. Diese Haftungsfreistellung<br />
soll nur dann greifen,<br />
wenn der Provider, nachdem er Kenntnis<br />
von rechtswidrigen Informationen erlangt<br />
hat, diese unverzüglich entfernt oder den<br />
Zugang dazu sperrt.<br />
Diese Regeln stammen aus der E-Commerce-Richtline<br />
der EU aus dem Jahre<br />
2000 [5] und sind inzwischen in allen<br />
Mitgliedsstaaten umgesetzt, in Deutschland<br />
etwa mit entsprechenden Bestimmungen<br />
im Teledienstegesetz (TDG, [6]),<br />
seit 2007 im Telemediengesetz (TMG)<br />
[7], dem Nachfolger des TDG.<br />
In der Praxis führen diese Regelungen zu<br />
Schwierigkeiten, weil für Provider nicht<br />
ohne Weiteres erkennbar<br />
ist, ob es sich bei<br />
den gehosteten Informationen<br />
um eindeutig<br />
rechtswidrige Inhalte<br />
handelt. Zwischen<br />
rechtlich beanstandungsfreier,<br />
überzogener,<br />
selbst ausfälliger<br />
Kritik und rechtswidriger<br />
Schmähung<br />
zu unterscheiden, ist<br />
auch für Juristen nicht<br />
immer einfach. Andererseits<br />
sind Provider Parteien zu leiten.<br />
für die Ehrverletzten<br />
weit einfacher zu erreichen als der möglicherweise<br />
anonyme Poster und daher das<br />
leichtere Angriffsziel.<br />
Der Provider steckte damit in der Zwickmühle:<br />
Entweder er löschte oder sperrte<br />
die Informationen möglicherweise vorschnell,<br />
weil ein Rechtsgutachten unwirtschaftlich<br />
und langwierig ist, oder<br />
er riskierte in die Haftung zu geraten<br />
und dem Verletzten Schmerzensgeld oder<br />
Schadenersatz leisten zu müssen.<br />
Provider als Vermittler<br />
Mit seinem Urteil legt der BGH eine klare<br />
Vorgehensweise fest, die bei allen Beteiligten<br />
zu mehr Rechtssicherheit führt<br />
und vor allem den Providern die Sache<br />
erleichtert. Das Gericht sagt, dass dieser<br />
als Störer für von ihm nicht verfasste<br />
oder gebilligte Äußerungen eines Dritten<br />
in einem Blog auf Unterlassung in Anspruch<br />
genommen werden kann, wenn<br />
er folgende Pflichten verletzt hat: „Ein<br />
Tätigwerden des Hostproviders ist nur<br />
veranlasst, wenn der Hinweis auf die<br />
rechtswidrigen Inhalte so konkret gefasst<br />
ist, dass der Rechtsverstoß auf der Grundlage<br />
der Behauptungen des Betroffenen<br />
unschwer – das heißt ohne eingehende<br />
rechtliche und tatsächliche Überprüfung<br />
– bejaht werden kann.“<br />
Regelmäßig, so der BGH, ist zunächst die<br />
Beanstandung des Betroffenen an den<br />
für den Blog Verantwortlichen zur Stellungnahme<br />
weiterzuleiten. Bleibt eine<br />
Stellungnahme innerhalb einer nach den<br />
Umständen angemessenen Frist aus, ist<br />
von der Berechtigung der Beanstandung<br />
auszugehen und der beanstandete Eintrag<br />
zu löschen. Stellt der für den Blog<br />
Abbildung 1: Der BGH versucht virtuelle Streitigkeiten an die beteiligten<br />
Verantwortliche die Berechtigung der Beanstandung<br />
substanziell in Abrede und<br />
ergeben sich deshalb berechtigte Zweifel,<br />
ist der Provider grundsätzlich gehalten,<br />
dem Betroffenen dies mitzuteilen und<br />
gegebenenfalls Nachweise zu verlangen,<br />
aus denen sich die behauptete Rechtsverletzung<br />
ergibt.<br />
Äußert sich der Betroffenen nicht oder<br />
legt er erforderliche Nachweise nicht vor,<br />
ist eine weitere Prüfung nicht veranlasst.<br />
Ergibt sich aus der Stellungnahme des<br />
Betroffenen oder den vorgelegten Belegen<br />
auch unter Berücksichtigung einer<br />
etwaigen Äußerung des für den Blog<br />
Verantwortlichen eine rechtswidrige Verletzung<br />
des Persönlichkeitsrechts, ist der<br />
beanstandete Eintrag zu löschen.<br />
Damit ist der Provider in die Rolle eines<br />
Vermittlers versetzt, der zwar im Rahmen<br />
dieser vorgeschriebenen Vorgehensweise<br />
handeln muss (dies natürlich unverzüglich,<br />
um etwaigen Schaden so gering wie<br />
möglich zu halten), dem aber keine ungebührlichen<br />
Prüfungspflichten hinsichtlich<br />
der Rechtswidrigkeit auf eigene Kosten<br />
obliegen (Abbildung 1).<br />
Mit der Vorgabe, wann der Provider handeln<br />
muss, konkretisiert der BGH damit<br />
auch das Wie. Nach Eingang der Beanstandung<br />
ist sie an den Blog-Verantwortlichen<br />
weiterzuleiten und dessen Stellungnahme<br />
abzuwarten. Kommt keine Reaktion, ist<br />
der Eintrag zu löschen oder – besser –<br />
zu sperren. Kommt eine qualifizierte Reaktion,<br />
leitet der Provider diese an den<br />
Betroffenen weiter und wartet, ob der die<br />
vermeintlich rechtswidrige Information<br />
als solche qualifizieren kann.<br />
Der Spielball liegt dann bei dem Betroffenen:<br />
Er muss, anders als in einem<br />
© Scott Griessel, 123RF.com<br />
Recht 01/2012<br />
Forum<br />
www.linux-magazin.de<br />
97
Forum<br />
www.linux-magazin.de Recht 01/2012<br />
98<br />
© uwy.ch, photocase.com<br />
Abbildung 2: Rechtzeitige Reaktion soll Schlimmeres verhindern. Die angemessene<br />
Reaktionszeit ist nicht definiert.<br />
gerichtlichen Verfahren, gegebenenfalls<br />
auch auf eigene Kosten ein Gutachten<br />
beibringen, weshalb die beanstandete Information<br />
seine Rechte verletzt, oder dies<br />
auf andere Weise durch substanzielle<br />
Darlegung begründen. Der Betroffene<br />
muss also dem Provider seine Ansicht<br />
verständlich machen.<br />
Aufwand für Geschmähte<br />
Im Ergebnis heißt das für den Betroffenen:<br />
Je weniger eindeutig die Rechtswidrigkeit<br />
ist, desto höher sind die Anforderungen<br />
an seine Darlegung. Erkennbare<br />
Beleidigungen wie typische Schimpfwörter<br />
sind nach verkürzter Stellungnahmefrist<br />
für den Blog-Verantwortlichen durch<br />
Provider zu sperren oder zu löschen. In<br />
zweifelhaften Fällen muss der Betroffene<br />
wohl ein Rechtsgutachten auf eigene<br />
Kosten beibringen – diese Kosten sind<br />
dann als Rechtsverfolgungskosten dem<br />
Schaden hinzuzurechnen, den er gegenüber<br />
dem eigentlichen Schädiger geltend<br />
machen muss. Der Provider ist dafür in<br />
der Regel nicht haftbar.<br />
Offen bleibt allerdings die Frage nach der<br />
angemessenen Frist, in der die Beteiligten<br />
gegenüber dem Provider reagieren müssen.<br />
Vielfach sind zwei Wochen genannt.<br />
Doch dieser Zeitraum wirkt bei ehren‐<br />
Der Autor<br />
RA Fred Andresen ist Mitglied<br />
der Rechtsanwaltskammer<br />
München und der Arbeitsgemeinschaft<br />
Informationstechnologie<br />
im Deutschen<br />
Anwaltverein (DAVIT).<br />
rührigen Informationen<br />
und der dadurch<br />
möglichen erheblichen<br />
Beeinträchtigung der<br />
Persönlichkeitsrechte<br />
als zu lang (Abbildung<br />
2).<br />
Ein-Tages-Fristen geben<br />
den Blog-Verantwortlichen<br />
aber zu<br />
wenig Zeit, um auf<br />
nicht triviale Fälle reagieren<br />
zu können.<br />
Eine Drei-Tages-Frist<br />
für relativ eindeutige<br />
Fälle der Rechtswidrigkeit<br />
scheint angemessen, zumal der<br />
Blog-Verantwortliche innerhalb dieser<br />
Zeit die Stellungnahme eines Rechtsanwalts<br />
einholen kann, in der dieser etwa<br />
darlegt, dass für seine abschließende Beurteilung<br />
und Stellungnahme ein längerer<br />
Zeitraum nötig ist.<br />
Örtliche Zuständigkeit<br />
In einem Aufwasch hat das Gericht zwei<br />
weitere Fragen entschieden: Die Zuständigkeit<br />
deutscher Gerichte und die Anwendbarkeit<br />
deutschen Rechts für Fälle,<br />
in denen der Provider im Ausland sitzt.<br />
Im Gleichklang mit einem Urteil des Europäischen<br />
Gerichtshofs (EuGH, [8]) hat<br />
der BGH entschieden, dass die deutschen<br />
Gerichte zuständig seien, weil die rechtswidrige<br />
Verbreitung auch in Deutschland<br />
erfolgt sei und der Betroffene überdies in<br />
Deutschland seinen gewöhnlichen Aufenthalt<br />
habe. Auch wenn er in Spanien<br />
sein Unternehmen betreibt, ist demnach<br />
der Wohnsitz ausschlaggebend.<br />
Liegt also der Ort der Beeinträchtigung<br />
innerhalb Deutschlands, insbesondere<br />
wenn die rechtswidrigen Informationen<br />
auf einer Seite stehen, die sich an deutsche<br />
User richtet, dann dürfen deutsche<br />
Gerichte entscheiden.<br />
Der EuGH hat gleichermaßen argumentiert:<br />
Weil wegen der weltumspannenden<br />
Verbreitung des Internets der Schadensort<br />
schwer zu bestimmen sei, seien jene<br />
Gerichte zuständig, in deren Sprengel der<br />
Betroffene seinen Wohnsitz beziehungsweise<br />
gewöhnlichen Aufenthalt hat. Außerdem,<br />
so der europäische Gerichtshof,<br />
dürfe künftig über den gesamten innerhalb<br />
der EU eingetretenen Schaden entschieden<br />
werden – der Betroffene müsse<br />
daher nicht in jedem Mitgliedsstaat gesondert<br />
klagen.<br />
Der EuGH meint allerdings auch, dass<br />
das angerufene Gericht keine strengeren<br />
Bestimmungen anwenden dürfe, als in<br />
dem Land gelten, in dem der Herausgeber<br />
des Internetportals ansässig ist. In<br />
diesem Fall wäre das einfach, weil der<br />
Blog-Verantwortliche (nicht der Provider)<br />
ebenfalls in Deutschland sitzt. Es bleibt<br />
aber offen, ob und welche US-amerikanischen<br />
Vorschriften gegenüber einem dort<br />
ansässigen Provider heranzuziehen wären.<br />
Die Entscheidung des EuGH bindet<br />
nämlich auch die deutschen Gerichte,<br />
wenn auch nicht streng formal.<br />
Deutsche Provider müssen künftig verstärkt<br />
mit Klagen wegen ehrverletzender<br />
Äußerungen auf gehosteten Seiten rechnen.<br />
Sie bekommen aber gleichzeitig eine<br />
konkrete Vorgehensweise an die Hand,<br />
mit der sie sich weitgehend aus der Haftung<br />
befreien können. (uba) n<br />
Infos<br />
[1] BGH, Urteil aus 2011, VI ZR 93/10:<br />
[http:// juris. bundesgerichtshof. de/<br />
cgi‐bin/ rechtsprechung/ document. py?<br />
Gericht=bgh& Art=pm& Datum=2011&<br />
Sort=3& anz=169& pos=0& nr=57959&<br />
linked=urt& Blank=1& file=dokument. pdf]<br />
[2] Hotwire-Ipsos-Studie:<br />
[http:// knowledgecenter. ipsos. de/<br />
downloads/ KnowledgeCenter/ 3BFE85EF‐<br />
713A‐4358‐AD23‐16AAE9876879/ Ipsos%<br />
20White%20Paper%20Blogging. pdf]<br />
[3] StGB:<br />
[http:// www. gesetze‐im‐internet. de/ stgb/]<br />
[4] BGB:<br />
[http:// www. gesetze‐im‐internet. de/ bgb/]<br />
[5] Richtlinie 2000/31/EG über den elektronischen<br />
Geschäftsverkehr: [http://<br />
www. internet4jurists. at/ gesetze/<br />
rl_e‐commerce01. htm]<br />
[6] Wikipedia zum Teledienstegesetz:<br />
[http:// de. wikipedia. org/ wiki/<br />
Teledienstegesetz]<br />
[7] Telemediengesetz:<br />
[http:// www. gesetze‐im‐internet. de/ tmg/]<br />
[8] Urteil des EuGH aus 2011, C-509/09 und<br />
C-161/10:<br />
[http:// curia. europa. eu/ jurisp/<br />
cgi‐bin/ gettext. pl? lang=de&<br />
num=79888974C19100161& doc=T&<br />
ouvert=T& seance=ARRET]
JETZT<br />
MiT dVd!<br />
MAGAZIN<br />
SondErAkTion<br />
Testen Sie jetzt<br />
3 Ausgaben<br />
für 3 Euro!<br />
Jetzt schnell bestellen:<br />
• Telefon 07131 / 2707 274<br />
• Fax 07131 / 2707 78 601<br />
• E-Mail: abo@linux-magazin.de<br />
• <strong>Web</strong>: www.linux-magazin.de/probeabo<br />
Mit großem Gewinnspiel unter:<br />
www.linux-magazin.de/probeabo<br />
GEwinnEn SiE... EinEn ClASSMATE PC<br />
ConVErTiblE TouChSCrEEn iM wErT Von 399 Euro!<br />
Einsendeschluss ist der 15.03.2012<br />
zur Verfügung gestellt von<br />
www.1edu.de
Forum<br />
www.linux-magazin.de Bücher 01/2012<br />
100<br />
Bücher über Android-Forensik und zur C++-Praxis<br />
Tux liest<br />
Passend zum Titelthema „<strong>Web</strong>“ bespricht das <strong>Linux</strong>-<strong>Magazin</strong> ein Buch über die Sicherheit von <strong>Web</strong>anwendungen.<br />
Der zweite Band behandelt Penetrationstests mit dem Ruby-Framework Metasploit. Mathias Huber, Mark Vogelsberger<br />
Einbrüche in <strong>Web</strong>sites samt Diebstahl<br />
von Benutzer- und Kreditkartendaten<br />
tauchen mittlerweile regelmäßig in den<br />
Nachrichten auf. Das Buch „<strong>Web</strong>-Sicherheit“<br />
aus dem Mitp-Verlag erläutert, was<br />
<strong>Web</strong>anwendungen verletzbar macht und<br />
wie man sie schützt.<br />
<strong>Web</strong>-Sicherheit<br />
Der EDV-Berater und Autor Sebastian<br />
Kübeck beginnt mit einem einführenden<br />
Abschnitt. Auf die Historie der Computerkriminalität<br />
hätte er zwar verzichten<br />
dürfen, doch gleich danach vermittelt<br />
er wichtige Grundkenntnisse, etwa über<br />
Brute-Force-Attacken, Authentifizierung<br />
mit Passwörtern und Tokens sowie symmetrische<br />
und asymmetrische Verschlüsselungsverfahren.<br />
Der zweite Abschnitt – rund 90 Seiten<br />
– widmet sich den häufigsten Schwachstellen<br />
von <strong>Web</strong>anwendungen im Detail.<br />
Hier erklärt Kübeck, wie SQL- und<br />
Command-Injection, Cross-Site-Scripting<br />
und Clickjacking funktionieren und was<br />
der Anwendungsentwickler dagegen tun<br />
kann. Leicht verständliche Codebeispiele<br />
in SQL, Java und Javascript begleiten<br />
die Ausführungen. Weitere Problemfelder<br />
sind Authentifizierung, Session-Management,<br />
Pufferüberläufe und unsichere<br />
Konfigurationen. Die Kapitel schließen<br />
mit praktischen Übungsaufgaben.<br />
Info<br />
Sebastian Kübeck:<br />
<strong>Web</strong>-Sicherheit<br />
Mitp, 2011<br />
340 Seiten<br />
30 Euro<br />
ISBN 978-3-8266-9024-2<br />
Der letzte Teil dieses Buches widmet sich<br />
dem Testen und Absichern von <strong>Web</strong>anwendungen.<br />
Dabei kommen spezielle<br />
Scanner wie der OWASP-<strong>Web</strong>scarab oder<br />
Nikto zum Einsatz – selbstverständlich<br />
mit der Warnung, fremde oder produktive<br />
Systeme zu verschonen. Anschließend<br />
gibt der Autor einige praktische<br />
Ratschläge zur sicheren <strong>Web</strong>entwicklung<br />
mit JSP-Seiten und Java-Servlets.<br />
Dieser Band eignet sich für Leser, die einen<br />
Einstieg in die Sicherheitstechnik von<br />
<strong>Web</strong>anwendungen suchen. Den ersten<br />
Abschnitt können Junior-Programmierer<br />
genauso mit Gewinn lesen wie Projektleiter,<br />
danach wird der Text kleinteiliger und<br />
sprachspezifischer, aber auch konkreter<br />
und anschaulicher. Vor allem Entwickler<br />
sollten die Lektüre noch durch ein gutes<br />
Programmierbuch zur Sprache ihrer Wahl<br />
ergänzen.<br />
Penetrationstests<br />
Das englischsprachige Buch „Metasploit“<br />
aus dem Verlag No Starch Press richtet<br />
sich an Penetration-Tester, die mit<br />
dem gleichnamigen Framework arbeiten<br />
möchten. Nach einer kurzen Vermittlung<br />
von Grundlagen erfährt der Leser, wie<br />
er mit gängigen Werkzeugen wie Whois<br />
und Nmap Informationen über das zu<br />
prüfende System sammelt. Darauf folgen<br />
zwei Kapitel über das Scannen nach<br />
Sicherheitslücken, die auch schildern,<br />
wie Metasploit diese ausnutzen kann.<br />
Hierbei kommen hauptsächlich Nexpose<br />
und Nessus im Zusammenspiel mit dem<br />
Framework zum Einsatz.<br />
Danach beschreiben die Autoren, wie<br />
man mit der Programmiersprache Ruby<br />
eigene Erweiterungen für Metasploit<br />
schreibt. Anhand des Moduls »mssql_<br />
exec« für Microsofts SQL Server erklären<br />
sie zunächst den generellen Aufbau eines<br />
Moduls. Im nächsten Schritt entwickeln<br />
sie anspruchsvollen Shellcode für die<br />
Windows Powershell als neues Modul.<br />
Ein Kapitel über den Meterpreter erläutert<br />
die Grundlagen zur Automatisierung von<br />
Metasploit mit Skripten. Dort ist auch<br />
das API genau beschrieben, inklusive der<br />
Ruby-Mixins. Das letzte Kapitel präsentiert<br />
einen kompletten Penetrationstest<br />
mit Metasploit im Detail.<br />
Dieses Buch erklärt ausführlich, meist in<br />
Form von Schritt-für-Schritt-Anleitungen,<br />
wie Metasploit-Benutzer Scans und Attacken<br />
durchführen. Damit ist es sehr<br />
nützlich für Leser, die das Framework<br />
kennenlernen möchten. Auch Metasploit-<br />
Profis finden in diesem Buch das eine<br />
oder andere versteckte Feature, insbesondere<br />
wenn es um das Erweitern der<br />
Software geht.<br />
Leider verfallen die Autoren oft in die aus<br />
der Windows-Welt bekannte „Klick hier,<br />
klick dort“-Schreibweise, die für professionelle<br />
<strong>Linux</strong>-Anwender unangenehm<br />
oberflächlich wirkt. Daneben demonstriert<br />
das Buch zwar zahlreiche Attacken,<br />
erklärt aber nur selten die technischen<br />
Hintergründe. Ein an Security-Know-how<br />
interessierter Leser wird damit also wenig<br />
glücklich werden. Zusammenfassend hält<br />
das Buch aber, was es verspricht: Es ist<br />
eine detaillierte Metasploit-Dokumentation<br />
für Anwender.<br />
n<br />
Info<br />
David Kennedy, Jim<br />
O’Gorman, Devon Kearns,<br />
Mati Aharoni:<br />
Metasploit<br />
No Starch Press, 2011<br />
330 Seiten<br />
40 Euro<br />
ISBN: 978-1-59327-288-3
Admin-mAGAZin<br />
im JAhres-Abo<br />
Jede Ausgabe des Admin-<strong>Magazin</strong>s bietet praktisch anwendbares Wissen<br />
von ausgewiesenen Experten und ausführliche Hintergrundberichte für alle<br />
Systemverwalter von <strong>Linux</strong>, Unix und Windows. Die Schwerpunkte reichen von<br />
Storage und Backup bis hin zu Netzwerk-Themen und Security.<br />
Ein Sonderteil hilft Admins heterogener Welten.<br />
15 % sparen<br />
Jetzt bestellen unter:<br />
www.admin-magazin.de/abo<br />
sichern sie sich ihr<br />
GrAtis Admin t-shirt!<br />
• Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@admin-magazin.de<br />
Mit dem Jahres-Abo erhalten Sie 6 Ausgaben des Admin-<strong>Magazin</strong>s zum Vorzugspreis von E 49,90 * statt E 58,80 *<br />
(Lieferung frei Haus).<br />
* Preise gelten für Deutschland. Schweiz: SFr 82,32; Österreich: E 54,90; anderes Europa: E 59,90
Forum<br />
www.linux-magazin.de Leserbriefe 01/2012<br />
102<br />
Auf den Punkt gebracht<br />
Leserbriefe<br />
Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an [redaktion@linux-magazin.de].<br />
Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit<br />
Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.<br />
Nagios lebt<br />
11/11, S. 6: Ich lese in den News des <strong>Linux</strong>-<strong>Magazin</strong>s,<br />
dass Sie Icinga als Nagios-<br />
Nachfolger bezeichnen. Das ist falsch!<br />
Nagios befindet sich in aktiver Entwicklung.<br />
Gerade ist die Nagios World Conference<br />
in den USA zu Ende gegangen.<br />
Dort wurden viele Neuerungen rund um<br />
Nagios XI und Nagios Core vorgestellt.<br />
Daher finde ich es nicht fair, wenn Sie bei<br />
Icinga von einem Nachfolger sprechen,<br />
denn Nagios ist nicht tot. Vielmehr ist<br />
Icinga ein Fork von Nagios, nicht mehr<br />
und nicht weniger.<br />
Christian Mies, per E-Mail<br />
Wir wissen, dass das originale Nagios<br />
weiter existiert und dass Entwickler daran<br />
arbeiten. Dass es Software gibt, die<br />
einem Vorbild nachfolgt, bedeutet ja nicht<br />
zwangsläufig, dass der Vorgänger tot ist.<br />
Wenn man es so interpretiert, wirkt unsere<br />
Formulierung auch nicht unfair. (jcb)<br />
Summa cum laude<br />
11/11, S. 85: Mit großem Interesse habe<br />
ich den Beitrag über vier Literaturverwaltungen<br />
gelesen. Bei uns an der Universi-<br />
Errata<br />
11/11, S. 72: Im Beitrag über Init-Systeme ist<br />
Listing 3 nicht vollkommen LSB-konform. Es<br />
fehlt die Festlegung der Rückgabewerte. Eine<br />
korrigierte Fassung ist unter [http:// www.<br />
linux‐magazin. de/ static/ listings/ magazin/<br />
2011/ 11/ Init‐Systeme/] zu finden.<br />
11/11, S. 85: Die Abbildung 3 im Trusted-Boot-<br />
Artikel ist falsch gekennzeichnet. Richtig ist:<br />
Die rot dargestellten Komponenten sind<br />
unverschlüsselt, die grünen dagegen sind<br />
verschlüsselt.<br />
tät Kassel entstand die Software Bibsonomy<br />
[http://www.bibsonomy.org] . Sie<br />
ist Open Source und hat inzwischen über<br />
500 000 aktive Nutzer.<br />
Sie bietet Social Bookmarking und Literaturverwaltung<br />
in einem. Daneben importiert<br />
sie Daten aus vielen wissenschaftlichen<br />
Datenbanken. Der Anwender kann<br />
mit der Software Literaturlisten online<br />
teilen oder auf Internetseiten publizieren.<br />
Ein Beispiel für eine solche Publikationsliste<br />
ist unter [http://www.kde.cs.<br />
uni‐kassel.de/pub] zu finden.<br />
An der Unibibliothek in Kassel haben wir<br />
zudem das Bibsonomy-Derivat PUMA als<br />
Online-Service für Studenten und Wissenschaftler<br />
entwickelt: Forscher können<br />
damit ihre Publikationen auf dem Dokumentenserver<br />
veröffentlichen. Dissertationen,<br />
Tagungsbände und vieles mehr ist<br />
somit im Open-Access-Modell verfügbar<br />
und auch bei Google Scholar sichtbar.<br />
Stefan Drößler per E-Mail<br />
Unterschätzte<br />
Skriptsprachen<br />
11/11, S. 88: Im Rechtsartikel „Einer für<br />
alle“ finde ich einige Zeilen sehr salopp<br />
formuliert, teilweise sogar falsch. Python-<br />
Programme etwa muss der Entwickler<br />
nicht immer im Quelltext ausliefern. Der<br />
Interpreter gibt sich auch mit dem Bytecode,<br />
also den »*.pyc«-Dateien zufrieden.<br />
Doch dieser Bytecode lässt sich wieder<br />
zu Quelltext dekompilieren. Das gilt für<br />
Java genauso.<br />
Daneben verwendet der Autor Fred Andresen<br />
den Begriff „klartext-interpretierte<br />
Skriptsprachen“ und schreibt über diese:<br />
„Zudem ist die Ausführungsgeschwindigkeit<br />
so langsam, dass man bei umfangreichen<br />
Applikationen selbst auf neuesten<br />
Rechner-Boliden nicht guten Gewissens<br />
darauf setzen kann.“ Was darf man unter<br />
klartext-interpretierten Skriptsprachen<br />
verstehen? Tcl und Shell sicherlich. Python<br />
und Ruby sind es nicht, denn sie<br />
verwenden Bytecode. Beim Leser bleibt<br />
leicht hängen: „Richtige Programme<br />
schreibt man mit C oder C++“. Das ist<br />
ein Vorurteil, mit dem man als moderner<br />
Programmierer immer wieder konfrontiert<br />
ist. Diese Ansicht ist jedoch veraltet:<br />
Skriptsprachen machen die Entwicklung<br />
um einiges schneller. Wird die Laufzeit<br />
der Software zu lange, hilft meist gezieltes<br />
Auswerten der Ausführungsgeschwindigkeit<br />
und anschließendes Optimieren<br />
weniger Codezeilen.<br />
Thomas Güttler, per E-Mail<br />
Eintönig<br />
12/11, S. 60: Ich frage mich, warum Ihr<br />
Source-Highlight in den Tooltipps fünf<br />
Sterne gebt, aber Eurem eigenen Tipp<br />
nicht folgt. Der einzige, der sich teilweise<br />
die Mühe macht, Syntaxhervorhebung in<br />
seine Artikel zu bringen, ist Perlmeister<br />
Mike. Ansonsten gibt sich aller Quelltext<br />
im spröden Charme der 70er Jahre.<br />
Daniel Pfeiffer, per E-Mail<br />
Die Redaktion hat sich vor ein paar Jahren<br />
mit dem Thema Syntaxhighlighting in<br />
den Listingkästen befasst. Dabei erwies<br />
sich die Sache aber als nicht so einfach:<br />
Der Kastenhintergrund ist in einem blassen<br />
Blau-grau und die Listingschrift ist<br />
aus Platzgründen nicht allzu groß. Unsere<br />
Experimente haben ergeben, dass wir<br />
nicht genügend viele, gute unterscheidbare<br />
und gut lesbare Farben zusammenbekommen,<br />
um alle denkbaren Syntax-<br />
Fälle abzudecken. (jk)<br />
n
Digitales aBO<br />
linuxUser: Das Monatsmagazin für die Praxis<br />
DigisUB *<br />
nur 56,10 €<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<br />
Lesen Sie News und Artikel<br />
fast 1 Woche vor dem Kiosk!<br />
Sparen Sie im Abo 15% im<br />
Vergleich zum PDF-Einzelkauf!<br />
Nutzbar auf Notebook und<br />
PC, Tablet oder Smartphone!
Know-how<br />
www.linux-magazin.de Kern-Technik 01/2012<br />
104<br />
Kernel- und Treiberprogrammierung mit dem <strong>Linux</strong>-Kernel – Folge 60<br />
Kern-Technik<br />
Den Kern eines laufenden Betriebssystems zu debuggen war und ist problematisch. Doch der Emulator Qemu<br />
ermöglicht plattformunabhängiges Kernel- und Modul-Debugging auf Hochsprachen-Niveau. Dank der virtuellen<br />
Maschine braucht der Kernelhacker noch nicht einmal einen zweiten Rechner. Jürgen Quade, Eva-Katharina Kunst<br />
© psdesign1, Fotolia<br />
60<br />
Zu den Basisoperationen eines Debuggers<br />
zählt das Einfrieren von Codesequenzen<br />
und das nachfolgende Analysieren<br />
von Speicherinhalten. Gehören<br />
die Codesequenzen zu einer Applikation,<br />
ist Debugging vergleichsweise unproblematisch.<br />
Wird aber der Kernel selbst<br />
eingefroren, steht keine Ablaufumgebung<br />
mehr zur Verfügung, die Tastatureingaben<br />
entgegennimmt, Daten auf<br />
den Monitor zaubert, auf Speicherinhalte<br />
zugreift oder die den Kernel später weiterarbeiten<br />
lässt. Kernel-Debugging hat<br />
etwas von einem Arzt, der sich selbst<br />
operieren möchte.<br />
Technisch ist das Problem einfach zu lösen,<br />
indem man komplexe Funktionen<br />
auf ein zweites System auslagert. Das<br />
hat ja üblicherweise ein funktionierendes<br />
Speicher- und Dateimanagement und<br />
übernimmt das Durchwühlen des Quellcodes<br />
nach Variablen,<br />
Datenstrukturen,<br />
Funktionen und Codezeilen.<br />
Für den zu<br />
debuggenden Kernel<br />
wird nur noch ein so<br />
genannter Debugserver<br />
benötigt, der nur<br />
einfache Kommandos<br />
wie etwa Speicherzellen<br />
lesen und schreiben<br />
oder Breakpoints<br />
setzen in dem zu untersuchenden<br />
System<br />
ausführt.<br />
Der in der vorigen<br />
Kern-Technik [1] vorgestellte<br />
Emulator<br />
Qemu enthält einen<br />
solchen Debugserver<br />
(siehe Kasten „Varianten<br />
des Kernel-<br />
Debugging“). Kommt zudem wieder die<br />
Systemgenerierungs-Software Buildroot<br />
[2] zum Einsatz, ist Kernel-Debugging<br />
vergleichsweise leicht umzusetzen – Voraussetzung<br />
ist ein mit Symbolinformationen<br />
ausgestatteter Kernel.<br />
Dank Buildroot ist das aber kein Problem:<br />
Binnen Kurzem stellt das Tool ein übersichtliches<br />
Userland und einen schlanken<br />
Kernel zur Verfügung, der sich rasch umkonfigurieren<br />
und bearbeiten lässt. Alle<br />
Schritte sind in dem Kasten „Kurzanleitung“<br />
zusammengefasst. Zunächst lädt<br />
der Anwender Buildroot herunter und<br />
entpackt das Archiv. Danach erstellt er<br />
die Default-Konfiguration – diesmal am<br />
besten für ein x86-System – mit »make<br />
qemu_x86_defconfig«.<br />
Vier Optionen sind nach dem anschließenden<br />
Aufruf von »make menuconfig«<br />
anzupassen: Unter »Toolchain« aktiviert<br />
der Anwender die Option »Build gdb for<br />
the Host«, unter »Kernel | Kernel version«<br />
gibt er »3.1« ein, unter »System Configuration<br />
| Port to run getty (login prompt)<br />
on« trägt er »tty1« ein und unter »Build<br />
options | Number of jobs to run simultaneously«,<br />
die Anzahl der Prozessorkerne<br />
der Generierungsmaschine.<br />
Ein weiteres »make« stößt den ersten<br />
Generierungslauf an, er installiert unter<br />
anderem die Kernelquellen, deren Konfiguration<br />
der Benutzer allerdings später<br />
noch einmal bezüglich Kernel-Debugging<br />
anpassen muss.<br />
Debugging-Kernel<br />
Dazu ruft der Anwender im Buildroot-<br />
Hauptverzeichnis »make linux‐menuconfig«<br />
auf. Die relevanten Einstellungen im<br />
daraufhin angezeigten Menü »Optionen«<br />
befinden sich unterhalb des Punktes<br />
»Kernel hacking« (siehe Abbildung 1).<br />
Erforderlich sind die Optionen »Kernel<br />
debugging« und »Compile the kernel with<br />
debug info«. Ein weiteres »make« generiert<br />
einen Kernel mit der angepassten<br />
Konfiguration.<br />
Das Ergebnis sind im Wesentlichen zwei<br />
Dateien: Im Hauptverzeichnis findet sich<br />
die Datei »vmlinux«, die nicht nur den<br />
Code, sondern auch die zugehörigen Debuginfos<br />
enthält. Im Architektur-Unterverzeichnis<br />
– für die x86-Plattform ist das<br />
beispielsweise »arch/x86/boot/« – liegt<br />
der komprimierte Kernel als »bzImage«.<br />
Auf anderen Plattformen heißt der Kernel<br />
schon mal »zImage«.<br />
Bootloader wie beispielsweise Grub<br />
brauchen den komprimierten Kernel<br />
(»bzIma ge«), der Debugger selbst benötigt<br />
zwar ebenfalls das Image des Kernels,<br />
greift jedoch auf das unkomprimierte und
mit Debuginfo versehene Pendant »vmlinux«<br />
zurück. Selbstverständlich benötigt<br />
der Debugger auch Zugriff auf den<br />
Quellcode.<br />
Wer mit Buildroot Kernel und Root-Filesystem<br />
generiert hat, sollte beides zunächst<br />
ohne Debugging ausprobieren:<br />
qemu ‐kernel output/images/bzImageU<br />
‐hda output/images/rootfs.ext2U<br />
‐append "root=/dev/sda rw"<br />
Kurzanleitung<br />
Funktioniert alles, kann das Debuggen<br />
durch Anhängen von »‐s« und »‐S« beginnen.<br />
Die Option »‐s« startet den Debugserver<br />
(»gdbserver«), »‐S« hält den Kernel<br />
gleich zu Beginn an:<br />
qemu ‐kernel output/images/bzImageU<br />
‐hda output/images/rootfs.ext2 ‐appendU<br />
"root=/dev/sda rw" ‐s ‐S<br />
Damit der GNU-Debugger (GDB) die zum<br />
Kernel gehörenden C- und Headerdateien<br />
findet, startet der Anwender das Tool aus<br />
dem Quellcodeverzeichnis des <strong>Linux</strong>-Kernels<br />
heraus (siehe Abbildung 2). Wer<br />
ein x86-System gebaut hat, kann den auf<br />
Kernelquellen und GCC sowie Buildroot, Qemu und GDB sind die Zutaten für erfolgreiches Kernel-<br />
Debugging. Die folgende Anleitung fasst wie ein Kochrezept alle Arbeitsschritte für das richtige<br />
Setup zusammen. Die Feinheiten beschreibt der Artikel.<br />
1. Buildroot herunterladen und auspacken<br />
wget http://buildroot.uclibc.org/download/buildroot‐2011.08.tar.bz2<br />
tar xvfj buildroot‐2011.08.tar.bz2<br />
2. Buildroot konfigurieren und System generieren<br />
cd buildroot‐2011.08<br />
make qemu_x86_defconfig<br />
make menuconfig<br />
[build‐option, Kernel‐Version 3.1, gdb, tty1]<br />
make<br />
make linux‐menuconfig<br />
[debug info]<br />
make<br />
3. Modul kompilieren und ins Rootverzeichnis kopieren<br />
cd driver<br />
export CROSS_COMPILE=...<br />
export ARCH=...<br />
make<br />
cp module.ko .../output/target/root/<br />
4. Root-Dateisystem neu generieren<br />
cd buildroot‐2011.08<br />
make<br />
5. System mit Qemu und Debugserver starten<br />
qemu ‐kernel output/images/bzImage ‐hda output/images/rootfs.ext2 ‐append "root=/dev/<br />
sda rw" ‐s ‐S &<br />
6. Debugger starten<br />
gdb<br />
file vmlinux<br />
target remote :1234<br />
continue<br />
7. Einloggen, Treiber laden und Speicheradressen identifizieren<br />
insmod Modul.ko<br />
cat /sys/module/hello/sections/.text<br />
cat /sys/module/hello/sections/.data<br />
cat /sys/module/hello/sections/.bss<br />
8. Modul-Symbolinformationen laden<br />
add‐symbol‐file Modul.ko Addr_text<br />
‐s .data Addr_data<br />
‐s .bss Addr_bss<br />
9. Debuggen: Breakpoints setzen etc.<br />
dem Entwicklungsrechner vorinstallierten<br />
GNU-Debugger einsetzen, ansonsten<br />
kommt der für das Hostsystem gebaute<br />
und unterhalb des Buildroot-Verzeichnisses<br />
»output/host/usr/bin/« abgelegte<br />
GDB zur Verwendung:<br />
cd output/build/linux‐3.1/<br />
gdb<br />
Das Kommando »gdb« startet die Debugger-Sitzung.<br />
Als Erstes lädt der Benutzer<br />
Code und Symbole des Kernels mit Hilfe<br />
des Befehls »file vmlinux«. Wer nun die<br />
Meldung »no debug‐symbols found« zu<br />
sehen bekommt, muss die Kernelkonfiguration<br />
bezüglich der Debug-Optionen<br />
überprüfen und gegebenenfalls den <strong>Linux</strong>-Kernel<br />
neu kompilieren. Inklusive<br />
der Symbole ist »vmlinux« mehr als 40<br />
MByte groß.<br />
Stopp und Start<br />
Die Verbindung zum Debugserver stellt<br />
das Kommando »target remote :1234«<br />
her (Abbildung 2). Danach kontrolliert<br />
»gdb« die weitere Ausführung. Ein »continue«<br />
aktiviert das <strong>Linux</strong>-Gastsystem,<br />
das Tastenkürzel [Strg]+[C] unterbricht<br />
Tabelle 1: Die wichtigsten GDB-<br />
Kommandos<br />
Kommando<br />
add-symbol-file<br />
break<br />
bt<br />
continue<br />
del<br />
detach<br />
file<br />
help<br />
info<br />
next<br />
print<br />
quit<br />
step<br />
target<br />
Bedeutung<br />
Zusätzliche Symboldatei<br />
laden<br />
Breakpoint setzen<br />
Aufrufreihenfolge der Funktionen<br />
ausgeben<br />
Programm fortsetzen<br />
Breakpoint löschen<br />
Debugger vom Debugserver<br />
abmelden<br />
Code (Programm) laden<br />
Informationen zu den implementierten<br />
Funktionen<br />
ausgeben<br />
Diverse Informationen<br />
anzeigen<br />
Codezeile abarbeiten<br />
Ausgabe von Variablen,<br />
Datenstrukturen und Speicherzellen<br />
GDB beenden<br />
Bei der Abarbeitung Unterfunktionen<br />
mit debuggen<br />
Verbindung zum Debugserver<br />
herstellen<br />
Kern-Technik 01/2012<br />
Know-how<br />
www.linux-magazin.de<br />
105
Know-how<br />
www.linux-magazin.de Kern-Technik 01/2012<br />
106<br />
Auch Kernelmodule »Makefile«, der von Listing 2 als »hello.c«<br />
lassen sich auf Hochsprachen-Niveau<br />
mit<br />
Qemu debuggen. Doch<br />
muss dafür die Unterstützung<br />
für Module<br />
in der Kernelkonfiguration<br />
aktiviert sein<br />
(»Enable loadable module<br />
in einem eigenen Ordner unterhalb des<br />
Buildroot-Verzeichnisses liegen. Eventuell<br />
ist noch der Pfad zu den in der Variablen<br />
»KDIR« abgelegten <strong>Linux</strong>-Quellen zu<br />
korrigieren. Das angepasste Makefile<br />
baut das Modul »hello.ko«, das der Anwender<br />
anschließend in das Root-Filesystem<br />
kopiert, etwa mit dem Kommando:<br />
support« mit dem<br />
Abbildung 1: Die zum Debugging notwendigen Kerneloptionen finden sich<br />
unter dem Menüpunkt »Kernel hacking«.<br />
Unterpunkt »Module<br />
unloading«). Bei dem<br />
von Buildroot erzeugten<br />
Kernel ist hier also<br />
eine Neukonfiguration<br />
und Neugenerierung<br />
erforderlich.<br />
Da zudem die Adresse<br />
des Modulcodes im<br />
Hauptspeicher nicht<br />
im Vorhinein bekannt<br />
ist, muss der Anwender<br />
sie nach dem Laden<br />
cp hello.ko ../output/target/root/<br />
Der Aufruf von »make« im Buildroot-<br />
Verzeichnis erzeugt das Root-Filesytem<br />
neu. Damit steht das Modul im System<br />
nach dem Booten im Homeverzeichnis<br />
des Superusers zur Verfügung. Am einfachsten<br />
ist es, bei dem Aufruf von Qemu<br />
die Option »‐S« wegzulassen, »‐s« aber zu<br />
verwenden. Dadurch ist zwar der Debugserver<br />
aktiviert, <strong>Linux</strong> fährt aber dennoch<br />
direkt hoch.<br />
Nach dem Einloggen mit dem Login-Namen<br />
»root« lädt der Anwender das Modul<br />
die Abarbeitung. Abbildung 2 zeigt, wie<br />
das GDB-Kommando »break vfs_mknod«<br />
einen Breakpoint auf die Funktion »vfs_<br />
mknod« setzt.<br />
Ausgang<br />
Sobald der Anwender auf dem <strong>Linux</strong>-System<br />
des Moduls identifizieren und dem<br />
Debugger mitteilen. Er findet sie in den<br />
Einträgen des »/sys«-<br />
Dateisystems.<br />
Vor dem Debuggen<br />
steht zunächst noch<br />
das Übersetzen des<br />
Moduls für den von<br />
per »insmod hello.ko« (Abbildung 3). Die<br />
folgenden Befehle ermitteln die Adressen<br />
das Kommando »mknod /dev/hello Buildroot erzeugten<br />
254 0« aufruft, stoppt die Ausführung<br />
und Variablen lassen sich untersuchen.<br />
Kernel. Am einfachsten<br />
geschieht das mit<br />
Um den Programmablauf fortzusetzen, einem angepassten<br />
gibt er das Kommando »continue« ein.<br />
Um den Debugger vom <strong>Linux</strong>-System zu<br />
trennen, drückt er zunächst [Strg]+[C].<br />
Makefile. Dabei muss<br />
die Variable »KDIR«<br />
auf den Pfad der zu<br />
Anschließend löst das GDB-Kommando verwendenden Kernelquellen<br />
»detach« die Verbindung zum Server,<br />
»quit« beendet den Debugger (weitere zeigen, der<br />
sich im vorliegenden<br />
Kommandos siehe Tabelle 1).<br />
Fall unterhalb des<br />
Buildroot-Verzeichnisses<br />
Listing 1: Makefile<br />
befindet.<br />
Sollte das zu debuggende<br />
<strong>Linux</strong>-System<br />
im Qemu nicht für<br />
eine x86-Architektur<br />
Abbildung 2: Der GDB wird aus dem <strong>Linux</strong>-Quellcodeverzeichnis gestartet,<br />
damit hat er Zugriff auf die C-Dateien.<br />
sein, sind wie in [1]<br />
beschrieben zusätzlich<br />
die Environment-Variablen<br />
»CROSS _COM-<br />
PILE« und »ARCH« zu<br />
setzen.<br />
Zum Debuggen des<br />
Moduls muss der Inhalt<br />
von Listing 1 als<br />
Abbildung 3: Nach dem Einloggen als Root lädt der Anwender unter Qemu das<br />
Kernelmodul und ermittelt die Adressen von Code- und Datensegmenten.<br />
01 ifneq ($(KERNELRELEASE),)<br />
02 obj‐m := hello.o<br />
03 <br />
04 else<br />
05 PWD := $(shell pwd)<br />
06 KDIR := ~/buildroot‐2011.08/output/build/linux‐3.1/<br />
07 <br />
08 default:<br />
09 $(MAKE) ‐C $(KDIR) M=$(PWD) modules<br />
10 endif<br />
11 <br />
12 clean:<br />
13 rm ‐rf *.ko *.o *.mod.c *.mod.o modules.order<br />
14 rm ‐rf Module.symvers .*.cmd .tmp_versions
des Code- sowie der beiden Daten-Segmente<br />
des Kernelmoduls:<br />
cat /sys/module/hello/sections/.text<br />
cat /sys/module/hello/sections/.data<br />
cat /sys/module/hello/sections/.bss<br />
Da das mit Buildroot erzeugte <strong>Linux</strong>-<br />
System keinen Udev-Support bietet, ist<br />
außerdem mit dem Kommando »mknod<br />
/dev/hello c 254 0« die Gerätedatei anzulegen,<br />
über die eine Applikation Zugriff<br />
auf den Beispieltreiber erhält. Ob<br />
auf dem System die Major-Nummer 254<br />
verwendet wird, ermittelt die Befehlszeile<br />
»cat /proc/devices | grep Hello«.<br />
Den Debugger auf dem Hostsystem startet<br />
der Benutzer wie gehabt aus dem Quellcodeverzeichnis<br />
des <strong>Linux</strong>-Kernels. Nach<br />
Eingabe der Kommandos »file vmlinux«<br />
und »target remote :1234« hält Qemu das<br />
<strong>Linux</strong>-System an.<br />
Das Kommando »add-symbol-file« teilt<br />
dem System die zuvor im Sys-FS ermittelten<br />
hexadezimalen Adressen des<br />
Code- und der beiden Daten-Segmente<br />
des Moduls mit:<br />
add‐symbol‐file Pfad/hello.ko 0xd8817000U<br />
‐s .data 0xd88170e0 ‐s .bss 0xd8817294<br />
Jetzt kann der Anwender bereits einen<br />
Breakpoint setzen, etwa auf die Funktion<br />
»driver_read()«. Ein »continue« lässt das<br />
<strong>Linux</strong>-System weiterarbeiten.<br />
Gibt er nun das Kommando »cat /dev/<br />
hello« ein, aktiviert sich die Modulfunktion<br />
»driver_read()« und GDB hält den<br />
Kern-Technik 01/2012<br />
Know-how<br />
www.linux-magazin.de<br />
107<br />
Varianten des Kernel-Debugging<br />
<strong>Linux</strong> bietet mit Qemu, dem KGDB und dem KDB<br />
drei Möglichkeiten, Kernel- und Modul-Code zu<br />
debuggen (Abbildung 4). Während Qemu seinen<br />
Debuggingserver selbst mitbringt und keine<br />
besondere Kernelunterstützung benötigt, hat<br />
Linus Torvalds vor drei Jahren zähneknirschend<br />
den In-Kernel-Debugserver »kgdb« akzeptiert.<br />
Wie bei der Qemu-Lösung läuft der eigentliche<br />
Debugger auf einem zweiten Rechner, dem Debughost.<br />
Die Kommunikation zwischen Server<br />
und Debugger findet über eine serielle Verbindung<br />
statt. Steht weder ein zweiter Rechner<br />
noch die serielle Verbindung zur Verfügung,<br />
kann mit ein paar Tricks eine Virtualisierungslösung<br />
wie Virtualbox aushelfen und das gewünschte<br />
Interface emulieren.<br />
Ansonsten hat Torvalds in Version 2.6.35 mit<br />
dem »kdb« ein Frontend für den »kgdb« in<br />
den Standardkernel integriert, das einfache<br />
Operationen wie Lesen und Setzen von Speicherstellen<br />
sowie das Anzeigen der im System<br />
instanzierten Rechenprozesse ermöglicht – und<br />
das auf demselben System. Der »kdb« wird bei<br />
entsprechender Konfiguration aktiv, sobald der<br />
<strong>Linux</strong>-Kernel abstürzt. Alternativ lässt er sich<br />
über die Tastenkombination [Alt]+[S-Abf]+[G]<br />
aufrufen. Hochsprachen-Debugging ist damit<br />
jedoch nicht möglich.<br />
Diese In-Kernel-Debugger stellt eine der nächsten<br />
Kern-Technik-Folgen ausführlicher vor.<br />
das magazin für ubuntu-anwender!<br />
digisub-mini * : 2 digitale ausgaben ubuntu user!<br />
5€<br />
FÜR 2 AUSGABEN<br />
iHre VOrteiLe<br />
● Hilfe für ein- und umsteiger<br />
bei den ersten schritten mit ubuntu<br />
● zusatzwissen rund um ubuntu<br />
und seine derivate<br />
● 2x testen ohne risiko, das digisub-mini<br />
ist jederzeit kündbar!<br />
● nutzbar auf notebook und PC,<br />
tablet oder smartphone!<br />
Jetzt gLeiCH besteLLen!<br />
● tel.: 07131 / 2707 274 ● fax: 07131 / 2707 78 601<br />
● urL: www.ubuntu-user.de/abo ● e-mail: abo@ubuntu-user.de<br />
*geht ohne Kündigung in ein digitales Jahresabo mit 4 ausgaben pro Jahr über und ist jederzeit kündbar!
Know-how<br />
www.linux-magazin.de Kern-Technik 01/2012<br />
108<br />
GDB (Debugger)<br />
Qemu KGDB KDB<br />
<strong>Linux</strong>L<strong>Linux</strong><br />
Qemu<br />
Debugserver<br />
Kernel- Tastatur Bildschirm Executable (Kernel)<br />
Quellcode<br />
Debug-Host<br />
GDB (Debugger)<br />
Remote-Target<br />
KGDB<br />
<strong>Linux</strong><br />
KDB<br />
<strong>Linux</strong><br />
Kernel- Tastatur Bildschirm Executable (Kernel) Tastatur Bildschirm<br />
Quellcode<br />
Abbildung 4: Mit dem Emulator Qemu, mit KGDB und KDB offeriert <strong>Linux</strong> mehrere Möglichkeiten, Kernel- und Modul-Code zu debuggen.<br />
KGDB<br />
Kernel wegen des gesetzten Breakpoints<br />
an. Jetzt lassen sich Speicherzellen des<br />
Moduls untersuchen und die Bearbeitung<br />
schrittweise durchspielen.<br />
Allerdings ist verwirrend, dass der Debugger<br />
scheinbar unmotiviert zwischen<br />
den Zeilen hin und her springt. Der Zugriff<br />
auf lokale Variablen weist auf die<br />
Ursache hin: »value optimized out« – der<br />
Compiler hat den Kernelcode optimiert.<br />
Dadurch sind einige der definierten<br />
Variablen im Debugger nicht sichtbar,<br />
Codefragmente sind umgemodelt. Dass<br />
innerhalb des Kernels einige Makros im<br />
Einsatz sind, vereinfacht die Fehlersuche<br />
ebenfalls nicht. Nicht selten entpuppt<br />
Die Autoren<br />
Eva-Katharina Kunst, Journalistin, und Jürgen<br />
Quade, Professor an der Hochschule Niederrhein,<br />
sind seit den Anfängen von <strong>Linux</strong> Fans von Open<br />
Source. Mittlerweile ist die dritte Auflage ihres<br />
Buches „<strong>Linux</strong>-Treiber entwickeln“ erschienen.<br />
sich im <strong>Linux</strong>-Kernel eine Variable als<br />
ausgefuchstes Makro. Kernel-Debugging<br />
bleibt also eine Herausforderung, der<br />
man sich mit viel Geduld und Übung<br />
stellen muss. (mhu)<br />
n<br />
Infos:<br />
[1] Quade, Kunst, „Kern-Technik“, Folge 59:<br />
<strong>Linux</strong>-<strong>Magazin</strong> 11/11, S. 96<br />
[2] Downloadadresse von Buildroot: [http://<br />
buildroot. uclibc. org/ download. html]<br />
Listing 2: Modul »hello.c«<br />
01 #include <br />
02 #include <br />
03 #include <br />
04 #include <br />
05 <br />
06 static char hello_world[]="Hello World\n";<br />
07 <br />
08 static dev_t hello_dev_number;<br />
09 static struct cdev *driver_object;<br />
10 static struct class *hello_class;<br />
11 static struct device *hello_dev;<br />
12 <br />
13 static ssize_t driver_read( struct file *instanz,<br />
14 char __user *user, size_t count, loff_t *offset )<br />
15 {<br />
16 unsigned long not_copied, to_copy;<br />
17 <br />
18 to_copy = min( count, strlen(hello_world)+1 );<br />
19 not_copied=copy_to_user(user,hello_world,to_copy);<br />
20 return to_copy‐not_copied;<br />
21 }<br />
22 <br />
23 static struct file_operations fops = {<br />
24 .owner= THIS_MODULE,<br />
25 .read= driver_read,<br />
26 };<br />
27 <br />
28 static int __init mod_init( void )<br />
29 {<br />
30 if (alloc_chrdev_region(&hello_dev_number,0,1,"Hello")owner = THIS_MODULE;<br />
36 driver_object‐>ops = &fops;<br />
37 if (cdev_add(driver_object,hello_dev_number,1))<br />
38 goto free_cdev;<br />
39 hello_class = class_create( THIS_MODULE, "Hello" );<br />
40 if (IS_ERR( hello_class )) {<br />
41 pr_err( "hello: no udev support\n");<br />
42 goto free_cdev;<br />
43 }<br />
44 hello_dev = device_create( hello_class, NULL,<br />
45 hello_dev_number, NULL, "%s", "hello" );<br />
46 return 0;<br />
47 free_cdev:<br />
48 kobject_put( &driver_object‐>kobj );<br />
49 free_device_number:<br />
50 unregister_chrdev_region( hello_dev_number, 1 );<br />
51 return ‐EIO;<br />
52 }<br />
53 <br />
54 static void __exit mod_exit( void )<br />
55 {<br />
56 device_destroy( hello_class, hello_dev_number );<br />
57 class_destroy( hello_class );<br />
58 cdev_del( driver_object );<br />
59 unregister_chrdev_region( hello_dev_number, 1 );<br />
60 return;<br />
61 }<br />
62 <br />
63 module_init( mod_init );<br />
64 module_exit( mod_exit );<br />
65 MODULE_LICENSE("GPL");
STARTER KIT 22<br />
mit 2 x 4,7 GByte<br />
Software und<br />
36-seitigem<br />
Begleitheft!<br />
JETZT AM KIOSK!<br />
oder per per Mail: order@linuxnewmedia.de,<br />
Telefon: 089-99 34 11 - 0, Fax: 089-99 34 11 - 99<br />
www.easylinux.de/StarterKit22
Programmieren<br />
www.linux-magazin.de Bash Bashing 01/2012<br />
110<br />
Shellskripte aus der Stümper-Liga – Folge 18: Bash Completion<br />
Bash Bashing<br />
Über Klicki-Bunti und grafische Oberflächen sollten Kommandozeilen-Fans gerechterweise nur dann die Nase<br />
rümpfen, wenn sie die Effizienz steigernden Bedienungstricks der interaktiven Shell auch wirklich kennen und<br />
benutzen. Diesmal: Bash Completion. Bernhard Bablok<br />
Das Zauberwort, um einerseits die Anzahl<br />
der Tastendrücke zu reduzieren und<br />
andererseits eventuell folgenreiche Vertipper<br />
zu vermeiden, heißt Vervollständigung<br />
(Completion). Die [Tab]-Taste schätzt vermutlich<br />
jeder Konsolenbenutzer: Sie ergänzt<br />
Kommandos am Zeilenanfang sowie<br />
Verzeichnis- oder Dateinamen. Die<br />
Doppel-[Tab]-Folge kennt mancher nicht,<br />
namentlich <strong>Linux</strong>er, die solitären Leuchttürmen<br />
gleich in einem Meer von Windows-Benutzern<br />
stehen. Denen schaut<br />
nie ein Gleichgesinnter über die Schulter<br />
und sagt: „Spar dir »ls«-»cd«-»ls«…-Orgien,<br />
und tippe einfach »cd [Tab][Tab]«,<br />
dann zeigt die Shell eine Liste!“<br />
Vervollständigung ist keine Kernfunktionalität<br />
der Bash, sondern der Readline-<br />
Bibliothek. Die Readline-Funktion »complete()«<br />
löst das automatische Erweitern<br />
eines Textes aus. Sie ist normalerweise<br />
an die [Tab]-Taste gebunden. Viele Programme<br />
nutzen die Readline-Bibliothek,<br />
weshalb der Completion-Mechanismus<br />
auch solchen Tools zur<br />
Verfügung steht.<br />
Auf der Kommandozeile<br />
entscheidend ist der<br />
Text vor dem Cursor.<br />
Fängt er mit einem Dollarzeichen<br />
an, sucht<br />
Readline in der Liste<br />
der Variablen, bei einer<br />
Tilde unter den in »/etc<br />
/passwd« definierten<br />
Benutzern und beim<br />
Klammeraffen in der<br />
Lis te der Hosts. Einen<br />
Text ohne Sonderzeichen<br />
interpretiert die<br />
Vervollständigung am<br />
Zeilenanfang als Beginn<br />
eines Kommandos – inklusive Aliase<br />
und Shellfunktionen. Wenn nichts zutrifft,<br />
dann versucht die Bash Filename-Completion,<br />
das heißt »complete()« ergänzt<br />
den Text durch Datei- oder Verzeichnisnamen<br />
im aktuellen Verzeichnis.<br />
Im Hintergrund werkeln für alle diese<br />
Vervollständigungen eigene Readline-<br />
Funktionen (»complete‐command«, »complete‐filename«,<br />
»complete‐into‐braces«,<br />
»complete‐username«, »complete‐hostname«,<br />
»complete‐variable«). Mit<br />
bind ‐p | grep complete<br />
bekommen Bash-Benutzer zu sehen, an<br />
welche Tasten diese Sonderfunktionen<br />
auf ihrem System gebunden sind. [Tab]<br />
ist nämlich nicht die einzige Taste, die<br />
Vervollständigung auslöst. Hostname-<br />
Ergänzung erweist sich zum Beispiel als<br />
nützlich, wenn man die Hostnamen-Vervollständigung<br />
ohne den Klammeraffen<br />
benötigt, etwa:<br />
scp Datei Zielr[Esc][Alt Gr]+[Q]<br />
Das ergänzt die Bash dann zu<br />
scp Datei Zielrechner<br />
Die Tastenkombination [Esc][Alt Gr]+[Q],<br />
also [Meta][@], ist normalerweise mit<br />
»complete‐hostname« verknüpft und ergänzt<br />
den Anfang des eingegebenen<br />
Hostnamens. Diese Kombination liegt –<br />
wie auch ein paar andere – für deutsche<br />
Tastaturen recht ungünstig. Profis tragen<br />
deshalb in ihre »~/.bashrc« die Zeile<br />
bind '"\eh": complete‐hostname'<br />
ein und nutzen anschließend das leichter<br />
erreichbare [Esc][H], was sogar einen<br />
Tastenanschlag spart.<br />
Manual führt aufs Glatteis<br />
Sowohl Hostname-Completion als auch<br />
User-Completion halten für den Benutzer<br />
ein paar Fallstricke bereit. Beispielsweise<br />
liest die Bash die Hostnamen aus der<br />
Datei, auf die die Variable »HOSTFILE«<br />
zeigt. Laut Bash-Manual bedeutet eine<br />
gesetzte, aber leere »HOSTFILE«-Variable,<br />
dass die Bash die »/etc/hosts« liest. Wenn<br />
die Variable nicht gesetzt ist, so ist die<br />
Liste für die Vervollständigung leer.<br />
Doch hier irrt das Bash-Manual, genau<br />
das Gegenteil ist der Fall: Die Variable<br />
muss entweder ungesetzt oder zumindest<br />
mit irgendwas gefüllt sein – die »HOST‐<br />
FILE«-Datei braucht nicht zu existieren,<br />
damit »/etc/hosts« als Quelle dient. In<br />
größeren Umgebungen ist »/etc/hosts«<br />
sowieso meist leer. Hier kann sich jeder<br />
Nutzer ein eigenes »HOSTFILE« mit Favoriten<br />
anlegen und die gleichnamige Variable<br />
in der »~/.bashrc« setzen.<br />
User-Completion wertet normalerweise<br />
die »/etc/passwd« aus. In Netzen, die die
Benutzernamen in einem Verzeichnisdienst<br />
hinterlegen und NSS-LDAP nutzen,<br />
löst die Bash bei User-Completion<br />
eine LDAP-Anfrage aus. Das kann quälend<br />
lange dauern, die Bash scheint einzufrieren.<br />
Und: Je nach Größe der Organisation<br />
liefert so eine Anfrage sehr viele<br />
Benutzernamen zurück, [~][Tab][Tab]<br />
beispielsweise fragt alle Nutzer im LDAP<br />
ab! Leider gibt es keine zu »HOSTFILE«<br />
äquivanente Umgebungsvariable für die<br />
Benutzervervollständigung.<br />
Die eigene Completion<br />
Das Bash-eigene System für die Vervollständigung<br />
kann der Benutzer selbst erweitern.<br />
Dazu dient unter anderem das<br />
Bash-interne Kommando »complete«.<br />
Die Funktion ist nicht ganz trivial, was<br />
sich schon an der Ausführlichkeit des<br />
Manpage-Abschnittes ablesen lässt. Am<br />
einfachsten ist Word-Completion: Ein<br />
kleines Synchronisationsskript des Autors<br />
nimmt als einziges Argument ein<br />
Profil entgegen. Das Kommando<br />
complete ‐W "home data images baw" syncfiles<br />
sorgt dafür, dass die Bash die möglichen<br />
Profilnamen für das Kommando »syncfiles«<br />
automatisch per [Tab] ergänzt.<br />
Mächtiger als »‐W« ist die Option »‐F«,<br />
die als Argument eine Shellfunktion erwartet.<br />
Diese berechnet aus der aktuellen<br />
Kommandozeile die möglichen Vervollständigungen<br />
und legt sie in dem Array<br />
»COMPREPLY« ab. Das Listing 1 zeigt ein<br />
aufs Nötigste reduziertes Beispiel.<br />
Die vorliegende Complete-Spezifikation<br />
sorgt dafür, dass Bash für das »oocalc«-<br />
Kommando nur Verzeichnisse und ODS-<br />
Dateien vervollständigt. Zuerst erzeugt die<br />
Shellfunktion in den<br />
Zeilen 8 bis 12 eine<br />
Liste mit allen Dateien<br />
und Verzeichnissen,<br />
die eine normale Vervollständigung<br />
erfassen<br />
würde. Danach<br />
filtert das Skript alle<br />
Verzeichnisse und unpassenden<br />
Dateien heraus.<br />
Gültige Vervollständigungen<br />
landen<br />
in Zeile 22 im Array<br />
»COMPREPLY«. Solche<br />
Klimmzüge sind leider<br />
notwendig, da die »complete«-Standardoptionen<br />
»‐X« und »‐G« leider nur <strong>fürs</strong><br />
Filtern von Dateinamen gedacht sind und<br />
nicht mit der Autovervollständigung von<br />
Verzeichnisnamen zusammenspielen.<br />
Selbst ist der Basher<br />
Zum Glück muss der User für die Standardkommandos<br />
nicht selbst in die Tasten<br />
greifen und »complete«-Definitionen<br />
schreiben. Open Suse zum Beispiel installiert<br />
ein ganzes Complete-Framework.<br />
Eine Alternative ist das umfangreiche<br />
»Bash‐Completion«-Paket, das beispielsweise<br />
für GNU-kompatible Tools alle<br />
CLI-Optionen komplettiert (Abbildung<br />
1), gültige Paketnamen für das RPM-<br />
Kommando vervollständigt oder die Module<br />
in CVS intus hat. Wer selbst tunen<br />
möchte, findet im Bash-Completion-Paket<br />
genug Anwendungsbeispiele Funktion.<br />
Fazit<br />
Dass die Bash dem Anwender als Programmiersprache<br />
ein ausgeklügeltes (und<br />
Abbildung 1: Completion vervollständigt die Programmoptionen von »grep«.<br />
nicht immer selbsterklärendes) Werkzeug<br />
in die Hand drückt, hatten frühere „Bash<br />
Bashing“-Folgen bereits bewiesen.<br />
Die diesmal beschriebene Auto-Vervollständigung<br />
legt nahe, dass auch der interaktive<br />
Modus der Shell sehr mächtige<br />
Funktionen bereithält. Wer ein kleines<br />
Cheat-Sheet [1] mit den wichtigsten<br />
Funktionstasten neben den PC legt, kann<br />
nach und nach das Klappern der Tastatur<br />
reduzieren. (jk)<br />
n<br />
Infos<br />
[1] Tastatur-Belegung mit wichtigen Bash-<br />
Kommandos: [http:// weblog. topopardo.<br />
com/ others/ bash_cheat_sheet. pdf]<br />
Der Autor<br />
Bernhard Bablok betreut bei Allianz Managed<br />
& Operations Services SE ein großes Datawarehouse<br />
mit technischen Performancemessdaten<br />
von Mainframes bis zu Servern. Wenn er<br />
nicht Musik hört, mit dem Fahrrad oder zu Fuß<br />
unterwegs ist, beschäftigt er sich mit Themen<br />
rund um <strong>Linux</strong> und Objektorientierung. Er ist unter<br />
[mail@bablokb. de] zu erreichen.<br />
Bash Bashing 01/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
111<br />
Listing 1: Vervollständigung per Shellfunktion<br />
001 #!/bin/bash<br />
002<br />
003 oocalc_complete() {<br />
004 local ext="ods"<br />
005 local word="$2"<br />
006<br />
007 # Standard‐Vervollständigung (filename‐completion)<br />
008 local i=0 line<br />
009 declare ‐a liste<br />
010 while read line; do<br />
011 liste[i++]="$line"<br />
012 done <
Programmieren<br />
www.linux-magazin.de Java 01/2012<br />
112<br />
Programmieren mit der Java-SE-Security-Bibliothek<br />
Schloss und Siegel<br />
Die Vorbeugung gegen Datendiebstahl und illegale Zugriffe spielt bei der Anwendungsentwicklung eine immer<br />
größere Rolle. Der Java-Programmierer findet in der Java-SE-Security-Bibliothek, was er braucht, um Daten zu<br />
ver- und entschlüsseln sowie Prüfsummen und Signaturen einzusetzen. Carsten Zerbst<br />
det sich in den Beispiel-Quelltexten zu<br />
diesem Artikel [3].<br />
Es liegt nahe, sensible Daten durch Verschlüsseln<br />
zu schützen. Symmetrische<br />
Verfahren wie der Advanced-Encryption-<br />
Algorithmus (AES) verwenden dabei<br />
zweimal den gleichen Schlüssel: Um die<br />
Originaldaten in eine unlesbare Form zu<br />
verwandeln und um sie wieder zu entschlüsseln<br />
(Abbildung 2).<br />
Geheim!<br />
© Pavel Ignatov, 123RF.com<br />
Sicherheitsaspekte werden bei der Produktion<br />
von Software immer wichtiger.<br />
Inzwischen stehen sie gleichberechtigt<br />
neben den funktionalen Anforderungen<br />
und bestimmen nicht selten die Software-<br />
Architektur. Sicherheitsfragen umfassen<br />
ein weites Feld, sei es der unberechtigte<br />
Zugriff Dritter auf Daten, unbemerkte<br />
Änderungen daran oder das Ausführen<br />
ungewollter Fremdprogramme.<br />
Um dies zu verhindern, bietet Java in<br />
der Security-Bibliothek eine Reihe von<br />
Funktionalitäten an. Das reicht von der<br />
klassischen Verschlüsselung über digitale<br />
Signaturen bis hin zu eingeschränkten<br />
Rechten für Java-Programme selbst. Dies<br />
ist Teil der normalen Java-Distributionen<br />
(Open JDK und Oracle-Java) und in den<br />
Paketen und »javax.security« und »javax.<br />
crypto« zu finden.<br />
Den Aufbau der Pakete gibt die Java Cryptography<br />
Architecture (JCA, [1]) vor. Den<br />
Kern bildet eine Handvoll Klassen für<br />
Sicherheitsaufgaben wie etwa Verschlüsselung<br />
oder Signatur. Die Klasseninstanzen<br />
erzeugt der Programmierer nicht wie<br />
üblich mit »new«, sondern er ruft sie<br />
bei einer Factory-Methode für den gewünschten<br />
Algorithmus ab. Dadurch ist<br />
pro Aufgabe unabhängig von der Anzahl<br />
verfügbarer Algorithmen nur noch eine<br />
Klasse erforderlich.<br />
Krypto-Alternative<br />
Diese Flexibilität reicht über die Algorithmen<br />
hinaus bis hin zur verwendeten<br />
Implementierung. So steht als Alternative<br />
zu Oracles Umsetzung unter anderem die<br />
umfangreichere und MIT-lizenzierte Ausgabe<br />
der Programmierergruppe Legion of<br />
the Bouncy Castle [2] zur Verfügung. Der<br />
Preis für diese Flexibilität liegt auf der<br />
Hand: Anfragen mit falschen Namen bestraft<br />
Java mit der Ausnahme »NoSuchAlgorithmException«.<br />
Abbildung 1 zeigt die<br />
in der JDK-Version 7 verfügbaren Algorithmen,<br />
das zugehörige Programm fin-<br />
Den typischen Aufbau für Ver- und Entschlüsselprogramme<br />
in Java zeigt Listing<br />
1. Es führt die Operationen über ein<br />
»Cipher«-Objekt durch, das es für den<br />
gewünschten Algorithmus über die »get-<br />
Instance()«-Methode erzeugt (Zeile 1).<br />
Das Beispiel nutzt AES mit einer Schlüssellänge<br />
von 128 Bit. Passend zu »Cipher«<br />
erzeugt der »Keygenerator« einen Schlüssel,<br />
entweder – wie im Listing – als zufälligen<br />
Einmalschlüssel oder basierend<br />
auf einem Passwort. Vor der Verwendung<br />
muss der Programmierer das Cipher-Objekt<br />
mit dem Schlüssel für die gewünschte<br />
Richtung initialisieren (Zeile 8).<br />
Alle kryptographischen Methoden arbeiten<br />
auf der Basis von Byte-Arrays, Texte<br />
muss ein Programm daher wie in Zeile 13<br />
konvertieren. Zur eigentlichen Verschlüsselung<br />
nutzt der Java-Entwickler bei<br />
kleinen Mengen direkt die »doFinal()«-<br />
Methode der Cipher-Klasse (Zeile 15).<br />
Für größere Mengen bietet sich das Verschlüsseln<br />
mit »CipherOutputStream«<br />
beziehungsweise »CipherInputStream«<br />
an. Der durchgeleitete Datenstrom wird<br />
dann im Stream mit dem »Cipher«-Objekt<br />
ver- oder entschlüsselt.<br />
Möchte der Entwickler die verschlüsselten<br />
Daten wieder als Text übertragen,
sind Byte-Arrays sehr unhandlich. Hier<br />
hat sich das Kodieren als Base64 bewährt.<br />
Die Bytes (-128 bis 127) werden dabei<br />
auf die in allen Systemen übertragbaren<br />
Buchstaben des englischen Alphabets<br />
abgebildet (Zeile 17). Leider enthält Java<br />
keinen Base64-Encoder im öffentlichen<br />
API, das Beispiel verwendet deshalb die<br />
Base64-Klasse aus der Apache-Commons-<br />
Codec-Bibliothek [4].<br />
Die Entschlüsselung durchläuft die<br />
Schritte in umgekehrter Reihenfolge: Das<br />
Programm dekodiert zunächst Base64 in<br />
ein Byte-Array und entschlüsselt dieses<br />
per Cipher-Objekt. Das Cipher-Objekt<br />
muss der Java-Entwickler für beide Richtungen<br />
mit den gleichen Parametern und<br />
Schlüsseln erstellen, ansonsten schlägt<br />
die Entschlüsselung fehl.<br />
Schlüsselfrage<br />
Wichtig für die sichere Nutzung symmetrischer<br />
Verfahren ist die Geheimhaltung<br />
des Schlüssels. Gerät dieser in die falschen<br />
Hände, wird die Verschlüsselung<br />
nutzlos. Für den sicheren Transport bietet<br />
sich eine asymmetrische Verschlüsselung<br />
des Schlüssels an, bei Passwort-basierter<br />
Verschlüsselung reicht oft das Gedächtnis<br />
des Anwenders aus.<br />
Das Entwickeln wirklich sicherer Verschlüsselungsalgorithmen<br />
ist ein aufwändiges<br />
Geschäft. Verschlüsselungsverfahren<br />
zu brechen ist sowohl im akademischen<br />
Umfeld wie bei den „bösen<br />
Buben“ ein beliebter Sport. Vor diesem<br />
Hintergrund sollte man sich deshalb auf<br />
bekannte und gut untersuchte Algorithmen<br />
verlassen. AES und der Passwortbasierte<br />
Algorithmus decken die meisten<br />
Anwendungen ab, mit Hilfe spezieller Policy<br />
Files [5] lassen sich in Java Schlüssellängen<br />
bis zu 512 Byte nutzen. Ältere<br />
Verfahren wie DES oder Triple-DES sind<br />
hingegen mit schnellen Rechnern inzwischen<br />
leicht zu knacken und sollten nicht<br />
mehr eingesetzt werden.<br />
Häufig soll Software sicherstellen, dass<br />
die Daten beim Übermitteln und Speichern<br />
nicht verändert wurden. Dies betrifft<br />
nicht nur absichtliche Änderungen<br />
in Dateien, auch Übertragungsfehler lassen<br />
sich so entdecken. Zu diesem Zweck<br />
kommen Hash-Algorithmen zum Einsatz,<br />
die aus beliebigen Daten einen wesentlich<br />
kleineren Fingerabdruck (Hash) berechnen.<br />
Schon kleinste Änderungen an<br />
den Daten führen zu einem anderen Fingerabdruck<br />
und lassen sich so entdecken.<br />
Der Hashwert wird dafür einmal beim Erzeuger<br />
und dann beim Nutzer der Daten<br />
berechnet, nur bei gleichen Werten sind<br />
die Daten identisch (Abbildung 3).<br />
Hash mich<br />
Listing 2 ermittelt einen Hash für eine<br />
ganze Datei. Die eigentliche Hash-Erzeugung<br />
findet mit dem »MessageDigest«-<br />
Objekts statt, das der Beispielcode über<br />
die Factory-Methode der Klasse erzeugt<br />
(Zeile 1). Den Hashwert berechnet ein<br />
»DigestInputStream« (Zeile 4) oder »DigestOutputStream«,<br />
der zwischen Datenquelle<br />
und ‐senke geschaltet ist. Dies<br />
ändert die Daten selbst nicht, aktualisiert<br />
aber das »MessageDigest«-Objekt. Von<br />
diesem ist nach abgeschlossener Übertragung<br />
der Hashwert mit der »digest()«-<br />
Methode zu erfragen (Zeile 13).<br />
Hashwerte sind Byte-Arrays und lassen<br />
sich Base64-kodiert über beliebige Kanäle<br />
übertragen. Viele <strong>Linux</strong>-Distributionen<br />
stellen zum Beispiel die Hashwerte für<br />
ihre DVD-Images auf ihren <strong>Web</strong>seiten bereit,<br />
Brennprogramme wie K3B berech-<br />
Java 01/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
113<br />
Listing 1: Symmetrische Verschlüsselung mit AES<br />
01 Cipher cipher = Cipher.getInstance("AES‐128");<br />
02 <br />
03 KeyGenerator kgen = KeyGenerator.getInstance("AES‐128");<br />
04 kgen.init(128);<br />
05 <br />
06 SecretKey skey = kgen.generateKey();<br />
07 <br />
08 cipher.init(Cipher.ENCRYPT_MODE, skey);<br />
09 <br />
10 String klartext = "Die Botschaft";<br />
11 System.out.println("Klartext " + klartext );<br />
12 <br />
13 byte[] zuVerschluesseln =klartext.getBytes();<br />
14 // Die Verschlüesselung<br />
15 byte[] verschluesselt = cipher.doFinal( zuVerschluesseln );<br />
16 // Kodieren für einen sicheren Texttransport<br />
17 String verschluesseltB64 = new String( Base64.encodeBase64( verschluesselt ) );<br />
18 System.out.println( "Verschlüsselt " + verschluesseltB64 );<br />
19 <br />
20 // Dekodieren<br />
21 byte[] verschluesselt2 = Base64.decodeBase64( verschluesseltB64.getBytes() );<br />
22 <br />
23 // Die Entschlüsselung mit dem gleichen Schlüssel<br />
24 cipher.init(Cipher.DECRYPT_MODE, skey);<br />
Abbildung 1: Schon die normale Java-VM ermöglicht<br />
die Auswahl unter 40 verschiedenen Algorithmen<br />
und Schlüsselformaten.<br />
25 <br />
26 byte[] entschluesselt = cipher.doFinal(verschluesselt2);<br />
27 System.out.println("Entschlüsselt " + new String(entschluesselt) );
Programmieren<br />
www.linux-magazin.de Java 01/2012<br />
114<br />
Symmetrische<br />
Verschlüsselung<br />
Verschlüsseln<br />
Übertragung<br />
+ +<br />
Abbildung 2: Bei symmetrischen Verfahren kommt zum Ver- und Entschlüsseln der gleiche Schlüssel zur Anwendung.<br />
Hashberechnung<br />
Übertragung<br />
Hashberechnung<br />
Entschlüsseln<br />
Hashvergleich<br />
Hashberechnung<br />
Abbildung 3: Anhand von Hashwerten lässt sich feststellen, ob eine Datei verändert wurde.<br />
+<br />
==<br />
?<br />
nen ebenfalls Fingerabdrücke und ermöglichen<br />
es, sie zu vergleichen. Dabei sind<br />
die Hashwerte genauso schutzbedürftig<br />
wie die symmetrische Schlüssel. Ansonsten<br />
könnte ein Angreifer sowohl die übertragenen<br />
Daten als auch den Hashwert<br />
ändern und den Test sinnlos machen. Für<br />
neue Anwendungen empfiehlt sich der<br />
SHA-256- oder SHA-512-Algorithmus, die<br />
älteren MD5 und SHA-1 sind jedoch auch<br />
noch weit verbreitet.<br />
Paarweise<br />
Sowohl die symmetrische Verschlüsselung<br />
als auch die Hashwerte funktionieren<br />
in der Praxis nur, wenn Schlüssel<br />
oder Hashes sicher übertragen werden.<br />
01 MessageDigest msgDigest = MessageDigest.getInstance("SHA‐256");<br />
02 <br />
03 InputStream fis = new FileInputStream(datei);<br />
04 DigestInputStream dis = new DigestInputStream(fis, msgDigest);<br />
05 <br />
06 byte[] buffer = new byte[1024];<br />
07 int read;<br />
08 while ((read = dis.read(buffer)) > 0) {<br />
Dieses Problem umgehen die asymmetrischen<br />
Verfahren, denn sie nutzen zum<br />
Ver- und Entschlüsseln unterschiedliche<br />
Teile eines Schlüsselpaars: Der öffentliche<br />
Schlüssel darf über beliebige, ungesicherte<br />
Kanäle verfügbar sein, der private<br />
Schlüssel muss sicher bei seinem Besitzer<br />
verwahrt bleiben (Abbildung 4). Für<br />
den verschlüsselten Transport werden<br />
die Daten dabei mit dem öffentlichen<br />
Schlüssel des Empfängers verschlüsselt,<br />
nur der dazu passende private Schlüssel<br />
eignet sich zur Entschlüsselung (RSA-<br />
Algorithmus).<br />
Neben der reinen Verschlüsselung ermöglichen<br />
asymmetrische Verfahren auch digitale<br />
Signaturen (Abbildung 5). Diese<br />
errechnen sich aus dem Hashwert der<br />
09 // Einlesen der ganzen Datei durch den DigestInputStream ohne sie weiter zu verwenden<br />
10 }<br />
11 dis.close();<br />
12 <br />
13 byte[] digest = msgDigest.digest();<br />
14 String digestB64 = new String(Base64.encodeBase64Chunked(digest));<br />
15 <br />
Listing 2: Berechnung eines Hash mit SHA<br />
16 System.out.println(digestB64);<br />
Daten und dem privaten Schlüssel. Der<br />
Empfänger kann mit dem öffentlichen<br />
Schlüssel überprüfen, ob die Signatur<br />
dem Absender gehört und ob die Daten<br />
unverändert sind (RSA- und DSA-Algorithmus).<br />
Da die asymmetrischen Verfahren vergleichsweise<br />
langsam arbeiten, kommen<br />
sie selten als Ersatz für symmetrische<br />
Verfahren in Betracht. Stattdessen werden<br />
sie für kleine Datenmengen wie den<br />
symmetrischen Schlüssel oder Hashwerte<br />
genutzt und schließen genau diese Lücke<br />
in der sicheren Übertragung. Die<br />
bekannteste Implementierung dürfte das<br />
HTTPS-Protokoll sein: Beim Aushandeln<br />
des (symmetrischen) Sitzungsschlüssels<br />
zwischen <strong>Web</strong>browser und Server kommen<br />
asymmetrische Verfahren zum Tragen,<br />
die eigentlichen Nutzdaten schützt<br />
dann die schnellere symmetrische Verschlüsselung.<br />
Zertifikate<br />
Damit sich der öffentliche Schlüssel einfach<br />
seinem Besitzer zuordnen lässt, ist<br />
er meist in ein digitales Zertifikat eingebettet.<br />
Es enthält neben dem öffentlichen<br />
Schlüssel noch weitere Angaben über den<br />
Besitzer wie Name, Organisation und E-<br />
Mail-Adresse. Zum Anfertigen und Verwalten<br />
selbst signierter Zertifikate bietet<br />
sich das Programm »keytool« an (siehe<br />
Kasten „Keytool und Jarsigner“).
Asymmetrische<br />
Verschlüsselung<br />
Verschlüsseln<br />
Übertragung<br />
Entschlüsseln<br />
Java 01/2012<br />
Programmieren<br />
+ +<br />
Öffentlicher Schlüssel des Empfängers<br />
Privater Schlüssel des Empfängers<br />
Abbildung 4: Bei der symmetrischen Verschlüsselung dient der öffentliche Schlüssel zum Kodieren, der private zum Dekodieren.<br />
Signatur<br />
Übertragung<br />
Signatur prüfen<br />
www.linux-magazin.de<br />
115<br />
Digitale<br />
Signatur<br />
+<br />
+ +<br />
+<br />
Privater Schlüssel des Empfängers<br />
Öffentlicher Schlüssel des Empfängers<br />
Abbildung 5: Digitale Signaturen belegen nicht nur die Unversehrtheit, sondern auch die Herkunft von Dateien.<br />
Listing 3 zeigt das Erstellen und Prüfen<br />
einer digitalen Signatur. Es nutzt über<br />
die Klasse »Keystore« die laut Kasten<br />
„Keytool und Jarsigner“ erstellten Zertifikate.<br />
Der Aufbau des Programms ähnelt<br />
der Hashberechnung aus Listing 2,<br />
nur kommt hier ein »Signature«-Objekt<br />
zum Einsatz. Es wird mit dem passwortgeschützten<br />
privaten Schlüssel aus dem<br />
Keystore initialisiert. Zur Prüfung initialisiert<br />
das Programm das »Signature«-<br />
Objekt mit dem Zertifikat (und damit mit<br />
dem öffentlichen Schlüssel) und berechnet<br />
den Hash neu. Die Methode »verify()«<br />
prüft anschließend die übertragene Signatur.<br />
Nur wenn die Signatur sowohl zu<br />
den Daten als auch dem Zertifikat passt,<br />
gilt die Prüfung als bestanden.<br />
Signierte Programme<br />
Signaturen kommen bei vielen verschiedenen<br />
Datei-Arten zum Einsatz, am bekanntesten<br />
dürften signierte E-Mails, Of-<br />
Keytool und Jarsigner<br />
Zum Java Developer Kit (JDK) gehört mit Keytool ein einfaches Programm,<br />
das Schlüsselpaare und Zertifikate erzeugt und verwaltet. Diese sind<br />
normalerweise in einer passwortgeschützten Keystore-Datei gespeichert,<br />
in der sie über einen Aliasnamen ansprechbar sind. Die folgende Kommandozeile<br />
erstellt ein Schlüsselpaar zum Verschlüsseln sowie ein selbst<br />
signiertes Zertifikat:<br />
keytool ‐genkeypair ‐storepass noMoreSecrets ‐keystore U<br />
rincewind.keystore ‐keyalg RSA ‐alias rincewind U<br />
‐dname "CN=rincewind, O=Unseen University, C=Ankh Mopork"<br />
Der öffentliche Schlüssel lässt sich exportieren und an Kommunikationspartner<br />
senden:<br />
keytool ‐exportcert ‐rfc ‐storepass noMoreSecrets U<br />
‐keystore rincewind.keystore ‐alias rincewind ‐file rincewind.cer<br />
Die Partner importieren den öffentlichen Schlüssel folgendermaßen in<br />
ihren eigenen Keystore:<br />
keytool ‐importcert ‐storepass noMoreSecrets U<br />
‐keystore beispiel.keystore ‐alias rincewind ‐file rincewind.cer<br />
Den Inhalt eines Keystore zeigt die Option »‐list« an:<br />
keytool ‐list ‐v ‐storepass noMoreSecrets U<br />
‐keystore rincewind.keystore ‐alias rincewind<br />
Listing 3 zeigt, wie Java-Programme Schlüssel und Zertifikate aus dem<br />
Keystore verwenden. Sind nur digitale Signaturen geplant, reicht für das<br />
Schlüsselpaar der DSA- statt des RSA-Algorithmus aus. Ebenso zum JDK<br />
gehört das Jarsigner-Programm. Es kann als Jar-Archive verpackte Java-<br />
Programme signieren. Daneben prüft es signierte Archive auf Unversehrtheit<br />
und Herkunft. Das asymmetrische Schlüsselpaar liest Jarsigner aus<br />
dem oben erzeugten Keystore. Zum Signieren gibt der Anwender neben<br />
der Jar-Datei den Aliasnamen des gewünschten Schlüsselpaars an:<br />
jarsigner ‐storepass noMoreSecrets ‐keystore rincewind.keystore<br />
test.jar rincewind<br />
Die »‐verify«-Option dient zum Prüfen der Jar-Datei:<br />
jarsigner ‐verify ‐verbose ‐storepass noMoreSecrets U<br />
‐keystore rincewind.keystore test.jar<br />
Im privaten Bereich oder für Entwicklungszwecke sind die selbst signierten<br />
Zertifikate von Keytool vielleicht akzeptabel. Mehr Sicherheit<br />
verspricht aber das gemeinnützige Cacert-Project [10]. Wer hingegen<br />
Dutzende oder gar Hunderte von Anwendern mit Zertifikaten ausstattet,<br />
kommt um eine eigene Zertifikatsinfrastruktur, etwa mit EJBCA [11]<br />
umgesetzt, oder kommerzielle Anbieter nicht herum.<br />
Unter keinen Umständen darf der privaten Schlüssel in die Händen Dritter<br />
gelangen. Geschieht dies unbemerkt, hat der Anwender keine Chance,<br />
Datenverlust oder -änderung mitzubekommen. Fällt der Schlüsseldiebstahl<br />
aber auf, kann eine funktionsfähige Zertifikatsverwaltung einzelne<br />
Zertifikate mit einer Revocation-List vor ihrem regulären Ablauf zurückrufen.<br />
Dazu müssen die Anwendungen allerdings einen Check gegen die<br />
Zertifikatsverwaltung implementieren.
Programmieren<br />
www.linux-magazin.de Java 01/2012<br />
116<br />
fice- [6] und PDF-Dokumente [7] sein.<br />
Eine besondere Dokumentart sind Java-<br />
Programme selbst: Mit Hilfe des Jarsigners<br />
lässt sich die Authentizität von Jar-<br />
Archiven sicherstellen. Bei Applet- oder<br />
<strong>Web</strong>start-Anwendungen ist dies sogar<br />
Pflicht, sobald sie Zugriff auf das lokale<br />
System anfordern (Abbildung 6).<br />
Alles gut?<br />
Mit den in Java enthaltenen Techniken<br />
lassen sich viele Security-Probleme lösen.<br />
Von diesen einfachen Beispielen bis hin<br />
zu einem akzeptablen Sicherheitsniveau<br />
ist der Weg jedoch weit. Das fängt natürlich<br />
beim eigenen Java-Code an, daher<br />
empfiehlt sich das Studium der Secure<br />
Coding Guidelines [8]. Für Standardaufgaben<br />
wie sicheren HTTP-Transfer oder<br />
XML-Signatur [9] gibt es inzwischen fertig<br />
spezifizierte und implementierte Lösungen<br />
auf Basis der oben beschriebenen<br />
Techniken. Sie ersparen nicht nur Arbeit<br />
– die Verfahren sind mit großer Sicherheit<br />
auch besser als selbst erfundene.<br />
Aber auch beim Einsatz<br />
bekannter Standards<br />
sollte der Entwickler<br />
recherchieren,<br />
ob nicht inzwischen<br />
Schwachstellen bekannt<br />
sind und wie sie<br />
sich beheben lassen.<br />
Daneben spielt auch<br />
die Infrastruktur eine<br />
Rolle: Symmetrische<br />
und private Schlüssel<br />
bedürfen eines wirksamen<br />
Schutzes. Zertifikate<br />
muss man vor<br />
der Verwendung auf ihre Gültigkeit prüfen,<br />
selbst die Online-Abfrage nach zurückgezogenen<br />
Zertifikaten gehört zum<br />
Java-Lieferumfang.<br />
Neben der Anwendung ist die Implementierung<br />
der Java-VM ein viel kleineres,<br />
aber dennoch reales Problem. Erst im<br />
September 2011 wurde ein Implementationsfehler<br />
bei der Klasse Java-Applet<br />
entdeckt, der eine Hintertür bei der HT-<br />
TPS-Übertragung öffnet. Außerhalb der<br />
Abbildung 6: Java-<strong>Web</strong>start-Anwendungen brauchen eine gültige Signatur.<br />
Programmierwelt verbleibt immer noch<br />
die größte Unsicherheit: der Anwender.<br />
Sicherheit und Benutzbarkeit dürfen sich<br />
nicht gegenseitig ausschließen. Wer die<br />
Anwender jedoch mit komplizierten Prozeduren<br />
oder wüsten Passwörtern quält,<br />
muss sich über Klebezettel unter der<br />
Tastatur nicht wundern. Dann hilft auch<br />
die fortschrittlichste Kryptographie nicht<br />
mehr gegen den simplen Einbruch durch<br />
das Reinigungsteam. (mhu) n<br />
Listing 3: Digitale Signatur<br />
01 // Die Signatur<br />
02 Signature signature = Signature.getInstance( "SHA256WITHRSA");<br />
03 <br />
04 // Lade des privaten Schlüssels und Zertifikats<br />
05 char[] keystorePasswort = new char[] {'n', 'o', 'M', 'o', 'r', 'e', 'S', 'e', 'c', 'r', 'e', 't',<br />
's'};<br />
06 FileInputStream fis = new FileInputStream("../rincewind.keystore");<br />
07 KeyStore keystore = KeyStore.getInstance("JKS") ;<br />
08 keystore.load(fis, keystorePasswort);<br />
09 <br />
10 KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keystore.getEntry("rincewind",<br />
new KeyStore.PasswordProtection(keystorePasswort));<br />
11 <br />
12 PrivateKey privateKey = entry.getPrivateKey();<br />
13 signature.initSign(privateKey );<br />
14 <br />
15 // Der Inhalt<br />
16 String klartext = "Die Botschaft";<br />
17 <br />
18 // Signature berechnen<br />
19 signature.update( klartext.getBytes());<br />
20 byte[] sig = signature.sign();<br />
21 <br />
22 String sigB64 = new String(Base64.encodeBase64(sig));<br />
23 System.out.println( "Signatur " + sigB64);<br />
24 <br />
25 // Signatur prüfen<br />
26 Certificate cert = entry.getCertificate();<br />
27 signature.initVerify( cert);<br />
28 signature.update(klartext.getBytes());<br />
29 System.out.println("Wert unverändert " + signature.verify(sig));<br />
Infos<br />
[1] JCA: [http:// download. oracle. com/ javase/<br />
6/ docs/ technotes/ guides/ security/ crypto/<br />
CryptoSpec. html]<br />
[2] Bouncy Castle:<br />
[http:// www. bouncycastle. org/ java. html]<br />
[3] Quellcode zum Artikel:<br />
[http:// www. linux‐magazin. de/ static/<br />
listings/ magazin/ 2012/ 01/ java/]<br />
[4] Commons Codec:<br />
[http:// commons. apache. org/ codec/]<br />
[5] JCE Unlimited Strength Jurisdiction<br />
Policy Files: [http:// www. oracle. com/<br />
technetwork/ java/ javasebusiness/<br />
downloads/ index. html]<br />
[6] Florian Effenberger, „Digitale<br />
Signaturen mit Open Office“: [http://<br />
www. linux‐magazin. de/ Online‐Artikel/<br />
Digitale‐Signaturen‐mit‐Open‐Office]<br />
[7] PDF, Signatur: [http:// itextpdf.<br />
sourceforge. net/ howtosign. html]<br />
[8] Secure Coding Guidelines:<br />
[http:// www. oracle. com/ technetwork/<br />
java/ seccodeguide‐139067. html]<br />
[9] XML-Signatur:<br />
[http:// java. sun. com/ developer/<br />
technicalArticles/ xml/ dig_signature_api/]<br />
[10] Cacert: [https:// www. cacert. org]<br />
[11] EJBCA: [http:// www. ejbca. org]
<strong>Linux</strong>-<strong>Magazin</strong><br />
ACADEMY<br />
20% Rabattaktion<br />
Jahresendverkauf*<br />
IT Trainings Online<br />
<strong>Linux</strong> und Open Source<br />
Nutzen Sie die Vorteile<br />
der <strong>Linux</strong>-<strong>Magazin</strong> Academy!<br />
✓<br />
✓<br />
✓<br />
✓<br />
✓<br />
Kompetent: Unsere Dozenten sind ausge wiesene<br />
Profis mit lang jähriger Schulungserfahrung.<br />
Flexibel: Der Schulungsteilnehmer lernt, wann,<br />
wo und sooft er möchte.<br />
Kosteneffizient: Nutzen Sie Einsparungen<br />
gegenüber Vor-Ort-Schulungen.<br />
Übersichtlich: Die komfortable <strong>Web</strong>- Oberfläche<br />
zeigt gleich zeitig den Trainer und dessen<br />
Arbeitsfläche<br />
Individuell: Jeder Teilnehmer folgt seinem eigenen<br />
Lerntempo.<br />
Trainingspakete:<br />
Monitoring mit Nagios<br />
•<br />
LPIC-1 All-in-One Solution<br />
LPIC-1 / LPIC-2 Training<br />
IT-Sicherheit Grundlagentraining<br />
• WordPress 3.0 / OpenOffice Vorlagen *Rabattaktion läuft bis einschließlich 31.12.2012<br />
Was Teilnehmer über die<br />
<strong>Linux</strong>-<strong>Magazin</strong> Academy sagen:<br />
„Super, bin sehr zufrieden! Habe mir die Videos<br />
immer wieder angesehen, was bei einer Präsenzschulung<br />
gar nicht ginge!“<br />
„Die Kurse sind sehr gut strukturiert,<br />
die Trainer sehr kompetent!“<br />
Testen Sie unsere Demovideos:<br />
academy.linux-magazin.de/demo<br />
Präsentiert von:<br />
www.linux-magazin.de<br />
www.lpi.org<br />
Menschen www.gfn.de<br />
- Bildung - Erfolg<br />
Weitere Infos: academy.linux-magazin.de
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 01/2012<br />
118<br />
API des Productivity-Tools Evernote ausreizen<br />
Zettels Trauma<br />
Ein kräftiger Windstoß genügt, um das System der Notizzettel vom Schreibtisch zu fegen. Evernote, eine Art<br />
hochstrukturierter digitaler Notizblock, zeigt dem User seine Aufzeichnungen unabhängig von Ort und Endgerät.<br />
Ein API erlaubt programmatischen Zugriff mit Facebooks Thrift-Library. Michael Schilli<br />
© Benis Arapovic, 123RF.com<br />
Ideen entstehen oft an ungewöhnlichen<br />
Orten. Erfahrungsgemäß verschwinden<br />
sie aber auch schnell wieder, wenn man<br />
sie nicht sofort zu Papier bringt. Statt auf<br />
Notizzettel vertraut der Kreative heute<br />
aufs Internet, dort sind Daten haltbarer<br />
als auf losen Zetteln und ein Dokumentenhaufen<br />
ist mit maschineller Hilfe in<br />
Sekunden durchsucht.<br />
Nadel im Heuhaufen<br />
Die kommerzielle Applikation Evernote,<br />
in der für Normalverbraucher ausreichenden<br />
Basisversion kostenlos [2], bietet ein<br />
Browserinterface und Apps für mobile<br />
Endgeräte wie iPhone oder iPad für virtuelle<br />
Zettelkästen. Die so genannten Notes<br />
Online PLUS<br />
In einem Screencast demonstriert Michael<br />
Schilli das Beispiel: [http://www.<br />
linux-magazin.de/plus/2012/01]<br />
– formatierter Text mit Bildern,<br />
Audiodateien oder per<br />
Screenshot oder Cut & Paste<br />
eingefangene <strong>Web</strong>seiten –<br />
fasst der User thematisch in<br />
„Notebooks“ zusammen, die<br />
sich wiederum in Unterordnern<br />
(Stacks) organisieren<br />
lassen.<br />
Der Clou an Evernote ist die<br />
laufend und unauffällig stattfindende<br />
Synchronisierung<br />
zwischen Endgeräten. Eine<br />
auf dem PC mit dem Browser<br />
vorgenommene Änderung<br />
erscheint binnen Sekunden<br />
im Browser auf dem Laptop,<br />
wenn der im Evernote-Konto<br />
eingeloggt ist. Auf Endgeräten<br />
wie iPad oder Macbook speichern die<br />
Evernote-Apps die Daten sogar lokal, was<br />
den Offlinebetrieb zulässt.<br />
Das simple Strukturierungsmodell der<br />
Notes in Evernotes lädt zu kreativen<br />
Basteleien ein. Aus den rudimentären<br />
Gestaltungselementen ist rasch ein<br />
maßgeschneidertes Produktivitäts-Tool<br />
gezimmert. Manche User berichten auf<br />
ihren Blogs [3], dass sie sich Kalenderfunktionen<br />
eingerichtet haben und ihren<br />
Tagesablauf im „Getting Things Done“-<br />
Verfahren [4] organisieren.<br />
Abbildung 1 zeigt die Evernote-Notizen<br />
zur Entstehung dieses Artikels. Auf<br />
Stackoverflow.com stieß ich auf ein Anwendungsbeispiel<br />
für das Evernote-API<br />
mit dem Thrift-Framework und archivierte<br />
es flugs mit Evernotes <strong>Web</strong>-Clipper<br />
als Einstiegspunkt für spätere Recherchen.<br />
Weiter fand ich ein PDF mit dem<br />
Whitepaper des Thrift-Framework sowie<br />
einige Perl-Beispiele auf Apache.org. Mit<br />
dieser Sammlung bewaffnet war es später<br />
leicht, offene Fragen mit den geclippten<br />
Texten oder mit Hilfe der ebenfalls gespeicherten<br />
<strong>Web</strong>links zu beantworten.<br />
API statt GUI<br />
Doch nicht immer hat man ein GUI parat,<br />
wenn Ideen auftauchen, und deswegen<br />
suchte ich nach einem Kommandozeilen-<br />
Tool. Evernote bietet zum Glück ein API<br />
und hat für die Kommunikation zwischen<br />
Clients und dem Server das von Facebook<br />
erfundene Thrift-Protokoll [5] gewählt.<br />
Die Entscheidung fiel wohl aus Performancegründen,<br />
denn das Binärprotokoll<br />
ist schlanker als die Kommunikation mit<br />
XML-Objekten.<br />
Schlank mit Thrift<br />
Entwickler beschreiben die zwischen<br />
Client und Server ausgetauschten Datenstrukturen<br />
in einer Datei mit der Endung<br />
».thrift« im leicht lesbaren Thrift-Format.<br />
Der Thrift-Compiler erzeugt daraus Bibliotheksfunktionen<br />
für eine Vielzahl<br />
von Programmiersprachen (Abbildung<br />
2), angefangen bei C++ und Java, aber<br />
auch für Skriptsprachen wie Perl, Ruby,<br />
Python, PHP, Javascript und sogar Exoten<br />
wie Erlang. Ziel dieser Zwischenschicht<br />
ist es, den Applikationsprogrammierer<br />
gänzlich von der ätzenden Fummelei bei<br />
der plattformübergreifenden Datenübertragung<br />
abzuschirmen.<br />
Als Beispiel zeigt Listing 1 mit der Datei<br />
»image_process.thrift« die Datenstrukturen<br />
und Servicedefinitionen für einen Server,<br />
der Bilddateien um 90 Grad rotiert.<br />
Der Client schickt die Binärdaten einer<br />
JPG-Datei an den Server, der nutzt das<br />
Tool »convert« des Imagemagick-Pakets,<br />
führt die Rotation durch und schickt das
Abbildung 1: In den Notebooks von Evernote abgelegte <strong>Web</strong>-Clippings während<br />
der Entstehung dieses Artikels.<br />
Ergebnis – ebenfalls im Binärformat –<br />
an den Client zurück. Dieser speichert<br />
die JPG-Daten dann auf der Festplatte<br />
ab und meldet dem User die erfolgreiche<br />
Konvertierung oder druckt eine Fehlermeldung<br />
aus.<br />
Klasse statt Masse<br />
Thrift unterstützt wenige, aber mächtige<br />
und portable Datentypen. Neben einfachen<br />
32- oder 64-Bit-Integern darf der<br />
User Daten in Structs verpacken oder<br />
Maps nutzen, die Perls Hashtypen ähneln.<br />
So definiert Listing 1 eine Struktur<br />
»Rotation«, die einen Integer mit dem<br />
gewünschten Rotationswinkel und einen<br />
String mit den Binärdaten des zu drehenden<br />
Bildes aufnimmt. Der ab Zeile 12<br />
definierte Service »Rotator« definiert die<br />
Funktion »rotate()«, die als nummerierten<br />
ersten Parameter eine »Rotation«-Struktur<br />
entgegennimmt und einen String mit den<br />
veränderten Bilddaten<br />
zum Client gibt.<br />
Thrift wirft Exceptions,<br />
falls etwas<br />
schief geht, und Zeile<br />
8 definiert eine Exception<br />
vom Typ »Failed«,<br />
die einen String »why«<br />
mit einer Erklärung<br />
für die verpatzte Aktion<br />
bereithält. Wer<br />
die Thrift-Distribution<br />
von Apache.org [6]<br />
herunterlädt und diese<br />
mit »sh ./configure«<br />
und »make« kompiliert, erhält ein Executable<br />
namens »thrift«. Falls der Build<br />
fehlschlägt, weil Pakete für exotische<br />
Sprachen fehlen, kann man diese mit<br />
der »configure«-Option »‐‐disable‐xxx«<br />
eliminierten. Der Aufruf<br />
thrift ‐r ‐‐gen perl image_process.thrift<br />
erzeugt den nötigen Perl-Kleister für den<br />
reibungslosen Datenaustausch zwischen<br />
Client und Server im Unterverzeichnis<br />
»gen‐perl/image_process«.<br />
Der Client in Listing 2 holt sich die so<br />
generierten Thrift-Wrapper in Zeile 10<br />
herein. Er definiert mit »Thrift::Socket«,<br />
»Thrift::BufferedTransport« und »Thrift:<br />
:BinaryProtocol«, die der Thrift-Distribution<br />
im Verzeichnis »perl/lib« beiliegen,<br />
einen Kommunikationskanal über<br />
einen Unix-Socket auf Port 9001 von<br />
»localhost«, auf dem der Server später<br />
lauscht. Die Zeile 22 instanziert mit dem<br />
vorher definierten Binärprotokoll ein<br />
»RotatorClient«-Objekt, dessen Perl-Code<br />
»thrift« ebenfalls autogeneriert hat.<br />
Thrift wirft Exceptions<br />
Der Eval-Block ab Zeile 28 fängt etwaige<br />
Exceptions ab, die nachfolgende Prüfung<br />
im If-Konstrukt ab Zeile 47 druckt vom<br />
Server stammende Exceptions-Objekte<br />
mit den in ihnen schlummernden Fehlertexten<br />
aus. Nach dem Öffnen des Transports<br />
in Zeile 29 liest der Client die auf<br />
der Kommandozeile angegebene Bilddatei<br />
mit der Funktion »slurp« aus dem CPAN-<br />
Modul Sysadm::Install von der Festplatte.<br />
Das in Zeile 34 instanzierte Objekt vom<br />
Typ »image_process::Rotation« baut mit<br />
den Methoden »image()« und »angle()«<br />
die zu übertragende Datenstruktur zusammen.<br />
Fehlt nur noch, in Zeile 39 die Methode<br />
»rotate()« mit der Struktur aufzurufen und<br />
Listing 1: »image_process.thrift«<br />
namespace perl image_process<br />
02<br />
03 struct Rotation {<br />
04 1: i32 angle,<br />
05 2: string image,<br />
06 }<br />
07<br />
08 exception Failed {<br />
09 1: string why<br />
10 }<br />
11<br />
12 service Rotator {<br />
13 string rotate( 1:Rotation r)<br />
14 throws ( 1:Failed oops )<br />
15 }<br />
Perl-Snapshot 01/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
119<br />
Listing 2: »rotate-client«<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03 use Sysadm::Install qw(slurp blurt);<br />
04 use Thrift;<br />
05 use Thrift::BinaryProtocol;<br />
06 use Thrift::Socket;<br />
07 use Thrift::BufferedTransport;<br />
08<br />
09 use lib 'gen‐perl';<br />
10 use image_process::Rotator;<br />
11<br />
12 my $socket =<br />
13 Thrift::Socket‐>new( "localhost", 9001 );<br />
14<br />
15 my $transport =<br />
16 Thrift::BufferedTransport‐>new( $socket,<br />
17 1024, 1024 );<br />
18<br />
19 my $protocol =<br />
20 Thrift::BinaryProtocol‐>new($transport);<br />
21 my $client =<br />
22 image_process::RotatorClient‐>new(<br />
23 $protocol);<br />
24<br />
25 my ($image) = @ARGV;<br />
26 die "usage: $0 image" if !defined $image;<br />
27<br />
28 eval {<br />
29 $transport‐>open();<br />
30<br />
31 my $image_data = slurp $image;<br />
32<br />
33 my $action =<br />
34 image_process::Rotation‐>new();<br />
35 $action‐>image($image_data);<br />
36 $action‐>angle(90);<br />
37<br />
38 my $rotated_image_data =<br />
39 $client‐>rotate($action);<br />
40<br />
41 blurt $rotated_image_data,<br />
42 "rotated‐$image";<br />
43<br />
44 $transport‐>close();<br />
45 };<br />
46<br />
47 if ($@ =~ m/image_process/ and<br />
48 exists $@‐>{why}) {<br />
49 die $@‐>{why};<br />
50 } elsif( $@ ) {<br />
51 die $@;<br />
52 }
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 01/2012<br />
120<br />
Abbildung 2: Der Thrift-Compiler generiert aus der<br />
Thrift-Definition Perl-Code.<br />
das Ergebnis im zurückgelieferten String<br />
aufzuschnappen. Die Funktion »blurt()«,<br />
auch aus dem Modul Sysadm::Install<br />
vom CPAN, schreibt die rotierten Imagedaten<br />
in eine neue Datei, deren Name mit<br />
»rotated‐*« beginnt.<br />
Der zugehörige Server in Listing 3 definiert<br />
das Package »RotateHandler«<br />
zum Abarbeiten der Clientrequests, das<br />
auf der autogenerierten Klasse »image_<br />
process::RotatorIf« fußt. In seiner Methode<br />
»rotate()«, die der Server dank<br />
Thrift-Magie anspringt, falls der Client<br />
mit »rotate()« einen Request abgesetzt<br />
hat, legt er zwei temporäre Dateien an,<br />
extrahiert die Bilddaten aus dem hereingereichte<br />
Rotation-Objekt und pumpt sie<br />
in die erste Datei. Der in Zeile 36 abgesetzte<br />
»tap«-Befehl ruft die Imagemagick-<br />
Utility »convert« mit der Option »‐rotate«<br />
auf, was die rotierte Ergebnisdatei in die<br />
zweite temporäre Datei schreibt.<br />
Schlägt dies fehl, bastelt Zeile 40 ein<br />
Exception-Objekt, das Zeile 42 dann auswirft.<br />
Thrift-Magie fängt die Exception<br />
ab und überträgt sie zum Client, der sie<br />
wiederum wirft. »rotate()« gibt in Zeile 45<br />
die Bilddaten zurück, die der Thrift-Layer<br />
aufschnappt, eintütet und dem Client<br />
schickt, ohne dass die Applikationslogik<br />
einen Finger rühren muss.<br />
Das Hauptprogramm ab Zeile 49 nutzt<br />
lediglich das vordefinierte Thrift-Modul<br />
und fährt mit »Thrift::ForkingServer« einen<br />
Server hoch, der auf Port 9001 auf<br />
Clientanfragen lauscht und jedes Mal<br />
einen Parallelprozess startet, um eingehende<br />
Requests abzuarbeiten. Nach dem<br />
Starten des Servers in einem anderen Terminal<br />
ruft der User auf Client-Seite<br />
./rotate‐client image.jpg<br />
auf, worauf das Kommando nach kurzer<br />
Verzögerung zurückkehrt und die Datei<br />
»rotated‐image.jpg« im aktuellen Verzeichnis<br />
zurücklässt.<br />
API zum Zettelkasten<br />
Um das erwähnte Evernote-API mit dem<br />
Thrift-Framework anzusprechen, muss<br />
der Entwickler von [2] zunächst einen<br />
API-Key abholen. Da es sich beim neuen<br />
Utility um ein Kommandozeilenskript<br />
und keine <strong>Web</strong>applikation handelt, ist<br />
in Abbildung 3 »Client Application« zu<br />
wählen. Der Entwickler erhält dann einen<br />
»Consumer Key« und ein »Consumer<br />
Secret«, mit dem er zunächst auf [http://<br />
www.sandbox.evernote.com] herumspielen<br />
kann, bevor es nach abgeschlossener<br />
Testphase auf [http://www.evernote.com] in<br />
die Vollen geht.<br />
Auf der Developer-Seite findet sich ein<br />
Link zu einem SDK im Zip-Format, das<br />
weitere Sprachanbindungen und vorkompilierte<br />
Thrift-Wrapper für Perl enthält.<br />
Um die Thrift-Definitionen mit »thrift« in<br />
Abbildung 3: Auf der Evernote-Developer-Seite<br />
erhalten Entwickler den erforderlichen API-Key.<br />
Listing 3: »rotate-server«<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03 use Thrift::Socket;<br />
04 use Thrift::Server;<br />
05<br />
06 use lib 'gen‐perl';<br />
07 use image_process::Rotator;<br />
08<br />
09 ###########################################<br />
10 package RotateHandler;<br />
11 ###########################################<br />
12 use base qw(image_process::RotatorIf);<br />
13 use Sysadm::Install qw(slurp blurt tap);<br />
14 use File::Temp qw(tempfile);<br />
15<br />
16 ###########################################<br />
17 sub new {<br />
18 ###########################################<br />
19 my( $class ) = @_;<br />
20<br />
21 return bless {}, $class;<br />
22 }<br />
23<br />
24 ###########################################<br />
25 sub rotate {<br />
26 ###########################################<br />
27 my ( $self, $rotation ) = @_;<br />
28<br />
29 my ( $fh1, $infile ) =<br />
30 tempfile( UNLINK => 1 );<br />
31 my ( $fh2, $outfile ) =<br />
32 tempfile( UNLINK => 1 );<br />
33<br />
34 blurt $rotation‐>{image}, $infile;<br />
35 my ( $stdout, $stderr, $rc ) =<br />
36 tap "convert", "‐rotate",<br />
37 $rotation‐>{angle}, $infile, $outfile;<br />
38<br />
39 if ( $rc != 0 ) {<br />
40 my $x = image_process::Failed‐>new();<br />
41 $x‐>why($stderr);<br />
42 die $x;<br />
43 }<br />
44<br />
45 return slurp $outfile;<br />
46 }<br />
47<br />
48 ###########################################<br />
49 package main;<br />
50 ###########################################<br />
51 use Log::Log4perl qw(:easy);<br />
52 Log::Log4perl‐>easy_init($DEBUG);<br />
53<br />
54 my $port = 9001;<br />
55 my $handler = RotateHandler‐>new();<br />
56 my $processor =<br />
57 image_process::RotatorProcessor‐>new(<br />
58 $handler);<br />
59 my $serversocket =<br />
60 Thrift::ServerSocket‐>new($port);<br />
61 my $forkingserver =<br />
62 Thrift::ForkingServer‐>new( $processor,<br />
63 $serversocket );<br />
64<br />
65 DEBUG "Server starting on port $port";<br />
66 $forkingserver‐>serve();
Perl-Code umzuwandeln, ruft der Zettelkasten-Programmierer<br />
thrift ‐r ‐‐gen perl evernote‐api‐1.19/U<br />
thrift/UserStore.thrift<br />
thrift ‐r ‐‐gen perl evernote‐api‐1.19/U<br />
thrift/NoteStore.thrift<br />
auf, wenn das SDK in »evernote‐api‐1.19«<br />
entpackt ist. Anschließend liegen die<br />
».pm«-Dateien unter »gen‐perl«.<br />
Aus Alt mach Neu<br />
Leider nutzt Thrift beim Erzeugen des<br />
Perl-Codes die veraltete Notation »new<br />
Class()«, was Perl-5.10.1 nicht verdaut.<br />
Ein beherzt aufgerufenes<br />
find gen‐perl ‐name '*.pm' ‐exec perl ‐pU<br />
‐i ‐e 's/\bnew (.*?)\(/$1‐>new(/g;' {} \;<br />
durchstöbert alle autogenerierten ».pm«-<br />
Dateien und ersetzt die alte Syntax durch<br />
»Class‐>new()«. Nun sollte das Skript in<br />
Listing 4 ohne Murren laufen.<br />
In den Zeilen 14 bis 17 stehen die für den<br />
Zugriff nötigen Credentials. Produktionsskripte<br />
sollten diese aus Sicherheitsgründen<br />
natürlich auslagern, am besten in<br />
einem Passwort-Safe.<br />
Noch kompatibel?<br />
Zeile 19 nimmt ein einziges Kommandozeilenelement<br />
als Note-Titel entgegen,<br />
für Merkzettel mit mehreren Worten verwendet<br />
man Anführungszeichen:<br />
evernote‐add "Milch einkaufen"<br />
Das Kommando kontaktiert den Evernote-Server,<br />
legt eine neue Note mit<br />
dem Titel „Milch einkaufen“ an, lässt<br />
den Body leer und fügt sie in ein vorher<br />
angelegtes Notebook namens Inbox ein.<br />
Anders als der zuvor erzeugte Testclient<br />
nutzt das Skript »Thrift::HttpClient«, der<br />
mit der Evernote-<strong>Web</strong>site mittels HTTP<br />
kommuniziert. In dem Thrift-Kleister ist<br />
»EDAMUserStore::UserStoreClient« definiert,<br />
und Listing 4 instanziert dieses<br />
Clientobjekt für die User-Authentisierung<br />
auf Evernote in Zeile 34.<br />
Die in Zeile 38 aufgerufene Methode<br />
»checkVersion ()« prüft mit den aus dem<br />
autogenerierten Code hervorgeholten<br />
Konstanten »EDAM_VERSION_MAJOR«<br />
und »EDAM_VERSION_MINOR«, ob die<br />
Version des SDK noch mit der Evernote-<br />
<strong>Web</strong>site kompatibel ist.<br />
»EDAM« steht für „Evernote Data Access<br />
and Management“ und stellt zwei verschiedene<br />
Kommunikationsklassen<br />
für die<br />
Interaktion mit dem<br />
Evernote-Service bereit.<br />
»EDAMUserStore:<br />
:UserStoreClient« hilft<br />
bei der Authentisierung<br />
des Users mit seinem<br />
Kürzel, dem Passwort, dem Consumer-Key<br />
und dem Consumer-Secret. Akzeptiert<br />
der Evernote-Server die Kombination,<br />
schickt er einen Authorisierungstoken<br />
zurück, den die Applikation über<br />
einen begrenzten Zeitraum für Requests<br />
mit dem »EDAMNoteStore::NoteStore-<br />
Client« verwenden darf. Letzterer dient<br />
zum Herumorgeln auf dem Evernote-<br />
Notizblock des Users.<br />
Die in Zeile 48 aufgerufene Methode<br />
»authenticate()« liefert im Erfolgsfall ein<br />
Objekt zurück, dessen Methode »user()«<br />
ein User-Objekt bereitstellt. Dessen Methode<br />
»shardId()« gibt die User-Partition<br />
auf Evernote zurück, in die der Benutzer<br />
fällt und deren Kürzel bei Requests an<br />
die Basis-URL des <strong>Web</strong>-API anzuhängen<br />
ist. Die Methode »authenticationToken()«<br />
gibt den Token an, den die Applikation<br />
den folgenden Requests beilegen muss.<br />
Orgeln durch Notizen<br />
So setzt Zeile 69 mit »listNotebooks()«<br />
den Befehl zum Auslesen aller Notebook-<br />
Abbildung 4: Per Perl-Skript eingeschleuste Notiz im »Inbox«-Ordner.<br />
Perl-Snapshot 01/2012<br />
Programmieren<br />
www.linux-magazin.de<br />
121<br />
OnLine<br />
Neu!<br />
Das Portal für Android-Fans,<br />
Smartphone-und Tablet Nutzer<br />
+ Tests aktueller Tablets und<br />
Smartphones<br />
+ Informationen zu Apps und<br />
Systemtools<br />
+ Tipps & Tricks<br />
+ und vieles mehr!<br />
www.android-user.de
Programmieren<br />
www.linux-magazin.de Perl-Snapshot 01/2012<br />
122<br />
Ordner des Users auf dem Evernote-Server<br />
ab. Zurück kommt eine Referenz auf einen<br />
Perl-Array, über den die For-Schleife<br />
ab Zeile 74 iteriert. Jedes Notebook-<br />
Objekt gibt mit der Methode »name()«<br />
den Ordnernamen und mit »guid()« eine<br />
eindeutige ID an, mit der sich eine neu<br />
erzeugte Note in den Ordner verfrachten<br />
lässt. Zeile 75 prüft nun bei jedem aufgelisteten<br />
Notebook, ob es sich um »Inbox«<br />
handelt, und bricht die Schleife ab, nachdem<br />
es dessen GUID in der Variablen<br />
»$inbox_guid« abgelegt hat.<br />
Der Autor<br />
Michael Schilli arbeitet<br />
als Software-Engineer bei<br />
Yahoo in Sunnyvale, Kalifornien.<br />
Er hat „Goto Perl<br />
5“ (auf Deutsch) und „Perl<br />
Power“ (auf Englisch)<br />
für Addison-Wesley geschrieben und ist unter<br />
[mschilli@perlmeister. com] zu erreichen. Seine<br />
Homepage ist [http:// perlmeister. com].<br />
Ein neues Note-Objekt mit dem auf der<br />
Kommandozeile hereingereichten Titel<br />
legt Zeile 85 mit dem Konstruktor der<br />
Klasse »EDAMTypes::Note« an. Der Aufruf<br />
von »content()« lässt den Inhalt der<br />
Note bewusst leer. Die Methode »createNote()«<br />
des »NoteStoreClient«-Objekts<br />
schickt die neue Note in den Zeilen 90<br />
und 91 samt Auth-Token an den Server,<br />
der im Erfolgsfall in der Variablen<br />
»$created« ein Note-Objekt zurückgibt,<br />
dessen Methode »guid()« die GUID der<br />
neu angelegten Note ausgibt. Damit die<br />
neue Note im Notebook »Inbox« landet,<br />
muss Zeile 94 sie mit der Methode »copy-<br />
Note()« unter Angabe des Auth-Tokens,<br />
der aktuellen GUID der neuen Note und<br />
der GUID des vorher ermittelten »Inbox«-<br />
Notebooks dorthin verfrachten.<br />
Grenzenlose Vielfalt<br />
Mit dem Evernote-API lassen sich weitere<br />
praktische Applikationen zaubern.<br />
Da die Applikation den User nur einzelne<br />
Notebooks exportieren lässt, böte sich<br />
ein Backupskript an, das sich durch alle<br />
Notebooks hangelt, den Inhalt der Notes<br />
extrahiert und in einem XML-Format in<br />
einer Backupdatei speichert. Wer Evernote<br />
täglich nutzt, weiß zusätzliche Maßnahmen<br />
zur Sicherung brillanter Ideen<br />
sicher zu schätzen. (uba)<br />
n<br />
Infos<br />
[1] Listings zu diesem Artikel:<br />
[ftp:// www. linux‐magazin. de/ pub/ listings/<br />
magazin/ 2012/ 01/ Perl]<br />
[2] Evernote: [http:// evernote. com]<br />
[3] David Pierce, „9 Ways I Use Evernote“:<br />
[http:// www. digitizd. com/ 2009/ 04/ 23/<br />
9‐ways‐i‐use‐evernote/]<br />
[4] David Allen, „Getting Things Done: The Art<br />
of Stress-Free Productivity“: [http:// www.<br />
amazon. com/ dp/ 0142000280]<br />
[5] Thrift, Scalable Cross-Language Services<br />
Implementation: [http:// thrift. apache. org/<br />
static/ thrift‐20070401. pdf]<br />
[6] Thrift-Projekt: [http:// thrift. apache. org]<br />
Listing 4: »evernote-add«<br />
01 #!/usr/local/bin/perl ‐w<br />
02 use strict;<br />
03 use Thrift;<br />
04 use Thrift::HttpClient;<br />
05 use Thrift::BinaryProtocol;<br />
06<br />
07 use lib 'gen‐perl';<br />
08 use EDAMUserStore::Constants;<br />
09 use EDAMUserStore::UserStore;<br />
10 use EDAMNoteStore::NoteStore;<br />
11 use EDAMErrors::Types;<br />
12 use EDAMTypes::Types;<br />
13<br />
14 my $username<br />
= "perlsnapshot";<br />
15 my $password = "*******";<br />
16 my $consumer_key = "perlsnapshot";<br />
17 my $consumer_secret = "****************";<br />
18<br />
19 my( $message ) = @ARGV;<br />
20 die "usage: $0 note" if !defined $message;<br />
21<br />
22 my $evernote_host = "evernote.com";<br />
23 my $user_store_uri =<br />
24 "https://$evernote_host/edam/user";<br />
25 my $note_store_uri_base =<br />
26 "https://$evernote_host/edam/note/";<br />
27<br />
28 my $http_client =<br />
29 Thrift::HttpClient‐>new($user_store_uri);<br />
30 my $protocol = Thrift::BinaryProtocol‐>new(<br />
31 $http_client);<br />
32<br />
33 my $client =<br />
34 EDAMUserStore::UserStoreClient‐>new(<br />
35 $protocol);<br />
36<br />
37 my $version_ok =<br />
38 $client‐>checkVersion( "perlsnapshot",<br />
39 EDAMUserStore::Constants::EDAM_VERSION_MAJOR,<br />
40 EDAMUserStore::Constants::EDAM_VERSION_MINOR,<br />
41 );<br />
42<br />
43 if ( !$version_ok ) {<br />
44 die "Version not ok";<br />
45 }<br />
46<br />
47 my $result =<br />
48 $client‐>authenticate( $username,<br />
49 $password, $consumer_key,<br />
50 $consumer_secret );<br />
51<br />
52 my $user = $result‐>user();<br />
53<br />
54 my $note_store_uri =<br />
55 $note_store_uri_base . $user‐>shardId();<br />
56<br />
57 my $note_store_client =<br />
58 Thrift::HttpClient‐>new($note_store_uri);<br />
59<br />
60 my $note_store_protocol =<br />
61 Thrift::BinaryProtocol‐>new(<br />
62 $note_store_client);<br />
63<br />
64 my $note_store =<br />
65 EDAMNoteStore::NoteStoreClient‐>new(<br />
66 $note_store_protocol);<br />
67<br />
68 my $notebooks =<br />
69 $note_store‐>listNotebooks(<br />
70 $result‐>authenticationToken() );<br />
71<br />
72 my $inbox_guid;<br />
73<br />
74 for my $notebook (@$notebooks) {<br />
75 if ( $notebook‐>name() eq "Inbox" ) {<br />
76 $inbox_guid = $notebook‐>guid();<br />
77 last;<br />
78 }<br />
79 }<br />
80<br />
81 if ( !defined $inbox_guid ) {<br />
82 die "No Inbox notebook found";<br />
83 }<br />
84<br />
85 my $note = EDAMTypes::Note‐>new();<br />
86 $note‐>title( $message );<br />
87 $note‐>content();<br />
88<br />
89 my $created =<br />
90 $note_store‐>createNote(<br />
91 $result‐>authenticationToken(), $note );<br />
92<br />
93 # move new note to "Inbox"<br />
94 $note_store‐>copyNote(<br />
95 $result‐>authenticationToken(),<br />
96 $created‐>guid(), $inbox_guid );
Jede Menge Freiraum,<br />
um den professionellen<br />
Mobilfunk voranzutreiben.<br />
Rohde & Schwarz Professional Mobile Radio ist seit über 30 Jahren erfolgreich im Professionellen Mobilfunk tätig. Wir sind auf die Entwicklung und Realisierung<br />
professioneller Mobilfunksysteme nach TETRA-Standard spezialisiert, als einziger deutscher Hersteller von TETRA-Infrastruktur sind für uns höchste<br />
Qualität und innovative Funktechnik Grundvoraussetzung unseres Erfolges. Unsere Kunden schätzen unsere innovativen Produkte, unsere hohe Flexibilität und<br />
die hohe Motivation unseres dynamischen Teams.<br />
Verstärken Sie unser Team in der Region Hannover im Bereich Entwicklung zum nächstmöglichen Zeitpunkt als<br />
Entwicklungsingenieur (m/w) für <strong>Linux</strong>-Plattformen und Treiberentwicklung<br />
Ihre Aufgaben:<br />
❙ Spezifikation, Integration und Pflege der Betriebssystemplattform auf Basis der hauseigenen Quellcode-basierten <strong>Linux</strong>-Distribution<br />
❙ Erstellen von Systemkonfigurationen<br />
❙ Einbringen von Patches bei Fehlern in Open-Source-Software<br />
❙ Bereitstellung von Entwicklungs- und Debugging-Werkzeugen für Anwendungsentwickler der Hardwareplattform<br />
❙ Qualifizierung und Validierung von 3rd-Party-Hardware zur Integration in die Hardwareplattform<br />
❙ Entwicklung von Gerätetreibern für interne Hardware-Entwicklungen<br />
❙ Durchführung von Qualitätssicherungsmaßnahmen<br />
❙ Inbetriebnahme und Test neuer Geräte einschließlich Erstellung von Testsoftware<br />
❙ Durchführung von Fehleranalysen und -behebung, auch beim Kunden<br />
Ihre Qualifikationen:<br />
❙ Abgeschlossenes Studium der Informatik oder Elektrotechnik mit Schwerpunkt Nachrichtentechnik/Technische Informatik oder vergleichbare Ausbildung mit<br />
Berufserfahrung<br />
❙ Kenntnisse des aktuellen <strong>Linux</strong> Kerneldesigns<br />
❙ Sehr gute Kenntnisse in den Programmiersprachen C und C++ sowie in Shellskripten, Python-Kenntnisse von Vorteil<br />
❙ Erfahrung mit Kernel-Treibern und hardwarenaher Programmierung (x86, PowerPC, ARM)<br />
❙ Erfahrungen mit GNU Toolkette (gcc/gdb/make), Erfahrungen mit ptxdist sind von Vorteil<br />
❙ Ausgeprägtes technisches Verständnis<br />
❙ Innovationsfreude, Qualitätsbewusstsein, Eigenverantwortlicher und zielorientierter Arbeitsstil<br />
❙ Engagierte, aktive und teamorientierte Denk- und Arbeitsweise<br />
❙ Sehr gute Englischkenntnisse in Wort und Schrift<br />
Interessiert? Dann schicken Sie uns bitte Ihre Bewerbung unter der Kennziffer PMR/12/008 an ROHDE & SCHWARZ Professional Mobile Radio GmbH, Bereich<br />
Personal, Fritz-Hahne-Straße 7, 31848 Bad Münder, Telefon +49 5042 998 0 oder per E-Mail an career.pmr@rohde-schwarz.com
Service<br />
www.linux-magazin.de IT-Profimarkt 01/2012<br />
124<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 />
<strong>Linux</strong> New Media 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-802998-1 www.schlittermann.de 3 3 3 3<br />
imunixx GmbH UNIX consultants 01468 Moritzburg, Heinrich-Heine-Str. 4 0351-83975-0 www.imunixx.de 3 3 3 3 3<br />
TUXMAN Computer 10369 Berlin, Anton-Saefkow-Platz 8 030-97609773 www.tuxman.de 3 3 3 3 3<br />
Hostserver GmbH 10405 Berlin, Winsstraße 70 030-47375550 www.hostserver.de 3<br />
Compaso GmbH 10439 Berlin, Driesener Strasse 23 030-3269330 www.compaso.de 3 3 3 3 3<br />
elego Software Solutions GmbH 13355 Berlin, Gustav-Meyer-Allee 25 030-2345869-6 www.elegosoft.com 3 3 3 3<br />
verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-4610-0 www.verion.de 3 3 3<br />
Logic Way GmbH 19061 Schwerin, Hagenower Str. 73 0385-39934-48 www.logicway.de 3 3 3 3<br />
Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de 3 3 3 3 3<br />
iTechnology GmbH 20537 Hamburg, Normannenweg 28 0)40 20 22 62 10 www.itechnology.de 3 3 3 3<br />
Dr. Plöger & Kollegen secom consulting GmbH 24105 Kiel, Waitzstr. 3 0431-66849700 www.secom-consulting.de 3 3 3 3 3<br />
& Co. KG<br />
beitco - Behrens IT-Consulting 26197 Ahlhorn, Lessingstr. 27 04435-9537330-0 www.beitco.de 3 3 3 3<br />
talicom GmbH 30169 Hannover, Calenberger Esplanade 3 0511-123599-0 www.talicom.de 3 3 3 3 3<br />
teuto.net Netzdienste GmbH 33602 Bielefeld, Niedenstr. 26 0521-96686-0 www.teuto.net 3 3 3 3 3<br />
MarcanT GmbH 33602 Bielefeld, Ravensberger Str. 10 G 0521-95945-0 www.marcant.net 3 3 3 3 3 3<br />
Hostserver GmbH 35037 Marburg, Biegenstr. 20 06421-175175-0 www.hostserver.de 3<br />
LINET Services GmbH 38122 Braunschweig, Am alten Bahnhof 4b 0531-180508-0 www.linet-services.de 3 3 3 3 3 3<br />
OpenIT GmbH 40599 Düsseldorf, In der Steele 33a-41 0211-239577-0 www.OpenIT.de 3 3 3 3 3<br />
<strong>Linux</strong>-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de 3 3 3 3 3<br />
<strong>Linux</strong>hotel GmbH 45279 Essen, Antonienallee 1 0201-8536-600 www.linuxhotel.de 3<br />
OpenSource Training Ralf Spenneberg 48565 Steinfurt, Am Bahnhof 3-5 02552-638755 www.opensource-training.de 3<br />
Intevation GmbH 49074 Osnabrück, Neuer Graben 17 0541-33508-30 osnabrueck.intevation.de 3 3 3 3<br />
uib gmbh 55118 Mainz, Bonifaziusplatz 1b 06131-27561-0 www.uib.de 3 3 3 3 3<br />
LISA GmbH 55411 Bingen, Elisenhöhe 47 06721-49960 www.lisa-gmbh.de 3 3 3 3 3<br />
saveIP GmbH 64283 Darmstadt, Schleiermacherstr. 23 06151-666266 www.saveip.de 3 3 3 3 3<br />
IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />
(S.126)
Markt / Stellenanzeige<br />
Digitales aBO<br />
linuxUser: Das Monatsmagazin<br />
für die Praxis<br />
DigisUB *<br />
nur 56,10 €<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<br />
LU_1-4DIN_Digisub_1111-2011.indd 1<br />
11.11.2011 10:15:57 Uhr<br />
Die <strong>Linux</strong> New Media AG ist das weltweit größte Medienunternehmen rund um <strong>Linux</strong> und Open Source. Der Verlag produziert eine umfangreiche Reihe an Monatsund<br />
Sonderpublikationen zum Thema <strong>Linux</strong>, Open Source, Android, und anderen IT-Themen. Zielgruppenorientierte Onlineangebote kennzeichnen einen wichtigen Teil<br />
der Zukunftsstrategie des Unternehmens. Die <strong>Linux</strong> New Media AG agiert international, ihre Print- und Online-Publikationen erscheinen in fünf Sprachen weltweit.<br />
Wir suchen für die Weiterentwicklung unseres Online-Geschäfts zum nächstmöglichen Zeitpunkt eine/n<br />
<strong>Web</strong>entwickler (m/w) in Vollzeit<br />
Ihre Aufgaben:<br />
• Weiterentwicklung der bestehenden und Umsetzung neuer <strong>Web</strong>sites unter Einbringung eigener Ideen und Vorschläge.<br />
• Support des Teams bei der Arbeit mit eZ Publish und Magento.<br />
• Unterstützung des Anzeigenteams bei der Verwaltung und Planung von Eigen- und Kundenkampagnen in OpenX<br />
Ihr Profil:<br />
• Gute Kenntnisse in PHP, objektorientierter Programmierung sowie <strong>Web</strong>services<br />
• Sie verfügen über Kenntnisse in einem oder mehreren der folgenden Bereiche:<br />
- Programmierung von Templates und Erweiterungen für das CMS eZ Publish,<br />
oder die Bereitschaft sich kurzfristig und weitgehend selbständig darin einzuarbeiten. Erfahrungen<br />
mit der Smarty Template Engine erleichtern den Einstieg.<br />
- Entwicklung von Designs und Plug-Ins für Magento<br />
- Kenntnisse in XML und XSLT<br />
• Erfahrungen mit anderen PHP-basierten Content Management Systemen sind von Vorteil<br />
• Versierter Umgang mit MySQL<br />
• HTML-, CSS-, JavaScript-Entwicklung unter Berücksichtigung der Kompatibilität mit den wichtigen<br />
<strong>Web</strong>browsern<br />
• Versierter Umgang mit Subversion und anderen Versionskontrollsystemen sowie mit Bugtracking-<br />
Systemen<br />
• Von Vorteil sind Kenntnisse weiterer <strong>Web</strong>technologien wie Rails, Zope, Perl oder Java.<br />
• Englischkenntnisse in Wort und Schrift werden vorausgesetzt<br />
Ihr Arbeitsplatz ist am Verlagsstandort in München<br />
Können Sie sich dafür begeistern, kreative<br />
Lösungen zu suchen und im Kontakt mit einem<br />
jungen, dynamischen Team etwas Neues<br />
aufzubauen?<br />
Wenn ja, bewerben Sie sich mit Beispielen<br />
Ihrer bisherigen Tätigkeit im Bereich<br />
<strong>Web</strong>entwicklung und Ihren Gehaltsvorstellungen<br />
bei:<br />
<strong>Linux</strong> New Media AG<br />
Frau Liane Ganguin<br />
Putzbrunner Str. 71<br />
81739 München<br />
Tel.: 089 / 99 34 11 -00<br />
E-Mail: bewerbung-web@linuxnewmedia.de<br />
Mehr Infos unter:<br />
www.linux-magazin.de/<strong>Web</strong>entwickler
Service<br />
www.linux-magazin.de IT-Profimarkt 01/2012<br />
126<br />
IT-Profimarkt<br />
IT-Profimarkt – Liste sortiert nach Postleitzahl (Fortsetzung von S. 108)<br />
1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />
4= Seminaranbieter 5 = Software 6 = Beratung<br />
Firma Anschrift Telefon <strong>Web</strong> 1 2 3 4 5 6<br />
LAMARC EDV-Schulungen u. Beratung GmbH 65193 Wiesbaden, Sonnenberger Straße 14 0611-260023 www.lamarc.com 3 3 3 3<br />
ORDIX AG 65205 Wiesbaden, Kreuzberger Ring 13 0611-77840-00 www.ordix.de 3 3 3 3 3<br />
<strong>Linux</strong>Haus Stuttgart 70565 Stuttgart, Hessenwiesenstrasse 10 0711-2851905 www.linuxhaus.de 3 3 3 3 3<br />
comundus GmbH 71332 Waiblingen, Schüttelgrabenring 3 07151-5002850 www.comundus.com 3<br />
Manfred Heubach EDV und Kommunikation 73728 Esslingen, Hindenburgstr. 47 0711-4904930 www.heubach-edv.de 3 3 3 3<br />
Waldmann EDV Systeme + Service 74321 Bietigheim-Bissingen, Pleidelsheimer Str. 25 07142-21516 www.waldmann-edv.de 3 3 3 3 3<br />
in-put Das <strong>Linux</strong>-Systemhaus 76133 Karlsruhe, Moltkestr. 49 0721-6803288-0 www.in-put.de 3 3 3 3 3 3<br />
Bodenseo 78224 Singen, Pomeziastr. 9 07731-1476120 www.bodenseo.de 3 3 3<br />
<strong>Linux</strong> Information Systems AG 81739 München, Putzbrunnerstr. 71 089-993412-0 www.linux-ag.com 3 3 3 3 3<br />
Synergy Systems GmbH 81829 München, Konrad-Zuse-Platz 8 089-89080500 www.synergysystems.de 3 3 3 3 3<br />
ATIX AG 85716 Unterschleißheim, Einsteinstr. 10 089-4523538-0 www.atix.de 3 3 3 3 3 3<br />
Bereos OHG 88069 Tettnang, Kalchenstraße 6 07542-9345-20 www.bereos.eu 3 3 3 3 3<br />
OSTC Open Source Training and Consulting 90425 Nürnberg, Delsenbachweg 32 0911-3474544 www.ostc.de 3 3 3 3 3 3<br />
GmbH<br />
Dipl.-Ing. Christoph Stockmayer GmbH 90571 Schwaig, Dreihöhenstr. 1 0911-505241 www.stockmayer.de 3 3 3<br />
Computersysteme Gmeiner 95643 Tirschenreuth, Fischerhüttenweg 4 09631-7000-0 www.gmeiner.de 3 3 3 3 3<br />
RealStuff Informatik AG CH-3007 Bern, Chutzenstrasse 24 0041-31-3824444 www.realstuff.ch 3 3 3<br />
CATATEC CH-3013 Bern, Dammweg 43 0041-31-3302630 www.catatec.ch 3 3 3<br />
EBP Gasser CH-4208 Nunningen, Winkel 6 0041-61793-0099 www.ebp-gasser.ch 3 3 3 3 3<br />
Syscon Systemberatungs AG CH-8003 Zürich, Zweierstrasse 129 0041-44-4542010 www.syscon.ch 3 3 3 3 3<br />
IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />
n<br />
8,90€ *<br />
124 Seiten <strong>Linux</strong><br />
+ DVD<br />
Die aktuelle Ausgabe von <strong>Linux</strong>User Spezial<br />
dringt in die Tiefen des <strong>Linux</strong>-Systems ein<br />
und zeigt, wie Sie Ihren Rechner auf der<br />
Kommandozeile administrieren.<br />
Jetzt bestellen<br />
unter: www.linuxuser.de/spezial<br />
Tel.: 089-9934110, Fax: 089-99341199, E-Mail: order@linuxnewmedia.de
u<br />
Fo<br />
Fa<br />
eM<br />
Seminare/Markt<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
ACADEMY<br />
Online-Training<br />
mit Hans-Georg Esser, Chefredakteur Easy<strong>Linux</strong><br />
OpenOffice -<br />
Arbeiten mit Vorlagen<br />
Erleichtern Sie sich Ihre<br />
tägliche Arbeit mit (Auszug):<br />
❚ einheitlichen Dokumentenvorlagen<br />
❚ automatischen Formatierungen<br />
❚ generierten Inhaltsverzeichnissen<br />
20%<br />
Treue-Rabatt für<br />
Abonnenten<br />
Mit vielen<br />
Praxisbeispielen<br />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/openoffice<br />
DiD you<br />
know?<br />
Teststudium<br />
ohne Risiko!<br />
Fernstudium<br />
IT-Sicherheit<br />
Aus- und Weiterbildung zur Fachkraft für<br />
IT-Sicherheit. Ein Beruf mit Zukunft. Kostengünstiges<br />
und praxisgerechtes Studium<br />
ohne Vorkenntnisse. Beginn jederzeit.<br />
NEU:PC-Techniker, Netzwerk-Techniker,<br />
<strong>Linux</strong>-Administrator LPI, <strong>Web</strong>master<br />
Teststudium ohne Risiko.<br />
GRATIS-Infomappe<br />
gleich anfordern!<br />
FERNSCHULE WEBER<br />
-seit 1959-<br />
Postfach 21 61<br />
Abt. C25<br />
26192 Großenkneten<br />
Tel. 0 44 87 / 263<br />
Fax 0 44 87 / 264<br />
www.fernschule-weber.de<br />
tl<br />
a<br />
ta<br />
s<br />
•<br />
n<br />
c<br />
i<br />
e<br />
h<br />
g<br />
e<br />
p<br />
g<br />
rü<br />
Fernstudium<br />
s<br />
s<br />
a<br />
el<br />
f<br />
t<br />
n<br />
d<br />
z<br />
u<br />
Seminare/Markt 01/2012<br />
Service<br />
www.linux-magazin.de<br />
127<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
Academy_1-9h_Anzeige_openoffice-Mike.indd 1<br />
ACADEMY<br />
12.04.2011 15:08:54 Uhr<br />
OpenSource Training Ralf Spenneberg<br />
Schulungen direkt vom Autor<br />
Online-Training<br />
Prüfungsvorbereitung<br />
für LPIC 1 & 2<br />
Besorgen Sie sich Brief und<br />
Siegel für Ihr <strong>Linux</strong>-<br />
Knowhow mit der<br />
LPI-Zertifizierung.<br />
- Training für die Prüfungen<br />
LPI 101 und 102<br />
- Training für die Prüfungen<br />
LPI 201 und 202<br />
Sparen Sie mit<br />
paketpreiSen!<br />
20%<br />
Treue-Rabatt für<br />
Abonnenten<br />
<strong>Linux</strong> System Administration / LPIC1<br />
5 Tage 09.01. 13.01.2012<br />
Hacking <strong>Web</strong>applications<br />
4 Tage 17.01. 20.01.2012<br />
Monitoring mit Nagios & Co.<br />
5 Tage 23.01. 27.01.2012<br />
Sourcefire 3D<br />
4 Tage 23.01. 26.01.2012<br />
<strong>Linux</strong> Netzwerk Administration / LPIC2<br />
5 Tage 30.01. 03.02.2012<br />
IPv6 mit <strong>Linux</strong><br />
3 Tage 06.02. 08.02.2012<br />
Virtualisierung mit XEN<br />
3 Tage 13.02. 15.02.2012<br />
Apache 2.x <strong>Web</strong>server Administration<br />
4 Tage 21.02. 24.02.2012<br />
Virtualisierung mit KVM<br />
3 Tage 22.02. 24.02.2012<br />
Freie Distributionswahl:<br />
Opensuse, Fedora, Debian Squeeze,<br />
CentOS oder Ubuntu LTS<br />
Ergonomische Arbeitsplätze<br />
Umfangreiche Schulungsunterlagen mit<br />
Übungen<br />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/lpic<br />
Am Bahnhof 35<br />
48565 Steinfurt<br />
Tel.: 02552 638755<br />
Fax: 02552 638757<br />
Weitere Informationen unter www.ost.de<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
cademy_1-9h_Anzeige_LPIC-Mike.indd 1<br />
©mipan, fotolia<br />
ACADEMY<br />
20%<br />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/sicherheit<br />
18.04.2011 11:05:38 Uhr<br />
Treue-Rabatt für<br />
Abonnenten<br />
Online-Training<br />
IT-Sicherheit<br />
Grundlagen<br />
mit Tobias Eggendorfer<br />
Themen:<br />
- physikalische Sicherheit<br />
- logische Sicherheit<br />
• Betriebssystem<br />
• Netzwerk<br />
- Sicherheitskonzepte<br />
- Sicherheitsprüfung<br />
Inklusive Benutzer- und<br />
Rechteverwaltung, Authentifizierung,<br />
ACLs sowie wichtige<br />
Netzwerkprotokolle und mehr!<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 />
Treue-Rabatt für<br />
Abonnenten<br />
www.linux-magazine.com<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
ACADEMY<br />
Online-Training<br />
Erfolgreicher Einstieg in<br />
WordPress 3<br />
mit Hans-Georg Esser, Chefredakteur Easy<strong>Linux</strong><br />
Ansprechende <strong>Web</strong>seiten, Blogs und<br />
Shops einfach selber erstellen<br />
❚ Installation in 5 Minuten<br />
❚ Designs ändern<br />
❚ Optimieren für Suchmaschinen<br />
❚ Funktionen erweitern<br />
❚ Benutzerrechte festlegen<br />
❚ Geld verdienen mit Werbung<br />
❚ Besucher analysieren<br />
❚ Sicherheit und Spam-Schutz<br />
20%<br />
Treue-Rabatt für<br />
Abonnenten<br />
Informationen und Anmeldung unter:<br />
academy.linux-magazin.de/wordpress<br />
Academy_1-9h_Security-Mike.indd 1<br />
12.04.2011 14:00:35 Uhr<br />
1-9h_Anzeige_wordpress_v02.indd 1<br />
18.04.2011 11:18:15 Uhr<br />
LMI_3-9h_german_091202.indd 1<br />
24.11.2011 10:53:35 Uhr
Service<br />
www.linux-magazin.de Inserenten 01/2012<br />
128<br />
Inserentenverzeichnis<br />
1&1 Internet AG http://www.einsundeins.de 9, 21<br />
ADMIN http://www.admin-magazin.de 53, 101<br />
Android User GY http://www.android-user.de 43, 45, 121<br />
Bibliographisches Institut AG http://www.bifab.de 11<br />
Deutsche Messe AG http://www.deutsche-messe.de 89<br />
Easy<strong>Linux</strong> Starter Kit http://www.easylinux.de 109<br />
embedded projects GmbH http://www.embedded-projects.net 125<br />
Fernschule <strong>Web</strong>er GmbH http://www.fernschule-weber.de 127<br />
German Unix User Group (GUUG) e.V. http://www.guug.de 91<br />
Golem.de http://www.golem.de 83<br />
Happyware GmbH http://www.happyware.de 15<br />
Heinlein Professional <strong>Linux</strong> Support GmbH http://www.heinlein-partner.de 61, 65<br />
Hetzner Online AG http://www.hetzner.de 132<br />
Hostserver GmbH http://www.hostserver.de 2<br />
Ico Innovative Computer GmbH http://www.ico.de 37<br />
Kamp Netzwerkdienste GmbH http://www.kamp.net 19<br />
<strong>Linux</strong> <strong>Magazin</strong>e http://www.linux-magazine.com 127<br />
<strong>Linux</strong> New Media AG http://www.linuxnewmedia.de 125<br />
<strong>Linux</strong>-<strong>Magazin</strong> http://www.linux-magazin.de 41, 99<br />
<strong>Linux</strong>-<strong>Magazin</strong> Academy<br />
http://www.academy.linux-magazin.de<br />
76, 117, 127, 127, 127, 127<br />
<strong>Linux</strong>-<strong>Magazin</strong> Online http://www.linux-magazin.de 55<br />
<strong>Linux</strong>-Onlineshop/Fidu http://www.linux-onlineshop.de 131<br />
<strong>Linux</strong>User http://www.linuxuser.de 103, 125<br />
Mittwald CM Service GmbH & Co. KG http://www.mittwald.de 17<br />
Netclusive GmbH http://www.netclusive.de 13<br />
netways GmbH http://www.netways.de 49<br />
O’Reilly Verlag GmbH & Co KG http://www.oreilly.de 73<br />
Open Source Press GmbH http://www.opensourcepress.de 69<br />
OVH GmbH http://www.ovh.de 26<br />
Pluspol GmbH http://www.pluspol.de 93<br />
PSW GROUP GmbH & Co. KG http://www.psw.net 7<br />
REINER Kartengeräte GmbH und Co. KG http://www.reiner-sct.com 67<br />
Rohde &Schwarz http://rohde-schwarz.com 123<br />
SolvetecIT Services GmbH http://www.solvetec.de 79<br />
Spenneberg Training & Consulting http://www.spenneberg.com 127<br />
Strato AG http://www.strato.de 1, 86<br />
<strong>Linux</strong> User Spezial http://www.linux-user.de/spezial 126<br />
<strong>Linux</strong>-Hotel http://www.linuxhotel.de 23<br />
Thomas Krenn AG http://www.thomas-krenn.com 47<br />
Ubuntu User http://www.ubuntu-user.de 107<br />
Veranstaltungen<br />
08.11.2011-09.04.2012<br />
VI Concurso Universitario de Software Libre –<br />
Desarrollo<br />
National, Spain<br />
http://www.concursosoftwarelibre.org/1112/<br />
04.-09.12.2011<br />
LISA ’11<br />
Boston, MA USA<br />
http://www.usenix.org/events/<br />
27.-30.12.2011<br />
28th Chaos Communication Congress<br />
Berlin, Germany<br />
http://events.ccc.de<br />
16.-20.01.2012<br />
linux.conf.au 2012<br />
Ballarat, Australia<br />
http://linux.conf.au<br />
20.-22.01.2012<br />
SCALE 10x<br />
Los Angeles, CA<br />
https://www.socallinuxexpo.org/scale10x<br />
25.-26.01.2012<br />
Cloud Expo Europe 2012<br />
London, UK<br />
http://www.cloudexpoeurope.com<br />
28.01.2012<br />
Install Party Colegio Ártica<br />
Madrid, Spain<br />
http://www.jrotero.org/index.php/artica<br />
04.-05.02.2012<br />
FOSDEM 2012<br />
Brussels, Belgium<br />
http://www.fosdem.org/2011<br />
28.02.-01.03.2012<br />
Strata Conference 2012<br />
Santa Clara, CA<br />
http://strataconf.com/strata2012<br />
13.-14.03.2012<br />
Droidcon 2012<br />
Urania Berlin e. V.<br />
10787 Berlin<br />
http://de.droidcon.com<br />
17.03.2012<br />
Northeast <strong>Linux</strong>Fest<br />
Worcester, MA<br />
http://www.northeastlinuxfest.org<br />
24.03.2012<br />
ABLEConf<br />
Tempe, AZ<br />
http://www.ableconf.com<br />
30.-31.03.2012<br />
Flourish! Open Source Conference<br />
Chicago, IL<br />
http://www.flourishconf.com/2012/<br />
02.-04.04.2012<br />
Where Conference 2012<br />
San Francisco, CA<br />
http://whereconf.com<br />
02.-17.04.2012<br />
VI Concurso Universitario de Software Libre –<br />
Evaluación<br />
National, Spain<br />
http://www.concursosoftwarelibre.org/1112/<br />
12.-15.04.2012<br />
<strong>Linux</strong> Audio Conference 2012<br />
Palo Alto, CA, USA<br />
http://lac.linuxaudio.org/2012<br />
13.-15.04.2012<br />
Indiana <strong>Linux</strong>Fest<br />
Indianapolis, IN<br />
http://www.indianalinux.org/cms/<br />
17.-18.04.2012<br />
The Mobile Show<br />
Dubai, UAE<br />
http://www.terrapinn.com/2012/the-mobile-show/<br />
24.-26.04.2012<br />
Infosecurity Europe 2012<br />
London, UK<br />
http://www.infosec.co.uk<br />
27.-29.04.2012<br />
Penguicon<br />
Dearborn, MI<br />
http://www.penguicon.org<br />
28.-29.04.2012<br />
<strong>Linux</strong>Fest Northwest<br />
Bellingham, WA<br />
http://linuxfestnorthwest.org<br />
26.-29.06.2012<br />
Open Source Bridge<br />
Portland, OR<br />
http://opensourcebridge.org<br />
08.-14.07.2012<br />
DebConf12<br />
Managua, Nicaragua<br />
http://debconf.org<br />
10.-15.07.2012<br />
Wikimania 2012<br />
Washington, DC, USA<br />
http://wikimania2012.wikimedia.org
Impressum<br />
<strong>Linux</strong>-<strong>Magazin</strong> eine Publikation der <strong>Linux</strong> New Media 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 />
Chefredakteure<br />
stv. Chefredakteure<br />
Brian Osborn (Vorstand), bosborn@linuxnewmedia.de<br />
Hermann Plank (Vorstand), hplank@linuxnewmedia.de<br />
Jan Kleinert (V.i.S.d.P.), jkleinert@linux-magazin.de (jk)<br />
Ulrich Bantle (Online), ubantle@linux-magazin.de (uba)<br />
Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />
Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Print- und Onlineredaktion<br />
Aktuell, Forum Ulrich Bantle, ubantle@linux-magazin.de (uba)<br />
Mathias Huber, mhuber@linux-magazin.de (mhu)<br />
Software, 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 (fan), Jens-Christoph Brendel (jcb),<br />
Zack Brown, Mela Eckenfels, Hans-Georg Eßer (hge), Oliver<br />
Frommel (ofr), Heike Jurzik (hej), Charly Kühnast, Martin<br />
Loschwitz, Michael Schilli, Mark Vogelsberger, Uwe Vollbracht,<br />
Britta Wülfing (bwü), Arnold 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 />
xhoch4, München (Titel-Illustration)<br />
123RF.com, Fotolia.de, Photocase.com, Pixelio.de und andere<br />
Thomas Leichtenstern, tleichtenstern@linuxnewmedia.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@linuxnewmedia.de<br />
shop.linuxnewmedia.de<br />
www.linux-magazin.de/Produkte<br />
Lea-Maria-Schmitt<br />
abo@linux-magazin.de<br />
Tel.: 07131/27 07 274<br />
Fax: 07131/27 07 78 601<br />
CH-Tel: +41 43 816 16 27<br />
Preise Print Deutschland Österreich Schweiz Ausland EU<br />
No-Media-Ausgabe 4 5,95 4 6,70 Sfr 11,90 (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 63,20 4 71,50 Sfr 99,96 4 75,40<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 5,95 4 5,95 Sfr 7,70 4 5,95<br />
DigiSub (12 Ausgaben) 4 63,20 4 63,20 Sfr 78,50 4 63,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, anzeigen@linuxnewmedia.de<br />
Tel.: +49 (0)89 / 99 34 11 – 24<br />
Fax: +49 (0)89 / 99 34 11 – 99<br />
Mediaberatung USA Ann Jesse, ajesse@linuxnewmedia.com<br />
und weitere Länder Tel.: +1 785 841 8834<br />
Eric Henry, ehenry@linuxnewmedia.com<br />
Tel.:+1 785 917 0990<br />
Pressevertrieb<br />
Druck<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 und Medienservice 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 – 2011 <strong>Linux</strong> New Media AG<br />
Impressum 01/2012<br />
Service<br />
www.linux-magazin.de<br />
129<br />
Krypto-Info<br />
GnuPG-Schlüssel der <strong>Linux</strong>-<strong>Magazin</strong>-Redaktion:<br />
pub 1024D/44F0F2B3 2000-05-08 Redaktion <strong>Linux</strong>-<strong>Magazin</strong><br />
<br />
Key fingerprint = C60B 1C94 316B 7F38 E8CC E1C1 8EA6 1F22 44F0 F2B3<br />
Public-Key der DFN-PCA:<br />
pub 2048R/7282B245 2007-12-12,<br />
DFN-PGP-PCA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />
<br />
Key fingerprint = 39 D9 D7 7F 98 A8 F1 1B 26 6B D8 F2 EE 8F BB 5A<br />
PGP-Zertifikat der DFN-User-CA:<br />
pub 2048R/6362BE8B (2007-12-12),<br />
DFN-PGP-User-CA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />
<br />
Key fingerprint = 30 96 47 77 58 48 22 C5 89 2A 85 19 9A D1 D4 06<br />
Root-Zertifikat der CAcert:<br />
Subject: O=Root CA, OU=http://www.cacert.org, CN=CA Cert Signing Authority/<br />
Email=support@cacert.org<br />
SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33<br />
MD5 Fingerprint=A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B<br />
GPG-Schlüssel der CAcert:<br />
pub 1024D/65D0FD58 2003-07-11 [expires: 2033-07-03]<br />
Key fingerprint = A31D 4F81 EF4E BD07 B456 FA04 D2BB 0D01 65D0 FD58<br />
uid CA Cert Signing Authority (Root CA) <br />
Autoren dieser Ausgabe<br />
Konstantin Agouros Nebel – gut <strong>fürs</strong> Image 90<br />
Fred Andresen Eine Frage der Ehre 96<br />
Bernhard Bablok Bash Bashing 110<br />
Jan Brinkmann Schneller Shoppen 54<br />
Zack Brown Zacks Kernel-News 22<br />
Mela Eckenfels Alle Macht dem Volke 68<br />
Tobias Eggendorfer Seltener Zufall 48<br />
Peter Kreußel Ereignisorientiert 40<br />
Eva-Katharina Kunst Kern-Technik 104<br />
Charly Kühnast Großer Regionalbahnhof 77<br />
Martin Loschwitz Grünes Erwachen 84<br />
Andreas Möller Blühende Oberflächen 28<br />
Philipp Neuhaus Zweifach gesichert 78<br />
Jürgen Quade Kern-Technik 104<br />
Fritz Reichmann Runde Sache 60<br />
Michael Schilli Zettels Trauma 118<br />
Tim Schürmann Starker PHP-Fluss 34<br />
Mark Vogelsberger Tux liest 100<br />
Uwe Vollbracht Tooltipps 74<br />
Carsten Zerbst Schloss und Siegel 112
Service<br />
www.linux-magazin.de <strong>Vorschau</strong> 02/2012 1/2011 01/2012 12/2010<br />
130<br />
<strong>Vorschau</strong><br />
02/2012 Dachzeile<br />
Heimatschutz gegen Einbrecher<br />
Mobiler Vierer<br />
Das Ende Oktober ausgewilderte Android 4.0 führt die getrennten<br />
Entwicklungslinien 2.3 und 3.2 wieder zu einer Codebasis<br />
zusammen. „Ice Cream Sandwich“, so der Arbeitsname, verbessert<br />
das Multitasking und die wichtigen Apps wie Browser,<br />
Galerie, Mail und Kalender. Neu sind Gesichtserkennung, Near<br />
Field Communication und eine App <strong>fürs</strong> Data Tracking.<br />
Der Schwerpunkt des <strong>Linux</strong>-<strong>Magazin</strong>s 02/12 unterzieht das<br />
Handy- und Tablet-System einer Analyse: Was ändert sich an<br />
der Oberfläche, am API und dem Entwicklerkit? Wie schauts<br />
mit Upgrades für ältere Modelle aus? Was tun, wenn die Prognosen<br />
dafür schlecht stehen? Ein Artikel dokumentiert die Bemühungen,<br />
Android-Apps auf normalen PCs lauffähig zu machen.<br />
© Ekaterina Pokrovsky, 123Rf<br />
MAGAZIN<br />
Überschrift<br />
Intrusion-Detection- und ‐Prevention-Systeme gibt es schon einige,<br />
auch als Open Source. Aber nur eines kommt aus dem<br />
umstrittenen Homeland-Security-Ministerium in den USA. The<br />
Suricata Engine heiß das System und steht unter der GPL. Das<br />
<strong>Linux</strong>-<strong>Magazin</strong> schaut sich die Software genau an – und deren<br />
Deep Packet Inspection auf die Finger.<br />
Lambda-Funktionen<br />
Die Artikelreihe zum Programmieren mit dem Standard C++11<br />
widmet ihre zweite Folge den Lambda-Funktionen. Die meisten<br />
Programmierer, die Bekanntschaft mit den knackigen Namenlosen<br />
schließen, wollen deren Gesellschaft nicht mehr missen.<br />
Denn mit Lamda-Funktionen ist ein Algorithmus rasch angepasst<br />
oder ein Thread leicht mit einem Arbeitspaket ausgestattet.<br />
Insecurity Bulletin<br />
Der Sicherheitsspezialist Mark Vogelsberger beschreibt in seiner<br />
Serie aktuelle Sicherheitslücken und erklärt die programmtechnischen<br />
Hintergründe, die dazu geführt haben.<br />
Die Ausgabe 02/2012<br />
erscheint am 5. Januar 2012<br />
Ausgabe 01/2012<br />
erscheint am 22.12.2011<br />
© Vilijamweb, sxc.hu<br />
Audio & Video<br />
Ob Audio, Video oder Foto – <strong>Linux</strong> bietet<br />
für alle Einsatzgebiete die richtigen Tools<br />
und Frameworks an. Viele Spezialisten ermöglichen<br />
es, alle Aufgaben eines Multimedia-Workflows<br />
zuverlässig zu erledigen.<br />
Einmal bearbeitet, haben Sie die Möglichkeit,<br />
die Daten via Server ins Netzwerk zu<br />
verteilen. Auch hier hat <strong>Linux</strong> wieder einige<br />
Werkzeuge mit an Bord, die das erledigen.<br />
Unsere kommende Ausgabe nimmt einige der Multimedia-Programme<br />
genauer unter die Lupe, erläutert ihre Fähigkeiten und zeigt, wie Sie<br />
diese Tools optimal für Ihre Zwecke einsetzen.<br />
Karten-Editor<br />
Das Openstreetmap-Projekt, die freie Alternative zu Google Maps,<br />
lebt vom Mitmachen. Wer neue Wege erkundet oder per GPS Tracks<br />
ausgezeichnet hat, dem steht der Weg offen, seinen Beitrag zu leisten:<br />
Das Programm Merkaartor hilft, die neuen Daten zu integrieren.<br />
<strong>Linux</strong> auf dem Mac<br />
Die Computer von Apple bestechen kaum bestritten<br />
durch gut aufeinander abgestimmte<br />
Komponenten und ihr sehr schickes Design.<br />
Wer statt des proprietären Originalsystems<br />
jedoch lieber eine aktuelle <strong>Linux</strong>-Distribution<br />
auf dem eleganten Unterbau aufsetzen<br />
möchte, dem hilft unser Workshop in der<br />
kommenden Ausgabe, eine Menge der Probleme<br />
zu umgehen, die sich bei diesem Unterfangen<br />
ergeben können.<br />
Android tweaken<br />
Mit Cyanogenmod entfesseln Sie die wahren Fähigkeiten Ihres Android-Mobilgerätes<br />
und steigen aus dem oft zögerlichen Update-Zyklus<br />
der Hersteller aus. Vorausgesetzt Sie besitzen ein unterstütztes Gerät,<br />
haben Sie zudem Zugriff auf mehr Funktionen, kontrollieren die installierten<br />
Apps besser und nutzen zusätzliche Ressourcen, die Ihnen<br />
unter normalen Umständen nicht immer zur Verfügung stehen.