26.02.2014 Aufrufe

Linux-Magazin Schnittstellen-Magie (Vorschau)

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

12/12<br />

Anzeige:<br />

SPEED dreams!<br />

Vergleichen lohnt sich richtig! » strato-pro.de siehe Beihefter<br />

STR1112_DE_TKS_DServer_120x17.indd 1<br />

16.10.2012 14:19:38 Uhr<br />

Meetings und Seminare<br />

am PC abhalten<br />

Test von Webkonferenz-Systemen, die Audio,<br />

Video & Vortragsfolien verteilen S. 42<br />

Terminals<br />

Was der Kernel mit realen,<br />

virtuellen, Pseudo- und<br />

Bootkonsolen anstellt S. 88<br />

Kanban-Prinzip<br />

Das Projektmanagement-<br />

Tool Rike setzt auf Eigenverant<br />

wortung S. 52<br />

<strong>Schnittstellen</strong>-<strong>Magie</strong><br />

Einfach zauberhaft: Webdienste<br />

per API abfragen und steuern<br />

■ Soap vs. REST: Webservices-Einmaleins S. 20<br />

■ Facebook, Twitter und Xing anzapfen<br />

am Beispiel zweier Groupwares S. 22<br />

■ Leitfaden für Ebay- und Amazon-Verkäufer,<br />

um eigene Programme anzubinden S. 28<br />

■ API-Praxis: Google Maps & Open Streetmap S. 32<br />

■ Bugzilla, OTRS, Github, Google Code & Co.<br />

per Python fernsteuern S. 36<br />

■ Rechtsfallen mit Web-APIs S. 70<br />

■ Die Zeit ist reif: Armbanduhren<br />

mit <strong>Linux</strong> programmieren S. 80<br />

■ Freies Cfengine 3.4.0 mit Posix-ACLs<br />

für Unix, <strong>Linux</strong> und Windows S. 62<br />

Perlmeister Schilli geht Büchern mit einem Monster-Messer und einem Einzugsscanner ans Leder S. 102<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 12


CityCloud<br />

Die Cloud in Ihrer Stadt<br />

Hamburg<br />

Berlin<br />

Frankfurt<br />

Stuttgart<br />

München<br />

Willkommen in der CityCloud<br />

Nutzen Sie sichere und flexible Cloudlösungen<br />

und Managed Hosting direkt in Ihrer Stadt.<br />

Sie wissen immer, wo Ihre Daten und Anwendungen<br />

betrieben werden. Selbstverständlich<br />

nach den Anforderungen des deutschen und<br />

europäischen Datenschutzes.<br />

Sprechen Sie uns an!<br />

Tel.: 0 30 / 420 200 24<br />

hostserver.de/citycloud<br />

Vorteile der CityCloud:<br />

Daten sicher in Ihrer Stadt<br />

ISO 9001 zertifiziertes<br />

Managed Hosting<br />

Umfassender Datenschutz<br />

24/7 Service und Support<br />

Managed Hosting<br />

zertifiziert nach<br />

ISO 9001 : 2008


Yes, ICANN<br />

Login 12/2012<br />

Editorial<br />

Neulich im Bundestag ging es, mal wieder, um Vorratsdatenspeicherung. Rund<br />

64 000 Bürger hatten erreicht, dass sich der Petitionsausschuss mit der Frage<br />

auseinandersetzen muss, ob das anlasslose Speichern rechtswidrig ist. Warum<br />

die Debatte, mag man einwenden. Hatte das Bundesverfassungsgericht im März<br />

2010 nicht die Speichervorschriften komplett gekippt? Und prüft der Europäische<br />

Gerichtshof nicht gerade, das Gleiche mit der EU-Speicher-Richtline zu tun?<br />

Bestätigte er das nationale Urteil, wäre damit auch das laufende EU-Vertragsverletzungsverfahren<br />

gegen Deutschland vom Tisch. In der Zwischenzeit speichern<br />

deutsche Provider für sieben Tage, eine Ermittlungspraxis, die – seltsam genug<br />

– den Segen des Bundesdatenschutzbeauftragten hat. Die Bundesregierung diskutiert<br />

währenddessen intern über ein „Quick Freeze plus“-Gesetz.<br />

Die Anhörung in Berlin verlief nicht sonderlich kontrovers: Kai-Uwe Steffens, Jan Kleinert, Chefredakteur<br />

der die Petition eingereicht hatte, legte die Argumente der Gegner dar, und<br />

Max Stadler, parlamentarischer Staatssekretär im FDP-geführten Justizministerium, teilte die Bedenken der<br />

Bürger in wesentlichen Punkten. Einzig ein Vertreter des Innenministeriums hielt dagegen, dass ohne Vorratsdatenspeicherung<br />

insbesondere Internetdelikte oft nicht aufklärbar seien. Dass der strafrechtliche Nutzen des<br />

Speicherns nicht wissenschaftlich belegt ist, musste aber auch er einräumen.<br />

Eine Vorratsspeicherung in Kombination mit verschärfter Nutzerdaten-Verifikation hat sich die ICANN gerade<br />

zugelegt. Die Internet Corporation for Assigned Names and Numbers, eine eher schwerfällige Non-Profit-Organisation,<br />

die der Öffentlichkeit, wenn überhaupt, nur als weltweite Hüterin der Toplevel-Domains und Betreiberin<br />

des Root-DNS bekannt ist, will Domainanbieter verpflichten, nicht nur Daten der Inhaber einer aktiven Domain<br />

anlasslos zu speichern, sondern sogar zwei Jahre nach Vertragsende aufzubewahren.<br />

Dabei geht es nicht nur um die Whois-Felder, sondern auch um Telefonnummern, E-Mail-Adressen, Skype-Namen,<br />

Kreditkartendaten, Quell- und Ziel-IPs der Kommunikation zum Kunden sowie HTTP-Header. Da der ICANN die<br />

demokratische Legitimation fehlt, braucht man kein Staatsexamen in Jura, um das frech zu finden. Die zentrale<br />

Frage lautet: Warum denkt sich das Standesamt des Internet eine so absurde Regelung aus? Seit Jahren üben<br />

Strafverfolgungsbehörden, besonders US-amerikanische, Druck auf diverse Domainregistrare aus. Und die wiederum<br />

sitzen neben Regierungsvertretern in den ICANN-Gremien. Die Vorratsdatenspeicherung kam auf Initiative<br />

des FBI hinzu. Am Ende haben alle zugestimmt und die Chose war perfekt. Fast. Denn beim ICANN-Treffen<br />

in Toronto vor ein paar Tagen kristallisierte sich heraus, dass europäische Registrare per Ausnahmeregelung<br />

die Vorratsdatenspeicherung nicht umzusetzen brauchen – was die US-Registrare wiederum wurmt.<br />

Deutschland, EU und weltweit: Warum nur ist das Thema einfach nicht totzukriegen?! Kometengleich kehrt<br />

es alle ein, zwei Jahre zurück und bedroht die digitale Zivilisation aufs Neue. Was macht es für Schlapphüte,<br />

Terrorfahnder und weiß Gott wen noch so attraktiv, statt einiger Verdächtiger die komplette Einwohnerschaft<br />

eines Landes kommunikationstechnisch zu durchleuchten? Die Angst, die Kontrolle zu verlieren?<br />

Vielleicht ist es ja ganz harmlos, und alle Sicherheitsbehörden sind bloß mit nicht-enttarnten Stasi-Agenten<br />

durchsetzt, die nach der Wende mangels Instruktionen und zweitem Gehalt aus Ostberlin eine gesamtdeutsche<br />

Karriere anstreben. Und was tun die? Das was sie gelernt haben: überwachen.<br />

www.linux-magazin.de<br />

3


Inhalt<br />

www.linux-magazin.de 12/2012 12/2012<br />

4<br />

Laien muss es wie pure <strong>Magie</strong> vorkommen, wenn Adressen aus sozialen Netzwerken plötzlich<br />

in einer normalen Groupware auftauchen, wenn Ebay- oder Amazon-Verkäufer ohne Browser<br />

ihre Artikel managen, eine Intranet-Anwendung Reiserouten berechnet oder Python-Skripte<br />

Webdienste fernsteuern. Doch stets geht es mit rechten Dingen zu: mit APIs.<br />

Aktuell<br />

Titelthema: Webdienste über <strong>Schnittstellen</strong> abfragen und steuern<br />

6 N ew s<br />

n Gnublin-DIP: Rechner in IC-Größe<br />

n Mapi: Sogo integriert Open Change<br />

20 Einführung<br />

Titel<br />

Datenaustausch im Web über XML-RPC,<br />

Soap und REST.<br />

22 Social-Network-APIs<br />

Wie Open-Xchange und Zarafa auf die<br />

APIs von sozialen Netzwerken zugreifen.<br />

32 GIS-APIs<br />

Einfache Web-Kartenanwendungen program<br />

mieren mit Google Maps, Open<br />

Streetmap und Open Layers.<br />

Novius OS ist ein junges CMS, hat aber bereits<br />

ein schickes Medienarchiv.<br />

n Gnome verbessert Eingabemethoden<br />

n Kernel 3.6 erschwert Symlink-Angriffe<br />

11 Zahlen & Trends<br />

n Freies Office: Leipzig, München, Freiburg<br />

n VIncent Utz leitet Open Suse Board<br />

Moderne Groupware-Suites integrieren<br />

Twitter, Facebook, Linked In und Xing.<br />

28 E-Commerce-APIs<br />

Die Webservices von Ebay und Amazon.<br />

Je ein Klick für Start und Ziel, schon berechnen<br />

die Javascript-Programme die Entfernung.<br />

36 APIs für Entwicklertools<br />

Mit eigenen Python-Skripten automatisieren<br />

Entwickler Webanwendungen wie<br />

Git, Github und OTRS.<br />

Studenten aufgepasst! Jetzt bewerben für<br />

den Univention-Absolven ten preis 2013<br />

16 Zacks Kernel-News<br />

n Einweg-IDs für Geräte<br />

n Langzeit-Support für Kernel 3.2<br />

Das neue PWM-Subsystem macht es leichter,<br />

Treiber für die Controller von ARM-Systemen<br />

wie Nvidias Tegra zu schreiben.<br />

Professioneller Einkaufen: Waren wirtschaft und<br />

Buchhaltung lassen sich an die APIs anbinden.<br />

DELUG-DVD<br />

Dank ihrer APIs lassen sich viele Entwicklerwerkzeuge<br />

bequem fernsteuern.<br />

Details zu DVD-<br />

TOOL<br />

Inhalten auf S. 41<br />

Ubuntu 12.04.1 Caine 3.0<br />

TOOL<br />

Für den Produktiveinsatz: Erste<br />

fehlerbereinigte LTS-Release<br />

TOOL<br />

Owncloud 4.5<br />

TOOL<br />

Mit neuen Features und nur im<br />

<strong>Linux</strong>-<strong>Magazin</strong>: Virtuelle Maschine<br />

mit der freien Dropbox-Alternative TOOL<br />

TOOL<br />

Spezial-<strong>Linux</strong> zum Entdecken<br />

von Rechnereinbrüchen<br />

O’Reilly Tech Feeds<br />

E-Book: „Cross- Site Scripting“<br />

Susecon-Keynotes<br />

Das Chamäleon-Jubiläum in Orlando


12/2012 12/2012<br />

Inhalt<br />

42 Sehen, hören, zeigen<br />

Ein Whiteboard für Vortragsfolien,<br />

Textchat, Desktopsharing, Sprachund<br />

Videoübertragung: Was moderne<br />

Konferenzsysteme leisten.<br />

56 Zugriff verwehrt<br />

Alien Vaults Security Information and<br />

Event Management (SIEM) verspricht,<br />

Angriffsversuche automatisch zu erkennen<br />

und integriert zahlreiche Tools.<br />

102 Papierbuch am Ende<br />

Automatisiert, mit Guillotine, Scanner<br />

und Perl-Skripten bewaffnet greift<br />

Perlmeister Schilli zum Äußersten und<br />

digitalisiert seine Bücher.<br />

www.linux-magazin.de<br />

5<br />

Software<br />

Sysadmin<br />

Hardware<br />

41<br />

Einführung<br />

Auf der DELUG-DVD: Caine, Ubuntu<br />

12.04.1, Owncloud und ein E-Book zu XSS.<br />

55 Einführung<br />

Aus dem Alltag eines Sysadmin: Charly<br />

spielt mit Gif-Animationen.<br />

80 Smart Watches<br />

Titel<br />

Smart Watches im Hack-Test: Hightech-<br />

Uhren unter <strong>Linux</strong> ansprechen.<br />

42 Bitparade<br />

Titel<br />

Drei Tools für Echtzeit-Vorlesungen und<br />

Konferenzen treten an zum Vergleich.<br />

56 OSSIM und Alienvault<br />

Sowohl die Appliance als auch die freie<br />

Variante des IDS offenbaren Schwächen.<br />

62 Cfengine 3.4<br />

Titel<br />

Von der kommerziellen Variante lernt<br />

das Konfigurationstool Posix-ACLs.<br />

Acht Uhren von Sony, Fossil, TI und I‘m Watch im<br />

Test. Die Metawatch gab es in zwei Varianten.<br />

Big Blue Button präsentiert einen übersichtlichen<br />

virtuellen Hörsaal im Browser.<br />

Know-how<br />

48 Tooltipps<br />

Diffimg, LPVS, Profanity, Squid-Analyzer,<br />

Taskwarrior und Xc im Kurztest.<br />

52 Planen nach Kanban-Prinzip<br />

Titel<br />

Leichtgewichtiges Open-Source-Projektmanagement<br />

mit Rike.<br />

Auch Rikes Weboberfläche kann überzeugen.<br />

Service<br />

3 Editorial<br />

107 Stellenanzeigen<br />

108 IT-Profimarkt<br />

112 Veranstaltungen<br />

112 Inserenten<br />

113 Impressum<br />

114 <strong>Vorschau</strong><br />

Jede Menge Snippets und Ideen für Cfengine<br />

bietet das Design Center.<br />

Forum<br />

65 Bücher<br />

Bücher über HTML-5-<br />

Apps sowie Computer<br />

Vision mit Python.<br />

66 20 Jahre Suse<br />

Von der Susecon in Orlando, Florida: Wie<br />

Suse Amerika erobern will.<br />

69 Leserbriefe<br />

Auf den Punkt gebracht.<br />

70 Recht<br />

Nutzungsbedingungen von Web-APIs.<br />

74 Reusing in der Praxis<br />

Wie Firmen Code wiederverwenden.<br />

88 Kern-Technik 65<br />

Titel<br />

Reale, virtuelle, Pseudo-, Controllingund<br />

eigene Terminals.<br />

Programmieren<br />

92 Bash Bashing – Folge 23<br />

Shellskripte aus der Stümper-Liga -<br />

Folge 23: Dash statt Bash.<br />

96 C++11 – Folge 7<br />

Modernes C++ in der Praxis: Move.<br />

102 Perl-Snapshot<br />

Bücher scannen und in Google Drive<br />

speichern.<br />

Ein Teppichmesser schneidet ritsch-ratsch<br />

den Buchdeckel ab.


Aktuell<br />

www.linux-magazin.de News 12/2012<br />

6<br />

News<br />

Gnublin-DIP: <strong>Linux</strong>-Server in IC-Größe<br />

Die Embedded Projects GmbH<br />

aus Augsburg bietet einen Mini-<strong>Linux</strong>-Server<br />

in der Größe<br />

eines IC-Bausteins an. Das<br />

ARM9-System mit 180 MHz<br />

und 32 MByte RAM lässt sich<br />

wie ein Standard-DIP-40-Gehäuse<br />

(8,3 mal 54 Millimeter)<br />

verbauen. Die Pins bieten die<br />

folgenden Anschlüsse und<br />

<strong>Schnittstellen</strong>: fünfmal GPIO,<br />

viermal AD-Wandler (10 Bit)<br />

sowie PWM, I 2 C, SPI, UART<br />

und USB. Unter der Platine<br />

hat außerdem ein Micro-SD-<br />

Kartenslot Platz gefunden.<br />

Der Rechner nimmt bei 5 Volt<br />

50 bis 70 Milliampere auf.<br />

Der Hersteller liefert den Server<br />

mit vorinstalliertem GNU​<br />

<strong>Linux</strong> (Kernel 2.6.33) aus, es<br />

laufen SSH und HTTP(S). Optional<br />

gibt es weitere Dienste<br />

wie FTP oder Samba, außerdem<br />

bietet Embedded Projects<br />

ein passendes Softwarearchiv.<br />

Der Winzling eignet sich beispielsweise<br />

für die Heimautomatisierung,<br />

auch kann er<br />

einen klassischen Mikrocontroller<br />

ersetzen.<br />

Das Gnublin-DIP-Modul ist<br />

zum Stückpreis von rund<br />

35 Euro unter [http://​shop.​<br />

​embedded‐projects.​net] erhältlich,<br />

ab einer Bestellmenge<br />

von zehn Stück gibt es Rabatt.<br />

Ein Evaluation-Kit mit<br />

zwei DIP-Modulen und einer<br />

CD mit allen Unterlagen und<br />

Quelltexten ist für rund 100<br />

Euro im Angebot. n<br />

Das Gnublin-DIP packt einen ganzen Embedded-<strong>Linux</strong>-Server ins IC-Format. An<br />

der Unterseite befindet sich der Micro-SD-Kartenslot.<br />

Lancom LSM überwacht große Netzwerke<br />

Word-Leser<br />

Lancom, Hersteller von Netzwerklösungen,<br />

bietet ein<br />

neues System für die Überwachung<br />

mittlerer und großer<br />

Netze an. Der Large Scale Monitor<br />

(LSM) setzt auf Open-<br />

Source-Komponenten und<br />

läuft unter <strong>Linux</strong>.<br />

Das Monitoringsystem eignet<br />

sich laut Lancom für die<br />

Überwachung von 25 bis<br />

1000 Geräten wie WLAN-<br />

Accesspoints, Switches und<br />

Router. Als Benutzerschnittstelle<br />

dient eine Weboberfläche,<br />

die auch für Mobilgeräte<br />

passen soll. Daneben kann die<br />

Software Administratoren per<br />

E-Mail benachrichtigen, die<br />

Auslöser für die Meldungen<br />

sind konfigurierbar.<br />

Die Netzwerkgeräte samt<br />

Status stellt LSM übersichtlich<br />

auf einer Gebäudekarte<br />

oder in einer Ordner- oder<br />

Topologie-Struktur dar. Das<br />

Monitoringsystem kennt außerdem<br />

die Roaming-Historie<br />

für WLAN-Clients an Accesspoints<br />

des Herstellers. Das ist<br />

beispielsweise für Logistikunternehmen<br />

interessant, die<br />

etwa einen Gabelstapler auf<br />

dem Weg durch das Lager verfolgen<br />

möchten.<br />

Außerdem beherrscht LSM<br />

Benutzer-, Rollen- und Rechteverwaltung<br />

und überwacht<br />

auch VPN-Verbindungen. Weitere<br />

Informationen gibt es unter<br />

[http://​www.​lancom‐systems.​<br />

​de]. Ein kurzes Video sowie<br />

eine Demo-Installation vermitteln<br />

einen Eindruck des<br />

Systems. Lancom LSM ist in<br />

verschiedenen Paketierungen<br />

sowie als bootfähige <strong>Linux</strong>-<br />

DVD und als VMware-Image<br />

erhältlich. Die Preise beginnen<br />

bei rund 2800 Euro für 25<br />

überwachte Geräte.<br />

Eine Kernkomponente von<br />

LSM ist das Nagios-Addon<br />

Check_mk, wie dessen Autor<br />

Mathias Kettner dem<br />

<strong>Linux</strong>-<strong>Magazin</strong> mitteilte. Viele<br />

der neuen Features, die die<br />

Open-Source-Software in den<br />

vergangenen anderthalb Jahren<br />

gewonnen habe, seien das<br />

Resultat der Entwicklung für<br />

Lancom, lässt der selbstständige<br />

Informatiker wissen. n<br />

Die Lesesoftware „FBReader for<br />

Android“ (vormals FBReaderJ)<br />

ist in Version 1.6.1 erhältlich.<br />

Erstmals kann sie »*.doc«-<br />

Dateien von Microsoft Word<br />

anzeigen. Daneben haben die<br />

Entwickler die Performance<br />

beim Einlesen der Bibliothek<br />

verbessert und ein Problem<br />

mit Buchduplikaten behoben.<br />

Auch gibt es neue Lokalisierungen<br />

für Norwegisch, Serbisch<br />

und Türkisch.<br />

Das Java-Programm für zahlreiche<br />

Android-Versionen ist<br />

unter GPLv2 oder neuer lizenziert.<br />

Weitere Informationen,<br />

der Quelltext sowie ein Download-Link<br />

für die kostenlose<br />

App finden sich unter [http://​<br />

​www.​fbreader.​org/​FBReaderJ]. n


Kernel 3.6 erschwert Symlink-Angriffe<br />

Der neue stabile <strong>Linux</strong>-Kernel<br />

3.6 beschränkt das Anlegen<br />

von harten und symbolischen<br />

Links und behebt damit eine<br />

ganze Klasse von Sicherheitslücken.<br />

Diese Schwächen<br />

treten auf, wenn ein normaler<br />

Anwender einen symbolischen<br />

Link auf eine Datei<br />

legt, in die er nicht schreiben<br />

darf. Handelt es sich um eine<br />

Systemdatei oder eine temporäre<br />

in »/tmp«, kann es<br />

vorkommen, dass ein Rootprozess<br />

dem Link folgt und<br />

die gewünschte Änderung an<br />

der Datei für einen Angreifer<br />

ausführt.<br />

Um das zu verhindern, folgt<br />

<strong>Linux</strong> 3.6 solchen Links nicht<br />

mehr, wenn sie sich in einem<br />

Verzeichnis wie »/tmp« befinden,<br />

das für alle Benutzer<br />

beschreibbar ist und Berechtigungen<br />

per Sticky-Bit vererbt.<br />

Daneben muss die UID des<br />

Links gleich der des Prozesses<br />

sein oder derselbe Benutzer<br />

Link und Zieldatei besitzen.<br />

Hardlinks darf nur anlegen,<br />

Webconverger, eine <strong>Linux</strong>-<br />

Distribution für den Betrieb<br />

von Webkiosken, ist in Version<br />

15 mit neuen Features<br />

erhältlich. Die neue Release<br />

aktualisiert den Firefox-Browser<br />

auf Version 15.0.1 und repariert<br />

Probleme mit der PDF-<br />

Unterstützung und dem Drucken.<br />

Daneben eignet sich die<br />

Distribution nun auch wieder<br />

für ältere Rechner der i486-<br />

Architektur.<br />

Stolz sind die Entwickler auf<br />

ihren neuen Update-/​Upgrade-<br />

Mechanismus. Dieser benutzt<br />

das Versionskontrollsystem<br />

wer auch der Eigentümer der<br />

Zieldatei ist.<br />

Damit beugt der jüngste <strong>Linux</strong>-Kernel<br />

Sicherheitslücken<br />

des Typs „Time of Check to<br />

Time of Use“ vor, insbesondere<br />

der Symlink-Schwachstelle.<br />

Die Diskussion über solche<br />

Vorkehrungen sei alt, es habe<br />

sie bereits im Jahr 1996 gegeben,<br />

schreibt der Entwickler<br />

Kees Cook in seiner Commit-<br />

Nachricht. Die jetzt für das <strong>Linux</strong>-VFS<br />

gewählte Implementierung<br />

stammt von der Distribution<br />

Openwall und dem<br />

Patchset Grsecurity. Daneben<br />

hat der Kernelentwickler Al<br />

Viro noch einige Anregungen<br />

gegeben.<br />

Distributionen wie Openwall<br />

sowie Ubuntu oder Chrome<br />

OS benutzen bereits länger<br />

derartige Link-Beschränkungen.<br />

Diese können zwar Probleme<br />

mit dem At-Daemon<br />

verursachen, die sich aber<br />

beheben lassen, wie das beispielsweise<br />

Ubuntu mit einem<br />

At-Patch getan hat. n<br />

Webconverger 15 aktualisiert sich per Git<br />

Git, um das Dateisystem bei<br />

jedem Booten automatisch<br />

aus dem Internet zu aktualisieren.<br />

Das funktioniert selbstverständlich<br />

nur bei der auf<br />

Festplatte oder USB-Speicher<br />

installierten Version, nicht<br />

beim Livebetrieb von CD.<br />

Git macht auch Rollbacks<br />

möglich, um neu erkannte<br />

Bugs zu beheben. Das Update-<br />

Feature lässt sich auf Wunsch<br />

deaktivieren. Weitere Informationen<br />

gibt es unter [http://​<br />

​webconverger.​org], wo auch das<br />

neue ISO-Image zum Download<br />

bereitsteht.<br />

n<br />

Firefox 16 mit Apps und Kommandozeile<br />

Mozilla hat seinen Open-Source-Browser<br />

Firefox in Version<br />

16 freigegeben. Die neue Release<br />

führt Mozillas Konzept<br />

für Webapps ein: eigenständige<br />

Anwendungen, die mit<br />

Webtechnologien gebaut sind<br />

und online oder offline arbeiten.<br />

Firefox-Anwender können<br />

sie vom Mozilla Marketplace<br />

oder einer beliebigen Website<br />

installieren.<br />

Interessant für Entwickler ist<br />

die neue Firefox-Kommandozeile.<br />

Sie soll den Programmierer<br />

beim Debuggen und<br />

Verbessern von Webanwendungen<br />

unterstützen. Daneben<br />

lassen sich CSS-3-Features<br />

wie Animationen, Übergänge<br />

Neues CMS: Novius OS<br />

Mit Versionsnummer 0.1<br />

stellt sich ein neues Contentmanagement-System<br />

(CMS)<br />

namens Novius OS vor. Die<br />

Vision der Entwickler ist eine<br />

zentrale Verwaltungsstelle für<br />

alle Online-Inhalte. Version<br />

0.1 publiziert statische Seiten<br />

und Blogeinträge, daneben<br />

schickt sie Postings auch an<br />

Twitter und Facebook. HTML<br />

5 und Jquery sorgen für eine<br />

reaktionsfreudige Oberfläche,<br />

die sich beispielsweise beim<br />

und Transformationen nun<br />

ohne Präfix schreiben.<br />

Den Anwendern verspricht<br />

Firefox 16 fließendere Bedienung,<br />

denn dank inkrementeller<br />

Garbage Collection soll<br />

Javascript schneller laufen,<br />

was besonders Animationen<br />

und Spielen zugutekommen<br />

soll. Den neuen Audio-Codec<br />

Opus (siehe „Zahlen und<br />

Trends“) unterstützt Firefox<br />

16 von Haus aus.<br />

Firefox ist mittlerweile in<br />

über 70 Sprachen übersetzt,<br />

zwei kamen jetzt noch dazu.<br />

Version 16 steht für <strong>Linux</strong>,<br />

Windows und Mac OS X zum<br />

Download unter [http://​www.​<br />

​mozilla.​org/​firefox/] bereit. n<br />

Durchstöbern des Medienarchivs<br />

bewährt.<br />

Der noch bescheidene Funktionsumfang<br />

soll wachsen,<br />

die Roadmap sieht monatliche<br />

Releases vor. Novius OS<br />

verwendet PHP, MySQL und<br />

Fuel PHP. Hinter dem Projekt<br />

steht die französische Firma<br />

Novius, die den Code unter<br />

AGPLv3 veröffentlicht. Informationen<br />

sowie Dateien zum<br />

Download gibt es unter [http://​<br />

​www.​novius‐os.​org].<br />

n<br />

Novius OS ist ein junges CMS, hat aber bereits ein schickes Medienarchiv.<br />

News 12/2012<br />

Aktuell<br />

www.linux-magazin.de<br />

7


Aktuell<br />

www.linux-magazin.de News 12/2012<br />

8<br />

Sogo 2.0 integriert Open Change<br />

Das Sogo-Projekt (Scalable<br />

Open Groupware) hat Version<br />

2.0 seiner freien Groupware<br />

veröffentlicht. Das auf<br />

Open Groupware aufbauende<br />

Sogo integriert die freien<br />

Exchange-Bibliotheken von<br />

Open Change, um Outlook-<br />

Clients einzubinden. Mit einer<br />

Kombination aus MAPI, Samba<br />

4, LDAP, SQL und einem<br />

Webserver bietet das Projekt<br />

neben Windows-Unterstützung<br />

und Active-Directory-<br />

Integration auch erweiterten<br />

Support für das auf Apples<br />

Rechnern verbreitete Caldav-<br />

Protokoll. Als funktionierende<br />

Clients geben die Entwickler<br />

jetzt Mozilla Thunderbird und<br />

Lightning, Microsoft Outlook<br />

(2003, 2007, 2010), Apple I-Cal<br />

und RIMs Blackberry an. Ein<br />

Ajax-Webclient steht ebenfalls<br />

zur Verfügung.<br />

Ein Howto beschreibt die Integration<br />

mit Outlook sowie mit<br />

einem externen LDAP-Server<br />

oder Microsofts Active Directory,<br />

alternativ dank Samba<br />

4 auch ohne separaten Verzeichnisdienst.<br />

Zum Download gibt es unter<br />

[http://​www.​sogo.​nu] Sourcecode,<br />

RPMs und Debian-Pakete<br />

sowie einen Funambol-<br />

Konnektor für Sync ML und<br />

ein eigenes Webmin-Modul.<br />

Der Ajax-Webclient von Sogo 2.0 in der Kalenderansicht.<br />

Daneben haben die Entwickler<br />

zahlreiche Bugs gefixt,<br />

Übersetzungen aktualisiert,<br />

Kalender, Aufgaben und Ansichten<br />

verbessert sowie die<br />

Darstellung des Webclients in<br />

Microsofts Internet Explorer 8<br />

und 9 optimiert.<br />

n<br />

Gnome 3.6 verbessert Eingabemethoden und Barrierefreiheit<br />

Slackware 14.0<br />

Das Gnome-Projekt hat Version<br />

3.6 seiner freien Desktopumgebung<br />

veröffentlicht.<br />

Die Software hat Verbesserungen<br />

in vielen Details erfahren.<br />

Dazu gehören das überarbeitete<br />

Message Tray, kleinere<br />

Benachrichtigungsfenster mit<br />

Button zum Schließen sowie<br />

eine Bildschirmsperre mit<br />

Komfortfunktionen. Sie gewährt<br />

trotz Sperrung Zugriff<br />

auf den Lautstärkeregler und<br />

zeigt Benachrichtigungen<br />

an. Die Integration mehrerer<br />

Eingabemethoden hilft unter<br />

anderem beim Schreiben von<br />

chinesischen und japanischen<br />

Zeichen.<br />

Auch bei den Technologien<br />

für die Barrierefreiheit gibt<br />

es Fortschritte: Bei der Bildschirmlupe<br />

lassen sich inverse<br />

Darstellung, Graustufen sowie<br />

Helligkeit und Kontrast einstellen,<br />

der Screenreader Orca<br />

Überarbeitet: Das Message Tray in Gnome 3.6 überdeckt die Bildschirminhalte<br />

nicht mehr, sondern verschiebt sie nach oben.<br />

hat seine Braille-Ausgabe verbessert.<br />

Die Hilfstechnologien<br />

stehen nun standardmäßig<br />

bereit, der Anwender braucht<br />

sie nur mit einem Klick zu<br />

aktivieren.<br />

Erstmals zum Lieferumfang<br />

gehört das Programm Gnome<br />

Boxes. Die GUI-Anwendung<br />

zum Verwalten virtueller Maschinen<br />

bietet verbesserte Suche,<br />

Auswahl und Umbenennen<br />

und kann zudem hängen<br />

gebliebene Instanzen zum<br />

Shutdown zwingen.<br />

Die neue Release verwendet<br />

das GUI-Toolkit GTK+ in Version<br />

3.6, die drei neue Widgets<br />

mitbringt. Daneben erfuhr die<br />

Szenengraph-Bibliothek ein<br />

Update auf Version 1.12 und<br />

Glib trägt die Nummer 2.34.<br />

Gnome ist unter GPL und LG-<br />

PL lizenziert. Version 3.6 ist<br />

im Quellcode, in Binärpaketen<br />

und als Livedistribution<br />

unter [http://​www.​gnome.​org/​<br />

​getting‐gnome/] erhältlich. n<br />

Die <strong>Linux</strong>-Distribution Slackware<br />

ist in Version 14.0 verfügbar.<br />

Sie steigt auf einen<br />

Kernel aus dem Zweig 3 um,<br />

genauer auf Version 3.2.29,<br />

für die die Kernelentwickler<br />

mindestens zwei weitere Jahre<br />

Support leisten. Für die jüngeren<br />

Kernelversion 3.4.11, 3.5.4<br />

und 3.6-rc4 liefert Slackware<br />

Konfigurationsdateien mit.<br />

Daneben gehören GCC 4.7.1,<br />

Glibc 2.15 und X11R7.7 zum<br />

System. Erstmals ist LLVM/​<br />

Clang als alternativer Compiler<br />

mit von der Partie. Als<br />

Desktopumgebungen stehen<br />

KDE 4.8.5 und Xfce 4.10.0 zur<br />

Verfügung. Unter den Anwendungen<br />

finden sich Firefox<br />

15.0.1, Thunderbird 15.0.1<br />

und Gimp 2.8.2.<br />

Weitere Einzelheiten verrät<br />

der Chefentwickler Patrick<br />

Volkerding unter [http://​www.​<br />

​slackware.​com], wo auch ISO-<br />

Images der neuen Version bereitstehen.<br />

n


Xen 4.2 unterstützt größere Systeme<br />

Nach rund anderthalbjähriger<br />

Entwicklungszeit ist die<br />

Virtualisierungssoftware Xen<br />

in Version 4.2 erschienen.<br />

Nachdem die Entwickler die<br />

zugrunde liegende Bibliothek<br />

Libxl generalüberholt haben,<br />

löst nun das Kommando<br />

»xl« das vorherige »xend« als<br />

hauptsächlicher Toolstack für<br />

die Verwaltung ab.<br />

Außerdem unterstützt Xen<br />

jetzt wesentlich größere Systeme<br />

mit bis zu 4095 Host-<br />

CPUs und bis zu 512 Gast-<br />

CPUs. Zudem ist es möglich,<br />

automatisch einen CPU-Pool<br />

pro Numa-Node zu bilden<br />

und die VCPUs intelligenter<br />

auf vorhandene Numa-Nodes<br />

zu verteilen. Xen 4.2 unterstützt<br />

nun auch bis zu 5 TByte<br />

Host Memory auf 64-Bit-Plattformen.<br />

Das XSM-Framework hat Verbesserungen<br />

bei Sicherheitsfunktionen<br />

erfahren durch eine<br />

Implementierung des Flux<br />

Advanced Security Kernel<br />

(Flask). Die Performance hat<br />

Xen weiter gesteigert, unter<br />

anderem durch Verbesserungen<br />

beim Paging und beim<br />

Scheduler. Weitere Informationen<br />

sowie den Quelltext gibt<br />

es unter [http://​www.​xen.​org]. n<br />

primeLine<br />

SOLUTIONS<br />

News 12/2012<br />

Aktuell<br />

Ideal für Firewall<br />

oder Monitoring<br />

Anwendungen<br />

wie IPCop & Nagios<br />

www.linux-magazin.de<br />

9<br />

Backdoor in PHP-Myadmin-Download<br />

Ein Download-Mirror des<br />

Sourceforge-Netzwerks hat<br />

Ende September die Software<br />

PHP Myadmin in einer mit einer<br />

Backdoor versehenen Version<br />

verteilt. Es handelt sich<br />

dabei um die Datei »phpMy-<br />

Admin‐3.5.2.2‐all‐languages.<br />

zip«, die rund 400 Benutzer<br />

zwischen dem 22. und 25.<br />

September heruntergeladen<br />

haben.<br />

Der betroffene Server steht<br />

in Korea und hat den Hostnamen<br />

»cdnetworks‐kr‐1«,<br />

Sourceforge hat ihn aus dem<br />

Mirror-Netzwerk entfernt. Die<br />

kompromittierte Version der<br />

Software enthält in der Datei<br />

»server_sync.php« zusätzlichen<br />

PHP-Code, der HTTP-<br />

Post-Daten evaluiert und eine<br />

Installation damit von außen<br />

angreifbar macht.<br />

Das Security-Team des Projekts<br />

stuft die Sicherheitslücke<br />

als kritisch ein. Es empfiehlt<br />

allen Anwendern ihre Installationen<br />

zu überprüfen und<br />

bei Zweifeln neu aus einer<br />

vertrauenswürdigen Quelle<br />

zu installieren.<br />

n<br />

Mod_pagespeed ist einsatzbereit<br />

egino s-Series 13041s-C204<br />

X 1 HE Rackmount Chassis, 4x 2,5“ Hot-Plug Einschub<br />

X 330 Watt High Efficiency (80 Plus Gold) Power Supply<br />

X 1x Intel ® Xeon ® E3-1220V2 Prozessor mit 3.1 GHz<br />

X 8 GB DDR3 1333 MHz ECC unbuffered RAM (max. 32 GB)<br />

X 4x Intel ® 8254L Gbit Ethernet, IPMI 2.0 dedicated LAN<br />

X 1x PCIe 2.0 (x16) über Riser, z.B. für zusätzliche I/O Karte<br />

X 2x 120 GB Intel ® MLC SSD, 500 MB/s read, 480 MB/s write<br />

X RAID Controller optional, Teleskopschienen inklusive<br />

X 3 Jahre Garantie inkl. Komponenten Vorabaustausch<br />

Best-Nr.: 206175<br />

790, 00 €<br />

zzgl. MwSt. und Versand<br />

940, 10 €<br />

inkl. MwSt. zzgl. Versand<br />

Mod_pagespeed, ein Optimierungsmodul<br />

für Apache-Webserver,<br />

steht in stabiler Version<br />

auf [https://​developers.​google.​<br />

​com/​speed/​pagespeed/] zum<br />

Download bereit. Google und<br />

verschiedene US-Hoster haben<br />

das Modul zum Verschlanken<br />

von HTML, CSS,<br />

Javascript und Bildern inzwischen<br />

auf rund 120 000 Websites<br />

getestet. Die Software<br />

liegt als Deb- oder RPM-Paket<br />

sowie im Quellcode vor. n<br />

Intel, das Intel Logo, Xeon, und Xeon Inside sind Marken der Intel Corporation in den USA und anderen Ländern.<br />

Ihr zuverlässiger Server Lieferant für Datacenter,<br />

öffentliche Einrichtungen, Systemhäuser & Reseller.<br />

primeLine Solutions GmbH<br />

Dornenbreite 18a · 32549 Bad Oeynhausen<br />

Tel.: +49 5731 8694-0 · Fax: +49 5731 8694-413<br />

E-Mail: vertrieb@primeline.org<br />

Web: www.primeline-solutions.de<br />

E<br />

EGINO SERVER


Aktuell<br />

www.linux-magazin.de News 12/2012<br />

10<br />

Kurznachrichten<br />

Junkie the Sniffer 2.3: Das Open-Source-Programm dient zur Echtzeit-<br />

Analyse von Netzwerkverkehr. Neu: Ein neues Plugin zeigt die Verteilung<br />

der Paketgrößen, ein zweites das zeitliche Auftreten von Duplikaten. Für<br />

einige Protokolle wie HTTP, SIP, MGCP und FTP gibt es nun Autodiscovery.<br />

Lizenz: AGPLv3 [https://​github.​com/​securactive/​junkie]<br />

Phorkie 0.3.1: Die Pastebin für Codeschnipsel ist in PHP umgesetzt. Neu:<br />

Forken von Pastes aus externen Systemen wie Gitorious, Git PHP sowie<br />

Gist.github.com. Anmeldung per Open ID. Lizenz: AGPLv3 [http://​<br />

​sourceforge.​net/​p/​phorkie/​wiki/​Home/]<br />

Debian 6.0.6: Die freie <strong>Linux</strong>-Distribution ist für ihr enormes Paketarchiv<br />

bekannt. Neu: Wartungsrelease für den stabilen Zweig Squeeze mit zahlreichen<br />

Sicherheitsupdates. Lizenz: GPL und andere [http://​www.​debian.​<br />

​org/​mirror/​list]<br />

Chicken Scheme 6.0.6: Die Scheme-Implementierung für <strong>Linux</strong>, Windows<br />

und Mac OS X setzt einen Großteil der Spezifikation R5RS um und erzeugt<br />

C-Code. Neu: Der Compiler dokumentiert seine Optimierungen nun in<br />

C-Kommentaren, das Modulsystem erweitert sich um Interfaces und Functors.<br />

Lizenz: BSD [http://​www.​call‐cc.​org]<br />

Spek 0.8: Der Software-Spektrumanalysator untersucht zahlreiche Audioformate<br />

wie etwa Wav, MP3 und Flac. Neu: Die Entwickler haben das<br />

bisher verwendete GUI-Toolkit GTK+ durch Wx Widgets ersetzt. Daneben<br />

darf der Anwender nun die spektrale Leistungsdichte einstellen. Lizenz:<br />

GPLv3 [http://​spek‐project.​org]<br />

Gstreamer 1.0.0: Das Multimedia-Framework kommt in der Desktopumgebung<br />

Gnome und anderswo zum Einsatz. Neu: Bereinigtes API sowie<br />

Unterstützung für Gobject Introspection. Flexiblere Speicherverwaltung,<br />

die unter anderem für bessere Performance auf ARM-Boards wie dem<br />

Raspberry Pi oder dem Pandaboard sorgen soll. Lizenz: LGPLv2 [http://​<br />

​gstreamer.​freedesktop.​org]<br />

GNU Libextractor 1.0.0: Die Bibliothek liest die Metadaten von Dateien,<br />

um deren Dateityp zu ermitteln. Neu: Der Plugin-Mechanismus lässt alle<br />

Plugins in einem eigenen Prozess mit vollem Zugriff auf die untersuchte<br />

Datei laufen. Daneben verwenden viele Plugins nun externe Bibliotheken<br />

wie etwa Libtiff und Libmagic. Lizenz: GPLv3 [http://​www.​gnu.​org/​<br />

​software/​libextractor/]<br />

Slkbuild 0.9: Das Skript baut Slackware-Pakete aus Quellcode und lehnt<br />

sich stark an Makepkg von Arch <strong>Linux</strong> an. Neu: Fertige Vorlagen für Softwarepakete,<br />

die Gconf oder Mateconf verwenden. Daneben löscht das<br />

Skript Reste von Dateien, deren Download gescheitert ist. Lizenz: GPLv2<br />

[http://​slkbuild.​sourceforge.​net]<br />

Parted Magic 2012_09_12: Die Live-CD zum Bearbeiten von Partitionen<br />

steht für i486 und x86_64 zur Verfügung. Neu: Version 0.13.1-git des Tools<br />

Gparted, die einige LVM-Features beherrscht. Dazu gehören das Anlegen,<br />

Prüfen, Vergrößern, Verschieben und auch das Löschen physischer Volumes.<br />

Daneben kann das Programm nun Volume Groups aktivieren und<br />

deaktivieren. Lizenz: GPL und andere [http://​partedmagic.​com]<br />

Monitorix 2.6.0 überwacht Bind<br />

Cinnamon 1.6<br />

Python 3.3.0 veröffentlicht<br />

Python ist in Version 3.3.0 erhältlich,<br />

die ein rundes Dutzend<br />

Python Enhancement<br />

Proposals (PEP) umsetzt.<br />

Dazu gehören Virtual Environments<br />

(PEP 405), Namespace<br />

Packages (PEP 420),<br />

flexible Repräsentation von<br />

Unicode-Zeichenketten (PEP<br />

Monitorix, eine Open-Source-<br />

Lösung zum Überwachen von<br />

Systemdaten und Diensten,<br />

trägt jetzt die Versionsnummer<br />

2.6.0. Erstmals kann die Software<br />

auch Bind-Nameserver<br />

(ab Version 9.5) überwachen.<br />

Die Anzeige dafür enthält sieben<br />

Graphen, etwa für einund<br />

ausgehende Anfragen<br />

und den Speicherbedarf.<br />

Eine Überarbeitung haben die<br />

Kurven für Festplatten und<br />

Dateisysteme erfahren, seither<br />

können sie eine beliebige<br />

Anzahl von überwachten<br />

Elementen aufnehmen. Für<br />

Debian und Ubuntu gibt es ein<br />

neues Init-Skript, zum ersten<br />

Mal eignet sich die Software<br />

auch für das Betriebssystem<br />

Net BSD.<br />

Monitorix ist in Perl geschrieben<br />

und besteht aus einem<br />

Daemon sowie einem CGI-<br />

Skript für die Weboberfläche.<br />

Das Tool überwacht Systemdaten<br />

wie Speicher, Prozesse,<br />

Temperatur und Netzwerk-<br />

Traffic sowie Dienste wie<br />

SSH, Samba, IMAP, POP3,<br />

verschiedene Webserver und<br />

MySQL.<br />

Weitere Informationen gibt<br />

die Homepage [http://​www.​<br />

​monitorix.​org]. Dort findet sich<br />

Version 2.6.0 als Quelltext-<br />

Tarball sowie in Paketen für<br />

Red-Hat-basierte Distributionen,<br />

als Gentoo-Ebuild und<br />

als BSD-Port. Die Software ist<br />

unter GPLv2 lizenziert. n<br />

393) sowie ein Python Launcher<br />

für Windows (PEP 397).<br />

Die Python-Syntax erhält den<br />

neuen Ausdruck »yield from«<br />

zur Generator-Delegation.<br />

Daneben ist für String-Objekte<br />

die U-Notation für Unicode<br />

wieder erlaubt. Neue<br />

Bibliotheksmodule ermöglichen<br />

LZMA-Komprimierung<br />

(»lzma«), liefern High-Level-<br />

Objekte für IP-Adressen und<br />

Netzmasken (»ipadress«) oder<br />

Mock-Objekte für Unit-Tests<br />

(»unittest.mock«). Ausführliche<br />

Informationen gibt es auf<br />

der offiziellen Website [http://​<br />

​www.​python.​org]. <br />

n<br />

Cinnamon, eine alternative<br />

Desktopumgebung auf Basis<br />

von Gnome, ist in Version 1.6<br />

verfügbar. Die neue Release<br />

enthält erstmals die Eigenentwicklung<br />

Nemo, die den<br />

Gnome-Dateimanager Nautilus<br />

ersetzt.<br />

Der Anwender kann außerdem<br />

seinen selbst definierten<br />

Workspaces Namen geben.<br />

Ein neues Applet namens<br />

Window Quick-List zeigt alle<br />

Fenster aller Workspaces<br />

in einer Übersicht. Daneben<br />

lässt sich nun der Umschalter<br />

zwischen den Fenstern<br />

konfigurieren, der sich mit<br />

[Alt]+[Tab] aufrufen lässt.<br />

Auf Wunsch zeigt er Icons,<br />

Thumbnails, <strong>Vorschau</strong>en oder<br />

eine Kombination.<br />

Cinnamon steht unter GPLv2,<br />

der aktuelle Quelltext ist unter<br />

[https://​github.​com/​linuxmint/​<br />

​Cinnamon] zu haben. Näheres<br />

zu Nemo zeigt [http://​cinnamon.​<br />

​linuxmint.​com/​?​p=198]. (ake/jcb/​<br />

kki/​mfe/​mhu) <br />

n


Zahlen & Trends<br />

Zahlen & Trends 12/2012<br />

Aktuell<br />

Open Office für Leipzig, Libre Office für München<br />

www.linux-magazin.de<br />

11<br />

Eine feste Größe im Jahr der<br />

Libre-Office-Anwender und<br />

‐Entwickler soll das Libre-Office-Hackfest<br />

werden, das die<br />

Document Foundation und<br />

das Libre-Office-Team Ende<br />

November in München veranstalten.<br />

Auch Mitglieder der<br />

Debian-Community sind mit<br />

von der Partie und machen<br />

Jagd auf Bugs.<br />

Wie bereits im Vorfeld bekannt<br />

wurde, wird der Gastgeber Limux<br />

(Münchens <strong>Linux</strong>-Projekt)<br />

dabei mit gutem Beispiel<br />

vorangehen und offiziell den<br />

nächsten Umstieg verkünden:<br />

Die bayerische Landeshauptstadt<br />

stellt nach Jahren des<br />

Open-Office-Einsatzes auf<br />

Libre Office um.<br />

Außerdem meldet das Limux-<br />

Blog, dass sich die Stadtverwaltung<br />

Leipzig endgültig für<br />

den Umstieg auf Open Office<br />

entschieden und bereits mit<br />

der Migration begonnen habe.<br />

Innerhalb nur weniger Monate<br />

wurden dort mehr als 90 Prozent<br />

der Desktops auf Open<br />

Office migriert. Seit den ersten<br />

Ankündigungen im Frühjahr<br />

2012 hat die Verwaltung der<br />

sächsischen 500 000-Einwohner-Stadt<br />

bereits auf 3900 der<br />

4200 Desktoprechner Open<br />

Office installiert und nutzt es<br />

jetzt als Standard für Bürosoftware.<br />

Bei einem Besuch in der bayerischen<br />

Landeshauptstadt<br />

trafen sich im Oktober die<br />

Verantwortlichen der beiden<br />

Kommunen zum Erfahrungsaustausch.<br />

Kirsten Böge, Leiterin<br />

Kommunikation beim<br />

Projekt Limux, zitiert unter<br />

[http://www.it-muenchen-blog.de]<br />

den IT-Koordinator der Stadt<br />

Leipzig, Hannes Kästner, mit<br />

den Worten: „Das ist das erste<br />

große Open-Source-Projekt in<br />

der Stadtverwaltung Leipzig.“<br />

Ziel sei es, die Abhängigkeit<br />

von proprietärer Software zu<br />

verringern.<br />

n<br />

Vincent Untz leitet Open Suse Board<br />

Pre-Bootloader für Secure Boot<br />

Das Unternehmen Suse hat<br />

den Open-Source-Entwickler<br />

Vincent Untz zum Vorsitzenden<br />

des Open Suse Board ernannt.<br />

Der Suse-Angestellte<br />

ist durch seine Arbeit an der<br />

Desktopumgebung Gnome bekannt<br />

und hat als Vorsitzender<br />

der Gnome Foundation bereits<br />

Leitungserfahrung gesammelt.<br />

Nach seinem Engagement für<br />

den freien Desktop arbeitet er<br />

seit Juni 2012 für Suse an der<br />

Cloud-Computing-Architektur<br />

Open Stack.<br />

Ralf Flaxa, Suses VP Engineering,<br />

begründet die Entscheidung<br />

für Untz: „Wir haben jemanden<br />

gesucht, dem sowohl<br />

[das Unternehmen] Suse wie<br />

auch die Community Respekt<br />

und Vertrauen entgegenbringen.“<br />

Die Aufgabe des Open<br />

Suse Board ist es, als zentrale<br />

Kontaktstelle zum Projekt<br />

zu dienen, die Interessen der<br />

Community an den Sponsor<br />

Suse zu übermitteln, den Entscheidungsprozess<br />

zu unterstützen<br />

und bei Konflikten<br />

zu vermitteln. Informationen<br />

über das Gremium gibt es<br />

unter [http://​de.​opensuse.​org/​<br />

​openSUSE:Rat].<br />

n<br />

Vincent Untz, der neue Vorsitzende<br />

des Open Suse Board, zeigt sein von<br />

vielen Open-Source-Konferenzen<br />

bekanntes Gesicht.<br />

© Frédéric Crozat<br />

Um das Secure-Boot-Problem<br />

auf für Windows 8 zertifizierten<br />

Rechnern zu lösen, will<br />

die <strong>Linux</strong> Foundation von<br />

Microsoft einen Schlüssel<br />

erwerben, um einen hauseigenen<br />

Pre-Bootloader zu signieren.<br />

Dieser startet dann<br />

<strong>Linux</strong> oder andere freie Betriebssysteme.<br />

James Bottomley, Vorsitzender<br />

des technischen Beirats der<br />

<strong>Linux</strong> Foundation, erklärt das<br />

Vorgehen unter anderem unter<br />

[http://​www.​linuxfoundation.​<br />

​org/​blog]. Demnach lädt der<br />

von Microsoft signierte Pre-<br />

Bootloader ohne weitere Signaturenchecks<br />

einen Bootloader<br />

für <strong>Linux</strong> oder andere<br />

Systeme. Entwickler von<br />

Distributionen nutzen den<br />

Pre-Bootloader also, um ihre<br />

<strong>Linux</strong>-Installer oder Liveversionen<br />

zu erstellen, die dann<br />

auch auf mit UEFI Secure Boot<br />

gesicherten Rechnern booten<br />

und laufen.<br />

Es werde eine Weile dauern,<br />

schreibt Bottomley, bis<br />

die <strong>Linux</strong> Foundation von<br />

Microsoft den Signaturschlüssel<br />

erhält. Danach will sie den<br />

Loader für jeden zum Download<br />

bereitstellen. Der Quellcode<br />

ist bereits als »efitools.<br />

git« in Bottomleys Repository<br />

auf Kernel.org zu finden.<br />

Auch einige Distributionen<br />

haben sich darüber bereits<br />

den Kopf zerbrochen – etwa<br />

Fedora. Ihre Vorgehensweisen<br />

ähneln dem Weg der <strong>Linux</strong><br />

Foundation, nur dass sie auf<br />

einen anderen Pre-Bootloader<br />

namens Shim setzen. Der ist<br />

nicht nur selbst signiert, sondern<br />

verlangt das auch von<br />

dem Bootloader, den er startet,<br />

also zum Beispiel Grub.n


Aktuell<br />

www.linux-magazin.de Zahlen & Trends 12/2012<br />

12<br />

Webplatform.org dokumentiert Webtechnologien<br />

Große Sponsoren, große Erwartungen: Webplatform.org soll Dokumente über alle<br />

Webtechnologien an einem Ort bündeln.<br />

Zusammen mit Industrie größen<br />

wie Adobe, Facebook,<br />

Google, Mozilla und Microsoft<br />

hat das World Wide Web Consortium<br />

(W3C) die Alphaversion<br />

der Site [http://​www.​<br />

​webplatform.​org] veröffentlicht.<br />

Sie soll sich zur zentralen Informationsstelle<br />

für Webtechnologien<br />

entwickeln.<br />

Die Seite ist derzeit mit einem<br />

Grundstock an Informationen<br />

zu HTML 5, CSS, SVG,<br />

Canvas, Video und Audio im<br />

Web, Web GL und Indexed DB<br />

ausgestattet. Begleitet werden<br />

die Informationen von<br />

Blog, Forum, Tutorials und<br />

IRC-Chat. Nach den Vorstellungen<br />

der Initiatoren kann<br />

sich jedermann an der Informationssammlung<br />

beteiligen,<br />

weshalb die Website auch ein<br />

Wiki enthält. Die Inhalte stehen<br />

unter freien Lizenzen wie<br />

etwa Creative Commons (Attribution,<br />

Non Commercial,<br />

Share Alike 2.5). Die Seite<br />

steht derzeit nur in englischer<br />

Sprache bereit, Lokalisierungen<br />

sind geplant.<br />

Das W3C betreut Webplatform.org<br />

im Auftrag der Mitglieder.<br />

Der WWW-Erfinder<br />

und W3C-Direktor Tim Berners-Lee<br />

sieht die Website als<br />

„ehrgeiziges Projekt, in dem<br />

alle, die sich für das Web engagieren,<br />

Wissen miteinander<br />

teilen und einander helfen“.<br />

Dazu hätten alle Beteiligten<br />

etwas beizutragen: Designer,<br />

Entwickler, Browser- und<br />

Tool-Hersteller.<br />

n<br />

Freiburg: Rückkehr zu Microsoft Office?<br />

Die Stadt Freiburg im Breisgau<br />

wird seit Jahren zu den<br />

Kommunen gezählt, die Open<br />

Office anwenden. Ein offener<br />

Brief der Open Source<br />

Business Alliance [http://​www.​<br />

​osb‐alliance.​com] vermutete im<br />

September jedoch Pläne, dort<br />

wieder Microsoft Office einzuführen.<br />

Grundlage der neuen Ausrichtung<br />

sei laut OSB Alliance<br />

„ein extern angefertigtes,<br />

unter Verschluss gehaltenes<br />

Gutachten“. Daneben schreibt<br />

die Organisation, die sich für<br />

Open Source in Wirtschaft<br />

und Verwaltung einsetzt: „Die<br />

für die Umstellung benötigten<br />

Budgets sind – soweit uns bekannt<br />

– bereits genehmigt und<br />

Mitarbeiter werden über die<br />

bevorstehende, erneute Umstellung<br />

informiert.“<br />

Das Schreiben kritisiert, dass<br />

die Verwaltung sich offenbar<br />

ohne Diskussion dem Gemeinderatsbeschluss<br />

von 2007 für<br />

das freie Office-Format ODF<br />

widersetzt. Der offene Brief<br />

endet mit zwei Fragen an<br />

die Kommune: Warum das<br />

Gutachten nicht öffentlich<br />

gemacht werde und wie eine<br />

Umstellung auf Microsoft Office<br />

zum Beschluss zugunsten<br />

des Open Document Format<br />

passe.<br />

Neben Peter Ganten und Holger<br />

Dyroff aus dem Vorstand<br />

der Open Source Business Alliance<br />

haben den Brief zudem<br />

Matthias Kirschner von der<br />

Free Software Foundation Europe<br />

und Marco Schulze vom<br />

Bundesverband Informationsund<br />

Kommunikationstechnologie<br />

unterzeichnet.<br />

Auf Anfrage des <strong>Linux</strong>-<strong>Magazin</strong>s<br />

erklärte die Leiterin des<br />

Freiburger Pressereferats, das<br />

Gutachten „empfiehlt eine<br />

Rückkehr zu MS Office, allerdings<br />

nicht generell“. Sie<br />

betont zudem: „Das Gutachten<br />

geht umfassend um die<br />

IT in der Stadtverwaltung, die<br />

Fragen nach Open Office sind<br />

dabei ein Aspekt von sehr<br />

vielen.“<br />

Wer das Gutachten erstellt hat,<br />

verrät die Stadt aber nicht. Es<br />

wurde intern im Mai präsentiert.<br />

Derzeit seien städtische<br />

Ämter und Dienststellen so-<br />

Opus: Freier Audio-Codec von der IETF<br />

Die Internet Engineering Task<br />

Force (IETF) hat einen neuen<br />

Audio-Codec namens Opus<br />

verabschiedet, der sich lizenzfrei<br />

implementieren lässt. Der<br />

in RFC 6716 festgelegte Standard<br />

soll sich für Sprache und<br />

Musik sowie gleichermaßen<br />

für die Archivierung und das<br />

Streaming von Audiodaten<br />

eignen. Web RTC, ein Standard<br />

für Echtzeitkommunikation<br />

per Web, schreibt Opus<br />

wie die Personalvertretung zu<br />

Stellungnahmen aufgefordert.<br />

Im November entscheidet der<br />

Gemeinderat, dann sollen<br />

die Entschlussvorlagen zur<br />

Sache öffentlich im Online-<br />

Ratsinformationssystem unter<br />

[https://​freiburg.​more‐rubin1.​<br />

​de] nachzulesen sein. n<br />

als einen der Pflicht-Codecs<br />

vor. Opus führt unter [http://​<br />

​opus‐codec.​org] eine Website<br />

mit weiteren Informationen.<br />

Dort gibt es auch den Quelltext<br />

der Referenzimplementierung<br />

unter revidierter BSD-<br />

Lizenz.<br />

Laut dem involvierten Projekt<br />

Xiph.org findet Opus bereits<br />

Eingang in die Entwicklung<br />

von Gstreamer, Ffmpeg und<br />

weiterer freier Software. n


KDE will Anwender beteiligen<br />

Das KDE-Projekt hat eine User<br />

Working Group ins Leben gerufen,<br />

um die Kommunikation<br />

zwischen Anwendern und<br />

Entwicklern zu verbessern.<br />

Zu diesem Zweck halten die<br />

Organisatoren öffentlich Meetings<br />

per Internet ab, jüngst<br />

per Google Hangout. Die Mitschriften<br />

sind unter [http://​uwg.​<br />

​kde.​org] nachzulesen.<br />

Zudem findet sich dort ein<br />

elektronischer Fragebogen,<br />

der sich ohne Registrierung<br />

ausfüllen lässt. Die Macher<br />

fragen auch nach der Akzeptanz<br />

von Mailinglisten, Bugtrackern<br />

und Foren – den bisherigen<br />

Kommunikationswegen<br />

zwischen KDE-Entwicklern<br />

und ‐Anwendern.<br />

Außerdem plant die User Working<br />

Group eine Anwendervertretung<br />

namens User Panel<br />

einzuführen. Interessierte<br />

könne ihre E-Mail-Adresse auf<br />

den Seiten der Arbeitsgruppe<br />

hinterlassen.<br />

n<br />

primeLine<br />

SOLUTIONS<br />

High Performance<br />

Zahlen & Trends 12/2012<br />

Aktuell<br />

File/DB/Application Server<br />

mit LSI MegaRAID FastPath<br />

für ultraschnelles SSD RAID<br />

www.linux-magazin.de<br />

13<br />

Red Hats Umsatz gewachsen<br />

Das Unternehmen Red Hat hat<br />

Zahlen für das zweite Quartal<br />

2013 vorgelegt, das für die USamerikanische<br />

Firma am 31.<br />

August 2012 endete.<br />

Mit einem Umsatz von 323<br />

Millionen US-Dollar verzeichnet<br />

das <strong>Linux</strong>-Unternehmen<br />

ein Wachstum von 15 Prozent<br />

gegenüber dem Vorjahresquartal.<br />

Von dieser Summe<br />

entfallen 279 Millionen auf<br />

die Software-Subskriptionen,<br />

17 Prozent mehr als im Vorjahr.<br />

Stärker noch stieg der<br />

operative Cashflow: Mit 104<br />

Millionen waren es 35 Prozent<br />

mehr als im Vorjahresquartal.<br />

Der Nettogewinn betrug 35<br />

Millionen US-Dollar.<br />

CEO Jim Whitehurst sieht<br />

den Umsatzzuwachs durch<br />

die starke Nachfrage nach<br />

den Open-Source-Produkten<br />

seines Unternehmens bedingt.<br />

Sie böten den Kunden<br />

Flexibilität, Innovation und<br />

Skalierbarkeit. Im September<br />

hatte das Wirtschaftsmagazin<br />

„Forbes“ Red Hat auf Platz<br />

vier der innovativsten Unternehmen<br />

weltweit gesetzt. n<br />

egino s-Series 23082s-C602<br />

X 2 HE Rackmount, 8x 3,5“ Hot-Plug<br />

X 740 Watt redundant 80 Plus Platinum<br />

X 2x Intel ® Xeon ® E5-2620 Prozessor<br />

(insgesammt 12 Cores mit je 2.0 GHz)<br />

X 64 GB DDR3 1333 MHz ECC Reg. RAM (max. 512 GB)<br />

X 2x Intel ® i250 Gbit Ethernet, IPMI 2.0 dedicated LAN<br />

X LSI MegaRAID 9271-8i Controller, 6 Gbit/s, PCIe 3.0,<br />

1 GB DDR3 inkl. Cache Protection, FastPath Software<br />

X 4x 180 GB Intel ® MLC SSD, 4x 1.0 TB Toshiba SAS (24x7)<br />

X 3 Jahre Garantie inkl. Komponenten Vorabaustausch<br />

Best-Nr.: 206174<br />

Zoll-Apps nicht als Open Source<br />

Ist eine Ware zollpflichtig<br />

oder nicht? Diese Frage klärt<br />

eine Smartphone-App, die das<br />

bundesdeutsche Finanzministerium<br />

(BMF) veröffentlicht<br />

hat. Die mit Steuergeldern<br />

entwickelte Anwendung soll<br />

aber nicht als Open-Source<br />

freigegeben werden.<br />

Gegenüber „Joinup“, einem<br />

Portal der Europäischen Kommission,<br />

sagte ein Sprecher<br />

des Ministeriums, man gebe<br />

die Software wie auch die anderen<br />

beiden vom deutschen<br />

Finanzministerium entwickelten<br />

Apps gerne an andere<br />

interessierte Stellen weiter,<br />

werde sie jedoch nicht als<br />

Open Source veröffentlichen<br />

– „weil der Fokus der App nur<br />

auf Deutschland“ liege. n<br />

3690, 00 €<br />

zzgl. MwSt. und Versand<br />

Ihr zuverlässiger Server Lieferant für Datacenter,<br />

öffentliche Einrichtungen, Systemhäuser & Reseller.<br />

primeLine Solutions GmbH<br />

Dornenbreite 18a · 32549 Bad Oeynhausen<br />

Tel.: +49 5731 8694-0 · Fax: +49 5731 8694-413<br />

E-Mail: vertrieb@primeline.org<br />

Web: www.primeline-solutions.de<br />

4391, 10 €<br />

inkl. MwSt. zzgl. Versand<br />

Intel, das Intel Logo, Xeon, und Xeon Inside sind Marken der Intel Corporation in den USA und anderen Ländern.<br />

E<br />

EGINO SERVER


Aktuell<br />

www.linux-magazin.de Zahlen & Trends 12/2012<br />

14<br />

Open Stack Foundation gegründet<br />

Das Open-Stack-Projekt hat<br />

eine Stiftung ins Leben gerufen.<br />

Die Open Stack Foundation<br />

[http://​www.​openstack.​<br />

​org] hat nun ihre Arbeit aufgenommen<br />

und ist finanziell<br />

gut gepolstert.<br />

Die neue Stiftung will sich<br />

für die Verbreitung und Förderung<br />

des Cloud-Framework<br />

einsetzen und hat bereits 10<br />

Millionen US-Dollar von ihren<br />

Mitgliedern eingesammelt.<br />

Zu den Mitgliedern mit<br />

Platin-Status gehören – neben<br />

Canonical, das Open Stack im<br />

großen Stil einsetzt – weitere<br />

bekannte Namen wie AT&T,<br />

HP, IBM, Nebula, Rackspace,<br />

Red Hat sowie Suse, das mit<br />

Alan Clark auch den Vorstand<br />

der Stiftung stellt.<br />

Daneben hat die Stiftung 13<br />

Gold-Sponsoren sowie 5000<br />

unabhängige Mitglieder, die<br />

sich an der Stiftung beteiligen.<br />

Die Individuen sowie die<br />

Gold- und Platin-Sponsoren<br />

stellen jeweils zu einem Drittel<br />

die Mitglieder des Verwaltungsrates.<br />

Außerdem gibt es<br />

noch ein technisches Komitee,<br />

zusätzlich soll Tim Bell vom<br />

CERN ein Benutzerkomitee<br />

ins Leben rufen, das unter<br />

anderem aus Nutzern verschiedener<br />

Bereiche (Wissenschaft,<br />

Unternehmen, Diensteanbieter)<br />

bestehen soll. n<br />

Die Open-Stack-Board-Members<br />

Jonathan Bryce und Alan Clark (links)<br />

auf der Susecon in Orlando.<br />

Univention Absolventenpreis 2013<br />

Ceph: Finanzspritze von Shuttleworth<br />

Das Bremer <strong>Linux</strong>-Unternehmen<br />

Univention hat den Bewerbungszeitraum<br />

für seinen<br />

Absolventenpreis 2013 eröffnet,<br />

der Abschlussarbeiten zu<br />

<strong>Linux</strong>- und Open-Source-Themen<br />

prämiert. Teilnehmen<br />

können Autoren solcher Diplom-,<br />

Master- und Bachelor-<br />

Arbeiten an Fachhochschulen<br />

oder Hochschulen, die innerhalb<br />

der Jahre 2011, 2012<br />

oder Anfang 2013 beurteilt<br />

wurden.<br />

Der Preis ist interdisziplinär<br />

konzipiert, neben der Informatik<br />

können die Beiträge<br />

also auch aus anderen Fächern<br />

stammen, wenn sie praxisnah<br />

und innovativ den Einsatz von<br />

Open-Source-Software untersuchen<br />

und ihn verbessern<br />

helfen. Die besten Arbeiten<br />

wählt eine unabhängige Expertenjury<br />

aus, der auch der<br />

<strong>Linux</strong>-<strong>Magazin</strong>-Chefredakteur<br />

Jan Kleinert angehört.<br />

Die drei Bestplatzierten erhalten<br />

2000, 1000 beziehungsweise<br />

500 Euro als Prämie.<br />

Die Verleihung der Preise<br />

findet auf dem <strong>Linux</strong>tag 2013<br />

in Berlin statt. Interessierte<br />

Absolventen können sich auf<br />

der Homepage [http://​www.​<br />

​absolventenpreis.​de] informieren.<br />

Die Bewerbungen können<br />

sie ab sofort bis zum 17.<br />

Februar 2013 per E-Mail einreichen.<br />

n<br />

Absolventenpreis: 2012 belegte Dominik Leibenger (rechts) mit seiner Masterarbeit<br />

„Vertrauliche Versionsverwaltung mit Subversion“ den zweiten Platz.<br />

Wie die Firma Inktank bekannt<br />

gibt, beteiligt sich<br />

Ubuntu-Gründer Mark Shuttleworth<br />

mit einer Million US-<br />

Dollar an dem Unternehmen.<br />

Inktank wirkt maßgeblich an<br />

der Entwicklung des verteilten<br />

Dateisystems Ceph mit<br />

und bietet kommerziellen<br />

Landscape soll 40 000 Rechner verwalten<br />

Support dafür an. Gegründet<br />

wurde Inktank von Sage Weil,<br />

der das Dateisystem im Rahmen<br />

seiner Doktorarbeit entwickelt<br />

hat. Ceph bildet auch<br />

das Storage-Subsystem für das<br />

Cloud-Computing-Framework<br />

Open Stack in neueren Ubuntu-Versionen.<br />

n<br />

Eine unabhängige Studie von<br />

Enterprise Management Associates<br />

stellt Canonicals Managementsoftware<br />

Landscape<br />

ein hervorragendes Zeugnis<br />

aus: Sie behauptet, die Software<br />

könne die Kosten einer<br />

IT-Abteilung um zwei Drittel<br />

senken.<br />

Einen Return of Investment<br />

(ROI) von mehr als 1000 Prozent<br />

in fünf Jahren verspricht<br />

die Studie, wenn ein Unternehmen<br />

1000 Ubuntu-Clients<br />

einsetze und diese mit Landscape<br />

verwalte. Das werde<br />

möglich, weil ein Admin mit<br />

Landscape problemlos große<br />

Zahlen von Rechner verwalten<br />

könne, schreibt Canonical<br />

in einer Pressemitteilung –<br />

konkret bis zu 40 000.<br />

Zudem kündigt Canonical<br />

Updates an. Dank der neuen<br />

und verbesserten Funktionen<br />

erfülle man die Sicherheitsstandards<br />

von Kreditkarteninstituten<br />

und Regierungen (PCI<br />

DSS, HIPAA/​Hitech, Sox).<br />

Zentralisierte Werkzeuge würden<br />

dabei helfen, Updates für<br />

die Server einzuspielen und<br />

Compliance Reports für alle<br />

Elemente der Infrastruktur<br />

zu erstellen. Per API ließen<br />

sich Puppet, Nagios, Ticket-<br />

Systeme oder Admin-Skripte<br />

anbinden.<br />

n


KDE veröffentlicht Grundsatzpapier<br />

Das KDE-Manifest solle nicht<br />

die Arbeitsweise der KDE-<br />

Entwickler und des KDE e.V.<br />

verändern, schreibt das Projekt<br />

in einer Pressemitteilung.<br />

Vielmehr wollen die Initiatoren<br />

definieren, „wie sich die<br />

KDE-Community selbst sieht“.<br />

Das Manifest werde sich „über<br />

die Zeit, in der KDE reifen und<br />

wachsen wird“ ebenfalls verändern,<br />

es will verständlich<br />

machen, warum sich die Beteiligten<br />

engagieren.<br />

„Was uns zusammenhält, sind<br />

bestimmte Werte und deren<br />

praktische Umsetzung, ohne<br />

Rücksicht auf Personen, deren<br />

Hintergründe oder Fähigkeiten,<br />

die sie mitbringen“, steht<br />

im zugehörigen Blogpost.<br />

Das Manifest selbst ist erstaunlich<br />

kurz. Zunächst heißt es:<br />

„Wir sind eine Gemeinschaft<br />

von Technologen, Designern,<br />

Autoren und Engagierten, die<br />

daran arbeiten, mit unserer<br />

Software Freiheit für alle Menschen<br />

zu sichern.“<br />

Danach fährt es mit einer Beschreibung<br />

der sechs wichtigsten<br />

Werte des KDE-Projekts<br />

fort: Open Governance, freie<br />

Software, Offenheit für jeden,<br />

Innovation, gemeinsames Eigentum<br />

und End-User-Fokus.<br />

Auf den folgenden Seiten nehmen<br />

sich die Autoren mehr<br />

Platz, um die Prinzipien und<br />

den Nutzen darzulegen. „Auf<br />

dem Weg zu unseren Zielen<br />

halten wir es für essenziell,<br />

Das KDE-Manifest schreibt Offenheit und Innovation groß.<br />

diese Punkte zu definieren<br />

und einzuhalten“, schließt<br />

das Manifest, nachzulesen<br />

unter [http:manifesto.​kde.​org].n<br />

Zahlen & Trends 12/2012<br />

Aktuell<br />

www.linux-magazin.de<br />

15<br />

Blue Spice aus der Deutschen Wolke<br />

<strong>Linux</strong>-Server<br />

Das Administrationshandbuch<br />

Das Komplettpaket<br />

LPIC-1 & LPIC-2<br />

Die Deutsche Wolke wächst:<br />

Das Cloudprojekt, das zum<br />

Ziel hat, eine dem deutschen<br />

Datenschutz entsprechende<br />

Public Cloud aufzubauen, hat<br />

nach Agorum (DMS), dem<br />

CRM Helium V, dem Cloudspeicher<br />

Own Cloud und der<br />

Managementsuite Open QRM<br />

jetzt auch das Enterprise-Wiki<br />

Blue Spice im Angebot.<br />

Bisher gab es die Software nur<br />

als On-Premise-Lösung, doch<br />

der Hersteller Hallowelt bietet<br />

ab sofort die Dienste der Deutschen<br />

Wolke an. Preise und<br />

ein Datenblatt gibt es unter<br />

[http://​www.​blue‐spice.​org/​<br />

​de/​service/​cloud/​deutsche‐wolke/].<br />

Das <strong>Linux</strong>-<strong>Magazin</strong> hat Blue<br />

Spice in der Ausgabe 09/​11<br />

besprochen.<br />

n<br />

948 S., 2. Auflage 2012, 49,90 €<br />

» www.GalileoComputing.de/3051<br />

545 S. und 554 S., 2012, mit 2 DVDs, 59,90 €<br />

» www.GalileoComputing.de/2895<br />

Wissen, wie´s geht.<br />

Spenden für Ubuntu<br />

Ubuntu 12.04 LTS<br />

Das umfassende Handbuch<br />

www.GalileoComputing.de<br />

GIMP 2.8<br />

Wer Ubuntu für den Desktop<br />

herunterlädt, bekommt seit<br />

Oktober ein Spendenformular<br />

zu sehen. Entrichtet der Besucher<br />

freiwillig einen Obolus,<br />

kann er dort auch einen<br />

Verwendungszweck für seine<br />

Spende wählen – von verbesserter<br />

Spiele-Unterstützung<br />

bis zur Zusammenarbeit mit<br />

dem Debian-Projekt.<br />

„Ubuntu bleibt auch in Zukunft<br />

kostenlos“, betont das<br />

Blog des Herstellers Canonical.<br />

Man wolle es den Benutzern<br />

nur leichter machen, Ubuntu<br />

finanziell zu unterstützen.<br />

Wer spenden will, braucht<br />

einen Paypal-Account, andere<br />

Zahlungsarten sind zurzeit<br />

nicht im Angebot. (ake/kki/​<br />

mfe/​ofr/​mhu)<br />

n<br />

1.023 S., 7. Auflage 2012, mit DVD, 39,90 €<br />

» www.GalileoComputing.de/3151<br />

947 S., 2012, komplett in Farbe, mit DVD, 39,90 €<br />

» www.GalileoDesign.de/2548<br />

Wissen, wie’s geht.


Aktuell<br />

www.linux-magazin.de Kernel-News 12/2012<br />

16<br />

Zacks Kernel-News<br />

Überarbeitetes Subsystem für Pulsweiten-Modulation<br />

Thierry Reding hat das Subsystem<br />

für die Pulsweiten-Modulation<br />

(PWM) überarbeitet.<br />

Es moduliert die Länge von<br />

Rechteckpulsen, um beispielsweise<br />

die Stärke des Ausgangssignals<br />

zu steuern. Das<br />

kommt unter anderem bei der<br />

Steuerung von Computerlüftern<br />

und der Hintergrundbeleuchtung<br />

zum Einsatz.<br />

Thierrys Arbeit ersetzt das alte,<br />

unflexible API durch ein<br />

generisches Subsystem, das<br />

Unterstützung für eine Vielzahl<br />

von Treibern bietet. Nach<br />

seiner Aussage befand sich<br />

der Code bereits seit eineinhalb<br />

Jahren in Entwicklung<br />

und es waren auch schon<br />

einige Treiber auf das neue<br />

API portiert. Die Zeit war also<br />

gekommen, das neue PWN in<br />

Kernel 3.6 zu bringen.<br />

Linus Torvalds hatte am<br />

Code nichts auszusetzen,<br />

dafür allerdings an der Art,<br />

wie Thierry ihn eingereicht<br />

hat. Zunächst verlangte Linus<br />

„Signed‐off‐by“-Zeilen<br />

von den Entwicklern, die mit<br />

dem Subsystem in Zukunft<br />

arbeiten werden. Das größere<br />

Problem: Thierry war nie Teil<br />

des Web of Trust von GPG-<br />

Schlüsseln geworden, das die<br />

Kernelentwickler seit dem<br />

Einbruch in die Kernel-Server<br />

Das neue PWM-Subsystem macht es leichter, Treiber für die Controller von ARM-<br />

Systemen wie Nvidias Tegra zu schreiben.<br />

© Nvidia.de<br />

im August 2011 aufgebaut haben.<br />

Seitdem gab es weltweit<br />

Keysigning-Partys, auf denen<br />

sie ihre Identität überprüften<br />

und gegenseitig ihre Schlüssel<br />

signierten. Thierry, bei<br />

einer Firma für Medizin- und<br />

Luftfahrttechnik in Hamburg<br />

beschäftigt, kannte jedoch<br />

keine Kernelentwickler in<br />

seiner Nähe, die seinen GPG-<br />

Schlüssel hätten unterschreiben<br />

können.<br />

Das änderte sich schnell, als<br />

sein Patch auftauchte: Auf<br />

der Mailingliste meldeten sich<br />

viele PWM-Anwender, die ihr<br />

„Signed off by“ anboten. Daneben<br />

signierte Sebastian Andrzej<br />

Siewior von Linutronix<br />

Thierrys Schlüssel.<br />

Am Ende wartete Linus doch<br />

nicht auf die GPG-Signatur.<br />

Schließlich hat eine lange Liste<br />

von Entwicklern den Code<br />

gutgeheißen. Dazu gehört<br />

Arnd Bergmann, der schrieb:<br />

„Ein volles Ack für das neue<br />

Subsystem. Es verwendet die<br />

gleichen Interface-Deklarationen<br />

wie die bisherigen PWM-<br />

Treiber, daher ändert sich hier<br />

erst einmal nichts, lässt uns<br />

diese Option aber für die Zukunft<br />

offen. Daneben ist es<br />

eines der fehlenden Teile, um<br />

ARM-Kernel für mehrere Plattformen<br />

bauen zu können.“ n<br />

Einweg-IDs für Geräte<br />

Der französische Entwickler<br />

Jean Delvare ist einem Problem<br />

mit Device-IDs auf die<br />

Spur gekommen. Diese IDs<br />

benötigt der Kernel, um Hardwarekomponenten<br />

als Blockoder<br />

Zeichen-orientiertes Gerät<br />

einzubinden.<br />

In manchen Fällen ist allerdings<br />

gar keine ID erforderlich,<br />

da nur ein einziges Gerät<br />

seiner Art gleichzeitig existieren<br />

darf. Dabei kann der Computer<br />

mehrere solcher Geräte<br />

besitzen, doch nur eines ist<br />

mit einer Nummer identifizierbar.<br />

Jeans Szenario tritt auf, wenn<br />

mehrere Exemplare eines Gerätetyps<br />

existieren, aber die<br />

ID weder wichtig noch vorhersagbar<br />

ist. Für diesen Fall<br />

möchte der Entwickler Einweg-IDs<br />

für Geräte vergeben.<br />

Dafür wollte Jean ursprünglich<br />

negative Werte verwenden,<br />

um damit zu signalisieren,<br />

dass der Kernel sie nach<br />

der Verwendung wegwerfen<br />

darf. Der Anwender würde<br />

normale IDs mit einem Suffix<br />

sehen.<br />

Greg Kroah-Hartman wies allerdings<br />

auf ein Problem hin:<br />

Jean würde die Device-IDs<br />

überladen, ihnen also über<br />

ihre ursprüngliche Aufgabe<br />

hinaus eine zusätzliche Bedeutung<br />

geben. Greg riet dazu,<br />

lieber einen zusätzlichen<br />

booleschen Wert zu verwenden<br />

als einen Sonderfall für<br />

negative Werte einzuführen.<br />

So ließe sich um den Preis von<br />

ein wenig Speicher größere<br />

Klarheit erreichen. Das fand<br />

Jean vernünftig, und so setzte<br />

er die Device-IDs neu um. n


Neuheiten von O’Reilly<br />

Lösungen vorprogrammiert<br />

Tempo trotz Tracepoints<br />

Ist der Kernel mit der Tracepoint-Option<br />

kompiliert, können<br />

Entwickler sie nutzen,<br />

um die Ausführung ihres<br />

Codes zu verfolgen. Der Red-<br />

Hat-Entwickler Steven Rostedt<br />

hat sich damit beschäftigt,<br />

inwiefern Tracepoints <strong>Linux</strong><br />

langsamer machen.<br />

Gegenwärtig, so schreibt er,<br />

werde ein Tracepoint in Maschinencode<br />

verwandelt, der<br />

im Hot Path liegt, also in jenen<br />

Teilen des Kernels, die häufig<br />

ausgeführt werden. Daher<br />

summiert sich die eigentlich<br />

recht geringe Verlangsamung<br />

des Kernels pro Trace-Punkt<br />

zu einer durchaus wahrnehmbaren<br />

Größe.<br />

Steven legte probeweise Tracepoints<br />

außerhalb des Hot<br />

Path, indem er eine externe<br />

Funktion aufruft. Das macht<br />

den Kernel allerdings in Summe<br />

etwas umfangreicher und<br />

verlangsamt das Tracing. Er<br />

fragte die Mailingliste, ob er<br />

das für den gesamten Kernel<br />

umsetzen solle.<br />

Der Kernel-Consultant Mathieu<br />

Desnoyers zeigte sich skeptisch,<br />

ob so wenig Maschinencode<br />

im Hot Path tatsächlich<br />

die Performance verschlechtere.<br />

Zudem rät er, eher dem<br />

GCC beizubringen, den Code<br />

aus dem viel genutzten Ausführungspfad<br />

zu räumen.<br />

Dazu bemerkte Steven sarkastisch,<br />

man könne leichter<br />

eine olympische Goldmedaille<br />

gewinnen als ein gewünschtes<br />

Feature von den GCC-Entwicklern<br />

bekommen.<br />

Damit spielt er auf frühere<br />

Auseinandersetzungen zwischen<br />

Kernel- und GCC-Entwicklern<br />

an. Das habe sich<br />

aber inzwischen geändert,<br />

schreibt H. Peter Anvin: „In<br />

letzter Zeit haben die GCC-<br />

Entwickler viel besser mitgezogen<br />

und für uns Features<br />

wie »__fentry__« und »asm<br />

goto« entwickelt.“ Daraufhin<br />

beschäftigte sich die Mailingliste<br />

damit, welche Veränderungen<br />

im GCC wünschenswert<br />

wären.<br />

n<br />

Durchstarten mit Raspberry Pi<br />

Erik Bartmann, 336 Seiten, 2012, 24,90 €<br />

ISBN 978-3-86899-410-0<br />

Der Raspberry Pi ist ein preiswerter Mikrocontroller<br />

mit <strong>Linux</strong>-Kernel und zahlreichen<br />

Anschlüssen für die Zusammen arbeit mit<br />

Peripheriegeräten. Der O’Reilly-Erfolgsautor<br />

Erik Bartmann beschreibt den praxisnahen<br />

Einsatz dieses Mikrocontrollers. Zahlreiche<br />

Tipps und Tricks helfen dem Leser, mit diesem<br />

neuen Board schnell eigene Projekte zu<br />

realisieren. Mit <strong>Linux</strong>-Crashkurs.<br />

Sieben Wochen, sieben Datenbanken<br />

Eric Redmond, Jim R. Wilson<br />

368 Seiten, 2012, 34,90 €<br />

ISBN 978-3-86899-791-0<br />

Redis, Neo4J, CouchDB, MongoDB, HBase,<br />

Riak und PostgreSQL: Sieben Wochen, sieben<br />

Datenbanken nimmt Sie mit auf eine Reise<br />

zu einigen der momentan angesagtesten<br />

Open Source-Datenbanken. Dabei geht dieses<br />

Buch über eine einfache Anleitung<br />

hinaus und erläutert die wesentlichen<br />

Kernkonzepte jeder Technologie.<br />

Fitness für Geeks<br />

Bruce W. Perry, 384 Seiten, 2012, 24,90 €<br />

ISBN 978-3-86899-404-9<br />

Geeks neigen dazu, ein äußerst wichtiges<br />

System zu ignorieren: den eigenen Körper.<br />

Was kann sie dazu motivieren, sich um<br />

eine gesündere Lebensweise zu bemühen?<br />

Die Antwort lautet: eine fundierte, wissenschaftliche<br />

und teilweise Technik-gestützte<br />

Herangehensweise. Und genau die bietet<br />

Fitness für Geeks: Das Buch vermittelt<br />

umfassendes Gesundheitswissen und leicht<br />

anzuwendende Fitness-Hacks.<br />

Langzeit-Support für 3.2<br />

Der britische Debian-Entwickler<br />

Ben Hutchings hat<br />

sich bereit erklärt, die Langzeitpflege<br />

für den Kernelzweig<br />

3.2 zu übernehmen. Der Wartungszeitraum<br />

soll der Lebensspanne<br />

der kommenden<br />

Debian-Release 7.0 (Wheezy)<br />

entsprechen, also voraussichtlich<br />

bis ins Jahr 2015 reichen.<br />

Danach würde Ben die Pflege<br />

möglicherweise noch einem<br />

Nachfolger übergeben.<br />

Die Bedeutung des Long-<br />

Term-Stable-Kernels liegt darin,<br />

dass Linus Torvalds selbst<br />

sich um keinerlei stabile Zweige<br />

mehr kümmert. In den Tagen<br />

der stabilen Versionen mit<br />

gradzahliger Minor-Nummer<br />

spielte Stabilisierung in seiner<br />

Arbeit noch eine Rolle. Jetzt<br />

befindet sich der offizielle<br />

Kernel aber ständig in aktiver<br />

Weiterentwicklung.<br />

Andere Entwickler wie beispielsweise<br />

Ben finden sich<br />

aus eigenem Interesse bereit,<br />

eine bestimmte Kernelversion<br />

zu stabilisieren und länger zu<br />

betreuen. Damit dienen sie<br />

meist ihrer eigenen Sache, etwa<br />

der Stabilität von Debian<br />

7.0. (Zack Brown/​mhu) n<br />

<strong>Linux</strong> – kurz & gut<br />

ISBN 978-3-86899-412-4<br />

12,90 Euro<br />

Blog:<br />

community.oreilly.de/blog<br />

Google+:<br />

bit.ly/googleplus_oreillyverlag<br />

Steampunk – kurz & geek<br />

ISBN 978-3-86899-367-7<br />

12,90 Euro<br />

O’REILLY ®<br />

www.oreilly.de<br />

O’Reillys<br />

Erfolgsreihen im<br />

Hosentaschenformat.<br />

Jetzt mit neuen<br />

Bänden!<br />

Facebook:<br />

facebook.com/oreilly.de<br />

Twitter:<br />

twitter.com/oreilly_verlag


1&1 CLOUD SERVER<br />

DAS DEDICATED-GEFÜHL – MIT MAXIMALER FLEXIBILITÄT.<br />

Ihre Anforderungen ändern sich immer wieder, manchmal auch unvorhergesehen? Dann sollten<br />

Sie sich für einen Dynamic Cloud Server von 1&1 entscheiden. Denn bei 1&1 sind Sie immer<br />

auf der sicheren Seite: Mit über 11 Mio. Kundenverträgen, 2 Milliarden € Jahresumsatz,<br />

5.000 Mitarbeitern und 5 Hochleistungs-Rechenzentren ist 1&1 einer der größten Webhoster<br />

weltweit. Und mit 20 Jahren Server-Erfahrung und 1.500 Developern sind wir auch in Zukunft<br />

Ihr zuverlässiger Partner. Darum nutzen Sie bei 1&1 viele Vorteile, die Ihnen so kein anderer<br />

Hoster bietet.<br />

VOLLER ROOT-ZUGRIFF<br />

Komfort und Funktionsumfang eines Root Servers, mit dedizierten Ressourcen.<br />

HÖCHSTE FLEXIBILITÄT<br />

■ CPU, RAM und Festplattenspeicher unabhängig voneinander zubuchbar.<br />

Aktion: Dauerhaft 50% günstiger – pro Stunde und Einheit 0,005 € statt 0,01 €.<br />

■ Per Mausklick ausbaufähig bis hin zum eigenen Rechenzentrum mit maximal<br />

99 virtuellen Maschinen – ohne Migration!<br />

■ Absolute Kostentransparenz durch stundengenaue, leistungsbezogene Abrechnung.<br />

UNLIMITED TRAFFIC<br />

100 Mbit/s Bandbreite. Ohne Zusatzkosten, ohne Drosselung.<br />

PARALLELS ® PLESK PANEL 11<br />

■ neueste Version des besten Verwaltungstools für Ihren Server<br />

■ inklusive unlimited Domains<br />

AUSFALLSICHER<br />

Redundant gespiegelte Speicher- und Recheneinheiten schützen<br />

Ihren Cloud-Server automatisch vor Ausfällen.<br />

DOMAINS | E-MAIL | WEBHOSTING | E-SHOPS | SERVER<br />

* 1&1 Dynamic Cloud Server dauerhaft 19,99 €/Monat statt bisher 39,99 €/Monat in der Basiskonfi guration. Performance Features dauerhaft für 0,005 €/Stunde und Einheit statt bisher<br />

0,01€/Stunde und Einheit zubuchbar. Einrichtungsgebühr von 39,– € entfällt. 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt.


DAUERHAFT<br />

50 % AUF IHRE<br />

GESAMTE KONFIGURATION<br />

1&1 DYNAMIC CLOUD SERVER<br />

Perfekt als Application-, Datenbank-, Hostingoder<br />

Game-Server – oder für alles zusammen.<br />

■ Basiskonfiguration: 1 CPU, 1 GB RAM,<br />

100 GB Festplatte<br />

■ Unlimited Traffic mit 100 Mbit/s Bandbreite<br />

■ Citrix Xen Server basierend auf AMD Multicore-<br />

Architektur (AMD Opteron 6272)<br />

■ Freie Wahl aus CentOS, Debian, Ubuntu,<br />

openSUSE oder Windows (optional)<br />

■ Nur bei 1&1: Optional SUSE<br />

<strong>Linux</strong> Enterprise Server<br />

■ Nur bei 1&1: Server-Management und<br />

-Monitoring per Mobile App<br />

■ NEU! 1&1 Snapshot: Definieren Sie einfach<br />

einen Wiederherstellungszeitpunkt für Ihren Server.<br />

■ 24/7 Service und Support durch<br />

1&1 Server Expertenteam.<br />

■ Keine Einrichtungsgebühr<br />

nur 19,<br />

99 39,<br />

99<br />

€/Monat*<br />

0 26 02 / 96 91<br />

0800 / 100 668<br />

www.1und1.info


Titelthema<br />

www.linux-magazin.de Einführung 12/2012<br />

20<br />

Einführung: Webservices mit Soap und REST<br />

<strong>Schnittstellen</strong>-<strong>Magie</strong><br />

Außer den sichtbaren Websites findet im Web auch unauffällige Kommunikation statt: Über Webservices tauschen<br />

Programme Informationen aus, von Warenkatalogen bis hin zu Klatsch und Tratsch. Mathias Huber<br />

Inhalt<br />

22 Soziale Netzwerke einbinden<br />

Goupware-Systeme zapfen die APIs von<br />

Facebook, Twitter und Xing an.<br />

28 E-Commerce-APIs<br />

Dank Webservices über Ebay und Amazon<br />

verkaufen.<br />

32 Kartendienste nutzen<br />

APIs holen Karten von Google Maps und<br />

Open Streetmap auf die eigene Seite.<br />

36 Entwicklertools automatisieren<br />

Mit eigenen Skripten automatisieren<br />

Entwickler Github und Bugzilla.<br />

70 Hintertürchen<br />

Der Rechtsartikel beschäftigt sich mit<br />

Nutzungsbedingungen von APIs.<br />

102 Perl und Mojolicious automatisieren<br />

Mike Schilli digitalisiert Bücher und<br />

schickt sie mit Perl in die Cloud.<br />

Alltag im WWW: Die Preissuchmaschine<br />

findet das günstigste Angebot,<br />

ein Softwareportal zeigt die Wohnorte<br />

der Entwickler auf einer Weltkarte. Hinter<br />

solchen Features<br />

steckt meist ein<br />

Webservice. Das<br />

heißt schlicht, dass<br />

ein Programm mit<br />

einem anderen per<br />

HTTP Informationen<br />

austauscht. Die<br />

Dienste verwenden<br />

standardisierte Verfahren<br />

und Datenformate,<br />

sodass sie<br />

die Grenzen einzelner<br />

Plattformen,<br />

Technologien und<br />

Programmiersprachen<br />

überwinden.<br />

Soap & Co.<br />

Nach einer engeren<br />

Definition handelt<br />

es sich bei Webservices um Interaktionen,<br />

die das XML-Nachrichtenformat<br />

Soap verwenden, das derzeit in Version<br />

1.2 aus dem Jahr 2003 gültig ist [1]. Das<br />

Akronym stand einst für Simple Object<br />

Access Protocol, hat sich aber mittlerweile<br />

als eigenes Wort etabliert.<br />

Soap hat seine Wurzeln im Remote Procedure<br />

Call (RPC) der als XML-RPC seit<br />

Ende der neunziger Jahre HTTP als Transportmechanismus<br />

und XML als Nachrichtenformat<br />

verwendet [2]. Dabei handelt<br />

es sich um eine recht einfache Abbildung<br />

von Methoden und Datentypen auf ein<br />

XML-Format. Der anfragende Rechner<br />

schickt einen »methodCall«-Knoten per<br />

HTTP-»POST« ab und erhält als Antwort<br />

einen »methodResponse«-Knoten mit den<br />

gewünschten Ergebnisdaten oder einer<br />

Fehlermeldung.<br />

Die Weiterentwicklung Soap reichte<br />

Microsoft mit einigen Verbündeten 2000<br />

beim World Wide Web Consortium<br />

(W3C) ein. Es erweitert die Nachrichten<br />

um Envelope und Header, funktioniert<br />

sowohl per HTTP als auch SMTP und<br />

kennt Datei-Attachments. Daneben besitzt<br />

es ein erheblich umfangreicheres<br />

XML-Vokabular.<br />

Listing 1 stammt aus der W3C-Recommendation<br />

und zeigt die Soap-Anfrage<br />

an einen Reisedienstleister. Der Envelope<br />

umschließt Header (Zeile 3 bis 15) und<br />

Body (Zeile 16 bis 38). Die eigentliche<br />

Buchungsanfrage für den Flug ist in einem<br />

unter »http://travelcompany.example.org/reservation/travel«<br />

definierten<br />

XML-Format kodiert und enthält Startund<br />

Zielort, Terminwunsch und Tageszeit<br />

sowie Sitzplatzwunsch für die Flugreise<br />

(»itinerary«, Zeile 17 bis 33). Der Knoten<br />

»lodging« steht für eine optionale Hotelbuchung<br />

zur Verfügung.<br />

Um Soap herum haben sich weitere Technologien<br />

und Standards ausgebildet, die<br />

man oft als WS-*-Stack zusammenfasst.<br />

Zu den wichtigsten gehört WSDL, die<br />

Webservices Description Language. Ebenfalls<br />

in XML abgefasst, beschreibt sie<br />

einen zur Verfügung stehenden Dienst.<br />

Liefert ein Diensteanbieter WDSL, macht<br />

er den Entwicklern eine Freude: Java und<br />

Microsofts Dotnet-Framework besitzen<br />

Tabelle 1: REST-Verben<br />

HTTP-Methode Funktion<br />

GET<br />

Hole die Ressource.<br />

PUT Lege eine Ressource an<br />

oder ändere diese durch<br />

Senden ihres gesamten<br />

Inhalts.<br />

POST<br />

Lege eine Ressource an<br />

oder ändere diese durch<br />

Aufrufen einer serverseitigen<br />

Prozedur.<br />

DELETE Lösche eine Ressource.


Generatoren, die anhand der WSDL-Beschreibung<br />

automatisch den Großteil des<br />

Codes für einen passenden Client produzieren.<br />

Daneben gibt es Soap-Implementierungen<br />

für Programmiersprachen wie<br />

PHP, Perl, Ruby und andere.<br />

Dicke Dienste<br />

Kritiker von Soap & Co. bezeichnen diese<br />

Technologien als „dicke“ Webservices.<br />

Sie bemängeln den Vokabelreichtum und<br />

Umfang der XML-Botschaften, die der<br />

Programmierer zudem mit Parsern und<br />

einer eigenen Abfragesprache wie Xpath<br />

verarbeiten muss.<br />

Der Gegenvorschlag heißt Representational<br />

State Transfer (REST) und setzt direkt<br />

auf dem WWW-Protokoll HTTP auf. Im<br />

Jahr 2000 beschrieb ihn der Informatiker<br />

Roy Fielding in seiner Doktorarbeit [3].<br />

Fielding ist einer der Gründer des Apache-Projekts,<br />

zudem war er maßgeblich<br />

an der Entwicklung des HTTP-Protokolls<br />

beteiligt.<br />

REST sieht für jede Ressource, beispielsweise<br />

einen Foreneintrag oder ein Produkt<br />

in einem Online-Shop einen Uniform<br />

Resource Identifier (URI) vor. So könnte<br />

ein Produkt beispielsweise unter »http://<br />

example.com/products/Produktnummer«<br />

zu finden sein. Das elegante an diesem<br />

Ansatz: Er stellt keinen Bruch zu dem<br />

dar, was auch ansonsten im WWW üblich<br />

ist, beispielsweise beim schlichten Aufrufen<br />

einer statischen Webseite per HTTP-<br />

»GET«. Um mit diesen Ressourcen zu<br />

arbeiten, verwendet REST weitere HTTP-<br />

Methoden, auch als Verben bezeichnet,<br />

als Vokabular. Mit den wichtigsten lassen<br />

sich Einträge anlegen, lesen, ändern oder<br />

löschen (Tabelle 1). Dabei kommt »PUT«<br />

zum Einsatz, wenn das Anlegen oder<br />

Ändern durch Senden des gesamten Ressourceninhalts<br />

erfolgt, »POST« dagegen<br />

kann auch eine serverseitige Prozedur<br />

aufrufen – und mischt damit ein RPC-<br />

Element in die REST-Welt.<br />

REST und das neu geschaffene Adjektiv<br />

RESTful erfreuen sich unter Softwareentwicklern<br />

in den letzten Jahren großer Beliebtheit.<br />

Anwendungsbeispiele für diese<br />

Architektur sind der Simple Storage Service<br />

(S3) von Amazon, der Request Tracker<br />

RT und auch die NoSQL-Datenbank<br />

Couch DB. REST-Implementierungen<br />

finden sich für so gut wie jede aktuelle<br />

Programmiersprache, von diversen Java-<br />

Frameworks über Cake PHP und Fuel<br />

PHP bis zu Web2py und Ruby on Rails.<br />

Sogar ein Stück Javascript auf einer Webseite<br />

kann als REST-Client arbeiten, wie<br />

das Framework Ext JS zeigt. Der Perl-<br />

Snapshot in der Programmieren-Rubrik<br />

dieses <strong>Linux</strong>-<strong>Magazin</strong>s nutzt Mojolicous,<br />

um den Dienst Google Drive mit Perl<br />

anzusprechen.<br />

Abseits der reinen REST-Lehre stellen<br />

viele <strong>Schnittstellen</strong> zu Webanwendungen<br />

allerdings Mischformen dar. Sie kombinieren<br />

HTTP-»GET« mit serverseitigen<br />

Methodenaufrufen. Das kennt jeder, der<br />

schon einmal URIs der Bauart »http://<br />

localhost/app?entry=15&action=delete«<br />

fabriziert hat.<br />

Datenquellen<br />

Sei es Soap, REST oder eine hybride Methode<br />

– viele Websites lassen sich dank<br />

ihres Web-API als Datenquelle nutzen.<br />

Das Titelthema dieses <strong>Linux</strong>-<strong>Magazin</strong>sbeschreibt<br />

mit <strong>Schnittstellen</strong> zu sozialen<br />

Netzwerken, E-Commerce-Software, Entwicklertools<br />

und geografischen Informationensystemen<br />

die wichtigsten Anwendungsszenarien.<br />

Wer sich nur mit seinem eigenen Bugtracker<br />

verbindet, muss außer der Technik<br />

wenig anderes bedenken. Bezieht er aber<br />

Kartendaten oder Preisinformationen von<br />

einem kommerziellen Anbieter, gilt es,<br />

auch die juristischen Rahmenbedingungen<br />

zu beachten. So gesehen gehört der<br />

auch Rechtsartikel „Hintertüren“ in diesem<br />

<strong>Magazin</strong> noch zum Titelthema. n<br />

Infos<br />

[1] Soap:<br />

[http:// www. w3. org/ 2002/ ws/ Activity]<br />

[2] XML-RPC:<br />

[http:// xmlrpc. scripting. com/ spec. html]<br />

[3] Roy Fielding, „Architectural Styles and<br />

the Design of Network-based Software<br />

Architectures“: [http:// www. ics. uci. edu/​<br />

~fielding/ pubs/ dissertation/ rest_arch_<br />

style. htm]<br />

Einführung 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

21<br />

Listing 1: Soap-Anfrage<br />

01 <br />

02 <br />

03 <br />

04 <br />

07 uuid:093a2da1‐q345‐739r‐ba5d‐pqff98fe8j7d<br />

08 2001‐11‐29T13:20:00.000‐05:00<br />

09 <br />

10 <br />

13 Åke Jógvan Øyvind<br />

14 <br />

15 <br />

16 <br />

17 <br />

19 <br />

20 New York<br />

21 Los Angeles<br />

22 2001‐12‐14<br />

23 late afternoon<br />

24 aisle<br />

25 <br />

26 <br />

27 Los Angeles<br />

28 New York<br />

29 2001‐12‐20<br />

30 mid‐morning<br />

31 <br />

32 <br />

33 <br />

34 <br />

36 none<br />

37 <br />

38 <br />

39


Titelthema<br />

www.linux-magazin.de Social-Network-APIs 12/2012<br />

22<br />

Wie OX und Zarafa auf die APIs von sozialen Netzwerken zugreifen<br />

Sortengerecht angezapft<br />

Die Groupwaresysteme Open-Xchange und Zarafa zapfen die APIs von Facebook, Twitter und Xing an und<br />

übernehmen deren Informationen in ihren Datenbestand. Damit das klappt, bedarf es einer eigenen Taktik für<br />

jeden Dienst – dennoch ist die Informationsausbeute manchmal ziemlich mager. Tim Schürmann<br />

© Valentyn Volkov Volkov, 123RF.com<br />

Das Backend mit der eigentlichen Anwendungslogik<br />

ist in Java geschrieben<br />

und kommt als so genanntes OSGI-<br />

Bundle [3] ins Haus, das mitgelieferte<br />

Frontend besteht aus einer normalen<br />

Webanwendung, die in jedem Browser<br />

läuft. OX integriert die Social Networks<br />

Facebook, Linked In, Twitter und Xing.<br />

Dabei importiert die Groupware Kontakte<br />

aus Facebook, Linked In und Xing, als<br />

Messaging-Dienst lassen sich Facebook<br />

und Twitter einbinden.<br />

Egal ob Privatperson oder Unternehmen,<br />

fast jeder Internetnutzer führt mittlerweile<br />

Benutzerkonten bei zahlreichen<br />

Social-Web-Diensten. Diese zu jonglieren<br />

und zu koordinieren ist gar nicht so einfach:<br />

Die Freunde chatten auf Facebook,<br />

die Kollegen vernetzen sich auf Xing,<br />

während alle auf Twitter-Nachrichten<br />

warten. Moderne Groupwaresysteme<br />

wie Open-Xchange und Zarafa zapfen auf<br />

Wunsch die Daten des Social Web an und<br />

führen sie mit den vorhandenen zusammen<br />

(Stichwort: Server Side Mashup). So<br />

findet der Groupwarebenutzer beispielsweise<br />

im Adressbuch automatisch auch<br />

die Kontakte aus Facebook – zumindest<br />

ist das die Grundidee.<br />

Offener Austausch<br />

Hinter der Groupware Open-Xchange<br />

(OX) steht die gleichnamige Firma in<br />

Nürnberg, die ihren Ursprung im Suse-<br />

Umfeld hat, und zwar mit dem SLOX<br />

(Suse <strong>Linux</strong> Open Xchange Server).<br />

Neben kommerziellen Varianten gibt es<br />

auch eine kostenlose Community Edition,<br />

die der GPLv2 unterliegt [1]. OX<br />

dürfte darüber hinaus vielen Kunden<br />

von 1&1 bekannt vorkommen: Das Unternehmen<br />

setzt die Groupware in einer<br />

Hosting-Variante unter dem Namen 1&1<br />

Mailxchange als Drehscheibe für seine<br />

E-Mail-Dienste ein.<br />

Einige <strong>Linux</strong>-Distributionen bringen OX<br />

bereits in den Repositories mit. Fehlen<br />

jedoch passende Pakete, gestaltet sich<br />

die Installation ziemlich fummelig, da<br />

zunächst diverse andere Komponenten,<br />

zum Beispiel Datenbank, Webserver und<br />

Postfix, eingerichtet sein wollen. Wer<br />

selbst keine OX-Installation aufsetzen<br />

möchte, findet unter [2] eine Testinstallation.<br />

Nach der notwendigen Registrierung<br />

lässt sich dort auch die Integration<br />

von Facebook & Co. online testen.<br />

Schlüsselmeister<br />

Jeden Dienst zapft im Hintergrund ein<br />

spezielles Plugin an. Mit Ausnahme von<br />

Xing nutzen die Plugins die von den Social<br />

Networks bereitgestellte Programmierschnittstelle<br />

(API). Damit das klappt,<br />

muss der Admin zunächst den Zugriff<br />

bei den Diensten erlauben. Dazu erstellt<br />

er als Erstes über die Entwicklerseiten<br />

von Facebook & Co. eine so genannte<br />

Anwendung (auch als Application bezeichnet).<br />

Der Kasten „Gezwitscher“<br />

zeigt exemplarisch, wie dies bei Twitter<br />

funktioniert.<br />

Am Ende erhält er einen oder mehrere<br />

Schlüssel (Keys), die er in der entsprechenden<br />

OX-Konfigurationsdatei hinterlegt.<br />

Die Twitter-Schlüssel gehören beispielsweise<br />

in die Datei »twitter.properties«.<br />

Der Schlüssel ist für den Betrieb<br />

zwingend erforderlich, die Gründe erläu-<br />

DELUG-DVD<br />

DELUG-DVD<br />

Auf der Delug-DVD finden Sie<br />

in drei Unterverzeichnissen die im Artikel<br />

beschriebene Programme: den HTML-Parser<br />

Htmlunit, das Zarafa-Twitter-Plugin sowie<br />

Scribe-Java fürs Screen-Grabbing.


Abbildung 1: Damit OX auf Twitter zugreifen kann, muss der Entwickler<br />

zunächst eine Applikation erstellen.<br />

tert Karsten Will von der Open-Xchange<br />

GmbH: „Je nach Netz ist dieser spezifisch<br />

für die URL des Servers, auf dem die<br />

(aus der Sicht des Dienstes) Clientapplikation<br />

betrieben wird. Ohne Key kein Zugriff.<br />

Teilweise schränken die Netzwerke<br />

noch die Keys auf bestimmte Funktionen<br />

ein. Bei Linked In ist es beispielsweise<br />

so, dass reguläre Nutzer des API keinen<br />

Zugriff auf die E-Mail-Adressen von<br />

Connections oder Profilen erhalten. Dies<br />

ist privilegierten Partnern wie uns oder<br />

Microsoft vorbehalten.“<br />

Bei Facebook anklopfen mit<br />

Oauth und Scribe<br />

Die Authentifizierung erfolgt bei allen<br />

Diensten über das Oauth-Protokoll [5].<br />

Die dabei ablaufende Kommunikation<br />

wickelt OX jedoch nicht selbst ab: „Wir<br />

benutzen [die Java-Bibliothek (Red.)]<br />

Scribe [6] als Grundlage<br />

für die Oauth-<br />

Authentifizierung gegenüber<br />

den Diensten,<br />

angepasst an unsere<br />

eigenen Bedürfnisse“,<br />

so Karsten Will.<br />

Dank Scribe genügen<br />

die wenigen Zeilen<br />

aus Listing 1, um die<br />

Kontakte aus Facebook<br />

rauszusaugen. Das<br />

Listing zeigt gekürzt<br />

die Funktion »getContacts()«<br />

aus der Klasse<br />

»com.openexchange.<br />

oauth.FacebookServiceImpl«.<br />

Im ersten Schritt teilt OX Scribe mit, dass<br />

es auf Facebook zugreifen möchte. OX<br />

muss dazu in Zeile 4 nur die API-Schlüssel<br />

und eine Provider-Klasse »FacebookApi.class«<br />

übergeben. Diese verrät<br />

Scribe, dass ein Zugriff auf Facebook erwünscht<br />

ist.<br />

In den Zeilen 6 bis 10 erstellt OX ein so<br />

genanntes Access-Token, das es jeder Anfrage<br />

an Facebook beifügen<br />

muss. Mit dem<br />

Token in der Hand generiert<br />

OX in Zeile 11<br />

eine neue Anfrage an<br />

Facebook, mit der es<br />

Zugriff auf das Profil<br />

des Benutzers einfordert.<br />

Anschließend<br />

packt es das zuvor erstellte<br />

Token zur Anfrage<br />

(»service.signRequest()«).<br />

Die Anweisungen ab Zeile 15 lösen aus<br />

der Antwort die User-ID heraus. Mit ihr<br />

baut OX ab Zeile 20 eine neue Anfrage<br />

zusammen, die alle Kontakte dieses Benutzers<br />

aus Facebook abfragt. Das Ergebnis<br />

dieser Anfrage ist ein Json-Objekt, das<br />

»parseIntoContacts()« in eine Liste mit<br />

»Contact«-Objekten umwandelt.<br />

Diese Objekte verarbeitet wiedrum OX<br />

weiter. „Intern werden aus den Daten<br />

der Sozialen Netzwerke erst Java- und<br />

dann Json-Objekte, die die Software zum<br />

Beispiel an den Browser weiterreicht“,<br />

erläutert Karsten Will. Wer in die einzelnen<br />

Abläufe noch tiefer eintauchen<br />

möchte, sollte sich zunächst Scribe und<br />

dort besonders die Beispielprogramme<br />

anschauen [7]. Sie erleichtern Einsteigern<br />

das Verständnis des OX-Codes.<br />

Nicht alles geht einfach<br />

Welche Informationen die Social-Plugins<br />

so aus den Diensten herausziehen können,<br />

hängt maßgeblich von dem bereitgestellten<br />

API des Dienstes ab. So liest<br />

das Facebook-Plugin für jeden Kontakt<br />

Abbildung 2: Das Ergebnis sind zwei Schlüssel, die wiederum in der OX-<br />

Konfiguration landen müssen.<br />

Social-Network-APIs 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

23<br />

Gezwitscher<br />

Um OX den Zugriff auf Twitter zu erlauben,<br />

wechselt der Admin zunächst auf die Entwicklerseiten<br />

unter [4]. Dort meldet er sich an,<br />

klickt auf »Create a new application« und füllt<br />

das Formular aus. Der »Name« der Anwendung<br />

erscheint später in OX, wenn dort der Zugriff<br />

auf Twitter erlaubt wird (Abbildung 1). Die beiden<br />

URLs können auf die eigene Homepage<br />

verweisen, wichtig ist nur, dass eine Callback-<br />

URL existiert.<br />

Jetzt am unteren Rand die Lizenzbedingungen<br />

abnicken, das Captcha ausfüllen und auf<br />

»Create your Twitter application« klicken. Im<br />

neuen Fenster wechselt der Admin auf das Register<br />

»Settings«, setzt den Zugriff (»Access«)<br />

auf »Read and Write« und lässt die Einstellungen<br />

via »Update this Twitter application's<br />

settings« aktualisieren.<br />

Schlüssel übertragen<br />

Auf dem Register »Details« finden sich jetzt<br />

unter den »OAuth settings« zwei kryptische<br />

Schlüssel (Abbildung 2): »Consumer key« und<br />

»Consumer secret«. Diese packt der Admin in<br />

die Konfigurationsdatei »/opt/open‐xchange/<br />

etc/groupware/twitter.properties«, den »Consumer<br />

key« trägt er hinter »com.openexchange.<br />

twitter.consumerKey=« ein, das »Consumer secret«<br />

hinter »com.openexchange.twitter.consumerSecret=«.<br />

Die vorhandenen kryptischen<br />

Zeichenketten kann er einfach überschreiben.<br />

Danach lässt sich das Twitter-Konto mit dem<br />

Assistenten einbinden.<br />

Nun ist in OX noch jeder gewünschte Dienst<br />

einzurichten. Das übernimmt normalerweise<br />

der beim ersten Start der OX-Webober fläche<br />

erscheinende Assistent (Abbildung 3). In ihm<br />

klickt man auf das Symbol des entsprechenden<br />

Dienstes, vergibt einen passenden Accountnamen<br />

und lässt den Zugriff per »OK« autorisieren.<br />

Dazu öffnet OX ein neues Fenster mit einer<br />

Seite des Dienstes. Auf dem gibt der Admin die<br />

Groupware noch einmal explizit frei, indem er<br />

Benutzernamen und Passwort eintippt. Fertig<br />

sieht das Ganze aus wie in Abbildung 4.


Titelthema<br />

www.linux-magazin.de Social-Network-APIs 12/2012<br />

24<br />

Abbildung 3: Der Assistent übernimmt die Integration des Social Network in OX.<br />

Abbildung 4: Nach der Anmeldung bei Twitter integriert OX die Tweets.<br />

den Nickname, den Nachnamen, das<br />

Geburtsdatum, das Bild, den Wohnort,<br />

die Stadt und die Postleitzahl. Andere<br />

Plugins schaffen mehr, etwa das Xing-<br />

Plugin. Eine ausführliche Liste, welches<br />

Plugin welche Informationen aus welchen<br />

Diensten anzapft, findet sich unter<br />

[8]. Anfragen oder Aufträge zu Plugins<br />

für weitere Dienste nimmt übrigens die<br />

Open-Xchange GmbH gerne an.<br />

Kreuzweise anzapfen mit<br />

Screen-Scraping bei Xing<br />

Ein kleiner Spezialfall ist Xing. Diesen<br />

Dienst zapft OX nicht über ein API, sondern<br />

per Screen-Scraping-Technik an.<br />

Dabei ruft OX die Xing-Seiten wie ein<br />

normaler Benutzer auf und liest dann aus<br />

den zurückgelieferten HTML-Seiten die<br />

benötigten Informationen aus. Warum<br />

Xing eine solche Extrawurst benötigt, erklärt<br />

Karsten Will: „Bei Xing nutzen wir<br />

noch Screen-Scraping, weil das Xing-API<br />

zwar seit letztem Dezember im Betatest<br />

ist, aber noch nicht über den initialen<br />

Kreis von 1000 Entwicklern hinaus verfügbar<br />

gemacht wurde.“<br />

Wie OX an die Daten auf Xing herankommt,<br />

steuert die Datei »XING.yml« im<br />

Unterverzeichnis »/opt/open‐xchange/<br />

etc/groupware/crawlers«. Durch diese<br />

Auslagerung der Programmlogik können<br />

die Entwickler schneller auf Änderungen<br />

bei Xing reagieren: Modifiziert Xing<br />

den HTML-Quellcode seiner Seiten, so<br />

müssen die OX-Entwickler lediglich die<br />

».yml«-Datei aktualisieren.<br />

Wie Listing 2 zeigt, ist diese noch nicht<br />

einmal besonders lang. Ihre Inhalte folgen<br />

der Auszeichnungssprache Yaml [9].<br />

Interessant sind die Zeilen nach »steps«.<br />

Sie sind von oben nach unten recht einfach<br />

zu lesen und beschreiben den Login-<br />

Vorgang bei Xing sowie anschließend den<br />

Weg zu den Kontakten.<br />

Kaffeezeit<br />

Als Erstes öffnet OX die Homepage<br />

»www.xing.com«. Das Feld für die Eingabe<br />

des Benutzernamens hört auf den<br />

internen Namen »login_user_name«, wie<br />

ein Blick in den Seitenquelltext der Xing-<br />

Homepage beweist. Dort trägt OX den<br />

Benutzernamen ein. Nach dem gleichen<br />

Prinzip verfährt es mit den restlichen Elementen.<br />

Nach dem Login wechselt OX<br />

auf die Seite mit den Kontakten, indem es<br />

an die Basis-URL »www.xing.com« noch<br />

Listing 1: »getContacts()«<br />

01 public List getContacts(Session<br />

session, int user, int contextId, int<br />

accountId) {<br />

02 <br />

03 List contacts = new ArrayList<br />

();<br />

04 OAuthService service = new ServiceBuilder().<br />

provider(FacebookApi.class).apiKey<br />

(facebookMetaData.getAPIKey()).apiSecret<br />

(facebookMetaData.getAPISecret()).build();<br />

05 <br />

06 OAuthAccount account = null;<br />

07 account = oAuthService.getAccount(<br />

accountId, session, user, contextId);<br />

08 <br />

09 // get the users own profile (for his id)<br />

with the given access token<br />

10 Token accessToken = new Token(account.<br />

getToken(), account.getSecret());<br />

11 OAuthRequest ownProfileRequest = new<br />

OAuthRequest(Verb.GET, "https://graph.<br />

facebook.com/me");<br />

12 service.signRequest(accessToken,<br />

ownProfileRequest);<br />

13 Response ownProfileResponse =<br />

ownProfileRequest.send();<br />

14 <br />

15 String myuid = "";<br />

16 JSONObject object = new JSONObject<br />

(ownProfileResponse.getBody());<br />

17 myuid = object.getString("id");<br />

18 <br />

19 // get the users connections<br />

20 OAuthRequest connectionsRequest = new<br />

OauthRequest(<br />

21 Verb.GET,<br />

22 "https://api.facebook.com/method/fql.<br />

query?query=SELECT%20name,first_name,<br />

last_name,email,birthday_date,pic_big,<br />

hometown_location%20from%20user%20where<br />

%20uid%20in%20%28SELECT%20uid2%20from<br />

%20friend%20where%20uid1=" + myuid +<br />

"%29&format=JSON");<br />

23 service.signRequest(accessToken,<br />

connectionsRequest);<br />

24 Response connectionsResponse =<br />

connectionsRequest.send();<br />

25 <br />

26 // parse the returned JSON into neat little<br />

contacts<br />

27 contacts = parseIntoContacts<br />

(connectionsResponse.getBody());<br />

28 }<br />

29 <br />

30 return contacts;<br />

31 }


ein »/app/contact« anhängt und dann<br />

die Kontaktdaten im universellen Vcard-<br />

Format anfordert.<br />

Den eigentlichen Aufruf beziehungsweise<br />

das Auslesen der Seite übernehmen die in<br />

Listing 2 genannten Java-Klassen. Um<br />

die Anmeldung kümmert sich beispielsweise<br />

»com.openexchange.subscribe.<br />

crawler.LoginPageStep«. Diese Klasse<br />

parst einfach die HTML-Seite, setzt die<br />

Login-Informationen in die entsprechenden<br />

Felder ein und schickt die manipulierte<br />

Seite wieder an Xing zurück.<br />

Htmlunit<br />

Listing 3 zeigt einen Ausschnitt aus der<br />

relevanten Methode »execute()«. Nach<br />

dem gleichen Prinzip arbeiten auch die<br />

übrigen Klassen. Wem die Klassen »HtmlForm«,<br />

»HtmlTextInput« & Co. bekannt<br />

vorkommen: OX greift auf die Hilfsbibliothek<br />

Htmlunit [10] zurück, eine Java-<br />

Bibliothek, die nützliche Funktionen zum<br />

Abholen und Manipulieren von HTML-<br />

Seiten anbietet.<br />

Die von den Plugins aus den Social Networks<br />

gezogenen Daten integriert OX<br />

in seinen Datenbestand. So tauchen die<br />

Adressen aus Facebook unter den »Kontakten«<br />

auf. Von dort aus reicht sie OX<br />

auf Wunsch sogar an andere OX-Installationen<br />

weiter oder macht sie Freunden<br />

und Kollegen über eine eigene URL<br />

zugänglich. Alle diese Funktionen und<br />

Konzepte fasst der Hersteller unter dem<br />

Begriff Social OX zusammen.<br />

Soziale Giraffe<br />

Hinter der Groupware Zarafa steht die<br />

gleichnamige niederländische Firma. In<br />

Deutschland hat sie Niederlassungen in<br />

Hannover (in Form der Zarafa Deutschland<br />

GmbH) und in Plochingen bei Stuttgart.<br />

Genau wie OX gibt es Zarafa in<br />

mehreren kommerziellen und einer kostenlosen<br />

Open-Source-Variante, die unter<br />

der Affero GPLv3 steht [11]. Fertige Pakete<br />

stehen für die größeren Distributionen<br />

bereit, in der Distribution Zentyal ist<br />

Zarafa zudem bereits enthalten.<br />

Um die Verwaltung der Daten kümmert<br />

sich im Hintergrund der in C++ geschriebene<br />

Zarafa-Server. Seine Dienste<br />

lassen sich über verschiedene <strong>Schnittstellen</strong><br />

in Anspruch nehmen. In der Regel<br />

verwalten die Nutzer ihre Daten über die<br />

Listing 2: »XING.yml«<br />

01 ‐‐‐ !com.openexchange.subscribe.crawler.<br />

CrawlerDescription<br />

02 displayName: XING<br />

03 id: com.openexchange.subscribe.xing<br />

04 priority: 2<br />

05 workflowString: |<br />

06 ‐‐‐ !com.openexchange.subscribe.crawler.<br />

Workflow<br />

07 steps:<br />

08 ‐ !com.openexchange.subscribe.crawler.<br />

LoginPageStep<br />

09 baseUrl: "https://www.xing.com"<br />

10 description: Login to www.xing.com<br />

11 linkAvailableAfterLogin: /app/contact<br />

12 nameOfLoginForm: loginform<br />

13 nameOfPasswordField: login_password<br />

Listing 3: »execute()«<br />

01 public void execute(final WebClient webClient)<br />

throws SubscriptionException {<br />

02 HtmlPage loginPage = null;;<br />

03 try {<br />

04 // Get the page, fill in the credentials<br />

and submit the login form<br />

05 loginPage = webClient.getPage(url);<br />

06 this.loginPage = loginPage;<br />

07 final HtmlForm loginForm =<br />

loginPage.getFormByName(nameOfLoginForm);<br />

Zarafa-Webapp, eine kleine Webanwendung<br />

(Abbildung 5, [12]).<br />

Um die Anbindung von Twitter kümmert<br />

sich das Twidget-Plugin [13]. Innerhalb<br />

der Webapp erscheint es als Widget, das<br />

man auf die Startseite oder in die Leiste<br />

am rechten Rand legen kann. Dort aktiviert<br />

durchsucht es den Text einer gerade<br />

geöffneten E-Mail nach einem Twitter-Account.<br />

Sofern dieser in der Form »twitter.<br />

com/timschuermann« oder »@timschuermann«<br />

auftaucht, zeigt das Widget<br />

die letzten Nachrichten in einer Liste an<br />

(Abbildung 5). Mehr kann es nicht – was<br />

14 nameOfUserField: login_user_name<br />

15 pageTitleAfterLogin: /app/contact<br />

16 password: ""<br />

17 url: "https://www.xing.com"<br />

18 username: ""<br />

19 ‐ !com.openexchange.subscribe.crawler.<br />

TextPagesByLinkStep<br />

20 description: Get all vcards as text pages<br />

21 linkpart: /app/contact?op=vcard;scr_id<br />

22 offset: 10<br />

23 urlAfterOffset: ""<br />

24 urlBeforeOffset: "https://www.xing.com<br />

/app/contact?notags_filter=0;search_filter=;<br />

tags_filter=;offset="<br />

25 ‐ !com.openexchange.subscribe.crawler.<br />

ContactObjectsByVcardTextPagesStep {}<br />

08 final HtmlTextInput userfield =<br />

loginForm.getInputByName(nameOfUserField);<br />

09 userfield.setValueAttribute(username);<br />

10 final HtmlPasswordInput passwordfield =<br />

loginForm.getInputByName(nameOfPasswordField);<br />

11 passwordfield.setValueAttribute(password);<br />

12 final HtmlPage pageAfterLogin = (HtmlPage)<br />

loginForm.submit(null);<br />

13 output = pageAfterLogin;<br />

14 [...]<br />

Social-Network-APIs 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

25<br />

Listing 4: »loadRecord()«<br />

01 loadRecord : function(record)<br />

02 {<br />

03 var body = record.getBody(false);<br />

04 var re = new RegExp("twitter.com/(\\w+)");<br />

05 var twitter = undefined;<br />

06 <br />

07 var match = re.exec(body);<br />

08 if (Ext.isEmpty(match)) {<br />

09 re = new RegExp("^(.*?\\W)?@<br />

(\\w{1,15})\\b");<br />

10 match = re.exec(body);<br />

11 twitter = match[2];<br />

12 } else {<br />

13 twitter = match[1];<br />

14 }<br />

15 <br />

16 if (twitter !== undefined) {<br />

17 var count = this.get('max_count');<br />

18 var rts = this.get('include_rts');<br />

19 <br />

20 Ext.ux.JSONP.request({<br />

21 url : 'https://api.twitter.com/1/<br />

statuses/user_timeline.json',<br />

22 params: {<br />

23 screen_name: twitter,<br />

24 count: String(count),<br />

25 include_rts: String(rts)<br />

26 },<br />

27 success : this.onTwitterUpdate,<br />

28 callbackKey : 'callback',<br />

29 scope : this<br />

30 });<br />

31 }<br />

32 },


Titelthema<br />

www.linux-magazin.de Social-Network-APIs 12/2012<br />

26<br />

01 fbinit: function()<br />

02 {<br />

03 // Init the SDK<br />

04 FB.init({<br />

durchaus gewollt ist: Das Twidget-Plugin<br />

diente beim Entwicklertreffen Zarafa<br />

Summercamp als Beispiel, wie einfach<br />

und schnell sich eigene Widgets entwickeln<br />

lassen [13].<br />

Wie alle Widgets besteht auch das Twidget-Plugin<br />

aus ein bisschen Javascript.<br />

An den Quellcode gelangt, wer sich das<br />

Plugin herunterlädt, es entpackt und das<br />

dabei herausgepurzelte Archiv »twidget‐1.1.zip«<br />

extrahiert. Die eigentliche<br />

Logik steckt in der Datei »Twidget.js« im<br />

Unterverzeichnis »twidget‐1.1/js«. Die<br />

darin enthaltenen Funktionen sind gut<br />

kommentiert, die Hauptarbeit steckt in<br />

der Funktion »loadRecord« (Listing 4).<br />

Twitter und Regex<br />

Zunächst löst sie mit Hilfe von regulären<br />

Ausdrücken die Twitter-Adresse aus dem<br />

Text einer E-Mail. Sofern sie eine solche<br />

Twitter-Adresse gefunden hat (»twitter«<br />

ist in dem Fall nicht »undefined«), baut<br />

sie eine Anfrage an Twitter im Jsonp-<br />

Format [14] zusammen und schickt das<br />

Ganze los. Um die von Twitter zurückgelieferten<br />

Nachrichten kümmert sich<br />

die (Callback-)Funktion »onTwitterUpdate()«,<br />

die wiederum die Nachrichten<br />

anzeigt. »max_count« und »include_rts«<br />

Listing 5: »FB.init()«<br />

05 appId : '223761867729127', // App ID<br />

06 channelUrl : '//'+'zarafa.com.test'+'/channel',<br />

// Path to your Channel File<br />

07 status : true, // check login status<br />

08 cookie : true, // enable cookies to allow the<br />

server to access the session<br />

09 xfbml : true // parse XFBML<br />

10 });<br />

11 },<br />

Listing 6: »doRequest()« aus<br />

»FbEventProxy«<br />

01 doRequest: function(action, rs, params, reader,<br />

callback, scope, options) {<br />

02 if (action == 'read') {<br />

03 FB.api('/me/events', function(data) {<br />

04 callback.call(scope, reader.readRecords(data),<br />

{}, true);<br />

05 });<br />

06 }<br />

07 }<br />

Abbildung 5: Wer unter Zarafa eine E-Mail öffnet, die auf einen Twitter-Account verweist, dem zeigt das<br />

Twidget-Plugin (hier ganz rechts im Bild) die dortigen Tweets an.<br />

Ivo Timmermans von Zarafa erklärt<br />

dazu: „Das Problem mit diesem Plugin<br />

ist, dass Facebook nur eine Seite pro Installation<br />

erlaubt und damit von jedem<br />

Administrator, der dieses Plugin nutzen<br />

möchte, verlangt, eine Anwendung auf<br />

Facebook zu erstellen. Er benötigt somit<br />

jeweils einen Facebook-Account und<br />

muss durch den Registrierungsprozess<br />

einer Facebook-Anwendung gehen. Dass<br />

die Namen dieser Anwendungen zudem<br />

global eindeutig sein müssen, macht die<br />

Installation kompliziert.“<br />

Der Quellcode des Facebook-Plugins liegt<br />

der Webapp allerdings schon bei. Wer<br />

mag, kann es direkt in Betrieb nehmen,<br />

ist dabei aber gänzlich auf sich allein<br />

gestellt: Bis auf eine magere Wiki-Seite<br />

[15] existiert bislang keine Dokumentation.<br />

Das Veranstaltungs-Plugin besteht<br />

wie seine beiden Kollegen aus Javascript-<br />

Code, der wiederum einfach auf das offizielle<br />

Facebook-Javascript-SDK [16]<br />

zurückgreift.<br />

Hat man sich einmal durch dessen Dokumentation<br />

gekämpft, erweisen sich<br />

die Dateien als leicht zu lesen: Zunächst<br />

initialisiert »FacebookEvents Plugin« das<br />

Facebook-SDK über die dafür vorgesehene<br />

Funktion »FB.init()« aus Listing<br />

5. Dabei erhält die Funktion auch die<br />

Anwendungs-ID, die das Anlegen der<br />

Facebook-Anwendung erzeugt.<br />

Die eigentliche Abfrage führt dann »FbEventProxy«<br />

mit seiner Funktion »doRequest()«<br />

aus, die Listing 6 zeigt. Sie aktiviert<br />

lediglich die Funktion »FB.api()«<br />

aus dem Facebook-SDK, die wiederum<br />

alle Veranstaltungen (»events«) des Benutzers<br />

(»me«) abruft [17]. Alle übrigen<br />

Javascript-Objekte und -Funktionen des<br />

Zarafa-Plugins dienen im Wesentlichen<br />

dazu, die zurückgelieferten Daten aussind<br />

Einstellungen des Twidget, die man<br />

in der Webapp mit einem Klick auf das<br />

Zahnradsymbol ändern kann.<br />

Neben dem Plugin für Twitter gibt es<br />

auch noch zwei Kollegen für Facebook.<br />

Das erste zeigt auf der Startseite die Einträge<br />

einer Pinnwand an (Abbildung 6).<br />

Von welcher Seite die Pinnwand-Nachrichten<br />

stammen, gibt der Admin in<br />

den Einstellungen des Plugins vor. Dort<br />

hinterlegt er jedoch nicht etwa den Benutzernamen<br />

eines Facebook-Mitglieds,<br />

sondern die URL einer Internetseite, die<br />

den offiziellen Facebook-Knopf »Gefällt<br />

mir« anbietet.<br />

Unter der Haube funktioniert das Facebook-Plugin<br />

ähnlich wie das Twidget: Es<br />

bindet auf der Zarafa-Seite einen Iframe<br />

ein, in dem es wiederum den Inhalt der<br />

Seite »http://www.facebook.com/plugins/activity.php?site=linux‐magazin.de«<br />

anzeigt. »linux‐magazin.de« ist dabei die<br />

in den Einstellungen hinterlegte Seite.<br />

Dieses Verfahren hat zwar den Vorteil,<br />

dass sich Zarafa nicht bei Facebook anmelden<br />

muss, im Gegenzug bleiben die<br />

Kontakte und alle weiteren persönlichen<br />

Informationen aber ungenutzt.<br />

Versteckspiel<br />

Schließlich existiert noch ein drittes<br />

Plugin, das die Veranstaltungen aus<br />

Facebook in den Kalender von Zarafa<br />

übernimmt. An die Daten gelangt das<br />

Plugin über das offizielle Facebook-API,<br />

es bedarf folglich wie bei OX zunächst<br />

einer Facebook-Anwendung, dann muss<br />

der Admin den Schlüssel wiederum dem<br />

Plugin mitteilen. Genau diese komplizierte<br />

Installation ist auch der Grund,<br />

warum die Zarafa-Entwickler das Plugin<br />

noch nicht offiziell freigegeben haben.


Tel. 0 64 32 / 91 39-749<br />

Fax 0 64 32 / 91 39-711<br />

vertrieb@ico.de<br />

www.ico.de/linux<br />

Innovative Computer • Zuckmayerstr. 15 • 65582 Diez<br />

Neueste Intel<br />

®<br />

Xeon<br />

® Prozes-<br />

soren. Jetzt mit<br />

bis zu 8 Kernen/16<br />

Threads pro CPU<br />

und bis zu 80%<br />

mehr Leistung!<br />

GmbH<br />

SEIT 1982<br />

Social-Network-APIs 12/2012<br />

Titelthema<br />

Abbildung 6: Das Facebook-Widget in Zarafa zeigt lediglich die Einträge der Pinnwand an, hier rechts im Bild<br />

die des <strong>Linux</strong>-<strong>Magazin</strong>-Facebook-Accounts.<br />

zuwerten beziehungsweise anzuzeigen.<br />

Wer weiter in den Quellcode hinabsteigen<br />

möchte, findet die Facebook-Plugins<br />

im Webapp-Quellcode-Archiv [12] in den<br />

Unterverzeichnissen »plugins/facebook«<br />

und »plugins/facebookwidget«.<br />

Fazit<br />

Wie Open-Xchange beweist, kostet es derzeit<br />

einigen Aufwand, um die Daten aus<br />

den Social Networks herauszuholen und<br />

zu verarbeiten. Dies liegt aber weniger an<br />

den Groupware-Entwicklern als an den<br />

Diensten selbst. Sie zwingen dem Administrator<br />

zunächst online das Erstellen<br />

einer Anwendung auf und rücken dann<br />

auch noch nicht einmal alle Informationen<br />

heraus. Wo ein API fehlt, muss OX<br />

sogar umständlich per Screen-Scraping<br />

die HTML-Seiten auseinandernehmen –<br />

eine Methode, bei der die Entwickler den<br />

Änderungen des Dienstes zwangsweise<br />

hinterherlaufen.<br />

Die Entwickler von Zarafa machen es sich<br />

hingegen leicht: Das Facebook-Plug in für<br />

die Veranstaltungen bleibt versteckt, die<br />

anderen zapfen einfach nur die öffentlichen<br />

Streams von Twitter und Facebook<br />

an. Das geht allerdings auch ganz unkompliziert<br />

ohne den Einsatz von Hilfsbibliotheken<br />

wie Scribe. (mfe) n<br />

Infos<br />

[1] OX Community Edition: [http:// knowledgebase.<br />

open‐xchange. com/ download‐install/<br />

community‐edition. html]<br />

[2] OX.io: [https:// www. ox. io]<br />

[3] Wikipedia zu OSGI:<br />

[http:// de. wikipedia. org/ wiki/ OSGI]<br />

[4] Twitter-Entwicklerseiten:<br />

[https:// dev. twitter. com/ apps]<br />

[5] Oauth-Protokoll: [http:// oauth. net]<br />

[6] Scribe: [https:// github. com/​<br />

fernandezpablo85/ scribe‐java]<br />

[7] Scribe-Beispiele:<br />

[https:// github. com/ fernandezpablo85/​<br />

scribe‐java/ tree/ master/ src/ test/ java/​<br />

org/ scribe/ examples]<br />

[8] Von den OX-Plugins lesbare Daten:<br />

[http:// oxpedia. org/ wiki/ index. php?​<br />

title=SupportedCrawler]<br />

[9] Wikipedia zu Yaml:<br />

[http:// de. wikipedia. org/ wiki/ YAML]<br />

[10] Htmlunit:<br />

[http:// htmlunit. sourceforge. net]<br />

[11] Zarafa-Community-Version:<br />

[https:// community. zarafa. com]<br />

[12] Zarafa-Webapp: [https:// community.​<br />

zarafa. com/ pg/ plugins/ project/ 736/​<br />

developer/ zarq/ zarafa‐webapp]<br />

[13] Zarafas Twidget-Plugin:<br />

[https:// community. zarafa. com/ pg/​<br />

plugins/ project/ 12909/ developer/ zarq/​<br />

webapp‐twitter‐widget]<br />

[14] Wikipedia zu Jsonp:<br />

[http:// en. wikipedia. org/ wiki/ JSONP]<br />

[15] Zarafa-Facebook-Plugin:<br />

[http:// www. zarafa. com/ wiki/ index. php/​<br />

Facebook_plugin_installation]<br />

[16] Facebook-Javascript-SDK:<br />

[https:// developers. facebook. com/ docs/​<br />

reference/ javascript/]<br />

[17] Facebook-Javascript-SDK-Referenz zur<br />

Funktion »FB.api«:<br />

[http:// developers. facebook. com/ docs/​<br />

reference/ javascript/ FB. api/]<br />

BALIOS R16A 1HE SERVER<br />

• Intel ® Xeon ® E3-1220 V2 3,1GHz S1155<br />

• 2x 4GB DDR3-1600 RAM<br />

• 4x 1TB 24x7 SATA-2 HDD<br />

• Adaptec 6405E RC<br />

• Intel ® Remote Management<br />

• 2x Gigabit-LAN<br />

• Systemtest mit Debian <strong>Linux</strong> 6<br />

inkl. MwSt.<br />

exkl. MwSt.<br />

1664, 81 1399,-<br />

Art.Nr. BTO-2986611<br />

XANTHOS R25C 2HE SERVER<br />

• 2x Intel ® Xeon ® E5-2403 1,8GHz 6,4GT 10MB 4C<br />

• 6x 4GB DDR3-1600 RAM<br />

• 4x 1TB 24x7 SATA-2 HDD<br />

• Adaptec 6405 RC + NAND BBU<br />

• 2x Gigabit-LAN<br />

• Systemtest mit Debian <strong>Linux</strong> 6<br />

inkl. MwSt.<br />

exkl. MwSt.<br />

2616, 81 2199,-<br />

Art.Nr. BTO-2986612<br />

BALIOS R45B 4HE STORAGE SERVER<br />

• Intel ® Xeon ® E3-1220 V2 3,1GHz S1155<br />

• 2x 4GB DDR3-1600 RAM<br />

• 16x 1TB 24x7 SATA-2 HDD<br />

• Adaptec 51645 + BBU<br />

• 2x Gigabit-LAN<br />

• Systemtest mit Debian <strong>Linux</strong> 6<br />

inkl. MwSt.<br />

exkl. MwSt.<br />

www.linux-magazin.de<br />

3606, 81 3199,-<br />

Art.Nr. BTO-2986613<br />

27<br />

Intel<br />

® , Intel ® Logo, Intel ® Inside, Intel ® Inside Logo, Atom, Atom Inside,<br />

Xeon und Xeon Inside sind Marken der Intel Corporation in den USA und<br />

anderen Ländern.<br />

Alle Preise in Euro<br />

wir liefern auch<br />

nach Österreich<br />

u. in die Schweiz


Titelthema<br />

www.linux-magazin.de E-Commerce-APIs 12/2012<br />

28<br />

Webservices von Ebay und Amazon nutzen<br />

Weg wie warme Semmeln<br />

Gutgehende Onlineshops sind selten und das Ergebnis langer Arbeit. Wer gerade erst beginnt Waren zu verticken,<br />

tut gut daran, bei einem großen Shoppingportal unterzuschlüpfen. Über APIs lassen sich eigene Warenwirtschafts-<br />

oder Buchhaltungsprogramme anbinden. Bernhard Bablok<br />

abgewickelt. Dazu zählen das Einblenden<br />

von Suchergebnissen auf der eigenen<br />

Website oder die Marktforschung. Der<br />

Bedarf an <strong>Schnittstellen</strong> ist also vorhanden<br />

und sowohl Ebay als auch Amazon<br />

bieten hier umfassende Lösungen an.<br />

Als willkommener Nebeneffekt drängen<br />

beide Internetkonzerne Software zurück,<br />

die ihre Websites maschinell bedienen.<br />

Diese im frühen Web verbreitete Technik<br />

ist einfach zu fehleranfällig, da vom konkreten<br />

Webdesign abhängig.<br />

E Ebay<br />

© kzenon, 123RF.com<br />

Die meisten neuen Webshops kommen,<br />

wenn überhaupt, nur holpernd in Gang.<br />

Selbst eine Suchmaschinenoptimie rung<br />

der eigenen Website garantiert noch<br />

keine hohe Klick- und Kaufrate, ganz<br />

zu schweigen von der fehlenden Reputation<br />

neuer Shops. Hinzu kommen die<br />

Einstandskosten für das Aufsetzen und<br />

Anpassen der Onlineshop-Software, für<br />

Werbung sowie der Aufwand für Kaufund<br />

Zahlungsabwicklung.<br />

Als Lösung sehen viele aufstrebende<br />

Verkäufer große florierende E-Commerce-<br />

Plattformen an. Insbesondere Ebay und<br />

Amazon sind attraktiv, bei denen unzählige<br />

Verbraucher ihre Shoppingtouren<br />

beginnen. Die Firmen haben schon längst<br />

ihre Aktivitäten über Auktionen und<br />

Buchhandel hinaus ausgeweitet, und sie<br />

bieten ihre E-Commerce-Infrastruktur<br />

auch unabhängigen Händlern an.<br />

Die Waren der kooperierenden Händler<br />

erscheinen automatisch in den Trefferlisten<br />

der Verbraucher, und auch die Kaufabwicklung<br />

– Warenkorb füllen, Versandund<br />

Zahlungsmethoden wählen, „Jetzt<br />

kaufen!“ – läuft außerhalb des eigenen<br />

Shops. Services wie Zahlungsabwicklung<br />

oder Versand, hier gibt es Unterschiede in<br />

Umfang und Detail, sind ebenfalls möglich.<br />

Das alles ist nicht kostenlos, sowohl<br />

Ebay als auch Amazon verdienen an jedem<br />

verkauften Artikel mit.<br />

Kleinstanbieter managen ihre Waren und<br />

Geschäftsvorgänge per Webinterface von<br />

Hand. Aber schon bei wenigen Transaktionen<br />

pro Tag ist eine manuelle Pflege der<br />

Vorgänge ebenso mühsam wie fehleranfällig.<br />

Hier kommt Fremdsoftware ins<br />

Spiel, die auf die E-Commerce-Infrastruktur<br />

des Anbieters zugreift, allerdings<br />

nicht über die Webseiten, sondern über<br />

Standardschnittstellen.<br />

Jenseits von Angebot und Verkauf existieren<br />

noch andere Anwendungsfälle, die der<br />

Händler besser über eigene Programme<br />

Den Einstiegspunkt in die maschinellen<br />

<strong>Schnittstellen</strong> bei Ebay eröffnet [1]. Hier<br />

findet der Entwickler Guides, Tutorials,<br />

die APIs, Developer-Kits, eine Knowledgebase<br />

und vieles mehr. Die Ebay-APIs sind<br />

sehr umfangreich, Tabelle 1 gibt einen<br />

Überblick. Alleine die Dokumentation<br />

des Trading-API umfasst 1380 PDF-Seiten.<br />

Die APIs sind auch nicht überschneidungsfrei,<br />

Suchfunktionen zum Beispiel<br />

gibt es in mehr als einer Kategorie. Eine<br />

der Ursachen: Die <strong>Schnittstellen</strong> spiegeln<br />

die historische Entwicklung sowie regionale<br />

Besonderheiten wider.<br />

Ebay stellt neben der Produktionsumgebung<br />

auch eine so genannte Sandbox bereit.<br />

Programme, die nur Suchfunktionen<br />

nutzen, können Entwickler gefahrlos in<br />

ihrer Produktionsumgebung testen, für<br />

alles Invasive ist die Sandbox gedacht.<br />

Ebay beschränkt die Anzahl der API-<br />

Aufrufe pro Benutzer auf 5000 pro Tag.<br />

Wer seine Anwendung dem kostenlosen<br />

Kompatibilitäts-Check unterzieht, kann<br />

dieses Limit auf eineinhalb Millionen<br />

Aufrufe pro Tag erhöhen.<br />

Voraussetzung für die Nutzung von APIs<br />

ist die kostenlose Mitgliedschaft im „eBay


Developers Program“. Sie zu erwerben<br />

dauert nur wenige Minuten: Auf der<br />

Startseite des Ebay Developer Network<br />

[1] sitzt direkt unter dem Login-Button<br />

ein Link zur Registrierung. Obwohl Ebay<br />

international agiert, können sich die<br />

Web entwickler von Ebay aber offenbar<br />

keine Stadt mit Umlauten im Namen vorstellen.<br />

Doch unabhängig von dieser kleinen<br />

Falle klappt die Registrierung ohne<br />

Probleme.<br />

Nachdem der Anwärter User-ID, Passwort<br />

und diverse Adressdaten eingegeben<br />

hat, schickt ihm Ebay eine E-Mail mit<br />

einem Aktivierungslink. Der Klick hierauf<br />

befördert ihn zum Ebay-Developer. Über<br />

die Verwaltungsoberfläche des eigenen<br />

Accounts lässt sich der Entwickler nun<br />

einen Zugriffsschlüssel für die Sandbox<br />

und die Produktionsumgebung erzeugen.<br />

Sinnigerweise hat Ebay entsprechende<br />

Links in die Aktivierungsseite eingebaut,<br />

mit wenigen Klicks ist auch dies erledigt.<br />

Der Entwickler darf loslegen.<br />

Ebay hat eine Web-fähige Beispielanwendung<br />

vorbereitet, die per Javascript<br />

nach Artikeln sucht (siehe Listing 1 und<br />

Abbildung 1). Sie eignet sich weniger als<br />

Vorlage denn als einfache Verifikation,<br />

ob die Registrierung und Schlüsselgenerierung<br />

geklappt haben.<br />

Mit Webservices<br />

programmieren<br />

Ebay setzt bei seinen <strong>Schnittstellen</strong> im<br />

Großen und Ganzen auf klassische Webservices,<br />

also auf Soap (XML Remote<br />

Procedure Calls). Der Vorteil: Aus der<br />

<strong>Schnittstellen</strong>beschreibung WSDL erzeugen<br />

Generatoren Clientcode für fast jede<br />

Programmiersprache. Letztlich schickt<br />

der Client ein XML-Dokument an den<br />

Ebay-Server und erhält von dort ein XML-<br />

Dokument zurück. Der generierte Clientcode<br />

kümmert sich um das Ein- und Auspacken<br />

dieser Dokumente.<br />

Wer schon mit WSDL-Generatoren gearbeitet<br />

hat, kennt die damit einhergehenden<br />

Probleme. Meist muss ein Entwickler<br />

um den generierten Code einen Wrapper<br />

schreiben, der die Objekte und APIs auf<br />

das für die Programmiersprache übliche<br />

Objektmodell abstrahiert. Für Java und<br />

Dotnet hat sich Ebay diese Mühe gemacht<br />

und stellt entsprechende SDKs bereit [2].<br />

Sie decken aber nur ein Subset der APIs<br />

Abbildung 1: Ebay stellt unter [https:// www. x. com/ content/ quick‐start‐guide] eine Javascript-Beispielapplikation<br />

online bereit (siehe Listing 1).<br />

Tabelle 1: Ebay-<strong>Schnittstellen</strong> im Überblick<br />

API<br />

Trading API<br />

Finding API<br />

Shopping API<br />

Large Merchant Services<br />

Return Management API<br />

eBay Business Policies<br />

Management API<br />

Payout Details API<br />

Order Adjustment API<br />

Related Items Management<br />

API<br />

Order Size Discounts API<br />

Open eBay Apps<br />

BestMatchItemDetails API<br />

Client Alerts API<br />

Feedback API<br />

Merchandising API<br />

Platform Notifications<br />

Product Services<br />

Resolution Case Management<br />

API<br />

Research API for eBay<br />

Anwendung<br />

ab, nämlich das wichtige Trading-API sowie<br />

das Finding-API.<br />

Die SDKs zu verwenden erweist sich für<br />

geübte Programmierer nicht als Hürdenlauf.<br />

In Listing 2 ist ein Java-Beispiel<br />

abgedruckt, das fast das Gleiche tut wie<br />

das Ebay-eigene Beispiel aus Listing 1.<br />

Einzige Voraussetzung für das Kompilieren<br />

und Ausführen ist, dass die Jars aus<br />

dem Finding Kit [3] im Classpath sind.<br />

Abbildung 2 zeigt das Ergebnis.<br />

Im Programm konfiguriert der Entwickler<br />

in den Zeilen 21 bis 23 den Client,<br />

er setzt die zugeteilte Application-ID in<br />

Zeile 24 (im Beispielprogramm ist dies<br />

der erste Aufrufparameter) und verweist<br />

Bestandsmanagement, Auftragsverwaltung, Kommunikation<br />

Alles rund um die Suche (neues Suchinterface)<br />

Produkt-, Kategorie-, Objektsuche<br />

Bestands- und Auftragsverwaltung für große Anbieter<br />

Rückgabe-Verwaltung für Verkäufer in den USA<br />

Verfahrensmanagement, zum Beispiel Bezahlvarianten und Umtausch<br />

(noch nicht produktiv)<br />

Zahlungsverwaltung für Verkäufer auf Ebay.de und Ebay.at<br />

Bereinigung von Zahlungsunstimmigkeiten für Verkäufer auf<br />

Ebay.de und Ebay.at<br />

Bündeln von Produkten<br />

Sonderangebote verwalten<br />

In Ebay.com (USA) eingebettete Applikationen (nicht mehr verfügbar)<br />

Suchoptimierung<br />

Leichtgewichtige Event-Benachrichtigung, zum Beispiel zum Ende<br />

einer Auktion<br />

Verkäufer-Bewertungen analysieren<br />

Zusätzliche Angebote, beispielsweise ähnliche Artikel anzeigen<br />

oder meistverkaufte Produkte<br />

Registrierung von Callbacks für Ereignisse (anstatt Polling)<br />

Abfrage von Produktkompatibilität („Passt das Rad an das Auto?“)<br />

Fälle aus dem Käuferschutzprogramm verwalten (für USA, UK und D)<br />

Marktforschung<br />

E-Commerce-APIs 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

29


Titelthema<br />

www.linux-magazin.de E-Commerce-APIs 12/2012<br />

30<br />

Abbildung 2: Das Suchergebnis des Java-Programms aus Listing 2.<br />

(in Amazon-Sprache) „Power-Anbieter“<br />

mit einem Verkaufsvolumen von mehr<br />

als 40 Artikeln pro Monat. Die Grundgebühr<br />

beträgt hierfür pro Monat aktuell<br />

39 Euro. Beauftragt ein Verkäufer einen<br />

Entwickler, so wird noch mal der gleiche<br />

Betrag fällig, denn jeder Entwickler benötigt<br />

ein Verkäuferkonto.<br />

Die Einstiegshürden liegen also hoch,<br />

das Angebot richtet sich offensichtlich an<br />

große Shops. Trotz der hohen Preise gibt<br />

sich Amazon knauserig bei den Transaktionen.<br />

Pro API gibt es eine Obergrenze<br />

an gleichzeitigen Requests, typischerweise<br />

zehn. Ist sie erreicht, beträgt die<br />

so genannte Restore Rate ein Re quest<br />

pro Minute. 20 API-Aufrufe dauern also<br />

mindestens 10 Minuten. Amazon schützt<br />

damit seine Infrastruktur und zwingt den<br />

Entwickler zu effizientem Transaktionsmanagement.<br />

Wer aber in der eigenen<br />

Anwendung zum Beispiel seinen Lagerbestand<br />

in Echtzeit überwachen will,<br />

kommt damit nicht weit.<br />

Auch Amazon teilt seine <strong>Schnittstellen</strong> in<br />

Kategorien (siehe Tabelle 2). Technisch<br />

hat der Konzern seine APIs von Webservices<br />

auf proprietäre <strong>Schnittstellen</strong> umgestellt,<br />

je API bietet er passende SDKs<br />

an (PHP, C#, Java). Für Anwendungsentwickler<br />

bedeutet dies eine Vereinfachung,<br />

allerdings schränken die neuen Schnittper<br />

Global-ID auf die Ebay-Site, die er<br />

abfragen möchte. Eine Liste der IDs gibt<br />

es auf den Developer-Seiten oder der Entwickler<br />

fragt sie per API ab.<br />

Die eigentliche Abfrage erfolgt über die<br />

Klasse »FindItemsByKeywords« (Zeilen<br />

30 bis 32). Den Suchbegriff übergibt<br />

der Anwender im Beispiel als zweites<br />

Programm argument. Die Zeilen 34 bis<br />

36 sorgen dafür, dass pro Abfrage nicht<br />

alle Treffer, sondern nur »ENTRIES_PER_<br />

PAGE« zurückkommen. Die Gesamtzahl<br />

der Treffer sowie die notwendigen Abfragen<br />

für alle Treffer liest das Programm<br />

nach der ersten Serverantwort in den<br />

Zeilen 46 bis 50. Um das Beispiel kurz<br />

zu halten, fehlt im Listing 2 letztlich die<br />

Iteration über alle notwendigen Requests.<br />

Dafür wären weitere Requests notwendig,<br />

die im »PaginationInput«-Objekt jeweils<br />

die angeforderte Seite setzen müsste.<br />

E Amazon<br />

Auch Amazon bietet maschinelle <strong>Schnittstellen</strong><br />

für die Verkaufsunterstützung an:<br />

die „Amazon Marketplace Webservices“<br />

(Amazon MWS, [4]). Sie richten sich an<br />

Listing 1: Suche bei Ebay mit Javascript<br />

01 <br />

02 <br />

03 eBay Search Results<br />

04 body { font‐family: arial,sans‐serif;} <br />

05 <br />

06 <br />

07 eBay Search Results<br />

08 <br />

09 <br />

10 <br />

11 function _cb_findItemsByKeywords(root)<br />

12 {<br />

13 var items = root.findItemsByKeywordsResponse[0].searchResult[0].item<br />

|| [];<br />

14 var html = [];<br />

15 html.push('');<br />

16 <br />

17 for (var i = 0; i < items.length; ++i)<br />

18 {<br />

19 var item = items[i];<br />

20 var title = item.title;<br />

21 var pic = item.galleryURL;<br />

22 var viewitem = item.viewItemURL;<br />

23 <br />

24 if (null != title && null != viewitem)<br />

25 {<br />

26 html.push('' + '' +<br />

'' +<br />

27 '' + title +<br />

'');<br />

28 }<br />

29 }<br />

30 html.push('');<br />

31 document.getElementById("results").innerHTML = html.join("");<br />

32 }<br />

33 <br />

34 <br />

35 <br />

38 <br />

39 <br />

40 <br />

41


stellen den Spielraum für die Client-Programmiersprache<br />

ein. Amazon stellt auch<br />

einen Leitfaden für die Migration von den<br />

alten, Soap-basierten APIs bereit.<br />

Fazit<br />

Beide große E-Commerce-Sites unterstützen<br />

den Zugriff Dritter auf ihre Datenbestände<br />

in umfassender Weise. Ebay hat<br />

dabei die Nase vorn, denn die Einstiegshürden<br />

liegen niedrig. Ein Betreiber einer<br />

Tabelle 2: Amazon-APIs<br />

API<br />

Datenübertragung an Amazon<br />

Berichte<br />

Inbound Shipments<br />

Inventory<br />

Outbound Shipments<br />

Bestellungen<br />

Produkte<br />

Verkäufer<br />

Anwendung<br />

Liebhaberseite für Haustiere könnte etwa<br />

ohne Probleme bei einer Suchanfrage<br />

auf seiner Site zusätzlich zu den lokalen<br />

Treffern auch noch aktuell angebotene<br />

Produkte auf Ebay einblenden. Ebay profitiert<br />

von den erhöhten Umsätzen und<br />

beteiligt den Site-Betreiber.<br />

Amazon dagegen beschränkt seine Market-Webservices<br />

auf Profi-Seller. Wer nur<br />

das Angebot auf Amazon abfragen will,<br />

muss sich mit dem Screen-Scraping der<br />

normalen Amazon-Website und seinen<br />

Produkte verwalten<br />

Bestellungen verwalten (Berichte)<br />

Versandmanagement (Shop an Amazon-Logistikzentrum)<br />

Den eigenen Lagerbestand im Amazon-Logistikzentrum<br />

verwalten<br />

Versandmanagement (Logistikzentrum an Kunden)<br />

Bestellungen verwalten<br />

Produktinformationen abfragen (Preise, Attribute)<br />

Umsätze von Händlern verwalten<br />

Nachteilen zufrieden geben. Zum Glück<br />

hat Amazon Bücher im Angebot, die<br />

diese Technik erläutern. (jk) n<br />

Infos<br />

[1] Ebay Developer Network:<br />

[https:// www. x. com/ developers/ ebay]<br />

[2] Java-SDKs für Ebay:<br />

[https:// www. x. com/ developers/ ebay/​<br />

documentation‐tools/ sdks]<br />

[3] Finding Kit: [http:// developer. ebay. com/<br />

DevZone/ codebase/ javasdk‐jaxb/​<br />

FindingKitJava_1. 0. zip]<br />

[4] Amazon Webservices:<br />

[https:// developer. amazonservices. de]<br />

Der Autor<br />

Bernhard Bablok betreut bei der Allianz<br />

Managed&Operations Services SE ein großes<br />

Datawarehouse mit technischen Performancemessdaten<br />

von Mainframes bis zu Servern. Wenn<br />

er nicht Musik hört, mit dem Radl oder zu Fuß<br />

unterwegs ist, beschäftigt er sich mit Themen<br />

rund um <strong>Linux</strong> und Objektorientierung.<br />

E-Commerce-APIs 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

31<br />

Listing 2: Suche bei Ebay mit Java<br />

01 import java.util.List;<br />

02 <br />

03 import com.ebay.services.client.ClientConfig;<br />

04 import com.ebay.services.client.FindingServiceClientFactory;<br />

05 import com.ebay.services.finding.FindItemsByKeywordsRequest;<br />

06 import com.ebay.services.finding.FindItemsByKeywordsResponse;<br />

07 import com.ebay.services.finding.FindingServicePortType;<br />

08 import com.ebay.services.finding.PaginationInput;<br />

09 import com.ebay.services.finding.PaginationOutput;<br />

10 import com.ebay.services.finding.SearchItem;<br />

11 <br />

12 public class SearchEbay {<br />

13 <br />

14 public static final int ENTRIES_PER_PAGE = 10;<br />

15 <br />

16 public static void main(String[] args) {<br />

17 try {<br />

18 <br />

19 // setup environment ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

20 <br />

21 ClientConfig config = new ClientConfig();<br />

22 config.setApplicationId(args[0]);<br />

23 config.setGlobalId("EBAY‐DE");<br />

24 <br />

25 FindingServicePortType serviceClient =<br />

26 FindingServiceClientFactory.getServiceClient(config);<br />

27 <br />

28 // setup request ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

29 <br />

30 FindItemsByKeywordsRequest request =<br />

31 new FindItemsByKeywordsRequest();<br />

32 request.setKeywords(args[1]);<br />

33 <br />

34 PaginationInput pi = new PaginationInput();<br />

35 pi.setEntriesPerPage(ENTRIES_PER_PAGE);<br />

36 request.setPaginationInput(pi);<br />

37 <br />

38 // execute request ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

39 <br />

40 FindItemsByKeywordsResponse result =<br />

41 serviceClient.findItemsByKeywords(request);<br />

42 <br />

43 // handle result ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐<br />

44 <br />

45 System.out.println("\nStatus = "+result.getAck());<br />

46 PaginationOutput po = result.getPaginationOutput();<br />

47 System.out.println("Anzahl Treffer gesamt: " +<br />

48 po.getTotalEntries());<br />

49 System.out.println("Notwendige Requests: " +<br />

50 po.getTotalPages());<br />

51 <br />

52 System.out.println("Anzahl Treffer in diesem Request: " +<br />

53 result.getSearchResult().getCount() + "\n");<br />

54 <br />

55 System.out.println("‐‐‐‐‐‐ Trefferliste ‐‐‐‐‐‐‐‐‐\n");<br />

56 <br />

57 List items = result.getSearchResult().getItem();<br />

58 for(SearchItem item : items) {<br />

59 System.out.println(item.getTitle());<br />

60 }<br />

61 <br />

62 } catch (Exception ex) {<br />

63 // handle exception if any<br />

64 ex.printStackTrace();<br />

65 }<br />

66 }<br />

67 }


Titelthema<br />

www.linux-magazin.de GIS-APIs 12/2012<br />

32<br />

Kartenanwendungen programmieren mit Google Maps und Open Streetmap<br />

Eigene Wege<br />

Online-Kartendienste gehören zu den Standard-Accessoires von Anwendern, die Dienstreisen, Wanderungen<br />

und Ausflüge planen oder abrechnen. Dieser Artikel zeigt, wie Programmierer die Karten-APIs von Google und<br />

Open Streetmap in Javascript-Dateien einbinden, die der Webserver ausliefert. Björn Schilberg<br />

© Franz Pfluegl, Fotolia<br />

Wer die eigene Webseite mit Karten<br />

ausstatten will, greift auf die Javascript-<br />

Client-APIs der Dienste zu. Die kleinen<br />

Skripte laufen im Browser und benötigen<br />

meist keine Serverkomponente, abgesehen<br />

vielleicht von einem sinnvollen<br />

HTTP-Proxy für externe Dienste.<br />

Dieser Artikel vergleicht die beiden Ansätze,<br />

das Google-Maps-API [4] und den<br />

Zugriff auf Open Streetmap durch das<br />

Open-Layers-API [5] anhand einer kleinen<br />

Webanwendung, die Fahrzeit und Distanz<br />

zwischen zwei Orten ermittelt. Mit<br />

dem Kartendienst definiert der Anwender<br />

Anfangs- und Endpunkt der Reise durch<br />

simple Mausklicks auf einer Karte, eingebettet<br />

in die HTML-Datei aus Listing 1.<br />

Reisekosten, Wanderung oder Fahrradtour:<br />

Heute organisiert der IT-kundige Anwender<br />

derlei mit Google Maps oder Open<br />

Streetmap. Die APIs der beiden Marktführer<br />

machen es Entwicklern leicht, das<br />

verfügbare Kartenmaterial in eigene Apps<br />

oder Webseiten zu integrieren. Ein einfaches<br />

HTML-Gerüst mit klickbarer Karte<br />

dient diesem Artikel als Beispiel für eine<br />

Entfernungsberechnung, wie sie mobile<br />

Nomaden etwa für die monatliche Spesenabrechnung<br />

brauchen.<br />

Der augenfälligste Unterschied zwischen<br />

den Kartendiensten liegt zunächst im<br />

rechtlichen Rahmen: Google verwirrt<br />

mit unübersichtlichen Bedingungen. Die<br />

Rechte an den Karten und Luftbildern<br />

sind vielfältig, bestimmte Nutzungen kosten<br />

Geld, und Google behält es sich vor,<br />

die übertragenen Daten zu nutzen [1].<br />

Open Streetmap verspricht eine „freie,<br />

editierbare Karte der gesamten Welt, die<br />

von Menschen wie Dir erstellt wird“ [2].<br />

Freie Software, die die Daten nutzt, gibt<br />

es zuhauf – fürs mobile Gerät bietet sich<br />

als Alternative zu Google Maps etwa<br />

Navfree [3] an, das OSM-Karten auch<br />

offline auf den Androiden bringt.<br />

Google Maps<br />

Die zweite Zeile dieses Template bindet<br />

die benötigte Javascript-Bibliothek<br />

»map.js« ein, die den eigentlichen Zugriff<br />

auf die APIs abwickelt. Listing 2<br />

zeigt den benötigten Verweis auf Googles<br />

Dienst: Dabei reicht eine Zeile, wobei der<br />

Parameter »v=3.10« die Version des API<br />

festlegt und so spätere Überraschungen<br />

vermeiden hilft. »sensor=false« gibt an,<br />

dass der Client keinen Sensor zur eigenen<br />

Ortsbestimmung verwendet.<br />

Im »body« der HTML-Datei folgen Bereiche<br />

für Karte und Text. Der Javascript-Teil<br />

wird später anhand der »id«-Tags erkennen,<br />

wo er seinen Inhalt einfügen soll.<br />

Listing 1: »template-index.html«<br />

01 <br />

02 <br />

03 <br />

04 <br />

05 <br />

06 Startpunkt ‐<br />

07 Endpunkt ‐<br />

08 Distanz ‐<br />

09 Zeit ‐<br />

10


Abbildung 1: Selbst geskriptet: Fahrtdaten per Google-Maps-API im Webbrowser.<br />

Beim ersten Aufruf startet der Browser<br />

die Funktion »initialize()« aus »map.js«<br />

(Listing 3). In Zeile 12 ruft die Funktion<br />

»google.maps.Map()« mit entsprechenden<br />

»mapOptions« auf. Der Benutzer erhält so<br />

im Kartenbereich der Webseite eine auf<br />

Deutschland zentrierte Karte vom Typ<br />

»ROADMAP« – der Standard-Straßenansicht<br />

(Abbildung 1). Neben den Kartentypen<br />

»SATELLITE«, »HYBRID« und<br />

»TERRAIN« lassen sich hier auch diverse<br />

eigene Stile verwenden ([6], [7]).<br />

Die weiteren Zeilen von »initalize()« definieren<br />

die Funktion, die Markierungen<br />

setzt, wenn der Nutzer mit der Maus<br />

klickt: Bei einem Klick in die Karte speichert<br />

die Funktion »placeMarker()« die<br />

Position und zeigt ein rotes Icon an. Beim<br />

zweiten Klick gibt<br />

der Dienst »DistanceMatrixService()«<br />

das Ergebnis zurück,<br />

was ab Zeile<br />

18 den Inhalt der<br />

rechten Spalte der<br />

Webseite füllt.<br />

Durch das Lesen<br />

der API-Dokumentation<br />

oder Herumstöbern<br />

in den<br />

Werten mit einem Javascript-Debugger<br />

wie beispielsweise Firebug lassen sich die<br />

gewünschten Elemente im Rückgabewert<br />

finden. Abbildung 1 zeigt dann das fertige<br />

Ergebnis.<br />

Der nächste Klick löscht die zwei alten<br />

Markierungen und setzt einen neuen<br />

Ausgangspunkt für die geplante Route.<br />

»google.maps.Tra vel Mode.DRIVING« in<br />

Zeile 45 fordert eine Route für Automobile<br />

an. Alternativen zum »DRIVING«-<br />

Modus sind »BICYCLING«, »TRANSIT«<br />

oder »WALKING«.<br />

OSM mit Open Layers<br />

Der Einsatz von Open Layers und Open<br />

Streetmap erfordert etwas mehr Vorarbeit.<br />

Listing 4 zeigt, dass neben Open Layers<br />

noch eine weitere Bibliothek aus dem<br />

HTML-Template aufzurufen ist: Jquery<br />

[8] für die Kommunikation mit dem<br />

Yours-Dienst für die Fahrroutenberechnung<br />

(Yet another Open Streetmap Route<br />

Service, [9]) und dem Dienst für die Adresskodierung<br />

(Nominatim, [10]). Mit<br />

75 zu 50 Zeilen fällt das OSM-Javascript<br />

(Listing 5) auch deutlich länger aus, und<br />

das, obwohl das Beispiel einige Funktionen<br />

nur gekürzt zeigt. Die ausführliche<br />

Versionen findet sich unter [11].<br />

Gleich in der ersten Zeile fällt die Angabe<br />

eines Proxys auf. Er ist erforderlich,<br />

um eine Sicherheitsfunktion moderner<br />

Browser zu umgehen. Die Same-Origin-<br />

Policy soll verhindern, dass Angreifer via<br />

Javascript Rechner anfragen, die nicht<br />

zur gleichen Domäne gehören. Google<br />

schafft es, diese Einschränkung zu umgehen,<br />

aber einige andere Netzdienste sind<br />

nicht so clever.<br />

Als Beispiel für einen solchen Dienst<br />

steuert das Skript Yours an, um dessen<br />

Listing 2: »google.script«<br />

01 <br />

GIS-APIs 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

33<br />

Listing 3: »map.js« (Google)<br />

01 var map;<br />

02 var markers;<br />

03 <br />

04 function initialize() {<br />

05 markers = [];<br />

06 <br />

07 var mapOptions = { zoom: 5,<br />

08 center: new google.maps.LatLng(52, 8),<br />

09 mapTypeId: google.maps.MapTypeId.ROADMAP<br />

10 };<br />

11 <br />

12 map = new google.maps.Map(document.getElementById('mapPanel'),<br />

mapOptions);<br />

13 google.maps.event.addListener(map, 'click', function(event) {<br />

14 placeMarker(event.latLng);<br />

15 });<br />

16 }<br />

17 <br />

18 function useResult(response, stat) {<br />

19 markers[1].setTitle(response.rows[0].elements[0].distance.text);<br />

20 <br />

21 document.getElementById('routeStart').innerHTML=response.<br />

originAddresses;<br />

22 document.getElementById('routeEnd').innerHTML=response.<br />

destinationAddresses;<br />

23 document.getElementById('routeLength').innerHTML=<br />

24 response.rows[0].elements[0].distance.text;<br />

25 document.getElementById('routeTime').innerHTML=<br />

26 response.rows[0].elements[0].duration.text;<br />

27 }<br />

28 <br />

29 function placeMarker(location) {<br />

30 if (markers.length >= 2 && markers[0] !== null && markers[1] !==<br />

null) {<br />

31 for (var i = 0; i < markers.length; ++i) {<br />

32 markers[i].setMap(null);<br />

33 }<br />

34 markers = [];<br />

35 }<br />

36 <br />

37 var marker = new google.maps.Marker({ position: location, map: map });<br />

38 markers.push(marker);<br />

39 <br />

40 if (markers.length === 2) {<br />

41 var service = new google.maps.DistanceMatrixService();<br />

42 service.getDistanceMatrix({<br />

43 destinations : [ markers[1].getPosition() ],<br />

44 origins : [ markers[0].getPosition() ],<br />

45 travelMode : google.maps.TravelMode.DRIVING<br />

46 }, useResult);<br />

47 }<br />

48 }


Titelthema<br />

www.linux-magazin.de GIS-APIs 12/2012<br />

34<br />

Routingfunktionen zu nutzen. Geeignete<br />

Proxy-Skripte sind in den Wikis von Open<br />

Layers und Open Streetmap verlinkt. Die<br />

verwenden jedoch unterschiedliche Konventionen,<br />

das dort empfohlene »proxy.<br />

cgi« beispielsweise erwartet in Zeile 31<br />

(Listing 5) ein »&«, kein »?«.<br />

Python-Webserver<br />

Wer das OSM-Beispiel testen will, muss<br />

einen Webserver aufsetzen, der »map.js«,<br />

»index.html« und »proxy.cgi« anbietet.<br />

Ungeduldige probieren den minimalistischen<br />

Python-Webserver aus Listing 6.<br />

Den startet »python simpleserver.py« in<br />

01 <br />

02 <br />

Listing 4: »osm.script«<br />

dem Verzeichnis mit den drei Dateien,<br />

danach findet sich die Anwendung auf<br />

Port 6779 des Localhost.<br />

Die Funktion »initalize()« in Listing 5<br />

leistet Vergleichbares wie ihre Namensschwester<br />

im Google-Skript. Die vom<br />

Mausklick ausgelöste »placeMarker()«-<br />

Funktion ab Zeile 46 enthält zwei Besonderheiten.<br />

Zum einen initialisiert<br />

sie die Markierung ausführlicher, zum<br />

anderen muss das Skript die resultierenden<br />

Punkte erst in Latitude-Longitude-<br />

Koordinaten projizieren. Erst mit den<br />

resultierenden Werten ruft es dann die<br />

anderen Dienste auf. Das geschieht in<br />

den Funktionen »queryLocationInfo()«<br />

(ab Zeile 21) für die Adressenkodierung<br />

und »queryRoutingInfo()« (ab Zeile 29)<br />

für die Routenberechnung.<br />

Jquery übernimmt die Kommunikation<br />

mit den jeweiligen APIs und parst die<br />

Ergebnisse in eine Datenstruktur. Wer<br />

Zeile 37 weglässt, erhält sogar die Geometrie<br />

für die errechnete Route. Und in<br />

Zeile 35 kann er natürlich auch ein anderes<br />

Fortbewegungsmittel als ein Auto<br />

eintragen. Darüber hinaus lassen sich mit<br />

dem Parameter »instructions« auch gleich<br />

die Routinganweisungen ausgeben. Weitere<br />

mögliche Parameter des Yours-Routing-API<br />

finden sich in der entsprechende<br />

Wiki-Seite [9].<br />

Formate, Koordinaten,<br />

Verfügbarkeit<br />

Die Grundfunktionen zur Navigation in<br />

der Karte gleichen sich bei den APIs.<br />

Bei beiden ist eine Zoomfunktion per<br />

Mausrad verfügbar, ein Zoomwerkzeug<br />

zum Heranholen eines per Maus ausgewählten<br />

Bereichs gibt es aber nur bei<br />

Open Layers. Das bietet an vielen Stellen<br />

mehr professionelle GIS-Unterstützung,<br />

beispielsweise bei der Integration verschiedener<br />

Dienste und Daten.<br />

Listing 5: »map.js« (OSM, gekürzt)<br />

01 var PROXY_HOST="http://localhost:6779/<br />

cgi‐bin/proxy.cgi?url="<br />

02 var map;<br />

03 var markers;<br />

04 var markerLayer;<br />

05 <br />

06 function initialize() {<br />

07 markers = [];<br />

08 mapOptions = {};<br />

09 <br />

10 map = new OpenLayers.Map("mapPanel",<br />

mapOptions);<br />

11 markerLayer = new OpenLayers.Layer.Markers(<br />

"Markers" );<br />

12 map.addLayer(new OpenLayers.Layer.OSM());<br />

13 map.addLayer(markerLayer);<br />

14 <br />

15 map.events.register("click", map,<br />

function(e) {<br />

16 placeMarker(map.getLonLatFromPixel<br />

(e.xy)); });<br />

17 <br />

18 //CENTER MAP HERE<br />

19 }<br />

20 <br />

21 function queryLocationInfo(lonlat,<br />

infoCallback) {<br />

22 var addrUrl = "http://nominatim.<br />

openstreetmap.org/reverse/?addressdetails=1&<br />

format=json";<br />

23 addrUrl += "&lon=" + lonlat.lon;<br />

24 addrUrl += "&lat=" + lonlat.lat;<br />

25 <br />

26 $.getJSON(addrUrl, infoCallback);<br />

27 }<br />

28 <br />

29 function queryRoutingInfo(startPoint,<br />

endPoint) {<br />

30 var routeUrl = PROXY_HOST + "http://www.<br />

yournavigation.org/api/1.0/gosmore.php";<br />

31 routeUrl += "?flat=" + startPoint.lat;<br />

// ATTENTION "&" or "?" it depends<br />

32 routeUrl += "&flon=" + startPoint.lon;<br />

33 routeUrl += "&tlat=" + endPoint.lat;<br />

34 routeUrl += "&tlon=" + endPoint.lon;<br />

35 routeUrl += "&v=motorcar";<br />

36 routeUrl += "&fast=1";<br />

37 routeUrl += "&geometry=0";<br />

38 routeUrl += "&format=geojson";<br />

39 <br />

40 $.getJSON(routeUrl, function (result) {<br />

41 document.getElementById('routeLength').<br />

innerHTML=result.properties.distance;<br />

42 document.getElementById('routeTime').<br />

innerHTML=result.properties.traveltime;<br />

43 });<br />

44 }<br />

45 <br />

46 function placeMarker(location) {<br />

47 if (markers.length >= 2 && markers[0] !==<br />

null && markers[1] !== null) {<br />

48 for (var i = 0; i < markers.length; ++i)<br />

{<br />

49 markerLayer.removeMarker(markers[i]);<br />

50 }<br />

51 markers = [];<br />

52 }<br />

53 <br />

54 var size = new OpenLayers.Size(21,25);<br />

55 var offset = new OpenLayers.<br />

Pixel(‐(size.w/2), ‐size.h);<br />

56 var icon = new OpenLayers.Icon('http://<br />

www.openlayers.org/dev/img/marker.png', size,<br />

offset);<br />

57 var marker = new OpenLayers.Marker<br />

(location, icon);<br />

58 markerLayer.addMarker(marker);<br />

59 markers.push(marker);<br />

60 <br />

61 if (markers.length === 2) {<br />

62 var p1 = markers[0].lonlat;<br />

63 p1.transform(map.getProjectionObject(),<br />

64 new OpenLayers.Projection<br />

("EPSG:4326"));<br />

65 var p2 = markers[1].lonlat;<br />

66 p2.transform(map.getProjectionObject(),<br />

67 new OpenLayers.Projection<br />

("EPSG:4326"));<br />

68 <br />

69 queryLocationInfo(markers[0].lonlat,<br />

function(response) {<br />

70 document.getElementById('routeStart').<br />

innerHTML=response.display_name; });<br />

71 queryLocationInfo(markers[1].lonlat,<br />

function(response)<br />

72 document.getElementById('routeEnd').<br />

innerHTML=response.display_name; });<br />

73 queryRoutingInfo(markers[0].lonlat,<br />

markers[1].lonlat);<br />

74 }<br />

75 }


Dazu gehört die Anzeige von OSM-,<br />

Bing-, Yahoo- und Google-Karten genauso<br />

wie die Unterstützung professioneller<br />

und standardisierter Dienste wie Web<br />

Map Service (WMS), Web Feature Service<br />

(WFS), Web Map Tile Service (WMTS)<br />

sowie propietärer professioneller Anbieter<br />

wie ESRIs Arc GIS Mapping Services.<br />

Auch kommt es mit zahlreichen Datenformaten<br />

wie KML, Geo RSS, Geo Json,<br />

Json und GPX. Details nennt die Open-<br />

Layers-API-Dokumentation [12].<br />

Google fokussiert die Unterstützung der<br />

eigenen Dienste und beschränkt sich auf<br />

KML, Geo RSS und einige Google-Angebote<br />

wie Heatmap-, Traffic- und Bicycle-<br />

Layer. Open Layers erlaubt Dienste und<br />

Daten in verschiedenen Koordinatensystemen,<br />

während Google standardmäßig<br />

nur die geografischen Koordinaten mit<br />

Breite und Länge sowie zwei Arten von<br />

Kartenkoordinaten auf Basis der Mercator-Projektion<br />

[13] bietet.<br />

Beide Javascript-APIs unterstützen mit<br />

Firefox, Internet Explorer und Safari die<br />

wichtigsten Webbrowser. Bei Open Layers<br />

sind etwas ältere Versionen noch offiziell<br />

dabei [14], dafür tauchen Chrome<br />

und Browser für Touchdevices nicht auf,<br />

die Google als Hersteller von Android<br />

natürlich auf dem Radar hat [15].<br />

Dass der freie Navigationsdienst Yours<br />

weniger gut verfügbar ist als Google, verwundert<br />

nicht – im Test vor Redaktionsschluss<br />

versagte das Routing leider immer<br />

wieder. Dafür gibt es bei Yours aber<br />

Software, mit der sich eigene Dienste<br />

aufsetzen lassen, auch für Karten und<br />

die Positionierung. Der eigene Server hat<br />

Vorteile, vor allem wenn es darum geht,<br />

die Eigenschaften der Karte wie Projektion,<br />

grafischer Stil und Einbindung der<br />

Schichten anzupassen. Das wird immer<br />

wieder nötig, vor allem wenn beim<br />

Kunden schon Daten vorliegen, die der<br />

Entwickler einbinden soll, oder es tiefer<br />

gehende Anforderungen an Darstellung<br />

oder Datenschutz gibt.<br />

Sowohl Google als auch OSM bemühen<br />

sich um eine gute Dokumentation und<br />

ansprechende Beispiele.<br />

Open Layers<br />

liegt dabei leicht hinten.<br />

So sind Teile des<br />

Google-Maps-API bereits<br />

ins Deutsche<br />

übersetzt, während es<br />

bei Open Layers zwar<br />

nur englischen Text<br />

gibt, aber notfalls auch<br />

voller Zugriff auf den<br />

Quelltext möglich ist.<br />

Fazit<br />

Beim Google-Maps-Javascript-API fällt<br />

der Einstieg deutlich leichter als bei Open<br />

Layers. Skripte sind bis zu einem Drittel<br />

kürzer, der Programmierer bekommt alles<br />

aus einer Hand. Dabei kann er auf gut dokumentierte<br />

und integrierte Dienste und<br />

Bibliotheken zurückgreifen.<br />

Sobald es aber anspruchsvollere, gewerbliche<br />

Anwendungen betrifft, stellt die<br />

Vielfalt der freien Softwareprodukte um<br />

Open Layers und OSM einen erheblichen<br />

Vorteil dar (Abbildung 2). Hier können<br />

Entwickler hinter die Kulissen blicken<br />

und die Eigenschaften der gewählten<br />

Lösung genau inspizieren. Bei Google<br />

hingegen steht dann eine genauere Auseinandersetzung<br />

mit den Nutzungsbedingungen<br />

und Preisen an. (mfe) n<br />

Infos<br />

[1] Googles Regeln: [http:// www. google.​<br />

com/ policies/ privacy/]<br />

[2] Open Streetmap:<br />

[http:// www. openstreetmap. org]<br />

[3] Navfree: [http://www.navmii.com]<br />

[4] Google-Maps-API:<br />

[https:// developers. google. com/ maps/]<br />

Listing 6: »simpleserver.py«<br />

01 import SocketServer<br />

02 import SimpleHTTPServer<br />

03 import urllib<br />

04 <br />

05 PORT = 6779<br />

06 PREFIX = "/cgi‐bin/proxy.cgi?url="<br />

Abbildung 2: Open Streetmap bietet mehr Profi-Features als Googles API.<br />

[5] Open Layers: [http:// openlayers. org]<br />

[6] Google-Javascript-Basics:<br />

[https:// developers. google. com/ maps/​<br />

documentation/ javascript/ basics? hl=de]<br />

[7] Googles Styling-Definitionen:<br />

[https:// developers. google. com/ maps/​<br />

documentation/ javascript/ styling? hl=de]<br />

[8] Jquery: [http:// jquery. com]<br />

[9] OSM-Routenberechnung: [http:// wiki.​<br />

openstreetmap. org/ wiki/ YOURS]<br />

[10] Adresskodierung: [http:// wiki.​<br />

openstreetmap. org/ wiki/ DE:Nominatim]<br />

[11] OSM-Skript: [ftp:// ftp. intevation. de/​<br />

geospatial/ linuxmagazin/ 2012/ 12/]<br />

[12] Open-Layers-API-Dokumentation:<br />

[http:// dev. openlayers. org/ releases/​<br />

OpenLayers‐2. 12/ doc/ apidocs/ files/​<br />

OpenLayers/ Layer‐js. html], [http:// dev.​<br />

openlayers. org/ releases/ OpenLayers‐2.​<br />

12/ doc/ apidocs/ files/ OpenLayers/​<br />

Format‐js. html]<br />

[13] Koordinaten: [https:// developers. google.​<br />

com/ maps/ documentation/ javascript/​<br />

maptypes? hl=de# MapCoordinates]<br />

[14] Browser-Support bei OSM: [http:// trac.​<br />

osgeo. org/ openlayers/ wiki/ Browsers]<br />

[15] Browser-Support bei Google:<br />

[https:// developers. google. com/ maps/​<br />

faq? hl=de# browsersupport]<br />

12 #print "path = ", self.path<br />

13 if self.path[0:len(PREFIX)] == PREFIX:<br />

14 self.copyfile(urllib.urlopen(self.path<br />

[len(PREFIX):]), self.wfile)<br />

15 else:<br />

16 self.copyfile(open("." + self.path),<br />

GIS-APIs 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

35<br />

Der Autor<br />

Diplom-Geograph Björn Schilberg begann an der<br />

Uni eine Promotion über 3-D-Geodatenbanken.<br />

Seit 2009 arbeitet er im Geo-Bereich von Intevation<br />

an GDI-Sicherheitskonzepten und Web-GIS.<br />

07 <br />

08 class Proxy(SimpleHTTPServer.<br />

SimpleHTTPRequestHandler):<br />

09 def do_GET(self):<br />

10 self.send_response(200)<br />

11 self.end_headers()<br />

self.wfile)<br />

17 <br />

18 httpd = SocketServer.ForkingTCPServer<br />

(('', PORT), Proxy)<br />

19 print "serving at port", PORT<br />

20 httpd.serve_forever()


Titelthema<br />

www.linux-magazin.de Entwickler-Tools 12/2012<br />

36<br />

APIs für Web-basierte Entwickler-Tools und ‐Dienste<br />

Fernbedienung<br />

Web-basierte Entwicklerwerkzeuge wie Bugzilla oder Github bieten ein Web-API, über das man sie mit eigenen<br />

Skripten abfragen und in bestimmten Grenzen auch fernsteuern kann. Tim Schürmann<br />

(Abbildung 1). Statt per Browser kann<br />

der Anwender die URL auch mit dem<br />

Kommandozeilen-Client Curl aufrufen:<br />

curl ‐i "https://api.github.com/repos/U<br />

mojombo/jekyll/issues/624"<br />

© Robert Kacpura, 123RF.com<br />

01 import urllib2<br />

Entwickler hantieren nicht nur mit Editor<br />

und Compiler, sondern auch mit zahlreichen<br />

Hilfswerkzeugen. Bei diesen handelt<br />

es sich häufig um Webanwendungen<br />

oder Webdienste – von Repositories wie<br />

Github [1] bis zu Bugtracking-Systemen<br />

wie Bugzilla [2].<br />

Die Bedienung erfolgt über den Browser,<br />

was nur vordergründig bequem ist: Wer<br />

nur eine kurze Information benötigt,<br />

muss erst die Seiten des Dienstes ansteuern,<br />

sich einloggen und dann ein<br />

paar mehr oder weniger verschachtelte<br />

Menüpunkte durchklicken. Wiederkehrende<br />

Aufgaben lassen sich zudem nur<br />

selten automatisieren.<br />

Listing 1: Zugriff mit »urllib2«<br />

02 request = urllib2.Request('https://api.github.com/<br />

repos/mojombo/jekyll/issues/624', data='')<br />

03 request.get_method = lambda: 'GET'<br />

04 antwort = urllib2.urlopen(request)<br />

05 inhalt = antwort.read()<br />

06 print inhalt<br />

Glücklicherweise bieten praktisch alle<br />

großen Web-basierten Werkzeuge eine<br />

Programmierschnittstelle an. Sie nutzt im<br />

Regelfall das bewährte HTTP-Protokoll.<br />

Das hat wiederum den Vorteil, dass sich<br />

der Dienst von Skriptsprachen und anderen<br />

Webanwendungen aus ansprechen<br />

und fernsteuern lässt.<br />

Hausnummer<br />

Die meisten Dienste und Webanwendungen<br />

spendieren zunächst jedem Termin,<br />

jedem Projekt, jedem Bugreport, also jedem<br />

einzelnen Objekt eine eigene Webadresse.<br />

So ist beispielsweise auf Github<br />

der Bugreport (»Issue«) Nummer »624«<br />

im Repository »jekyll« des Benutzers<br />

»mojombo« unter der Adresse »https://<br />

api.github.com/repos/mojombo/jekyll/<br />

issues/624« zu erreichen. Wer diese URL<br />

einfach mit einem Browser ansteuert, erhält<br />

von Github das entsprechende Objekt<br />

zurück. Im Beispiel sind das alle<br />

verfügbaren Informationen über Bug 624<br />

Komfortabler geht das aber mit Hilfe einer<br />

Programmiersprache. Listing 1 zeigt<br />

exemplarisch den Zugriff aus Python<br />

2.7. Es verwendet »urllib2« aus der Standardbibliothek<br />

[3] und ist einfach zu<br />

lesen: Zunächst bastelt es eine Anfrage<br />

an Github und schickt diese dann mit<br />

»urllib2.urlopen()« ab. Die vom Server<br />

zurückgelieferte Antwort landet in der<br />

gleichnamigen Variablen. Aus ihr extrahiert<br />

schließlich »antwort.read()« alle<br />

zum Bugreport gehörenden Informationen,<br />

die wiederum die Variable »inhalt«<br />

aufnimmt.<br />

Python 3 splittet das »urllib2«-Modul in<br />

die beiden Nachfolger »urllib.request«<br />

und »urllib.error«. Alternativ zur »urllib2«<br />

kann man auch »httplib« (in Python<br />

3 »http.client«) verwenden [4], den entsprechenden<br />

Code zeigt Listing 2. Dabei<br />

ist aber zu beachten, dass Github nicht<br />

HTTP, sondern die verschlüsselte Variante<br />

HTTPS nutzt. Python muss daher<br />

mit SSL-Unterstützung übersetzt sein,<br />

was bei allen großen Distributionen der<br />

Fall sein sollte.<br />

Allerdings prüfen »urllib2« und »httplib«<br />

nicht das vom Server zurückgesendete<br />

Zertifikat. Der Anwender kann sich folglich<br />

nicht sicher sein, ob er tatsächlich<br />

mit einem Github-Server oder mit einem<br />

Schwindler kommuniziert.<br />

Github liefert alle Daten in der Javascript<br />

Object Notation (Json) aus. Die Informationen<br />

lassen sich somit leicht weiterverarbeiten,<br />

denn für viele Sprachen existieren<br />

passende Bibliotheken. Unter Python<br />

heißt das Modul »json« und gehört seit


Abbildung 1: Informationen über einen bestimmten Bug stellt Github unter<br />

einer eindeutigen Webadresse bereit.<br />

Version 2.6 zur Standardbibliothek [5].<br />

Listing 3 zeigt, wie der Programmierer<br />

damit die Serverantwort in ein Python-<br />

Objekt umwandelt.<br />

Die Anfragen an Github lassen sich über<br />

angehängte Parameter weiter konkretisieren.<br />

Beispielsweise liefert<br />

curl ‐i "https://api.github.com/repos/U<br />

mojombo/jekyll/issues?state=close"<br />

alle geschlossenen Bugreports (»Issues«)<br />

aus dem Repository »jekyll« des Benutzers<br />

»mojombo« zurück. Sollten es mehr<br />

als 30 sein, verteilt sie Github auf mehrere<br />

Seiten. Eine Seite lässt sich mit dem<br />

Parameter »?page=« abrufen:<br />

curl ‐i "https://api.github.com/repos/U<br />

mojombo/jekyll/issues?state=close?page=2"<br />

Ob es weitere Seiten gibt und unter welchen<br />

URLs diese erreichbar sind, schreibt<br />

Github mit in seine Antwort. Diese teilt<br />

sich gemäß HTTP-Standard in einen<br />

Kopfbereich (Header) und einen Rumpf<br />

mit den Nutzdaten (Body). In Python<br />

liefert in Listing 1 die Zeile »inhalt =<br />

antwort.read()« den Rumpf. An die Informationen<br />

im Header gelangt der Programmierer<br />

hiermit:<br />

antwort.headers.getheader('name')<br />

Dabei steht »name« für die gesuchte Zusatzinformation.<br />

Die Angaben zur Seitenzahl<br />

legt Github im Header unter der Bezeichnung<br />

»Link« ab. Wie man damit in<br />

Python die Seitenzahl<br />

ermittelt, zeigt Listing<br />

4. Sollten weitere Seiten<br />

vorhanden sein,<br />

liefert Github wie in<br />

Abbildung 2 entsprechende<br />

URLs zurück.<br />

Die erste verweist<br />

dabei auf die nächste<br />

Seite (»next«), die<br />

folgende URL auf die<br />

letzte (»last«). Zudem<br />

gibt es noch Links zur<br />

ersten Seite (»first«)<br />

und zur vorherigen<br />

(»prev«).<br />

In ihrer Anfrage schicken<br />

der Browser, Curl<br />

oder Python nicht nur<br />

die URL an den Server,<br />

sondern im Header<br />

noch ein paar weitere<br />

Angaben. Darunter befindet sich auch<br />

immer der Name einer Aktion, die Github<br />

ausführen soll. In Listing 1 möchte Python<br />

das Issue mit der Adresse »https://<br />

api.github.com/repos/mojombo/jekyll/<br />

issues/624« abholen. Die entsprechende<br />

Aktion dazu heißt »GET«.<br />

Methodik<br />

Neben »GET« gibt der HTTP-Standard<br />

noch weitere dieser so genannten Methoden<br />

oder Verben vor. Dazu zählt<br />

»DELETE«, das die Ressource »/repos/<br />

mojombo/jekyll/issues/624« und somit<br />

das Issue löschen würde. Diese Methode<br />

gehörte schon zur ersten Version von<br />

HTTP, im Internet ignorieren sie jedoch<br />

die meisten Webserver.<br />

Welche der im HTTP-Standard verzeichneten<br />

Methoden tatsächlich welche<br />

Aktion auslösen, hängt vom jeweiligen<br />

Dienst beziehungsweise der Webanwendung<br />

ab. Um in Github ein neues Issue<br />

dem Repository »test« hinzuzufügen, das<br />

der Benutzer »hans« betreut, müsste ein<br />

Python-Programmierer nur einen entsprechenden<br />

Request zusammenbauen<br />

und die »POST«-Methode wählen:<br />

request = urllib2.Request("https://api.U<br />

github.com/repos/hans/test/issues")<br />

request.get_method = lambda: 'POST'<br />

Hier fehlt noch ein beschreibender Text<br />

für das Issue. Diesen erwartet Github<br />

im Body der empfangenen Nachricht im<br />

Json-Format:<br />

issue = '{"title": "Bug", "body":U<br />

"Bug gefunden." }'<br />

antwort = urllib2.urlopen(req, issue)<br />

Das Issue besitzt einen Titel, der Pflicht<br />

ist, sowie einen optionalen »body«, in<br />

dem der Anwender den Bug näher erläutern<br />

kann. Als Antwort auf die obige<br />

Anfrage liefert Github jedoch einen »404<br />

not found«-Fehler – selbst wenn »hans«<br />

und sein »test«-Repository existieren.<br />

Wer darf das?<br />

Der Grund ist einfach: Damit Witzbolde<br />

nicht massenhaft Issues mit Werbe botschaften<br />

einreichen, verlangt Github bei<br />

bestimmten Aktionen eine Authentifizierung.<br />

Wie viele andere Webanwendungen<br />

verwendet der Dienst dabei das<br />

Oauth2-Verfahren [6]. In der einfachsten<br />

Variante fordert der Benutzer dabei mit<br />

seinem Usernamen und Passwort bei Github<br />

ein Token an, das er dann jeder<br />

weiteren Anfrage beifügt.<br />

Wie das unter Python funktioniert, zeigt<br />

Listing 5. Zunächst kodiert es den Benutzernamen<br />

(»hans«) und das Passwort<br />

(»geheim«) als Base64. Mit dem Ergebnis<br />

stellt es eine Anfrage an Github zusam-<br />

Listing 2: Zugriff mit »httplib«<br />

01 import httplib<br />

02 <br />

03 connection = httplib.HTTPSConnection('api.github.<br />

com')<br />

04 connection.request('GET', 'https://api.github.com/<br />

repos/mojombo/jekyll/issues/624', '')<br />

05 antwort = connection.getresponse()<br />

06 <br />

07 inhalt = antwort.read()<br />

08 print inhalt<br />

Listing 3: Rückgabe als Python-<br />

Objekt<br />

01 import json<br />

02 import urllib2<br />

03 <br />

04 [...]<br />

05 <br />

06 inhalt = antwort.read()<br />

07 <br />

08 #Wandle inhalt in Objekt um:<br />

09 githubissue = json.loads(inhalt)<br />

10 print githubissue<br />

Entwickler-Tools 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

37


Titelthema<br />

www.linux-magazin.de Entwickler-Tools 12/2012<br />

38<br />

01 import urllib2<br />

Abbildung 2: Informationen zur Paginierung stehen im Header. In diesem Fall<br />

verteilt Github alle Issues des Projekts auf insgesamt 11 Seiten.<br />

men. In den Header der Anfrage kommen<br />

Benutzername und Passwort (Zeile 8).<br />

Der Body enthält ein Json-Objekt mit einer<br />

kurzen Notiz sowie dem Bereich, für<br />

den Zutritt gewünscht ist – in diesem Fall<br />

das Repository (»repo«).<br />

Das Ergebnis dieser Anfrage ist schließlich<br />

das Token, verpackt im Json-Format.<br />

Die Zeilen 11 und 12 lösen das Token heraus.<br />

Die nächsten Zeilen setzen dann wie<br />

gezeigt die Anfrage zum Anlegen eines<br />

Issue zusammen. Die Methode »add_header()«<br />

in Zeile 18 baut das Token in den<br />

Header der Anfrage ein. Damit landet das<br />

Issue erfolgreich in Github (Abbildungen<br />

3 und 4).<br />

Falls bei der Verarbeitung ein Fehler auftritt,<br />

schickt Github eine Antwort zurück,<br />

die im Body die Fehlermeldung im Json-<br />

Listing 4: Auslesen des »Link« im<br />

Header<br />

02 request = urllib2.Request('https://api.github.com/<br />

repos/mojombo/jekyll/issues', data='')<br />

03 request.get_method = lambda: 'GET'<br />

04 antwort = urllib2.urlopen(request)<br />

05 seiten = antwort.headers.getheader('Link')<br />

06 if seiten != 'None' :<br />

07 print 'Es gibt weiteref Seiten: ' + seiten<br />

08 else :<br />

09 print 'Es gibt keine weiteren Seiten.'<br />

01 import urllib2<br />

02 import json<br />

03 import base64<br />

04 <br />

05 # Token anfordern:<br />

Listing 5: Issue anlegen mit Token<br />

06 base64string = base64.encodestring(<br />

'hans:geheim').replace('\n', '')<br />

07 request = urllib2.Request("https://api.github.<br />

com/authorizations")<br />

08 request.add_header("Authorization", "Basic %s"<br />

Format enthält, beispielsweise:<br />

{"message":"Problems U<br />

parsing JSON"}<br />

Aus diesem Grund<br />

sollte der Programmierer<br />

die Antwort – wie in Listing 5<br />

gezeigt – noch auswerten. Die Methode<br />

»getcode()« ermittelt dabei den Statuscode.<br />

Nach dem gleichen Prinzip lassen<br />

sich auch Repositories, Kommentare und<br />

alle übrigen Github-Objekte anlegen, manipulieren<br />

und löschen. Welche HTTP-<br />

Methode mit welcher URL welche Aktion<br />

auslöst, verraten die Github-Developer-<br />

Seiten [7].<br />

Listing 5 braucht mit der »urllib2« ziemlich<br />

viele Codezeilen. Verkürzen lässt sich<br />

das durch den Einsatz von externen Bibliotheken<br />

wie beispielsweise »requests«<br />

[8]. Eine einfache Anfrage reduziert sich<br />

damit auf folgende zwei Zeilen:<br />

antwort = requests.get(' https://api.githubU<br />

.com/repos/hans/test/issues')<br />

print antwort.text<br />

Eine Programmierschnittstelle, die mit<br />

URLs und HTTP arbeitet, bezeichnet man<br />

als RESTful, die Schnittstelle als REST-<br />

API (siehe auch die Einführung zu diesem<br />

Themenschwerpunkt).<br />

Google Code<br />

12 token = result['token']<br />

13 <br />

14 # Issue einfuegen:<br />

15 issue = '{"title": "Bug", "body": "Ich habe da<br />

einen Bug gefunden." }'<br />

16 <br />

17 request = urllib2.Request("https://api.github.<br />

com/repos/timschuermann/test/issues")<br />

18 request.add_header("Authorization", "token %s"<br />

% token)<br />

Auch das Projekthosting-Angebot Google<br />

Code arbeitet mit einem REST-ähnlichen<br />

API, kommuniziert dabei aber mit XML-<br />

Daten und erlaubt darüber nur den Zugriff<br />

auf die Bugreports eines einzigen<br />

Projekts [9]. Alle Issues des Projekts<br />

»python‐twitter« liefert beispielsweise<br />

diese Anfrage:<br />

curl ‐i "https://code.google.com/feeds/U<br />

issues/p/python‐twitter/issues/full"<br />

Zur Authentifizierung fordert der Benutzer<br />

auch hier mit Benutzername und<br />

Passwort ein Token an, wobei er aber<br />

in diesem Fall den Benutzernamen und<br />

das Passwort als Parameter an die URL<br />

anhängt. Wem der Weg über die URLs zu<br />

kompliziert ist, für den stellt Google ein<br />

eigenes API für Python [10] und Java [11]<br />

bereit. Um mit diesem so genannten „Issue<br />

Tracking API for Python“ alle Issues<br />

des Projekts »python‐twitter« abzurufen,<br />

genügt die erste Zeile aus Listing 6. Die<br />

beiden anderen durchlaufen lediglich die<br />

Issues und geben deren Titel aus.<br />

OTRS<br />

Das Ticketsystem OTRS hingegen geht<br />

einen etwas anderen Weg und nutzt Soap<br />

(siehe auch die Einführung zu diesem<br />

Themenschwerpunkt). Um diese Schnittstelle<br />

zu nutzen, packt der Programmierer<br />

die von OTRS auszuführenden Funktionen<br />

zusammen mit den dazu benötigten<br />

Daten in eine XML-Datei, deren Aufbau<br />

dem Soap-Standard folgt. Diese schickt er<br />

an das Ticketsystem, genauer gesagt an<br />

das Skript hinter »https://OTRS-Server/<br />

otrs/rpc.pl«.<br />

Grundsätzlich lassen sich so alle OTRS-<br />

Klassen aufrufen, die in der API-Dokumentation<br />

aufgeführt sind [12]. Per<br />

Hand eine Soap-gemäße XML-Datei zusammenzusetzen<br />

ist jedoch eine ziemlich<br />

aufwändige Angelegenheit. Da Python<br />

keine Standardbibliothek für Soap enthält,<br />

kann der Bastler hier nur auf Bibliotheken<br />

von Dritten zurückgreifen. Die<br />

Dokumentation der Soap-Schnittstelle ist<br />

zudem äußerst dürftig bis nicht vorhanden.<br />

Kleine Beispiele für PHP, die auf die<br />

Tickets zugreifen, finden sich immerhin<br />

unter [13] sowie unter [14].<br />

% base64string)<br />

09 <br />

10 result = urllib2.urlopen(request, '{"note":<br />

"Access to your repository.", "scopes":<br />

["repo"]}')<br />

11 result = json.loads('\n'.join(<br />

result.readlines()))<br />

19 request.get_method = lambda: 'POST'<br />

20 antwort = urllib2.urlopen(request, issue)<br />

21 <br />

22 #Rueckmeldung ausgeben:<br />

23 print antwort.getcode()<br />

24 print antwort.headers.getheader('content‐type')<br />

25 print antwort.read()<br />

Bugzilla<br />

Der Bugtracker Bugzilla geht ähnlich<br />

wie OTRS vor, nutzt aber den Standard<br />

XML-RPC. Auch dabei verpackt das<br />

Clientprogramm beziehungsweise ein


Abbildung 3: Das von Python abgeschickte Issue …<br />

Abbildung 4: … landet auch in Github.<br />

Skript die gewünschte Aktion in einer<br />

XML-Datei. Diese schickt der Client dann<br />

an das Skript »http://Bugzilla-Server/<br />

xmlrpc.cgi«, das die gewünschte Aktion<br />

ausführt. Die verschickten XML-Dateien<br />

sind jedoch bei XML-RPC wesentlich<br />

einfacher aufgebaut. Zudem bieten viele<br />

Sprachen dafür fertige Bibliotheken an,<br />

so auch Python mit der »xmlrpclib« [15]<br />

(ab Python 3 »xmlrpc.client«). Als kleines<br />

Beispiel zeigt Listing 7, wie man alle<br />

Informationen zum »Product« mit der ID<br />

»1« abholt.<br />

Produktmanagement<br />

Die Funktion »Product.get()« bietet Bugzilla<br />

in seinem API an [16]. Sie verlangt<br />

einen Parameter »ids«, der wiederum in<br />

einer Liste die IDs aller Produkte nennt,<br />

für die Bugzilla die Informationen ausspucken<br />

soll. Den Namen des Parameters<br />

und seinen Wert übergibt der Programmierer<br />

beim Einsatz der »xmlrpclib« als<br />

Dictionary (»id« in Listing 7).<br />

Auf diese Weise lassen sich auch alle<br />

übrigen Funktionen des Bugzilla-API aufrufen<br />

[17]. Ist für einen Funktionsaufruf<br />

auch eine Authentifizierung notwendig,<br />

meldet der Client sich mit der Funktion<br />

»User.login()« an [18]. Bugzilla liefert<br />

dann ein Cookie zurück, das der Benutzer<br />

jedem weiteren Funktionsaufruf beilegen<br />

muss.<br />

Alternativ zu XML-RPC kann der Bugzilla-Nutzer<br />

auch die Json-Variante Json-<br />

RPC heranziehen [19]. Hierfür verpackt<br />

der Client die auszuführenden Funktionen<br />

im Json-Format.<br />

Außerdem gibt es für<br />

Python noch Bibliotheken<br />

von Drittanbietern,<br />

mit denen der<br />

Zugriff auf Bugzilla<br />

mit nur wenigen Zeilen<br />

Code gelingt, beispielsweise<br />

die Bugzillatools<br />

[20].<br />

Fazit<br />

Viele Dienste bieten<br />

wie Github eine<br />

Schnitt stelle nach dem<br />

REST-Prinzip, die Authentifizierung<br />

erfolgt<br />

meist über Oauth. Der<br />

Zugriff über die URL und HTTP-Methoden<br />

ist in der Praxis unkompliziert und<br />

lässt sich mit nahezu jeder Programmiersprache<br />

durchführen. Allerdings sind die<br />

Manipulationsmöglichkeiten damit auch<br />

etwas beschränkt. Ein dickes und mächtiges<br />

API bieten nur die auf XML-RPC<br />

beziehungsweise Soap basierenden Webanwendungen.<br />

Eine solche Schnittstelle zu nutzen ist andererseits<br />

gerade bei Soap mitunter recht<br />

umständlich und kompliziert. Eine Wahl<br />

hat der Anwender dabei nur selten: Die<br />

überwiegende Mehrheit der Dienste und<br />

Webanwendungen bietet nur ein einziges<br />

API. Immerhin darf er sich gelegentlich<br />

zwischen XML und Json als Austauschformat<br />

entscheiden. (mhu) n<br />

Infos<br />

[1] Github: [https:// github. com/]<br />

[2] Bugzilla: [http:// www. bugzilla. org/]<br />

[3] Python-Bibliothek »urllib2«: [http://​<br />

docs. python. org/ library/ urllib2. html]<br />

[4] Python-Bibliothek »httplib«: [http://​<br />

docs. python. org/ library/ httplib. html]<br />

[5] Python-Bibliothek »json«: [http:// docs.​<br />

python. org/ library/ json. html]<br />

Listing 7: Informationen über ein Produkt<br />

01 import xmlrpclib<br />

02 proxy = xmlrpclib.ServerProxy("http://<br />

localhost/bugzilla/xmlrpc.cgi",<br />

use_datetime=True)<br />

03 <br />

04 try:<br />

05 id = {'ids': [1]}<br />

[6] Oauth-Verfahren bei Github:<br />

[http:// developer. github. com/ v3/ oauth/]<br />

[7] Github-API-Dokumentation:<br />

[http:// developer. github. com/]<br />

[8] Requests: [http:// docs. python‐requests.​<br />

org/ en/ latest/ index. html]<br />

[9] Google Code Issue Tracker API:<br />

[http:// code. google. com/ p/ support/ wiki/​<br />

IssueTrackerAPI]<br />

[10] Google Code Issue Tracker API for<br />

Python: [http:// code. google. com/ p/​<br />

support/ wiki/ IssueTrackerAPIPython]<br />

[11] Google Code Issue Tracker API for Java:<br />

[http:// code. google. com/ p/ support/ wiki/​<br />

IssueTrackerAPIJava]<br />

[12] OTRS-Entwicklerseiten:<br />

[http:// dev. otrs. org]<br />

[13] PHP-Beispiel für den Zugriff auf OTRS:<br />

[http:// faq. otrs. org/ otrs/ public. pl?​<br />

Action=PublicFAQZoom& ItemID=369]<br />

[14] PHP-Beispiel für den Zugriff auf OTRS:<br />

[http:// www. iniy. org/ ? p=20& lang=de]<br />

[15] Xmlrpclib: [http:// docs. python. org/​<br />

library/ xmlrpclib. html]<br />

[16] Bugzilla-Schnittstelle für Produkte:<br />

[http:// www. bugzilla. org/ docs/ tip/ en/​<br />

html/ api/ Bugzilla/ WebService/ Product.​<br />

html]<br />

[17] Bugzilla-API: [http:// www. bugzilla. org/​<br />

docs/ tip/ en/ html/ api/]<br />

[18] Informationen zum Anmeldeverfahren in<br />

Bugzilla: [http:// www. bugzilla. org/ docs/​<br />

tip/ en/ html/ api/ Bugzilla/ WebService.​<br />

html# LOGGING_IN]<br />

[19] Bugzilla-Webservice:<br />

[http:// www. bugzilla. org/ docs/ tip/ en/​<br />

html/ api/ Bugzilla/ WebService. html]<br />

[20] Bugzillatools: [http:// pypi. python. org/​<br />

pypi/ bugzillatools/ 0. 5. 2]<br />

[21] Listings zu diesem Artikel: [http://​<br />

www. linux‐magazin. de/ static/ listings/​<br />

magazin/ 2012/ 12/ entwickler‐tools]<br />

Listing 6: Issue Tracking API<br />

01 issues = client.get_issues('python‐twitter')<br />

02 for i in issues.entry:<br />

03 print i.title.text<br />

06 response = proxy.Product.get(id)<br />

07 print response<br />

08 except xmlrpclib.Fault, error:<br />

09 print "Fehlercode: %s" %<br />

error.faultCode<br />

10 print error.faultString<br />

Entwickler-Tools 12/2012<br />

Titelthema<br />

www.linux-magazin.de<br />

39


MEDIALINX<br />

IT-ACADEMY<br />

Mit Experten lernen.<br />

powered by<br />

IT-Trainings<br />

am Standort München.<br />

Von den Machern des <strong>Linux</strong>-<strong>Magazin</strong>s.<br />

Effiziente BASH-Skripte<br />

mit Klaus Knopper,<br />

Gründer der Knoppix-Distribution<br />

Mo, 3.12. - Mi, 5.12.2012<br />

www.medialinx-shop.de/academy<br />

Workshops App-Entwicklung<br />

Android-App-Entwicklung<br />

mit David Wiesner,<br />

App-Entwickler, apphoria<br />

Mi, 28.11. - Fr, 30.11.2012<br />

iOS-App-Entwicklung<br />

mit Jonas Pencke,<br />

App-Entwickler, apphoria<br />

in Vorbereitung<br />

WP8-App-Entwicklung<br />

mit Andreas Thenn,<br />

App-Entwickler, apphoria<br />

in Vorbereitung


In eigener Sache: DELUG-DVD<br />

Caine, Ubuntu, Owncloud, XSS<br />

Einführung 12/2010 12/2012<br />

Software<br />

Auch diesen Monat bekommen DELUG-Käufer wieder die doppelte Menge zum einfachen Preis. Auf zwei Seiten<br />

bringt die Silberscheibe exklusive Inhalte: Von der einen bootet Caine 3.0, von der anderen Ubuntu 12.04.1.<br />

Dazu gibt’s API-Tools, eine virtuelle Maschine mit Owncloud und ein E-Book über Cross-Site-Scripting. Markus Feilner<br />

www.linux-magazin.de<br />

41<br />

Inhalt<br />

42 Bitparade<br />

Drei Webkonferenz-Systeme im Vergleich:<br />

Big Blue Button, Apache Open<br />

Meetings und Vyew.<br />

48 Tooltipps<br />

Diffimg, LPVS, Profanity, Squid-Analyzer,<br />

Taskwarrior und Xc – sechs hilfreiche<br />

Werk zeuge im Kurztest.<br />

52 Projektmanagement mit Rike<br />

Freigegeben: Die Webanwendung bringt<br />

leichtgewichtiges Projektmanagement<br />

nach dem Kanban-Prinzip jetzt auch<br />

unter einer Open-Source-Lizenz.<br />

Neben einem normalen <strong>Linux</strong>-<strong>Magazin</strong><br />

ohne Datenträger gibt es die DELUG-<br />

Ausgabe mit Monats-DVD, bei der die<br />

Redaktion den Datenträger nach einem<br />

speziellen Konzept zusammenstellt: In<br />

einer Art modularem System enthält er<br />

Abbildung 2: Kostenlos als E-Book auf der DVD:<br />

„Cross-Site Scripting“ von Paul Sebastian Ziegler.<br />

Programme und Tools, die in<br />

der jeweiligen <strong>Magazin</strong>-Ausgabe<br />

besprochen werden.<br />

Caine und Ubuntu<br />

12.04.1<br />

Von Seite A der DELUG-DVD<br />

bootet die italienische Live-<br />

Distribution Caine (Computeraided<br />

Investigative Environment).<br />

Sie enthält jede Menge<br />

Forensik-Werkzeuge, mit denen<br />

Admins die Spuren von Einbrüchen<br />

im Firmennetz entdecken<br />

und sichern.<br />

Wer die DVD umdreht und von der zweiten<br />

Seite bootet, findet hier die erste so<br />

genannte Point Release von Ubuntu 12.04<br />

LTS. Dieses Update bereinigt viele Fehler,<br />

die Entwickler seit Erscheinen von<br />

Precise Pangolin im April gefunden und<br />

korrigiert haben.<br />

Exklusiv: Owncloud 4.5 als<br />

virtuelle Maschine<br />

Im HTML-Menü auf Seite A der DELUG-<br />

DVD, finden sich diverse weitere exklusive<br />

Inhalte. So haben die Entwickler<br />

von Owncloud für das <strong>Linux</strong>-<strong>Magazin</strong><br />

eine virtuelle Maschine mit den neuesten<br />

Features der gerade veröffentlichten Version<br />

4.5 des sicheren Dropbox-Replacements<br />

für Unternehmen und Privatleute<br />

gebaut (Abbildung 1, siehe Artikel im<br />

<strong>Linux</strong>-<strong>Magazin</strong> 08/12). Die soll deutlich<br />

schneller synchronisieren, Unteradministratoren<br />

erlauben und externen Storage<br />

besser anbinden.<br />

Wer die VM startet, sollte sofort das ebenfalls<br />

von Owncloud bereitgestellte Online-Update<br />

wahrnehmen – die Entwickler<br />

werden auch nach Redaktionsschluss<br />

Abbildung 1: Dateien und Termine schneller synchronisieren und<br />

externen Storage besser anbinden soll Owncloud 4.5.<br />

dieser Ausgabe weitere Verbesserungen<br />

und Patches einfließen lassen.<br />

Ebenfalls exklusiv auf der DVD finden<br />

DELUG-Leser das komplette E-Book<br />

„Cross- Site Scripting“ des Verlags O’Reilly<br />

(Abbildung 2). Der Autor Paul Sebastian<br />

Ziegler zeigt darin, warum XSS-Angriffe<br />

als die wichtigste Gefährdung von Webanwendungen<br />

schlechthin gelten, und<br />

bringt die Thematik, mit der sich Webserver-Admins<br />

zwangsweise auseinandersetzen<br />

müssen, auch Einsteigern und<br />

Programmierern näher.<br />

Susecon-Videos, Alien Vault<br />

Damit nicht genug: Auf der DVD warten<br />

auch über eine Stunde Videomaterial von<br />

Keynotes der Susecon in Orlando, Florida,<br />

auf Zuschauer sowie die Tools aus dem<br />

Social-Network-API-Artikel dieser Titelstrecke<br />

auf Experimentierfreudige. Dazu<br />

gibt‘s die neuesten Versionen von Rike,<br />

Alien Vault oder Cfenginge, passend zu<br />

den Artikeln in diesem <strong>Linux</strong>-<strong>Magazin</strong>.<br />

Wem das noch nicht reicht, der probiert<br />

Virtual Box 4.2, Novius, Monitorix und<br />

Junkie oder Liferay aus.<br />

n


Software<br />

www.linux-magazin.de Bitparade 12/2012<br />

42<br />

Drei Webkonferenz-Systeme im Test<br />

Sehen, hören, zeigen<br />

Ein Whiteboard für Vortragsfolien, Textchat, Desktopsharing, Sprach- und Video-Übertragung gehören zu einem<br />

guten Konferenzsystem. Es eignet sich damit nicht nur für Firmenmeetings, sondern auch für Hochschulen,<br />

Seminar- und Fortbildungszentren. Diese Bitparade stellt drei Browser-basierte Vertreter vor. Mela Eckenfels<br />

zur Verfügung. Als dritter Kandidat will<br />

die Cloudlösung Vyew [9] zeigen, dass<br />

Konferenzen im Handumdrehen auch<br />

ohne eigenen Server und Administrationskenntnisse<br />

realisierbar sind.<br />

E Big Blue Button<br />

© Marcin Balcerzak, 123RF<br />

Konsequent eingesetzt könnten überfüllte<br />

Hörsäle und Konferenzräume dank<br />

E-Learning-Plattformen [1] und Webkonferenz-Systemen<br />

der Vergangenheit<br />

angehören. Viele Lernwillige bilden sich<br />

heute zu Hause oder im Büro weiter und<br />

verfolgen Vorlesungen oder andere Vorträge<br />

vom eigenen Computer aus. Auch<br />

Firmenmeetings finden inzwischen oft<br />

online statt und bringen Teilnehmer aus<br />

der ganzen Welt zusammen.<br />

Der De-facto-Standard für Telefon- und<br />

Videokonferenzen heißt Skype; auch<br />

Placecam [2] versammelt bis zu 40<br />

Teilnehmer. Wer zusätzliche Inhalte wie<br />

zum Beispiel begleitende Präsentationen<br />

übermitteln möchte, der kombiniert<br />

Werkzeuge wie Flock Draw [3], Prezi<br />

[4] oder Mindmeister [5]. Eine solche<br />

zusammengeschusterte Lösung hinkt<br />

aber spätestens dann, wenn nicht alle<br />

Teilnehmer das gleiche technische Knowhow<br />

mitbringen oder jemand ständig mit<br />

Fragen unterbricht und so konstruktive<br />

Diskussionen verhindert.<br />

Moderne Konferenzsoftware bietet nicht<br />

nur eine integrierte Arbeitsumgebung mit<br />

Whiteboard, Chat- und Telefoniefunktion,<br />

sondern regelt auch die Interaktionsmöglichkeiten<br />

der Teilnehmer. Sie erlaubt bei<br />

Meetings die Zusammenarbeit zwischen<br />

gleichberechtigten Kollegen, die sich alle<br />

per Webcam und Mikrofon einbringen.<br />

Für Webinare und Onlinevorlesungen<br />

stellt die Anwendung einen Moderatorzugang<br />

bereit; alle anderen hören nur zu<br />

beziehungsweise lesen mit und melden<br />

sich nur mit Fragen oder ergänzenden<br />

Hinweisen zu Wort.<br />

Kommerzielle Anbieter wie Elluminate<br />

und Wimba Classroom, beide inzwischen<br />

von Blackboard aufgekauft und in<br />

Blackboard Collaborate vereint [6], beherrschten<br />

lange den Markt. Mit Big Blue<br />

Button [7] und Apache Open Meetings<br />

[8] stehen respektable freie Alternativen<br />

2007 startete der erste Testkandidat als<br />

Projekt der Carleton University im kanadischen<br />

Ottawa. Seit 2009 unterstützt<br />

das Unternehmen Blindside Networks die<br />

Entwicklung. Im Juni 2012 erschien die<br />

stabile Version 0.8, die auch in diesem<br />

Test antritt. Big Blue Button setzt auf<br />

Red5 [10], einen in Java implementierten<br />

freien Real Time Messaging Protocol<br />

Strea ming Server. Das offene Telefoniesystem<br />

Free Switch [11] werkelt im Hintergrund<br />

und stellt die Voice-Chat-Funktionalität<br />

bereit. Big Blue Button steht<br />

unter der GNU Lesser General Public<br />

Licence (LGPL).<br />

Die Macher versprechen, dass die Installation<br />

unter Ubuntu 10.04 weniger als<br />

30 Minuten in Anspruch nimmt [12].<br />

Allerdings dürfte dies nur für eine frisch<br />

aktualisierte Ausgabe der LTS-Distribution<br />

gelten. Andernfalls dauert das während<br />

der Einrichtung notwendige »apt‐get<br />

dist‐upgrade« je nach Bandbreite schon<br />

deutlich länger. Mit neueren Ubuntu-<br />

Versionen, Debian und Fedora spielt die<br />

Konferenzsoftware ebenfalls zusammen;<br />

Anwender sollten aber zusätzliche Zeit<br />

zum Basteln einkalkulieren.<br />

Für Ubuntu und Debian gibt es fertige<br />

Pakete im Downloadbereich, die Abhängigkeiten<br />

zu anderen Komponenten<br />

automatisch auflösen. Benutzer anderer<br />

Distributionen finden die Quellen zu<br />

Big Blue Button und anderen Komponenten<br />

im Github-Repository [13]. Das


Programm benötigt zahlreiche weitere<br />

Open-Source-Tools, darunter MySQL,<br />

Ruby, Open Office, Imagemagick, Sox<br />

und Tomcat, die Anwender im Zweifelsfall<br />

vorher einspielen müssen. Wenn es<br />

schneller gehen soll, dann steht eine fertige<br />

virtuelle Maschine zum Download<br />

bereit [14], die Anwender mit VMware<br />

Player beziehungsweise VMware Fusion<br />

unter Mac OS X starten.<br />

Big Blue Button benötigt Flash 10 im<br />

Webbrowser. Schützt eine Firewall den<br />

Rechner, sollte der Administrator vorher<br />

die Ports 80, 1935 und 9123 freigeben.<br />

Normalerweise integriert sich die Konferenzsoftware<br />

direkt in Lernumgebungen<br />

oder Contentmanagement-Systeme, läuft<br />

aber auch eigenständig. In diesem Fall<br />

nehmen Anwender am besten die Datei<br />

»demo3.jsp« als Vorlage und passen sie<br />

an eigene Vorstellungen an, um neue virtuelle<br />

Klassenräume zu erstellen (siehe<br />

FAQ auf der Webseite). Bei der weiterführenden<br />

Konfiguration des Servers hilft<br />

das Kommandozeilentool »bbb‐conf«.<br />

Aufgeräumtes Auditorium<br />

Ein Administrations-Interface gibt es<br />

nicht, es ist auch nicht geplant für kommende<br />

Versionen. Die Benutzerverwaltung<br />

ist daher extrem einfach gehalten.<br />

Einen Raum legt der Admin über den<br />

API-Zugang an. Der Anwender, der das<br />

Auditorium zuerst betritt, erhält den Moderatorstatus<br />

(Presentator). Damit besitzt<br />

er alle notwendigen Berechtigungen, um<br />

vorzutragen, Präsentationen hochzuladen<br />

und andere Teilnehmer gegebenenfalls<br />

stummzuschalten. Die Entwickler empfehlen,<br />

Onlinekonferenzen auf maximal<br />

25 Personen zu beschränken, berichteten<br />

aber im Juni diesen Jahres von einem<br />

Stresstest, der bis zu 80 Nutzer verkraftete,<br />

20 davon zusätzlich mit Webcam<br />

beteiligt [15].<br />

Die Oberfläche des virtuellen Hörsaals ist<br />

übersichtlich gegliedert (siehe Abbildung<br />

1). Links oben sind die Benutzer gelistet;<br />

das Icon mit dem Stift markiert den<br />

Moderator. Direkt darunter schaltet dieser<br />

einzelne Teilnehmer gezielt oder alle<br />

gleichzeitig stumm. Ganz unten befindet<br />

sich das Videofenster beziehungsweise<br />

eine verkleinerte Ansicht des eigenen<br />

Desktops, wenn das Sharing aktiviert ist.<br />

Der mittlere Teil ist für Präsentationen<br />

vorgesehen und nimmt den größten Teil<br />

ein. Rechts befindet sich der Textchat.<br />

Auf dem ersten Reiter unterhält sich die<br />

Gruppe, für jede private Unterhaltung<br />

öffnet Big Blue Button an dieser Stelle<br />

einen neuen Reiter.<br />

Das zentrale Element ist das Whiteboard<br />

in der Mitte. Über den Button unten links<br />

laden Moderatoren ihre Präsentationen<br />

hoch. Die Konferenzsoftware kann mit<br />

verschiedenen Formaten umgehen und<br />

akzeptiert unter anderem Microsoft-<br />

Office-, Open-Office- und PDF-Dateien.<br />

Letztere empfehlen die Entwickler für<br />

zuverlässige Ergebnisse. Unter dem<br />

Whiteboard befinden sich einfache Navigations-<br />

und Zoom-Schaltflächen.<br />

Über den kleinen Bleistift unten rechts<br />

aktiviert der Moderator weitere Icons, mit<br />

denen er in der Präsentation malt und so<br />

Dinge gezielt hervorhebt. Recht mager<br />

Abbildung 2: Ein Klick auf die kleine Hand winkt in<br />

den virtuellen Hörsaal hinein.<br />

fällt die Ausstattung mit Werkzeugen zur<br />

Benutzerinteraktion aus. Die Teilnehmer<br />

können lediglich per Klick auf das Hand-<br />

Symbol virtuell winken und so ums Wort<br />

bitten (siehe Abbildung 2).<br />

Dass Big Blue Button aus dem Universitätsumfeld<br />

stammt, bestätigt sich spätestens<br />

dann, wenn man sieht, mit wie<br />

vielen externen Programmen es zusammenarbeitet.<br />

Es existieren <strong>Schnittstellen</strong><br />

zu den Lernumgebungen Sakai, Chamilo,<br />

Canvas LMS und Moodle, aber auch<br />

zu Contentmanagement-Systemen wie<br />

Wordpress, Joomla, Redmine, Drupal,<br />

Tiki Wiki und Foswiki.<br />

Seit der aktuellen Version 0.8 ist es<br />

möglich, Sessions mitzuschneiden, um<br />

Screencasts für die Teilnehmer anzulegen<br />

oder die Vorträge zu archivieren. Dazu<br />

betreten Anwender den Raum nicht auf<br />

gewohntem Wege, sondern nutzen das<br />

API über eine externe Anwendung. Ein<br />

Benutzerinterface zum Aufnehmen ist<br />

nicht vorhanden. Der Big-Blue-Button-<br />

Server schneidet die gesamte Konferenz<br />

mit, vom Beitritt des ersten Teilnehmers<br />

bis zum Ausloggen des letzten.<br />

Im Video landen sämtliche Ereignisse<br />

(An-/​Abmelden von Anwendern, Gespräche<br />

und Chats) sowie die multimedialen<br />

Komponenten (Audio, Webcam, Präsentationen<br />

und Desktopsharing). Der Server<br />

startet nach dem Ende der Konferenz<br />

ein paar Skripte, um die Aufnahmen zu<br />

konvertieren. Big Blue Button setzt auf<br />

das Mediatoolkit Popcorn [16] zur Wiedergabe<br />

der Aufnahmen.<br />

Bitparade 12/2012<br />

Software<br />

www.linux-magazin.de<br />

43<br />

E Apache Open Meetings<br />

Abbildung 1: Big Blue Button präsentiert seinen Teilnehmern und dem Moderator einen übersichtlichen virtuellen<br />

Hörsaal im Browser.<br />

2006 begann der Programmierer Sebastian<br />

Wagner die Arbeit am zweiten<br />

Testkandidaten. Ursprünglich als Ersatz<br />

für die proprietäre Flash-Video-Konfe-


Software<br />

www.linux-magazin.de Bitparade 12/2012<br />

44<br />

Abbildung 3: Open Meetings blendet hochgeladene Präsentationen in der Mitte ein. Über Klicks auf die kleinen<br />

Icons unter den Benutzernamen oben links verteilt der Moderator gezielt Rechte und entzieht sie.<br />

renzfunktion im Learning Management<br />

System Dokeos [17] geplant, war Open<br />

Meetings recht bald flügge und behauptet<br />

sich seit einiger Zeit als eigenständige<br />

Anwendung am Markt.<br />

Open Meetings baut auf Open Laszlo [18]<br />

und Red5 auf. Von Haus aus verwendet<br />

es die Apache-Derby-Datenbank, für den<br />

produktiven Einsatz empfehlen die Macher<br />

allerdings MySQL, PostgreSQL oder<br />

Oracle. Außerdem benötigt die Konferenzsoftware<br />

Imagemagick, Ghostscript,<br />

Open Office, die SWF Tools, Ffmpeg und<br />

Sox. Der Browser sollte Flash und Java<br />

unterstützen und die Firewall die Ports<br />

5080, 1935 und 8088 freigeben. Im Test<br />

trat Version 2.0 an.<br />

Open Meetings steht unter der Apache-<br />

Lizenz. Pakete stehen derzeit nicht bereit,<br />

aber die Installation aus den Quellen<br />

[19] geht leicht von der Hand. Nach dem<br />

Entpacken des Archivs führt der Anwender<br />

das Skript »red5.sh« aus und erledigt<br />

den Rest über den Webinstaller (»http://<br />

localhost:5080/openmeetings/install«).<br />

Version 2.0 räumt dem Nutzer ebenfalls<br />

die Möglichkeit ein, das Programm über<br />

»./admin.sh« zu installieren. Das Skript<br />

fertigt außerdem Backups an und spielt<br />

diese wieder ein. Sofern alle genannten<br />

Zusatztools installiert sind, ist der Server<br />

im Nu einsatzbereit. Auch dieses Projekt<br />

bietet zum Ausprobieren fertige virtuelle<br />

Maschinen an [20].<br />

Nachdem der Benutzer sich am Open-<br />

Meetings-Server angemeldet hat, wählt er<br />

zunächst den Raum aus, den er betreten<br />

möchte. Sofern das Konferenztool nicht<br />

bereits mit einer Lernumgebung oder einem<br />

CMS verknüpft ist und damit deren<br />

Benutzerverwaltung integriert, muss er<br />

sich zuerst registrieren. Auch bei diesem<br />

Kandidaten dominiert das zentrale<br />

Whiteboard den virtuellen Hörsaal (siehe<br />

Abbildung 3). Am linken Rand befindet<br />

sich die Teilnehmerliste. Über die Icons<br />

unter den Benutzernamen vergibt der<br />

Moderator gezielt Rechte und erlaubt<br />

anderen etwa die Zeichentools oder ihr<br />

Mikrofon zu benutzen.<br />

Fruchtbarer Austausch<br />

Open Meetings bietet drei Raumtypen<br />

an: Konferenz (bis 25 Nutzer, alle dürfen<br />

Audio- und Videofunktion verwenden),<br />

Webinar (bis 150 Teilnehmer, Video und<br />

Abbildung 4: Open Meetings unterstützt Umfragen<br />

zwischen Moderatoren und Teilnehmern.<br />

Audio nur auf Anfrage beim Moderator)<br />

und Interview (nur zwei Anwender dürfen<br />

Audio und Video aktivieren). Über<br />

den kleinen grünen Kreis mit Pluszeichen<br />

erstellen Anwender neue Zeichenbretter;<br />

Open Meetings öffnet für jedes Whiteboard<br />

einen Reiter. Dateien wandern über<br />

den gleichnamigen Menüpunkt oben<br />

links zum Server. Wenn der Betreiber<br />

bei der Installation alles richtig gemacht<br />

hat, dann verträgt die Webkonferenz alle<br />

gängigen Office-, Grafik- und Multimediaformate.<br />

Das Angebot an Zeichentools ist deutlich<br />

besser als bei Big Blue Button. Auch die<br />

Interaktionsmöglichkeiten sind ausgereifter<br />

als beim ersten System. Es ist zwar<br />

nicht möglich, sich per Handzeichen zu<br />

melden, aber über das Menü »Aktionen«<br />

versenden die Moderatoren Einladungen<br />

und legen Umfragen an (siehe Abbildung<br />

4). Einfache Anwender stimmen ab, betrachten<br />

die Ergebnisse, beantragen den<br />

Moderatorenstatus, ein Zeichenbrett und<br />

Freischaltung der eigenen Webcam beziehungsweise<br />

des Mikrofons. Der Chat versteckt<br />

sich am unteren Rand des Browserfensters<br />

und ist in der Voreinstellung<br />

verborgen. Ein Klick auf den kleinen Pfeil<br />

klappt ihn aus.<br />

Das Mitschneiden der Konferenzen starten<br />

Moderatoren im Kamera- und Mikrofon-Einrichtungsdialog<br />

oder per Klick auf<br />

den kleinen Bildschirm unterhalb des Benutzernamens,<br />

über den auch das Desktopsharing<br />

möglich ist. Die Mitschnitte<br />

befinden sich auf der Startseite (außerhalb<br />

der Räume) im Bereich »Aufnahmen«.<br />

Per Klick auf die entsprechende<br />

Schaltfläche laden Anwender diese im<br />

AVI- oder FLV-Format herunter.<br />

Über Plugins kommuniziert Open Meetings<br />

mit Lernumgebungen und Contentmanagement-Systemen<br />

wie Moodle, Sakai,<br />

Joomla, Drupal und Bitrix. Es gibt<br />

auch Erweiterungen für Jira (ein Webbasiertes<br />

Tool zur Fehlerverwaltung,<br />

Problembehandlung und zum operativen<br />

Projektmanagement), für das kommerzielle<br />

Wiki Confluence und das Customer-<br />

Relationship-Management Sugar CRM.<br />

E Vyew<br />

Fehlt die Zeit, eine Webkonferenz-Software<br />

auf dem eigenen Server zu installieren,<br />

dann bietet der dritte Kandidat


einen Ausweg. Der kostenlose Zugang zu<br />

diesem werbefinanzierten Clouddienst ist<br />

in wenigen Minuten eingerichtet, erlaubt<br />

bis zu 20 Räume und zehn gleichzeitige<br />

Nutzer.<br />

Zusätzlich stehen die beiden Tarife Plus<br />

und Professional zur Wahl. Ersterer kostet<br />

rund 10 US-Dollar monatlich, öffnet<br />

bis zu 50 virtuelle Konferenzorte, verwaltet<br />

aber ebenfalls nur zehn Nutzer.<br />

In der Professional-Variante fallen monatlich<br />

rund 20 US-Dollar an, bis zu 150<br />

Räume und 15 Teilnehmer sind drin, und<br />

mehrere Konferenzen dürfen gleichzeitig<br />

stattfinden. In beiden kostenpflichtigen<br />

Varianten erhöhen Anwender die Nutzerzahl<br />

für 1 US-Dollar pro Monat und<br />

Hörer und erhalten Rabatt bei jährlicher<br />

Vorauszahlung.<br />

Vyew läuft in allen modernen Webbrowsern<br />

ohne größere Probleme. Die Webanwendung<br />

benötigt Javascript, Cookies,<br />

Flash 9 und höher, Java 1.6 oder höher<br />

für Desktopsharing und Screenshots sowie<br />

mindestens einen DSL-Anschluss<br />

oder mehr Bandbreite. Chrome-Fans finden<br />

im Webstore eine eigene App für<br />

ihren Lieblingsbrowser [21]. Ein Browsertest<br />

zeigt, ob alle notwendigen Komponenten<br />

funktionieren oder ob eventuell<br />

noch Anpassungen am System oder der<br />

Firewall erforderlich sind [22].<br />

Zimmer mit Aussicht<br />

Wer keinen eigenen Account auf der<br />

Vyew-Webseite erstellen möchte, der kann<br />

sich mit dem Facebook- oder Google-Account<br />

anmelden und diesen mit einem<br />

Vyew-Konto verknüpfen. Nach dem Einloggen<br />

landen Benutzer im Dashboard,<br />

über das sie verschiedene Onlinetutorials<br />

erreichen, einen neuen Konferenzraum<br />

erstellen oder die Einladung zu einem<br />

vorhanden annehmen.<br />

Der Benutzer, der einen Raum eröffnet<br />

hat, ist automatisch der Moderator und<br />

bestimmt, welche Rechte die anderen haben.<br />

Er kann dazu einerseits die allgemeinen<br />

Einstellungen eines Raums anpassen<br />

(»Menu | Room Settings«) und andererseits<br />

auf den Namen eines Teilnehmers<br />

klicken, um ihn zum »Viewer«, »Reviewer«,<br />

»Collaborator« oder »Moderator«<br />

zu machen beziehungsweise über »User<br />

can« gezielt den Zugriff auf Zeichentools,<br />

Kamera und Mikrofon zu erlauben.<br />

Die Anzahl der Zuhörer ist wie erwähnt<br />

zunächst durch die gewählte Vyew-Version<br />

begrenzt, die Anwender können<br />

optional Plätze dazubuchen. Als Obergrenze<br />

nennen die Betreiber 80 Teilnehmer,<br />

100 sind auf Anfrage möglich. Eine<br />

neue Vyew-Version, die sich noch in der<br />

Entwicklung befindet, soll laut Aussagen<br />

der Betreiber die Anzahl deutlich erhöhen;<br />

eine definitive Größe ist aber noch<br />

nicht bekannt.<br />

Vyew präsentiert sich auf den ersten<br />

Blick ähnlich wie Big Blue Button und<br />

Open Meetings. Das Whiteboard in der<br />

Mitte dominiert das Geschehen, zusätzlich<br />

gibt es am Rand Bereiche für Chat,<br />

Webcam-Fenster und Kommentare. Am<br />

linken Rand klappt der Moderator über<br />

das Bleistiftsymbol die Zeichentools aus<br />

(siehe Abbildung 5). Über »Insert« am<br />

oberen Rand fügen Benutzer leere Seiten,<br />

Dateien vom eigenen Computer oder<br />

Links zu anderen Webseiten, Youtube-<br />

Videos oder Treffern der Google-Bildersuche<br />

ein.<br />

Über mitgelieferte Plugins binden sie<br />

außerdem selbst aufgenommene Nachrichten,<br />

Schaltflächen, mathematische<br />

Formeln, Umfragen und anderes ein. Was<br />

die Präsentationsformate angeht, muss<br />

sich der dritte Testkandidat nicht vor der<br />

Open-Source-Konkurrenz verstecken.<br />

Vyew schluckt beim Upload alle gängigen<br />

Officedateien, Grafiken und Flash-<br />

Präsentationen.<br />

Praktisch ist auch der Button »Sync«<br />

beziehungsweise »Unsync« über dem<br />

Whiteboard. Damit kontrollieren Moderatoren,<br />

was Gäste wann im Konferenzraum<br />

sehen. Ist »Sync« aktiviert, betrachten<br />

alle stets das Gleiche, denn Vyew<br />

gleicht dann Start, Stopp und Pause des<br />

Videoplugins und die Ansicht der Präsentationen<br />

ab. So sind alle Teilnehmer stets<br />

auf derselben Seite und können nicht<br />

mehr selbst in den Folien blättern – es sei<br />

denn, sie haben den Status »Moderator«,<br />

»Collaborator« oder »Reviewer«. Dann<br />

dürfen sie über »Unsync« die gemeinsame<br />

Ansicht verlassen.<br />

Der Moderator teilt seinen Desktop mit<br />

anderen Teilnehmern über den Menüpunkt<br />

»Screen Share«. Als zusätzliche<br />

Option aktiviert er per Klick, dass sein<br />

eigener Mauszeiger für die anderen sichtbar<br />

ist. Interaktionsmöglichkeiten erreichen<br />

die Teilnehmer über das Kontext-<br />

E-MAIL<br />

VERLOREN?<br />

Heinlein Mailtrace bringt Licht ins<br />

Dunkel Ihrer Mailserver-Logfiles.<br />

Sie wollen den Kollegen die erfolgreiche<br />

Zustellungen vermeintlich verlorengegangener<br />

E-Mails nachweisen? Oder die<br />

Gründe für Zustellfehler und Mailverzögerungen<br />

analysieren?<br />

Heinlein Mailtrace hält die Logdaten<br />

Ihres Mailservers in Echtzeit bereit.<br />

Eine intuitive GUI übersetzt die Fehlermeldungen<br />

auch für Endanwender.<br />

Ihre Vorteile:<br />

Echtzeit-Recherche für Endanwender<br />

und Helpdesks<br />

Echtzeit-Analysen für Administratoren<br />

Echtzeit-Statistiken für die Administration<br />

Teststellung unter:<br />

www.heinlein-elements.de<br />

<strong>Linux</strong> höchstpersönlich.


Software<br />

www.linux-magazin.de Bitparade 12/2012<br />

46<br />

Abbildung 5: Links neben dem Whiteboard blendet Vyew Bearbeitungswerkzeuge für die Präsentationen ein,<br />

rechts kommunizieren die Teilnehmer.<br />

menü »Change status to«, wenn sie ihren<br />

eigenen Nutzernamen rechts markieren<br />

(siehe Abbildung 6). Hier spenden sie<br />

Applaus oder melden sich per Handzeichen<br />

zu Wort. An hektische Präsentatoren<br />

geben sie über »Slow Down« den<br />

freundlichen Hinweis, es langsamer angehen<br />

zu lassen. Außerdem dürfen sie<br />

sich über »Away« als temporär abwesend<br />

kennzeichen.<br />

Besonders gut gelungen ist bei Vyew,<br />

dass der Content in den Räumen auch<br />

zwischen den Sessions erhalten bleibt.<br />

Somit sind asynchrone Zusammenkünfte<br />

möglich. Eine Autosave-Funktion verhindert<br />

außerdem, dass beim Abbruch einer<br />

Verbindung wertvolle Inhalte abhanden<br />

kommen.<br />

Ebenfalls gut gelöst ist, dass Moderatoren<br />

Whiteboard-Inhalte als PDF-Dateien<br />

exportieren dürfen. Abstriche gibt es hingegen<br />

für die fehlende Aufnahmefunktion.<br />

Zurzeit ist es nicht möglich, eine<br />

Konferenz mitzuschneiden. Ein solches<br />

Feature steht zwar auf der Roadmap für<br />

künftige Versionen, über den Zeitpunkt<br />

schweigen sich die Entwickler allerdings<br />

aus. Das Unternehmen verweist auf die<br />

Möglichkeit, Screencasts mit Programmen<br />

wie Camstudio [23] oder Xvidcap<br />

[24] zu erstellen.<br />

Vyew verfügt über ein API, um die Software<br />

zu Fuß in eigene Applikationen zu<br />

integrieren. Vorgefertigte Plugins und<br />

<strong>Schnittstellen</strong> zu den gängigen Lernumgebungen<br />

und Contentmanagement-Systemen<br />

existieren für den Normalanwender<br />

allerdings nicht. Hierzu verweist das<br />

Unternehmen auf die Enterprise-Version,<br />

deren Bedingungen die Kunden gesondert<br />

aushandeln müssen [25].<br />

Auf gute Zusammenarbeit!<br />

Alle Anwendungen bieten eine integrier te<br />

Arbeitsumgebung mit Textchat, Sprachund<br />

Video-Übertragung, sind benutzerfreundlich,<br />

übersichtlich und robust.<br />

Open Meetings liegt bei den Open-Source-<br />

Tools eine Nasenlänge vor Big Blue Button,<br />

das sich tendenziell an Seminarleiter<br />

richtet und damit eher für den Frontalunterricht<br />

als für Teamarbeit taugt. Open<br />

Meetings stellt angepasste Raumtypen für<br />

Webinare, Konferenzen oder Interviews<br />

bereit und macht daher in beiden Bereichen<br />

eine gute Figur.<br />

Vyew ist ungeschlagen, wenn es darum<br />

geht, schnell und unkompliziert eine Arbeitsgruppe<br />

zusammenzubringen. Die<br />

Möglichkeit, Inhalte über mehrere Sessions<br />

zu bewahren, ist ein echtes Killerfeature.<br />

Anbieter von Webinaren und<br />

Vorlesungen finden in Vyew ebenfalls<br />

eine komfortable Plattform; alle nehmen<br />

allerdings in Kauf, dass der Dienst auf<br />

einem fremden Server läuft. (hej) n<br />

Abbildung 6: Vyew bietet jede Menge Interaktionsmöglichkeiten<br />

für die Teilnehmer.<br />

Infos<br />

[1] Mela Eckenfels, „Virtueller Hörsaal –<br />

E-Learning-Plattformen im Praxistest“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 11/​10, S. 54<br />

[2] Christoph Langner, „Trefflich – Multipoint-Videokonferenzsystem<br />

im Test“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 12/​11, S. 56<br />

[3] Flock Draw: [http:// flockdraw. com]<br />

[4] Mela Eckenfels, „Rote Fäden – Vier<br />

Tools für nicht-lineare Präsentationen“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 10/​12, S. 46<br />

[5] Mindmeister:<br />

[http:// www. mindmeister. com/ de]<br />

[6] Blackboard Collaborate:<br />

[http:// www. blackboard. com/ platforms/​<br />

collaborate/ overview. aspx]<br />

[7] Big Blue Button:<br />

[http:// www. bigbluebutton. org]<br />

[8] Apache Open Meetings: [http:// incubator.​<br />

apache. org/ openmeetings]<br />

[9] Vyew: [http:// www. vyew. com]<br />

[10] Red5: [http:// www. red5. org]<br />

[11] Free Switch: [http:// www. freeswitch. org]<br />

[12] Big Blue Button unter Ubuntu installieren:<br />

[http:// code. google. com/ p/​<br />

bigbluebutton/ wiki/ InstallationUbuntu]<br />

[13] Big-Blue-Button-Download:<br />

[https:// github. com/ bigbluebutton]<br />

[14] VM mit Big Blue Button:<br />

[http:// code. google. com/ p/​<br />

bigbluebutton/ wiki/ BigBlueButtonVM]<br />

[15] Stresstest für Big Blue Button:<br />

[https:// groups. google. com/ forum/ ?​<br />

fromgroups=#!topic/ bigbluebutton‐dev/​<br />

PHzpgVqYAMM]<br />

[16] Renate Hermanns, „Gehaltvolle Zugabe<br />

– Mozilla Popcorn 1.0 im Test“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 04/​12, S. 62<br />

[17] Dokeos:<br />

[http:// www. dokeos‐deutschland. de]<br />

[18] Open Laszlo: [http:// www. openlaszlo. org]<br />

[19] Open Meetings installieren:<br />

[http:// incubator. apache. org/​<br />

openmeetings/ installation. html]<br />

[20] Virtuelle Maschinen für Open Meetings:<br />

[http:// nightly. openmeetings. de/​<br />

openmeetings/ builds/ vmware/]<br />

[21] Vyew-App für Google Chrome: [https://​<br />

chrome. google. com/ webstore/ detail/​<br />

vyew/ ogcldakngnllchlnncngiailfhidjjdp]<br />

[22] Vyew-Browsertest:<br />

[http:// vyew. com/ browsertest]<br />

[23] Camstudio: [http:// camstudio. org]<br />

[24] Xvidcap: [http:// xvidcap. sourceforge. net]<br />

[25] Vyew Enterprise Appliance:<br />

[http:// vyew. com/ site/ product/ appliance]


Software<br />

www.linux-magazin.de Tooltipps 12/2012<br />

48<br />

Werkzeuge im Kurztest<br />

Tooltipps<br />

Xc 1.0<br />

Schlanke Sudo-Alternative<br />

Quelle: [http:// sourceforge. net/ projects/​<br />

execomm]<br />

Lizenz: GPLv3<br />

Alternativen: Sudo, Rootify<br />

LPVS 0.1<br />

Sicherheitslücken in Paketen finden<br />

Quelle: [http:// lzone. de/ package+<br />

vulnerability+scanner]<br />

Lizenz: Perl<br />

Alternativen: Advisory Check, Debsecan<br />

Profanity 0.19<br />

Jabber-Client für die Konsole<br />

Quelle: [https:// github. com/ boothj5/​<br />

profanity/ wiki]<br />

Lizenz: GPLv3<br />

Alternativen: Center ICQ, Mcabber<br />

Sudo ist das Tool der Wahl, um auf <strong>Linux</strong>-<br />

Systemen ein Programm mit den Rechten<br />

eines anderen Benutzers auszuführen.<br />

Die Möglichkeiten sind umfangreich und<br />

die Syntax der Einrichtungsdatei nicht<br />

gerade eingängig. Xc empfiehlt sich als<br />

Alternative mit einer Konfiguration, die<br />

an die »passwd«-Datei erinnert.<br />

Der Aufbau der Datei »/etc/xc.conf« ist<br />

übersichtlich. Jede Zeile enthält die Zuweisung<br />

für genau ein Kommando, die<br />

einzelnen Parameter sind durch Doppelpunkte<br />

voneinander getrennt. Ein Eintrag<br />

beginnt mit einer eindeutigen Befehlsbezeichnung,<br />

ID genannt. Danach folgen<br />

die Accountnamen; lässt der Admin<br />

dieses Feld leer, gelten die Rechte für alle<br />

Benutzer. Als Nächstes kommt die Definition,<br />

unter welcher Kennung das Kommando<br />

laufen soll. Steht hier keine Angabe,<br />

verteilt Xc Rootrechte. Am Schluss<br />

steht der volle Pfad des auszuführenden<br />

Programms.<br />

Anders als Sudo unterstützt Xc keine<br />

Passwortauthentifizierung und erfragt<br />

kein Kennwort, wenn Anwender über<br />

»xc id« ein Programm starten. Ohne Parameter<br />

aufgerufen verrät das Werkzeug,<br />

welche ID-Einträge der Admin konfiguriert<br />

hat.<br />

★★★★★ Xc ist eine interessante Sudo-<br />

Alternative, die leichter zu konfigurieren<br />

ist. Eine Option zur Passwortabfrage<br />

wäre allerdings wünschenswert. n<br />

Sich über kritische Sicherheitslücken<br />

und Patches zu informieren gehört zu<br />

den täglichen Aufgaben eines Admin.<br />

Der <strong>Linux</strong> Package Vulnerability Scanner,<br />

kurz LPVS, geht dabei zur Hand.<br />

Das Perl-Skript durchforstet Onlinequellen<br />

und zeigt, welche Schwachstellen die<br />

installierten Pakete des eigenen Rechners<br />

betreffen. Anwender starten das Skript<br />

über den Aufruf »./lpvs‐scan.pl«; Parameter<br />

erwartet es nicht.<br />

LPVS identifiziert die installierte Distribution<br />

und lädt eine Liste mit aktuell<br />

gepatchten und geänderten Paketen herunter.<br />

Dann vergleicht das Tool die Versionsnummern<br />

der korrigierten Pakete mit<br />

denen der installierten. Falls die eigene<br />

Ausgabe älter und damit betroffen ist,<br />

schreibt LPVS eine Warnung auf die Standardausgabe.<br />

Das Software-Update selbst<br />

stößt der Admin von Hand an.<br />

Die Projektseite listet als unterstützte<br />

Distributionen Ubuntu und Centos; Support<br />

für Debian und Red Hat ist bereits<br />

implementiert, aber im Skript noch auskommentiert.<br />

★★★★★ LPVS ist noch ein sehr junges<br />

Projekt, dessen erste Release vielversprechend<br />

ist. Kombiniert der Admin<br />

das Skript mit einem Cronjob und einem<br />

Mailauftrag, hält es ihn stets auf dem<br />

Laufenden über Sicherheitslücken und<br />

Patches seines Systems.<br />

n<br />

Profanity ist ein Jabber-Client für die<br />

Shell. Wer bereits mit Irssi gechattet hat,<br />

dürfte sich wie zu Hause fühlen, denn<br />

die Entwickler ließen sich von dem IRC-<br />

Client inspirieren. Profanity ist sehr einfach<br />

gehalten: Die obere Titelleiste zeigt<br />

Informationen zum eigenen Account und<br />

den Chatpartnern, die untere Statuszeile<br />

die Anzahl der Verbindungen und Aktivitäten<br />

in den Tabs.<br />

Die Konfigurationsdatei »~/.profanity/<br />

config« enthält drei Bereiche: für das User<br />

Interface (»ui«), die farbliche Gestaltung<br />

der Oberfläche (»colours«) und für die<br />

Verbindungen (»connections«). Es ist<br />

auch möglich, mehrere Konten in der<br />

Einrichtungsdatei zu definieren. Profanity<br />

unterstützt jedoch keine Mehrfachverbindungen<br />

und erlaubt immer nur<br />

den Chat mit einem einzigen Account<br />

auf einem Server.<br />

Viele Einstellungen dürfen Anwender zur<br />

Laufzeit vornehmen. Wie im IRC leiten<br />

sie ihre Kommandos über den Schrägstrich<br />

ein. Für jeden Chat öffnet Profanity<br />

einen eigenen Reiter. Bei der Navigation<br />

durch diese helfen die F-Tasten.<br />

★★★★★ Wer mit Irssi vertraut ist, der<br />

dürfte auch mit Profanity schnell zurechtkommen.<br />

Derzeit lässt die Kontaktverwaltung<br />

noch zu wünschen übrig und<br />

es fehlt die Möglichkeit, mehrere Jabber-<br />

Konten gleichzeitig zu nutzen. n


Squid Analyzer 4.4<br />

Squid-Logdateien auswerten<br />

Quelle: [http:// squidanalyzer. darold. net]<br />

Lizenz: GPLv3<br />

Alternativen: Light Squid, SRG<br />

Taskwarrior 2.1.2<br />

Aufgabenverwaltung für die Konsole<br />

Quelle: [http:// taskwarrior. org/ projects/​<br />

show/ taskwarrior]<br />

Lizenz: MIT<br />

Alternativen: Gtdshell, Outliner Lighto<br />

Diffimg 1.4.0<br />

Grafikdateien vergleichen<br />

Quelle: [http:// sourceforge. net/ projects/​<br />

diffimg]<br />

Lizenz: GPLv2<br />

Alternativen: Gqview<br />

Tooltipps 12/2012<br />

Software<br />

www.linux-magazin.de<br />

49<br />

Beim Auswerten der Access-Logfiles<br />

des freien Proxyservers Squid geht dieses<br />

Werkzeug zur Hand. Squid Analyzer<br />

ist ein Perl-Skript, das die Einträge in<br />

den Protokolldateien sammelt und daraus<br />

ansprechende HTML-Dateien generiert.<br />

Neben der Gesamtübersicht, die die<br />

übertragenen Bytes und Cache Hits zeigt,<br />

präsentiert das Tool auch eine Ausgabe<br />

der Top-URLs oder Top-Level-Domains.<br />

Zudem ist es möglich, nach lokalen Netzwerken<br />

und Benutzern zu ordnen.<br />

In der Voreinstellung zeigt die Indexseite<br />

eine nach Jahren sortierte Übersicht.<br />

Wählt der Anwender eines aus, erscheint<br />

die Nutzungsstatistik des gesamten Jahres<br />

mit anschaulichen Lastkurven. Der<br />

Kalender rechts oben erlaubt einen Blick<br />

auf die Auslastung der einzelnen Monate<br />

und Tage. Squid Analyzer zeigt lediglich<br />

IP-Adressen an. Anwender dürfen diese<br />

aber über zusätzliche Aliasdateien durch<br />

intuitivere Namen ersetzen.<br />

Alle Konfigurationsdateien liegen im<br />

Verzeichnis »/etc/squidanalyzer«. Um<br />

das Analysetool mit der eigenen Infrastruktur<br />

vertraut zu machen, definieren<br />

Admins hier auch, wo sich die Squid-<br />

Accesslogs befinden und wo die fertigen<br />

Berichte landen sollen. Wer möchte, darf<br />

hier auch gezielt Netze und Benutzer von<br />

der Auswertung ausschließen. Soll Squid<br />

Analyzer zudem bei der Kostenaufstellung<br />

behilflich sein, dann erleichtern die<br />

Parameter »CostPrice« und »Currency«<br />

die Abrechnung.<br />

★★★★★ Squid Analyzer erstellt übersichtliche<br />

und aussagekräftige Statistiken,<br />

die mehr über die Nutzung des<br />

Proxyservers verraten. Die Konfiguration<br />

geht leicht von der Hand.<br />

n<br />

Gelbe Haftzettel und allerlei Notizblöcke<br />

gehören vielleicht dank Taskwarrior<br />

der Vergangenheit an. Die Termin- und<br />

Aufgabenverwaltung läuft auf der Shell<br />

und macht daher auch über SSH und<br />

in eigenen Skripten eine gute Figur. Anwender<br />

steuern es vollständig über Sub-<br />

Commands und Aufrufparameter.<br />

Ohne weitere Optionen über den Befehl<br />

»task« gestartet, listet das Tool alle aktuellen<br />

Aufgaben auf. Es zeigt dann die ID,<br />

gegebenenfalls eine Projektzuordnung,<br />

Start- und Endzeit sowie eine kurze Beschreibung<br />

an. Selbst definierte Filter<br />

beschränken die Ausgabe. Die Manpage<br />

und das Cheatsheet auf der Projekthomepage<br />

zeigen in zahlreichen Beispielen die<br />

vielfältigen Möglichkeiten.<br />

Das Sub-Command »add« gefolgt vom<br />

Projektnamen erstellt eine neue Aufgabe.<br />

Um mit dieser sinnvoll arbeiten zu<br />

können, fehlen ihr noch Metadaten wie<br />

Projekt oder Priorität. Über das Sub-Command<br />

»edit« öffnen Nutzer die Metadaten<br />

im Standardeditor und dürfen diese nun<br />

bearbeiten; »edit« mit einem Projektnamen<br />

aufgerufen zeigt alle Aufgaben zu<br />

diesem Projekt nacheinander an und lädt<br />

sie wiederum in den Editor.<br />

Mit weiteren Sub-Commands markieren<br />

Nutzer Aufgaben als erledigt, erweitern<br />

die Beschreibungen oder löschen sie<br />

ganz. Interessant sind auch die Befehle<br />

»merge«, »push« und »pull«, die Task-<br />

Datenbanken remote via SSH oder Rsync<br />

abgleichen.<br />

★★★★★ Taskwarrior unterstützt Anwender<br />

bei der Aufgabenverwaltung. Ein<br />

Blick in die Dokumentation des mächtigen<br />

Werkzeugs ist vor dem ersten Einsatz<br />

unumgänglich.<br />

n<br />

Unterschiede in Textdateien finden Diff,<br />

Kompare & Co. Für Bilder ist Diffimg<br />

das Tool der Wahl. Es vergleicht zwei<br />

Grafiken im RGB-Farbraum miteinander<br />

und zeigt die Abweichungen sowie statistische<br />

Informationen an. Intern verwendet<br />

Diffimg das Q-Image-Format, berücksichtigt<br />

allerdings keine Unterschiede bei<br />

Texturen oder im Alphakanal. Laut Aussage<br />

der Entwickler eignet sich das plattformunabhängige<br />

Tool besonders zum<br />

Vergleichen von Kompressionsstufen eines<br />

Formats oder zum Optimieren von<br />

Raytracing-Parametern.<br />

Der Anwender wählt zunächst zwei Bilder<br />

im BMP-, PNG- oder JPG-Format aus<br />

und kann diese einzeln betrachten oder<br />

in einer Panelansicht nebeneinander legen<br />

und direkt vergleichen. Auf Wunsch<br />

zeigt Diffimg nur die voneinander abweichenden<br />

Pixel an. Weitere Informationen<br />

entnehmen Anwender dem erwähnten<br />

Statistikbereich. Hier finden sie Angaben<br />

zur Bildgröße und auch zur durchschnittlichen<br />

Fehleranzahl. Eine Farbskala verrät<br />

außerdem, wie das Programm die<br />

Unterschiede farblich einstuft.<br />

Zum Vergleichen von großen Bildermengen<br />

bietet Diffimg eine Slide-Compare-Funktion.<br />

Dabei durchsucht das<br />

Programm die Grafikdateien zweier<br />

Verzeichnisse nach Unterschieden. Die<br />

Reihenfolge der Bilder muss in beiden<br />

Ordnern identisch sein.<br />

★★★★★ Auch wenn auf den ersten Blick<br />

zwei Bilder gleich aussehen, liegen doch<br />

oft Unterschied im Detail. Diffimg schaut<br />

genau hin und findet die Abweichungen.<br />

(U. Vollbracht/​hej)<br />

n


Software<br />

www.linux-magazin.de Rike 12/2012<br />

52<br />

Projektmanagement mit Rike<br />

Perfekte Planung<br />

Leichtgewichtige Projektmanagement-Methoden setzen sich offenbar auch in der Software-Entwicklung durch.<br />

Die Firma Arago stellte vor Kurzem die Webanwendung Rike unter eine Open-Source-Lizenz. Das Tool beruht<br />

auf dem Kanban-Prinzip und empfiehlt sich beim Planen von Programmierprojekten. Carsten Zerbst<br />

© Marek Uliasz, 123RF.com<br />

Projektleiter in der IT empfinden klassische<br />

Planungsmodelle oft als zu schwerfällig,<br />

sie stehen einem guten Management<br />

eher im Weg, als es zu fördern.<br />

Interessant, dass mit Kanban (siehe<br />

Kasten „Kanban“) ein Prozess aus der<br />

industriellen Fertigungs- und Materialflussplanung<br />

seinen Weg in die Software-<br />

Entwicklung gefunden hat. Ursprünglich<br />

dient die Methode vor allem der Serienfertigung,<br />

eignet sich aber nach den Anpassungen<br />

des Programmierers David J.<br />

Anderson auch für die software typische<br />

Anfertigung von Einzelstücken.<br />

Rike und Liferay<br />

Auf der Delug-DVD dieses <strong>Magazin</strong>s<br />

befindet sich der bei Drucklegung<br />

DELUG-DVD<br />

aktuelle Zweig des Rike-Git-Repository als<br />

Zip-Datei. Zusätzlich enthält der Datenträger<br />

das Portalframework Liferay in Version 6.1<br />

(Community-Edition).<br />

Kanban richtet sich an Entwickler mit Gestaltungswillen.<br />

Statt die Aufgaben vom<br />

allmächtigen Projektleiter entgegenzunehmen,<br />

entscheiden hier die Programmierer<br />

selbst, welchen Arbeitsschritt sie<br />

als Nächstes angehen. Der Frankfurter IT-<br />

Automatisierungsexperte Arago [1] entwickelt<br />

seit 2010 ein Projektmanagement-<br />

Tool, das auf dem Kanban-Prinzip aufbaut<br />

und gleichzeitig Elemente anderer<br />

agiler Methoden berücksichtigt. Rike [2]<br />

steht seit August 2012 unter einer Open-<br />

Lizenz kostenlos zum<br />

Download bereit.<br />

Alles im Fluss<br />

Die Webanwendung<br />

Rike dient als zentrale<br />

Verteilstation, bei der<br />

die Teammitglieder<br />

selbst Aufgaben kre-<br />

Abhängigkeit<br />

ieren und sich selbst welche aussuchen<br />

können (Pull-Prinzip) und jederzeit einen<br />

Überblick über den Projektzustand<br />

erhalten. Das gesamte Projektgeschehen<br />

bildet Rike mit lediglich vier verschiedenen<br />

Objekten ab. Das sind im Einzelnen<br />

die Artefakte, Meilensteine, Releases und<br />

Aufgaben.<br />

Ein Artefakt bezeichnet den zu produzierenden<br />

Gegenstand wie etwa ein Modul<br />

zur Nutzerverwaltung. Mehrere Meilensteine,<br />

zum Beispiel Spezifikation, Implementation<br />

oder Dokumentation, liegen<br />

auf dem Weg zur Fertigstellung eines<br />

Artefakts. Sie werden erreicht, nachdem<br />

eine entsprechende Aufgabe bearbeitet<br />

wurde. Releases mit Lieferdatum markieren<br />

die Zwischenstände (siehe Abbildung<br />

1).<br />

Das Kernobjekt ist die Aufgabe. Außer<br />

einem Namen enthält sie Angaben über<br />

Artefakt und Meilensteine. Außerdem<br />

hat sie einen bestimmten Lebenszyklus.<br />

Nach dem Anlegen einer Aufgabe bewertet<br />

der Nutzer ihren Schwierigkeitsgrad<br />

und ihre Dringlichkeit. Danach stehen<br />

die Aufgaben zum Bearbeiten bereit, jeder<br />

Mitarbeiter darf sich eine aussuchen<br />

und mit der Arbeit beginnen. Dabei ist er<br />

auf maximal drei Aufgaben gleichzeitig<br />

beschränkt. Außerdem darf er sich mit<br />

selbst erstellten Aufgaben frühestens 24<br />

Stunden nach dem Anlegen befassen.<br />

Artefakte<br />

1<br />

n<br />

Task<br />

Task<br />

erstellen<br />

n<br />

fast<br />

zusammen<br />

1<br />

Version<br />

1<br />

n<br />

Milestone<br />

ergibt<br />

Abbildung 1: Dem Projektmanagement mit Kanban und damit auch Rike<br />

genügen wenige Objekttypen.


Rike hat nicht den Anspruch, das komplette<br />

Projekt abzubilden, also auch<br />

Informationen wie Anforderungs- oder<br />

Architekturdokumente sowie Issues aus<br />

einem Bugtracker anzuzeigen. Stattdessen<br />

bieten Aufgabe, Artefakt und Meilenstein<br />

ein URL-Attribut, das auf Informationen<br />

in bereits bestehenden Systemen<br />

verweist. Beginnt ein Projekt bei null,<br />

stellt das bei der Implementation verwendete<br />

Portalframework Liferay [5] ein<br />

Wiki bereit, das wichtige Informationen<br />

aufnimmt.<br />

Die Webanwendung erlaubt schnellen Zugriff<br />

auf verschiedene Ansichten, um Objekte<br />

zu erzeugen beziehungsweise deren<br />

Projektstatus und Durchsatz anzuzeigen.<br />

Dank des Java-Frameworks Liferay (Abbildung<br />

2) dürfen Nutzer die Elemente<br />

frei anordnen und mit anderen Liferay-<br />

Portlets wie etwa dem Wiki-System<br />

kombinieren. An die Stelle des Kanban-<br />

Boards tritt »All Tasks«, das mit seinen<br />

Filtermöglichkeiten einen Überblick über<br />

die Aufgaben in ihren unterschiedlichen<br />

Zuständen verschafft. »Dependencies«<br />

zeigt die zum Erreichen eines bestimmten<br />

Meilensteins notwendigen Aufgaben<br />

an. Zudem dürfen Anwender hier nach<br />

Abbildung 2: Rike setzt im Hintergrund auf die freie Portalsoftware Liferay.<br />

dem Maximieren über das Icon mit dem<br />

Doppelpfeil Abhängigkeiten zwischen<br />

den Aufgaben definieren. »Task Status«<br />

und »Burndown« geben weitere Informationen<br />

zum Projekt preis (Abbildung 3).<br />

Rike 12/2012<br />

Software<br />

www.linux-magazin.de<br />

53<br />

Die heute führenden Spezialisten stammen oft aus der "Freie Software-Szene" und schulen seit<br />

Jahren im <strong>Linux</strong>hotel. Das erklärt die Breite und Qualität unseres Schulungsangebotes:<br />

AJAX * Amavis * Android * Angriffstechniken * Apache * Asterisk * BaseX * BayesianAnalysis * Bind * C/C++ * Cassandra *<br />

CiviCRM * Cloud * Cluster * ClusterFS * CouchDB * CSS3 * CUPS * Debian * DHCP * DNS * DNSSEC * Echtzeit <strong>Linux</strong> *<br />

Embedded <strong>Linux</strong> * eXist-db * Faces * FAI * Firewall * Forensik * FreeBSD * FreeRADIUS * GeoExt * Git * Grails * GRASS *<br />

Groovy * hadoop * Hochverfügbarkeit * HTML5 * Hudson * iSCSI * IPv6 * ITSM * Java * JavaScript * Jenkins * Kernel * KVM<br />

* LDAP * LibreOffice * <strong>Linux</strong> * LPI * m23 * MacOSX * MapFish * Mapserver * Maven * Mikrocontroller * MVS/380 * MySQL *<br />

Nagios * Node.js * OpenBSD * OpenLayers * OpenOffice * openQRM * OpenVPN * OPSI * OSGi * OTRS * Perl * PHP *<br />

Postfix * PostgreSQL * Puppet * Python * QuantumGIS * R * Rails * RedHat * Routing * Request-Tracker RT * Ruby * Samba<br />

* SAN * Scala * Scribus * Shell * Sicherheit * SNMP * Spacewalk * Spamfilter * SQL * Struts * Subversion * SuSE * TCP/IP *<br />

Tomcat * Treiber * TYPO3 * Ubuntu * UML * Unix * Univention * Virenfilter * Virtualisierung * VoIP * WebGIS * Webservices *<br />

Windows Autoinstall * Windowsintegration * x2go * xen * XML * Xpath * Xquery * z/OS * Zabbix * Zend<br />

Fast 100% der Teilnehmer empfehlen uns weiter. Siehe www.linuxhotel.de<br />

Ja, wir geben es zu und haben überhaupt kein schlechtes Gewissen dabei: Unsere Schulungen machen auch Spaß ;-)


Software<br />

www.linux-magazin.de Rike 12/2012<br />

54<br />

Abbildung 3: Rikes ansprechende Weboberfläche führt Anwender schnell zu den wichtigsten Funktionen. Die<br />

einzelnen Ansichten dürfen Nutzer nach ihren Wünschen anordnen.<br />

Rike liegt noch nicht als fertiges Paket für<br />

die Distributionen vor, Anwender kompilieren<br />

die Software aus den Quellen. Sie<br />

steht unter der MIT-Lizenz, das heißt,<br />

Benutzer dürfen sie für alle Arbeiten kostenlos<br />

verwenden und erweitern, wenn<br />

die Original-Copyright-Hinweise erhalten<br />

bleiben. Im Hintergrund setzt Rike auf<br />

die Standardkomponenten Java, MySQL,<br />

Maven und Graphviz. Zusätzlich benötigt<br />

das Programm Liferay.<br />

In Fahrt<br />

Bei der Installation folgen Anwender am<br />

besten der Anleitung im Github-Repository<br />

und lesen dort vor allem die beiden<br />

Dokumente »Compile and Deploy« und<br />

»Configure Liferay afterwards«. Besonders<br />

wichtig ist der Schritt »Configure the<br />

new Page« aus Letzterem, denn die Layout-Grundeinstellung<br />

von Liferay überlagert<br />

mit dem linken Menü den eigentlichen<br />

Inhalt und macht Rike unbenutzbar.<br />

Im Zweifelsfall hilft es, die Webseite im<br />

Browser etwas zu zoomen, damit das<br />

Auswählen des Layouts klappt.<br />

Wer noch kein Dokumentenverwaltungs-<br />

System nutzt, der sollte gleich das Wiki-<br />

System in Liferay mit installieren. Ähnlich<br />

wie beim Einrichten des Frameworks<br />

für Rike geht das über »Add Page« | »Add<br />

Portlet« | »Wiki«. Nach dem Einloggen<br />

des Test-Users (Benutzername: »test@<br />

liferay.com«, Passwort: »test«) sollten<br />

Anwender über das Control Panel einen<br />

oder mehrere richtige Accounts einrichten<br />

und das Demokonto deaktivieren.<br />

Work in Progress<br />

Rike steht erst am Anfang seiner Entwicklung<br />

und zeigt noch einige Macken. Vor<br />

allem die Dokumentation erscheint verbesserungswürdig<br />

und könnte mit ausführlicheren<br />

Informationen den Einstieg<br />

in die praktische Arbeit erleichtern. Auch<br />

der Workflow ist nicht immer hilfreich.<br />

Wer etwa einen Fehler im Projekt findet<br />

und in Rike einträgt, der muss 24 Stunden<br />

warten, bis er ihn bearbeiten darf.<br />

Wer mit diesen Kinderkrankheiten leben<br />

kann, der bekommt mit Rike und Liferay<br />

ein gutes Team zur Seite und ein praktisches<br />

Projektmanagement-Werkzeug für<br />

den Browser. (hej) <br />

n<br />

Infos<br />

[1] Arago: [http:// www. arago. de]<br />

[2] Rike: [https:// github. com/ arago/ rike]<br />

[3] Kanban:<br />

[http:// limitedwipsociety. ning. com]<br />

[4] Scrum: [http:// www. scrum. org]<br />

[5] Liferay: [http:// www. liferay. com]<br />

Der Autor<br />

Carsten Zerbst arbeitet als Projektleiter und<br />

Software-Architekt im CAD- und PDM-Umfeld für<br />

die Automobil-, Luft- und Raumfahrtindustrie sowie<br />

für den Schiffbau. Er ist vom PMI als Project<br />

Management Professional (PMP) zertifiziert.<br />

Kanban<br />

Als Methode zum Steuern von Produktionsabläufen<br />

liegen die Wurzeln von Kanban (Japanisch<br />

für Karte, Beleg) im industriellen Fertigungsprozess.<br />

Ende der 1940er Jahre stand Taiichi Ohno,<br />

der Erfinder des Toyota-Produktionssystems,<br />

vor der Aufgabe, die Produktivität beim Automobilhersteller<br />

zu verbessern. Eine seiner zentralen<br />

Ideen war die Abkehr von der klassischen<br />

Fertigungssteuerung, die den Materialfluss bis<br />

runter zur letzten Schraube möglichst genau<br />

plant. An ihre Stelle tritt ein bedarfsgesteuerter<br />

Prozess, bei dem jede Fertigungsstufe über einen<br />

eigenen Puffer verfügt und Material nur bei<br />

Bedarf zur Bearbeitung anfordert.<br />

Der Programmierer David J. Anderson entwickelte<br />

auf dieser Basis einen Kanban-Prozess<br />

für die Entwicklung von Software [3]. 2007<br />

stellte er das Konzept der Öffentlichkeit vor.<br />

Der leichtgewichtige Entwicklungsprozess setzt<br />

auf eigenverantwortliche Mitarbeiter und permanente<br />

Prozessverbesserung. Eine Reihe von<br />

Kernpraktiken regelt das Zusammenspiel der<br />

Projektmitarbeiter. Dreh- und Angelpunkt bildet<br />

das Kanban-Board. Auf ihm kann das Team<br />

jederzeit sehen, welche Tasks anstehen und wer<br />

an welcher Baustelle arbeitet.<br />

Das Board besitzt drei Spalten für die Zustände<br />

»Zu Bearbeiten«, »In Bearbeitung« und »Fertiggestellt«.<br />

Jede Aufgabe hat einen Zettel. Sobald<br />

ein Mitarbeiter freie Kapazitäten hat, holt<br />

er sich eine Task aus der ersten Abteilung und<br />

verschiebt den Zettel von »Zu Bearbeiten« nach<br />

»In Bearbeitung«. Nach getaner Arbeit landen<br />

die Zettel im Bereich »Fertiggestellt«. Um die<br />

Durchlaufzeiten und die Menge der angefangenen<br />

Prozesse zu reduzieren, ist die Menge der<br />

gleichzeitig bearbeiteten Aufgaben beschränkt.<br />

Kenngrößen wie Warteschlangenlänge, Durchlaufzeiten<br />

und so weiter messen und steuern<br />

permanent den Arbeitsfluss. Regeln sind für<br />

alle sichtbar, regelmäßige Feedback-Runden<br />

des gesamten Teams sorgen für kontinuierliche<br />

Verbesserung.<br />

Kanban gehört wie Scrum [4] zu den agilen<br />

Projektmanagement-Methoden. Wichtigster<br />

Unterschied zwischen den beiden Vorgehensmodellen<br />

ist der vorgegebene, konstante Produktionstakt<br />

(Sprint-Dauer) bei Scrum, während<br />

Kanban einen kontinuierlichen Durchlauf<br />

anstrebt. Beiden gemeinsam ist das Streben<br />

nach möglichst großer Transparenz und kontinuierlicher<br />

Prozessverbesserung.


Aus dem Alltag eines Sysadmin: Gif-Animationen<br />

World Wide Wechsel<br />

Einführung 12/2012<br />

Sysadmin<br />

Jenseits hysterisch zuckender Web-Emoticons eignen sich animierte Gif-Bildchen super zum Präsentieren von<br />

Tendenzen, die beispielsweise beim Systemmonitoring auffallen. Ebenfalls nicht für die Katz’ ist es, den stürmischen<br />

Stream einer Webcam in Gifs zu verwandeln. Charly Kühnast<br />

www.linux-magazin.de<br />

55<br />

Inhalt<br />

56 OSSIM und Alien Vault<br />

Frei und kommerziell erhältlich, doch<br />

hinterlässt das getestete Werkzeug fürs<br />

Security Information and Event Management<br />

einen gemischen Eindruck.<br />

62 Cfengine lernt Posix-ACLs<br />

Cfengine 3.4.0 erbt ein Feature der kommerziellen<br />

Version: Posix-ACLs unter<br />

Unix, <strong>Linux</strong> und Windows.<br />

gut auf der Webseite der kleinen Hobby-<br />

Wetterstation ([2], Abbildung 1).<br />

Unzählige Tools können animierte Bilder<br />

erstellen, aber die meisten davon sind<br />

grafisch und nicht per Skript steuerbar.<br />

Ich entscheide mich für Convert aus der<br />

Werkzeugsammlung Imagemagick, das<br />

genau das tut, was sein Name vermuten<br />

lässt, und noch einiges mehr. Im einfachsten<br />

Fall konvertiere ich damit die<br />

Bilder meiner Webcam ins Gif-Format:<br />

© The Blowfish Inc, Fotolia<br />

Kürzlich begann ich mich mit dem Bau<br />

animierter Gifs zu befassen. Nicht weil<br />

ich das Web um weiteren Katzen-Content<br />

bereichern möchte – unsere 16-jährige<br />

Hauskatze [1] ist Bewegungsallergikerin,<br />

da tät’s auch ein Stand- oder Liegebild<br />

–, sondern weil ich Wolkenbewegungen<br />

fürs Web sichtbar machen wollte. Die<br />

Idee kam mir bei einer Orkanwarnung.<br />

Mit einer auf die Baumwipfel und Wolken<br />

gerichten Webcam könnte ich von<br />

überall aus beurteilen, ob für Haus und<br />

Hof Ungemach droht.<br />

Gesagt, getan. Leider ist die Internetanbindung<br />

in der niederrheinischen Tiefebene<br />

genauso dynamisch wie unsere<br />

Katze, Streaming kann ich vergessen.<br />

Also lasse ich die Kamera alle paar Sekunden<br />

ein Bild schießen und backe diese<br />

zu einem animierten Gif zusammen. Das<br />

Bandbeiten sparende Ergebnis macht sich<br />

Abbildung 1: Charlys Wetter-Seite ist mit der Wipfelund-Wolken-Animation<br />

um eine Attraktion reicher.<br />

convert bild.jpg bild.gif<br />

Diesen Arbeitsschritt darf ich mir aber<br />

auch sparen, denn Convert erledigt die<br />

Konvertierung gleich mit, wenn ich das<br />

animierte Gif bauen lasse:<br />

convert ‐delay 100 ‐loop 1 ~/cam/*.jpgU<br />

animation.gif<br />

Der Parameter »‐delay« gibt die Länge<br />

der Pause zwischen den einzelnen Animationsschritten<br />

in Hundertstelsekunden<br />

an, in diesem Fall also eine Sekunde. Mit<br />

»‐loop 1« läuft der Animationszyklus nur<br />

einmal durch und stoppt auf dem letzten<br />

Bild. Mit »‐loop 0« klöppele ich eine<br />

Endlos-Animation, die nach dem letzten<br />

Bild wieder mit dem ersten beginnt.<br />

Auswerten und<br />

präsentieren<br />

Warum schreibe ich überhaupt in der<br />

Sysadmin-Kolumne über animierte Gifs?<br />

Mit der Technik animiere ich gelegentlich<br />

die Übersichtsgrafiken, die sich aus<br />

Überwachungs- und Monitoringtools wie<br />

Cacti, Icinga oder Munin speisen. Die<br />

Ergebnisse verwende ich gerne in Meetings<br />

und Präsentationen, gerade wenn<br />

fachfremde Teilnehmer dabei sind. Animationen<br />

eignen sich gut, um wie auf<br />

einem Zeitstrahl bestimmte Lastzustände<br />

in Relation zur Tageszeit oder im Wochenablauf<br />

zu visualisieren.<br />

Der Funktionsumfang der Imagemagick-<br />

Tools ist gigantisch. Einen Eindruck der<br />

verschiedenen Anwendungsfelder vermitteln<br />

[3] und [4]. Da ist nicht nur<br />

für Immobilienbesitzer, sondern auch für<br />

Admins einiges dabei. (jk) n<br />

Infos<br />

[1] Charlys Katze:<br />

[http:// kuehnast. com/ fun/ wachkatze. jpg]<br />

[2] Charlys Wetterwarte:<br />

[http:// kuehnast. com/ ws]<br />

[3] Imagemagick benutzen:<br />

[http:// www. imagemagick. org/ Usage/]<br />

[4] Bernhard Bablok, „Automatische Bildbearbeitung<br />

mit Imagemagick“: <strong>Linux</strong>-<strong>Magazin</strong><br />

08/​08, S. 52<br />

Der Autor<br />

Charly Kühnast administriert Unix-Syste me im<br />

Rechenzentrum Niederrhein in Kamp-Lintfort. Zu<br />

seinen Aufgaben gehören die Sicherheit und Verfügbarkeit<br />

der Firewalls und<br />

der DMZ. Im heißen Teil seiner<br />

Freizeit frönt er dem Kochen,<br />

im feuchten Teil der<br />

Süßwasseraquaristik und im<br />

östlichen lernt er Japanisch.


Sysadmin<br />

www.linux-magazin.de OSSIM Alien Vault 12/2012<br />

56<br />

Der Security Infrastructure Monitor Alien Vault schützt lokale Netzwerke<br />

Zugriff verwehrt<br />

2003 als Security Infrastructure Monitor gestartet und jüngst in Version 4.0 freigegeben, ist OSSIM unter Open-<br />

Source-Werkzeugen fürs Security Information and Event Management (SIEM) eine beliebte Wahl. Vergleichsweise<br />

günstig, leisten sich aber sowohl die freie als auch die kommerzielle Version Schwächen. Ralf Spenneberg<br />

© tiero, 123RF.com<br />

Kontrolle der Verfügbarkeit und Funktionsfähigkeit<br />

von OSSIM selbst kann er<br />

hier überwachen (Abbildung 2).<br />

Das GUI integriert ebenfalls eine komfortable<br />

Suche in den Logfiles, sodass<br />

der Zugriff per SSH nur in Notfällen erforderlich<br />

ist. Sämtliche Komponenten<br />

darf der Administrator einzeln konfigurieren<br />

oder durch eigene Komponenten<br />

ersetzen, zum Beispiel den automatisch<br />

eingebauten Scanner Open VAS durch ein<br />

eigenes Nessus.<br />

Speziell bei der Benutzerverwaltung haben<br />

die Programmierer von Alien Vault<br />

große Unternehmen und Netze berücksichtigt:<br />

Neben den üblichen Informationen<br />

wie Name, Login und Kennwort legt<br />

der Admin genau fest, welche Menüs der<br />

Benutzer anschließend sehen, verwenden<br />

oder welche Assets er analysieren<br />

darf. Als Asset bezeichnet OSSIM Hosts<br />

und Netzwerke, die der Admin vorher<br />

dem SIEM bekannt machen muss.<br />

Keineswegs im eigenen Tresor, wie sein<br />

Name mit „Vault“ vermuten lässt, hinterlegte<br />

der Security-Spezialist Alien Vault<br />

[1] die 35 Millionen Risikokapital ([2],<br />

[3], [4]), die ihm zwischen 2010 und<br />

2012 zuflossen. Vielmehr nutzte er das<br />

Geld nach eigener Aussage, um das freie<br />

Intrusion Detection System OSSIM [5]<br />

aggressiv voranzutreiben und parallel<br />

dazu unter dem Namen Alien Vault eine<br />

kommerzielle Variante der Software zu<br />

schaffen. Erfolge hat man dabei durchaus<br />

vorzuweisen: Einen großen Teil der Mittel<br />

erhielt die Firma, nachdem die Software<br />

Schadcode identifizieren konnte, der das<br />

US-amerikanische Verteidigungsministerium<br />

befallen hatte [6].<br />

Vor wenigen Wochen erschien mit OSSIM<br />

4.0 die neueste Version der auf Debian<br />

Squeeze basierenden Software. Dieser<br />

Artikel analysiert zunächst die Open-<br />

Source-Variante von Alien Vaults Software<br />

und vergleicht diese anschließend<br />

mit der kommerziellen Version.<br />

Open Source: OSSIM<br />

Die Installationsroutine beruht auf dem<br />

Debian-Installer und wie üblich sollte der<br />

Admin nach der Installation zunächst die<br />

nötigen Updates einspielen. Dies gelingt<br />

ihm sowohl auf der Kommandozeile mit<br />

»alienvault‐update« als auch im übersichtlichen<br />

Web-Dashboard (Abbildung<br />

1). Überhaupt findet der Admin alle Funktionen<br />

im GUI: Von der Netzwerkkonfiguration<br />

über die Benutzerverwaltung<br />

bis hin zu Backup und Restore, sogar die<br />

Aktive und passive Scans<br />

Für die Assets benutzt OSSIM eine eigene<br />

Datenbank, wo sie der Admin entweder<br />

manuell einträgt oder einfach über<br />

einen Scan aufnehmen lässt, inklusive<br />

Betriebssystem und laufender Dienste<br />

(Abbildung 3). Solche Asset Discoveries<br />

lassen sich auch automatisch durchführen<br />

(Abbildung 4), jedoch ist ein Scan<br />

nicht in jedem Netzwerk möglich und<br />

Vorsicht geboten: Auch ein Nmap-Scan<br />

kann schlecht programmierte TCP/​<br />

DELUG-DVD<br />

Auf der Delug-DVD finden Sie<br />

DELUG-DVD<br />

ein ISO-Image, mit dem sich OSSIM, die freie<br />

Alien-Vault-Variante, laut Hersteller in 30 Minuten<br />

installieren lässt.


Abbildung 1: Die OSSIM-Weboberfläche meldet mögliche Updates.<br />

IP-Stacks, zum Beispiel in Embedded-<br />

Systemen wie Klimaanlagen, zum Absturz<br />

bringen. Bei aktiven Scans nutzt<br />

OSSIM auch die WMI-Schnittstelle [7],<br />

um Windows-Systeme auszulesen. Außerdem<br />

ist OCS NG (Open Computers<br />

and Software Inventory Next Generation,<br />

[8]) in OSSIM integriert und lässt sich<br />

wie sein Vorgänger OCS für regelmäßige<br />

Prüfungen nutzen.<br />

Mit PRADS [9] ist ein „Passive Realtime<br />

Asset Detection System“ an Bord, das<br />

selbstständig den Netzwerkverkehr überwacht<br />

und so Hosts, Betriebssysteme und<br />

Dienste erkennt (Abbildung 5). PRADS<br />

aktualisiert die Daten in der Asset-Datenbank<br />

dynamisch, selbst wenn der Admin<br />

keine regelmäßigen Scans eingerichtet<br />

hat. Das garantiert OSSIM stets aktuelle<br />

Daten für die Analyse.<br />

Dienste mit Open VAS und<br />

Nagios überwachen<br />

Die erkannten Systeme scannt der Admin<br />

gleich mit Open VAS nach undichten Stellen<br />

(Abbildung 6). Alle Open-VAS- oder<br />

Nessus-Funktionen stehen parat, Nessus<br />

5 unterstützt OSSIM-Software zurzeit<br />

nicht. Doch die Integration des Verwundbarkeitsscanners<br />

haben die Entwickler<br />

gut gelöst: Sobald er eine Schwachstelle<br />

erkennt, generiert OSSIM automatisch<br />

ein Ticket. Das kann der Admin an einzelne<br />

Benutzer delegieren, mit Anhängen<br />

versehen und darin die Reaktionen dokumentieren.<br />

Geschlossene Tickets zeigt<br />

OSSIM per Default nicht an, sie lassen<br />

sich aber jederzeit über Einstellungen des<br />

Suchfilters wieder aufrufen.<br />

Die erkannten Dienste und Hosts kann<br />

der Admin durch ein ebenfalls in OSSIM<br />

integriertes Nagios überwachen, schlicht<br />

über ein entsprechendes Häkchen in der<br />

Konfiguration der Asset-Datenbank. Einfacher<br />

lässt sich das komplexe Monitoring<br />

mit Nagios schwerlich lösen, leider<br />

ist eine über die einfache Host-Port-Verfügbarkeitsüberwachung<br />

hinausgehende<br />

Konfiguration nicht vorgesehen.<br />

Nicht zu Ende gedacht<br />

Die Asset-Datenbank der OSSIM-Software<br />

hat aber auch einige Lücken. Trotz hohen<br />

Detailgrads landen offenbar weder die<br />

Ergebnisse des Nmap- noch des Open-<br />

VAS-Scans in der Datenbank, sondern<br />

nur PRADS-Daten. Dabei können sowohl<br />

Nmap als auch Open VAS sehr interessante<br />

Informationen liefern, die die passive<br />

Erkennung weit übertreffen, speziell<br />

für die Analyse der späteren Security Incidents<br />

müsste sich das für den Admin<br />

als sehr hilfreich erweisen.<br />

Auch Snort ließe sich besser konfigurieren,<br />

ist es doch eine der Kernfunktionen<br />

von OSSIM. Sinnvoll wäre es beispielsweise,<br />

die Asset-Datenbank direkt für<br />

die Konfiguration von Snort einzusetzen.<br />

Das Schnüffelschwein bietet ja bereits<br />

die Host Attribute Table (siehe Kasten<br />

„Host Attribute Table“), die das von<br />

jedem Host verwendete Betriebssystem<br />

und die angebotenen Dienste enthält.<br />

Leider nutzt OSSIM diese Funktion überhaupt<br />

nicht.<br />

Die wichtigste Funktionalität der OSSIM-<br />

Software bleibt jedoch das Auswerten<br />

und Analysieren der Security Incidents,<br />

wobei sie für den Admin ähnliche Ereignisse<br />

zu einer einzigen, übersichtlichen<br />

Meldung aggregiert. Auch die grafische<br />

Darstellung des Risikofaktors erleichtert<br />

die Auswahl der zu bearbeitenden<br />

Meldungen, die sich direkt in ein Ticket<br />

umwandeln und einem Benutzer für die<br />

Bearbeitung zuweisen lassen.<br />

Als Quelle für die Meldungen dienen die<br />

genutzten IDS-Sensoren und Verwundbarkeitsscanner,<br />

bei OSSIM also OSSEC<br />

und Snort. Letzteres verwendet erfreulicherweise<br />

für die Sammlung der Pakete<br />

die vom Ntop-Projekt betreute Pfring-Bibliothek<br />

[10], die für sehr hohen Durchsatz<br />

optimiert ist.<br />

Unvollständig und unsicher?<br />

Überraschenderweise startet OSSIM Snort<br />

mit Rootrechten, was unter <strong>Linux</strong> – vorsichtig<br />

ausgedrückt – seit Jahren nicht<br />

mehr zeitgemäß ist. Wie alle anderen<br />

Netzwerkdienste bietet auch Snort die<br />

Möglichkeit, nach dem Start die Rootprivilegien<br />

abzugeben. Durch einen Program<br />

mierfehler in Snort könnte ein Angreifer<br />

OSSIM übernehmen.<br />

Auch benutzt die Software für die Analyse<br />

der Security Incidents wieder die<br />

Asset-Datenbank und vernachlässigt die<br />

Abbildung 2: OSSIM überwacht sich selbst, hier die System- und Netzwerkressourcen.<br />

OSSIM Alien Vault 12/2012<br />

Sysadmin<br />

www.linux-magazin.de<br />

57


Sysadmin<br />

www.linux-magazin.de OSSIM Alien Vault 12/2012<br />

58<br />

gefunden Verwundbarkeiten<br />

sträflich. Wünschenswert<br />

wäre es<br />

vielmehr, wenn die<br />

Oberfläche bei einer<br />

Meldung dem Admin<br />

direkt mitteilen würde,<br />

ob der betroffene Host<br />

überhaupt über den<br />

angegriffenen Dienst<br />

verfügt und ob der<br />

angegriffene Host verwundbar<br />

ist.<br />

Hierzu könnte OSSIM das in der Asset-<br />

Datenbank gespeicherte Betriebssystem<br />

auswerten und die hier hinterlegten Ports<br />

mit den Ports des Angriffs vergleichen.<br />

Das aber erfordert entsprechende Informationen,<br />

die leider bisher nicht in<br />

der Open Source Vulnerability Database<br />

(OSVDB, [11]) enthalten sind. OSSIM<br />

verwendet als einziges System diese<br />

Datenbank, während die Wettbewerber<br />

ihren Kunden eigene DBs zur Verfügung<br />

stellen. Erst die kommerzielle Variante<br />

von Alien Vault bringt diese Funktionen<br />

mit, und zwar unter dem Namen Event<br />

Context (Abbildung 7).<br />

Freie Version – absichtlich<br />

verkrüppelt?<br />

Da der freien OSSIM-Variante auch die<br />

entsprechenden Korrelationsregeln fehlen,<br />

entstehen aus den vom IDS gemeldeten<br />

Ereignissen nur in den seltensten Fällen<br />

tatsächliche Incidents. Die Präzision<br />

der Erkennung hängt von den wenigen<br />

im freien Alien-Vault-Feed mitgelieferten<br />

Korrelations-Direktiven ab, auch hier hat<br />

die kommerzielle Variante mehr zu bieten<br />

(Abbildungen 8 und 9).<br />

Abbildung 3: Die Scans für die Asset Discovery lassen sich automatisieren.<br />

Vor allem bei den Korrelationsdirektiven<br />

drängt sich der Eindruck auf, dass<br />

der Hersteller versucht die freie Version<br />

in ihren Funktionen zu beschneiden –<br />

allzu mager sind sie im Vergleich mit der<br />

kommerziellen Version geraten. Natürlich<br />

könnte jeder Anwender seine eigenen<br />

Direktiven erzeugen, jedoch ist dies<br />

ein sehr aufwändiges Unterfangen, das<br />

enormes Wissen verlangt. Ein öffentliches<br />

Repository, in dem freie Direktiven<br />

gespeichert und getauscht werden, wäre<br />

wünschenswert.<br />

Enterprise Alien Vault<br />

Abbildung 4: OSSIM entdeckt Hosts und Dienste.<br />

Besser macht das die kommerzielle Variante,<br />

zu der ein Upgrade über einen<br />

Evaluation-Key in drei simplen Schritten<br />

führt: Dafür ruft der Admin an der Kommandozeile<br />

»alienvault‐setup« auf und<br />

wählt dort im Menü die Option »System‐Upgrade«<br />

und anschließend »Alien<br />

Vault 4«. Nach Eingabe des Schlüssels<br />

verbindet sich das System mit dem geschlossenen<br />

Repository bei Alien Vault<br />

und bezieht hier zusätzliche Pakete und<br />

Signaturen. Alien Vault selbst bietet neben<br />

der reinen, Software-basierten Version<br />

auch Hardware-Appliances an. Die<br />

„All-In-One Appliances“ vereinen sowohl<br />

den Sensor, den Protokollanalysator und<br />

das SIEM und schlagen mit knapp 20 000<br />

Euro zu Buche. Dafür gibt’s den Alien-<br />

Vault-Feed für die Direktiven und Regeln<br />

im ersten Jahr als Subskription, jedes<br />

weitere Jahr kostet gut 3000 Euro.<br />

Abbildung 5: Über das passive PRADS hat OSSIM<br />

einen Host gefunden, auf dem Samba, HTTP und<br />

SSH-Server laufen.<br />

Host Attribute Table<br />

Vor etwa zehn Jahren fanden Forscher heraus,<br />

dass unterschiedliche Betriebssysteme<br />

TCP/​IP-Pakete unterschiedlich defragmentieren<br />

und Verbindungen individuell typisch reassemblieren.<br />

Bei regulären Daten fallen diese<br />

Unterschiede nicht auf, ein Angreifer kann jedoch<br />

zum Beispiel Daten gezielt fragmentiert<br />

übertragen. Dabei dupliziert er ein Fragment<br />

und versieht es mit unkritischen Daten, während<br />

das folgende Fragment seinen Angriffscode<br />

enthält.<br />

Im fertigen defragmentierten Paket kann das<br />

Zielsystem lediglich eines der beiden Fragmente<br />

einbauen. Manche Betriebssysteme nehmen nur<br />

das erste und ignorieren spätere, überlappende<br />

Fragmente, während andere die später eintreffenden<br />

nutzen, um ältere Daten in dem fertigen<br />

Paket zu überschreiben. Kennt ein Angreifer<br />

das Verhalten des Target, dann kann er, wenn<br />

das IDS und das Zielsystem unterschiedliche<br />

Varianten nutzen, durch gezielte Fragmentierung<br />

einen Angriff durchführen, ohne dass das<br />

IDS ihn erkennt.<br />

Um dies zu vermeiden, muss der Admin Snort<br />

für jedes (Betriebs-)System passend konfigurieren.<br />

Genau das ermöglicht die Host Attribute<br />

Table. Mit dieser Tabelle lassen sich aber auch<br />

Dienste auf ungewöhnlichen Ports analysieren:<br />

Die Snort-Regeln überwachen HTTP-Dienste<br />

normalerweise nur auf den klassischen HTTP-<br />

Ports wie 80 oder 8080. Webmin auf Port<br />

10000 bleibt da unbeobachtet, und zwar auch<br />

bei OSSIM.<br />

Weiß jedoch der Admin, dass auf einem bestimmten<br />

Host auf Port 10000 ein HTTP-Service<br />

aktiv ist, kann er die Host Attribute Table<br />

nutzen, um nur für diesen Host und Port die<br />

HTTP-Regeln zu aktivieren. Sämtliche Regeln,<br />

die dann die Information »metadata:service<br />

http;« tragen, überwachen den entsprechenden<br />

Datenverkehr.


OSDC.de<br />

OPEN SOURCE DATA<br />

CENTER CONFERENCE<br />

17. - 18. APRIL 2013 | NUREMBERG<br />

OSSIM Alien Vault 12/2012<br />

Sysadmin<br />

www.linux-magazin.de<br />

59<br />

Abbildung 6: 23 potenzielle Sicherheitslücken hat OSSIMs Open VAS gefunden, zwei davon stuft der Scanner<br />

als kritisch ein. Schade, dass OSSIM nicht alle verfügbaren Daten zur Analyse nutzt.<br />

Für so viel Geld gibt es aber auch einigen<br />

Gegenwert: Die Alien-Vault-Installationen<br />

(Appliance und Softwareversion) verfügen<br />

auch über wesentlich umfangreichere<br />

Signaturen für Snort. Als Partner<br />

von Emerging Threats [12] hält der Hersteller<br />

für seine kommerziellen Kunden<br />

den ET-Pro-Regelsatz [13] bereit. Für die<br />

Sourcefire-VRT-Regeln reicht es dagegen<br />

noch nicht, weil Alien Vault noch kein<br />

Snort-Integrator ist.<br />

Enttäuschend ist, dass die kommerzielle<br />

Variante die oben aufgeführten Kritikpunkte<br />

auch nicht besser bewältigt als<br />

die freie. Snort ist auch hier ein Rootprozess.<br />

Dass das gefährlich ist, haben<br />

Sicherheitslücken in der Vergangenheit<br />

bereits gezeigt [14]. Auch die Host-spezifische<br />

Konfiguration von Snort mit Hilfe<br />

der Host-Attribute-Tables nutzt Alien<br />

Vault nicht. Mit intelligenter manueller<br />

Fragmentierung oder Segmentierung des<br />

Angriffs glückt also ein Angriff so, dass<br />

Alien Vault ihn nicht erkennt, obwohl es<br />

über eine entsprechende Signatur verfügt.<br />

Auch Dienste auf ungewöhnlichen<br />

Ports (ein Webserver auf Port 10000)<br />

kann Alien Vault daher nicht schützen.<br />

Unzureichende Asset-DB<br />

Dafür sollte das System nun die Asset-<br />

Datenbank besser nutzen, um den Analysten<br />

bei der Bearbeitung der Incidents<br />

zu unterstützen. Leider werden diese Daten<br />

aber nur unzureichend aufgearbeitet.<br />

Der Event Context eines Incident, der in<br />

der freien Version nicht verfügbar ist,<br />

wwww.netways.de/osdc<br />

presented by<br />

NETWAYS ®<br />

Abbildung 7: Nur die kostenpflichtige Version kann über den Event Context erkennen, ob ein Angriffsversuch<br />

erfolgversprechend wäre – der freien Version fehlt dieses Feature.<br />

wwww.netways.de/osdc<br />

presented by<br />

NETWAYS ®


Sysadmin<br />

www.linux-magazin.de OSSIM Alien Vault 12/2012<br />

60<br />

Abbildung 8: Das freie OSSIM kann nur<br />

wenige Ereignisse korrelieren und als<br />

Incident aufbereiten.<br />

bietet in der kommerziellen Variante nur<br />

geringe zusätzliche Funktionen (Abbildung<br />

10).<br />

Das überrascht, da die Asset-Datenbank<br />

doch weitreichende Informationen über<br />

das System hat. Sie kennt das Betriebssystem<br />

und den Wert des Zielsystems<br />

eines Angriffs. Bei dem in Abbildung 11<br />

gezeigten Ereignis handelt es sich um<br />

einen gezielten Angriff auf den SSH-Port<br />

des Zielsystems.<br />

Statt im Kontext lediglich zu zeigen, dass<br />

dieser Port auf dem Zielsystem geöffnet<br />

ist, wäre es hilfreich, auch das dort<br />

lauschende Produkt anzuzeigen, wenn<br />

diese Informationen wie hier in der Asset-Datenbank<br />

ohnehin vorliegen. Aus<br />

der OSVDB könnten auch direkt mögliche<br />

bekannte Sicherheitslücken dieser<br />

Software dazustoßen. Außerdem wurde<br />

dem Zielsystem eine Rolle zugewiesen,<br />

die ebenfalls nicht angezeigt wird. Auch<br />

dies könnte dem Admin bei der Analyse<br />

durchaus helfen.<br />

Darüber hinaus fehlen in der Anzeige einige<br />

Schwachstellen auf dem Zielsystem,<br />

die Alien Vault erkannt hat (Abbildung<br />

12). Auch die wären für die Analyse hilfreich,<br />

wenn sie direkt im Event Context<br />

angezeigt würden.<br />

Open Threat Exchange<br />

Abbildung 9: Alien Vault liefert in<br />

seinem Feed über 1400 Regeln für das<br />

automatische Erzeugen von Incidents.<br />

siert auszutauschen.<br />

Ob Senderbase<br />

von<br />

Iron Port und ​Cisco für die Spam-Bekämpfung<br />

oder der Open Threat Exchange<br />

von Alien Vault, die Idee ist dabei<br />

immer, eine weltweite Korrelation der<br />

Bedrohungen zu schaffen.<br />

Hier versucht Alien Vault sich von den<br />

anderen Mitbewerber abzusetzen, indem<br />

es diese Dienstleistung allen OSSIM- und<br />

Alien-Vault-Anwendern kostenlos zur<br />

Verfügung stellt, wenn sie selbst ihre Installationen<br />

als Sensoren veröffentlichen.<br />

Alien Vault hat OTX im Februar 2012 erstmals<br />

vorgestellt und nutzt die Daten in<br />

erster Linie zur Korrelation der als gefährlich<br />

bekannten IP-Adressen. Im August<br />

hat Alien Vault die ersten gewonnenen<br />

Erkenntnisse veröffentlicht [15]. Diese<br />

Daten lassen sich dann in OSSIM oder<br />

Alien Vault als IP-Reputation angezeigen<br />

(Abbildung 13).<br />

Snort selbst und alle hierauf aufbauenden<br />

Produkte sind für die forensische<br />

Abbildung 10: Zwar kommt die kommerzielle Version mit Event Context,<br />

überzeugen kann der aber nicht.<br />

Analyse von Angriffen ungeeignet. Snort<br />

protokolliert nur das eine Paket, das die<br />

von Snort erkannte Signatur enthält. Alle<br />

Pakete, die vorher oder nachher über die<br />

Verbindung liefen, lassen sich anschließend<br />

nicht mehr analysieren. Für die Protokollierung<br />

der später übertragenen Pakete<br />

besitzt Snort zwar eine Funktion, die<br />

meisten Regeln nutzen sie jedoch nicht.<br />

Aufwändige Forensik<br />

Für seine forensischen Analysen kann<br />

der Admin sowohl in der freien als auch<br />

in der kommerziellen Version die umfangreiche<br />

Deep-See-Software von Solera<br />

Networks [16] anbinden, die den gesamten<br />

Netzwerkverkehr aufzeichnet.<br />

Erkennt nun Alien Vault einen Angriff<br />

über das Netzwerk, so kann der Forensiker<br />

direkt über die Solera-Oberfläche auf<br />

die gesamte Netzwerkverbindung zugreifen<br />

und so den Angriff in seinem Kontext<br />

analysieren. Dies benötigt allerdings erhebliche<br />

Ressourcen für die Speicherung<br />

Eine unter Security-Experten in letzter<br />

Zeit sehr beliebte Idee ist es, statistische<br />

Informationen über Angriffe, deren Herkunft<br />

und Art automatisch und anonymi-<br />

Abbildung 11: Auch Alien Vault nutzt nicht alle verfügbaren Informationen aus seiner Asset-Datenbank.


Abbildung 12: Obwohl Alien Vault weitere Schwachstellen erkannt hat, zeigt es diese dem Admin nicht an.<br />

der Daten, daher bieten die wenigsten<br />

Systeme dies direkt an.<br />

Ein gelungenes GUI, viele<br />

Schwächen – aber günstig<br />

OSSIM bietet eine ansprechende Weboberfläche<br />

für die Analyse und Bearbeitung<br />

von Sicherheitsereignissen. Dem<br />

SIEM-Anspruch wird die freie Software<br />

nicht gerecht, da ihr die für die Korrelation<br />

der Daten wichtigen Direktiven fehlen<br />

und so automatisch kaum Incidents<br />

erzeugt werden. Die Software birgt lediglich<br />

eine gefällige und benutzerfreundliche<br />

grafische Oberfläche für den Zugriff<br />

auf viele verschiedene Informationen<br />

wie Security Events, erkannte Verwundbarkeiten<br />

und die Asset-Datenbank. Die<br />

Korrelation muss jedoch der Anwender<br />

selbst vornehmen, was ihn in vielen Fällen<br />

überfordern dürfte.<br />

Die kommerzielle Variante bringt durch<br />

die bessere Unterstützung mit Korrelationsdirektiven<br />

einen einfacheren Zugang<br />

zu den Daten, nutzt jedoch ebenfalls<br />

nicht sämtliche Quellen, um dem Admin<br />

diese Daten konzentriert zu präsentieren.<br />

Für die Analyse muss der Anwender<br />

sich diese daher selbst zeitraubend<br />

zusammenklicken. Die Konkurrenz beherrscht<br />

dieses Feature sehr wohl, verlangt<br />

jedoch meist auch deutlich mehr<br />

Geld. Das Alien-Vault-SIEM stellt trotz<br />

seiner Einschränkungen eine preiswerte<br />

Variante dar. (mfe) <br />

n<br />

Infos<br />

[1] Alien Vault: [http:// www. alienvault. com]<br />

[2] Erste Förderrunde für Alien Vault: [http://​<br />

www. businesswire. com/ portal/ site/ home/​<br />

permalink/ ? ndmViewId=news_view&​<br />

newsId=20100616005412& newsLang=en]<br />

[3] Weitere 8 Millionen: [http:// techcrunch.​<br />

com/ 2012/ 01/ 31/ on‐the‐heels‐of‐nabbing‐<br />

7‐hp‐execs‐cyber‐security‐startup<br />

- alienvault‐raises‐8‐million/]<br />

[4] Dank HP 22 Millionen für Alien Vault:<br />

[http:// in. finance. yahoo. com/ news/<br />

alienvault‐closes‐22‐4‐million<br />

‐100000393. html]<br />

[5] OSSIM: [http:// communities. alienvault.​<br />

com/ community/]<br />

[6] Alien Vault spürt chinesische Malware<br />

im US-Verteidigungsministerium auf:<br />

[http:// venturebeat. com/ 2012/ 01/ 31/<br />

alienvault‐funding/]<br />

[7] Windows Management Instrumentation:<br />

[http:// msdn. microsoft. com/ en‐us/​<br />

library/ windows/ desktop/ aa394582(v=<br />

vs. 85). aspx]<br />

[8] OCSNG: [http:// www. ocsinventory‐ng. org​]<br />

[9] PRADS:<br />

[http:// gamelinux. github. com/ prads/]<br />

[10] Ralf Spenneberg, „Aufgepasst“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 02/​12, S. 70<br />

[11] The Open Source Vulnerability Database:<br />

[http://www.osvdb. org]<br />

[12] Emerging Threats:<br />

[http:// www. emergingthreats. net/]<br />

[13] Emerging Threats PRO:<br />

[http:// www. emergingthreatspro. com]<br />

[14] Snort-Sicherheitslücken: [http:// www. us<br />

‐cert. gov/ cas/ techalerts/ TA05‐291A. html]<br />

[15] 2300 Beiträge aus 77 Ländern: [http://​<br />

www. alienvault. com/ 2012/ 08/ the‐2nd<br />

‐united‐nations‐the‐world‐comes‐together<br />

‐to‐open‐source‐security‐infographic/]<br />

[16] Deep See von Solera Networks:<br />

[http:// www. soleranetworks. com/​<br />

products/ deepsee/]<br />

OSSIM Alien Vault 12/2012<br />

Sysadmin<br />

www.linux-magazin.de<br />

61<br />

Abbildung 13: Alien Vault nutzt statistische Daten der OSSIM- und Alien-Vault-Installationen, um die Reputationen<br />

von IP-Adressen zu bewerten.<br />

Der Autor<br />

Ralf Spenneberg arbeitet<br />

als freier Unix/​<strong>Linux</strong>-Trainer,<br />

Berater und Autor. Mit<br />

seinem Unternehmen Open-<br />

Source Training Ralf Spenneberg<br />

führt er Schulungen<br />

und Beratungen durch. Vor wenigen Wochen<br />

erschien sein neues Buch „KVM für die Server-<br />

Virtualisierung“, das er gemeinsam mit Michael<br />

Kofler verfasst hat.


Sysadmin<br />

www.linux-magazin.de Cfengine 12/2012<br />

62<br />

Die Community-Edition von Cfengine 3.4.0 lernt Posix-ACLs<br />

Stattgegeben<br />

Mancher, der die Verwaltung seiner Unix-, <strong>Linux</strong>- oder Windows-Systeme gerne einem Tool für automatisiertes<br />

Konfigurationsmanagement überlässt, greift zu Cfengine. Auf vielfachen Wunsch erbt die neue Version 3.4.0<br />

auch ein Feature der kommerziellen Version: Posix-ACLs unter Unix, <strong>Linux</strong> und Windows. Valentin Höbel<br />

© filmfoto, 123RF.com<br />

01 body common control {<br />

Bereits zum vierten Mal jährt sich im<br />

kommenden Januar die Release der Version<br />

3 von Cfengine ([1], [2]). Nach derart<br />

langer Wartezeit steht jetzt die Ausgabe<br />

3.4 der Community-Edition an, eine<br />

Beta ist bereits unter [3] erhältlich und<br />

liegt auch auf der DELUG-DVD.<br />

ACL-Request erfüllt<br />

Die kommerzielle Version glänzt zwar<br />

mit erweiterten Reportingfeatures sowie<br />

nativer LDAP-, Datenbank- und Virtualisierungs-Unterstützung,<br />

doch reicht die<br />

02 bundlesequence => { "set_acls" };<br />

03 }<br />

04 <br />

05 bundle agent set_acls {<br />

06 vars:<br />

07 "shared_directories" slist => {<br />

08 <br />

Listing 1: Setfacl-Aufruf<br />

"/home/shared", "/home/archive" };<br />

09 files:<br />

freie Version vielen Systembetreuern in<br />

kleinen und mittleren Unternehmen voll<br />

aus. Verzichten mussten die Community-<br />

Anwender aber bisher auf den Support<br />

für die Windows-Registry und das automatische<br />

Setzen von Posix-ACLs.<br />

Vor allem Letzteres sorgte bei den Anwendern<br />

für Unmut, auf den das Cfengine-Team<br />

jetzt reagiert hat: Ab der kommenden<br />

Version 3.4.0 übernehmen die<br />

Cfengine-Macher in Oslo das ACL-Feature<br />

aus der kostenpflichtigen in die kostenfreie<br />

Variante. Dieser Artikel zeigt, welche<br />

Klimmzüge Admins bisher machen<br />

10 "$(shared_directories)/."<br />

11 create => "true";<br />

12 <br />

13 commands:<br />

14 "/usr/bin/setfacl ‐m u:backup:rwx,g:games:rwx<br />

${shared_directories}"<br />

15 comment => "Setting ACLs on the shared<br />

directories.";<br />

16 }<br />

mussten und wie die neue Version den<br />

Umgang mit ACLs vereinfacht.<br />

Das Setzen von ACLs unter Unix, <strong>Linux</strong><br />

und Windows war in Cfengine 3 bisher<br />

nur mit dem umständlichen Aufrufen von<br />

Tools wie Setfacl möglich. Listing 1 zeigt<br />

eine mögliche Vorgehensweise. Erfahrene<br />

Admins werden die hässlichen Passagen<br />

schnell erkennen. Das ist weder sauber,<br />

noch entspricht es den Empfehlungen der<br />

Cfengine-Macher.<br />

Nutzer der Community-Variante hatten<br />

bisher jedoch keine andere Wahl. Zunächst<br />

definierten sie die Sektion »body<br />

common control«, die Teil jedes Cfengine-<br />

Snippet ist. Dieser Control Body enthält<br />

im Listing lediglich einen Verweis auf das<br />

auszuführende Bundle, kann aber auch<br />

noch eine optionale Versionsnummer des<br />

Skripts beinhalten.<br />

Bundles und Promises<br />

Das anschließende Bundle des Typs<br />

»agent« mit der Bezeichnung »set_acls«<br />

enthält dann die eigentlichen Aktionen<br />

(Promises), die Cfengine für das Setzen<br />

der Zugriffsrechte ausführen muss. Das<br />

erste Promise vom Typ »vars« beinhaltet<br />

eine »slist«-Variable mit dem Namen<br />

»shared_directories«. Die legt, jeweils<br />

in Anführungszeichen und durch ein<br />

Komma getrennt, eine Liste an Verzeichnissen<br />

fest, die der Admin später bearbeitet<br />

wissen will. »slist« gibt den Datentyp<br />

vor – solche Variablen sind besonders<br />

nützlich, wenn später eine Iteration durch<br />

die einzelnen Werte erfolgen soll.<br />

Cfengine 3.4<br />

DELUG-DVD<br />

Auf der DELUG-DVD finden Sie<br />

die aktuelle Beta von Cfengine 3.4.


Das Promise vom Typ »files« enthält im<br />

Normalfall den Namen der zu bearbeitenden<br />

Datei. Da dieses Beispiel jedoch eine<br />

Liste von Verzeichnissen abarbeiten soll,<br />

gibt das Skript einfach den entsprechenden<br />

Variablennamen mit vorangestelltem<br />

Dollarzeichen und umschließenden<br />

Klammern an. Wichtig ist der abschließende<br />

Slash samt Punkt (»/.«): Mit dieser<br />

Zeichenkette teilt der Anwender Cfengine<br />

mit, dass es sich um Verzeichnisse und<br />

nicht um Dateien handelt.<br />

Intelligenter<br />

Cfengine 3 ist an dieser Stelle intelligent<br />

genug, den Inhalt der Slist-Variablen zu<br />

erkennen, und iteriert durch die einzelnen<br />

Werte. Für jedes Verzeichnis in<br />

»shared_directories« führt es also die Aktion<br />

»create« aus. Dieses Promise könnte<br />

der Admin auch weglassen, wenn er<br />

sicher ist, dass die zu bearbeitenden<br />

Verzeichnisse immer existieren. In diesem<br />

Beispiel soll der<br />

Anwender jedoch kein<br />

Risiko eingehen, daher<br />

lässt er Cfengine die<br />

Ordner sicherheitshalber<br />

anlegen.<br />

Im Commands-Promise<br />

steht das Setfacl-<br />

Kommando, das die<br />

ACLs setzt. Das Beispiel<br />

lässt sich noch<br />

verbessern, wenn<br />

auch die anderen Parameter<br />

von Setfacl in<br />

Variablen landen. Als<br />

einfache Demonstration<br />

reicht diese Form<br />

aber aus.<br />

Der Aufruf von Setfacl<br />

kann übrigens nur erfolgreich sein, wenn<br />

das Paket »acl« bereits auf dem System installiert<br />

ist und die Partition unter »/home«<br />

mit ACL-Support hängt, zum Beispiel<br />

über Mount-Optionen in »/etc/fstab«.<br />

Abbildung 1: Die Ausgabe von »/var/cfengine/bin/cf‐agent ‐vf /etc/cfengine3/acl_example_Posix.cf«<br />

zeigt detailreich an der Kommandozeile, wie<br />

Cfengine 3 die Posix-ACLs erfolgreich setzt.<br />

Der folgenden Befehl prüft, ob das frisch<br />

erstellte Cfengine-Snippet Syntaxfehler<br />

enthält:<br />

/var/cfengine/bin/cf‐promises ‐f /etc/U<br />

cfengine3/acl_example_obsolete.cf<br />

Cfengine 12/2012<br />

Sysadmin<br />

www.linux-magazin.de<br />

63<br />

Android User im Abo<br />

Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />

Top-prämie Sichern!<br />

Office-paket für andrOid im Wert<br />

vOn 27,99 eurO gratis zu jedem aBO!<br />

SoftMaker Office Mobile für Android<br />

im Wert von 27,99 Euro gratis zu<br />

jedem print- und Digital-Abo!<br />

*s oftmaker Office mobile für Android inkl. Textverarbeitung, Tabellenkalkulation und<br />

Präsentationsprogramm. Freischaltung erfolgt per Gutscheincode. Angebot gilt solange<br />

der Vorrat reicht, Tablet und Smartphone sind nicht Bestandteil der Prämie!<br />

Jetzt bestellen unter:<br />

www.android–user.de/abo<br />

Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de


Sysadmin<br />

www.linux-magazin.de Cfengine 12/2012<br />

64<br />

Bringt er keine Fehlermeldung, dann<br />

kann der Admin das Skript als Root oder<br />

via Sudo ausführen:<br />

/var/cfengine/bin/cf‐agent ‐f U<br />

/etc/cfengine3/acl_example_obsolete.cf<br />

Ein Blick mit »getfacl« auf »/home/archive«<br />

zeigt den Erfolg (Listing 2).<br />

Native ACLs in 3.4<br />

Wer sich bereits an die Beta von Cfengine<br />

3.4.0 traut, muss sich zunächst das<br />

01 getfacl: Removing leading '/' from absolute path<br />

names<br />

02 # file: home/archive/<br />

03 # owner: root<br />

04 # group: root<br />

05 user::rwx<br />

06 user:backup:rwx<br />

07 group::r‐x<br />

08 group:games:rwx<br />

09 mask::rwx<br />

10 other::r‐x<br />

01 body common control {<br />

Listing 2: »getfacl /home/archive«<br />

02 bundlesequence => { "set_Posix_acls" };<br />

03 }<br />

04 <br />

05 bundle agent set_Posix_acls {<br />

06 vars:<br />

07 "shared_directories" slist => {<br />

08 <br />

"/home/shared", "/home/archive" };<br />

09 files:<br />

Abbildung 2: Jede Menge Snippets und Ideen für Cfengine bietet das Design Center.<br />

Listing 3: Cfengine-native Posix-ACLs<br />

Sourcen-Paket ([3] oder DELUG-DVD)<br />

herunterladen und kompilieren. Hilfe dabei<br />

liefert die Datei »INSTALL«. Achtung:<br />

Die Cfengine-Macher weisen leider nicht<br />

darauf hin, dass vor dem Kompilieren<br />

das Paket »libacl1-dev« bereits vorhanden<br />

sein sollte, sonst installiert sich Cfengine<br />

ohne ACL-Support und der Tester sucht<br />

sich einen Wolf. Richtig gebaut unterstützt<br />

Cfengine 3.4.0b2 die Posix-ACLs<br />

nativ, was sich mit Listing 3 sogleich auf<br />

die Probe stellen lässt.<br />

Im überarbeiteten Beispiel ersetzt ein<br />

Verweis auf eine eigene »acl«-Sektion das<br />

»commands«-Promise. In »body acl« definiert<br />

der Admin zunächst den ACL-Typ,<br />

hier hat er die Wahl zwischen Posix, Ntfs<br />

und »generic«. Anschließend kann er die<br />

einzelnen ACL-Einträge (Access Control<br />

Entries, ACE) angeben.<br />

Während das Beispiel aus Listing 2 noch<br />

der Gruppe »games« die vollen Rechte auf<br />

die festgelegten Ordner »/home/shared«<br />

und »/home/archive« gewährt, findet<br />

sich nach Listing 3 (Zeile 16) nur noch<br />

ein Lese- und Ausführungsrecht. Um den<br />

10 "$(shared_directories)/."<br />

11 acl => crazy_acls;<br />

12 }<br />

13 <br />

14 body acl crazy_acls {<br />

15 acl_type => "Posix";<br />

16 aces => {"user:backup:rwx",<br />

"group:games:rx"};<br />

17 }<br />

Code möglichst schlank zu halten, setzt<br />

das Skript jetzt im ACL-Body nur zwei<br />

Promiser, also Definitionen.<br />

Tatsächlich bietet Cfengine 3.4.0 jedoch<br />

eine Fülle weiterer Einstellungsmöglichkeiten<br />

[5]. Im Beispiel nützlich wäre etwa<br />

die Funktion »acl_method«, die festlegt,<br />

ob die neuen ACLs sich anhängen (»append«)<br />

oder alle bisher gesetzten ACLs<br />

vollständig entfernen und überschreiben<br />

sollen (»overwrite«).<br />

XML-Support für Libvirt-<br />

Dateien<br />

Auch eine weitere Neuerung in Cfengine<br />

3 dürfte so manchen Systemadministrator<br />

dafür entschädigen, dass dessen<br />

Entwickler bisher Libvirtd und die automatisierte<br />

Verwaltung von virtuellen<br />

Maschinen nur in der Enterprise-Variante<br />

anboten. Libvirt hinterlegt seine Konfigurationsdateien<br />

in Form von XML-Dateien<br />

– und mit der Cfengine-Version 3.4.0 ist<br />

es erstmals möglich, auch diese Files direkt<br />

zu bearbeiten.<br />

Das erleichtert das Verwalten von VMs<br />

deutlich, zumindest für den Admin, der<br />

die Libxml2-Pakete installiert hat. Dazu<br />

kommen zahlreiche Bugfixes und weitere<br />

Verbesserungen. Außen vor bleiben<br />

jetzt allerdings Anwender einiger älterer<br />

Plattformen. Sun OS 3 und 4 sowie Digital<br />

Unix unterstützt Cfengine ab sofort<br />

nicht mehr.<br />

Wer intensiver einsteigen will, findet<br />

auf den Webseiten des Cfengine Design<br />

Center (Abbildung 2) ein von der<br />

Community gepflegtes Github-Repository<br />

[6] mit fertigen Snippets und umfangreichem<br />

Anschauungsmaterial. (mfe) n<br />

Infos<br />

[1] Cfengine: [http:// www. cfengine. org]<br />

[2] Version 3 freigegeben:<br />

[https:// cfengine. org/ pipermail/ help<br />

‐cfengine/ 2008‐December/ 004502. html]<br />

[3] Cfengine 3.4 Beta: [https:// cfengine. com/​<br />

forum/ read. php? 1,27608]<br />

[4] Andreas Putzo, „Aktiver Urahn“: <strong>Linux</strong>-<br />

<strong>Magazin</strong> 10/​08, S. 64<br />

[5] Cfengine-Enterprise-Handbuch:<br />

[http:// cfengine. com/ manuals/​<br />

novaownersmanual/]<br />

[6] Cfengine-Snippet-Repository: [https://​<br />

github. com/ cfengine/ design‐center/]


Bücher über HTML-5-Apps sowie Computer Vision mit Python<br />

Tux liest<br />

Bücher 12/2012<br />

Forum<br />

In den Taschen der Mitmenschen stecken allerhand mobile Geräte und Betriebssysteme. Das erste vorgestellte<br />

Buch möchte mit HTML 5 Apps schreiben, die überall dort laufen. Der zweite Titel bringt mit Python und den<br />

passenden Bibliotheken dem Computer das Sehen bei. Andreas Möller, Rainer Poisel, Marlies Rybnicek<br />

www.linux-magazin.de<br />

65<br />

Wer mit vertretbarem Aufwand Apps<br />

für möglichst viele Mobilgeräte anbieten<br />

möchte, erstellt sie am besten mit Hilfe<br />

von Webtechnologien. Wie das geht, erklären<br />

gekonnt Florian Franke und Johannes<br />

Ippen in ihrem Buch „Apps mit<br />

HTML 5 und CSS 3“<br />

HTML 5 für alle<br />

Der Band behandelt Apps für iPhone,<br />

iPad und Android und richtet sich an<br />

Entwickler mit guten Kenntnissen in CSS<br />

und HTML. Die Autoren zeigen die Programmierung<br />

an Beispielen, die sie mit<br />

HTML 5, CSS 3 sowie den Bibliotheken<br />

und Frameworks Jquery, Jquery Mobile,<br />

und Sencha Touch umsetzen.<br />

Das Buch ist in neun Kapitel gegliedert<br />

und vermittelt neben der Programmierung<br />

von Mobilanwendungen auch deren<br />

Konzeption sowie Gestaltungsprinzipien<br />

für die verschiedenen Displayformate.<br />

Zu Beginn besprechen die Autoren die<br />

Stärken und Schwächen von Webapps im<br />

Vergleich zu nativen Programmen, bevor<br />

sie im zweiten Kapitel Neuerungen von<br />

HTML 5 und CSS 3 für den Einsatz auf<br />

mobilen Geräten aufzeigen.<br />

Im dritten Kapitel demonstrieren sie die<br />

Konzeption einer Webapp auf dem Papier<br />

und geben dem Leser das nötige Handwerkszeug<br />

zur Umsetzung an die Hand:<br />

Info<br />

Florian Franke, Johannes<br />

Ippen:<br />

Apps mit HTML 5 und<br />

CSS 3<br />

Galileo Computing, 2012<br />

440 Seiten<br />

30 Euro<br />

ISBN 978-3-8362-1848-1<br />

Als Basis der Webapp dient ein Rastersystem,<br />

wie es auch bei Printmedien üblich<br />

ist. Mit dem Konzept sowie dem Less-<br />

Framework bauen die Autoren Webseiten<br />

im <strong>Magazin</strong>-Layout unabhängig von der<br />

Bildschirmgröße. Zudem beschreiben sie<br />

die Verwendung von Webfonts, Video,<br />

Audio und CSS-Animationen.<br />

Kapitel 5 führt die Entwicklung einer<br />

„Where To Eat“-App vor, die die nächstgelegenen<br />

Restaurants auf einer Karte im<br />

Smartphone anzeigt. Zur Positionsbestimmung<br />

dient das Geolocation-API aus<br />

HTML 5. Die Darstellung erfolgt auf einer<br />

Karte von Google Maps. Zudem erfährt<br />

der Leser, wie er die Bewegungssensoren<br />

der Geräte sowie Offlinespeicher in<br />

Form von Application Cache oder Local<br />

Storage nutzt.<br />

Zum Abschluss zeigt das Buch, wie sich<br />

Webapps mittels Phone Gap und Laker-<br />

Kompendium in native Anwendungen für<br />

iPhone und Android verpacken lassen.<br />

Digitales Sehen<br />

Unter „Computer Vision“ versteht man<br />

alle notwendigen Methoden und Prozesse,<br />

um digitale Bilddaten zu verarbeiten<br />

und zu interpretieren. Das englischsprachige<br />

Buch „Programming Computer<br />

Vision with Python“ richtet sich an interessierte<br />

Leserinnen und Leser, die mit<br />

der Programmiersprache Python bereits<br />

erste Erfahrungen gesammelt haben. Es<br />

fasst die erforderlichen Grundlagen kurz<br />

zusammen, setzt jedoch Basiswissen im<br />

Bereich der Bildbe- und ‐verarbeitung sowie<br />

der Programmierung voraus.<br />

Der Autor hat das Buch in zehn Kapitel<br />

eingeteilt, die Einblicke in die unterschiedlichen<br />

Disziplinen von Computer<br />

Vision bieten. Ein einführendes Kapitel<br />

stellt zunächst die eingesetzten Programmierbibliotheken<br />

wie Numpy, Scipy, PIL<br />

und Matplotlib anhand vieler kurzer Beispiele<br />

vor.<br />

Die restlichen Abschnitte setzen sich mit<br />

Bildverarbeitung, Kameramodellen, Clustering,<br />

Segmentierung sowie der Klassifizierung<br />

von Bildinhalten auseinander.<br />

Auch die umfangreiche Open-CV-Bibliothek<br />

ist ein Thema. Sie umfasst Hunderte<br />

Algorithmen für das maschinelle Sehen.<br />

Übungsaufgaben am Schluss jedes Kapitels<br />

bieten dann die Gelegenheit, das<br />

erworbene Wissen zu vertiefen, und wecken<br />

zudem den Entdeckergeist.<br />

Die Struktur des vorliegenden Buches ist<br />

sehr gut gelungen, die Leser erhalten einen<br />

umfangreichen Werkzeugkasten.<br />

Alle vorgestellten Beispiele beschreiben<br />

funktionstüchtige Prototypen, die den<br />

Python-Grundsätzen entsprechen: Wenige<br />

Codezeilen genügen, um auf hoher<br />

Ebene komplexe Algorithmen schnell<br />

und unkompliziert in der Praxis einzusetzen.<br />

Alle Codebeispiele stehen unter<br />

[http:// programmingcomputervision.​<br />

co m] zum Download bereit.<br />

Es handelt sich bei diesem Titel um eine<br />

hervorragende Lektüre für Praktiker, die<br />

nach den Prinzipien des Rapid Application<br />

Development (RAD) schnell Ergebnisse<br />

bei geringem Entwicklungsaufwand<br />

erzielen möchten. (mhu) <br />

n<br />

Info<br />

Jan Erik Solem:<br />

Programming Computer<br />

Vision with Python<br />

O’Reilly, 2012<br />

260 Seiten<br />

32 Euro<br />

ISBN 978-1-4493-1654-9


Forum<br />

www.linux-magazin.de Susecon 12/2012<br />

66<br />

Bericht von der Susecon in Orlando, Florida<br />

Bellen und beißen<br />

Aggressiver will Suse-CEO Nils Brauckmann die Firma machen: Nicht mehr nur der schweigende Gecko soll sie<br />

sein, sondern auch mal wie ein Hund bellen und beißen. Auch die Enterprise-Konferenz Susecon anlässlich des<br />

20. Geburtstags soll der Attachmate-Tochter auf den amerikanischen Markt helfen. Fotos und Text: Markus Feilner<br />

© Markus Feilner<br />

Abbildung 1: Leguane, Geckos und Chamäleons sind in Florida keine Seltenheit. Dieses gut anderthalb Meter<br />

lange Prachtexemplar räkelt sich auf einem Grab des historischen Friedhofs von Key West.<br />

Orlando, Florida, Ende September. Es<br />

ist Regenzeit – und Hurricane Season.<br />

31 Grad, auch am Abend. Die Schwüle<br />

scheint aus den Sümpfen zu kriechen,<br />

die Orlando umgeben und halb Florida<br />

bedecken. Ohne Klimaanlage geht nichts,<br />

90 Prozent Luftfeuchtigkeit durchnässen<br />

die Kleidung innerhalb von Minuten.<br />

Von Stürmen verschont<br />

Gut, dass während der Susecon ([1], [2])<br />

wenigstens keine Tropenstürme den Südstaatenlandstrich<br />

verwüsten, es regnet<br />

nur regelmäßig, doch ab und zu kommt<br />

immerhin die Sonne ein wenig durch.<br />

Die Highways säumen Schilder, die den<br />

Autofahrer vor Krokodilen, Pantern und<br />

selbst den großen Seeschildkröten warnen.<br />

Die ebenfalls verbreiteten Leguane<br />

(Abbildung 1) scheinen dagegen kein Verkehrszeichen<br />

wert, zu gering ist wohl die<br />

Gefahr, die von ihnen für die Autobahnbenutzer<br />

ausgeht.<br />

Ganz ähnlich präsentiert sich derzeit die<br />

Situation für die Verantwortlichen bei<br />

Suse. Nils Brauckmann, seit der Übernahme<br />

durch Attachmate Suse-CEO, erklärt<br />

in seiner Keynote eindringlich, warum<br />

Anpassbarkeit und Unauffälligkeit<br />

– Attribute, die man gemeinhin Geckos<br />

beziehungsweise Chamäleons zugesteht<br />

– nicht ausreichen, um Suse dauerhaft<br />

auf die Erfolgsspur zu lotsen. „Lieber ein<br />

lila Hund (a purple dog), der auch bellt<br />

und beißt als ein schweigendes Chamäleon!“,<br />

ruft er den Zuhörern auf Suses<br />

Enterprise-Konferenz Susecon in Orlandos<br />

Konferenzzentrum zu. Damit trifft er<br />

einen Nerv unter den SLES-Anwendern<br />

und -Entwicklern, von denen sowohl<br />

Zustimmung als auch die erwartungsgemäße<br />

Ablehnung bei Hardcore-Nerds<br />

widerhallt, für die Krawatten und Vertriebler<br />

ein rotes Tuch sind.<br />

Die Party nicht in Nürnberg<br />

Gerade die Nerds und Fanboys zeigten<br />

sich auf der Konferenz davon enttäuscht,<br />

dass die Firma ihren Geburtstag – den<br />

20. – erstmals nicht in Nürnberg, sondern<br />

in den USA feiert. Den Ausschlag dafür<br />

dürften strategische Entscheidungen des<br />

Marketings gegeben haben. Das Datum<br />

gilt offenbar als guter Anlass, die „langjährige<br />

Erfahrung“ der Company auch<br />

amerikanischen Anwendern deutlicher<br />

vor Augen zu führen.<br />

Marketingchef Michael Miller packt das<br />

ganz unten an: In seiner Keynote versucht<br />

er einigermaßen erfolgreich, den<br />

Anwesenden die korrekte Aussprache des<br />

Firmennamens beizubringen – ganz im<br />

Stil eines Anheizers: „Sprechen Sie mir<br />

nach: Suse, Suse, Suse …“ (Abbildung<br />

2). Dass solche Basics nötig sind, überrascht<br />

den Außenstehenden, fanden sich<br />

unter den 500 Teilnehmer (135 Firmen<br />

aus 35 Ländern) doch auch zahlreiche<br />

US-Kunden.<br />

Diskussionen sind bei Suse derzeit offenbar<br />

an der Tagesordnung, und Brauckmann,<br />

so hört der Konferenzbesucher<br />

von vielen Seiten, glänze dabei mit Of-<br />

DELUG-DVD<br />

Auf der Delug-DVD finden Sie<br />

DELUG-DVD<br />

über eine Stunde Videoaufzeichnungen von<br />

den Keynotes der Susecon 2012 in Orlando,<br />

Florida, mit dem Suse-CEO Nils Brauckmann,<br />

Marketingchef Michael Miller und Dells Executive<br />

Director John Igoe.


Susecon 12/2012<br />

Forum<br />

Abbildung 2: Feucht und heiß ist Florida in der Hurricane Season, auch dank seiner ausgedehnten Sümpfe. In Orlando traf sich die Suse-Enterprise-Community zur<br />

Susecon. Ganz rechts bringt Marketingchef Michael Miller den Anwesenden bei, wie man Suse korrekt ausspricht.<br />

www.linux-magazin.de<br />

67<br />

fenheit und habe erstaunlich flache Hierarchien<br />

bei Suse eingeführt – was gerade<br />

nach der unglücklichen Novell-Historie<br />

[3] unter den Mitarbeitern des ehemals<br />

Nürnberger Unternehmens gut anzukommen<br />

scheint.<br />

Offen präsentiert der CEO in seiner Keynote<br />

auch die aktuellen Zahlen: 215 Millionen<br />

Dollar Umsatz im Fiskaljahr 2012,<br />

für das nächste visiert er 225 an. 750<br />

Mitarbeiter in 43 Ländern betreuen mehr<br />

als 5000 Mitglieder des Partner-Ökosystems<br />

und über 15 000 Kunden weltweit.<br />

Brauckmann (Abbildung 3) ist auf der<br />

ganzen Susecon präsent, man sieht ihn<br />

überall im Gespräch mit Teilnehmern<br />

oder in Workshops oder Diskussionen.<br />

Amerika im Fokus<br />

Suses Strategie sei, so erklärt er im Gespräch<br />

mit dem <strong>Linux</strong>-<strong>Magazin</strong>, auch<br />

auf dem amerikanischen Markt das zu<br />

erreichen, was man in Europa, Südamerika<br />

oder in China bereits geschafft habe.<br />

Sogar im Reich der Mitte sei Suse Marktführer.<br />

Aber geben denn nicht Konkurrenten<br />

wie Red Hat oder andere Konzerne<br />

mit Milliardenumsätzen und Zuwachsraten<br />

im zweistelligen Prozentbereich die<br />

Messlatte vor?<br />

Nein, Suse habe eine eigene Strategie, erklärt<br />

Brauckmann. Man wolle dem Kunden<br />

die „wirklich freie Wahl ohne Vendor-Lock-in“<br />

ermöglichen. Das bestätigt<br />

auch ein Videospot von Referenzkunde<br />

Rackspace, mit der NASA zusammen Initiator<br />

von Open Stack. Der große amerikanische<br />

Hosting-Provider hat sich nach<br />

eigener Aussage für Suse entschieden,<br />

weil „das der einzige Hersteller war, der<br />

auch für andere, freie <strong>Linux</strong>-Varianten<br />

Support anbot. Bei der Konkurrenz hätte<br />

man dagegen Lizenzen für alle Server<br />

kaufen müssen“.<br />

Brauckmann fährt fort: Das Susecon-<br />

Motto „Wir passen an. Sie sind erfolgreich“<br />

(We adapt. You succeed) stünde<br />

für die ganze Produktpalette von Suse.<br />

Offen in alle Richtungen arbeite man aber<br />

auch mit Microsoft oder SAP zusammen.<br />

Suse werde aber sicher nicht in „irgendwelchen<br />

schicken Kram investieren, nur<br />

weil der gerade in ist, sondern sich auf<br />

die Bedürfnisse der Kunden konzentrieren<br />

und dafür weiter Manpower in Support,<br />

Vertrieb und Marketing aufbauen,<br />

aber auch weiterhin freie Community-<br />

Projekte wie Open Suse oder Open Stack<br />

unterstützen“. Aus denen kämen schließlich<br />

immer wieder „wichtige Impulse“ für<br />

die Enterprise-Produkte. Letztere sollen<br />

sich auf die Cloud konzentrieren, die dem<br />

Suse-CEO zufolge für Softwarefirmen bis<br />

2016 mit gut 40 Prozent Umsatzwachstum<br />

aufwarten könne.<br />

Suse setzt dabei auf Cloud-Infrastruktur,<br />

Enterprise-<strong>Linux</strong> und integrierte Systeme,<br />

zum Beispiel für das Gesundheitswesen,<br />

aber auch für integrierte Storage-Geräte.<br />

In fünf Jahren wolle man deutlich lauter,<br />

aggressiver und sichtbarer im Markt<br />

agieren und sich auch im PaaS- und Distributed-Storage-Bereich<br />

einen Namen<br />

gemacht haben, kündigt Brauckmann an,<br />

ohne Details zu nennen.<br />

Die Suse Cloud werde zunehmend vernetzt<br />

mit Suse Studio, Suse Manager,<br />

Open QA (Suses Qualitätsmanagement),<br />

Open Stack und dem Open Suse Build<br />

Service. Auf der Roadmap der Suse Cloud<br />

Abbildung 3: Von links nach rechts: Suses CEO Nils Brauckmann nennt in seiner Keynote Zahlen und Ziele, Intels Dirk Hohndel beteuert die gute Kooperation bei der<br />

Unterstützung der Hardware, Doug Balog von IBM preist die Vorzüge von Suse auf Z-Series.


Forum<br />

www.linux-magazin.de Susecon 12/2012<br />

68<br />

Abbildung 4: Videos mit Commitments, Referenzkunden und viel lauter Musik, dazu der frischgebackene Open-Stack-Chairman Alan Clark (links) und Dells Executive<br />

Director John Igoe (rechts) auf der Susecon. In der Mitte Michael Miller und Mitglieder des Suse-Cloud-Teams, die innerhalb von Minuten eine Cloud-Demo aufsetzten.<br />

finden sich HA-Funktionen für virtuelle<br />

Gäste und Hypervisoren. Eine zentralere<br />

Rolle werde Open Stack spielen, wo Alan<br />

Clark – Suses Director of Industry Initiatives<br />

– gerade in den Aufsichtsrat bestellt<br />

wurde (Abbildung 4, [4]).<br />

Die Techniker und Suse-Kunden unter<br />

den Konferenzbesuchern konnten sich<br />

während der drei Tage in zahlreichen<br />

Tracks mit Workshops, Hands-on-Vorträgen<br />

und Präsentationen einen aktuellen<br />

Überblick der Roadmaps diverser Open-<br />

Source- und Suse-Projekte und der Enterprise-Produkte<br />

verschaffen. Neben Tools<br />

wie dem von Dell entwickelten Crowbar<br />

– einem Cloud-Deployment-Tool, ausdrücklich<br />

auch für echte Hardware, nicht<br />

nur für virtuelle Maschinen – stand dabei<br />

auch die neueste Version des Suse Managers<br />

1.7 [5] auf dem Programm.<br />

Suse Manager 1.7<br />

Eine grün gefärbte Variante von Red Hats<br />

Spacewalk soll Systeme auf Enterprise-<br />

Niveau zentral verwalten und dabei<br />

helfen, Compliance und automatisches<br />

Abbildung 5: Orlandos Konferenzzentrum liegt in den Sümpfen im Süden der<br />

Stadt unweit der Vergnügungsparks von Disney und Universal.<br />

Deployment in einem Web-GUI einzustellen.<br />

Auf der Cebit 2011 hatten die<br />

Nürnberger das kostenpflichtige Produkt<br />

erstmals präsentiert, es basiert auf der<br />

Open-Source-Variante von Red Hats Network<br />

Satellite Server und verwaltet RPMbasierte<br />

Server.<br />

Neu in der in Orlando vorgestellten Version<br />

sind laut Hersteller das komplett<br />

überarbeitete Patchmanagement, diverse<br />

Verbesserungen, aber auch die Integration<br />

von Oracle- und PostgreSQL-Datenbanken.<br />

Anwender können jetzt auch Images<br />

aus Suse Studio direkt aus dem Manager<br />

verteilen, neue Servicepacks aufspielen<br />

und mit Open SCAP ihre Umgebung auf<br />

Compliance überprüfen. Außerdem hat<br />

Suse den IPv6-Support ausgeweitet. Die<br />

ISO-Images zum Testen liegen (noch) auf<br />

Novells Webseiten.<br />

Open Suse Summit in den<br />

USA: „Go Home A Guru!“<br />

Als die Susecon am Freitagmittag ihre<br />

Pforten schloss, begann an gleicher Stelle<br />

(Abbildung 5) der Open Suse Summit<br />

(Motto: „Go Home A<br />

Guru!“), der erste seiner<br />

Art in den USA.<br />

Für ein Wochenende<br />

trafen sich Entwickler<br />

und Projektmitglieder<br />

von Gnome bis zum<br />

Kernel in Workshops,<br />

BOFs und Vorträgen,<br />

um das Open-Suse-<br />

Projekt weiterzubringen<br />

– ganz wie es<br />

die europäische oder<br />

deutsche Community<br />

seit Jahren pflegen.<br />

Open Suse hatte zuletzt ja einigen Sand<br />

im Getriebe [6], die Veröffentlichung von<br />

Open Suse 12.2 (auf der DELUG-DVD<br />

des <strong>Linux</strong>-<strong>Magazin</strong>s 11/​2012) hatte sich<br />

wegen diverser Streits und Qualitätsmängel<br />

um mehrere Monate verzögert. Die<br />

Keynote am Samstag hielt der italienische<br />

Vorsitzende der FSFE Stefano Maffulli,<br />

der über die „Lektionen von Open Source<br />

für die Open Cloud“ referierte.<br />

Einen tieferen Eindruck von der Susecon,<br />

insbesondere von der 20-Jahr-Feier, gewähren<br />

ein Blick in die aufschlussreichen<br />

Videos aus Suses Youtube-Kanal [7] oder<br />

ein Rundgang in den sozialen Netzwerken<br />

[8] mit den dort von Teilnehmern<br />

veröffentlichten Fotos.<br />

n<br />

Infos<br />

[1] <strong>Linux</strong> <strong>Magazin</strong> Online zur Susecon: [http://​<br />

www. linux‐magazin. de/ NEWS/ 20‐Jahre<br />

‐Suse‐Susecon‐2012‐in‐Orlando‐Florida]<br />

[2] Susecon:<br />

[https:// www. suse. com/ events/ susecon/]<br />

[3] Markus Feilner, „Patente im Körbchen“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 05/​11, S. 26<br />

[4] Suses Alan Clark wird Open-Stack-Chairman:<br />

[https:// www. linux‐magazin. de/​<br />

NEWS/ Open‐Stack‐Foundation‐gegruendet]<br />

[5] Suse Manager 1.7: [https:// www. suse. com/<br />

products/ suse‐manager/ features/​<br />

suse‐manager‐1‐7. html]<br />

[6] Zoff bei Open Suse verzögert 12.2:<br />

[http:// www. linux‐magazin. de/ NEWS/​<br />

Open‐Suse‐12. 2‐verspaetet‐Entwickler<br />

‐wollen‐Release‐Prozess‐ueberdenken]<br />

[7] Suses Youtube-Kanal:<br />

[http:// www. youtube. com/ susevideo]<br />

[8] Susecon Fotos bei Google+:<br />

[https:// plus. google. com/ events/​<br />

csm6hfof0311f59cmu2qc4ajbok]


Auf den Punkt gebracht<br />

Leserbriefe<br />

Leserbriefe 12/2012<br />

Forum<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 />

www.linux-magazin.de<br />

69<br />

Prezi-Zubehör<br />

10/​12, S. 46: Danke für den Beitrag zu Präsentationen<br />

mit Prezi & Co. Vielleicht interessiert<br />

Sie das von mir entwickelte und<br />

unter GPL verfügbare Tool Prezi Player.<br />

Damit lassen sich Prezi-Präsentationen<br />

unter <strong>Linux</strong> offline nutzen. Es ist unter<br />

[https://​­github.​­com/​­TomFreudenberg/​<br />

­preziplayer] zu finden und nutzt Bash,<br />

Gettext und Zenity.<br />

Thomas Freudenberg, per E-Mail<br />

Tückischer Kernel-Bug<br />

10/​12, S. 34: Ich arbeite seit mehr als<br />

zwölf Jahren als System- und Netzwerk-<br />

Administrator in Umgebungen mit Hunderten<br />

<strong>Linux</strong>-Systemen aller großen Distributionen.<br />

Trotz Mailinglisten, Distributoren-Newsletter<br />

und täglicher Recherche<br />

in allen verfügbaren Quellen, zu denen<br />

auch das <strong>Linux</strong>-<strong>Magazin</strong> gehört, sind<br />

meine Kollegen und ich nicht rechtzeitig<br />

auf einen schwerwiegenden Kernel-<br />

Bug aufmerksam geworden, der unter<br />

anderem unter [http://​­www.​­novell.​­com/​<br />

­support/​­kb/​­doc.​­php?​­id=7009834] dokumentiert<br />

ist.<br />

Der Bug schlägt unter bestimmten Bedingungen<br />

bei einer Uptime von ungefähr<br />

209 Tagen zu. Auf unseren Datenbankservern<br />

führte er dazu, dass von den acht<br />

verfügbaren CPUs schlagartig nur noch<br />

eine für MySQL bereitstand. Nach dem<br />

Performance-Einbruch fiel das eine oder<br />

andere System komplett aus.<br />

Dass ein derart gravierender Bug, dessen<br />

Geschichte bis in das Jahr 2009 zurückreicht,<br />

überhaupt in den Kernel gelangen<br />

kann, ist schon schwer zu glauben.<br />

Als wesentlich schlimmer empfinden<br />

allerdings alle Betroffenen, dass weder<br />

die Distributoren noch Medien wie das<br />

<strong>Linux</strong>-<strong>Magazin</strong> proaktiv informiert haben.<br />

Das schadet meines Erachtens sowohl<br />

dem Ruf von <strong>Linux</strong> als auch dem<br />

von Distributoren und Medien, die mit<br />

<strong>Linux</strong> Geld verdienen.<br />

Marcel Bruckner, per E-Mail<br />

Immerhin haben Distributoren wie beispielsweise<br />

Novell bereits vor über einem<br />

Jahr Informationen zu diesem Bug publiziert.<br />

Es bleibt unklar, wie viele Anwender<br />

von diesem Problem betroffen sind, da<br />

es nur beim Zusammentreffen von vier<br />

Bedingungen auftritt. Ihre Warnung publizieren<br />

wir hiermit aber gerne. (mhu)<br />

Frauen in der IT<br />

11/​12, S. 3 Ich kann nur hoffen, dass sich<br />

Ihr Chefredakteur – Herr Kleinert – und<br />

alle Beteiligten der Redaktion, welche<br />

sich entschlossen haben, dieses unsägliche<br />

Editorial zu drucken, den offenen<br />

Brief von Silke Meyer unter [http://​<br />

­silkemeyer.​­net] gründlich durchlesen<br />

und über das von ihr geschilderte Grundsatzproblem<br />

nachzudenken.<br />

Es ist nicht hauptsächlich die Aufgabe<br />

von strukturell Benachteiligten, egal um<br />

welches Problem es sich handelt, gegen<br />

diese Strukturen anzugehen. Privilegierte<br />

Menschen müssen sich ihrer Rolle bewusst<br />

werden und sich fragen, wie sie<br />

andere einbringen können. Ich finde es<br />

unglaublich, dass Ihnen das tatsächlich<br />

noch jemand erklären muss.<br />

Laura Danzeisen, per E-Mail<br />

Das Editorial im <strong>Linux</strong>-<strong>Magazin</strong> fassen<br />

die Autoren, meistens ich, zu 99 Prozent<br />

in Form von Kommentaren oder Glossen<br />

ab. Es handelt es sich also um Meinungs-<br />

journalismus in seiner Reinform. Insofern<br />

ist es häufig der Fall, dass Leserinnen<br />

und Leser eine davon abweichende oder<br />

gar konträre Meinung vertreten. Die Ablehnung,<br />

die ich aus Ihrem Leserbrief<br />

herauszulesen glaube, stört mich darum<br />

überhaupt nicht – sie ist mir genauso lieb<br />

wie zustimmende Zuschriften.<br />

Ich persönlich sehe an vielen Stellen im<br />

beruflichen Alltag Diskriminierung und<br />

finde es skandalös, dass viele Frauen für<br />

gleiche Tätigkeiten schlechter entlohnt<br />

werden als Männer. Auch der Frauenanteil<br />

und in noch höherem Maße der<br />

Anteil von weiblichen und männlichen<br />

Migranten in den Spitzenpositionen der<br />

Wirtschaft deutet auf strukturell zementierte<br />

Missstände hin.<br />

Solche Formen von massiver und systematischer<br />

Benachteiligung vermag ich aber<br />

im Einstiegsbereich zu IT-Berufen nicht<br />

zu entdecken. Vielmehr suchen Firmen<br />

händeringend Azubis und die Hochschulen<br />

nach Abiturienten in den einschlägigen<br />

Richtungen. Zeigen Sie mir einen<br />

Personalverantwortlichen in einer ausbildenden<br />

Firma oder die Zulassungskommission<br />

einer Uni, die bei gleichem Schulabschluss<br />

einen jungen Mann gegenüber<br />

einer junge Frau bevorzugen würde! Ganz<br />

im Gegenteil: Jede Bildungseinrichtung<br />

würde es als großen Erfolg feiern, wenn<br />

ihr es gelänge, 50 Prozent Frauen in einer<br />

IT-Sparte zu rekrutieren.<br />

Aus dieser Gemengelage ergibt sich meine<br />

Argumentation: Ich vertrete im Editorial<br />

letztlich die liberale Ansicht, dass jeder<br />

und jede den Beruf ergreifen möge, der<br />

ihm oder ihr Freude bereitet. Bleiben Sie<br />

dem <strong>Linux</strong>-<strong>Magazin</strong> als wache Leserin<br />

bitte gewogen, auch wenn gelegentlich ein<br />

Artikel erscheint, den Sie selbst so gewiss<br />

nicht verfasst hätten. (jk) <br />

n


Forum<br />

www.linux-magazin.de Recht 12/2012<br />

70<br />

Nutzungsbedingungen von Web-APIs<br />

Hintertüren<br />

Wer populäre Webdienste anbietet, will deren Benutzung auch Weiterverkäufern einräumen – auch und gerade<br />

dann, wenn die Dienste kostenfrei sind. Die Anbieter halten sich jedoch per AGB weitreichende Hintertürchen<br />

und Kontrolloptionen offen. Fred Andresen<br />

formulierte Vertragsbedingungen, die für<br />

wiederkehrende Nutzungsverträge gelten<br />

sollen – nach deutschem Recht greifen<br />

für sie die Regelungen über allgemeine<br />

Geschäftsbedingungen nach den Bestimmungen<br />

der Paragrafen 305 ff. BGB [1].<br />

Vertragstypen<br />

© iqos, 123RF.com<br />

Nicht nur wegen der ständig steigenden<br />

Bedeutung der sozialen Netze, schon<br />

aufgrund des leichteren und kostengünstigeren<br />

Vertriebs verlagert sich immer<br />

mehr Funktionalität jeder Art ins Web.<br />

Dabei wächst die Akzeptanz der diversen<br />

Webangebote mit ihrer Wahrnehmung in<br />

der Bevölkerung. Mit wachsender Anzahl<br />

registrierter oder angemeldeter Benutzer<br />

einher geht auch die Möglichkeit, mit<br />

den Anwendern Gewinn zu machen –<br />

selbst für eigentlich kostenlose Angebote.<br />

Facebook oder Google sind Paradebeispiele<br />

für solche Webdienste.<br />

Weil die Betreiber auf Marktdurchdringung<br />

setzen, wollen beziehungsweise<br />

müssen sie Dritten die Möglichkeit einräumen,<br />

die eigenen Dienste selbst zu<br />

nutzen und mehr oder weniger weiterzuvertreiben.<br />

Dazu stellen sie <strong>Schnittstellen</strong><br />

bereit, über die Dritte die Webfunktionen<br />

nicht nur selbst nutzen, sondern in eigene<br />

Angebote einbinden können – die<br />

Web-APIs.<br />

Während einzelne Endkunden die originären<br />

Webangebote meist per Browser<br />

nutzen, bieten diese APIs eine Möglichkeit,<br />

die gleichen Informationen automatisiert<br />

leichter und schneller zu erhalten<br />

und auch einfacher weiterzuverarbeiten.<br />

Darüber hinaus sind nur über das<br />

Web-API weitere Funktionalitäten oder<br />

Dienste möglich, die der Browser-Klientel<br />

ebenfalls entgehen.<br />

Weil die Dienstanbieter den Zugang zu<br />

ihren Informationen und Inhalten natürlich<br />

regeln wollen, knüpfen sie diese erleichterte<br />

Form des Zugriffs an bestimmte<br />

Bedingungen, die in Lizenzbedingungen,<br />

Zugriffs-, Nutzungs- oder einfach<br />

nur Geschäftsbedingungen festgehalten<br />

sind. Bei allen handelt es sich um vor-<br />

Die Verträge, die die API-Nutzung regeln,<br />

lassen sich aber nicht zwingend einheitlich<br />

einordnen. Geht man von der Annahme<br />

aus, dass in den einzelnen Fällen<br />

ein Minimum an Softwarefunktionalität<br />

sowohl beim Nutzer des API als auch<br />

auf den Servern des originären Dienstanbieters<br />

liegt, also die Bearbeitung der<br />

API-Anfragen in mehreren Stufen erfolgt,<br />

dürfte es sich um ein gemischtvertragliches<br />

Modell handeln.<br />

Zum einen kommt ein echter Software-<br />

Überlassungvertrag in Frage (jene API-<br />

Programme und ‐Bibliotheken in Quellcode-<br />

oder Binary-Form, die der Nutzer<br />

in seinen Webangeboten einsetzt), zum<br />

anderen bearbeiten aber die Programme<br />

die erhaltenen Anfragen auf den Servern<br />

der Betreiber und liefern die Inhalte und<br />

Informationen zurück.<br />

Dieses Modell ist klassisch für das verbreitete<br />

Application Service Providing,<br />

bei dem in der Regel gegen Gebühr die<br />

gleiche Funktionalität „vermietet“ wird.<br />

Den hier beschriebenen Fällen fehlt es<br />

lediglich an diesem Entgelt und somit nur<br />

an der vereinbarten Gegenleistung: Die<br />

Nutzung der Web-APIs ist in der Regel<br />

kostenlos.<br />

Dass bereits die Einordnung der herkömmlichen<br />

ASP-Verträge als Mietvertrag<br />

umstritten ist, macht die Einordnung der<br />

kostenfrei nutzbaren Web-API-Überlassungsverträge<br />

nicht einfacher. Am plau-


sibelsten scheint eine Klassifikation als<br />

Leihvertrag, zumindest in Bezug auf die<br />

überlassenen Bibliotheken des API selbst.<br />

Die Leihe ist nach deutschem Recht die<br />

unentgeltliche Gebrauchsüberlassung auf<br />

bestimmte Zeit. Der deutsche Bundesgerichtshof<br />

hält die Einordnung entgeltlicher<br />

Software-Überlassung auf Zeit als<br />

Mietverhältnis für zulässig [2], daher<br />

sollte auch die unentgeltliche Überlassung<br />

problemlos als Leihvertrag einzuordnen<br />

sein.<br />

Wie bei verschiedenen Vertragstypen generell,<br />

so ist auch bei der Leihe nach den<br />

Paragrafen 598 ff. BGB [1] eine Ausgestaltung<br />

des Vertrags durch AGBs zulässig.<br />

Die Überlassung des API ist dabei der<br />

einzige Leistungsteil, der auf Dauer angelegt<br />

ist. Die Nutzung der eigentlichen<br />

Dienste ist ein „Sofort-Geschäft“, das mit<br />

Versenden der Abfrage und Lieferung der<br />

Daten per Browser oder über das API<br />

abgeschlossen ist.<br />

Es handelt sich daher um kein Dauerschuldverhältnis<br />

im eigentlichen Sinne,<br />

sondern um rechtlich selbstständige Einzelaktionen.<br />

Das ist bedeutsam, weil deshalb<br />

Anbieter jederzeit Änderungen im<br />

Angebot oder den Bezugsbedingungen<br />

einseitig vornehmen können. Ähnlich<br />

wie beim Bäcker, bei dem der Verbraucher<br />

täglich seine Frühstücksbrötchen<br />

einkauft und der von einem Tag auf den<br />

anderen den Preis erhöhen oder auch<br />

gar keine Brötchen mehr im Angebot haben<br />

kann, hat auch der API-Kunde kein<br />

„Semmel-Abo“.<br />

Wirksame Vereinbarungen<br />

Im Regelfall werden AGBs nur dann Vertragsbestandteil,<br />

wenn der Verwender<br />

ausdrücklich darauf hinweist und dem<br />

Mailen Sie uns Ihre Fragen!<br />

Im monatlichen Wechsel mit aktuellen Fachbeiträgen<br />

lässt das <strong>Linux</strong>-<strong>Magazin</strong> in der Serie<br />

„Rechts-Rat“ Leserfragen durch einen<br />

Rechtsanwalt kompetent beantworten. Was<br />

immer Sie beschäftigt oder ärgert, oder was<br />

Sie einfach nur wissen möchten: Schreiben<br />

Sie eine entsprechende E-Mail an die Adresse<br />

[rechtsrat@linux-magazin. de].<br />

Die Themen dürfen von Software lizenzen bis<br />

zum Hardwarekauf reichen. Die Redaktion<br />

behält es sich vor, abgedruckte Zuschriften<br />

zu kürzen und eventuell enthaltene persönliche<br />

Daten zu ändern.<br />

Abbildung 1: Wie jedem Obst- und Gemüsehändler oder Bäcker steht es auch dem API-Anbieter jederzeit frei,<br />

seine Konditionen oder Preise zu ändern, weil es sich bei API-Aktionen rechtlich um Einzelgeschäfte handelt.<br />

Vertragspartner die Gelegenheit einräumt,<br />

deren Inhalt zur Kenntnis zu nehmen.<br />

Darüber hinaus muss der Vertragspartner<br />

mit ihnen einverstanden sein.<br />

Bereits das Landgericht München I hat in<br />

seiner wegweisenden Entscheidung zur<br />

Wirksamkeit der GPL [3] keine Bedenken<br />

geäußert, deren Bestimmungen als<br />

AGB wirksam in ein Vertragsverhältnis<br />

einzubinden, weil die Internetseite auf<br />

sie hingewiesen hatte und sie auch allgemein<br />

zugänglich seien. Seither besteht<br />

Einigkeit darüber, dass Allgemeine Geschäftsbedingungen<br />

besonders bei der<br />

Software-Überlassung auch problemlos<br />

auf dem heute üblichen Weg per Web<br />

wirksam vereinbart sind.<br />

Hält sich der Nutzer des Web-API nicht<br />

an die vereinbarten Nutzungsbedingungen,<br />

dann verletzt er den Vertrag zwischen<br />

ihm und dem eigentlichen Anbieter,<br />

was zur Folge hat, dass dieser ihn in<br />

Anspruch nehmen kann. Bezüglich der<br />

bereitgestellten Informationen kann er<br />

sich dabei in der Regel auf das Urheberrecht<br />

stützen.<br />

Urheberrechtsschutz<br />

Dabei kommen je nach Art der Informationen<br />

und Inhalte verschiedene Ansprüche<br />

in Betracht: Handelt es sich um persönliche<br />

kreative Schöpfungen wie Texte,<br />

Bilder, Filme, Musik oder Ähnliches, liegt<br />

ein Verstoß gegen das urheberrechtliche<br />

Privileg vor. Der API-Nutzer gibt ja im<br />

Rahmen seines eigenen Angebots regelmäßig<br />

ohne Berechtigung die vom originären<br />

Anbieter bezogenen Inhalte weiter.<br />

In den API-AGBs ist dieses Recht stets<br />

an die Einhaltung der Vertragsbedingungen<br />

geknüpft und soll bei einem Verstoß<br />

verfallen.<br />

Das Prinzip gilt hier wie bei der GPL:<br />

Verletzt ein Nutzer freier Software die<br />

GPL-Bedingungen, geht sein Nutzungsund<br />

Weitergaberecht verloren, die gesetzlichen<br />

Regeln des Urheberrechts greifen<br />

und damit das Verbot der Weiterverbreitung<br />

fremder Werke. Das Urheberrechtsgesetz<br />

[4] kennt aber nicht nur<br />

den Schutz persönlicher kreativer Schöpfung;<br />

hier sind auch Regelungen über den<br />

Schutz von Datenbanken oder ähnlichen<br />

Informationssammlungen enthalten.<br />

Datenverarbeitungsrecht<br />

Gerade auch Webdienste setzen heute<br />

auf automatisierte Datenverarbeitung.<br />

Entstehen beim Auswerten und Präsentieren<br />

erhebliche Datenmengen, spielen<br />

deren Haltung und Präsentation eine entscheidende<br />

Rolle. Das Urheberrecht setzt<br />

auf persönlich kreative Schöpfungsakte<br />

durch den Menschen und schließt daher<br />

maschinengenerierte Datensammlungen<br />

und Visualisierungen grundsätzlich vom<br />

Schutz aus, hier ist keinerlei kreative Gestaltung<br />

möglich.<br />

Das bedeutet nun nicht, dass jeder die<br />

Daten, die ein anderer nicht selten in jah-<br />

© 36clicks, 123RF<br />

Recht 12/2012<br />

Forum<br />

www.linux-magazin.de<br />

71


Forum<br />

www.linux-magazin.de Recht 12/2012<br />

72<br />

© Lane Erickson, 123RF<br />

Abbildung 2: Das Urheberrecht kennt auch eigene Regelungen für den Zugriff auf Daten- und Informationssammlungen<br />

sowie die Verarbeitung der gewonnenen Daten.<br />

relanger, mühevoller Kleinarbeit gesammelt<br />

hat, nach Belieben nutzen dürfte:<br />

Seit einiger Zeit kennt das Urheberrecht<br />

auch den Schutz von Datenbanken in<br />

den Paragrafen 87a ff. [4]. Der gehört<br />

zwar systematisch nicht zum eigentlichen<br />

Urheberrecht, weil hier keinerlei<br />

persönlich-gestalterische Schöpfung nötig<br />

ist, die Bestimmungen wurden aber<br />

in das UrhG inkorporiert.<br />

Datenbankschutz ist<br />

Investitionsschutz<br />

Der Datenbankschutz ist ein Investitionsschutz,<br />

er hängt also davon ab, auf welche<br />

Weise und mit welchem Aufwand die<br />

Daten gesammelt oder aufbereitet werden.<br />

Daneben besteht noch ein echter Urheberrechtsschutz<br />

für Datenbankwerke,<br />

also für nach persönlich-schöpferischen<br />

Kriterien zusammengestellte Datenbank-<br />

Sammlungen. Die Voraussetzung für den<br />

Schutz einer solchen Datenbank ist lediglich<br />

eine wesentliche Investition, die<br />

auch schon in dem Aufwand stecken<br />

kann, ein Programm zu erstellen (oder<br />

zu kaufen), das Daten erfasst, auswertet<br />

oder kategorisiert.<br />

Der Schutz des UrhG erstreckt sich auf<br />

das Recht, die Daten zu vervielfältigen,<br />

zu verbreiten oder öffentlich wiederzugeben.<br />

Dieser Schutzgegenstand umfasst<br />

die Datenbank als Ganzes oder auch nur<br />

einen wesentlichen Teil. Der originäre<br />

Anbieter kann daher alle anderen von der<br />

Benutzung der Datenbank ausschließen,<br />

wenn es sich nicht um die Entnahme nur<br />

unwesentlicher Teile handelt.<br />

Das bedeutet für den Zugriff auf das API,<br />

dass zunächst – weil das Nutzungsrecht<br />

durch das Nichteinhalten der AGB verwirkt<br />

ist – auch das Nutzen der Bibliothek<br />

selbst nicht mehr zulässig ist. Die<br />

Inhalte dürfen ebenfalls nicht mehr weitergegeben<br />

werden, selbst wenn diese auf<br />

andere Weise erreichbar wären – etwa im<br />

Zuge eines Browser-Scripting oder anderer<br />

Zugriffe.<br />

Das Umgehen des API ist<br />

meist nicht erlaubt<br />

Denn die nächste logische Frage wäre die<br />

nach einer etwa zulässigen Umgehung<br />

des API auf diese oder vergleichbare<br />

Weise: Darf man, auch ohne ein bereitgestelltes<br />

API zu nutzen, die Inhalte und<br />

Informationen, die der originäre Anbieter<br />

bereitstellt, über automatisierte Abfragen<br />

der allgemein zugänglichen Seiten abrufen<br />

und weitergeben? Es handelt sich ja<br />

immerhin um ohnehin frei erreichbare<br />

Informationen.<br />

Die Antwort ist leicht: Hier gelten ebenfalls<br />

die im Urheberrecht festgelegten<br />

Urheber- und Leistungsschutzrechte:<br />

Geschützte Werke darf man nicht verbreiten,<br />

wesentliche Teile von Datenbank-<br />

Inhalten ebenfalls nicht. Damit wäre eine<br />

solche Umgehung rechtstreu nur dann<br />

möglich, wenn es sich um einzelne Informationen<br />

handelt, die urheberrechtlich<br />

nicht geschützt sind.<br />

Die originären Anbieter werden jedoch<br />

nach Möglichkeit Maßnahmen ergreifen,<br />

solche Bot-Abfragen einzuschränken oder<br />

zu verhindern [5]. Darüber hinaus sind<br />

vielfach wertvolle Informationen oder<br />

bestimmte Funktionen nur beim Zugriff<br />

über das API möglich und tauchen im<br />

normalen Webzugriff gar nicht auf.<br />

Streit und Willkür: Facebook<br />

und Open Xchange<br />

Auch ohne Verletzung der Vertragsbedingungen<br />

kann es zwischen den API-Nutzern<br />

und den originären Betreibern zum<br />

Streit kommen. Prominentes Beispiel ist<br />

das Aussperren von Open Xchange durch<br />

Facebook [6], zu dem sich das soziale<br />

Netzwerk nach eigener Aussage auch<br />

ohne konkrete Verletzung der Vertragsbedingungen<br />

veranlasst fühlte.<br />

Bei solchen Auseinandersetzungen wird<br />

stets der API-Anwender den Kürzeren ziehen:<br />

Zum einen ist selbst bei unangekündigten<br />

Maßnahmen der Zugriffsunterbindung<br />

nur schwer ein konkreter Schaden<br />

beim API-Anwender nachweisbar, zum<br />

anderen erschwert meist der Standort<br />

Infos<br />

[1] Bürgerliches Gesetzbuch:<br />

[http:// www. gesetze‐im‐internet. de/ bgb/]<br />

[2] BGH, Urteil vom 15.11.06, Az. XII ZR 120/​04:<br />

[http:// juris. bundesgerichtshof. de/ cgi‐bin/<br />

rechtsprechung/ document. py? Gericht=<br />

bgh& Art=en& Datum=2006‐11& Seite=4& nr=<br />

38367& pos=126& anz=231]<br />

[3] Zur rechtlichen Wirksamkeit der GPL:<br />

[http:// www. telemedicus. info/ urteile/​<br />

Urheberrecht/ Open‐Source/ 496‐LG<br />

‐Muenchen‐I‐Az‐21‐O‐612304‐Zur<br />

‐rechtlichen‐Wirksamkeit‐der‐GPL. html]<br />

[4] Urheberrechtsgesetz:<br />

[http:// www. gesetze‐im‐internet. de/ urhg/]<br />

[5] Web- und Screen-Scraping: [http:// de.​<br />

wikipedia. org/ wiki/ Screen_Scraping]<br />

[6] Facebook vs. Open Xchange:<br />

[http:// www. linux‐magazin. de/ NEWS/<br />

Facebook‐ist‐gegen‐Open‐Data‐und<br />

‐sperrt‐Open‐Xchange‐aus? category=0]<br />

[7] BGH-Urteil, 28.05.98, Az. I ZR 81/​96: [http://​<br />

www. jurpc. de/ rechtspr/ 19990054. htm]<br />

[8] Landgericht München I, Urteil vom<br />

09.11.2005, Az. 21 O 7402/​02: [http://<br />

de. wikisource. org/ wiki/ Landgericht_<br />

M%C3%BCnchen_I_‐_Datenbankschutz_<br />

f%C3%BCr_topografische_Landkarten]<br />

[9] Google-Maps-API-Lizenzierungsmodelle:<br />

[https:// developers. google. com/ maps/​<br />

licensing]


der originären Anbieter in den USA oder<br />

anderen Ländern die gerichtliche Durchsetzung.<br />

Darüber hinaus könnten im<br />

Ausland Haftungsausschlüsse wirksam<br />

sein (Disclaimer), die nach deutschem<br />

Recht nicht möglich wären – hier haftet<br />

auch etwa für Vorsatz, wer eine Haftung<br />

für entgeltliche Überlassung generell ausschließen<br />

will.<br />

Die entscheidende Option, die der Betreiber<br />

hat, ist aber die Möglichkeit, jederzeit<br />

Anpassungen der Vertragsbedingungen<br />

vorzunehmen. In die braucht er nur<br />

explizit hineinzuschreiben oder zu verklausulieren,<br />

was beim Einsatz des API<br />

nicht gestattet sein soll. Verbunden mit<br />

dem Hinweis, dass jede weitere Nutzung<br />

des API nur unter diesen Bedingungen<br />

gestattet sein soll, schließt der Anbieter<br />

erfolgreich jede Nutzung aus, die ihm<br />

missfällt. Weil die API-Nutzung regelmäßig<br />

nur „bis auf Weiteres“, aber nicht für<br />

einen vorher fest vereinbarten Zeitraum<br />

eingeräumt bleibt, ist dies im Rahmen<br />

freier Vertragsgestaltung rechtlich wohl<br />

in der Regel unbedenklich.<br />

Google Maps im<br />

Unternehmen nutzen<br />

Ein praktisches Beispiel für einen Webdienst,<br />

der bei nicht privater Nutzung<br />

den Einsatz eines dedizierten API vorschreibt,<br />

ist Google Maps. Nach den<br />

Nutzungsbedingungen von Google [6]<br />

setzt die gewerbliche Verbreitung, also<br />

die Aufnahme des Kartenmaterials in die<br />

eigene kommerzielle Internetseite das<br />

API voraus. Landkarten und vergleichbare<br />

Geo-Informationen sind zum einen<br />

echte urheberrechtlich geschützte Werke<br />

[7] (die schöpferische Leistung besteht<br />

hier in der maßstabsgerechten Reduzierung<br />

auf ein Kartenbild), zum anderen<br />

gelten sie auch als Datenbanken [8].<br />

Wer in seine private und nicht kommerzielle<br />

Website Google-Maps-Karten einbinden<br />

will, darf dies demnach entweder per<br />

selbst geschneidertem HTML-Konstrukt<br />

oder per API tun, kommerzielle Anbieter<br />

verpflichtet Google aber entweder zum<br />

einfachen „Google Maps API“, sofern die<br />

betreffende Seite gebührenfrei aufzurufen<br />

ist, oder zum „Google Maps API for<br />

Business“, wenn die Seite kostenpflichtig<br />

ist, kostenpflichtige Mobile Apps erfordert<br />

oder unternehmensintern erscheinen<br />

soll [9]. Wer Google Maps also nicht<br />

lediglich für die persönliche Routenplanung<br />

heranzieht, sondern Karten auf der<br />

eigenen Homepage veröffentlichen will,<br />

muss sich an die Nutzungsbedingungen<br />

halten. (mfe)<br />

n<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 />

Recht 12/2012<br />

Forum<br />

www.linux-magazin.de<br />

73<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!


Forum<br />

www.linux-magazin.de Reusing 12/2012<br />

74<br />

Code aus dem Internet in der kommerziellen Softwareentwicklung<br />

Recycling in der Firma<br />

Eine wissenschaftlich fundierte Umfrage unter hauptberuflichen Softwareentwicklern hat recht unterschiedliche<br />

Einstellungen zum Basar-artigen Wiederverwenden von frei verfügbarem Quellcode ergeben. Erfahrungen,<br />

Rollen in der Firma und Programmiersprachen bestimmen die Akzeptanz. Manuel Sojer<br />

© Mongkol Chakritthakool, 123RF.com<br />

Das Internet ist voll von Quellcode. Laut<br />

der Datenbank von Black Duck Software<br />

[1] gibt es heute mehr als 600 000<br />

veröffent lichte Open-Source-Projekte, die<br />

zusammen 100 Milliarden Zeilen Quellcode<br />

und damit das Äquivalent von 100<br />

Millionen Mannjahren Entwicklungsarbeit<br />

geschaffen haben. Hinzu kommen<br />

verfügbare Komponenten und Snippets,<br />

die nicht unter freien Lizenzen stehen,<br />

aber unentgeltlich nutzbar sind.<br />

Seit den 60er Jahren gilt Wiederverwendung<br />

(Reusing) als zentral, um Software<br />

von hoher Qualität schnell und<br />

wirtschaftlich zu schaffen [2]. Solcher<br />

Code kam entweder aus dem eigenen<br />

Unternehmen oder von Dritten [3]. Beide<br />

Ansätze führen zu direkten Kosten, entweder<br />

für die Entwicklung In-House, die<br />

sich durch hoffentlich mehrfaches Verwenden<br />

amortisiert, oder für den Kauf<br />

von Komponenten.<br />

Allein wegen der Kosten bildet unentgeltlich<br />

wiederverwendbarer Code aus<br />

dem Internet eine echte Alternative. Zudem<br />

entfallen bei Code aus gut geführten<br />

Open-Source-Projekten die Kosten für die<br />

zukünftige Codepflege.<br />

Attraktiver Fundus<br />

Darum überrascht es wenig, dass Code<br />

aus dem Internet für professionelle Software-Entwickler<br />

in Firmen – wie auch für<br />

Hobbyprogrammierer und Open-Source-<br />

Entwickler [4] – einen attraktiven Fundus<br />

bildet. Wie bei externem Code jedes<br />

Ursprungs stellt sich auch bei heruntergeladenem<br />

Code die Frage nach Qualität<br />

und Sicherheit. Obwohl es noch keine finalen<br />

Erkenntnisse gibt, legen neuere Untersuchungen<br />

[5],[6] nahe, dass es bei<br />

wohlüberlegter Wahl der Quellen keine<br />

grundsätzlichen Unterschiede zwischen<br />

kommerziell erworbenem und unentgeltlichem<br />

Code gibt.<br />

Ein im Herbst 2009 unter professionellen<br />

Softwareentwicklern durchgeführte<br />

Umfrage sollte die praktische Seite des<br />

Reusing sowie die Handhabung möglicher<br />

rechtlicher Risiken untersuchen. Um<br />

eine möglichst heterogene Grundgesamtheit<br />

bestehend aus Softwareentwicklern<br />

verschiedener Länder, Unternehmen<br />

und Entwicklungsrollen zu erreichen,<br />

wurden Teilnehmer aus Newsgroups<br />

wie [comp.​lang.​c++], [comp.​lang.​java.​<br />

​programmer] und [comp.​lang.​ruby] zufällig<br />

ausgewählt. Die Implementierung<br />

der Online-Umfrage passierte mit Hilfe<br />

von Lime Survey und mit hauptsächlich<br />

geschlossenen, über Likert-Skalen zu beantwortenden<br />

Fragen.<br />

Insgesamt nahmen an der Umfrage 869<br />

professionelle Softwareentwickler teil.<br />

84 Prozent waren zu der Zeit in diesem<br />

Beruf aktiv, der Rest hatte ihn früher<br />

ausgeübt. Mit der Hälfte und einem<br />

Viertel stellten Europa und Nordamerika<br />

die Hauptherkunftsregionen der zu 98<br />

Prozent männlichen Teilnehmer dar, die<br />

im Durchschnitt 36 Jahre alt waren. Die<br />

Softwareentwickler blickten im Schnitt<br />

auf zehn Jahre Berufserfahrung zurück.<br />

56 Prozent waren nebenher als Softwareentwickler<br />

in einem oder mehreren<br />

öffentlichen Open-Source-Projekten involviert.<br />

Für 20 Prozent der Teilnehmer<br />

stellte C++ die primäre Programmiersprache<br />

dar, für 14 Prozent Java und für 12<br />

Prozent Python. Weitere Informationen<br />

zur Umfragetechnik und Demographie<br />

sind in [7] veröffentlicht.<br />

Wachsende Bedeutung<br />

Auf einer fünfstufigen Skala von „Überhaupt<br />

nicht wichtig“ bis „Sehr wichtig“<br />

schätzten die befragten aktiven Entwickler<br />

das Thema Wiederverwendung durchschnittlich<br />

als „ein wenig wichtig“ für


Lizenz-Quiz<br />

Um die Kenntnisse der Umfrageteilnehmer zum Thema Softwarelizenzen<br />

nicht allein ihrer Selbsteinschätzung zu überlassen, haben die Forscher<br />

mit den Probanden ein Multiple-Choice-Quiz veranstaltet. Hier nun die<br />

.1. Welche Open-Source-Lizenz verlangt, dass so regulierter Code auf<br />

private oder akademische Software-Projekten beschränkt bleibt?<br />

GPL (5 %)<br />

BSD License (10 %)<br />

Keine der genannten (68 %)<br />

Weiß nicht (17 %)<br />

2. Angenommen jemand schreibt ein proprietäres Programm und bettet<br />

darin Open-Source-Code ein. Welche Lizenz erfordert es unter Umständen,<br />

dass der Entwickler das ganze Programm unter die betreffende<br />

Open-Source-Lizenz stellen muss?<br />

GPL (56 %)<br />

BSD License (1 %)<br />

Mozilla Public License (MPL) (1 %)<br />

Sowohl GPL als auch MPL (27 %)<br />

Keine der genannten (1 %)<br />

Weiß nicht (14 %)<br />

3. Falls Open-Source-Code ein Patent verletzt, gegen wen kann der<br />

Patenteigentümer Ansprüche geltend machen?<br />

Nur den gegen den Entwickler des Codes (6 %)<br />

Gegen den Entwickler und Dritte, die den Code integrieren (52 %)<br />

Niemanden, weil Open-Source-Lizenzen Patente ausschließen (3 %)<br />

Weiß nicht (39 %)<br />

fünf Fragen, die Prozentzahlen spiegeln die Antworten der Befragten<br />

wider. Per Kreuzchen im Kästchen kann jeder <strong>Linux</strong>-<strong>Magazin</strong>-Leser selbst<br />

sein Wissen testen.<br />

4. Welche der Open-Source-Lizenzen verlangt, dass solchen Code enthaltenden<br />

Produkte den Lizenztext mit ausliefern?<br />

GPL (16 %)<br />

BSD License (3 %)<br />

MPL( 1 %)<br />

GPL, BSD und MPL (60 %)<br />

Keine der genannten (1 %)<br />

Weiß nicht (19 %)<br />

5. Jemand veröffentlich ein Code-Snippet in einer Newsgroup oder auf<br />

einer Tutorial-Webseite. Unter welchen Umständen kann ein Dritter das<br />

Snippet rechtlich gefahrlos integrieren?<br />

Wenn der Veröffentlicher keine Verpflichtungen nennt, die mit der<br />

Verwendung des Snippets einhergehen (10 %)<br />

Wenn der Veröffentlicher explizit darauf hinweist, dass er keine<br />

Verpflichtungen an die Verwendung des Snippets knüpft (39 %)<br />

Wenn das Snippet nicht Teil eines kompletten Programms ist (1 %)<br />

Wenn alle drei genannten Bedingungen erfüllt sind (16 %)<br />

Keine der genannten Bedingungen reicht aus (19 %)<br />

Weiß nicht (15 %)<br />

Wer die Auflösung des Rätsels wissen will, knickt diese Seite unten rechts<br />

diagonal nach innen und kriegt einen Kasten mit den richtigen Antworten<br />

zu Gesicht.<br />

Reusing 12/2012<br />

Forum<br />

www.linux-magazin.de<br />

75<br />

ihre Arbeit ein (siehe Abbildung 1), nur<br />

12 Prozent bezeichneten es als „überhaupt<br />

nicht wichtig“ während für 19 Prozent<br />

Reusing sehr „sehr wichtig“ war.<br />

Fügt man der Betrachtung durch Berücksichtigen<br />

der ehemaligen Entwickler eine<br />

zeitliche Dimension hinzu, ist erkennbar,<br />

dass das Thema über die Jahre bedeutender<br />

wurde (siehe Abbildung 2).<br />

Umfrageteilnehmer, die bereits vor 2004<br />

aufgehört hatten Software zu entwickeln,<br />

bewerteten Open Source meist zwischen<br />

„überhaupt nicht wichtig“ und „kaum<br />

wichtig“. Erst nach 2003 begann die<br />

Wichtigkeit, bis sie schließlich 2008 und<br />

2009 eine durchschnittliche Relevanz von<br />

„Ein wenig wichtig“ erreichte. Dies fällt<br />

zeitlich mit der Verbreitung von Open-<br />

Source-Software zusammen.<br />

Neben dem Zeitverlauf scheinen Erfahrungen<br />

und berufliche Stellung die Einstellung<br />

zum Thema zu beeinflussen. So<br />

lässt sich feststellen, dass professionelle<br />

Softwareentwickler, die über eigene Erfahrungen<br />

in Open-Source-Projekten verfügen,<br />

solchen Code auch professionell<br />

bedeutsamer einschätzen. Möglichweise<br />

tun sich solche Entwickler leichter damit,<br />

passenden Code für ihre Projekte zu finden<br />

und zu evaluieren.<br />

Interessanterweise beeinflusst auch die<br />

eigene Tätigkeit im Unternehmen die<br />

Haltung zu Open Source. Softwarearchitekten<br />

und Projektmanager zeigen sich<br />

gegenüber der Wiederverwendung von<br />

Code aus dem Internet aufgeschlossener<br />

als Programmierer. Deren Einschätzung<br />

wiederum liegt höher als die von Testern,<br />

Datenbankentwicklern und Systemanalysten.<br />

Dass sich die drei zuletzt genannten<br />

Rollen wenig mit dem konkreten<br />

Implementieren beschäftigen, macht die<br />

geringere Bedeutung plausibel.<br />

Der Unterschied zwischen Softwarearchitekten<br />

und Projektmanagern auf der einen<br />

Seite und Programmierern auf der<br />

anderen mag daran liegen, dass die erste<br />

Gruppe über die Beeinflussung der Architektur<br />

der zu entwickelnden Software<br />

über höhere Freiheitsgrade beim Einbinden<br />

von existierendem Code verfügt als<br />

Programmierer, für die die grundlegende<br />

Architektur der Software, an der sie arbeiten,<br />

bereits von außen vorgegeben ist.<br />

Als Drittes zeitigt die primär verwendete<br />

Programmiersprache einen Einfluss. Befragte,<br />

die hauptsächlich mit Ruby oder<br />

Python arbeiten, erachten wiederverwendeten<br />

Code als besonders bedeutsam. Dies<br />

mag daran liegen, dass es beide Sprachen<br />

besonders einfach machen, fremden Code<br />

einzubinden, sogar solchen aus anderen<br />

Sprachen. Perl, Javascript, Java und PHP<br />

bilden eine zweite Gruppe, erst dann folgen<br />

mit C und C++ die traditionellen<br />

Sprachen. Entwickler, die mit Fortran, Visual<br />

Basic, C# oder Pascal arbeiten, legen<br />

den wenigsten Wert auf Code aus dem Internet.<br />

Kulturelle Unterschiede scheint es<br />

hingegen nicht zu geben, die Entwickler<br />

aus Europa, Nord- und Südamerika oder<br />

Asien messen quelloffenem Code etwa<br />

die gleiche Bedeutung zu.<br />

Kaum offiziell unterstützt<br />

Angesichts der insgesamt hohen Bedeutung<br />

der Wiederverwendung von Open-<br />

Source-Code in kommerziellen Entwicklungsprojekten<br />

ist es erstaunlich, dass<br />

der Großteil der befragten 2009 aktiven<br />

Softwareentwickler zu diesem Thema<br />

nie offiziell geschult worden ist. Auf die<br />

Frage, aus welchen Quellen sie sich zu<br />

Hier knicken!


Forum<br />

www.linux-magazin.de Reusing 12/2012<br />

76<br />

30 %<br />

20 %<br />

10 %<br />

0 %<br />

Prozent<br />

12 %<br />

Überhaupt<br />

nicht<br />

wichtig<br />

29 %<br />

Nicht<br />

sehr<br />

wichtig<br />

24 %<br />

Ein wenig<br />

wichtig<br />

16 %<br />

Wichtig<br />

19 %<br />

N=732<br />

Sehr<br />

wichtig<br />

Ein wenig<br />

wichtig<br />

Nicht sehr<br />

wichtig<br />

Überhaupt<br />

nicht<br />

wichtig<br />

Befragte<br />

Software-Entwickler<br />

1,8<br />

vor 2002<br />

32<br />

1,8<br />

2002/03<br />

13<br />

2,2<br />

2004/05<br />

17<br />

2,5<br />

2006/07<br />

28<br />

3,0<br />

2008/09<br />

779<br />

Abbildung 1: Welche Bedeutung messen professionelle Software-Entwickler der<br />

Wiederverwendung von Code aus dem Internet bei?<br />

Abbildung 2: Die Einstellung von Entwicklern zum Open-Source-Reusing hat sich<br />

über die Zeit gewandelt.<br />

den Vorteilen und Risiken bei dem Thema<br />

informieren, nennen zwei Drittel das<br />

Internet und knapp die Hälfte Freunde<br />

und Kollegen (siehe Abbildung 3). Ein<br />

Viertel der Befragten gab an, überhaupt<br />

keine Informationen erhalten zu haben.<br />

Aus offiziellen Quellen wie dem eigenen<br />

Unternehmen oder einer Ausbildungseinrichtung<br />

hatten nur 21 beziehungsweise<br />

16 Prozent Informationen erhalten.<br />

Rechtliche Risiken<br />

Dass jedermann Code aus dem Internet<br />

unentgeltlich laden kann, besagt nicht,<br />

dass keine Bedingungen daran geknüpft<br />

sind. Geschriebener Code unterliegt automatisch<br />

dem Urheberrecht, und dieses<br />

geht von einer exklusiven Nutzung durch<br />

den Urheber aus. Der kann Dritten jedoch<br />

die Nutzung und die Vervielfältigung des<br />

Codes durch Lizenzen gewähren [8], indem<br />

er Rechte abtritt [9].<br />

Dieses Umstandes bedienen sich auch die<br />

Open-Source-Lizenzen, die über ihre Lizenztexte<br />

definieren, unter welchen Bedingungen<br />

der so beauflagte Code verwendbar<br />

ist. Die Open Source Initiative<br />

[10] zählt alleine 69 Lizenzen, die der<br />

De finition Open<br />

Source folgen.<br />

Daneben gibt es<br />

eine Menge von<br />

Lizenzen, die<br />

zwar nicht den<br />

Kriterien der<br />

Open-Source-<br />

Definition genügen,<br />

jedoch eine<br />

Auflösung Lizenz-Quiz<br />

1. Keine der genannten<br />

2. Sowohl GPL als auch MPL<br />

3. Gegen den Entwickler und Dritte, die den<br />

Code integriert haben<br />

4. GPL, BSD und MPL<br />

5. Keine der genannten Bedingungen reicht<br />

kostenlose Nutzung<br />

des Codes<br />

erlauben.<br />

Die unterschiedlichen Lizenzen erteilen<br />

spezielle Rechte und stellen unterschiedliche<br />

Bedingungen [9]. Eine gängige Bedingung<br />

ist beispielsweise das Erwähnen<br />

des Autors im Code und in der Dokumentation<br />

zur Software oder das Hinzufügen<br />

des originalen Lizenztexts. Problematisch<br />

für manche Unternehmen scheint<br />

insbesondere die Reziprozität zu sein,<br />

die manche Lizenzen, unter ihnen die<br />

GPLv2, als Bedingung enthalten. Diese<br />

sieht vor, dass Software, die eng mit dem<br />

freien Code interagiert, ebenfalls dieser<br />

Lizenz unterstellt gehört [9].<br />

Bei der klassischen Wiederverwendung<br />

von Code lassen sich rechtliche Themen<br />

in der Regel einfach handhaben: Sofern<br />

es sich um innerhalb der eigenen Firma<br />

entwickelten Code handelt, liegen die<br />

Rechte schon beim Unternehmen. Wird<br />

der Code käuflich erworben, regelt meist<br />

der Kaufvertrag die Lizenzfragen. Bei<br />

Code aus dem Internet scheint die Gefahr<br />

größer zu sein, dass, vor allem bei knappen<br />

Terminen, die rechtlichen Aspekte<br />

nicht die nötige Beachtung finden.<br />

Knackpunkt Reziprozität<br />

Für Unternehmen stellen Verletzungen<br />

der Lizenzen von wiederverwendetem<br />

Code ein signifikantes Risiko dar, insbesondere,<br />

wenn es sich um Reziprozität<br />

fordernde Lizenzen handelt. VMware<br />

beispielweise weist im Risiko-Teil eines<br />

Quartalsberichts [11] explizit darauf hin:<br />

„… use of ’open source’ software in our<br />

products could negatively affect our ability<br />

to sell our products and subject us to<br />

possible litigation“.<br />

Da Entwickler Code aus dem Internet<br />

unbürokratisch herunterladen können,<br />

spielen die betreffenden rechtlichen Rahmenbedingungen<br />

für sie eine bedeutendere<br />

Rolle als zu Zeiten der klassischen<br />

Zweitnutzung von firmenintern erstelltem<br />

oder zugekauftem Code. Das macht<br />

den juristischen Wissensstand professioneller<br />

Softwareentwickler interessant.<br />

Gemäß ihrer Selbsteinschätzung sind sich<br />

die 2009 aktiven befragten Softwareentwickler<br />

der rechtlichen Rahmenbedingungen,<br />

die mit der Wiederverwendung<br />

von Code aus dem Internet einhergehen,<br />

bewusst. 50 Prozent sehen sich selbst als<br />

mit dem Thema „vertraut“ und behaupteten,<br />

dass sie nahezu alle möglichen<br />

Fallstricke kennen und mit ihnen umzugehen<br />

wissen. 16 Prozent gaben sogar<br />

an, Experten auf diesem Feld zu sein, die<br />

von anderen dazu gefragt werden. Die<br />

Gegenüberstellung dieser Selbsteinschätzung<br />

mit den Ergebnissen eines Quiz mit<br />

fünf Fragen zu möglichen rechtlichen<br />

Problemen bei der Wiederverwendung<br />

von Code aus dem Internet zeichnet<br />

jedoch ein anderes Bild (siehe Kasten<br />

„Lizenz-Quiz“).<br />

Selbsteinschätzung und<br />

Wirklichkeit<br />

Mehr als ein Drittel der 2009 aktiven<br />

Entwickler kam im Quiz auf weniger als<br />

die Hälfte der Punkte, und nur 3 Prozent<br />

beantworteten alle fünf Fragen korrekt.<br />

Im Durchschnitt kamen die Softwareentwickler,<br />

die sich selbst als „Sehr vertraut“<br />

mit den rechtlichen Themen bezeichnen,<br />

nur auf 3,1 von 5 Punkten (siehe Abbildung<br />

4). Für Unternehmen erscheint es<br />

darum geboten, angestellte Softwareentwickler<br />

anzuhalten, sich ihres eigenen<br />

juristischen Kenntnisstands bewusst zu


70 %<br />

60 %<br />

50 %<br />

40 %<br />

30 %<br />

20 %<br />

10 %<br />

0 %<br />

65 %<br />

Internet<br />

46 %<br />

Freunde<br />

und<br />

Kollegen<br />

33 %<br />

<strong>Magazin</strong>e<br />

Abbildung 3: Benutzte Informationsquellen zu verwendbarem Code aus dem Internet.<br />

21 %<br />

Firmen<br />

16 %<br />

Ausbildungseinrichtungen<br />

5 %<br />

Sonstige<br />

23 %<br />

N=732<br />

Kein Training<br />

oder<br />

Informationen<br />

50 %<br />

40 %<br />

30 %<br />

20 %<br />

10 %<br />

0 %<br />

Score im<br />

Quiz<br />

2 %<br />

Überhaupt<br />

nicht<br />

vertraut<br />

0,9<br />

3 %<br />

Nicht<br />

sehr<br />

vertraut<br />

1,5<br />

29 %<br />

Ein wenig<br />

vertraut<br />

50 %<br />

16 %<br />

Abbildung 4: Selbsteinschätzung der Entwicklern zu Erfahrungen<br />

bezüglich rechtlicher Nachnutzungsrisiken. Die Zeile unten gibt dagegen<br />

die erzielten Ergebnisse im Lizenz-Quiz wieder.<br />

2,1<br />

Vertraut<br />

2,7<br />

Sehr<br />

vertraut<br />

3,1<br />

N=732<br />

Reusing 12/2012<br />

Forum<br />

www.linux-magazin.de<br />

77<br />

werden und sich mit rechtlichen Themen<br />

an tatsächliche Experten zu wenden. Wie<br />

zu erwarten, haben Softwareentwickler<br />

mit Erfahrungen in öffentlichen Open-<br />

Source-Projekten einen höheren tatsächlichen<br />

Wissenstand als Kollegen ohne<br />

solche Erfahrungen.<br />

Es erscheint für Unternehmen zudem<br />

sinnvoll, klare Regeln zu definieren, wie<br />

sich ihre Entwickler bei der Wiederverwendung<br />

von Code zu verhalten haben.<br />

Von den 2009 aktiven Softwareentwicklern<br />

arbeiteten jedoch nur knapp über ein<br />

Drittel für ein Unternehmen mit solchen<br />

festen Regeln. Wie zu erwarten verfügten<br />

größere Unternehmen und Unternehmen,<br />

deren Hauptgeschäftstätigkeit die<br />

Entwicklung von Software ist, mit einer<br />

höheren Wahrscheinlichkeit über derartige<br />

Regeln als Firmen, die Software beispielsweise<br />

nur als Teil ihrer eigentlichen<br />

Hauptprodukte entwickeln.<br />

Direkt darauf angesprochen, ob sie in<br />

der Vergangenheit möglicherweise Code<br />

aus dem Internet in einer Art und Weise<br />

wiederverwendet haben, die rechtliche<br />

Risiken mit sich brachte, gaben circa 15<br />

Prozent der Befragten an, sich bereits<br />

mindestens einmal nicht ausführlich<br />

über Bedingungen des recycleten Codes<br />

informiert oder gar bekannte Ansprüche<br />

wissentlich ignoriert zu haben.<br />

Zusammenfassung<br />

Code aus dem Internet in der kommerziellen<br />

Entwicklung zu benutzen, ist ein<br />

Phänomen, das spätesten 2003 Fahrt<br />

aufgenommen hat und heute in vielen<br />

Projekten eine übliche Praxis ist. Die in<br />

diesem Artikel beleuchtete Umfrage hat<br />

ergeben, dass mehr als 50 Prozent der<br />

beruflichen Entwickler Code aus dem<br />

Internet für ihre Arbeit als „ein wenig<br />

wichtig“ für ihre Arbeit ansahen. Nur 12<br />

Prozent reagieren komplett immun gegen<br />

derartigen Code.<br />

Interessanterweise hatte nur eine kleiner<br />

Teil der Befragten während der Ausbildung<br />

oder von seinem Arbeitgeber<br />

Nutzungsinformationen zu Wiederverwendung<br />

fremden Codes erhalten. Der<br />

Großteil bezog sein Wissen aus dem Internet<br />

oder von Freunden und Kollegen.<br />

Dennoch schätzten die meisten Entwickler<br />

ihr Wissen zu Lizenzen als hoch ein<br />

– viel zu hoch, wie die Auswertung des<br />

hier vorgestellten Quiz nahe legt. Auch<br />

in den Firmen scheinen die rechtlichen<br />

Risiken, die sich beim Praktizieren des<br />

Open-Source-Basars ergeben, nicht angekommen<br />

zu sein. 2009 verfügten nur<br />

knapp ein Drittel der Unternehmen über<br />

entsprechende Regeln.<br />

Viele Unternehmen, die Software entwickeln,<br />

müssen davon ausgehen, dass<br />

ihr Code Fragmente von Code aus dem<br />

Internet enthält. Quelloffenen Code nachzunutzen<br />

hilft dabei, Software schneller<br />

und wirtschaftlicher entwickeln. Auf<br />

lange Sicht profitieren Unternehmen<br />

jedoch nur, wenn sie dabei Lizenzverletzungen<br />

unterbinden – durch Sensibilisieren<br />

und Schulen der Entwickler und<br />

indem sie eindeutige Regeln und klare<br />

Prozesse definieren. (jk)<br />

n<br />

Der Autor<br />

Dr. Manuel Sojer hat 2010 am Dr. Theo Schöller-<br />

Stiftungslehrstuhl für Technologie- und Innovationsmanagement<br />

der Technischen Universität<br />

München bei Prof. Dr. Joachim Henkel zur Wiederverwendung<br />

von Open-Source-Code promoviert.<br />

Infos<br />

[1] Black Duck Software:<br />

[http:// www. blackducksoftware. com]<br />

[2] Y. E. Kim, E. A. Stohr, „Software Reuse –<br />

Survey and Research Directions“ (1998):<br />

Journal of Management Information Systems<br />

14(4), S. 113-147<br />

[3] A. Lynex, P. J. Layzell, „Organisational<br />

Con siderations for Software Reuse“ (1998):<br />

Annals of Software Engineering 5(1), S.<br />

105-124<br />

[4] M. Sojer, „Code wiederverwenden in<br />

öffentlichen Open-Source-Projekten“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 04/​12, S. 84<br />

[5] G. Schryen, „Is Open Source Security a<br />

Myth?“ (2011): Communications of the ACM<br />

54(5), S. 130-140<br />

[6] I. Stamelos, L. Angelis, A. Oikonomou,<br />

G. L. Bleris, „Code Quality Analysis in Open<br />

Source Software Development“ (2002):<br />

Information Systems Journal 12(1), S.<br />

43-60<br />

[7] M. Sojer, „Reusing Open Source Code“<br />

(2010): Gabler Verlag, Wiesbaden<br />

[8] L. Rosen, „Open Source Licensing: Software<br />

Freedom and Intellectual Property<br />

Law“ (2004): Prentice-Hall, Englewood<br />

Cliffs, NJ.<br />

[9] B. Fitzgerald, G. Bassett, „Legal Issues Relating<br />

to Free and Open Source Software“,<br />

In: B. Fitzgerald, G. Bassett (Ed.), „Legal<br />

Issues Relating to Free and Open Source<br />

Software“ (2005), Queensland University<br />

of Technology, Bisbane, QLD, S. 11-36<br />

[10] Open Source Initiative:<br />

[http:// opensource. org]<br />

[11] VMware, Inc., „Form 10-Q, Filed 08/​02/​12<br />

for the Period Ending 06/​30/​12“:<br />

[http:// ir. vmware. com/ common/ download/<br />

sec. cfm? companyid=VMW& fid=1124610‐12‐21<br />

& CIK=1124610]


Hardware<br />

www.linux-magazin.de Smart Watches 12/2012<br />

80<br />

Smart Watches: Hightech-Uhren unter <strong>Linux</strong> ansprechen<br />

Arm-Leuchter<br />

Die James Bonds der 70iger Jahre hätte es elektrisiert: Die Miniaturisierung und Computerisierung am Handgelenk<br />

feiert einen neuen Höhepunkt – mit der Klasse der Smart Watches. Acht prominente Vertreter im <strong>Linux</strong>-<br />

<strong>Magazin</strong>-Test. Nils Faerber<br />

© Nils Faerber<br />

wenige Tastendrücke von der Uhr zu<br />

empfangen. Einfache Applikationen wie<br />

SMS-Anzeige oder die Steuerung eines<br />

Musikplayers lassen sich damit durchaus<br />

realisieren, doch ist der Benutzer auf<br />

das beschränkt, was der Hersteller in der<br />

Firmware der Uhr vorgesehen hat – und<br />

das ist nicht sehr viel.<br />

Weder von Fossil noch von Sony-Ericsson<br />

gibt es eine Dokumentation zum Protokoll<br />

oder zu den AT-Befehlen, die die<br />

Uhr versteht, aber unter [1] findet sich<br />

der Ansatz einer freien Implementation<br />

einer Java-Software, um die Uhren anzusteuern<br />

– vielleicht tut sich hier doch<br />

noch etwas, um den Hackerzugriff zu<br />

ermöglichen.<br />

Neu ist er nicht, der Wunsch nach ein<br />

wenig Geheimagenten-Feeling am Handgelenk.<br />

Doch wer erinnert sich noch an<br />

die revolutionären Eigenschaften der<br />

Digitaluhren in den frühen Siebzigern?<br />

Zu den digitalen Displays gesellten sich<br />

nervtötende Piezo-Melodie-Alarme oder<br />

Stundenpiepser. Später kamen fummelige<br />

Taschenrechner oder gar ein Telefonbuch<br />

in die Armbanduhr.<br />

Mit dem Aufkommen der PDAs wie Palms<br />

Pilot oder Windows-CE-Geräten schien<br />

diese Ära jedoch bereits zu Ende zu gehen.<br />

Ein PDA konnte viel mehr, war aber<br />

auch eine Uhr, und man hatte ihn immer<br />

bei sich. Heute ist das Smartphone der<br />

immer präsente digitale Begleiter – doch<br />

es gibt sie immer noch: Smart Watches,<br />

mobile Endgeräte fürs Handgelenk, die<br />

mit Handy oder Tablet zusammenarbeiten<br />

und sich manchmal auch von <strong>Linux</strong><br />

aus hacken lassen.<br />

Dieser Artikel stellt einige Vertreter ihrem<br />

Alter nach vor (den ältesten zuerst),<br />

die Tabelle 1 vergleicht die wichtigsten<br />

Features und bewertet den Hack-Value,<br />

also ihre Eignung für den ambitionierten<br />

<strong>Linux</strong>-Bastler.<br />

E Fossil MBW<br />

Versuche, das Handgelenk für digitale<br />

Mehrzweckgeräte (zurück) zu erobern,<br />

gab es einige, die meisten scheiterten<br />

jedoch an der technischen Umsetzung.<br />

Erst die Miniaturisierung der IT machte<br />

es möglich, die digitale Funktionsfülle in<br />

eine akzeptable Form zu bekommen. Die<br />

ersten Smart Watches, die sich auch in<br />

Serienfertigung einiger Beliebtheit erfreuten,<br />

waren wohl die von Fossil für Sony-<br />

Ericsson entwickelten Blue tooth-Uhren<br />

der MBW-Serie.<br />

Die Zeitmesser kommunizieren über ein<br />

relativ einfaches Bluetooth-Rfcomm-basiertes<br />

Protokoll und AT-Kommandos mit<br />

ihrem Blauzahn-Host. Die Funktionen<br />

beschränken sich darauf, Benachrichtigungstexte<br />

zur Anzeige auf dem OLED-<br />

Display der Uhr zu bringen und einige<br />

E TI EZ430 Chronos<br />

Nach den MBW-Uhren tat sich erst mal<br />

wenig auf dem Markt der intelligenteren<br />

Armbanduhren. Gerüchte kursierten über<br />

zahlreiche, oft abstruse Ideen aus den<br />

Designabteilungen, doch keine davon<br />

erreichte den Endkunden. Fruchtbaren<br />

Boden bereitete erst ein Microcontroller-<br />

Entwicklungskit von Texas Instuments<br />

für die Low-Power-Microcontroller-Serie<br />

MSP430, die der Hersteller in der TI<br />

EZ430 Chronos (Abbildung 1, [2]) verbaut,<br />

einer klassischen digitalen Sportuhr,<br />

vollgepackt mit Sensorik.<br />

Zu dem zweizeiligen, inversen, hintergrundbeleuchtbaren<br />

7-Segment-LCD mit<br />

einigen Zusatzsymbolen kommen fünf<br />

Tasten, ein Digitaluhr-typischer Piezo-<br />

Beeper sowie Temperatur-, Luftdruckund<br />

3-Achsen-Beschleunigungs-Sensoren.<br />

Außerdem hat sie noch ein Funkmodul<br />

für die bidirektionale Kommunikation<br />

an Bord, das je nach Modell auf 433, 868<br />

oder 915 MHz sendet.


Abbildung 1: Eine Armbanduhr mit USB- und Funk-<br />

Anschluss für den PC: TI EZ430 Chronos.<br />

© Texas Instruments, CCASA 3.0<br />

Im Kit für 50 Euro ist ein passender USB-<br />

Funk-Dongle enthalten, über den der<br />

Anwender die Uhr abfragt, Daten an sie<br />

sendet und sogar Firmware-Updates einspielt.<br />

Wer dabei Pech hat, probiert ein<br />

Low-Level-Debugging mit dem ebenfalls<br />

im Kit enthaltenen USB-Dongle.<br />

Die Firmware ist bis auf einen kleinen<br />

Blob für ein spezielles Funkprotokoll<br />

komplett frei. Für <strong>Linux</strong> gibt es direkt<br />

von TI ein fertiges Paket für die Abfrage<br />

und grafische Darstellung der Sensordaten<br />

sowie das Firmware-Update. Der<br />

Firmware-Sourcecode ist für das TI Code<br />

Composer Studio (CCS) vorgesehen, das<br />

es inzwischen auch in Version 5 für <strong>Linux</strong><br />

gibt – doch kostenfrei nur als 30-Tage-<br />

Testversion. Für <strong>Linux</strong> gibt es aber auch<br />

eine freie GCC-Variante für die MSP430-<br />

Familie [3]. Damit haben Entwickler diverse<br />

Forks der Firmware [4] erstellt,<br />

auch im <strong>Linux</strong>-<strong>Magazin</strong>-Test ließ sich der<br />

Code unter <strong>Linux</strong> einwandfrei übersetzen<br />

und auf die Chronos spielen.<br />

Die Chronos ist ein spaßiges Hacker-<br />

Gadget, ein nahezu perfektes Spielzeug<br />

für Programmierer mit Interesse an Low-<br />

Power-Anwendungen, Microcontroller-<br />

Entwicklung und Funkprotokollen. Der<br />

reguläre Verkaufpreis von nur 50 Euro<br />

erleichtert den Einstieg. Einziger kleiner<br />

Nachteil ist das Display, da es sich nur<br />

um eine 7-Segment-Anzeige handelt. Die<br />

Darstellung von Text-Informationen ist<br />

damit nur sehr eingeschränkt möglich<br />

– aber nicht völlig verbaut. Hier ist die<br />

Phantasie des Entwicklers gefragt.<br />

E Sony Live View<br />

© <strong>Linux</strong>undich.de, Christoph Langner<br />

Nicht sehr lange nach der TI-Chronos<br />

kündigte Sony Ericsson etwas an, was<br />

nicht wirklich als<br />

Armbanduhr gedacht<br />

war, aber durchaus als<br />

solche dienen kann:<br />

das Live View (Abbildung<br />

2). Ein kleines,<br />

kompaktes Gerät<br />

als sekundäres und<br />

schnell verfügbares<br />

Display zum Android-<br />

Mobiltelefon, das war<br />

Sonys Idee. Das Live<br />

View verfügt dazu<br />

über ein 3,5 Zentimeter<br />

kleines, vollfarbiges OLED mit 128<br />

mal 128 Pixeln Auflösung sowie einen<br />

STM32-ARM-Cortex-M3-Controller, einen<br />

Vibrationsmotor und ein Bluetooth-<br />

Modul. Bedienen lässt es sich über zwei<br />

Hardwaretasten sowie neun kapazitive<br />

Touchfelder auf dem Display.<br />

Sonys Firmware bringt Funktionen für<br />

die Darstellung von Uhrzeit und Datum,<br />

den Aufbau von Menüs oder die Darstellung<br />

von Bitmaps auf dem gesamten Bildschirm<br />

und die Abfrage der Tasten. Über<br />

ein einfach gehaltenes Rfcomm-basiertes<br />

Bluetooth-Protokoll lassen sich allerlei<br />

Applikationen realisieren, zum Beispiel<br />

Benachrichtigungen, Anzeige von Bildern,<br />

Steuerung eines Mediaplayers und<br />

mehr. Weil der Bastler die Anzeige komplett<br />

selbst steuern sowie alle Tasten abfragen<br />

kann, eignet sich das Live View in<br />

fast beliebigen Szenarien als sekundäres<br />

Display mit Bedienmöglichkeit.<br />

Abbildung 2: Keine Uhr, eher ein Mini-Display für Androiden: Live View.<br />

Smart Watches 12/2012<br />

Hardware<br />

www.linux-magazin.de<br />

81<br />

Tabelle 1: Armbanduhren-Gadgets und ihr Hack-Value<br />

Fossil<br />

MBW<br />

TI EZ430<br />

Chronos<br />

Sony Live<br />

View<br />

Sony Smart<br />

Watch<br />

Allerta In<br />

Pulse<br />

Meta Watch<br />

Allerta<br />

Pebble<br />

I’m Watch<br />

Straßenpreis ab 50 Euro 50 Euro 30 Euro 80 Euro 150 Euro 200 Euro 150 Euro 350 Euro<br />

Anbindung<br />

Bluetooth<br />

(Rfcomm)<br />

Funk<br />

Prozessor, Speicher k.A. 20 MHz TI<br />

MSP430F6137,<br />

32 KByte Flash,<br />

4 KByte RAM<br />

Batterie<br />

Lithium-<br />

Polymer<br />

Laufzeit 5 bis 30<br />

Tage<br />

Bewertung<br />

CR2032<br />

mehrere<br />

Monate<br />

Bluetooth<br />

(Rfcomm)<br />

STM32 ARM<br />

Cortex M3,<br />

k.A. zu RAM<br />

Lithium-<br />

Polymer<br />

Bluetooth<br />

(Rfcomm)<br />

k.A.<br />

Lithium-<br />

Polymer<br />

Bluetooth<br />

(Rfcomm)<br />

Bluetooth<br />

(Rfcomm)<br />

52 MHz ARM7, 25 MHz TI<br />

32 KByte Flash, MSP430F5438,<br />

8 KByte RAM 256 KByte Flash,<br />

16 KByte RAM<br />

Lithium-<br />

Polymer<br />

2 bis 7 Tage 2 bis 7 Tage 6 bis 72 Stunden<br />

Lithium-<br />

Polymer<br />

Bluetooth<br />

k.A.<br />

Lithium-<br />

Polymer<br />

4 bis 20 Tage bis zu 7<br />

Tage<br />

Bluetooth<br />

(Rfcomm), DUN,<br />

SCO, A2DP<br />

Freescale i.MX233,<br />

128 MByte RAM,<br />

4 GByte Flash<br />

Lithium-Polymer<br />

3 bis 48 Stunden<br />

<strong>Linux</strong>-Software - +++ + – +++ ++ n. mögl. -<br />

Firmware-/​Proto koll- + +++ + — ++ +++ n. mögl. -<br />

Dokumentation<br />

Hack-Value + +++ ++ + +++ +++ n. mögl. +


Hardware<br />

www.linux-magazin.de Smart Watches 12/2012<br />

82<br />

Das Kommunkationsprotokoll hat allerdings<br />

(wieder mal) nicht Sony selbst<br />

offengelegt, sondern findige Hacker haben<br />

es „reverse-engineert“ ([5], [6]).<br />

Die Methode dazu ist einfach: Live View<br />

nutzt Android-Software, um die Kommunikation<br />

abzuwickeln und vom Sony-SDK<br />

beispielsweise eigene Mini-Applikationen<br />

zu erhalten. Wer jetzt auf seinem Androiden<br />

das <strong>Linux</strong>-Tool Hcidump aus dem<br />

Bluetooth-Stack Bluez nutzt, schneidet<br />

live den Datenverkehr zwischen Telefon<br />

und Live View mit.<br />

Die Python-Implementation, die so entstanden<br />

ist, bietet laut Angaben ihres<br />

Entwicklers alle Funktionen des Protokolls,<br />

aber keine höheren. Wer also Benachrichtigungen<br />

oder Bitmaps auf das<br />

Live View übertragen möchte, muss dazu<br />

eigenen Code schreiben.<br />

Das Live View war der erste Versuch und<br />

hat nach wie vor noch ein paar Kinderkrankheiten,<br />

es läuft schlicht nicht stabil.<br />

Von Zeit zu Zeit bricht die Bluetooth-Verbindung<br />

einfach ab, manche Funktionen<br />

arbeiten nur mit Unterbrechungen.<br />

E Sony Smart Watch<br />

Kein Wunder, dass Sony bald eine neue<br />

Gerätegeneration brachte, die Smart<br />

Watch (Abbildung 3). Das Prinzip blieb<br />

etwa gleich, auch der Formfaktor, aber<br />

Soft- und Hardware hat der Hersteller<br />

deutlich verbessert. Der kapazitive<br />

Touchscreen ist jetzt vollflächig und nicht<br />

mehr in Tasten aufgeteilt. Auch erscheint<br />

das Display qualitativ etwas besser. Im<br />

Lieferumfang befindet sich auch ein<br />

Gummi-Armband, an das der Besitzer<br />

die Smart Watch mit einem Clip steckt,<br />

was jedoch etwas gewöhnungsbedürftig<br />

sperrig wirkt.<br />

Die neue Standard-Android-Software ist<br />

deutlich stabiler und umfangreicher, die<br />

Kommunikation mit der Smart Watch<br />

deutlich schneller als mit dem Live View,<br />

wodurch sogar komplexere Applikationen,<br />

etwa ein Kamerasucher, der das<br />

Live-Bild der Handykamera auf der Uhr<br />

anzeigt, halbwegs fließend laufen.<br />

Hacker werden dagegen weniger Spaß<br />

mit der Smart Watch haben. Es gibt zurzeit<br />

noch keinerlei offene Informationen<br />

zum Protokoll. Ein Test mit Hcidump<br />

zeigt nur, dass zumindest wieder ein<br />

Rfcomm-basiertes Protokoll zum Einsatz<br />

Abbildung 3: Sonys Nachfolger für das Live View, die<br />

Smart Watch, behebt viele Kinderkrankheiten.<br />

kommt. Hier ist entweder selbst Hand<br />

anzulegen oder darauf zu warten, dass<br />

andere Entwickler das Reverse Engineering<br />

erfolgreich bewerkstelligen.<br />

E Allerta In Pulse<br />

Aus Kanada stammt das Startup Allerta,<br />

das Anfang 2010 seine smarte Uhr auf<br />

den Markt brachte. Die In Pulse hat,<br />

ähnlich wie die Live View oder Smart<br />

Watch, ein vollfarbiges OLED-Display mit<br />

einer Auflösung von 96 mal 128 Pixeln,<br />

das ein 52-MHz-ARM7-SoC ansteuert. Es<br />

lässt sich ebenfalls per Bluetooth an Mobiltelefon<br />

oder PC anbinden (Abbildung<br />

4 sowie [7], [8]).<br />

Die In Pulse richtet sich aber von vornherein<br />

an interessierte Geeks und Hacker<br />

mit einem Hang zu Kreativität und<br />

Experimentierfreude. Ein SDK für die<br />

Anwendungsentwicklung gibt es sowohl<br />

für Windows und Mac als auch <strong>Linux</strong>.<br />

Eigene Applikationen greifen über das<br />

In-Pulse-API auf die Funktionen der Uhr<br />

zu – Grafiken anzeigen, den einzigen<br />

Bedienknopf abfragen, Bluetooth-Nachrichten<br />

senden oder empfangen, alles<br />

kein Problem. Mit einem kleinen GTK+basierten<br />

Simulator testet der Anwender<br />

gar die eigene Applikation, bevor er sie<br />

für die ARM-CPU cross-kompiliert. Auf<br />

der Webseite zur In Pulse findet sich<br />

bereits eine ganze Reihe verrückter Applikationsbeispiele<br />

[9] – bis hin zu einer<br />

Art Doom-Spiel.<br />

Die meisten Applikationen drehen sich<br />

aber eher um die Zusammenarbeit mit<br />

den von Allerta bereitgestellten Smartphone-Applikationen<br />

für Android, I-OS<br />

und Blackberry, etwa das Anzeigen von<br />

Nachrichten, Anrufen, Wetter- und Börsendaten.<br />

Weil der Hersteller die Applikationsentwicklung<br />

sehr einfach macht,<br />

ist das kleine Gerät ein nahezu perfektes<br />

Spielzeug für Programmierer.<br />

Aber ein paar Schönheitsfehler bleiben:<br />

Leider ist der verfügbare Sourcecode<br />

wirklich nur der der Applikationen. Die<br />

Firmware selbst, obwohl sie den freien<br />

Embedded-Bluetooth-Stack [10] verwendet,<br />

ist nur als binär vorkompilierte Bibliothek<br />

in dem SDK-Paket vorhanden.<br />

Auch gibt es zu dem Protokoll zwischen<br />

Uhr und Host-Werkzeugen leider nur eingeschränkte<br />

Dokumentationen.<br />

E Meta Watch<br />

Ursprünglich ein gemeinsames Projekt<br />

von Fossil und Texas Instruments, lässt<br />

Abbildung 4: Zielgruppe sind Hacker und Geeks: Die Allerta In Pulse und ihr Nachfolger Pebble.<br />

© Sony


sich die Meta Watch (Abbildung 5, [11])<br />

durchaus als Kind der TI EZ430 ansehen.<br />

Die Idee einer offenen Smart Watch hatte<br />

Fossil schon länger, doch zum Produkt<br />

gedieh sie erst, als die Chronos alle Verkaufserwartungen<br />

übertraf.<br />

Die Meta Watch nutzt ein Referenzdesign<br />

für Low-Power-Bluetooth-Anwendungen<br />

von Texas Instruments mit einem MSP-<br />

430F5438-Microcontroller und dem TI CC-<br />

2560-Low-Power-Blue tooth-Modul. Die<br />

Uhr kombiniert sechs Tasten, einen Vibrationsmotor<br />

und einen Drei-Achsen-Beschleunigungssensor<br />

mit einem bemerkenswerten<br />

Display – ein monochromes<br />

Sharp Polymer Networked Liquid Crystal<br />

(PNLC, [12]) mit 96 mal 96 Pixeln.<br />

Diese Anzeigen verwenden im Gegensatz<br />

zu normalen LCDs keine Polarisationsfilter:<br />

Die Pixel sind entweder voll<br />

transparent oder diffus. Auf der Rückseite<br />

des Displays befindet sich ein Vollspiegel<br />

als Reflektor. Das Resultat ist ein zwar<br />

nicht immer optimal ablesbares, aber<br />

einzigartiges Display mit sehr geringem<br />

Stromverbrauch.<br />

Neben der digitalen Version gab es die<br />

Meta Watch auch als analoge Variante<br />

mit elektromechanischem Uhrwerk und<br />

zwei OLED-Displays mit je 96 mal 16 Pixeln<br />

Auflösung. Diese Uhren hat der Hersteller<br />

jedoch bald wieder aufgegeben, da<br />

die Nachfrage zu gering war.<br />

Auch die Meta Watch ist eher für interessierte<br />

Hacker und weniger für Endkunden<br />

gedacht. Zwar<br />

bringt sie eine fertige<br />

Firmware mit Android-<br />

Smartphone-Applikationen,<br />

etwa zur Anzeige<br />

von Wetterdaten,<br />

Anrufen und Nachrichten<br />

mit, doch erweist<br />

sich die Software<br />

insgesamt als eher rudimentär.<br />

Kommunikationsprotokoll,<br />

Android-Applikation<br />

und Firmware<br />

sind sogar unter einer<br />

modifizierten Apache-<br />

Lizenz via Github [13]<br />

erhältlich. Leider ist<br />

der Bluetooth-Stack<br />

nicht frei, sondern nur als proprietäre<br />

Bibliothek zusammen mit dem Firmware-<br />

Sourcecode erhältlich. Daher lässt sich<br />

die Firmware nicht ohne Weiteres mit<br />

freien Werkzeugen übersetzen, was die<br />

Arbeit mit <strong>Linux</strong> erschwert.<br />

Die ersten Versionen der Meta-Watch-<br />

Firmware waren ausschließlich mit der<br />

IAR-Compilersuite unter Windows übersetzbar.<br />

Seit gut einem halben Jahr jedoch<br />

ist der Firmwarecode auch für das TI<br />

Code Composer Studio 5 [14] verfügbar,<br />

das es seit fast dem gleichem Zeitpunkt<br />

auch für <strong>Linux</strong> gibt. Der Hersteller gibt<br />

interessierten Meta-Watch-Entwicklern<br />

sogar kostenlose CCS5-Lizenzen.<br />

Abbildung 5: Die Meta Watch gibt es als digitale und als – inzwischen eingestellte<br />

– analoge Variante.<br />

Mit im Paket der Meta Watch enthalten ist<br />

ein Micro-USB-Ladeclip. Er enthält auch<br />

ein vollständiges Hardware-Debugging-<br />

Interface, mit dem Hacker den Controller<br />

mit neuer Firmware bespielen oder debuggen.<br />

Mit freien Werkzeugen war das<br />

bisher schwierig, weil der MSP430-GCC<br />

den erweiterten 20-Bit-Adressierungsmodus<br />

für den Zugriff oberhalb von 64<br />

KByte nicht unterstützte. Mit einem Bluetooth-Stack<br />

sind 64 KByte allerdings sehr<br />

wenig, vor allem wenn der Entwickler ein<br />

LCD ansteuern will. Doch auch dieses<br />

Problem ist gelöst und so steht einem<br />

freien Firmwareprojekt auf Basis von BT-<br />

Stack nichts im Wege.<br />

© Texas Instruments, CCASA 3.0<br />

Smart Watches 12/2012<br />

Hardware<br />

www.linux-magazin.de<br />

83<br />

Alles zum ThemA Android<br />

Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />

DigisuB: nur 39,90 €<br />

im Jahr (12 PDFs)<br />

Neu!<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<br />

+ Lesen Sie News<br />

und Artikel schon<br />

1 Woche vor dem<br />

Kiosk-Termin!


Hardware<br />

www.linux-magazin.de Smart Watches 12/2012<br />

84<br />

Die Chancen für aktive Beteiligung stehen<br />

nicht schlecht: Inzwischen hat sich<br />

Fossil von dem Projekt getrennt und es<br />

in eine separate Firma mit Sitz in Espoo<br />

(Finnland) und Dallas (Texas, USA) ausgelagert,<br />

die sich auch über Kickstarter<br />

finanzieren will. Vor gut drei Monaten<br />

haben die Hersteller die nächste Generation<br />

der Meta Watch namens Strata<br />

angekündigt. Dem Vernehmen nach wird<br />

die Hardware praktisch identisch bleiben,<br />

nur das Bluetooth-Modul wird gegen das<br />

CC2564 mit Bluetooth Low Energy 4.0<br />

(BLE) ausgetauscht.<br />

E Allerta Pebble<br />

Die Pebble [15]) ist, ohne Übertreibung,<br />

die zurzeit wohl bekannteste Smart<br />

Watch, obwohl sie noch gar nicht verfügbar<br />

ist. Pebble ist Allertas Nachfolgeprojekt<br />

für die In Pulse und sollte über<br />

Kickstarter mit 100 000 Dollar finanziert<br />

werden. Das Ergebnis war überwältigend<br />

(Abbildung 6): Mehr als 10 Millionen<br />

Dollar machten Pebble zum mit Abstand<br />

erfolgreichsten Kickstarter-Projekt aller<br />

Zeiten, obwohl kaum Details zur Hardware<br />

bisher bekannt sind [16].<br />

Die wenigen verfügbaren Spezifikationen<br />

machen neugierig: ein 144 mal 168 Pixel<br />

großes Schwarz-Weiß-Display, angeblich<br />

ein E-Paper-Display. Die Kommunikation<br />

mit der Außenwelt erfolgt über Bluetooth<br />

2.1+ mit EDR sowie 4.0 mit BLE, die<br />

Bedienung über vier Knöpfe, Vibrationsmotor,<br />

ein Drei-Achsen-Beschleunigungssensor<br />

für die Gestenerkennung.<br />

Allein über die verwendete CPU und den<br />

ihr zur Seite gestellten Speicher ist noch<br />

nichts bekannt. Die Batterielaufzeit wird<br />

laut Hersteller eine Woche erreichen. Bei<br />

Verkaufsstart soll Software für die üblichen<br />

Mobiltelefone (Android, I-OS und<br />

Blackberry) verfügbar sein. Wie für die<br />

In Pulse soll es wieder ein SDK zur Applikationsentwicklung<br />

geben [17]. Die<br />

Open-Source-Strategie ist noch unklar.<br />

Abbildung 6: 10 Millionen Dollar via Crowdfunfing: Pebble ist das bisher erfolgreichste Kickstarter-Projekt.<br />

dann im August ein Paket, doch mit dem<br />

falschen Modell. Wieder endlose Ticket-<br />

Mails, eine Rücksendung zum Hersteller<br />

und lange Wartezeiten – bis zum Redaktionsschluss<br />

ohne Erfolg.<br />

Die Firma hinter I’m Watch macht jedoch<br />

einen sehr geschäftstüchtigen Eindruck.<br />

Applikationen, Mitgliedschaft als Entwickler<br />

(rund 100 Euro pro Jahr, um an<br />

das SDK zu kommen), Musikdienste und<br />

mehr. Ein Schelm, wer da auf den Gedanken<br />

kommt, nicht nur das „I“ im Produktnamen<br />

erinnere an Apple. Von freier<br />

Software, dem <strong>Linux</strong>-Kernel oder Android<br />

spricht der Hersteller nirgendwo. Und die<br />

Preisspanne der Uhren erweist sich als<br />

erstaunlich: 350 bis 15 000 Euro dürfen<br />

Käufer hinlegen. Einziger Unterschied<br />

zwischen den Modellen ist das Design<br />

von Gehäuse und Armband.<br />

Ähnlich zu beeindrucken wissen die<br />

Funktionen der Uhr (Abbildung 8), deeiner<br />

stilvollen italienischen Armbanduhr<br />

bringt. Als Motor dient ein Freescale<br />

i.MX233 ARM9 SoC mit 128 MByte RAM<br />

und 4 GByte Flash-Speicher [19]. Das<br />

macht die I’m Watch zur ersten in Serie<br />

gefertigten <strong>Linux</strong>-Armbanduhr, die entsprechende<br />

Ankündigung dazu gab’s im<br />

Herbst 2011, erste Prototypen auf der CES<br />

in Las Vegas im Januar 2012.<br />

Und die tragische Seite: Für Endkunden,<br />

die wie der Autor dieses Artikels bereits<br />

im Dezember 2011 bestellt (und bezahlt)<br />

hatten, dauerte es bis Ende August 2012,<br />

bis eine Lieferung kommen sollte. Rückfragen<br />

übers eigens eingerichtete Ticketsystem<br />

blieben unbeantwortet, dafür<br />

gestaltete der Hersteller seine Webseite<br />

samt Shopsystem mehrfach neu und änderte<br />

die Produktpalette.<br />

Nur zähe Verhandlungen ermöglichten<br />

eine Änderung der Bestellung in die für<br />

eines der neuen Modelle. Endlich kam<br />

E I’m Watch<br />

Zum Schluss das wohl tragisch-spannendste<br />

Projekt: die I’m Watch (Abbildung<br />

7, [18]) aus Italien. Spannend ist<br />

es, weil es ein komplettes Android-System<br />

mit kapazitivem Touchscreen und TFT-<br />

Display (240 mal 240 Pixel) in die Form<br />

Abbildung 7: Dank Android ist die schicke I’m Watch die erste in Serie gefertige <strong>Linux</strong>-Armbanduhr.


© Nils Faerber<br />

www.linux-magazin.de<br />

Smart Watches 12/2012<br />

Hardware<br />

85<br />

Abbildung 8: Ein vollständiges Android mit vielen Funktionen, Audio-Ein- und Ausgang, Bluetooth-Tethering via Smartphone und vieles mehr bietet die I’m Watch für<br />

viel Geld. Überhaupt scheint man zahlungskräftige Käufer zu adressieren: Fast alles hat seinen Preis, selbst Onlinedienste oder das Entwicklerdasein.<br />

ren Design erfahrenen Android-Anwendern<br />

sehr bekannt vorkommen wird.<br />

Über den eingebauten Lautsprecher oder<br />

einen 3,5-Millimeter-Klinkenstecker gibt<br />

die Uhr direkt Musik wieder, aus ihrem<br />

4 GByte großen Speicher und mit sehr<br />

guter Qualität. Via Bluetooth-Tethering<br />

kann sie selbstständig Daten aus dem<br />

Internet ziehen. Die eingebauten Applikationen<br />

verwenden dazu jedoch die I’m-<br />

Cloud, einen Dienst von I’m Watch, zu<br />

dem sich der Besitzer der Uhr anmelden<br />

muss, denn ohne ihn geht nicht viel mit<br />

dem schicken Accessoire.<br />

Zusammen mit dem Mobiltelefon wird<br />

die I’m Watch auch zum Bluetooth-<br />

Headset – mit eingebautem Mikrofon und<br />

Lautsprecher, ganz wie die berühmte Uhr<br />

des Comic-Helden Dick Tracy. Über das<br />

Touchdisplay des Chronometers lassen<br />

sich Kontakte anwählen oder Rufnummern<br />

direkt eingeben. Der Telefonbuch-<br />

Abgleich findet via Google und I’m-Cloud<br />

statt, nicht etwa über Bluetooth PBAP<br />

(Phone Book Access Profile), was Datenschützern<br />

sicher lieber wäre.<br />

Eine neuere Firmware landet einfach per<br />

USB-Dateitransfer auf der Uhr. Diese Aktualisierung<br />

ist auch immer wieder bitter<br />

nötig, denn die Software ist noch alles<br />

andere als stabil und ausgereift. Informationen<br />

über den Inhalt der Firmware oder<br />

wie sich diese anpassen ließe, gibt es von<br />

I’m Watch nicht.<br />

Für den Programmierer bleibt also nur<br />

der Zugang zur Uhr über das Android-<br />

SDK und selbst entwickelte Android-<br />

Applikationen, die er dann über den I’m-<br />

Market, dem eigenen Applikations-Shop<br />

von I’m Watch, installiert. Ob und wie<br />

der stolze Besitzer auch Applikationen<br />

außerhalb des I’m-Market installieren<br />

kann, ist bisher nicht bekannt.<br />

Der Hack-Value ist daher ambivalent.<br />

Mit viel Enthusiasmus lässt sich die I’m<br />

Watch aber sicherlich aus dem Kommerz-<br />

Universum des Herstellers befreien. Die<br />

Hardware um den i.MX233 SoC ist kein<br />

Mysterium, den <strong>Linux</strong>-Kernel-Sourcecode<br />

sollte I’m Watch spätestens dann, wenn<br />

genügend Anwälte vor der Tür stehen,<br />

herausgeben müssen. So befreit hätte die<br />

I’m Watch das Zeug dazu, eines der faszinierendsten<br />

Gadgets zu werden, wenn<br />

auch ein sehr teueres.<br />

Unaufdringlich, aber<br />

leistungsstark<br />

Smart Watches können in <strong>Linux</strong>-Kreisen<br />

durchaus eine Renaissance der digitalen<br />

Armbanduhren einläuten. Nachdem die<br />

Mobiltelefone zuerst immer kleiner wurden<br />

und mit dem Aufkommen von Smartphones<br />

wieder wachsen, ist sicherlich<br />

Platz für Hilfsmittel, die Informationen<br />

des Telefons einfach, unaufdringlich,<br />

schnell und immer verfügbar anzeigen.<br />

Immer leistungsfähigere, aber dennoch<br />

stromsparende Microcontroller sowie die<br />

Miniaturisierung selbst komplexer Funktechnologie<br />

wie Bluetooth machen Smart<br />

Watches erst möglich. Diese Entwicklung<br />

hat gerade erst begonnen. (mfe) n<br />

Infos<br />

[1] Java-Implementierung des MBW-Protokolls:<br />

[http:// sourceforge. net/ projects/​<br />

jbtwatch/]<br />

[2] Texas Instruments EZ430 Chronos:<br />

[http:// www. ti. com/ tool/ ez430‐chronos]<br />

[3] MSP430-GCC:<br />

[http:// mspgcc. sourceforge. net]<br />

[4] Chronos Firmware-Quellen für MSP-GCC:<br />

[https:// github. com/ psehorne/​<br />

eZChronos],<br />

[https:// github. com/ poelzi/ OpenChronos]<br />

[5] Live View Protocoll: [http:// code. google.<br />

com/ p/ adqmisc/ source/ browse/ # svn%2<br />

Ftrunk%2Fliveview]<br />

[6] Open Live View – freie Re-Implementierung<br />

für Android: [https:// github. com/​<br />

pedronveloso/ OpenLiveView]<br />

[7] Offizielle In-Pulse-Webseite:<br />

[http:// www. getinpulse. com]<br />

[8] Inoffizielle In-Pulse-Webseite:<br />

[http:// www. inpulsewatch. com]<br />

[9] In-Pulse-Applikationen:<br />

[http:// www. getinpulse. com/ apps/]<br />

[10] Freier Embedded-BT-Stack:<br />

[http:// code. google. com/ p/ btstack/]<br />

[11] Meta Watch: [http:// www. metwatch. org]<br />

[12] Sharp-Polymer-Display:<br />

[http:// www. sharpmemorylcd. com/​<br />

aboutmemorylcd. html]<br />

[13] Firmware-Sourcecode:<br />

[https:// github. com/ MetaWatchOpen<br />

Projects/ MetaWatch‐WDS11x]<br />

[14] Get Pebble: [http://processors.wiki.<br />

ti.com/index.php/Category:Code_<br />

Composer_Studio_v5]<br />

[15] Get Pebble: [http:// www. getpebble. com]<br />

[16] Rekordhalter Pebble auf Kickstarter:<br />

[http:// www. kickstarter. com/ projects/​<br />

597507018/ pebble‐e‐paper‐watch‐for<br />

‐iphone‐and‐android]<br />

[17] Pebble-SDK-Blog:<br />

[http:// www. getpebble. com/ blog]<br />

[18] I’m Watch: [http:// www. imwatch. it]<br />

[19] Technische Daten der I’m Watch:<br />

[http:// www. imwatch. it/ de‐de/​<br />

smartwatch/ color_alu/ tech_spec]


Know-how<br />

www.linux-magazin.de Kern-Technik 12/2012<br />

88<br />

Kernel- und Treiberprogrammierung mit dem <strong>Linux</strong>-Kernel – Folge 65<br />

Kern-Technik<br />

Wer mit <strong>Linux</strong> zu tun hat, sieht sich realen, virtuellen oder Boot-Konsolen gegenüber, begegnet klassischen,<br />

Pseudo- oder auch Controlling-Terminals. Die Kern-Technik bringt Ordnung in die babylonische Sprachverwirrung<br />

und zeigt, wie man einen eigenen Terminaltreiber schreibt. Jürgen Quade, Eva-Katharina Kunst<br />

© psdesign1, Fotolia<br />

65<br />

Als Unix-Rechner noch Schrankgröße<br />

hatten, liefen die Ein- und Ausgaben über<br />

Terminals. Ein Terminal, etwa das VT100<br />

von Digital Equipment (DEC), bestand<br />

aus einer Tastatur und einem Monitor,<br />

der nur Text in grüner Schrift auf dunklem<br />

Hintergrund darstellte. Es war per serieller<br />

Schnittstelle mit dem eigentlichen<br />

Rechner verbunden. Als Multiuser-Systeme<br />

konnten Unix-Rechner meist mehrere<br />

Terminals bedienen, wobei jenes, das<br />

direkt beim Rechner stand und Boot- und<br />

sonstige Systemnachrichten anzeigte, als<br />

Konsole bezeichnet wurde [1].<br />

Moderne <strong>Linux</strong>-Systeme passen längst in<br />

unsere Hosentaschen und eine serielle<br />

Schnittstelle zum Anschluss eines VT100<br />

sucht man am Gehäuse vergebens. Auch<br />

wenn das klassische Terminal also ausgedient<br />

hat, starten Profis direkt nach<br />

dem Hochfahren von X-Window und<br />

dem Login etwas, das<br />

sie ebenfalls Terminal<br />

nennen, um textbasiert<br />

schnell mit dem<br />

System zu kommunizieren.<br />

Allerdings handelt es<br />

sich bei diesem Terminal<br />

nicht mehr um<br />

Hardware, sondern<br />

um Software. Unabhängig<br />

von der Realisierungsform<br />

ist das<br />

Konzept des Terminals<br />

aber auch heute<br />

noch zentraler und<br />

zeitgemäßer Bestandteil<br />

eines Unix- beziehungsweise<br />

<strong>Linux</strong>-<br />

Systems. Dabei findet<br />

sich <strong>Linux</strong> auch in<br />

vielen Embedded-Geräten,<br />

die weder einen Tastaturanschluss<br />

noch eine Grafikkarte aufweisen.<br />

Terminal per VGA<br />

Jedes <strong>Linux</strong>-System besitzt eine Gerätedatei<br />

namens »/dev/console«, und jede<br />

Applikation hat die Möglichkeit und das<br />

Recht, »/dev/tty« zu öffnen. Das Gerät<br />

»/dev/console« repräsentiert die klassische<br />

Konsole, manchmal auch als Systemkonsole<br />

bezeichnet. Sie dient dazu,<br />

Textmeldungen des Betriebssystems<br />

entgegenzunehmen, beispielsweise die<br />

Bootmessages.<br />

Ubuntu <strong>Linux</strong> etwa leitet die Meldungen<br />

standardmäßig auf das erste virtuelle<br />

Terminal um. „Virtuell“ deutet<br />

schon an: Das Terminal wird emuliert.<br />

Insbesondere die (textbasierten) Ausgaben<br />

werden per Treibersoftware über die<br />

eingebaute Grafikkarte (VGA) auf den<br />

Monitor gezaubert. Auf diese Art stellt<br />

<strong>Linux</strong> sogar mehrere virtuelle Terminals<br />

zur Verfügung, repräsentiert als Gerätedateien<br />

»/dev/ttyn«. Die Zahl n steht für<br />

die Nummer des Terminals, typischerweise<br />

zwischen 1 und 6.<br />

Die virtuellen Terminals lassen sich über<br />

das gleichzeitige Drücken der Tasten<br />

[Strg]+[Alt]+[Fn] aktivieren. Daraufhin<br />

erscheinen die zugehörigen Ausgaben auf<br />

dem Bildschirm und die Tastatureingaben<br />

bekommen jene Applikationen weitergereicht,<br />

die lesend auf das Terminal<br />

zugreifen. In den meisten Fällen ist dies<br />

der Prozess »getty«, der den Benutzer<br />

auch nach seinem Login-Namen und<br />

dem Passwort fragt und in dessen Folge<br />

die Login-Shell startet.<br />

Eine noch weiter gehende Entkopplung<br />

zwischen Applikation und Hardware<br />

realisieren die Pseudoterminals (»pty«).<br />

Sie ermöglichen es einer Applikation wie<br />

etwa Telnet oder SSH, Texte gewohnt einfach<br />

sogar über Rechnergrenzen hinweg<br />

auszugeben. Aber auch die gängigen Terminalprogramme<br />

für X11 wie Gnome-Terminal<br />

oder das gute alte Xterm basieren<br />

auf den aus Master und Slave bestehenden<br />

Pseudoterminals.<br />

Ein Programm wie Xterm öffnet dabei<br />

zunächst die Gerätedatei »/dev/pts/<br />

ptmx«. Der Kernel erstellt daraufhin ein<br />

neues Slave-Device »/dev/pts/n«, wobei<br />

n eine laufende Nummerierung darstellt.<br />

Nach entsprechender Initialisierung repräsentiert<br />

das neue Slave-Device eine<br />

Terminalschnittstelle, die die nun gestartete<br />

Shell mitgegeben bekommt (siehe<br />

Abbildung 1).<br />

Eingaben von der Tastatur reicht der X-<br />

Server bei dieser Architektur per X11-Protokoll<br />

an Xterm weiter, das die Daten auf


das Master-Interface schreibt. Der Kernel<br />

übergibt die Daten dann inklusive der<br />

Zwischenverarbeitung dem Slave-Device<br />

und damit der Shell. Der Rückweg, also<br />

die Ausgabe, vollzieht sich analog.<br />

»/dev/pts/n«<br />

Shell Xterm X11<br />

X-Server<br />

»dev/pts/ptmx«<br />

Keyboard<br />

Grafik<br />

Framebuffer<br />

Kern-Technik 12/2012<br />

Know-how<br />

Zeilen-Disziplin<br />

Slave<br />

Bisher blieb unerwähnt, dass die Zwischenverarbeitung<br />

ein wesentliches<br />

Feature der Terminalschnittstelle bereitstellt.<br />

Das Besondere an einem Terminal<br />

ist nämlich, dass es die Eingaben nicht<br />

einfach so an den lesend zugreifenden<br />

Prozess weiterleitet. Vielmehr findet eine<br />

Interpretation der Daten statt. Tauchen<br />

im Datenstrom etwa die Zeichen für<br />

[Strg]+[C] auf, bekommt der lesende<br />

Prozess das Signal »SIGINT« übermittelt,<br />

woraufhin die meisten Tasks abbrechen.<br />

Einen Linefeed (»\n«, »0x0a«) ersetzt<br />

das Terminal durch Carriage Return plus<br />

Linefeed (»\r\n«, »0x0d 0x0a«).<br />

Bei einem Terminal – gleichgültig ob<br />

real, virtuell oder pseudo – greift eine<br />

Applikation also immer über diese Zwischenschicht<br />

zu, die sich Line Discipline<br />

nennt. Durch Austauschen kann sie sogar<br />

je nach Anwendungsfall neben der normalen<br />

Terminalfunktionalität auch noch<br />

Übertragungsprotokolle wie SLIP oder<br />

PPP realisieren.<br />

Diese Zwischenschicht ist darüber hinaus<br />

über die so genannten Terminalsettings<br />

(Termios) noch in weiten Bereichen<br />

konfigurierbar. Gibt der Anwender auf<br />

der Kommandozeile etwa »stty« ein, bekommt<br />

er die gerade aktuellen Terminalsettings<br />

angezeigt (siehe Abbildung<br />

4). Mit dem gleichen Kommando lassen<br />

sich diese auch verändern, um damit<br />

beispielsweise das Echo der Eingaben<br />

ein- oder auszuschalten oder die Übertragungsgeschwindigkeit<br />

einer seriellen<br />

Schnittstelle zu ändern.<br />

Die immer wieder hilfreiche und oft blind<br />

eingetippte Variante »stty sane« überführt<br />

übrigens ein „verwirrtes“ Terminal, bei<br />

dem alle Zeichen durcheinandergeraten<br />

sind, wieder in seinen normalen „gesunden“<br />

Zustand.<br />

Damit ergibt sich im Kernel der in Abbildung<br />

2 dargestellte dreischichtige Aufbau.<br />

Oben sitzt das TTY-Core-System,<br />

über das der Anwender beziehungsweise<br />

die Anwendung auf die Daten des Keyboards<br />

zugreift und Daten auf den Bildschirm<br />

ausgibt. Das TTY-Core schleift die<br />

Daten durch die Line-Discipline-Schicht<br />

(»ldisc«) und diese wiederum holt die Daten<br />

beziehungsweise gibt die Daten weiter<br />

über den TTY-Treiber. Dieser Treiber<br />

ist für die Ein- und Ausgabe, beispielsweise<br />

über eine Hardware, zuständig. Mit<br />

Hilfe des Kommandos<br />

cat /proc/tty/drivers<br />

Master<br />

lässt sich anzeigen, welche TTY-Treiber<br />

zurzeit aktiv und über welche Gerätenummern<br />

sie zu erreichen sind.<br />

Gerade bei der Portierung von <strong>Linux</strong><br />

auf eine neue Hardwareplattform kann<br />

es notwendig sein, einen eigenen TTY-<br />

Treiber zu schreiben. Solange man nicht<br />

außergewöhnliche Anforderungen oder<br />

eine komplexe Hardware bedienen muss,<br />

ist das auch vergleichsweise leicht zu<br />

bewerkstelligen.<br />

Aufgabe des TTY-Treibers ist es, Daten<br />

zwischen der realen oder virtuellen Terminalhardware<br />

(Ein-/​Ausgabeport) und<br />

der Line Discipline auszutauschen. Daten<br />

von der Terminalhardware – einer Tastatur<br />

beispielsweise – erhält die Line-Discipline-Schicht<br />

durch den TTY-Treiber mit<br />

Hilfe eines Speicherbuffers. Zur Ausgabe<br />

ruft die Zwischenschicht eine Schreibfunktion<br />

des Treibers auf. Zusätzlich<br />

Hardware<br />

Abbildung 1: Pseudoterminals ermöglichen es, Applikation und Terminalhardware zu entkoppeln.<br />

klassisches Terminal,<br />

z.B. VT 100 (1978)<br />

textbasierte Daten<br />

Shell<br />

Konsolentreiber<br />

sind die Funktionen »tty_open()« und<br />

»tty_close()« erforderlich.<br />

Schließen auf Befehl<br />

»dev/ttyn«<br />

TTY-Core<br />

Line Discipline<br />

TTY-Treiber<br />

Hardware<br />

Applikation<br />

Im Rahmen der »tty_open()«-Funktion<br />

erhält der TTY-Treiber den eigentlichen<br />

Ein-/​Ausgabeport, repräsentiert durch<br />

die Adresse der zugehörigen Datenstruktur<br />

»struct tty_struct«. Innerhalb dieser<br />

Funktion kann der Code unter anderem<br />

eine Hardware-Initialisierung ausführen.<br />

Je nach Erfolg gibt die Funktion 0 oder<br />

einen Fehlercode zurück. Anders als bei<br />

normalen Treibern wird aber die Funktion<br />

»tty_close()« in jedem Fall aufgerufen,<br />

also auch dann, wenn »tty_open()«<br />

negativ quittiert wurde.<br />

Die Funktion »tty_write()« kommt zum<br />

Aufruf, sobald die Line-Discipline-<br />

Schicht Daten zur Ausgabe parat hat.<br />

Parameter der Funktion ist mit der »struct<br />

tty_struct« ebenfalls wieder das ausgewählte<br />

Ausgabe-Interface. Die Funktion<br />

»tty_write()« gibt die Daten an die Hardware<br />

weiter. Da manche Terminalhardware<br />

langsam ist, kann das durchaus<br />

asynchron realisiert sein.<br />

Um sicherzugehen, dass sich sämtliche<br />

Daten auch schreiben lassen, erwartet<br />

das TTY-Core zusätzlich noch die Me-<br />

UART-<br />

Treiber<br />

einheitliche Schnittstelle<br />

Interpretation von Steuerzeichen<br />

Low-Level-Treiber<br />

Treiber für serielle <strong>Schnittstellen</strong><br />

Abbildung 2: Aufgaben des TTY-Subsystems sind die Interpretation und Modifikation ausgetauschter Daten.<br />

www.linux-magazin.de<br />

89


Know-how<br />

www.linux-magazin.de Kern-Technik 12/2012<br />

90<br />

thode »tty_write_room()«. Diese gibt jene<br />

Anzahl Bytes zurück, die beim nächsten<br />

Aufruf von »tty_write()« geschrieben<br />

werden können.<br />

Nimmt die Terminalhardware Daten<br />

entgegen, bekommt das TTY-Core diese<br />

asynchron übergeben. Eine »tty_read()«-<br />

Methode, die das TTY-Core aufruft,<br />

ist nicht erforderlich. Vielmehr ist der<br />

Datentransport von der Terminalhardware<br />

hin zum Core über gemeinsame<br />

Speicherbereiche, die TTY-Buffer, früher<br />

auch Flip-Buffer genannt, realisiert<br />

(Abbildung 3). Die Empfangsfunktion<br />

nimmt die Daten entgegen und legt sie<br />

mit den entsprechenden Funktionen in<br />

die TTY-Buffer. Danach informiert sie<br />

das TTY-Core durch Aufruf der Funktion<br />

»tty_flip_buffer_push()«. Nach Analyse<br />

durch die Line Discipline reicht <strong>Linux</strong><br />

die eventuell modifizierten Daten an eine<br />

Applikation weiter.<br />

Als Letztes bleibt noch die Integration des<br />

TTY-Treibers in den Kernel übrig. Hierzu<br />

muss der Programmierer die Datenstruktur<br />

»struct tty_driver« geeignet initialisieren<br />

und dem Terminal-Subsystem übergeben.<br />

Dabei muss er den Namen des<br />

Treibers, die zugehörigen Gerätedateien,<br />

den Treibertyp, Terminalsettings und natürlich<br />

die Adressen der Treiberfunktionen<br />

spezifizieren.<br />

Die Angabe einer Gerätenummer (Major-<br />

und Minor-Nummer) ist nicht unbedingt<br />

notwendig; fehlt sie, lässt sich<br />

das Terminal-Subsystem eine vom Kernel<br />

aushändigen. Ist die Datenstruktur initialisiert,<br />

übergibt die Funktion »tty_register_driver()«<br />

sie dem Kernel.<br />

Platz im Puffer<br />

Listing 1 zeigt einen einfachen TTY-Treiber.<br />

In Ermangelung realer Terminalhardware<br />

gibt der Treiber die zu schreibenden<br />

Daten im Syslog als Hexwerte aus. Daher<br />

braucht er auch keine Daten zwischenzuspeichern,<br />

sodass die Funktion<br />

»tty_write_room()« einen festen Wert für<br />

den verbleibenden Speicherplatz zurückgeben<br />

kann. Ein High-Resolution-Timer<br />

[2] emuliert die Tastatur, indem er alle<br />

2 Sekunden so tut, als hätte jemand den<br />

Text »Hi« eingetippt. Um bei parallelen<br />

Listing 1: Basisfunktionen eines TTY-Treibers (»tty_sample.c«)<br />

001 #include <br />

002 #include <br />

003 #include <br />

004 #include <br />

005 #include <br />

006 <br />

007 static struct tty_driver *tty_sample_driver;<br />

008 static struct tty_struct *tty_sample;<br />

009 static ktime_t fireup_time;<br />

010 static struct hrtimer emu_kbd_desc;<br />

011 static atomic_t access_count =<br />

ATOMIC_INIT(‐1);<br />

012 <br />

013 static enum hrtimer_restart emu_keyboard(<br />

struct hrtimer *hrt )<br />

014 {<br />

015 hrtimer_forward_now( &emu_kbd_desc,<br />

ktime_set(1,0) );<br />

016 tty_insert_flip_string( tty_sample,<br />

"Hi\n", 3 );<br />

017 tty_flip_buffer_push( tty_sample );<br />

018 return HRTIMER_RESTART;<br />

019 }<br />

020 <br />

021 static int tty_sample_open(<br />

struct tty_struct *tty,<br />

022 struct file *filp)<br />

023 {<br />

024 if (!atomic_inc_and_test(&access_count))<br />

025 return ‐EIO;<br />

026 printk("tty_sample_open\n");<br />

027 tty_sample = tty;<br />

028 fireup_time = ktime_set( 2, 0 );<br />

029 hrtimer_start(&emu_kbd_desc,<br />

fireup_time, HRTIMER_MODE_REL);<br />

030 return 0;<br />

031 }<br />

032 <br />

033 static void tty_sample_close(<br />

struct tty_struct *tty,<br />

034 struct file *filp)<br />

035 {<br />

036 printk("tty_sample_close\n");<br />

037 atomic_dec( &access_count );<br />

038 if (atomic_read(&access_count)==(‐1) )<br />

039 hrtimer_cancel( &emu_kbd_desc );<br />

040 }<br />

041 <br />

042 static int tty_sample_write(<br />

struct tty_struct *tty,<br />

043 const unsigned char *buf, int count)<br />

044 {<br />

045 int i;<br />

046 <br />

047 for(i=0; iowner =<br />

THIS_MODULE;<br />

073 tty_sample_driver‐>driver_name =<br />

"tty‐sample";<br />

074 tty_sample_driver‐>name =<br />

"ttySample";<br />

075 tty_sample_driver‐>type =<br />

TTY_DRIVER_TYPE_SERIAL;<br />

076 tty_sample_driver‐>subtype =<br />

SERIAL_TYPE_NORMAL;<br />

077 tty_sample_driver‐>init_termios =<br />

tty_std_termios;<br />

078 tty_set_operations(tty_sample_driver,<br />

&tty_sample_ops);<br />

079 <br />

080 ret = tty_register_driver(<br />

tty_sample_driver);<br />

081 if (ret) {<br />

082 put_tty_driver(tty_sample_driver);<br />

083 return ret;<br />

084 }<br />

085 hrtimer_init(&emu_kbd_desc,<br />

CLOCK_MONOTONIC,HRTIMER_MODE_REL);<br />

086 emu_kbd_desc.function = emu_keyboard;<br />

087 printk("tty_sample: initialized\n");<br />

088 return 0;<br />

089 }<br />

090 <br />

091 static void __exit mod_exit(void)<br />

092 {<br />

093 hrtimer_cancel( &emu_kbd_desc );<br />

094 tty_unregister_driver(<br />

tty_sample_driver);<br />

095 put_tty_driver(tty_sample_driver);<br />

096 }<br />

097 <br />

098 module_init( mod_init );<br />

099 module_exit( mod_exit );<br />

100 MODULE_LICENSE("GPL");


»Hi«. Das Terminal-<br />

»struct tty_buffer«<br />

next<br />

Subsystem echot diesen<br />

Text auf die Ausgabe,<br />

was sich durch<br />

char_but_ptr<br />

die im Syslog auftauchenden<br />

flag_but_ptr<br />

Hexziffern<br />

nachvollziehen lässt.<br />

used<br />

size<br />

Schaltet der Benutzer<br />

mit dem Kommando<br />

»stty ‐F /dev/ttySample0<br />

commit<br />

read<br />

‐echo« das Echo<br />

ab, landet beim nächsten<br />

Lesen keine Ausgabe<br />

der Hexziffern<br />

Buffer für die Zeichen<br />

mehr im Syslog.<br />

Bei realer Hardware<br />

Statusflags pro Zeichen<br />

»TTY_NORMAL«<br />

»TTY_BREAK«<br />

gestaltet sich der TTY-<br />

Treiber deutlich komplexer<br />

als der Beispielcode<br />

in diesem Artikel,<br />

»TTY_FRAME«<br />

»TTY_PARITY«<br />

»TTY_OVERRUN«<br />

besonders dann, wenn<br />

der Programmierer mit<br />

Abbildung 3: In TTY-Puffern liegen die Daten samt Statusflags.<br />

Bitraten, Parity und limitierten<br />

Sende- und<br />

Zugriffen auf den Treiber Inkonsistenzen<br />

zu vermeiden, erlaubt er über die Atomic-Variable<br />

»access_count« nur jeweils<br />

einer Instanz den Zugriff.<br />

Bei der Programmierung ist noch zu beachten,<br />

dass die Treiberfunktionen sowohl<br />

im Prozess- als auch im Interrupt-<br />

Kontext aufrufbar sind. Das hat zur Folge,<br />

dass der Programmierer nicht alle Funktionen,<br />

beispielsweise die zum Schlafenlegen,<br />

verwenden darf.<br />

Die Wirkungsweise des Treibers und auch<br />

des Terminal-Subsystems lässt sich leicht<br />

testen. Dazu kompiliert man den Treiber<br />

mit Hilfe eines einfachen Makefiles und<br />

lädt ihn anschließend in den Kernel, wie<br />

Abbildung 4 zeigt. Beim lesenden Zugriff<br />

auf die vom Treiber erzeugte Gerätedatei<br />

»/dev/ttySample0« erscheint der Text<br />

Empfangspuffern einer klassischen seriellen<br />

Schnittstelle hantieren muss. Doch<br />

auch bei solchen Anwendungsfällen hilft<br />

der Kernel: Mit dem UART-Subsystem haben<br />

die Entwickler einen TTY-Treiber zur<br />

Verfügung gestellt, der nur noch um die<br />

spezifischen Hardwarezugriffe zu ergänzen<br />

ist [3].<br />

Eine zweite Spezialform des TTY-Treibers<br />

ist die als Treiber für die Konsole, die es<br />

als Boot- und als Systemkonsole gibt.<br />

Erstere macht es möglich, bereits relativ<br />

früh im Bootprozess Ausgaben zu tätigen<br />

(»early_printk«). Nach der Grundinitialisierung<br />

lässt sie sich durch eine oder<br />

mehrere Systemkonsolen ersetzten. Die<br />

damit erreichte Entkopplung der Konsole<br />

von einer dedizierten Hardware bringt<br />

Vorteile: Startet man beispielsweise un-<br />

Verwaltungsinformationen<br />

ter X-Window ein Xterm mit der Option<br />

»‐C«, landen alle Systemmeldungen in<br />

dem grafischen Terminal.<br />

Sparversion<br />

Wer kein grafisches Terminal benötigt,<br />

kann übrigens ausgesprochen kompakte<br />

<strong>Linux</strong>-Systeme bauen: 28 MByte Hauptspeicher<br />

und 12 MByte Festplatte reichen<br />

im Grunde bereits aus, das versprechen<br />

die Macher einer Mini-Distribution. Dabei<br />

wird die Bedeutung des Terminal-<br />

Subsystems deutlich. Zugunsten der<br />

kompakten Größe entfällt die Grafik –<br />

und damit tritt das Terminal mit dem<br />

antiquierten Namen in den Vordergrund.<br />

Wen wundert’s, dass die Entwickler ihre<br />

Distribution ausgerechnet TTYlinux [4]<br />

genannt haben? (mhu) <br />

n<br />

Infos<br />

[1] Linus Akesson, „The TTY demystified“:<br />

[http:// www. linusakesson. net/​<br />

programming/ tty/ index. php]<br />

[2] Quade, Kunst, „<strong>Linux</strong>-Treiber entwickeln“:<br />

Dpunkt-Verlag 2011<br />

[3] <strong>Linux</strong>-Mips, „Serial Driver and Console“:<br />

[http:// www. linux‐mips. org/ wiki/ Serial_<br />

Driver_and_Console]<br />

[4] TTYlinux, Projektseite:<br />

[http:// ttylinux. net/ index. html].<br />

[5] Listings zu diesem Artikel:<br />

[http:// www. linux‐magazin. de/ static/​<br />

listings/ magazin/ 2012/ 10/ 12/ kern‐technik]<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. Ihr Buch „<strong>Linux</strong> Treiber entwickeln“ liegt<br />

in dritter Auflage vor.<br />

Kern-Technik 12/2012<br />

Know-how<br />

www.linux-magazin.de<br />

91<br />

Abbildung 4 (links und rechts): Mit dem Beispieltreiber lässt sich die Modifikation durch die Line-Discipline-Schicht demonstrieren.


Programmieren<br />

www.linux-magazin.de Bash Bashing 12/2012<br />

92<br />

Shellskripte aus der Stümper-Liga – Folge 23: Dash statt Bash<br />

Bash Bashing<br />

Mit Debian Squeeze und Ubuntu 6.10 flog die Bash aus diesen Distributionen als Default-Shell raus. Die Begründung:<br />

nicht Posix-konform, zu langsam, zu hoher Speicherbedarf. Neue Perle am Muschelstrand ist die Dash,<br />

die Debian Almquist Shell. Bernhard Bablok<br />

© Fotograf, 123RF.com<br />

01 #!/bin/sh<br />

Wie das ganze Unix-Universum hat auch<br />

die Shell eine komplizierte Genealogie.<br />

Da sich Software-Entwickler selten damit<br />

abfinden, dass ihre Software fertig<br />

ist, wächst der Funktionsumfang von<br />

Version zu Version. Die Bash ist dafür<br />

ein gutes Beispiel, so hat die recht neue<br />

Version 4 eine ganze Reihe von nützlichen<br />

Erweiterungen gebracht [1]. Mit<br />

jeder Erweiterung entfernt sich die Bash<br />

02 LIST=$(awk ' \<br />

03 BEGIN { \<br />

04 split( ENVIRON["PATH"], array, ":"); \<br />

05 for (i=1;i


Abbildung 1: Die Dash kennt keine Arrays. Die Bash dagegen akzeptiert sie<br />

auch als »/bin/sh«.<br />

ternativen dazu vermittelt [4]. Manche<br />

Änderungen sind trivial, zum Beispiel<br />

wird das schlichte Bash-Konstrukt<br />

function foo() {<br />

[...]<br />

}<br />

nur zu dem genauso simplen Dreizeiler:<br />

foo() {<br />

[...]<br />

}<br />

Das Schlüsselwort »function« ist auch in<br />

der Bash ein überflüssiges Syntaxelement.<br />

Andere Beschränkungen schmerzen<br />

wirklich. Posix kennt zum Beispiel keine<br />

Arrays. Zwar erscheint die Bash im Vergleich<br />

mit Perl und Python arm an Datenstrukturen,<br />

mit dem Array aber verlieren<br />

Umsteiger auf die Dash die letzte Möglichkeit,<br />

Daten einfach zu strukturieren<br />

(Abbildung 1). Ein weiteres Beispiel: Für<br />

den Bash-Einzeiler »LIST=${PATH//:/ }«<br />

schlägt der Ubuntu-Wiki-Eintrag [3] den<br />

länglichen (allerdings nicht ganz äquivalenten)<br />

Dash-Code aus<br />

Listing 1 vor.<br />

Shells satt<br />

Teil der Gemengelage<br />

um die Shellsyntax ist,<br />

dass das Unix-Universum<br />

viele Shells kennt.<br />

Wer Software von AIX-<br />

Systemen nach <strong>Linux</strong><br />

portiert, stellt seine<br />

Skripte entweder von<br />

der Korn Shell auf die<br />

Bash um oder vertraut<br />

der installierten entsprechenden <strong>Linux</strong>-<br />

Variante. Bei vielen Distributionen gehört<br />

deshalb eine Korn Shell zum Standardumfang<br />

der Installation. Einen guten<br />

Überblick über die Unterschiede zwischen<br />

verschiedenen Shells samt einer<br />

kurzen Geschichte gibt [5].<br />

Bei allen Unterschieden im Ressourcenverbrauch<br />

– für wirklich kleine Systeme<br />

kommen diese Shells alle nicht in Frage.<br />

Hier beherrscht Busybox [6] das Feld, die<br />

Software bündelt in einem einzigen Binary<br />

alle wesentlichen Unix-Tools inklusive<br />

der Shell Ash. Busybox ist Meister in<br />

der Bescheidenheit, denn Speicher ist auf<br />

Embedded-Systemen sehr knapp.<br />

Fazit<br />

Der Wegfall moderner Syntaxelemente in<br />

der Dash schmerzt. Zwar existieren Workarounds,<br />

aber der Skriptcode bläht sich<br />

auf, wird komplexer, schwerer zu warten<br />

und damit anfälliger für Fehler, Race Conditions<br />

und Sicherheitslücken. Es erscheint<br />

sehr fraglich, ob hier die Vor- die<br />

Nachteile aufwiegen.<br />

Die Argumentation mit der Bootzeit jedenfalls<br />

greift zu kurz: Server werden<br />

sehr selten gebootet, da spielen ein paar<br />

Sekunden mehr in der gesamten Downtime<br />

keine Rolle. Auf dem Desktop wäre<br />

die Energie der Entwickler in ein stabiles<br />

Suspend und Resume wohl besser investiert,<br />

denn dies löst das Problem der<br />

Bootzeiten ohne funktionale Degradierung<br />

der Standardshell. (jk) n<br />

Infos<br />

[1] Bernhard Bablok, Nils Magnus, „Neue<br />

Funktionen in der Bash-Version 4“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 06/​09, S. 46, [http:// www.​<br />

linux‐magazin. de/ Heft‐Abo/ Ausgaben/​<br />

2009/ 06/ Aufpoliert]<br />

[2] Dash: [http:// gondor. apana. org. au/​<br />

~herbert/ dash/]<br />

[3] Ubuntu-Wiki, „Dash as /bin/​sh“:<br />

[https:// wiki. ubuntu. com/ DashAsBinSh]<br />

[4] „How to make bash scripts work in dash“:<br />

[http:// mywiki. wooledge. org/ Bashism]<br />

[5] „UNIX shell differences and how to change<br />

your shell“: [http:// www. faqs. org/ faqs/​<br />

unix‐faq/ shell/ shell‐differences/]<br />

[6] Multifunktions-Binary Busybox:<br />

[http:// www. busybox. net]<br />

Der Autor<br />

Bernhard Bablok betreut bei der Allianz<br />

Managed & Operations Services SE ein großes<br />

Datawarehouse mit technischen Performancemessdaten<br />

von Mainframes bis zu Servern. Wenn<br />

er nicht Musik hört, mit dem Radl oder zu Fuß<br />

unterwegs ist, beschäftigt er sich mit Themen<br />

rund um <strong>Linux</strong> und Objektorientierung.<br />

Bash Bashing 12/2012<br />

Programmieren<br />

www.linux-magazin.de<br />

93<br />

MAGAZIN<br />

ONLINE<br />

<strong>Linux</strong>-<strong>Magazin</strong> newsLetter<br />

Newsletter<br />

informativ<br />

Nachrichten rund um die Themen <strong>Linux</strong> und<br />

Open Source lesen Sie täglich im Newsletter<br />

des <strong>Linux</strong>-<strong>Magazin</strong>s.<br />

kompakt<br />

tagesaktuell<br />

www.linux-magazin.de/newsletter


Programmieren<br />

www.linux-magazin.de C++11 12/2012<br />

Modernes C++ in der Praxis – Folge 7<br />

Rasch verschoben<br />

96<br />

Diese Folge geht ans Eingemachte von C++11: Sie zeigt, wozu Move-Semantik nützlich ist, erklärt Rvalues und<br />

Lvalues und deckt auf, was es mit dem doppelten &-Zeichen auf sich hat. Rainer Grimm<br />

C++11<br />

asynchrone Aktionen<br />

override<br />

decltype kommt. Hier stellt in Zeile 42 die Klausel<br />

»if (this != &other)« sicher, dass Quelle<br />

Move-Semantik<br />

Neue Container<br />

auto<br />

und Ziel der Zuweisung verschieden sind.<br />

Variadic Templates<br />

Das ist notwendig, denn Zeile 23 löscht<br />

bind das Ziel der Zuweisung mit »delete[]<br />

Type Traits<br />

data_«. Das Ergebnis des Zuweisungsoperators<br />

ist das modifizierte Objekt, in<br />

C++11<br />

Alias Templates<br />

Tuple<br />

Zeile 29 durch »return *this« zurückgege-<br />

default<br />

function<br />

ben. Der Destruktor komplementiert den<br />

Range-basierte<br />

C++11<br />

C-Array-Wrapper »BigArrayCopy«.<br />

nullptr<br />

For-Schleife<br />

Zufallszahlen<br />

Zeitbibliothek<br />

delete<br />

final<br />

STL-tauglich<br />

Benutzerdefinierte Literale<br />

Smart Pointer Mit diesem einfachen Interface erfüllt<br />

Hashtabellen<br />

static_assert<br />

reguläre Ausdrücke<br />

»BigArrayCopy« alle Anforderungen, da-<br />

Threads mit es sich in einem Container der Stan-<br />

Lambda-Funktionen<br />

Array<br />

dard Template Library (STL) verwenden<br />

lässt. Ein kleines C++11-Feature hat sich<br />

noch im Destruktor versteckt: »nullptr«<br />

Wenn das Kopieren von Daten zu aufwändig<br />

oder unmöglich ist, kann sich<br />

der Programmierer damit behelfen, sie<br />

stattdessen zu verschieben. Diese einfache<br />

Idee liegt der Move-Semantik in<br />

C++11 zugrunde. Wer sie geschickt anwendet,<br />

bewegt auf diese Weise große<br />

Datenmengen schneller und kann sogar<br />

pierkonstruktor (Zeile 15), einem Zuweisungsoperator<br />

(Zeile 20) und einem Destruktor<br />

(Zeile 32). Im Kopierkonstruktor,<br />

der sich durch den Aufruf »BigArrayCopy<br />

bArray2(bArray)« anstoßen lässt, setzt<br />

der Code die Länge und den Verweis auf<br />

das C-Array. Im Anschluss findet durch<br />

ersetzt die bekannte Nullzeigerkonstante<br />

»NULL«. Damit gehört das implizite Konvertieren<br />

von »NULL« in eine natürliche<br />

Zahl der Vergangenheit an.<br />

Wer das Programm ausführt und die<br />

Ausgabe betrachtet (Abbildung 1), der<br />

erkennt, dass sowohl der Kopierkonstruktor<br />

als auch der Zuweisungsoperator<br />

std::copy(other.data_, other.data_ + len_,U<br />

Smart Pointer mit der STL versöhnen.<br />

data_)<br />

Dieser Artikel zeigt, wie das geht.<br />

zum Einsatz kommen. Darüber hinaus<br />

lässt sich »BigArrayCopy« in einem Vektor<br />

verwenden. »BigArrayCopy« erfüllt<br />

offenbar alle Erwartungen.<br />

Großer Kopierer<br />

Listing 1 enthält eine einfache Klasse namens<br />

»BigArrayCopy«, die einen Wrapper<br />

um ein einfaches C-Array darstellt. Diese<br />

Programmzeilen sollen als Grundlage für<br />

weitere Optimierungen dienen. Um das<br />

C-Array richtig zu verwalten, merkt sich<br />

»BigArrayCopy« in den Zeilen 37 und 38<br />

den Verweis auf das C-Array »data_« und<br />

dessen Länge »len_«.<br />

Das Interface von »BigArrayCopy« ist<br />

minimal. Es besteht aus einem Standardkonstruktor<br />

(Zeile 13), einem Ko-<br />

das Kopieren der Daten von »bArray«<br />

nach »bArray2« statt. Einer ähnlichen<br />

Struktur folgt der Zuweisungsoperator,<br />

der in dem Ausdruck »bArray= BigArrayCopy(22222222)«<br />

zur Anwendung<br />

Abbildung 1: Das herkömmliche Kopieren von<br />

»BigArrayCopy« ist aufwändig.<br />

Eine Zeile zu viel<br />

Ein scharfer Blick auf Ausgabe und Programmcode<br />

(Listing 1) zeigt jedoch, dass<br />

»BigArrayCopy« trotzdem weiteres Optimierungspotenzial<br />

birgt. Zuerst stellt<br />

sich die Frage, woher der letzte Aufruf<br />

»copy construction of 11111111 elements«<br />

des Kopierkonstruktors in Abbildung 1<br />

kommt. Die ersten vier Ausgaben dagegen<br />

entsprechen genau den Ausdrücken<br />

in den Zeilen 48 bis 52.


Die Erklärung ist schnell gefunden und<br />

schon das klassische C++ bietet Gegenmaßnahmen<br />

an. Dem Vektor geht einfach<br />

der Speicher aus, sodass er durch<br />

den erneuten Aufruf mit »myVec.push_<br />

back(BigArrayCopy(33333333))« reallokiert<br />

werden muss. Dies bedingt natürlich<br />

auch, dass das Programm seine<br />

Elemente kopiert.<br />

Für diesen Anwendungsfall stellt der<br />

C++-Vektor die Methode »reserve()« zur<br />

Verfügung. Damit lässt sich Speicher reservieren,<br />

was ein erneutes Allokieren<br />

überflüssig macht. Der schlichte Aufruf<br />

»myVec.reserve(2)« unterbindet das überflüssige<br />

Kopieren der Vektorelemente.<br />

Tuning-Werkzeuge<br />

Greift der Programmierer zu C++11, stehen<br />

für ihn weitere Tuning-Werkzeuge<br />

parat. Die entscheidende Beobachtung:<br />

Sowohl die Zuweisung »bArray= Big-<br />

ArrayCopy(22222222)« als auch der<br />

Aufruf des Kopierkonstruktors »myVec.<br />

push_back(BigArrayCopy(33333333))« in<br />

den Zeilen 51 und 52 nutzen die temporären<br />

Objekte »BigArrayCopy(22222222)«<br />

und »BigArrayCopy(33333333)«. Warum<br />

sollte man in diesem Fall die Elemente<br />

von »BigArrayCopy(22222222)« teuer<br />

von der Quelle zum Ziel kopieren, wenn<br />

es doch genügen würde, dass »bArray«<br />

die Daten einfach entwendet? Dies ist<br />

zulässig, da die Quelle der Zuweisung<br />

automatisch verfällt.<br />

In Listing 2 ist die<br />

Optimierungsstrategie<br />

mit Rvalue-Referenzen<br />

implementiert, einem<br />

neuen Feature von<br />

C++11. Neben dem<br />

Vor der Move-Zuweisung<br />

»bArray«<br />

Speicheradressen<br />

[...]<br />

9028<br />

9024<br />

Nach der Move-Zuweisung<br />

»bArray«<br />

klassischen Kopierkonstruktor<br />

in Zeile<br />

15 und dem Zuweisungsoperator<br />

in Zeile<br />

20 bietet »BigArray« einen<br />

9020<br />

[...]<br />

1008<br />

Move-Konstruktor<br />

(Zeile 32) und einen<br />

1004<br />

»BigArray«<br />

Move-Zuweisungsoperator<br />

[...]<br />

»BigArray«<br />

(Zeile 38) an. Die<br />

Signatur dieser Move-<br />

Methoden unterscheidet<br />

0000<br />

»nullptr«<br />

sich von ihren<br />

klassischen C++-Pendants<br />

Abbildung 2: Die Move-Semantik lässt sich mit Hilfe von Speicheradressen<br />

veranschaulichen.<br />

dadurch, dass<br />

sie ihr Argument als Rvalue-Referenz<br />

»BigArray&& other« annehmen.<br />

Interessant ist vor allem die Implementierung<br />

dieser Move-Methoden. Während<br />

der klassische Kopierkonstruktor (Zeile<br />

15) seine Daten mit<br />

Abbildung 2 ist dies für die Zuweisung<br />

»bArray= BigArray(22222222)« exemplarisch<br />

dargestellt. Eine ähnliche Strategie<br />

wendet der Move-Zuweisungsoperator<br />

an. Der entscheidende Punkt ist, dass<br />

C++11 zur Laufzeit Rvalue auf Rvalue-<br />

Referenzen und Lvalues auf Lvalue-Referenzen<br />

std::copy(other.data_, other.data_ + len_,U<br />

abbildet.<br />

data_)<br />

kopiert, setzt der Move-Konstruktor in<br />

Zeile 32 »BigArray(BigArray&& other):<br />

len_(other.len_),data_(other.data_)« lediglich<br />

die Länge des C-Array und einen<br />

Verweis auf die Daten. Dazu weist er<br />

in seinem Funktionskörper den Daten<br />

der Datenquelle ihren Defaultwert zu. In<br />

Kopieren überflüssig<br />

Das Ausführen des Programms bringt<br />

es an den Tag (Abbildung 3): Wenn<br />

möglich, wie im Falle von »bArray=<br />

BigArray(22222222)« und »myVec.push_<br />

back(BigArray(33333333))«, werden die<br />

C++11 12/2012<br />

Programmieren<br />

www.linux-magazin.de<br />

97<br />

Listing 1: Großes Array kopieren<br />

01 #include <br />

02 #include <br />

03 #include <br />

04 <br />

05 using std::cout;<br />

06 using std::endl;<br />

07 <br />

08 using std::vector;<br />

09 <br />

10 class BigArrayCopy{<br />

11 <br />

12 public:<br />

13 BigArrayCopy(size_t len): len_(len), data_<br />

(new int[len]){}<br />

14 <br />

15 BigArrayCopy(const BigArrayCopy& other):<br />

len_(other.len_),data_(new int[other.len_]){<br />

16 cout


Programmieren<br />

www.linux-magazin.de C++11 12/2012<br />

98<br />

Daten nicht kopiert, sondern verschoben.<br />

Zudem verhindert »myVec.reserve(2)«<br />

das überflüssige Kopieren des Vektors.<br />

Rvalue- und Lvalue-<br />

Referenzen<br />

Rvalue-Referenzen sind im Unterschied<br />

zu Lvalue-Referenzen in C++11 durch<br />

zwei Et-Zeichen (&&) gekennzeichnet.<br />

So bezeichnet »bigArrayRvalue« in »My-<br />

BigArray&& bigArrayRvalue« eine Rvalue-Referenz,<br />

»bigArrayLvalue« in »MyBigArray&<br />

bigArrayLvalue« hingegen eine<br />

klassische Lvalue-Referenz.<br />

Rvalue-Referenzen sind spezielle Verweise.<br />

Der Programmierer muss sie bereits<br />

als solche initialisieren, nachträglich<br />

lassen sie sich nicht auf ein anderes Objekt<br />

umbiegen. Im Gegensatz zu Lvalue-<br />

Referenzen kann man an sie nur einen<br />

Rvalue binden. Rvalues sind:<br />

n Temporäre Objekte<br />

n Objekte ohne Namen<br />

n Objekte, deren Adresse sich nicht bestimmen<br />

lässt<br />

Trifft auf Objekte eines dieser Charakteristika<br />

zu, liegt ein Rvalue vor. Im Um-<br />

kehrschluss bedeutet dies, dass Lvalues<br />

einen Namen und eine Adresse besitzen.<br />

Ein paar Beispiele für Rvalues:<br />

int five= 5;<br />

std::string a= std::string("Rvalue");<br />

std::string b= std::string("R") + U<br />

std::string("value");<br />

std::string c= a + b;<br />

std::string d= std::move(b);<br />

Rvalues stehen auf der rechten Seite einer<br />

Zuweisung. So sind in den Beispielen<br />

der Wert 5 und der Konstruktoraufruf<br />

»std::string("Rvalue")« Rvalues, denn weder<br />

lässt sich für den Wert 5 die Adresse<br />

bestimmen, noch besitzt der Konstruktoraufruf<br />

einen Namen. Gleiches gilt für die<br />

Addition der Rvalues in »std::string("R")<br />

+ std::string("value")«.<br />

Interessanter ist die String-Addition<br />

zweier Lvalues in »a + b«. Dieser Ausdruck<br />

wird zum Rvalue, da die Addition<br />

zweier Lvalues ein temporäres Objekt<br />

erzeugt. Als besonderer Anwendungsfall<br />

gilt »std::move(b)«. Diese neue C++11-<br />

Funktion konvertiert den Lvalue »b« in<br />

eine Rvalue-Referenz.<br />

Der letzte Baustein für das Zusammenspiel<br />

von Lvalues und Rvalues sowie Lvalue-<br />

und Rvalue-Referenzen fehlt noch:<br />

Listing 3 zeigt die Values zusammen<br />

mit den entsprechenden Referenzen. An<br />

»LvalueReference« lässt sich ein Lvalue,<br />

an »RvalueReference« ein Rvalue binden.<br />

Umgekehrt gilt: An »LvalueReference2«<br />

kann kein Rvalue, an »RvalueReference2«<br />

kein Lvalue gebunden sein.<br />

In C++11 gilt weiterhin die klassische<br />

C++-Regel, dass sich eine konstante Lvalue-Referenz<br />

durch einen Rvalue initialisieren<br />

lässt. Ist für eine Klasse »BigArray«<br />

(Listing 2) sowohl der Copy- (Zeile 20)<br />

als auch der Move-Zuweisungsoperator<br />

(Zeile 38) definiert, verfügt der Move-<br />

Zuweisungsoperator, der sein Argument<br />

per Rvalue-Referenz annimmt, über die<br />

höhere Priorität. Die Regel dahinter ist<br />

recht einfach: Ein Rvalue wird im Zweifelsfall<br />

an eine Rvalue-Referenz und nicht<br />

an eine konstante Lvalue-Referenz gebunden.<br />

Zeitgewinn<br />

Mit der neuen Zeitbibliothek lässt sich der<br />

Performanceboost durch Verwendung der<br />

Move-Semantik einfach messen (Listing<br />

Listing 2: Optimiertes Kopieren<br />

01 #include <br />

02 #include <br />

03 #include <br />

04 <br />

05 using std::cout;<br />

06 using std::endl;<br />

07 <br />

08 using std::vector;<br />

09 <br />

10 class BigArray{<br />

11 <br />

12 public:<br />

13 BigArray(size_t len): len_(len), data_(new<br />

int[len]){}<br />

14 <br />

15 BigArray(const BigArray& other): len_<br />

(other.len_),data_(new int[other.len_]){<br />

16 cout


C++11 12/2012<br />

Programmieren<br />

Abbildung 3: Eigentlich verschiebt das optimierte<br />

Kopierprogramm »BigArray«.<br />

4). Innerhalb der »main()«-Funktion bestimmt<br />

die Zeile 12 den Anfangs- und die<br />

Zeile 17 den Endzeitpunkt. Die folgende<br />

Zeile<br />

auto timeInSeconds= durationU<br />

(end).count()<br />

gibt die Zeit in Sekunden als Double zurück.<br />

Das Ergebnis ist beeindruckend.<br />

Das Verschieben der Vektoren (Abbildung<br />

4) ist etwa um den Faktor 1000 schneller<br />

als das Kopieren (Abbildung 5).<br />

In C++11 unterstützen die Container der<br />

Standard Template Library [1] oder auch<br />

»std::string« von Haus aus die Move-<br />

Semantik. Sogar für maßgeschneiderte<br />

Datentypen erzeugt die C++-Laufzeit<br />

automatisch den Move-Konstruktor und<br />

Move-Zuweisungsoperator, sofern dies<br />

möglich ist. Den Performanceschub gibt<br />

es inklusive.<br />

Statt Kopieren »std::move«<br />

Die Move-Semantik lässt sich aber nicht<br />

nur als optimiertes Kopieren verstehen.<br />

Sie eröffnet auch neue Anwendungsfälle<br />

in C++11. Daten, die nicht kopiert werden<br />

können, lassen sich zumeist wenigstens<br />

verschieben. Dazu gehören Threads,<br />

Mutexe, Locks, aber auch Future und<br />

Promise [2] als Endpunkte eines Datenkanals.<br />

Die neue Funktion »std::move()«<br />

erledigt das Verschieben explizit.<br />

Abbildung 4: Das Verschieben von »BigArray« ist<br />

wesentlich schneller …<br />

Als Beispiel verschiebt Listing 5 einen<br />

Lvalue. Was unter der Oberfläche<br />

geschieht, ist recht naheliegend:<br />

»std::move()« konvertiert »myVec« in<br />

»myNewVec(std::move(myVec))« zu einer<br />

Rvalue-Referenz. Das hat zur Folge,<br />

dass der Move-Konstruktor des Vektors<br />

zur Verwendung kommt. Dieser verschiebt<br />

die Ressource von »myVec« nach<br />

»myNewVec«, sodass »myVec« am Ende<br />

ein leerer Vektor ist. Ein weiteres, prominentes<br />

Beispiel für einen nicht kopierbaren<br />

Datentyp ist der neue Smart Pointer<br />

»std::unique_ptr«, denn er überwacht<br />

exklusiv die Lebenszeit der ihm anvertrauten<br />

Ressource.<br />

Smart Pointer<br />

Die Eigenschaft des »std::unique_ptr«,<br />

dass er sich nicht kopieren lässt, verhindert<br />

eigentlich seinen Einsatz in der<br />

Standard Template Library. Der Grund:<br />

Die STL-Container setzen Copy-Semantik<br />

Listing 3: Lvalues- versus Rvalue-Referenzen<br />

01 std::string Lvalue("Lvalue");<br />

02 std::string& LvalueReference= Lvalue;<br />

um, denn sie kopieren jedes Element zuerst<br />

in den Container. Diese Einschränkung<br />

kann der Programmierer mittels<br />

Move-Semantik umgehen.<br />

Das initiale Kopieren kann er mit<br />

»std::move« in den Zeilen 4 und 5 von<br />

Listing 6 elegant abwandeln. Der Code<br />

schiebt die Elemente explizit auf den Container.<br />

Damit lassen sich die Algorithmen<br />

der STL-Library auf »std::unique_ptr« anwenden.<br />

Als Sortierkriterium dient die<br />

Lambda-Funktion in Zeile 6, die den Zeiger<br />

auf die natürliche Zahl »*fir < *sec«<br />

dereferenziert.<br />

In Konstruktoren oder Fabrikfunktionen<br />

ist es oft nötig, die Argumente als Referenz<br />

anzunehmen und unter Wahrung<br />

ihrer Lvalue- oder Rvalue-Eigenschaften<br />

identisch weiterzureichen. Dies ist in<br />

klassischem C++ aber generisch unmöglich.<br />

„Ein bislang ungelöstes Problem in<br />

C++“ nannten dies Howard E. Hinnant,<br />

Bjarne Stroustrup und Bronek Kozicki<br />

bereits 2008 in einem Aufsatz [3].<br />

03 std::string& LvalueReference2= std::string("Rvalue"); // Syntax error<br />

04 std::string&& RvalueReference = std::string("Rvalue");<br />

05 std::string&& RvalueReference2 = Lvalue; // Syntax error<br />

06 const std::string& LvalueReference3= std::string("Rvalue");<br />

Listing 4: Performancemessung<br />

Abbildung 5: … als das Kopieren von »BigArray-<br />

Copy«, das den Kopierkonstruktor zu oft aufruft.<br />

www.linux-magazin.de<br />

99<br />

Der Autor<br />

Rainer Grimm arbeitet seit<br />

1999 als Software-Entwickler<br />

bei der Science + Computing<br />

AG in Tübingen. Insbesondere<br />

hält er Schulungen für<br />

das hauseigene Produkt SC<br />

Venus. Im Dezember 2011 ist sein Buch „C++11: Der<br />

Leitfaden für Programmierer zum neuen Standard“<br />

im Verlag Addison-Wesley erschienen.<br />

01 int main(){<br />

02 <br />

03 cout


Programmieren<br />

www.linux-magazin.de C++11 12/2012<br />

100<br />

Die C++98-Lösung<br />

besteht darin, zwei<br />

Funktionen zu schreiben.<br />

Eine Funktion<br />

nimmt ihr Argument<br />

als Lvalue-Referenz,<br />

die andere als konstante<br />

Lvalue-Referenz<br />

an, denn Rvalues<br />

lassen sich auch an Abbildung 6: C++11 bringt mit Perfect Forwarding<br />

konstante Lvalue-Referenzen<br />

binden. Die-<br />

ein lang ersehntes Feature.<br />

ser Ansatz skaliert jedoch nicht, denn<br />

bei drei Funktionsargumenten sind schon<br />

2 3 =8 verschiedene Funktionen zu implementieren.<br />

Listing 7 zeigt zwei generische Fabrikfunktionen,<br />

die einen Typ »T« und ein<br />

Argument »t1« erhalten, ihn im<br />

Return-Ausdruck »T(t1)« erzeugen und<br />

wieder zurückzugeben. Während »createClassic«<br />

in den Zeilen 8 und 14 ihre<br />

Argumente per konstantem Lvalue und<br />

nicht konstanter Lvalue-Referenz bindet,<br />

Listing 5: Lvalue verschieben<br />

01 std::vector myVec{1,2,3,4,5,6,7,8,9};<br />

02 std::vector myNewVec(std::move(myVec));<br />

Listing 6: »std::unique_ptr«<br />

verschieben<br />

01 std::unique_ptr unique1(new(int(2)));<br />

02 std::unique_ptr unique2(new(int(1)));<br />

03 std::vector myInt;<br />

04 myInt.push_back(std::move(unique1));<br />

05 myInt.push_back(std::move(unique2));<br />

06 std::sort(myInt.begin(),myInt.end(),[](std::unique_<br />

ptr& fir, std::unique_ptr& sec) { return<br />

*fir < *sec; });<br />

bindet in Zeile 21 das<br />

Funktionstemplate sowohl<br />

Lvalues als auch<br />

Rvalues. In der Abbildung 6 ist dies<br />

schön zu sehen.<br />

Eine Besonderheit hält die C++11-Implementierung<br />

vor. Der Rückgabe-Ausdruck<br />

»(forward(t1))« (Zeile 24) verwendet<br />

die neue Funktion »std::forward«.<br />

Deren Aufruf ist hier notwendig, denn<br />

sonst würde »t1« in jedem Aufruf als Lvalue<br />

an den Konstruktor von »T« weitergereicht,<br />

denn dieser wird mit einem Argument<br />

mit Namen aufgerufen – und alles,<br />

was einen Namen besitzt, ist ein Lvalue.<br />

»std::forward« sorgt dafür, dass der Konstruktor<br />

den wahren Wert von »t1« erhält,<br />

so wie ihn auch die Funktion »create-<br />

New« erhalten hat. Dies kann ein Lvalue<br />

oder ein Rvalue sein. Diese Vorgehensweise<br />

nennt man Perfect Forwarding.<br />

Wie geht’s weiter?<br />

Wegen der Fülle an Informationen rund<br />

um Rvalue-Referenzen, Move-Semantik<br />

und Perfect Forwarding hat dieser Artikel<br />

ein neues Feature der Standardbibliothek<br />

Abbildung 7: Die nächste Folge widmet sich den Smart Pointern in C++11.<br />

in Listing 6 nur kurz erläutert, obwohl<br />

es deutlich mehr Aufmerksamkeit verdient:<br />

die Smart Pointer (Abbildung 7).<br />

Viele Entwickler halten die neuen Smart<br />

Pointer »std::shared_ptr«, »std::weak_ptr«<br />

und »std::unique_ptr« für das wichtigste<br />

Feature der neuen Standardbibliothek,<br />

denn sie führen automatisches Speichermanagement<br />

in C++11 ein. Der nächste<br />

Artikel wird sich daher intensiv mit ihnen<br />

beschäftigen. (mhu)<br />

n<br />

Infos<br />

[1] STL-Container: [http:// en. cppreference.​<br />

com/ w/ cpp/ container]<br />

[2] Rainer Grimm, „Alle im Einklang“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 08/​12, S. 88<br />

[3] Howard E. Hinnant, Bjarne Stroustrup and<br />

Bronek Kozicki, „A Brief Introduction to<br />

Rvalue References“: [http:// www. artima.​<br />

com/ cppsource/ rvalue. html]<br />

[4] Listings zu diesem Artikel: [http:// www.​<br />

linux‐magazin. de/ Heft‐Abo/ Ausgaben/​<br />

Listings/ 2012/ 12/ cpp]<br />

Listing 7: Generische Fabrikfunktion mit C++98 und C++11<br />

01 #include <br />

02 <br />

03 using std::forward;<br />

04 <br />

05 using std::cout;<br />

06 using std::endl;<br />

07 <br />

08 template <br />

09 T createClassic(const T1& t1){<br />

10 cout


Admin-MAGAZIN<br />

im Jahres-Abo<br />

Praktisch anwendbares Wissen und ausführliche<br />

Hintergrundberichte für alle IT-Administratoren<br />

von <strong>Linux</strong>, Unix und Windows.<br />

JETZT Zugreifen<br />

und über 15% Sparen!<br />

IHRE vorteile<br />

• 6 Ausgaben im Jahr Frei Haus<br />

• inklusive 6 ADMIN-Specials<br />

(unter anderem zu IPv6 und SSD)<br />

als PDF-Download im Wert von<br />

über 35 Euro<br />

sichern Sie Sich Ihr<br />

gratis Multitool!<br />

Jetzt abonnieren:<br />

www.admin-magazin.de/abo<br />

(Printabo 49,90 Euro, digitales Abo nur 44,90 Euro)<br />

• Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@admin-magazin.de •


Programmieren<br />

www.linux-magazin.de Perl-Snapshot 12/2012<br />

102<br />

Bücher scannen und in Google Drive speichern<br />

Papierbuch am Ende<br />

Mit einer chinesischen Guillotine und einem Einzugsscanner bewaffnet geht Perlmeister Michael Schilli diesmal<br />

seinen Büchern an den Leim. Die Grundlage seiner bibliophoben Tat liefert Google Drive, das mit 5 GByte<br />

genug Speicherplatz für ein Online-PDF-Lager mit eingescannten Büchern bietet. Michael Schilli<br />

Fallbeil schneidet dann den geklebten<br />

oder gebundenen Buchrücken ab und<br />

die entstandene Loseblattsammlung zieht<br />

anschließend der Fujitsu S1500 ein (Abbildung<br />

3), fährt eine OCR-Zeichenerkennung<br />

auf das Digitalformat und speichert<br />

das Buch als PDF ab.<br />

Google Drive vs. Dropbox<br />

© cybernautin, photocase.com<br />

Online PLUS<br />

In einem Screencast demonstriert<br />

Michael Schilli das Beispiel: [http://​<br />

www.linux-magazin.de/​plus/​2012/12]<br />

Noch zieren sich die deutschen Verlage<br />

etwas mit der Umstellung auf digitale<br />

Bücher, doch die Weichen sind längst<br />

gestellt. Wer hat schon Lust, ein paar Kilo<br />

Bücher mit in den Urlaub zu schleppen,<br />

wenn Übergepäck Unsummen kostet?<br />

Warum zu Hause Regale mit staubfangenden<br />

Büchern zustellen, die kein Digital<br />

Native mehr rauszieht?!<br />

Der Blick zurück ist aber nötig: Ich hatte<br />

in meinem früheren, Papier-basierten<br />

Lese leben jahrelang Regale mit ungelesenen<br />

Papierbüchern gefüllt – und die<br />

möchte ich nun nicht alle neu im Digitalformat<br />

kaufen. Es geht mir dabei nicht<br />

nur ums Geld, sondern auch um die Tatsache,<br />

dass die meisten älteren Werke<br />

wohl nie digital erscheinen werden.<br />

Zur Vergangenheitsbewältigung habe<br />

ich mir deshalb einen 400 Dollar teuren<br />

Wunderscanner von Fujitsu angeschafft.<br />

Die zweite Digitalisier-Gerätschaft arbeitet<br />

rein mechanisch und trägt den jakobinischen<br />

Namen „Guillotine“: Ein etwa 20<br />

Kilo schweres Papiermesser (Abbildung<br />

1), erworben für 150 Dollar in einem großen<br />

Internet-Auktionshaus), mit dem ich<br />

Wälzer bis zu etwa 600 Seiten von Umschlag<br />

und Bindung befreie.<br />

Mit einem Teppichmesser trenne ich<br />

zunächst Hardcover vom Buchrumpf<br />

(Abbildung 2) und halbiere 1000-Seiten-<br />

Wälzer, damit sie in die Guillotine aus<br />

chinesischer Produktion passen. Das<br />

Ein dicker Wälzer wie „Algorithmen in<br />

C++“ schlägt bei mir als PDF mit 200<br />

bis 300 MByte (im Doppelsinn) zu Buche.<br />

Damit der User das Nachschlagewerk auf<br />

allen Geräten, vom Heim-PC bis zum iPad<br />

im Urlaub, parat hat, bieten Firmen wie<br />

Dropbox Applikationen an, die einmal<br />

gespeicherte Dateien magisch über das<br />

Netz verteilen, ohne dass der Anwender<br />

dies groß anordnen muss.<br />

Google ist mit „Drive“ [2] relativ neu<br />

in diesem Onlinestorage-Geschäft. Die<br />

für PC, Mac, iPad, Android-Geräte und<br />

Webbrowser verfügbaren Applikationen<br />

sind noch nicht so ausgereift wie die<br />

von Platzhirsch Dropbox, funktionieren<br />

aber. Eine native Drive-Applikation für<br />

<strong>Linux</strong> fehlt, Google liefert sie hoffentlich<br />

irgendwann nach. Beide Konkurrenten<br />

stellen interessierten Bastlern hervorragend<br />

dokumentierte APIs zur Verfügung,<br />

um nach Herzenslust selbst Applikationen<br />

zu zaubern.<br />

PDFs online speichern<br />

Abbildung 4 zeigt die auf Google Drive<br />

hochgeladenen PDF-Dateien in einem<br />

Chrome-Browser, Google unterstützt aber<br />

auch Firefox. Ein Mausklick auf eine Datei<br />

löst einen Download aus, einige Zeit<br />

später springt der PDF-Reader an und<br />

zeigt das gescannte Buch an. Im iPad


Perl-Snapshot 12/2012<br />

Programmieren<br />

www.linux-magazin.de<br />

103<br />

Abbildung 1: Eine so genannte Guillotine schneidet<br />

ritsch-ratsch den geklebten Buchrücken ab.<br />

Abbildung 2: Mit einem Teppichmesser geht es dem<br />

Umschlagdeckel an den Kragen.<br />

Abbildung 3: Der Scanner Fujitsu S1500 zieht die<br />

losen Buchseiten ein und führt einen OCR-Lauf aus.<br />

speichert die Applikation Google Drive<br />

(Abbildung 5) die PDF-Daten zwischen,<br />

bis zu einer einstellbaren Grenze. Beim<br />

Downloaden der App ist darauf zu achten,<br />

dass man das Original von Google<br />

erwischt, es sind einige minderwertige<br />

Klone von Drittfirmen im Umlauf.<br />

Automatisch per API<br />

Als Reader empfiehlt sich bei großen PDF-<br />

Dateien nicht das Original von Adobe, da<br />

es nicht für schwachbrüstige Mobilgeräte<br />

ausgelegt ist. Kostenpflichtige iPad-Apps<br />

wie Goodreader [3] oder Ez PDF [4]<br />

auf einem Android-Telefon bieten mehr<br />

Komfort und Performance. Das Hochladen<br />

der gescannten Bücher gestaltet sich<br />

im Browser zwar recht einfach, allerdings<br />

kann es je nach Netzwerkverbindung<br />

eine Weile dauern.<br />

Statt dies jedes Mal manuell durchzuführen,<br />

empfiehlt sich unter <strong>Linux</strong> der Einsatz<br />

einer handgeschriebenen Applikation.<br />

Es existieren zwar<br />

einige Programme, die<br />

mittels Fuse ein Dropbox-ähnliches<br />

Verhalten<br />

vorgaukeln, doch<br />

eigene Skripte bieten<br />

die kreativeren Möglichkeiten.<br />

Dank des umfangreichen<br />

API mit hervorragender<br />

Dokumentation<br />

[5] ist dies leicht<br />

möglich. Leider liefert<br />

Google nur SDKs für<br />

Java, Ruby, PHP und<br />

Python, doch das<br />

REST-Web-API lässt sich auch leicht von<br />

einem Perl-Skript nutzen.<br />

Zugriffe regeln<br />

Nur berechtigte User mit registrierten Applikationen<br />

sollen auf die unter Umständen<br />

sensiblen Daten auf dem Google Drive<br />

zugreifen dürfen. Google regelt die Berechtigung<br />

mit dem Oauth-Protokoll, mit dem<br />

Webapplikationen von Drittanbietern<br />

Userdaten lesen und manipulieren, ohne<br />

dass der User dem Drittanbieter sein<br />

Passwort mitzuteilen braucht.<br />

Hierzu holt sich eine registrierte Applikation<br />

zunächst von Google einen Request-Token<br />

ab und leitet den User im<br />

Webbrowser auf die Google-Login-Seite<br />

weiter. Dort trägt er seinen Usernamen<br />

und sein Passwort ein, falls er noch nicht<br />

eingeloggt ist, und bekommt daraufhin<br />

einen Dialog vorgesetzt, der nachfragt,<br />

ob er wirklich gewillt ist, dem Drittanbieter<br />

Zugriff auf seine Daten zu gewähren.<br />

Abbildung 4: Im Webbrowser bringt Google Drive die<br />

gespeicherten PDF-Dateien zur Ansicht.<br />

Nach der Bestätigung leitet Google den<br />

Browser des Benutzers wieder zurück<br />

zur Applikation des Drittanbieters und<br />

schickt einen Access-Token und einen<br />

Refresh-Token mit.<br />

Der Access-Token gilt für eine bestimmte<br />

Zeitspanne, zum Beispiel eine Stunde,<br />

und erlaubt dem Drittanbieter, dem vom<br />

User gewählten Berechtigungs-Scope<br />

entsprechend auf dessen Daten herumzuorgeln.<br />

Manche Scopes gestatten nur<br />

das Lesen der E-Mail-Adresse, andere das<br />

Lesen aller Dateien auf Google Drive und<br />

einer sogar das Lesen und Schreiben aller<br />

Daten. Erlischt die Gültigkeit des Access-<br />

Token nach der eingestellten Zeitspanne,<br />

schickt die Applikation den Refresh-Token<br />

zurück an Google und erhält postwendend<br />

einen neuen Access-Token, falls<br />

der User der Applikation noch nicht den<br />

Google-Zugriff entzogen hat.<br />

Auf der API-Console [6] meldet der Programmierer<br />

Applikationen an, die nach<br />

Zugriff auf die zahlreichen Google-APIs<br />

Abbildung 5: Die Drive-App auf dem iPad, die ebenfalls die gescannten<br />

Papierbücher als PDFs anzeigt.


Programmieren<br />

www.linux-magazin.de Perl-Snapshot 12/2012<br />

104<br />

trachten. Für Google Drive ist der Schalter<br />

»Google Drive API« umzulegen, der<br />

für das darunter stehende Google-Drive-<br />

SDK bleibt auf »off« (Abbildung 6). Nach<br />

dem Akzeptieren der Nutzungsbedingungen<br />

erscheinen zwei Schlüssel als Hex-<br />

Strings: die Client-ID und das Client-Secret.<br />

Da beide fest im Client verdrahtet<br />

sind, handelt es sich bei Letzterem wohl<br />

kaum um ein Geheimnis. Skripte mit beiden<br />

Werten dürfen von den Google-API-<br />

Servern nun Request-Tokens verlangen,<br />

um User einzubinden.<br />

Das Skript »google‐drive‐init« in Listing 1<br />

startet einen Mojolicious-Server auf Port<br />

8082 des lokalen Rechners, mit dem sich<br />

der Browser in Abbildung 7 verbindet.<br />

Mit diesem Verfahren hatte sich schon<br />

der Perl-Snapshot [7] anhand des Drop-<br />

box-API befasst. Es dient dazu, Google<br />

den Request-Token zu entlocken, denn<br />

beim später beschriebenen Datenabfrage-<br />

Skript handelt es sich nicht um eine Webapp.<br />

Darum muss es mit eingeweckten<br />

Web-Tokens vorlieb nehmen.<br />

Klickt der User auf den dargestellten Link<br />

»Login on Google Drive«, springt der<br />

Browser zwecks User-Authentifizierung<br />

zu Google und fragt, ob er der Applikation<br />

»splitsync«, so der frei gewählte<br />

Name der Applikation, Zugriff auf sein<br />

Drive gewährt (Abbildung 8). Nach der<br />

Bestätigung schickt Google den Browser<br />

wieder zurück auf die Redirect-URL, in<br />

diesem Fall den Mojolicious-Server auf<br />

»http://localhost:8082«. Der speichert<br />

die ebenfalls übermittelten Accessund<br />

Refresh-Tokens in der Yaml-Datei<br />

»~/.google‐drive.yml« und meldet den<br />

Erfolg mit »Token saved«.<br />

Skript als Webapp<br />

Die bei der Projekt-Registrierung erhaltene<br />

Client-ID und das Client-Secret verdrahtet<br />

Listing 1 in den Zeilen 10 und<br />

11. Als Scope gibt es »www.googleapis.<br />

com/auth/drive« an und verlangt demnach<br />

Schreib-Lese-Zugang zum Drive<br />

des Users. Entsprechende Rechte lässt<br />

sich Google in Abbildung 8 vom User<br />

einräumen.<br />

Im Mojolicious-Testserver eingehende<br />

Browseranfragen unter dem Pfad »/« landen<br />

im Handler ab Zeile 34, der den Parameter<br />

»login_url« für das Template am<br />

unteren Rand des Skripts angibt. Später<br />

Listing 1: »google‐drive‐init«<br />

001 #!/usr/local/bin/perl ‐w<br />

002 use strict;<br />

003 use Mojolicious::Lite;<br />

004 use YAML qw( DumpFile );<br />

005 use Log::Log4perl qw(:easy);<br />

006 use HTTP::Request::Common;<br />

007 use JSON qw( from_json );<br />

008 use URI;<br />

009<br />

010 my $client_id = "XXX";<br />

011 my $client_secret = "YYY";<br />

012 my $scope =<br />

013 "https://www.googleapis.com/auth/drive";<br />

014 my $listen = "http://localhost:8082";<br />

015 my($home) = glob '~';<br />

016 my $CFG_FILE =<br />

017 "$home/.google‐drive.yml";<br />

018 my $redir_uri = "$listen/callback";<br />

019<br />

020 my $login_uri = URI‐>new(<br />

021 "https://accounts.google.com" .<br />

022 "/o/oauth2/auth" );<br />

023<br />

024 $login_uri‐>query_form (<br />

025 response_type => "code",<br />

026 client_id => $client_id,<br />

027 redirect_uri => $redir_uri,<br />

028 scope => $scope,<br />

029 );<br />

030<br />

031 @ARGV = (qw(daemon ‐‐listen), $listen);<br />

032<br />

033 ###########################################<br />

034 get '/' => sub {<br />

035 ###########################################<br />

036 my ( $self ) = @_;<br />

037<br />

038 $self‐>stash‐>{login_url} =<br />

039 $login_uri‐>as_string();<br />

040<br />

041 } => 'index';<br />

042<br />

043 ###########################################<br />

044 get '/callback' => sub {<br />

045 ###########################################<br />

046 my ( $self ) = @_;<br />

047<br />

048 my $code = $self‐>param( "code" );<br />

049<br />

050 my( $access_token, $refresh_token,<br />

051 $expires_in ) =<br />

052 tokens_get( $self‐>param( "code" ) );<br />

053<br />

054 DumpFile $CFG_FILE, {<br />

055 access_token => $access_token,<br />

056 refresh_token => $refresh_token,<br />

057 client_id => $client_id,<br />

058 client_secret => $client_secret,<br />

059 expires => time() + $expires_in,<br />

060 code => $code<br />

061 };<br />

062<br />

063 $self‐>render_text( "Tokens saved.",<br />

064 layout => 'default' );<br />

065 };<br />

066<br />

067 ###########################################<br />

068 sub tokens_get {<br />

069 ###########################################<br />

070 my( $code ) = @_;<br />

071<br />

072 my $req = &HTTP::Request::Common::POST(<br />

073 'https://accounts.google.com/o/' .<br />

074 'oauth2/token',<br />

075 [<br />

076 code => $code,<br />

077 client_id => $client_id,<br />

078 client_secret => $client_secret,<br />

079 redirect_uri => $redir_uri,<br />

080 grant_type => 'authorization_code',<br />

081 ]<br />

082 );<br />

083<br />

084 my $ua = LWP::UserAgent‐>new();<br />

085 my $resp = $ua‐>request($req);<br />

086<br />

087 if( $resp‐>is_success() ) {<br />

088 my $data =<br />

089 from_json( $resp‐>content() );<br />

090<br />

091 return ( $data‐>{ access_token },<br />

092 $data‐>{ refresh_token },<br />

093 $data‐>{ expires_in } );<br />

094 }<br />

095<br />

096 warn $resp‐>status_line();<br />

097 return undef;<br />

098 }<br />

099<br />

100 app‐>start;<br />

101<br />

102 __DATA__<br />

103 ###########################################<br />

104 @@ index.html.ep<br />

105 % layout 'default';<br />

106 Login on Google Drive<br />

108<br />

109 @@ layouts/default.html.ep<br />

110 <br />

111 Token Fetcher<br />

112 <br />

113 <br />

114 <br />

115 <br />

116 <br />

117


Abbildung 6: In diesem »All services«-Einstelldialog gilt es, für das Perl-<br />

Projekt das Google-Drive-API – nicht das SDK – anzuschalten.<br />

stellt der Browser einen Link darauf dar<br />

(Abbildung 7). Die Rücksprungadresse<br />

für Google nach getaner Arbeit auf dem<br />

Mojolicious-Server liegt wegen Zeile 18<br />

unter dem Pfad »/callback«.<br />

Der zugehörige, ab Zeile 44 definierte<br />

Handler schnappt sich den von Google<br />

gesendeten Parameter »code« und gibt<br />

ihn der Funktion »tokens_get()« ab Zeile<br />

68. Sie schickt einen »POST()«-Request<br />

und das Accounts-API,<br />

packt die Client-ID<br />

und das Client-Secret<br />

bei und bekommt von<br />

Google einen Requestund<br />

einen Refresh-<br />

Token im Json-Format<br />

zurück. Vorsicht: Der<br />

Access-Token darf<br />

nicht in fremde Hände<br />

gelangen – zusammen<br />

mit dem Refresh-Token<br />

böte er Übeltätern<br />

zeitlich unbeschränkten<br />

Zugriff auf die persönliche<br />

Drive-Daten<br />

des Users!<br />

Beide legt die Funktion zusammen mit deren<br />

Verfallsdatum und den Client-ID-Daten<br />

in der Yaml-Datei »~/.google‐drive.<br />

yml« im Homeverzeichnis des Users ab,<br />

damit später Skripte wie das in Listing<br />

2 mit den Drive-Daten des Users spielen<br />

dürfen. Da das Verfallsdatum des<br />

Request-Token als relativ zur aktuellen<br />

Uhrzeit verstrichene Sekunden eintrifft,<br />

addiert Zeile 59 die aktuelle Zeit in Sekunden<br />

seit 1970 und speichert den Zeitstempel<br />

unter dem Schlüssel »expires«.<br />

Später muss ein Skript nur prüfen, ob die<br />

aktuelle Sekundenzeit den Zeitstempel<br />

überschritten hat.<br />

Auf Daten orgeln<br />

Listing 2 implementiert eine Applikation,<br />

die schaut, ob alle in einem lokalen<br />

Verzeichnis gespeicherten Dateien bereits<br />

auf Google Drive hochgespielt sind. Mit<br />

Hilfe des API schickt sie eine Anfrage an<br />

den Drive-API-Server unter dem URL-<br />

Pfad »/files«, der ein Listing aller unter<br />

dem Account des authentisierten Users<br />

liegenden Dateien anfordert. Das voreingestellte<br />

Maximum an Treffern liegt bei<br />

100, der Parameter »MaxResults« in Zeile<br />

27 setzt es auf 3000.<br />

Abbildung 7: Zum Einloggen wendet sich der User an<br />

den Mojolicious-Server.<br />

Perl-Snapshot 12/2012<br />

Programmieren<br />

www.linux-magazin.de<br />

105<br />

Listing 2: »google‐drive‐check«<br />

01 #!/usr/local/bin/perl ‐w<br />

02 use strict;<br />

03 use LWP::UserAgent;<br />

04 use HTTP::Request;<br />

05 use HTTP::Headers;<br />

06 use HTTP::Request::Common;<br />

07 use File::Basename;<br />

08 use YAML qw( LoadFile DumpFile );<br />

09 use JSON qw( from_json );<br />

10<br />

11 my( $home ) = glob "~";<br />

12 my $cfg_file = "$home/.google‐drive.yml";<br />

13 my $syncdir = "$home/books";<br />

14 my @books_local =<br />

15 map { basename $_ } ;<br />

16<br />

17 my $cfg = LoadFile $cfg_file;<br />

18<br />

19 if( $cfg‐>{ expires } ‐ 60 < time() ) {<br />

20 warn "Token needs to be refreshed.";<br />

21 token_refresh( $cfg );<br />

22 DumpFile( $cfg_file, $cfg );<br />

23 }<br />

24<br />

25 my $req = HTTP::Request‐>new(<br />

26 GET => 'https://www.googleapis.com/' .<br />

27 'drive/v2/files?maxResults=3000',<br />

28 HTTP::Headers‐>new( Authorization =><br />

29 "Bearer " . $cfg‐>{ access_token })<br />

30 )<br />

31<br />

32 my $ua = LWP::UserAgent‐>new();<br />

33 my $resp = $ua‐>request( $req );<br />

34<br />

35 if( ! $resp‐>is_success() ) {<br />

36 die $resp‐>message();<br />

37 }<br />

38<br />

39 my $data = from_json( $resp‐>content() );<br />

40<br />

41 my %books_remote = ();<br />

42<br />

43 for my $item ( @{ $data‐>{ items } } ) {<br />

44 if( $item‐>{ kind } eq "drive#file" ) {<br />

45 my $file = $item‐>{ originalFilename };<br />

46 next if !defined $file;<br />

47 $books_remote{ $file } = 1;<br />

48 }<br />

49 }<br />

50<br />

51 for my $book ( @books_local ) {<br />

52 if( !exists $books_remote{ $book } ) {<br />

53 print "Book not saved yet: [$book]\n";<br />

54 }<br />

55 }<br />

56<br />

57 ###########################################<br />

58 sub token_refresh {<br />

59 ###########################################<br />

60 my( $cfg ) = @_;<br />

61<br />

62 my $req = &HTTP::Request::Common::POST(<br />

63 'https://accounts.google.com/o' .<br />

64 '/oauth2/token',<br />

65 [<br />

66 refresh_token =><br />

67 $cfg‐>{ refresh_token },<br />

68 client_id =><br />

69 $cfg‐>{ client_id },<br />

70 client_secret =><br />

71 $cfg‐>{ client_secret },<br />

72 grant_type => 'refresh_token',<br />

73 ]<br />

74 );<br />

75<br />

76 my $ua = LWP::UserAgent‐>new();<br />

77 my $resp = $ua‐>request($req);<br />

78<br />

79 if ( $resp‐>is_success() ) {<br />

80 my $data =<br />

81 from_json( $resp‐>content() );<br />

82 $cfg‐>{ access_token } =<br />

83 $data‐>{ access_token };<br />

84 $cfg‐>{ expires } =<br />

85 time() + $data‐>{ expires_in };<br />

86 return 1;<br />

87 }<br />

88<br />

89 warn $resp‐>status_line();<br />

90 return undef;<br />

91 }


Programmieren<br />

www.linux-magazin.de Perl-Snapshot 12/2012<br />

106<br />

Abbildung 8: Google fragt seinen Benutzer, ob er<br />

der Perl-Applikation »splitsync« Zugriff auf seine<br />

Drive-Dateien einräumen will.<br />

Liegt ein gültiger Request-Token vor,<br />

kommt von Google auf den »GET«-Request<br />

in Zeile 26 ein Json-String nach<br />

Art der Abbildung 9 zurück. Er zeigt<br />

alle auf dem Drive liegenden Dateien an,<br />

und zwar unabhängig davon, in welchem<br />

Verzeichnis sie gespeichert sind.<br />

Zeile 44 prüft, ob der Parameter »kind«<br />

auf »drive#file« gesetzt ist, und Zeile 45<br />

extrahiert den Wert von »originalFilename«,<br />

den Namen der hochgeladenen<br />

Datei. Jeden Treffer speichert der Hash<br />

»%books_remote«, damit die For-Schleife<br />

ab Zeile 51, die über alle lokal im vorgegebenen<br />

Verzeichnis »~/books« gefundenen<br />

Bücher läuft, blitzschnell feststellen<br />

kann, welche Bücher noch nicht<br />

gesichert sind.<br />

Ist der in der Yaml-Datei<br />

gesicherte Access-<br />

Token abgelaufen,<br />

weil seit dem Lauf<br />

von »google‐drive‐init«<br />

mehr als eine Stunde<br />

vergangen ist, holt die<br />

Funktion »token_refresh()«<br />

ab Zeile 58<br />

einen frischen Access-<br />

Token vom Server. Sie<br />

benötigt außer dem Refresh-Token nur<br />

noch die Clientdaten, verlangt also dem<br />

Benutzer keine weiteren Eingaben ab.<br />

Dieser könnte weitere Token-Auffrischer<br />

eigentlich nur verhindern, indem er auf<br />

Google der Applikation »splitsync« die<br />

Rechte hierzu entzieht.<br />

Eine Extrawurst für<br />

dicke Dateien<br />

Ein schöner Nebeneffekt der Datenspeicherung<br />

auf Google Drive ist, dass<br />

Google den Inhalt der Dateien indiziert<br />

und eine Volltextsuche darauf erlaubt.<br />

Mit 200-MByte-Monsterdateien geht dies<br />

allerdings schief. Als weiteres Testprojekt<br />

habe ich deshalb ein Skript geschrieben,<br />

das die PDF-Dateien an Seitengrenzen in<br />

Einzelstücke von etwa 10 MByte Größe<br />

aufteilt. Das unter [1] ebenso wie die<br />

Listings 1 und 2 zum Download bereitstehende<br />

Skript beschleunigt nicht nur<br />

Abbildung 10: Volltextsuche auf den PDF-Dateien im Google-Drive.<br />

das Herunterladen bestimmter Buchteile,<br />

sondern wirft auch Googles Indizierungsmechanismus<br />

an, sodass nun, wie in Abbildung<br />

10 ersichtlich, eine Suche nach<br />

„Heuschnupfen“ tatsächlich Treffer im<br />

ebenfalls eingescannten „Medizinischen<br />

Hausbuch“ liefert.<br />

Das Drive-API erlaubt es Experimentierfreudigen,<br />

sehr funktionale Applikationen<br />

zu entwickeln, denn auch Uploads<br />

und Downloads von Dateien oder das<br />

Verschieben in Ordner sind möglich. Vielleicht<br />

legt ja eine <strong>Linux</strong>-Programmiererin<br />

oder ein ‐Programmierer einen richtigen<br />

Google-Drive-Client vor – noch bevor der<br />

Konzern in die Hufe kommt? (jk) n<br />

Infos<br />

[1] Listings zu diesem Artikel:<br />

[ftp:// www. linux‐magazin. de/ pub/ listings/​<br />

magazin/ 2012/ 12/ Perl]<br />

[2] Google Drive: [http:// drive. google. com]<br />

[3] Goodreader: [http:// www. goodiware. com/​<br />

goodreader. html]<br />

[4] Ez PDF: [https:// play. google. com/ store/​<br />

apps/ details? id=udk. android. reader& hl=de]<br />

[5] „Integrate your app with Google Drive“:<br />

[https:// developers. google. com/ drive/]<br />

[6] API-Console: [https:// code. google. com/​<br />

apis/ console# access]<br />

[7] Michael Schilli, „Ab in die Kiste“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 07/​11, S. 102, [http:// www.​<br />

linux‐magazin. de/ Heft‐Abo/ Ausgaben/ 2011/​<br />

07/ Perl‐Snapshot]<br />

Abbildung 9: Die Json-Daten mit auf Google Drive gespeicherten Dokumenten, die das Google-API auf eine<br />

Datei-Listing-Anfrage zurückschickt.<br />

Der Autor<br />

Michael Schilli arbeitet<br />

als Software-Engineer bei<br />

Yahoo in Sunnyvale, Kalifornien.<br />

In seinen seit 1997<br />

erscheinenden Snapshots<br />

forscht er jeden Monat<br />

nach praktischen Anwendungen der Skriptsprache<br />

Perl. Unter [mschilli@perlmeister. com] beantwortet<br />

er gerne Fragen.


LINUX & DATENBANKADMINISTRATOR (M/W)<br />

XYRALITY gehˆ rt seit Verˆ ffentlichung seiner MMOGs Ñ Lords & Knightsì und Ñ Crazy Tribesì zu den erfolgreichsten und am<br />

schnellsten wachsenden Mobile Games Studios in Europa. Bereits heute arbeiten mehr als 50 engagierte Mitarbeiter an<br />

der nachhaltigen Weiterentwicklung unseres Gameportfolios.<br />

Zum n‰ chstmˆ glichen Zeitpunkt suchen wir einen <strong>Linux</strong> & Datenbankadministrator (m/w) in Vollzeit.<br />

Zu Ihren Aufgaben z‰ hlen<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Anforderungen<br />

<br />

<br />

<br />

<br />

<br />

Wir bieten<br />

<br />

<br />

<br />

<br />

Dann nutzen Sie die Chance und bewerben Sie sich jetzt unter jobs@xyrality.com<br />

<br />

www.xyrality.com/jobs


Service<br />

www.linux-magazin.de IT-Profimarkt 12/2012<br />

108<br />

PROFI<br />

MARKT<br />

Sie fragen sich, wo Sie maßgeschneiderte<br />

<strong>Linux</strong>-Systeme und kompetente<br />

Ansprechpartner zu Open-Source-Themen<br />

finden? Der IT-Profimarkt weist Ihnen<br />

als zuverlässiges Nachschlagewerk<br />

den Weg. Die hier gelisteten Unternehmen<br />

beschäftigen Experten auf ihrem<br />

Gebiet und bieten hochwertige Produkte<br />

und Leistungen.<br />

Die exakten Angebote jeder Firma entnehmen<br />

Sie deren Homepage. Der ersten<br />

Orientierung dienen die Kategorien<br />

Hardware, Software, Seminaranbieter,<br />

Systemhaus, Netzwerk/TK und Schulung/Beratung.<br />

Der IT-Profimarkt-Eintrag<br />

ist ein Service von <strong>Linux</strong>-<strong>Magazin</strong><br />

und <strong>Linux</strong>User.<br />

Online-Suche<br />

Besonders bequem finden Sie einen<br />

<strong>Linux</strong>-Anbieter in Ihrer Nähe über die<br />

neue Online-Umkreis-Suche unter:<br />

[http://www.it-profimarkt.de]<br />

Informationen<br />

fordern Sie bitte an bei:<br />

Medialinx AG<br />

Anzeigenabteilung<br />

Putzbrunner Str. 71<br />

D-81739 München<br />

Tel.: +49 (0)89/99 34 11-23<br />

Fax: +49 (0)89/99 34 11-99<br />

E-Mail: anzeigen@linux-magazin.de<br />

1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />

IT-Profimarkt – Liste sortiert nach Postleitzahl<br />

4= Fachliteratur 4= Seminaranbieter 5 = Software 5 = Software 6 = Schulung/Beratung 6 = Firma Anschrift Telefon Web 1 2 3 4 5 6<br />

Schlittermann internet & unix support 01099 Dresden, Tannenstr. 2 0351-802998-1 www.schlittermann.de √ √ √ √<br />

imunixx GmbH UNIX consultants 01468 Moritzburg, Heinrich-Heine-Str. 4 0351-83975-0 www.imunixx.de √ √ √ √ √<br />

Heinlein Professional <strong>Linux</strong> Support GmbH 10119 Berlin, Schwedter Straße 8/​9b 030-405051-0 www.heinlein-support.de √ √ √ √ √<br />

TUXMAN Computer 10369 Berlin, Anton-Saefkow-Platz 8 030-97609773 www.tuxman.de √ √ √ √ √<br />

Hostserver GmbH 10405 Berlin, Winsstraße 70 030-47375550 www.hostserver.de √<br />

Compaso GmbH 10439 Berlin, Driesener Strasse 23 030-3269330 www.compaso.de √ √ √ √ √<br />

elego Software Solutions GmbH 13355 Berlin, Gustav-Meyer-Allee 25 030-2345869-6 www.elegosoft.com √ √ √ √<br />

verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-4610-0 www.verion.de √ √ √<br />

Logic Way GmbH 19061 Schwerin, Hagenower Str. 73 0385-39934-48 www.logicway.de √ √ √ √<br />

Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de √ √ √ √ √<br />

iTechnology GmbH 22083 Hamburg, Osterbekstrasse 90b 49 (0) 40 / 69 64 37 20 www.itechnology.de √ √ √ √<br />

JEL Ingenieurbuero 23911 Einhaus, Hauptstr. 7 04541-8911-71 www.jeltimer.de √<br />

beitco - Behrens IT-Consulting 26197 Ahlhorn, Lessingstr. 27 04435-9537330-0 www.beitco.de √ √ √ √ √<br />

talicom GmbH 30169 Hannover, Calenberger Esplanade 3 0511-123599-0 www.talicom.de √ √ √ √ √<br />

primeLine Solutions GmbH 32549 Bad Oeynhausen, Dornenbreite 18a 0 57 31 / 86 94 0 www.primeline-solutions.de √ √ √ √<br />

teuto.net Netzdienste GmbH 33602 Bielefeld, Niedenstr. 26 0521-96686-0 www.teuto.net √ √ √ √ √<br />

MarcanT GmbH 33602 Bielefeld, Ravensberger Str. 10 G 0521-95945-0 www.marcant.net √ √ √ √ √ √<br />

Hostserver GmbH 35037 Marburg, Biegenstr. 20 06421-175175-0 www.hostserver.de √<br />

LINET Services GmbH 38122 Braunschweig, Am alten Bahnhof 4b 0531-180508-0 www.linet-services.de √ √ √ √ √ √<br />

OpenIT GmbH 40599 Düsseldorf, In der Steele 33a-41 0211-239577-0 www.OpenIT.de √ √ √ √ √<br />

<strong>Linux</strong>-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de √ √ √ √ √<br />

<strong>Linux</strong>hotel GmbH 45279 Essen, Antonienallee 1 0201-8536-600 www.linuxhotel.de √<br />

OpenSource Training Ralf Spenneberg 48565 Steinfurt, Am Bahnhof 3-5 02552-638755 www.opensource-training.de √<br />

Intevation GmbH 49074 Osnabrück, Neuer Graben 17 0541-33508-30 osnabrueck.intevation.de √ √ √ √<br />

Sigs Datacom GmbH 53842 Troisdorf, Lindlaustraße 2c 02241-2341-201 sigs-datacom.de √<br />

uib gmbh 55118 Mainz, Bonifaziusplatz 1b 06131-27561-0 www.uib.de √ √ √ √<br />

LISA GmbH 55411 Bingen, Elisenhöhe 47 06721-49960 www.lisa-gmbh.de √ √ √ √ √<br />

saveIP GmbH 64283 Darmstadt, Schleiermacherstr. 23 06151-666266 www.saveip.de √ √ √ √ √<br />

LAMARC EDV-Schulungen u. Beratung GmbH 65193 Wiesbaden, Sonnenberger Straße 14 0611-260023 www.lamarc.com √ √ √ √<br />

ORDIX AG 65205 Wiesbaden, Kreuzberger Ring 13 0611-77840-00 www.ordix.de √ √ √ √ √<br />

<strong>Linux</strong>Haus Stuttgart 70565 Stuttgart, Hessenwiesenstrasse 10 0711-2851905 www.linuxhaus.de √ √ √ √ √<br />

Manfred Heubach EDV und Kommunikation 73728 Esslingen, Hindenburgstr. 47 0711-4904930 www.heubach-edv.de √ √ √ √<br />

IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />

(S.110)


Markt<br />

… alles nur eine Frage der Lastverteilung !<br />

BalanceNG ®<br />

●<br />

Der Software Load-Balancer für <strong>Linux</strong> und Solaris<br />

●<br />

Voll virtualisierbar<br />

●<br />

Keine zusätzliche Hardware erforderlich<br />

●<br />

Security made in Germany:<br />

Garantiert frei von versteckten “Backdoors”<br />

Alle Informationen unter: www.BalanceNG.net<br />

Inlab Software GmbH<br />

Josef-Würth-Str. 3<br />

82031 Grünwald<br />

Tel: 089 / 64911420<br />

http://www.inlab.de<br />

vertrieb@jeltimer.de<br />

Wareneingang<br />

Inventuren<br />

<br />

Erfassung mit<br />

Barcodes<br />

100.000 fach<br />

bewährte Qualität<br />

Ausweiserstellung<br />

Zutrittssysteme<br />

Zeiterfassung<br />

Joberfassung<br />

12345678<br />

HT-630<br />

Inventuren<br />

Wareneingang<br />

JEL-MR370<br />

Terminal<br />

als WEBSERVER


Service<br />

www.linux-magazin.de Markt 12/2012<br />

110<br />

IT-Profimarkt / Stellen<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 Web 1 2 3 4 5 6<br />

Waldmann EDV Systeme + Service<br />

74321 Bietigheim-Bissingen,<br />

07142-21516 www.waldmann-edv.de √ √ √ √ √<br />

Pleidelsheimer Str. 25<br />

in-put Das <strong>Linux</strong>-Systemhaus 76133 Karlsruhe, Moltkestr. 49 0721-6803288-0 www.in-put.de √ √ √ √ √ √<br />

Bodenseo 78224 Singen, Pomeziastr. 9 07731-1476120 www.bodenseo.de √ √ √<br />

<strong>Linux</strong> Information Systems AG 81739 München, Putzbrunnerstr. 71 089-993412-0 www.linux-ag.com √ √ √ √ √<br />

<strong>Linux</strong>Land International GmbH 81739 München, Putzbrunnerstr. 71 089-99341441 www.linuxland.de √ √ √ √ √ √<br />

Synergy Systems GmbH 81829 München, Konrad-Zuse-Platz 8 089-89080500 www.synergysystems.de √ √ √ √ √<br />

B1 Systems GmbH 85088 Vohburg, Osterfeldstrasse 7 08457-931096 www.b1-systems.de √ √ √ √ √<br />

ATIX AG 85716 Unterschleißheim, Einsteinstr. 10 089-4523538-0 www.atix.de √ √ √ √ √ √<br />

OSTC Open Source Training and Consulting GmbH 90425 Nürnberg, Waldemar-Klink-Str. 10 0911-3474544 www.ostc.de √ √ √ √ √ √<br />

Dipl.-Ing. Christoph Stockmayer GmbH 90571 Schwaig, Dreihöhenstr. 1 0911-505241 www.stockmayer.de √ √ √<br />

pascom - Netzwerktechnik GmbH & Co.KG 94469 Deggendorf, Berger Str. 42 0991-270060 www.pascom.net √ √ √ √ √<br />

fidu.de IT KG 95448 Bayreuth, Ritter-v.-Eitzenb.-Str. 19 (0) 921 / 16 49 87 87 - 0 www.linux-onlineshop.de √ √ √ √<br />

Computersysteme Gmeiner 95643 Tirschenreuth, Fischerhüttenweg 4 09631-7000-0 www.gmeiner.de √ √ √ √ √<br />

RealStuff Informatik AG CH-3007 Bern, Chutzenstrasse 24 0041-31-3824444 www.realstuff.ch √ √ √<br />

CATATEC CH-3013 Bern, Dammweg 43 0041-31-3302630 www.catatec.ch √ √ √<br />

Syscon Systemberatungs AG CH-8003 Zürich, Zweierstrasse 129 0041-44-4542010 www.syscon.ch √ √ √ √ √<br />

Würth Phoenix GmbH IT-39100 Bozen, Kravoglstraße 4 +39 0471 56 41 11 www.wuerth-phoenix.com √ √ √ √<br />

IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />

n<br />

pascom sucht neue Mitspieler!<br />

MAGAZIN<br />

SondErAkTion<br />

Testen Sie jetzt<br />

3 Ausgaben<br />

für 3 Euro!<br />

IT-Techniker (m/w) im Bereich Support<br />

Ihr Profil:<br />

Fundierte <strong>Linux</strong>- und Netzwerkkenntnisse<br />

Hochschulabschluss, einschlägige Berufsausbildung<br />

oder Quereinsteiger<br />

Idealerweise vmware- und Asteriskerfahrung<br />

Wir bieten:<br />

Abwechslungsreiche Aufgaben<br />

Klasse Betriebsklima in jungem Team<br />

Entwicklungschancen in einem florierenden<br />

Unternehmen<br />

Bewerbungen bitte nur per E-Mail an job@pascom.net<br />

pascom Netwerktechnik | Berger Str. 42 | 94469 Deggendorf<br />

nUr<br />

MiT dVd!<br />

Jetzt schnell bestellen:<br />

• Telefon: 07131 / 2707 274<br />

• Fax 07131 / 2707 78 601<br />

• Mail abo@linux-magazin.de<br />

• http://linux-magazin.de/probeabo<br />

Mit großem Gewinnspiel (Infos unter: www.linux-magazin.de/probeabo)<br />

*Preis gilt für Deutschland<br />

LM_1-4DIN_Sonderaktion_3Euro_2109-2012.indd 1<br />

21.09.2012 16:20:21 Uhr


u<br />

Fon (0441) 4 85 15 19<br />

Fax (0441) 9 49 05 82<br />

eMail: post@werbewelten.de<br />

Seminare / Markt<br />

<strong>Linux</strong>-<strong>Magazin</strong><br />

ACADEMY<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 />

JETZT MIT NEUEN<br />

LErNZIELEN! *<br />

*ANpAssUNg dEr LErNZIELE 2012<br />

Teststudium<br />

ohne Risiko!<br />

20%<br />

Treue-Rabatt für<br />

Abonnenten<br />

academy.linux-magazin.de/lpic<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, Webmaster<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 />

rü<br />

Fernstudium<br />

s<br />

s<br />

a<br />

el<br />

g<br />

f<br />

t<br />

n<br />

d<br />

z<br />

u<br />

OpenSource Training Ralf Spenneberg<br />

Schulungen direkt vom Autor<br />

Wege aus der Lizenzfalle mit Samba 3/4<br />

3 Tage 29.01. ­ 31.01.2013<br />

Virtualisierung mit KVM<br />

3 Tage 29.01. ­ 31.01.2013<br />

Monitoring mit Nagios, Munin & Co<br />

5 Tage 28.01. ­ 01.02.2013<br />

Snort IDS/IPS Technology<br />

4 Tage 05.02. ­ 08.02.2013<br />

Hacking Webapplications<br />

4 Tage 12.02. ­ 15.02.2013<br />

<strong>Linux</strong> System Administration / LPIC­1<br />

5 Tage 18.02. ­ 22.02.2013<br />

<strong>Linux</strong> Storage Lösungen<br />

2 Tage 12.03. ­ 13.03.2013<br />

High Availability und Loadbalancing<br />

2 Tage 14.03. ­ 15.03.2013<br />

Apache 2.x Webserver Administration<br />

4 Tage 25.03. ­ 28.03.2013<br />

Freie Distributionswahl:<br />

Opensuse, Fedora, Debian Squeeze,<br />

CentOS oder Ubuntu LTS<br />

Ergonomische Arbeitsplätze<br />

Umfangreiche Schulungsunterlagen mit<br />

Übungen<br />

Am Bahnhof 3­5<br />

48565 Steinfurt<br />

Tel.: 02552 638755<br />

Fax: 02552 638757<br />

Weitere Informationen unter www.os­t.de<br />

Seminare/Markt 12/2012<br />

Service<br />

www.linux-magazin.de<br />

111<br />

<strong>Linux</strong>-<strong>Magazin</strong><br />

M-Academy_1-9h_Anzeige_LPIC-Mike_v3.indd 1<br />

ür<br />

ACADEMY<br />

Online-Training<br />

Erfolgreicher Einstieg in<br />

WordPress 3<br />

mit Hans-Georg Esser, Chefredakteur Easy<strong>Linux</strong><br />

Ansprechende Webseiten, 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 />

12.10.2012 14:41:16 Uhr<br />

DiD you<br />

know?<br />

UNIX-C-C++ Java<br />

Seminare<br />

in Nürnberg<br />

(oder inhouse)<br />

UNIX/<strong>Linux</strong><br />

UNIX/<strong>Linux</strong>-Aufbau<br />

C, C-Aufbau<br />

C++<br />

OOA/OOD (mit UML)<br />

Java<br />

Perl, XML<br />

weitere Kurse auf Anfrage, Telephonhotline<br />

Dipl.-Ing.<br />

Christoph Stockmayer GmbH<br />

90571 Schwaig/Nbg • Dreihöhenstraße 1<br />

Tel.: 0911/505241 • Fax 0911/5009584<br />

EMail: sto@stockmayer.de<br />

http://www.stockmayer.de<br />

<strong>Linux</strong>-<strong>Magazin</strong><br />

-9h_Anzeige_wordpress_v02.indd 1<br />

ACADEMY<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 />

18.04.2011 11:18:15 Uhr<br />

Online-Training<br />

mit Hans-Georg Esser, Chefredakteur Easy<strong>Linux</strong><br />

OpenOffice -<br />

Arbeiten mit Vorlagen<br />

Mit vielen<br />

Praxisbeispielen<br />

WusstEn siE’s?<br />

<strong>Linux</strong>-<strong>Magazin</strong> und <strong>Linux</strong>User haben<br />

ein englisches Schwester magazin!<br />

Am besten, Sie informieren gleich<br />

Ihre <strong>Linux</strong>-Freunde in aller Welt...<br />

©mipan, fotolia<br />

<strong>Linux</strong>-<strong>Magazin</strong><br />

ACADEMY<br />

20%<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 />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/openoffice<br />

www.linux-magazine.com<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/sicherheit<br />

M_Academy_1-9h_Anzeige_openoffice-Mike.indd 1<br />

12.04.2011 LMI_german_2-9h_black_1906-2012.indd 15:08:54 Uhr<br />

1<br />

20.06.2012 14:54:43 Uhr<br />

LM-Academy_1-9h_Security-Mike.indd 1<br />

12.04.2011 14:00:35 Uhr


Service<br />

www.linux-magazin.de Inserenten 12/2012<br />

112<br />

Inserentenverzeichnis<br />

1&1 Internet AG http://​www.einsundeins.de 18<br />

ADMIN-<strong>Magazin</strong> http://​www.admin-magazin.de 101<br />

Android User GY http://​www.android-user.de 63, 83<br />

Deutsche Messe AG http://​www.cebit.de 47<br />

embedded projects GmbH http://​www.embedded-projects.net 109<br />

Fernschule Weber GmbH http://​www.fernschule-weber.de 111<br />

Galileo Press http://​www.galileo-press.de 15<br />

Heinlein Professional <strong>Linux</strong> Support GmbH http://​www.heinlein-support.de 45<br />

Hetzner Online AG http://​www.hetzner.de 116<br />

Hostserver GmbH http://​www.hostserver.de 2<br />

Ico Innovative Computer GmbH http://​www.ico.de 27<br />

Inlab Software GmbH http://​www.inlab.de 109<br />

JEL GmbH, Jannsen Electronic http://​www.jelgmbh.de 109<br />

<strong>Linux</strong> <strong>Magazin</strong>e http://​www.linux-magazine.com 111<br />

<strong>Linux</strong>-Hotel http://​www.linuxhotel.de 53<br />

<strong>Linux</strong>-<strong>Magazin</strong> http://​www.linux-magazin.de 110, 115<br />

<strong>Linux</strong>-<strong>Magazin</strong> Academy www.academy.linux-magazin.de 40, 111<br />

<strong>Linux</strong>-<strong>Magazin</strong> Online http://​www.linux-magazin.de 93<br />

Netways GmbH http://​www.netways.de 59<br />

O’Reilly Verlag GmbH & Co KG http://​www.oreilly.de 17<br />

pascom - Netzwerktechnik GmbH & Co.KG http://​www.pascom.net 110<br />

PlusServer AG http://​www.plusserver.de 50, 78, 86, 94<br />

PrimeLine Solutions http://​www.primeline-solutions.de​ 9, 13<br />

Schlittermann internet & unix support http://​schlittermann.de 109<br />

Spenneberg Training & Consulting http://​www.spenneberg.com 111<br />

Stockmayer GmbH http://​www.stockmayer.de 111<br />

Strato AG http://​www.strato.de 1<br />

Ubuntu User http://​www.ubuntu-user.de 73<br />

XYRALITY GmbH http://​www.xyrality.com 107<br />

Einem Teil dieser Ausgabe liegen Beilagen der Firmen European IT Storage Ltd.<br />

(http://​www.eurostor.com) und Strato AG (http://​www.strato.de) bei. Wir bitten<br />

unsere Leser um freundliche Beachtung.<br />

Veranstaltungen<br />

29.10.-03.11.2012<br />

PyCon DE 2012<br />

Leipziger KUBUS<br />

Leipzig, Deutschland<br />

https://2012.de.pycon.org<br />

02.-04.11.2012<br />

Encuentro Centroamericano de Software Libre 2012<br />

Guatemala, Guatemala<br />

http://softwarelibre.ucr.ac.cr/node/506<br />

03.11.2012<br />

9. Brandenburger <strong>Linux</strong>-Infotag 2012<br />

Universität Potsdam<br />

Potsdam, Deutschland<br />

http://blit.org<br />

05.-08.11.2012<br />

ApacheCon Europe 2012<br />

Sinsheim, Deutschland<br />

http://www.apachecon.eu<br />

07.-09.11.2012<br />

<strong>Linux</strong>con Europe<br />

Barcelona, Spain<br />

https://events.linuxfoundation.org/events/linuxconeurope<br />

12.-15.11.2012<br />

SC12<br />

Salt Lake City, UT, USA<br />

http://sc12.supercomputing.org<br />

15.-16.11.2012<br />

Summit of Newthinking<br />

newthinking communications GmbH<br />

Berlin<br />

http://open-strategies.de<br />

23.-25.11.2012<br />

Libre Office Hackfest<br />

Project Limux<br />

München<br />

http://wiki.documentfoundation.org<br />

24.11.2012<br />

14. <strong>Linux</strong>Day 2012 Dornbirn<br />

Dornbirn, Österreich<br />

http://www.linuxday.at<br />

04.-07.12.2012<br />

AnDevCon IV<br />

Burlingame, CA, USA<br />

http://www.andevcon.com/AndevCon_IV/index.html<br />

09.-14.12.2012<br />

LISA √12<br />

San Diego, CA, USA<br />

http://www.usenix.org/events/lisa12/<br />

22.-24.02.2013<br />

Scale 11x<br />

Los Angeles, CA, USA<br />

http://www.socallinuxexpo.org/scale11x/<br />

26.02.-01.03.2013<br />

GUUG FFG 2013<br />

Fachhochschule Frankfurt<br />

Frankfurt am Main, Deutschland<br />

http://www.guug.de/veranstaltungen/ffg2013/<br />

05.-09.03.2013<br />

CeBIT 2013<br />

Messegelände<br />

30521 Hannover, Deutschland<br />

http://www.cebit.org<br />

22.-25.05.2013<br />

<strong>Linux</strong>Tag 2013<br />

Messegelände Berlin, Halle 7<br />

Messedamm 22<br />

14055 Berlin, Deutschland<br />

http://www.linuxtag.org


Impressum<br />

<strong>Linux</strong>-<strong>Magazin</strong> eine Publikation der <strong>Linux</strong> New Media, einem<br />

Geschäftsbereich der Medialinx AG<br />

Redaktionsanschrift Putzbrunner Str. 71<br />

81739 München<br />

Tel.: 089/993411-0<br />

Fax: 089/993411-99 oder -96<br />

Internet<br />

www.linux-magazin.de<br />

E-Mail<br />

redaktion@linux-magazin.de<br />

Geschäftsleitung<br />

Chefredakteur<br />

stv. Chefredakteure<br />

Redaktionsltg. Online<br />

Brian Osborn (Vorstand), bosborn@linux-magazin.de<br />

Hermann Plank (Vorstand), hplank@linux-magazin.de<br />

Jan Kleinert (V.i.S.d.P.), jkleinert@linux-magazin.de (jk)<br />

Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />

Mathias Huber, mhuber@linux-magazin.de (mhu)<br />

Mathias Huber, mhuber@linux-magazin.de (mhu)<br />

Print- und Onlineredaktion<br />

Aktuell, Forum, Software,<br />

Programmierung Mathias Huber, mhuber@linux-magazin.de (mhu)<br />

Sysadmin, Know-how Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />

Ständige Mitarbeiter Fred Andresen, Zack Brown, Mela Eckenfels, Heike Jurzik (hej),<br />

Anika Kehrer (ake), Peter Kreußel, Charly Kühnast,<br />

Martin Loschwitz, Michael Schilli, Tim Schürmann,<br />

Mark Vogelsberger, Uwe Vollbracht, 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 />

Klaus Manuel Rehfeld, Mike Gajer, Judith Erb (Art Director)<br />

xhoch4, München (Titel-Illustration)<br />

123RF.com, Fotolia.de, Photocase.com, Pixelio.de und andere<br />

Thomas Leichtenstern, tleichtenstern@linux-magazin.de (tle)<br />

<strong>Linux</strong> <strong>Magazin</strong>e International<br />

Joe Casad (jcasad@linux-magazine.com)<br />

<strong>Linux</strong> <strong>Magazin</strong>e Poland<br />

Artur Skura (askura@linux-magazine.pl)<br />

<strong>Linux</strong> <strong>Magazin</strong>e Spain<br />

Paul C. Brown (pbrown@linux-magazine.es)<br />

<strong>Linux</strong> <strong>Magazin</strong>e Brasil<br />

Rafael Peregrino (rperegrino@linuxmagazine.com.br)<br />

Christian Ullrich, cullrich@linux-magazin.de<br />

www.medialinx-shop.de<br />

www.linux-magazin.de/Produkte<br />

Veronika Kramer<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@linux-magazin.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@linux-magazine.com<br />

und weitere Länder Tel.: +1 785 841 8834<br />

Eric Henry, ehenry@linux-magazine.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 – 2012 Medialinx AG<br />

Impressum 12/2012<br />

Service<br />

www.linux-magazin.de<br />

113<br />

Krypto-Info<br />

GnuPG-Schlüssel der <strong>Linux</strong>-<strong>Magazin</strong>-Redaktion:<br />

pub 1024D/44F0F2B3 2000-05-08 Redaktion <strong>Linux</strong>-<strong>Magazin</strong><br />

<br />

Key fingerprint = C60B 1C94 316B 7F38 E8CC E1C1 8EA6 1F22 44F0 F2B3<br />

Public-Key der DFN-PCA:<br />

pub 2048R/7282B245 2007-12-12,<br />

DFN-PGP-PCA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />

<br />

Key fingerprint = 39 D9 D7 7F 98 A8 F1 1B 26 6B D8 F2 EE 8F BB 5A<br />

PGP-Zertifikat der DFN-User-CA:<br />

pub 2048R/6362BE8B (2007-12-12),<br />

DFN-PGP-User-CA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />

<br />

Key fingerprint = 30 96 47 77 58 48 22 C5 89 2A 85 19 9A D1 D4 06<br />

Root-Zertifikat der CAcert:<br />

Subject: O=Root CA, OU=http://www.cacert.org, CN=CA Cert Signing Authority/<br />

Email=support@cacert.org<br />

SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33<br />

MD5 Fingerprint=A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B<br />

GPG-Schlüssel der CAcert:<br />

pub 1024D/​65D0FD58 2003-07-11 [expires: 2033-07-03]<br />

Key fingerprint = A31D 4F81 EF4E BD07 B456 FA04 D2BB 0D01 65D0 FD58<br />

uid CA Cert Signing Authority (Root CA) <br />

Autoren dieser Ausgabe<br />

Fred Andresen Hintertüren 70<br />

Bernhard Bablok Bash Bashing 92<br />

Bernhard Bablok Weg wie warme Semmeln 28<br />

Mela Eckenfels Sehen, hören, zeigen 42<br />

Nils Faerber Arm-Leuchter 80<br />

Rainer Grimm Rasch verschoben 96<br />

Eva-Katharina Kunst Kern-Technik 88<br />

Charly Kühnast World Wide Wechsel 55<br />

Andreas Möller Tux liest 65<br />

Rainer Poisel Tux liest 65<br />

Jürgen Quade Kern-Technik 88<br />

Björn Schilberg Eigene Wege 32<br />

Marlies Rybnicek Tux liest 65<br />

Michael Schilli Papierbuch am Ende 102<br />

Tim Schürmann Fernbedienung 36<br />

Tim Schürmann Sortengerecht angezapft 22<br />

Dr. Manuel Sojer Recycling in der Firma 74<br />

Carsten Zerbst Perfekte Planung 52<br />

Valentin Höbel Stattgegeben 62<br />

Zack Brown Zacks Kernel-News 16<br />

Ralf Spenneberg Zugriff verwehrt 56<br />

Uwe Vollbracht Tooltipps 48


Service<br />

www.linux-magazin.de <strong>Vorschau</strong> 01/2013 11/2012 12/2010 12/2012<br />

114<br />

<strong>Vorschau</strong><br />

01/2013 Dachzeile<br />

E-Mail-Archive im Überblick<br />

© Sony Sivanandan, 123RF<br />

Die Welt von Plug & Play<br />

Anwender, die ein USB-Gerät, einen Router, ein Telefon, ein<br />

Multimediagerät und so weiter irgendwo anstöpseln, erwarten<br />

heute zu Recht, dass sich danach die erwartete Funktionalität<br />

im Wesentlichen von allein einstellt. Gleiches gilt für das Ankoppeln<br />

per WLAN oder Bluetooth.<br />

Das <strong>Linux</strong>-<strong>Magazin</strong> wählt anspruchsvolle Sparten des Reinraus-Universums<br />

aus und erklärt die Abläufe im Hintergrund.<br />

Es geht um Streaming per DLNA und UPNP oder um die Frage,<br />

ob der Sonderweg Avahi zu einem sinnvollen Ziel führt. Und da<br />

Usability- und Security-Niveau sich meist gegenläufig verhalten,<br />

scheint es bei so viel anwenderfreundlichem Automatismus<br />

geboten, auch die dunkle Seite der PnP-Welt zu erkunden.<br />

MAGAZIN<br />

Überschrift<br />

Mails revisionssicher und gesetzeskonform speichern, suchen<br />

und ablegen – das ist nicht leicht und gehört doch zu den geschäftskritischen<br />

IT-Aufgaben jedes Betriebs. Das nächste Heft<br />

hält nach geeigneter Software Ausschau.<br />

Ubuntu 12.10<br />

Neben einigen drastischen Änderungen am Desktop bringt das<br />

neue Ubuntu „Quantal Quetzal“ auch einige weniger auffällige<br />

Neuerungen im Serverbereich mit: Kernel 3.5, Open Stack der<br />

Folsom-Release, das aktualisierte verteilte Speichersystem Ceph<br />

und Apache Tomcat in Version 7.<br />

Begegnung zweier Welten<br />

Die Sprache Scala wählt einen ungewöhnlichen Ansatz und<br />

verbindet funktionale Programmierung mit Objektorientierung.<br />

Diese Mischung ist offenbar für große Anwender, die Firma<br />

Twitter beispielsweise, attraktiv. Scala-Programme laufen auf<br />

der Java Virtual Machine, kein Wunder: Der Sprachenerfinder<br />

Martin Odersky hat einst den Java-Compiler mitentwickelt.<br />

Die Ausgabe 01/2013<br />

erscheint am 6. Dezember 2012<br />

Ausgabe 12/2012<br />

erscheint am 15.11.2012<br />

© Duchessa, sxc.hu<br />

<strong>Linux</strong> und Windows 8<br />

<strong>Linux</strong>-Anwender leben nicht auf einer Insel<br />

der Glückseligkeit: Oft arbeiten die Rechner in<br />

einem Netzwerk mit Windows-Clients, in manchen<br />

Fällen liegt das Betriebssystem aus Redmond<br />

sogar auf derselben Festplatte. Grund<br />

genug also, sich mit Aspekten des Nebeneinanders<br />

zu beschäftigen, etwa dem Austausch von<br />

Daten, Problemen bei der Installation oder dem<br />

einvernehmlichen Miteinander im Netz. In der<br />

kommenden Ausgabe beleuchten wir Lösungsmöglichkeiten, die sich<br />

schnell und praxisnah umsetzen lassen.<br />

Handbrake<br />

Videos zu konvertieren gehört zu den rechenintensivsten und damit<br />

zeitraubendsten Aufgaben am heimischen Rechner. Umso ärgerlicher<br />

ist es, wenn dann falsche Einstellungen für schlechte Ergebnisse sorgen.<br />

Der Konverter Handbrake sorgt mit einer Reihe vordefinierter<br />

Templates für qualitativ verlässlichen Output.<br />

Preiswert navigieren<br />

Ein Navi von Aldi und die freie Software QLandkarte GT helfen beim<br />

Navigieren in der freien Wildbahn. So planen Sie komfortabel am<br />

heimischen PC eine Route, übertragen die Daten auf die Hardware<br />

und laufen anschließend entspannt auf dem ausgetüftelten Weg die<br />

Highlights ab.<br />

Prescribe II<br />

Kyocera stattet seine Drucker mit der<br />

Kommandosprache Prescribe aus,<br />

die es erlaubt, von der Shell<br />

aus komplexe Druckaufträge<br />

und Stapelverarbeitungsläufe<br />

zu steuern und viele<br />

Handgriffe zu automatisieren.<br />

Ein Workshop in der<br />

kommenden Ausgabe demonstriert<br />

die Fähigkeiten<br />

der Sprache im Praxistest.


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 />

• Web: www.linux-magazin.de/probeabo<br />

Mit großem Gewinnspiel unter:<br />

www.linux-magazin.de/probeabo<br />

Gewinnen Sie...<br />

eines von ZEHN „iVORI“ Smartphone Gadgets<br />

Einsendeschluss ist der 15.12.2012<br />

gesponsert von:<br />

.de


Hetzner Online unterstützt mit der<br />

Verwendung von 100% regenerativem<br />

Strom aktiv den Umweltschutz.<br />

Entscheiden Sie sich gemeinsam<br />

mit uns für eine saubere Zukunft.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!