26.02.2014 Aufrufe

Linux-Magazin Einer für alle (Vorschau)

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

11/11<br />

Anzeige:<br />

AKTION!<br />

STRATO MultiServer<br />

STRATO PRO<br />

Server-Technik, die begeistert!<br />

strato-pro.de siehe Seite 37<br />

STR1011_TKS_MultiServer_120x17.indd 1<br />

22.09.2011 10:52:47 Uhr<br />

„<strong>Linux</strong>-Desktop hat<br />

keine Perspektive“<br />

Gnome- und Mono-Erfinder Miguel de Icaza,<br />

der im Interview sein iPad zückt S. 42<br />

Web-Scraping<br />

Websei ten trotz eingebettetem<br />

Javascript automatisch<br />

auswerten S. 104<br />

Init-Systeme<br />

Wie Upstart und Systemd<br />

gegenüber Sys-V-Init<br />

Tempo machen S. 72<br />

<strong>Einer</strong> <strong>für</strong> <strong>alle</strong><br />

Eigene Programme so schreiben, dass sie auf<br />

fast jedem Gerät und Betriebssystem laufen<br />

■ Die portable Py-Side-Lib verheiratet Python und Qt S. 24<br />

■ GTK+-Praxis <strong>für</strong> <strong>Linux</strong>, Windows und OS X S. 30<br />

■ Java ist überall genießbar – wenn die<br />

Zubereitung stimmt S. 34<br />

■ Mono: Dotnet-Klon macht mobil S. 38<br />

■ HTML 5: Browser-Apps mit Canvas, SVG, Web GL<br />

und Raphaël so funktional wie native S. 46<br />

■ Lizenzrecht <strong>für</strong> Multiplattform-Entwickler S. 88<br />

■ Literatur- und Fußnoten-Verwaltungstools<br />

<strong>für</strong> <strong>alle</strong> mit und ohne Doktortitel S. 58<br />

■ Trusted Grub – wie <strong>Linux</strong> seine Integrität<br />

beim Hochfahren prüfen kann S. 80<br />

<strong>Linux</strong> voll Cross: Buildroot erzeugt im Handumdrehen einen Kernel <strong>für</strong> ARM-Systeme S. 96<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 11


Professionelles<br />

Hosting<br />

Cluster-Lösungen<br />

Hochverfügbarkeit<br />

Disaster Recovery<br />

individuelle SLA<br />

Profitieren Sie von:<br />

aktueller Clustertechnologie<br />

ISO 27001 zertifiziertem<br />

Hochsicherheits-Datacenter<br />

Hosting direkt am DE-CIX<br />

IPv4 und IPv6 Anbindung<br />

24/7 Service und Support<br />

Entdecken Sie den Unterschied<br />

Professionelles Hosting mit persönlichem<br />

und kompetentem Support.<br />

Individuelle Hostinglösungen vom Server<br />

bis zum Clustersystem. Beratung, Planung<br />

und Service 24/7.<br />

Wir bieten über 10 Jahre Erfahrung in<br />

Hosting und Systemadministration.<br />

Für mehr Performance, Sicherheit und<br />

Verfügbarkeit, jeden Tag, rund um die Uhr.<br />

www.hostserver.de/hosting<br />

0 30 / 420 200 24 hostserver.de<br />

Berlin Marburg Frankfurt am Main


Ciceros Totenköppe<br />

Login 11/2011<br />

Editorial<br />

„Digital naiv, neoliberal und gefährlich“ – welchen Politikern darf man diese Attribute<br />

anheften? Leser des <strong>Linux</strong>-<strong>Magazin</strong>s antworten auf die Quizfrage sicher<br />

an ders als Autor Volker Schmidt bei Cicero Online, dem „<strong>Magazin</strong> <strong>für</strong> politische<br />

Kul tur“. Er hat unter diesem wenig freundlichem Titel einen Kommentar ver fasst,<br />

der den Erfolg der Piratenpartei bei der Berliner Wahl zum Abgeordnetenhaus zum<br />

Ziel macht. Er wirft der Partei vor, reine Klientelpolitik zu betreiben: „Der moderne<br />

junge Großstadtmensch will im Internet nicht nur kostenlos auf <strong>alle</strong> Inhalte<br />

zu greifen können, er will auch umsonst mit öffentlichen Verkehrsmitteln fahren.“<br />

Dass sich die Piraten eine gewisse Lufthoheit über den Computertischen erkämpft<br />

haben, lässt sich wohl nicht leugnen. Allerdings erscheint das Wahlergebnis<br />

– 8,9 Prozent aus dem Stand – viel zu hoch, als dass Nerds aus Marzahn und<br />

die digitale Bohème in Steglitz es mit ihren Stimmzetteln zu Stande bekämen. Jan Kleinert, Chefredakteur<br />

Autor Schmidt spricht der Partei zudem jede politisch-praktische Lösungskompetenz<br />

ab, wenn er weiter schreibt: „Wie diese Wohltaten finanziert werden, ist den Piraten offenbar egal.“ – ganz<br />

so als würden nicht <strong>alle</strong> Oppositionsparteien so ticken. Schmidt meint zu erkennen: „Technisches Können soll<br />

also mangelndes Verständnis ausgleichen.“ Im Kern hält er die Freibeuter-Partei <strong>für</strong> gefährlich.<br />

Ins gleiche Horn stößt Alexander Marguier im selben <strong>Magazin</strong> – nur schriller. Unter dem Titel „Totengräber der<br />

Demokratie“ interpretiert er das Wahlergebnis als „das Auftrumpfen eines Partei gewordenen Sozialisierungsprojekts<br />

<strong>für</strong> Computer-Nerds“. Und weil die Dose mit den substanzarmen Klischees gerade offen steht, kriegen<br />

die Wähler der Piraten auch gleich ihr Fett weg: „Wer aber eine Außenseiterpartei wählt, nur weil er glaubt, dem<br />

politischen Establishment damit einen Tort antun zu können, schaufelt der Demokratie ihr eigenes Grab.“<br />

Dem lassen sich wieder die 8,9 Prozent der Piraten entgegenhalten: Zu wenig, um die Grablegung der Demokratie<br />

ins nekrophile Kalkül zu ziehen, und zu viel, um es als trotzigen Protest gegen die Regierenden abzutun.<br />

Zudem ergibt die Analyse der Wählerwanderung, dass die Masse der Piraten-Ankreuzer frühere Nichtwähler<br />

sind, also Bürger, denen bisherige Parteien keine Angebote (mehr?) machen können.<br />

Schwer zu sagen, warum sich der Cicero so massiert auf die Piraten einschießt. Vielleicht ist es nur eine Hommage<br />

an den antiken Namenspatron. Der Politiker, Schriftsteller und berühmteste Redner Roms bezeichnete<br />

die Piraten als Feinde der Menschheit, gegenüber denen kein Versprechen und kein Schwur zu halten sei.<br />

Der Artikel 21 des bundesrepublikanischen Grundgesetzes sieht das anders: „Die Parteien wirken bei der politischen<br />

Willensbildung des Volkes mit.“ Wenn sich also in Teilen des Berliner Volks der Wille nach Transparenz<br />

und Informationsfreiheit bildet, gegen Telekommunikationsüberwachung, Lauschangriff, Rasterfahndungen<br />

und Softwarepatente, dann händigt dies der Piratenpartei einen von höchster Stelle gebilligten Kaperbrief zu<br />

Lasten jener Parteien aus, die ihr Pulver lieber bei anderen Themen verschießen. Hier bekommt die Demokratie<br />

kein Grab geschaufelt, sondern politisches Brachland ein neues Bewässerungssystem. Das kann man Cicero<br />

entgegnen. Beiden Ciceros.<br />

www.linux-magazin.de<br />

3<br />

Ihre Meinung ist gefragt<br />

Die Redaktion würde gerne wissen, was Sie über das<br />

<strong>Linux</strong>-<strong>Magazin</strong> denken, damit die Artikel weiterhin Ihre Themen<br />

treffen. Die Umfrage läuft unter [http://www.linuxmagazin.de/umfrage2011]<br />

und dauert nur ein paar Minuten.


Inhalt<br />

www.linux-magazin.de 11/2011 11/2011<br />

4<br />

„<strong>Einer</strong> <strong>für</strong> <strong>alle</strong>“, titelt diese Ausgabe, die Entwicklern helfen will, dass ihr Code auf fast jedem<br />

Gerät und Betriebssystem läuft. Mit der Bibliothek Py Side beispielsweise, die Python<br />

und das Qt-GUI verheiratet. Mit GTK+ gelingt ähnliches. Java-Programmierer haben leichtes<br />

Spiel. Das recht portable Mono ist gerade im Umbruch, und HTML 5 schwer im Kommen.<br />

Aktuell<br />

Titelthema: Plattformunabhängig programmieren<br />

6 N ew s<br />

n Mono Develop lernt Git<br />

n Sony zeigt Android-Tablets<br />

n Mandriva 2011.0 legt Fokus auf KDE<br />

n Neues bei PostgreSQL 9.1<br />

n Roboter-Segler mit <strong>Linux</strong><br />

n Server-Hack bei <strong>Linux</strong> Foundation<br />

24 Py Side<br />

Titel<br />

Programmieren <strong>für</strong> viele Plattformen<br />

er möglicht Py Side. Langwieriges<br />

Kompilieren spart sich der Entwickler<br />

beim Kombinieren von Python und Qt.<br />

34 Java<br />

Java-Entwickler haben es leichter, weil<br />

die JVM ihnen vieles abnimmt.<br />

38 Mono<br />

Titel<br />

Das Dotnet <strong>für</strong> <strong>Linux</strong> durchlebt bewegte<br />

Zeiten: Von Novell-Suse zu Xamarin und<br />

mobilen Devices.<br />

Die KDE-Konferenz Akademy sucht einen Veranstaltungsort<br />

<strong>für</strong> 2012.<br />

Py Side kombiniert Qt-Tools wie den Qt Creator<br />

mit Techniken der Skriptsprache Python.<br />

12 Zahlen & Trends<br />

n Mitchell Baker verteigt Firefox-Releases<br />

n IDC: Servermarkt wächst um 18 Prozent<br />

n Uni Passau forscht zu Mapreduce<br />

n Libre entfernt sich von Open Office<br />

n Citrix gibt Cloudstack-Code frei<br />

n Oracle ändert Lizenz des JDK<br />

n Der soziale Netzwerker ermüdet<br />

20 Zacks Kernel-News<br />

n Langfristige Pläne: LTS-Kernel<br />

n Angriff auf Kernel.org-Server<br />

22 Open-Suse-Konferenz 2011<br />

Nach der Übernahme durch Attach mate<br />

engagiert sich Suse weiter <strong>für</strong> den Kernel.<br />

Kernel-Prominenz bei der Open-Suse-Konferenz:<br />

Greg Kroah-Hartman.<br />

30 GTK+<br />

Mit Python und GTK+ ist eine GUI-Anwendung<br />

schnell geschrieben. Mit ein paar<br />

Tricks auch <strong>für</strong> Windows und OS X.<br />

Das GUI-Tool Glade hilft dem Entwickler beim<br />

Erstellen von Anwendungen. Mit der Maus<br />

klickt er die Oberfläche zusammen.<br />

Knoppix 6.7.1<br />

TOOL<br />

TOOL<br />

Knopper legt nach: Stabiler 32- und<br />

64-Bit-Kernel 3.0.4, DRI-Module aus<br />

Debian Testing, Libre Office 3.4.3<br />

Fog rollt aus<br />

TOOL<br />

Virtual Appliance verwaltet<br />

Windows-PC-Pools unter <strong>Linux</strong><br />

Er glaubt nicht mehr an den <strong>Linux</strong>-Desktop:<br />

Gnome- und Mono-Gründer Miguel de Icaza.<br />

46 HTML 5<br />

Wirklich platt formun<br />

ab hän gig: Grafik<br />

und 3-D programmieren<br />

mit Can -<br />

vas aus HTML 5,<br />

Grafiken und Anima<br />

tionen per SVG<br />

und Raphaël.<br />

DELUG-DVD<br />

TOOL<br />

Dual-Layer-DVD, Details auf S. 57<br />

TOOL<br />

E-Book gratis<br />

Statt im Internet-Download<br />

<strong>für</strong> 28 Euro: „Visionäre der<br />

Programmierung“<br />

Debconf 2011<br />

Debian inside: Vier Stunden<br />

neue Videos aus Banja Luka<br />

Interaktive Vektorgrafiken<br />

im Browser<br />

dank SVG und HTML 5


11/2011 11/2011<br />

Inhalt<br />

58 Summa cum Laude<br />

Moderne Tools zur Literaturverwaltung<br />

helfen, bei wissenschaftlichen Arbeiten<br />

den Überblick über die verwendeten<br />

Quellen zu behalten.<br />

72 Konkurrenz am Start<br />

Das Hochfahren von Systemdiensten<br />

erledigt traditionell das System-V-Init-<br />

System. Doch mit Upstart und Systemd<br />

kommt starke Konkurrenz auf.<br />

104 Abgesaugt<br />

Daten ohne Browser aus dem Web auf<br />

sam meln gelingt mit Perl sehr leicht.<br />

Wie das mit dynamisch generierten<br />

Inhalten klappt, zeigt der Perlmeister.<br />

www.linux-magazin.de<br />

5<br />

Software<br />

Sysadmin<br />

Know-how<br />

57 Einführung<br />

Auf der DELUG-DVD: Knoppix 6.7.1, dazu<br />

Fog und das E-Book „Visionäre der<br />

Programmierung“ von O'Reilly.<br />

58 Bitparade<br />

Titel<br />

Vier Literaturverwaltungen <strong>für</strong> Studium<br />

und Beruf unter <strong>Linux</strong> im Test.<br />

71 Einführung<br />

Aus dem Alltag eines Sysadmin: S3QL<br />

bringt Charlys Fotos in die Cloud.<br />

72 Upstart, Systemd, Initd<br />

Titel<br />

Die Klassiker System-V-Init und BSD-Init<br />

im Vergleich mit den überaus erfolgreichen<br />

Newcomern Upstart und Systemd.<br />

96 Kern-Technik 59<br />

Titel<br />

<strong>Linux</strong> plattformübergreifend: Die<br />

Skriptsammlung Buildroot erzeugt<br />

Kernel <strong>für</strong> ARM-Systeme.<br />

80 Trusted Boot<br />

Titel<br />

Das Trusted Platform Module TPM findet<br />

sich auf immer mehr Mainboards. Mit IMA<br />

und Trusted Grub gelingt das Absichern<br />

der Hardware auch unter <strong>Linux</strong>.<br />

Die Architekturliste des Kernels findet sich im<br />

Unterverzeichnis »arch«.<br />

Programmieren<br />

Jabref, Zotero, Mendeley und Refworks bewahren<br />

den Doktoranden vor dem Titelverlust.<br />

Power<br />

on<br />

1. Start<br />

Bios<br />

2. Boot von USB<br />

3. Bootloader<br />

6. Authentifizierung<br />

Trusted<br />

Grub<br />

4. Bootmenü<br />

5. SC-Init<br />

USB-<br />

Stick<br />

Initial<br />

Ramdisk<br />

9. Mount<br />

8. HD-Key<br />

Application<br />

loader<br />

OS-<br />

Kernel<br />

11. bootet OS<br />

OS<br />

13. Authentifizierung<br />

15. Anwendungs-<br />

Key<br />

Anwendung<br />

102 Bash Bashing - Folge 17<br />

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

Frage- und Antwort-Spielchen mit Read.<br />

68 Tooltipps<br />

Cromfs, Justsniffer, Massh, Mount-GTK,<br />

MP3-Diags und die Rename Utils.<br />

TPM<br />

7. Integritätscheck<br />

(optional)<br />

PCR (Platform Configuration Registers)<br />

10. booten<br />

des Kernels<br />

12. Application<br />

loader<br />

16. Anwendungsstart<br />

14. Integritätscheck<br />

Reichlich komplex ist die Chain of Trust, wenn<br />

der Admin mit TPM, Smart Cards, Trusted<br />

Grub und dem Kernel ein System absichert.<br />

Forum<br />

„Welche Datei möchten Sie gerne verschieben?“,<br />

fragt die Bash den Anwender.<br />

Justsniffer schneidet die TCP-Kommunikation<br />

eines Rechners mit.<br />

Service<br />

3 Editorial<br />

108 IT-Profimarkt<br />

111 Seminare<br />

112 Inserenten, Veranstaltungen<br />

113 Impressum, Autoren<br />

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

88 Recht<br />

Titel<br />

Die plattformübergreifende<br />

Programmierung kennt so einige<br />

Stolpersteine in Sachen Lizenzrecht.<br />

91 Bücher<br />

Zwei Bücher <strong>für</strong><br />

Programmierer<br />

über die „Scalable<br />

Language“ Scala.<br />

92 Leserbriefe<br />

Auf den Punkt gebracht.<br />

104 Perl-Snapshot<br />

Titel<br />

Mike Schillis Perl-Skript holt dynamisch<br />

generierte Werte aus Webseiten. Das<br />

Screen-Scraping interpretiert mittlerweile<br />

auch Javascript.<br />

Beispiel Tomato: Aus der Übersichtsseite des<br />

Routers zieht das Perl-Skript dessen Uptime.


Aktuell<br />

www.linux-magazin.de News 11/2011<br />

6<br />

News<br />

Mono Develop 2.6 kann besser mit Git<br />

Mono Develop, eine Entwicklungsumgebung<br />

<strong>für</strong> Mono,<br />

die freie Dotnet-Umsetzung,<br />

ist in Version<br />

2.6 erhältlich. Zu den<br />

Neuerungen gehört<br />

die deutlich verbesserte<br />

Git-Integration,<br />

die laut dem Entwickler<br />

Lluis Sanchez der<br />

Bibliothek Ngit zu verdanken<br />

ist.<br />

Sie kennt neben den<br />

üblichen Kommandos<br />

zur Versionskontrolle<br />

auch Git-Eigenheiten<br />

wie Push, Rebase und Stash.<br />

Miguel de Icaza, Chef der<br />

Zur umfassenden Git-Unterstützung in Mono Develop 2.6<br />

gehört auch dieser Dialog <strong>für</strong> die Auswahl des Remote-Zweigs.<br />

Mono-Firma Xamarin, hebt<br />

zudem die Mac-Unterstützung<br />

hervor: Mono<br />

Mac ermögliche<br />

das Erzeugen nativer<br />

Cocoa-Anwendungen<br />

samt<br />

nativer Dateidialoge<br />

auf Apples<br />

Betriebssystem.<br />

Als Starthilfe<br />

<strong>für</strong> Entwickler<br />

gibt es Templates.<br />

Außerdem verwendet<br />

Mono<br />

De velop nun einen<br />

einheitlichen Quelltext-<br />

Editor <strong>für</strong> GTK#, ASP.NET,<br />

Mono Touch und Mono Droid.<br />

C- und C++-Entwickler erhalten<br />

verbesserte Navigation,<br />

Ctags helfen beim Vervollständigen<br />

der Symbole.<br />

Mono Develop ist unter der<br />

LGPLv2.1 lizenziert. Version<br />

2.6 steht im Quelltext, in<br />

<strong>Linux</strong>-Paketen <strong>für</strong> Debian,<br />

Ubuntu und Open Suse sowie<br />

in Binärdateien <strong>für</strong> Windows<br />

und Mac OS X unter [http://​<br />

​monodevelop.​com/​Download] zum<br />

Download bereit.<br />

n<br />

Sony stellt leistungsfähige Android-Tablets vor<br />

Dem Tablet-<strong>Einer</strong>lei anderer<br />

Hersteller begegnete Sony auf<br />

der Internationalen Funkausstellung<br />

2011 mit Tablet S und<br />

Tablet P, die sich nicht nur<br />

optisch deutlich von der Konkurrenz<br />

abheben. Beide Sonys<br />

arbeiten mit Android 3.2 und<br />

setzen auf Nvidias Tegra-2-<br />

Plattform, die eine Dual core-<br />

CPU mit 1 GHz Taktfrequenz<br />

Blickfänger auf der IFA: Sonys Tablet P (links) klappt zusammen wie ein Brillenetui, das Tablet<br />

S (rechts) besticht ebenfalls durch eigenwillige Formen. Beide laufen unter Android.<br />

antreibt. Der Android-System-<br />

Benchmark Antutu attestiert<br />

dem Duo auch respektable<br />

Leistungsfähigkeit.<br />

Während das Tablet P mit<br />

4726 Punkten aufwartet, kam<br />

das Tablet S auf 4723. Ordentliche<br />

Werte, die das von Toshiba<br />

vorgestellte AT 200 deutlich<br />

in den Schatten stellen.<br />

Vor <strong>alle</strong>m in der CPU-Performance<br />

erreichten die Sony-<br />

Geräte beinahe doppelt so<br />

hohe Werte, obwohl eine<br />

1,2- GHz-Dualcore-CPU das<br />

Toshi ba-Tablet antreibt.<br />

Die Form des Tablet P erinnert<br />

an ein Brillenetui, das in beiden<br />

Hälften ein Display mit<br />

einer Diagonale von je 5,5<br />

Zoll und einer Auflösung von<br />

je 1024 mal 480 Bildpunkten<br />

besitzt. Je nach Einsatz<br />

dient der untere<br />

Teil als Tastatur oder<br />

Steuerung <strong>für</strong> Spiele,<br />

aber auch als Ergänzung<br />

zum oberen<br />

Display.<br />

Das Tablet S wartet<br />

mit einem eigenwilligen,<br />

V-förmigen<br />

Profil auf, das laut<br />

Sony ergonomisch<br />

günstig in der Hand liegen<br />

soll. Das 9,4 Zoll große Display<br />

bietet eine Auflösung von<br />

1200 mal 800 Pixeln. Als Besonderheit<br />

gibt der Hersteller<br />

dem Gerät noch eine Infrarot-<br />

Schnittstelle, die aus ihm eine<br />

Multifunktions-Fernbedienung<br />

werden lässt.<br />

Die WLAN-Variante des Tablet<br />

S soll bereits Ende September<br />

zu einem Preis von 480 Euro<br />

<strong>für</strong> die 16-GByte-Version und<br />

580 Euro <strong>für</strong> das 32-GByte-<br />

Modell erhältlich sein. Im November<br />

folgt die 3G-Version<br />

<strong>für</strong> 600 Euro. Das Tablet P<br />

bringt Sony voraussichtlich<br />

ebenfalls im November zu einem<br />

Preis von 600 Euro auf<br />

den Markt. Derzeit ist <strong>für</strong> die<br />

P-Ausgabe nur eine 16-GByte-<br />

Version vorgesehen. n


File Tea arbeitet an Dateiversand per Browser<br />

Das Projekt File Tea möchte<br />

anonymes Filesharing per<br />

Webbrowser ermöglichen.<br />

Der Entwickler Eduardo Lima<br />

Mitev von der spanischen<br />

Softwarefirma Igalia möchte<br />

damit ein Problem lösen, das<br />

viele Internetbenutzer kennen:<br />

Sie wollen jemandem eine Datei<br />

zukommen lassen, die zu<br />

groß <strong>für</strong> den Mailversand ist.<br />

Sie möchten sich aber nicht<br />

bei einem kostenpflichtigen<br />

Onlinedienst anmelden oder<br />

ihren Kommunikationspartner<br />

mit Werbe-Einblendungen<br />

oder Wartezeiten belästigen.<br />

Derzeit befindet sich die<br />

Open-Source-Software noch<br />

im Alphastadium.<br />

File Tea setzt lediglich einen<br />

modernen Browser wie<br />

Google Chrome, Chromium<br />

oder Firefox ab Version 4 voraus,<br />

Plugins sind nicht erforderlich.<br />

Ohne Anmeldung<br />

zieht der Anwender seine<br />

Datei per Drag & Drop ins<br />

Browserfenster, die daraufhin<br />

in einer Liste erscheint. Für<br />

eine oder mehrere Dateien erhält<br />

er dann eine URL, die er<br />

Mandriva 2011.0 – Fokus auf KDE<br />

dem Abholer schickt. Dabei<br />

speichert File Tea die Dateien<br />

nicht dauerhaft auf dem Server<br />

und begrenzt das Datenvolumen<br />

nicht.<br />

File Tea steht unter der freien<br />

Lizenz AGPLv3 und ist<br />

im Quellcode erhältlich. Wer<br />

möchte, kann also seinen eigenen<br />

Dienst betreiben.<br />

Einen Eindruck des Dienstes<br />

vermittelt eine Demo-Installation<br />

unter [http://​filetea.​me].<br />

Den Quellcode stellt der Entwickler<br />

unter [https://​gitorious.​<br />

​org/​filetea] zur Verfügung. n<br />

Apache schließt<br />

DoS-Lücke<br />

Mit Version 2.2.20 des populären<br />

Apache-HTTP-Servers<br />

schließen die Entwickler eine<br />

Lücke, die zum Denial of Service<br />

genutzt werden konnte.<br />

Das Apache-Projekt hat die<br />

„Range Header DoS Vulnerability“,<br />

die auch als Apache-<br />

Killer bekannt ist, in den<br />

Apache-Webservern 1.3 und<br />

2.x geschlossen. Die <strong>Linux</strong>-<br />

Distributionen dürften zwischenzeitlich<br />

<strong>alle</strong> das aktuelle<br />

Paket ausliefern.<br />

Der Download des Servers<br />

erfolgt über die Spiegelseiten<br />

[http://​httpd.​apache.​org/​lists.​html]<br />

des Apache-HTTP-Projekts .n<br />

News 11/2011<br />

Aktuell<br />

www.linux-magazin.de<br />

7<br />

Mit KDE 4 als einzigem mitgelieferten<br />

Desktop geht Mandriva<br />

2011.0 ins Rennen. In<br />

der Ankündigung heißt es,<br />

dass Desktopumgebungen<br />

wie Gnome und Xfce zwar<br />

weiterhin von der Community<br />

angeboten werden, aber nicht<br />

mehr zu den offiziellen Mandriva-Paketen<br />

zählen. Ziel der<br />

Konzentration auf KDE ist es,<br />

Mandriva zur ausgefeiltesten<br />

KDE-Distribution überhaupt<br />

zu machen.<br />

Mit der Ausgabe 2011.0 beginnt<br />

zugleich ein neuer Produktionszyklus,<br />

der jedes Jahr<br />

eine neue Release verspricht,<br />

die dann 18 Monate Support<br />

bekommt. Die LTS-Ausgabe<br />

von Mandriva 2011 soll zum<br />

Jahresende erscheinen, <strong>für</strong><br />

den Long Term Support gelten<br />

drei Jahre Unterstützung<br />

mit Updates.<br />

An Neuerungen listen die Entwickler<br />

die Funktion Timeframe<br />

<strong>für</strong> den Dateimanager<br />

Nepomuk auf. Damit sucht<br />

der Nutzer nicht in Ordnern<br />

nach Dateinamen, sondern<br />

fährt, sofern er sich an das<br />

Datum erinnert, auf der<br />

Zeitleiste zum gewünschten<br />

Zeitpunkt, an dem Dateien<br />

gespeichert wurden, um sie<br />

wiederzufinden.<br />

Den schnellen Programmstart<br />

übernimmt das Simple-<br />

Welcome-Menü, das Kickoff<br />

ersetzt. Zu den aktualisierten<br />

Bestandteilen zählen der<br />

Kernel 2.6.38.7, GCC 4.6.1,<br />

Firefox 5.0.1 und Libre Office<br />

Simple Welcome: Schneller Programmstart in Mandriva.<br />

3.4.2. Noch in Entwicklung<br />

stecke der Mandriva Package<br />

Manager (MPM), der deshalb<br />

noch nicht standardmäßig<br />

enthalten ist. Er soll dann mit<br />

Mandriva 2011 LTS zum Einsatz<br />

kommen.<br />

Die Relase Notes unter [http://<br />

wiki.mandriva.com/en/2011.0_Notes]<br />

ge ben Update-Hinweise und<br />

verlinken zum Download der<br />

unterschiedlichen Mandriva-<br />

Geschmacksrichtungen. n<br />

Dillo wird<br />

Distro-tauglich<br />

Der Ressourcen-schonende<br />

Webbrowser Dillo ist in Version<br />

3.0 erhältlich. Mit dieser<br />

Release haben die Entwickler<br />

ein Problem gelöst, das den<br />

kleinen Browser am Einzug<br />

in zahlreiche <strong>Linux</strong>-Distributionen<br />

hinderte: Bisher setzte<br />

Dillo die Version 2 des GUI-<br />

Toolkits FLTK ein, die als experimentell<br />

gilt. Nun haben<br />

die Dillo-Macher den Code auf<br />

die stabile FLTK-Version 1.3<br />

portiert. Diese taugt <strong>für</strong> Distributionen,<br />

was dem Browser<br />

den Boden bereitet.<br />

Beim Portieren haben die Entwickler<br />

Bugs behoben und die<br />

CSS-Unterstützung verbessert.<br />

Außerdem darf der Anwender<br />

nun mehrere Suchmaschinen<br />

in seine Konfigurationsdatei<br />

eintragen. Für Mac OS X gibt<br />

es nun eine native Build. Dillo<br />

steht als Quelltext-Tarball zum<br />

Download auf [http://www.dillo.<br />

org/download/].<br />

n


Aktuell<br />

www.linux-magazin.de News 11/2011<br />

8<br />

<strong>Linux</strong> am Ruder<br />

Unter den 15 teilnehmenden<br />

autonomen, unbemannten Segelbooten,<br />

so genannten Roboter-Seglern,<br />

hat ein österreichisches<br />

Forscherteam mit<br />

seinem ASV Roboat bei der<br />

World Robotic Sailing Championship<br />

(WRSC) 2011 bei Lübeck<br />

den Titel geholt. Das internationale<br />

Teilnehmerfeld<br />

Das Roboat bei einer autonomen Wettfahrt bei Lübeck.<br />

der Meisterschaft mit Teams<br />

aus den USA, Großbritannien,<br />

Israel, Deutschland und Österreich<br />

hat sich an den fünf<br />

Tagen in unterschiedlichen<br />

Disziplinen einen Wettkampf<br />

geliefert.<br />

Am Ende gewann das österreichische<br />

Boot mit dem Team<br />

der österreichischen Gesellschaft<br />

<strong>für</strong> innovative Computerwissenschaften<br />

(INNOC)<br />

mit nur einem Punkt Vorsprung<br />

vor den Booten der<br />

Universität Lübeck. Die Österreicher<br />

sind seit Jahren erfolgreich<br />

und holten sich damit<br />

bereits den vierten WM-Titel.<br />

Das siegreiche <strong>Linux</strong>-Gefährt<br />

mit dem Namen Roboat ist<br />

rund 3,70 Meter lang und<br />

wiegt 300 Kilogramm.<br />

Wettkämpfe sind aber nicht<br />

der <strong>alle</strong>inige Zweck der WM,<br />

es gab auch in Lübeck eine<br />

begleitende Konferenz, die<br />

dem Austausch der teilnehmenden,<br />

meist von Universitäten<br />

und Forschungseinrichtungen<br />

stammenden Teams,<br />

dient. Das österreichische<br />

Boot werde derzeit auch in<br />

der internationalen Walforschung<br />

eingesetzt, heißt es in<br />

einer Mitteilung.<br />

n<br />

Trisquel 5.0<br />

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

ist in Version 5.0 erschienen.<br />

Die Release verwendet Kernel<br />

2.6.38 in einer <strong>Linux</strong>-Libre-<br />

Version, also ohne proprietäre<br />

Treiber und Firmware. Das<br />

entspricht der allgemeinen<br />

Philosophie der Distribution,<br />

die ausschließlich auf freie<br />

Softwarekomponenten setzt.<br />

Zur weiteren Ausstattung gehören<br />

Libre Office 3.3.3 sowie<br />

der Mozilla-basierte Abrowser<br />

in Version 6.02.<br />

Trisqel 5.0 ist wahlweise mit<br />

Gnome 2.32 oder in der Lightweight-Ausgabe<br />

mit LXDE als<br />

Desktopumgebung erhältlich.<br />

Bei der letzteren kommen<br />

außerdem Ressourcen-schonende<br />

Anwendungen wie<br />

Abiword zum Einsatz. Weitere<br />

Informationen sowie ISO-<br />

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

​trisquel.​info].<br />

n<br />

Updates bei Qt-SDK und anderen Tools<br />

Icinga 1.5 bringt neues Reporting-Modul<br />

Nokias Update auf Qt Creator<br />

2.3 bringt Neuerungen in weiteren<br />

Entwicklerwerkzeugen<br />

mit sich. So hat der Qt Simulator<br />

1.2 ein überarbeitetes<br />

User Interface und Simulationsmöglichkeiten<br />

<strong>für</strong> Sensoren<br />

und NFC-Tags mitbekommen.<br />

Beim Notifications-API<br />

1.1 führen die Entwickler<br />

QML-Bindings ein.<br />

Außerdem liegt eine<br />

neue Betaversion<br />

von Meego 1.2<br />

(Harmattan) vor,<br />

die zwar keine<br />

weiteren Features<br />

gegenüber der Vorversion<br />

einführt,<br />

<strong>für</strong> Entwickler von<br />

Apps aber trotzdem<br />

zur Pflicht Entwickler.<br />

gehören soll. Qt selbst ist in<br />

Version 4.7.4 dabei.<br />

Mit installiertem SDK funktioniere<br />

das Einspielen der Updates<br />

über die Anwendung<br />

»Update Qt SDK«. Für Einsteiger<br />

gibt es die Qt-SDK-Versionen<br />

<strong>für</strong> <strong>Linux</strong>, Windows und<br />

Mac OS X unter [http://​labs.​qt.​<br />

​nokia.​com].<br />

n<br />

Qt Creator in Version 2.3 bringt Neuerungen <strong>für</strong><br />

Eine neue Release des Nagios-<br />

Nachfolgers Icinga steht zum<br />

Download bereit. Ein Highlight<br />

der neuen Version ist die<br />

Integration eines Reporting-<br />

Moduls in Form eines Plugin<br />

(eines Cronk in der Sprechweise<br />

der Icinga-Gemeinde).<br />

Das Modul basiert auf Jasper<br />

Reports und stellt automatisiert<br />

Berichte zusammen, die<br />

es auch verteilt.<br />

Mehr als 20 Templates erleichtern<br />

zudem den Prozess <strong>für</strong><br />

die am häufigsten vorkommenden<br />

Fälle. Das umfasst<br />

zum Beispiel eine Auflistung<br />

der fehlerträchtigsten Services<br />

im Beobachtungszeitraum<br />

oder auch Zusammenstellungen<br />

<strong>für</strong> bestimmte Host- oder<br />

Servicegruppen.<br />

Daneben gilt das Augenmerk<br />

der Entwickler der Erweiterbarkeit.<br />

Sie ersetzten daher<br />

das externe Icinga-API durch<br />

einen internen Datenbank-<br />

Layer, der mit verschiedenen<br />

Backends wie Oracle, My SQL<br />

oder PostgreSQL zurechtkommt<br />

und einfach abzufragen<br />

ist. Die Rückwärtskompatibilität<br />

zu älteren Icinga-<br />

Versionen bleibt dennoch<br />

gewahrt.<br />

Mit der neuen Icinga-Version<br />

[https://​www.​icinga.​org/​2011/​08/​24/​<br />

​icinga‐1‐5‐released/] haben sich<br />

die Entwickler außerdem dazu<br />

entschlossen, einen neuen<br />

Release-Zyklus einzurichten,<br />

bei dem immer eine Betaversion<br />

einer fertigen Release<br />

vorausgehen soll.<br />

n


VMware Workstation 8<br />

VMware Workstation ist in<br />

Version 8 verfügbar, die nach<br />

Angaben des Herstellers 50<br />

neue Funktionen enthält. Ein<br />

neues Feature erlaubt es Anwendern<br />

von Workstation 8<br />

beispielsweise, ihre virtuellen<br />

Maschinen per Drag & Drop<br />

in VMware Vsphere zu verschieben.<br />

Die Entwickler haben das GUI<br />

um einfachere Menüs, Live-<br />

Miniaturansichten, verbesserte<br />

Einstellungsbildschirme<br />

und eine neue VM-Bibliothek<br />

erweitert. Ein neues Sharing-<br />

Feature erlaubt es, virtuelle<br />

Maschinen mit anderen Anwendern<br />

zu teilen, um etwa<br />

Teamarbeit zu unterstützen.<br />

Neu ist auch die Unterstützung<br />

von HD Audio mit<br />

7.1-Surround-Sound, USB 3.0<br />

und Bluetooth-Geräten sowie<br />

bis zu 64 GByte RAM.<br />

Der VMware-Manager Chris<br />

Young kommentiert das Update<br />

mit einem Seitenhieb auf<br />

Oracles Desktop-Virtualisierungsprodukt:<br />

„Unser Team<br />

versteht die Bedürfnisse der<br />

Nutzer und hat in Workstation<br />

8 bedeutende Verbesserungen<br />

vorgenommen, die es einfacher<br />

machen, über die Virtual<br />

Box hinauszukommen.“<br />

Die VMware Workstation 8<br />

[http://​www.​vmware.​com/​products/​<br />

​workstation/] ist zu einem Preis<br />

von 200 US-Dollar verfügbar.<br />

Die Vorgängerversionen<br />

VMware Workstation 6.x und<br />

7.x sind weiterhin <strong>für</strong> 100 US-<br />

Dollar zu haben.<br />

n<br />

PostgreSQL 9.1 bringt viel Neues<br />

Die Datenbank PostgreSQL<br />

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

Zu den Neuerungen zählt die<br />

synchrone Replikation <strong>für</strong><br />

PostgreSQL-Cluster mit mehreren<br />

Nodes. Dabei kann auf<br />

Wunsch neben dem Master<br />

auch der Standby-Server eine<br />

Transaktion bestätigen (2-safe<br />

Replication), was Datenverlusten<br />

effektiv vorbeugt.<br />

Ebenfalls neu ist das Indexingverfahren<br />

K-Nearest-Neighbor<br />

(KNN), das <strong>für</strong> Textsuchen,<br />

Ähnlichkeitssuchen und Geodaten<br />

mathematische Distanzen<br />

berechnet. PostgreSQL<br />

gehört zu den ersten Datenbanken,<br />

die KNN einsetzen.<br />

Im Interesse der weiteren<br />

Beschleunigung lässt sich in<br />

der neuen Version das Logging<br />

<strong>für</strong> temporäre Daten, Informationen<br />

zu Websessions<br />

und dergleichen abschalten.<br />

Das verspricht laut [http://​<br />

​www.​postgresql.​org] eine Performancesteigerung<br />

auf das<br />

Zehnfache im Vergleich zu<br />

Tabellen mit Logging.<br />

Eine Neuerung, die eher der<br />

Funktionalität zugute kommt,<br />

ist die ab sofort spaltenweise<br />

verschieden einstellbare Sortierreihenfolge.<br />

Auch die Sicherheit<br />

haben die Entwickler<br />

der Datenbank verbessert, so<br />

gibt es nun unter anderem die<br />

vollständige Unterstützung <strong>für</strong><br />

SE <strong>Linux</strong>.<br />

n<br />

News 11/2011<br />

Aktuell<br />

www.linux-magazin.de<br />

9<br />

Server-Hack bei <strong>Linux</strong> Foundation<br />

Die <strong>Linux</strong> Foundation hat<br />

ihren Webauftritt vorübergehend<br />

vom Netz genommen,<br />

da sie davon ausgeht, dass<br />

Nutzerdaten kompromittiert<br />

wurden. Die Organisation informierte<br />

am 11. September<br />

2011 <strong>alle</strong> Benutzer per Mail<br />

über einen Einbruch auf<br />

<strong>Linux</strong>.com und <strong>Linux</strong>foundation.org.<br />

Möglicherweise<br />

wurden dabei Nutzerdaten<br />

wie Log in-Name, Passwort,<br />

E-Mail-Adresse und andere<br />

Angaben gestohlen.<br />

Linus Torvalds’ Arbeitgeber<br />

geht davon aus, dass der Angriff<br />

mit dem Einbruch auf<br />

Kernel.org zusammenhängt<br />

(siehe „Kernel-News“). n<br />

9<br />

Kieler Open Source<br />

und <strong>Linux</strong> Tage<br />

28. + 29. Oktober 2011<br />

10.00 - 17.00 Uhr im Kitz<br />

Schauenburgerstr. 116, Kiel<br />

kubuntu<br />

Multimedia eCommerce<br />

Ausstellung Community<br />

IPv6<br />

Freifunk Schule<br />

Groupware Git<br />

Workshops<br />

Musterbüro<br />

Vorträge<br />

www.marktrausch.com<br />

Auf der Website der <strong>Linux</strong> Foundation gab es tagelang nicht viel zu sehen.<br />

unterstützt von:


Aktuell<br />

www.linux-magazin.de News 11/2011<br />

10<br />

Kurznachrichten<br />

Network Manager 0.9: In vielen <strong>Linux</strong>-Distributionen verwendete<br />

Netzwerktools-Sammlung. Neu: Komplett überarbeitetes API mit neuem<br />

Nutzerinterface und ebensolchen Konfigurationsmöglichkeiten. Administratoren<br />

finden ein neues Berechtigungsmodell, das die administrativen<br />

Aufgaben ebenso erleichtern soll wie das Einrichten unterschiedlicher<br />

Nutzerzugänge. Auf Hardware-Seite steht Unterstützung <strong>für</strong> Intels<br />

Wimax-Geräte als Neuerung. Lizenz: GPL [http://​projects.​gnome.​org/​<br />

​NetworkManager/]<br />

Monitorix 2.3.0: In Perl geschriebene Monitoring-Software. Neu: Statistiken<br />

zur NFS-Nutzung zählen nun zum Repertoire, dabei berücksichtigt<br />

die Software sowohl Server- als auch Client-Seite und unterstützt die<br />

NFS-Versionen 2, 3 und 4. Auf Wunsch der Anwender ermöglicht es die<br />

Konfigurationsvariable »NETSTATS_IN_BPS«, bei <strong>alle</strong>n Netzwerkstatistiken<br />

zwischen Byte/​s und Bit/​s als Einheit zu wechseln. Lizenz: GPLv2 [http://​<br />

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

Open SSH 5.9: Freie SSH-Implementierung. Neu: Mit Systrace, Seatbelt<br />

und Rlimit sind drei Sandboxes an Bord, die beim Konfigurieren ausgewählt<br />

werden können. Außerdem gibt es ein Sandbox-Verfahren <strong>für</strong><br />

privilegierte Child-Prozesse. Letzteres ist experimentell, soll aber als<br />

»UsePrivilegeSeparation=sandbox«-Modus zur Standardeinstellung avancieren.<br />

Lizenz: BSD [http://​openssh.​com]<br />

Bazaar 2.4: Von Canonical gefördertes freies Versionskontrollsystem.<br />

Neu: Mit dieser Version startet eine neue Long-Term-Stable-Serie der<br />

Software. Bis Februar 2013 erhält die 2.4 Bugfixes und bleibt ansonsten<br />

unverändert. Lizenz: GPLv2 [http://​bazaar.​canonical.​com/​en/]<br />

Ruby on Rails 3.1: Populäres Webframework. Neu: Grundlegende Änderungen<br />

in der Architektur beschleunigen die Komprimierung von CSS-<br />

Stylesheets und Javascript-Dateien und machen deren Verarbeitung<br />

strukturierter. Stylesheets lassen sich nun auch in den Sprachen SASS<br />

und HAML abfassen, die das Rails-Framework in das endgültige CSS konvertiert.<br />

Lizenz: MIT [http://​rubyonrails.​org]<br />

Eekboard 1.0: Erste stabile Version eines On-Screen-Keyboards <strong>für</strong> Fedora.<br />

Neu: Der benutzerfreundlicher Ansatz des Entwicklers Daiki Ueno lässt<br />

es zu, dass Finger das Anwenders von einer falschen Taste zur richtigen<br />

rutschen, ohne einen falschen Tastendruck auszulösen. Bei längerer Berührung<br />

löst die Software mehrere Anschläge aus. Lizenz: GPLv3 [http://​<br />

​blog.​du‐a.​org/​?​p=855]<br />

Udev-Discover 0.2.1: GUI-Anwendung zum Durchblättern der Hardware-<br />

Informationen. Neu: Das Programm verwendet die Udev-Schnittstelle und<br />

kann Informationen und Eigenschaften der im Sys-FS des <strong>Linux</strong>-Kernels<br />

vorhandenen Geräte anzeigen. Daneben lassen sich die Einträge auch<br />

durchsuchen und filtern, einzelne Geräte kann der Benutzer auf Events<br />

überwachen. Lizenz: GPLv3 [http://​fontanon.​org/​udevdiscover/]<br />

Panoptes 1.6: Eine freie Monitoring-Software <strong>für</strong> Hosts und Netzwerke.<br />

Neu: Das Tool führt nun eine Historie der ausgegebenen Warnmeldungen.<br />

Daneben kann es Meldungen an Twitter verschicken, und auf der<br />

Weboberfläche ersetzen interaktive Dojo-Charts die bisherigen RRDtool-<br />

Diagramme. Zudem kann der Anwender Downtimes aufgrund wiederkehrender<br />

Wartungstermine konfigurieren. Lizenz: GPLv3 [https://​github.​<br />

​com/​redsox38/​panoptes/​wiki]<br />

KDE sucht Austragungsort <strong>für</strong> Akademy 2012<br />

Mit dem so genannten „Call<br />

for Hosts“ sucht das KDE-<br />

Projekt einen geeigneten<br />

Gastgeber <strong>für</strong> die Entwicklerkonferenz<br />

Akademy im kommenden<br />

Jahr. Die gewünschte<br />

Lokalität sollte in oder in<br />

der Nähe von Europa liegen<br />

und auch einen nicht zu weit<br />

entfernten internationalen<br />

Flughafen<br />

aufweisen.<br />

Außerdem müssen<br />

geeignete Konferenzräume<br />

zur Verfügung<br />

stehen, die<br />

verschiedene Vortragsreihen,<br />

Workshops<br />

und Sitzungen<br />

aufnehmen und<br />

schnellen Internetzugang<br />

anbieten.<br />

Hotels sowie günstige<br />

Verpflegungsmöglichkeiten<br />

und<br />

sonstige Unterkünfte<br />

sollten ebenfalls <strong>für</strong> rund<br />

400 dort erwartete Gäste vorhanden<br />

sein – so viele Besucher<br />

hatte die Akademy zu<br />

Drangzeiten im Jahr 2010. Gegen<br />

Ende der Akademy werden<br />

es weniger.<br />

Ein Datum steht noch nicht<br />

fest, eine Akademy beginnt<br />

aber am Freitag und dauert<br />

aufgeteilt in Konferenz, Meeting<br />

und Hacking Sessions bis<br />

zum folgenden Freitag. Der<br />

veranstaltende KDE e.V. hat<br />

<strong>alle</strong> Anforderungen in einem<br />

Host-PDF unter [http://​ev.​kde.​<br />

​org/​akademy/​CallforHosts_2012.​pdf]<br />

zusammengefasst. n<br />

Wollen beherbergt sein – die Besucher der Akademy, hier in Tampere, Finnland, im Jahr 2010.<br />

Gentoo pflegt<br />

verwaiste Software<br />

Der Gentoo-Entwickler Markos<br />

Chandras hat mit Kollegen<br />

das Projekt Proxy Maintainers<br />

ins Leben gerufen, das verwaiste<br />

Softwarepakete vorübergehend<br />

pflegt, damit das<br />

Tree-Cleaning-Team sie nicht<br />

entfernt. Interessierte können<br />

Waisen vorübergehend<br />

adoptieren, ohne Gentoo-Entwickler<br />

zu sein. Das Projekt<br />

Proxy Maintainers vermittelt<br />

ihnen Kontakt zu offiziellen<br />

Entwicklern, die die Ebuilds<br />

überprüfen und ins Quelltext-<br />

Repository einspielen.<br />

Wer den Gentoo-Machern helfen<br />

will, sollte mit dem Aufbereiten<br />

von Software <strong>für</strong> Gentoo<br />

vertraut sein. Weitere<br />

Hinweise gibt es auf der Seite<br />

der Proxy Maintainers unter<br />

[http://​www.​gentoo.​org/​proj/​en/​qa/​<br />

​proxy‐maintainers/​index.​xml]. (ofr/<br />

jcb/tle/uba/mhu)<br />

n


Private Cloud<br />

Lösungen<br />

Erstellen Sie Ihr virtuelles<br />

Datacenter in Sekundenschnelle<br />

Einrichtungsgebühr<br />

595 €<br />

GESCHENKT<br />

Erwecken Sie Ihre Projekte zum Leben, indem<br />

Sie virtuelle Maschinen und Ressourcen hinzufügen<br />

und passen Sie diese Infrastruktur in Echtzeit an<br />

▪<br />

eine auf Ihre Bedürfnisse erweiterbare Infrastruktur<br />

inklusive VMware Funktionen zur sicheren und direkten<br />

Verwaltung Ihrer Ressourcen<br />

Ab<br />

509, 90 €<br />

inkl. MwSt./<br />

Monat<br />

Berechnen Sie Ihre Kosten und bestellen Sie direkt auf<br />

unserer Website www.ovh.de/pcc oder kontaktieren Sie unsere<br />

Berater unter der 0049 (0) 681 906 730<br />

Sie finden unseren<br />

Prospekt in dieser<br />

Ausgabe<br />

Europas Webhoster Nr. 1<br />

Quelle NetCraft – Juni 2011<br />

Domains | E-Mails | Hosting | VPS | Server | Private Cloud | Cloud | SMS | Telefonie<br />

OVH.DE


Aktuell<br />

www.linux-magazin.de Zahlen & Trends 11/2011<br />

12<br />

Zahlen & Trends<br />

Mitchell Baker verteidigt die Geburtenrate des Firefox<br />

Die im sechswöchigen Rhythmus<br />

erscheinenden Browser-<br />

Versionen des Firefox sorgen<br />

<strong>für</strong> reichlich lange Gesichter<br />

bei Firmen und Addon-Entwicklern.<br />

Mozilla-Vorstand<br />

Mitchell Baker verteidigt die<br />

Strategie nun als notwendige<br />

Reaktion auf das dynamische<br />

Internet.<br />

Vorausschau: Mozillas ambitionierte Roadmap <strong>für</strong> den Firefox-Browser sorgt <strong>für</strong><br />

Diskussionen unter den Firmenanwendern und Entwicklern.<br />

Baker zeigt in ihrem Blogbeitrag<br />

[http://​blog.​lizardwrangler.​<br />

​com/​2011/​08/​25/​rapid‐release‐process/]<br />

Verständnis <strong>für</strong> die Probleme<br />

von Firmenkunden,<br />

deren meist konservative Update-Strategie<br />

durch die<br />

schnellen Release-Wechsel ins<br />

Wanken kommt, und auch da<strong>für</strong>,<br />

dass Addon-Entwickler zu<br />

kämpfen haben, um ihre Zusatzsoftware<br />

kompatibel zu<br />

halten. Für diese Probleme<br />

seien gemeinsame Lösungen<br />

zu finden, so Baker.<br />

Dennoch, so schreibt sie,<br />

seien Rapid-Releases die richtige<br />

Antwort auf die schnellen<br />

Änderungen im WWW.<br />

Vor der Umstellung hätte es<br />

teilweise neue Entwicklungen<br />

gegeben, die über ein<br />

Jahr warten mussten, bevor<br />

sie Nutzer und Webentwickler<br />

im Firefox vorfanden. Das<br />

sei eine <strong>für</strong> beide Seiten sehr<br />

lange Wartezeit. Browser<br />

seien das Transportmittel des<br />

Internets und sollten mit der<br />

sich dort schnell verändernden<br />

Entwicklung mithalten<br />

können, so Baker.<br />

Release-Zyklen, wie sie bei<br />

Standardsoftware üblich sind,<br />

wären da<strong>für</strong> völlig ungeeignet.<br />

Der Browser als Interface<br />

zum Internet müsse auch so<br />

funktionieren wie das Web –<br />

mit schnellen Reaktionen auf<br />

Veränderungen.<br />

n<br />

IDC: Servermarkt wächst um 18 Prozent<br />

Mit einem Umsatzwachstum<br />

von rund 18 Prozent gegenüber<br />

dem Vorjahr bewertet<br />

der US-Marktforscher IDC<br />

den weltweiten Servermarkt<br />

im zweiten Quartal 2011. Der<br />

Umsatz entspricht weltweit<br />

laut IDC 13,2 Milliarden US-<br />

Dollar. Den Serverherstellern<br />

spült es damit bereits<br />

im sechsten Quartal in Folge<br />

ständig wachsende Umsatzraten<br />

im Vergleich zu den jeweiligen<br />

Vorjahresabschnitten in<br />

die Bilanz.<br />

In verkauften Geräten ausgedrückt,<br />

spiegelt sich das<br />

Wachstum mit plus 8,5 Prozent<br />

wider, was laut IDC<br />

rund 2 Millionen Einheiten<br />

entspricht und insgesamt<br />

ein sehr erfolgreiches zweites<br />

Quartal markiert. Von der<br />

steigenden Nachfrage profitieren<br />

<strong>alle</strong> drei berücksichtigten<br />

Geräteklassen: Volume,<br />

Midrange und High-End. Der<br />

Einstiegsbereich und die Mittelklasse<br />

steigerten den Umsatz<br />

um rund 17 Prozent. Die<br />

High-End-Maschinen haben<br />

gegenüber dem zweiten Quartal<br />

2010 einen Anstieg um fast<br />

23 Prozent geschafft.<br />

Die Marktführung teilen sich<br />

IBM und HP mit einem geringfügig<br />

besseren Marktanteil<br />

<strong>für</strong> IBM (30,5 Prozent).<br />

Dell liegt mit rund 14 Prozent<br />

Marktanteil auf dem dritten<br />

Platz. Oracle und Fujitsu folgen<br />

mit je rund 7 Prozent.<br />

Die Nachfrage nach <strong>Linux</strong>-<br />

Servern verzeichnet bereits<br />

seit sieben Quartalen in Folge<br />

einen Anstieg, im zweiten<br />

Quartal 2011 gar einen um<br />

47 Prozent auf 2,1 Milliarden<br />

Dollar Umsatz. <strong>Linux</strong>-Server<br />

stehen <strong>für</strong> 20 Prozent des Gesamtumsatzes.<br />

Im Vergleich<br />

dazu: Windows-Server erzeugten<br />

einen Umsatz von<br />

fast 6 Milliarden US-Dollar<br />

und kommen auf einen Marktanteil<br />

von 71 Prozent. n<br />

Die Top 5 im Servermarkt. Der Umsatz ist in Millionen US-Dollar angegeben.<br />

© IDC


Uni Passau forscht zu Mapreduce<br />

Die Deutsche Forschungsgemeinschaft<br />

(DFG) hat der<br />

Universität Passau ein Forschungsvorhaben<br />

zu Googles<br />

Rechenframework Mapreduce<br />

<strong>für</strong> große, verteilte Datenmengen<br />

bewilligt. Die Technologie<br />

dient zum verteilten Auswerten<br />

sehr großer Datenbestände<br />

in Rechenclustern. Dabei setzt<br />

sie <strong>für</strong> die Auswertungen die<br />

zwei Arbeitsschritte Map und<br />

Reduce aus der funktionalen<br />

Programmierung ein. Das Uni-<br />

Projekt mit dem Titel Mapreduce<br />

Foundation soll unter<br />

anderem <strong>für</strong> Typsicherheit in<br />

der Mapreduce-Programmierung<br />

sorgen.<br />

Die Koordination des Projekts<br />

liegt bei Professor Dr. Christian<br />

Lengauer und seinem<br />

Kollegen Dr. Sven Apel von<br />

der Passauer Fakultät <strong>für</strong> Informatik<br />

und Mathematik:<br />

[http://​www.​fmi.​uni‐passau.​de] n<br />

© Universität Passau<br />

Jobbeschreibung <strong>für</strong> Map und Reduce. Aus den gegebenen Input-Quellen ist das<br />

Vorkommen eines Wortes zu zählen.<br />

Libre Office bewegt sich weg<br />

Virtuelle Server<br />

Top-Performance zum Tiefpreis!<br />

Michael Meeks, bei Novell<br />

angestellter Entwickler, der<br />

seinen Teil zu Libre Office beiträgt,<br />

hat die Codebasis von<br />

Libre Office und Open Office<br />

verglichen und sich dabei auf<br />

die enthaltenen C++-Dateien<br />

konzentriert. Nach Meeks Diff<br />

gegen die inzwischen von<br />

Apache gehütete Codebasis<br />

von Open Office hat Libre Office<br />

seit dem Fork 678 Dateien<br />

entfernt, viele davon seien<br />

obsolet gewordenen Filter <strong>für</strong><br />

alte Programmversionen, 55<br />

Streichungen gab es rund um<br />

den OS/​2-Code.<br />

Im Gegenzug sind aber 914<br />

neue Dateien hinzugekommen,<br />

<strong>alle</strong>in 380 davon durch<br />

IBMs Lotusword-pro-Filter,<br />

schreibt Meeks in seinem Blog<br />

[http://​people.​gnome.​org/​~michael/ ​<br />

​blog/​2011‐09‐06.​html]. Kleinere<br />

Portionen haben etwa VBA-<br />

Verbesserungen, RTF-Importfilter<br />

und Open XML beigetragen.<br />

In Codezeilen ausgedrückt<br />

haben die Libre-Office-<br />

Entwickler 526 000 Zeilen<br />

entfernt und dann wieder<br />

290 000 hinzugefügt. Insgesamt<br />

kommt Meeks in seinem<br />

Vergleich auf einen Bestand<br />

von 21 500 Dateien.<br />

Meeks schließt aus den Diff-<br />

Resultaten und den vielen<br />

Änderungen gegenüber Open<br />

Office, dass es zwischen den<br />

beiden Office-Projekten <strong>alle</strong>s<br />

andere als den oft vermuteten<br />

1:1-Austausch gäbe. Er<br />

sieht nicht ganz ohne Sorge,<br />

dass es eine Art gegenseitiges<br />

Rosinenpicken geben werde,<br />

so Meeks. Konflikte beim<br />

Zusammenführen von Code<br />

seien damit künftig wohl<br />

wahrscheinlich, prognostiziert<br />

der Entwickler.<br />

n<br />

• bis zu 3 CPU-Kerne<br />

• bis zu 8 GB RAM<br />

• bis zu 95 GB Festplatte<br />

• RAID-10-Datensicherheit<br />

• 5.000 GB Traffic inklusive<br />

• SSL-Zertifikat inklusive<br />

• Root-Zugriff per SSH<br />

• 100 % Backup-Speicher<br />

• 99,9 % garantierte Verfügbarkeit<br />

• 30 Tage Geld-zurück-Garantie<br />

• auch als Managed Server erhältlich<br />

• viele 64-Bit-Betriebssysteme nach Wahl<br />

6 Monate<br />

kostenlos<br />

danach ab 12,99 €*<br />

Jetzt kostenlos informieren unter:<br />

080 0 638 2587<br />

www.netclusive.de/linux<br />

* Aktion „6 Monate kostenlos“ gilt bis 31.10.2011. Nach 6 Monaten regulärer monatlicher Grundpreis:<br />

VPS L 12,99 €, VPS XL 16,99 €, VPS XXL 29,99 €. Die Mindestvertragslaufzeit beträgt wahlweise 12 Monate<br />

(Aktion 6 Monate kostenlos entfällt) oder 24 Monate (6 Monate kostenlos). Abrechnung vierteljährlich. Einmalige<br />

Einrichtungsgebühr 9,99 €. Alle Preise inkl. MwSt. Preisänderungen und Irrtümer vorbehalten.


Aktuell<br />

www.linux-magazin.de Zahlen & Trends 11/2011<br />

14<br />

Firefox <strong>für</strong> Tablets im Entwurfsstadium<br />

Der anhaltende Trend zu Tablets<br />

lässt auch Mozilla nicht<br />

kalt. Der <strong>für</strong> den mobilen Bereich<br />

zuständige Entwickler<br />

Ian Barlow hat einige Designmerkmale<br />

des kommenden<br />

Browsers <strong>für</strong> die derzeit angesagten<br />

Tablet-PCs vorgestellt.<br />

Der Tablet-Firefox gilt als Weiterentwicklung<br />

des bestehenden<br />

Mozilla-Browsers <strong>für</strong><br />

Smartphones und kommt laut<br />

Barlows Blogeintrag [http://​<br />

​ianbarlow.​wordpress.​com/​2011/​08/​<br />

​30/​firefox‐for‐tablets/] ebenfalls<br />

mit minimalistischen Elementen,<br />

ohne die Firefox-Anmutung<br />

zu verlieren. So ist die<br />

Awesome-Bar mit den Menü-<br />

Einträgen zu Lesezeichen,<br />

Browserhistory und den Möglichkeiten<br />

zur Synchronisation<br />

vorhanden.<br />

Anders als die kleinen Smartphone-Bildschirme<br />

bieten Tablets<br />

mehr Platz. Mozilla holt<br />

deshalb einige beim Handy-<br />

Browser radikal entfernte Elemente<br />

wieder zurück, dazu<br />

zählen Tabs. Wird das Tablet<br />

horizontal gehalten, wandern<br />

die Tabs nach links außen, wo<br />

sie in Reichweite des Daumens<br />

liegen, so Barlow. n<br />

Generalüberholung <strong>für</strong> <strong>Linux</strong> Counter<br />

Mit der Frage, wie viele Nutzer<br />

<strong>Linux</strong> hat, beschäftigt sich<br />

der <strong>Linux</strong> Counter schon seit<br />

1999. Nun hat sich das dahinterstehende<br />

<strong>Linux</strong> Counter<br />

Project nach längerer Tatenlosigkeit<br />

<strong>für</strong> eine Auffrischung<br />

des Zählers<br />

entschieden. Übersichtlicher<br />

mit neuen Statistikfunktionen,<br />

so lautet<br />

die Kurzfassung, wie<br />

Projektmitglied Alexander<br />

Mieland schreibt.<br />

Der Counter habe eine<br />

neue Programmierung<br />

erhalten und soll auch<br />

mit <strong>Linux</strong>counter.net eine<br />

neue Adresse bekommen.<br />

Die bestehende URL [http://<br />

counter.li.org] werde umgeleitet,<br />

sobald die Datenbestände<br />

umgezogen sind.<br />

n<br />

Zählwerk <strong>für</strong> die <strong>Linux</strong>-Nutzer – der <strong>Linux</strong><br />

Counter in alter Optik.<br />

Erste Web Devcon<br />

in Hamburg<br />

Unter dem Namen Web Devcon<br />

findet am 17. und 18.<br />

Oktober in Hamburg eine<br />

neue Konferenz <strong>für</strong> Webentwickler<br />

statt. Auf dem Programm<br />

stehen CSS 3, Jquery<br />

sowie die Rich Internet Applications<br />

(RIA) mit Javascript<br />

und REST. Weitere Themen<br />

sind die Zukunft von PHP,<br />

Continuous Integration mit<br />

Jenkins, Oauth 2.0, mobile<br />

Webapplikationen, Testing<br />

und Berichte aus der Praxis.<br />

Am 19. Oktober findet zudem<br />

die Partnerkonferenz Mobile<br />

Devcon 2011 statt.<br />

Die kostenpflichtige Veranstaltung<br />

im Intercontinental<br />

Hotel in Hamburg wird von<br />

den Zeitschriften „Web-Developer“<br />

und „Mobile-Developer“<br />

ausgerichtet. Das Ticket<br />

<strong>für</strong> beide Tage der Web Devcon<br />

[http://​www.​web‐devcon.​de/]<br />

kostet 950 Euro. Daneben gibt<br />

es <strong>für</strong> 185 Euro ein reduziertes<br />

Ticket <strong>für</strong> Studenten und<br />

einen 3-Tage-Pass. n<br />

Citrix erklärt Cloudstack-Code <strong>für</strong> frei<br />

Citrix gibt mit der neuesten<br />

Version 2.2.9 das duale Entwicklungsmodell<br />

der Cloudplattform<br />

Cloudstack auf<br />

und den kompletten Code<br />

frei. Citrix hatte Cloudstack<br />

zusammen mit der Plattform<br />

Cloud.com erworben.<br />

Cloudstack umfasst eine Programmierschnittstelle<br />

und<br />

Management-Tools <strong>für</strong> den<br />

Betrieb eigener Cloudplattformen.<br />

Produktiv eingesetzt wird<br />

Cloudstack nach Angaben<br />

von Citrix von über 60<br />

Firmen und Organisationen,<br />

darunter große<br />

Unternehmen wie Nokia<br />

und Godaddy. Auch<br />

die auf Virtual Computing<br />

spezialisierte<br />

Firma Zynga nutzt<br />

Cloudstack. Bislang<br />

gab es <strong>für</strong> die kommerzielle<br />

und die Open-<br />

Source-Variante der<br />

Plattform zwei verschiedene<br />

Entwicklungsstränge,<br />

doch dieses<br />

duale Modell gehört nun<br />

der Vergangenheit an.<br />

Cloudstack unterstützt die<br />

Hypervisor-Systeme VMware,<br />

Xenserver, die Xen Cloud Platform,<br />

KVM und beginnend<br />

mit der aktuellen Version<br />

2.2.9 jetzt auch die Oracle<br />

VM. Als freies Softwareprojekt,<br />

vor <strong>alle</strong>m von der<br />

Firma Citrix vorangetrieben,<br />

macht Cloudstack dem V-<br />

Cloud-Produkt von VMware<br />

Konkurrenz, deren neues Lizenzmodell<br />

ein entsprechender<br />

Blogeintrag als „vTax“<br />

bezeichnet.<br />

Weil Cloudstack aufgrund des<br />

ähnlichen Namens leicht mit<br />

dem Openstack-Projekt zu<br />

verwechseln ist und sich die<br />

beiden Projekte auch funktional<br />

überschneiden, arbeitet<br />

Citrix daran, die beiden<br />

Cloud-Frameworks in Zukunft<br />

zu integrieren. Pakete von<br />

Cloudstack <strong>für</strong> Centos 5 und ​<br />

6, Ubuntu und Fedora 14 sind<br />

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

​download.​html] zu finden. n<br />

Cloudstack in Aktion – hier der sichere Zugang zur VM über die Konsole.


1&1 DUAL HOSTING<br />

DOPPELT SICHER!<br />

DOPPELT GUT...<br />

Dual Hosting gibt’s nur von 1&1! Kein anderer<br />

bietet Ihnen georedundante Sicherheit und<br />

maximale Performance <strong>für</strong> Ihre Projekte.<br />

✓<br />

Maximal sicher:<br />

Par<strong>alle</strong>les Hosting Ihrer Website in zwei Hightech-<br />

Rechenzentren an verschiedenen Orten!<br />

✓ Superschnell:<br />

210 GBit/s Anbindung!<br />

✓ Zukunftssicher:<br />

1.000 Mitarbeiter!<br />

&<br />

ANGEBOTE NUR BIS 31.10.2011:<br />

1&1 DUAL PERFECT<br />

6 MONATE<br />

6 Domains aus .de, .com, .net, .org, .at, .eu<br />

5 GB Webspace<br />

€<br />

0,–In den ersten<br />

6 Monaten,<br />

danach<br />

9,99 €/Monat.*<br />

UNLIMITED Traffic<br />

UNLIMITED Click & Build Apps uvm.<br />

.de, .eu, .com, .net, .org, .at<br />

0, OHNE EINRICHTUNGSGEBÜHR! 29*<br />

€/Monat<br />

ab<br />

im ersten Jahr<br />

Weitere leistungsstarke<br />

1&1 Dual Hosting-Pakete<br />

und tolle Sparangebote<br />

unter www.1und1.info Ausgabe 08/11<br />

0 26 02 / 96 91<br />

0800 / 100 668 www.1und1.info<br />

&1 * Dual Perfect 1 6 Monate <strong>für</strong> 0,– €/Monat, danach 9,99 €/Monat. Einrichtungsgebühr 9,60 €. Domains im ersten Jahr .de, .eu 0,29 €/Monat, .com, .net, .org, .at 0,99 €/Monat, danach .de<br />

0,49 €/Monat, .eu , .com, .net, .org 1,49 €/Monat, .at 1,99 €/Monat. Einrichtungsgebühr entfällt. 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt.


Aktuell<br />

www.linux-magazin.de Zahlen & Trends 11/2011<br />

16<br />

Oracle ändert Lizenz des JDK <strong>für</strong> <strong>Linux</strong><br />

Oracle hat mit Erscheinen von<br />

Java 7 die Operating System<br />

Distributor License for Java<br />

(DLJ) gestrichen und verweist<br />

<strong>Linux</strong>-Distributionen auf das<br />

freie Open JDK. Die Projekte<br />

und Firmen können damit<br />

nicht länger native Pakete<br />

auf Basis von Oracles JDK<br />

anbieten. Auf der bislang <strong>für</strong><br />

die Distributionen relevanten<br />

Java-Webseite heißt es, die<br />

DLJ sei obsolet und damit<br />

auch die damit zusammenhängende<br />

Projekt-Webseite.<br />

Die DLJ war zwar keine freie<br />

Lizenz, erlaubte aber die Weiterverteilung.<br />

Der von Oracle als Community-Manager<br />

beschäftigte Dalibor<br />

Topic erläutert in seinem<br />

Blog [http://robilad.livejournal.<br />

com/90792.html]: Die DLJ sei<br />

2006 als eine Zwischenlösung<br />

eingeführt worden, um <strong>Linux</strong>-<br />

Distributionen den Zugriff auf<br />

Java zu gewähren, bis das<br />

Projekt Open JDK gereift sei.<br />

Da dieses nun die Basis <strong>für</strong><br />

das Oracle Java JDK bilde, sei<br />

der Zeitpunkt <strong>für</strong> die Umstellung<br />

gekommen.<br />

Debian und Ubuntu liefern bereits<br />

Open JDK aus, aber noch<br />

stecken darin einige Bugs. Daher<br />

ist es in einigen Fällen nötig,<br />

die offiziellen Java-Pakete<br />

von Oracle einzuspielen.<br />

Sylvestre Ledru, der Debian-<br />

Paketbauer dieser JDK-Pakete,<br />

meldete sich ebenfalls zu Wort<br />

und schreibt: Generell sei der<br />

Weg hin zu Open JDK zu begrüßen,<br />

dennoch komme die<br />

Aufkündigung der Lizenz abrupt.<br />

Es gäbe bei Open JDK<br />

noch einige Probleme und<br />

Baustellen. Nicht zuletzt zeigen<br />

die Popularity Contests<br />

von Debian und Ubuntu, dass<br />

mehr Nutzer das Paket »sunjava6-jre«<br />

verwenden als die<br />

freie Alternative »openjdk-6-<br />

jre«. Als Konsequenz ruft der<br />

Entwickler dazu auf, mögliche<br />

Fehler im Open JDK ab sofort<br />

im Bugtracker von Debian zu<br />

melden, um die freie Alternative<br />

schnell konkurrenzfähig<br />

zu machen<br />

n<br />

Java-Erfinder<br />

verlässt Google<br />

Es war ein kurzes Gastspiel,<br />

das Java-Erfinder James Gosling<br />

nach seinem Abschied<br />

von Oracle/Sun als Angestellter<br />

von Google gab. Schon<br />

nach einem halben Jahr<br />

wechselt er nun zu einem<br />

Startup. Liquid Robotics, Goslings<br />

neuer Arbeitgeber, beschäftigt<br />

sich mit autonomen<br />

Tauchrobotern. Gosling hatte<br />

nach der Übernahme durch<br />

Oracle Sun verlassen und bei<br />

Google angeheuert. Gosling<br />

ist bei Liquid Robotics als<br />

Chief Software Architekt angestellt<br />

und wird sich um die<br />

Software in den Robotern und<br />

der Gegenstelle kümmern. n<br />

Jeder sechste Deutsche ohne Internet<br />

Der soziale Netzwerker ermüdet<br />

© Eurostat<br />

Eine Untersuchung des Statistischen<br />

Bundesamtes [http://​<br />

​www.​destatis.​de] hat ergeben,<br />

dass 17 Prozent der Bevölkerung<br />

zwischen 16 und 74 Jahren<br />

weder privat noch beruflich<br />

das Internet genutzt hat.<br />

In der Altersklasse von 55 bis<br />

74 Jahren ist mit 42 Prozent<br />

der Löwenanteil zu finden. In<br />

den jüngeren Altersklassen<br />

liegt der Anteil hingegen jeweils<br />

unter 10 Prozent.<br />

Das Bundesamt hat die Daten<br />

bereits 2010 im Zuge einer europaweiten<br />

Studie erhoben.<br />

Bei dem von der europäischen<br />

Kommission angestrengten<br />

EU-weiten Vergleich liegt<br />

Schweden mit nur 7 Prozent<br />

der 16- bis 74-Jährigen ohne<br />

Interneterfahrung vorne, gefolgt<br />

von den Niederlanden<br />

mit 8 Prozent. In Rumänien,<br />

Griechenland und Bulgarien<br />

liegt der Anteil gemäß der Untersuchung<br />

bei über 50 Prozent.<br />

Der europaweite Durchschnitt<br />

ist mit 26 Prozent angegeben.<br />

n<br />

Europäer zwischen 16 und 74 Jahren, die das Internet weder zu Hause noch bei<br />

der Arbeit nutzen.<br />

Soziale Netze wie Facebook<br />

und Twitter haben Millionen<br />

Nutzer weltweit in ihren Bann<br />

gezogen. Nun sind laut Marktforscher<br />

Gartner erste Ermüdungserscheinungen<br />

festzustellen.<br />

Bei einer Umfrage<br />

unter rund 6300 Personen im<br />

Alter zwischen 13 und 74 Jahren<br />

in elf Ländern zeigte sich<br />

die Nutzerschaft in ihrem Enthusiasmus<br />

gespalten.<br />

Es seien überwiegend Jüngere<br />

gewesen, die unter den 37<br />

Prozent der Befragten zu finden<br />

waren, die sich verstärkt<br />

in sozialen Netzen engagieren.<br />

Bei den 24 Prozent, die<br />

weniger aktiv sind, sei eine<br />

Altersgruppe nicht derart klar<br />

auszumachen, heißt es von<br />

Gartner, da<strong>für</strong> aber eine bestimmte<br />

Gruppe, die Early Adopter,<br />

bei denen inzwischen<br />

Überdruss herrsche. Auch der<br />

Nachwuchs, den Gartner als<br />

mobil und markenbewusst<br />

charakterisiert, zeige sich<br />

schnell gelangweilt.<br />

In Ländern mit hohen Teilnehmerzahlen<br />

in sozialen Netzen<br />

ist der Trend zur Übersättigung<br />

ausgeprägter, Russland<br />

und Brasilien sind als Beispiele<br />

genannt. Analyst Brian<br />

Blau empfiehlt den Netzwerken,<br />

diese Trends ernst zu<br />

nehmen. Die neue Generation<br />

der Konsumenten bringe nur<br />

eine kurze Aufmerksamkeitsspanne<br />

mit und müsse mit<br />

Innovationen und originellem<br />

Content bei der Stange gehalten<br />

werden.<br />

Bei konkreten Faktoren, warum<br />

eine geringere Nutzung<br />

eingesetzt habe, nannten 33<br />

Prozent Bedenken hinsichtlich<br />

ihrer Privatsphäre als<br />

Grund. Datenschutz und dessen<br />

technische Umsetzung<br />

zähle daher nebst Aufklärung<br />

der Nutzer zu den wichtigen<br />

Themen <strong>für</strong> soziale Netze. n


FÜR EIN SICHERES GEFÜHL!<br />

Professionelle InterNetX Server-Lösungen.<br />

Wir entwickeln mit Ihnen Ihr Sicherheitskonzept<br />

und stellen individuell konfigurierte Server bereit.<br />

24/7 Support durch geschulte Techniker<br />

Zertifiziertes Tier 3 Data Center<br />

1 GBit/s Uplink ohne Begrenzung<br />

Nur Markenhardware von DELL ® , CISCO ® , AMD ®<br />

Jetzt informieren:<br />

www.internetx.eu<br />

DOMAINS<br />

GRATIS*<br />

www.internetx.eu<br />

*Das Angebot richtet sich nur an Gewerbetreibende und kann in der Zeit vom 1.10. bis 31.12.2011 über www.internetx.eu bestellt werden. Die Domain-Registrierung betrifft ausschließlich .EU-Neuregistrierungen<br />

(bis zu 10 Domains gratis) <strong>für</strong> das 1. Jahr. Die Policies der Registry EURid sind maßgeblich. Weitere Informationen unter: www.internetx.eu


Aktuell<br />

www.linux-magazin.de Zahlen & Trends 11/2011<br />

18<br />

PC-Markt: China überholt die USA<br />

Der vierteljährliche Blick des<br />

US-Marktforschers IDC sieht<br />

China an der Spitze des weltweiten<br />

PC-Marktes, gemessen<br />

an verkauften Geräten. Die<br />

bisher führenden USA sind<br />

im zweiten Quartal 2011 mit<br />

knappem Rückstand auf Platz<br />

zwei gelandet. Der chinesische<br />

Markt hat im zweiten<br />

Quartal demnach 18,5 Million<br />

Einheiten im Wert von<br />

© IDC<br />

fast 12 Milliarden US-Dollar<br />

geschluckt. 17,7 Millionen Geräte<br />

und 11,7 Milliarden Dollar<br />

stehen auf Seiten des US-<br />

Markts in der IDC-Analyse. In<br />

Marktanteilen am Weltmarkt<br />

ausgedrückt, entspricht das<br />

22 Prozent <strong>für</strong> China und 21<br />

Prozent <strong>für</strong> die USA.<br />

Der erste Platz soll den Vereinigten<br />

Staaten – auf das ganze<br />

Jahr 2011 betrachtet – nach<br />

den Prognosen der Auguren<br />

jedoch erhalten bleiben,<br />

wenn auch ebenso knapp wie<br />

der jetzt zu verschmerzende<br />

Rückstand. 73,5 Millionen Geräte<br />

gehen voraussichtlich bis<br />

Ende des Jahres in den USA<br />

in den Handel, 72,4 Millionen<br />

in China. Das Jahr 2012 dürfte<br />

China dann aber definitiv auf<br />

die Überholspur bringen, so<br />

IDC in seiner Mitteilung. n<br />

Die People’s Republic of China (PRC) überholt die USA bei den PC-Verkäufen. Der Ausblick <strong>für</strong> das Jahr 2012 prognostiziert<br />

der Ablösung Bestand.<br />

Microsoft umgarnt<br />

Web-OS-Entwickler<br />

Nachdem Hewlett-Packard<br />

das mit Palm übernommene<br />

Mobil-Betriebssystem Web<br />

OS einer ungewissen Zukunft<br />

überlassen hat, reagiert<br />

Microsoft und versucht Entwickler<br />

<strong>für</strong> sein Windows<br />

Phone zu gewinnen. Der<br />

Microsoft-Mitarbeiter Brandon<br />

Watson von der Sparte<br />

Windows-Phone-Entwicklung<br />

hat via Twitter Web-OS-Entwicklern,<br />

die eine Veröffentlichung<br />

vorweisen können,<br />

ein Angebot mit kostenlosen<br />

Windows-Geräten, Tools und<br />

Trainings unterbreitet. Watson<br />

ist nach eigenen Angaben <strong>für</strong><br />

Apps und Entwickler gleichermaßen<br />

zuständig.<br />

n<br />

Ubuntu Friendly<br />

sucht Feedback<br />

Das Projekt Ubuntu Friendly<br />

will Rechner und Hardware<br />

identifizieren, die sich gut mit<br />

Ubuntu verstehen, und bittet<br />

da<strong>für</strong> um Rückmeldung von<br />

Ubuntu-Nutzern [https://​wiki.​<br />

​ubuntu.​com/​UbuntuFriendly]. Dabei<br />

geht es dem Projekt nicht<br />

nur um Berichte fortgeschrittener<br />

<strong>Linux</strong>-Anwender, gefragt<br />

sind auch Einsteiger. Gemeinsam<br />

an <strong>alle</strong> Anwender geht<br />

der Auftrag, zu berichten, wie<br />

Ubuntu 11.10 auf ihren Rechnern<br />

läuft.<br />

Daraus soll eine freie Datenbank<br />

entstehen, die zu Ubuntu<br />

kompatible Hardware <strong>für</strong> jede<br />

Version von Ubuntu nennt.<br />

Eine speziell <strong>für</strong> die Datensammlung<br />

entworfene Anwendung<br />

namens Checkbox<br />

befinde sich zwar noch in der<br />

Entwicklung, laufe aber bereits<br />

gut. <br />

n<br />

Apache reitet weiter an der Spitze<br />

Die monatliche Webserver-<br />

Erhebung des Analysespezialisten<br />

Netcraft hat <strong>für</strong> den<br />

Apache-Webserver im September<br />

2011 mit einem Anteil<br />

von 65 Prozent einen stabilen<br />

Führungsplatz ergeben. Netcraft<br />

hat 485 173 671 Websites<br />

nach dem darunterliegenden<br />

Server untersucht.<br />

Der Apache hat sich rund 14<br />

Millionen neue Hostnames<br />

geangelt und kommt auf eine<br />

Gesamtzahl von 315 Millionen.<br />

Auf den weiteren Plätzen<br />

folgen dann Microsofts Webserver<br />

mit knapp 16 Prozent,<br />

Nginx mit 8 Prozent und der<br />

Google-Server mit 3,5 Prozent.<br />

Der freie Nginx kann ebenfalls<br />

ein starkes Wachstum verbuchen<br />

und knabbert besonders<br />

dem Microsoft-Server seine<br />

Anteile ab.<br />

n<br />

Anteile im lauf der Jahre – der Apache hat dabei seine Vormachtstellung in<br />

jüngster Zeit ausgebaut.<br />

© Netcraft<br />

9. Kieler <strong>Linux</strong>- und<br />

Open-Source-Tage<br />

Am 28. und 29. Oktober 2011<br />

beherbergt das Kieler Innovations-<br />

und Technologiezentrum<br />

(KITZ) die 9. Kieler<br />

<strong>Linux</strong>-Tage mit Themen rund<br />

um freie Software und <strong>Linux</strong>.<br />

Der Veranstalter, die Kieler<br />

<strong>Linux</strong> Initiative (Kielux), will<br />

mit den <strong>Linux</strong>-Tagen besonders<br />

mittelständischen Unternehmen<br />

den Zugang zu freier<br />

Software vermitteln.<br />

Neben Fachvorträgen <strong>für</strong> Einsteiger<br />

und Experten stehen<br />

erstmals auch Workshops auf<br />

dem Programm. Zudem können<br />

die Besucher in einem<br />

Musterbüro Software ausprobieren<br />

und Lösungsvorschläge<br />

mit Experten diskutieren.<br />

Weitere Informationen<br />

sind auf der Kielux-Webseite<br />

[http://​www.​kielux.​de] zu finden.<br />

Der Eintritt ist kostenlos. (kki/<br />

ofr/mhu/uba)<br />

n


WEBHOSTING · SCHULUNGEN · SUPPORT<br />

Webhosting 6.0<br />

Professionelle Hostinglösungen<br />

<strong>für</strong> maximale Leistung und Sicherheit<br />

Flexible Hostinglösungen<br />

Hostingprojekte wachsen mit Ihren Ideen und Vorstellungen.<br />

Wir garantieren die nahtlose Skalierbarkeit Ihres Hostingtarifs!<br />

Individuelle Betreuung<br />

Webseiten brauchen Pflege. Unser kompetenter Kundenservice ist<br />

immer <strong>für</strong> Sie da, unterstützt Ihre Ideen und hilft bei Problemen.<br />

Sicherheit & Service<br />

Immer optimal geschützt: Unser Informationsservice sorgt da<strong>für</strong>,<br />

dass Sie sich als Hostingkunde rundum sicher fühlen.<br />

Einfache Versionsupdates<br />

Halten Sie Ihre Projekte auf einem aktuellen und sicheren Stand:<br />

Das geht jetzt ganz einfach mit nur wenigen Mausklicks!<br />

Die innovative Such-Technologie Solr<br />

bietet neben einer hervorragenden<br />

Performance eine moderne und<br />

benutzerfreundliche Suchfunktion.<br />

Business-Hosting 6.0 Profi-Hosting 6.0 Managed-Server 6.0<br />

· Kostengünstiger Hosting-Einstieg<br />

· Über 30 Anwendungen verfügbar<br />

· Versionsupdates per Mausklick<br />

· Proaktiver Sicherheits-Service<br />

· Wiederherstellungsmanager<br />

· Bis zu 25 GB Speicherplatz<br />

· Traffic-Flatrate<br />

· Backup 1 Woche verfügbar<br />

· Garantierte Leistung<br />

· Bis zu 4 CPU-Kerne<br />

· Bis zu 4 GB Arbeitsspeicher<br />

· Bis zu 150 GB Speicherplatz<br />

· Traffic-Flatrate<br />

· Eigene IP-Adresse<br />

· SSL-Zertifikat (256 Bit)<br />

· Backup 4 Wochen verfügbar<br />

· Hochwertige Server-Hardware<br />

· 300 % Magento-Performance<br />

· Bis zu 24 Prozessorkerne<br />

· Bis zu 128 GB Arbeitsspeicher<br />

· Leistungsstarke Server-HDDs<br />

· Hardware-RAID 1/10 (optional)<br />

· Individuell konfigurierbar<br />

· Backup 4 Wochen verfügbar<br />

bereits ab 4,99 € netto pro Monat* bereits ab 34,99 € netto pro Monat* bereits ab 99,- € netto pro Monat*<br />

* Die einmalige Einrichtungsgebühr <strong>für</strong> die Business- und Profi-Hostingpakete 6.0 beträgt 29,- €, <strong>für</strong> die Managed-Server 6.0 149,- €. Die Vertragslaufzeiten und Abrechnungszeiträume betragen <strong>für</strong> die Business-Hostingpakete 6.0 zwischen 1 und 12<br />

Monate, <strong>für</strong> die Profi-Hostingpakete 6.0 zwischen 3 und 6 Monate und <strong>für</strong> die Managed-Server 6.0 zwischen 12 und 36 Monate. Automatische Vertragsverlängerung um die jeweilige Vertragslaufzeit (jedoch maximal um 12 Monate), wenn der Vertrag<br />

nicht mit einer Frist von 30 Tagen zum Ende der jeweiligen Vertragslaufzeit gekündigt wird. Alle Angebote richten sich ausschließlich an Gewerbetreibende. Alle genannten Preise verstehen sich monatlich zzgl. MwSt.<br />

Wir beraten Sie gerne! Rufen Sie uns an.<br />

✆ 0800 / 440 3000 oder besuchen Sie uns im Internet: www.mittwald.de


Aktuell<br />

www.linux-magazin.de Kernel-News 11/2011<br />

20<br />

Zacks Kernel-News<br />

Langfristige Pläne <strong>für</strong> Long-Term-Kernel<br />

Greg Kroah-Hartman möchte<br />

neue Kriterien <strong>für</strong> die Auswahl<br />

der Long-Term-Kernel<br />

erarbeiten. Diese Releases<br />

ähneln den Stable-Kerneln,<br />

erhalten aber weitaus längere<br />

Zeit Bugfixes. Verständlicherweise<br />

sind sie besonders<br />

begehrt bei <strong>Linux</strong>-Distributionen,<br />

Embedded-Firmen und<br />

<strong>alle</strong>n Unternehmen, deren Geschäft<br />

auf <strong>Linux</strong> fußt.<br />

Greg schickte ein paar Gedanken<br />

zum Thema an die<br />

Kernel-Mailingliste. Sein Vorschlag<br />

besteht im Grunde darin,<br />

jedes Jahr eine Release als<br />

Langzeit-Kernel auszuwählen<br />

und zwei Jahre lang zu<br />

pflegen. Daneben resümiert<br />

der Entwickler die bisherige<br />

Geschichte der Langläufer:<br />

„Kernel 2.6.16 wurde eine<br />

Long-Term-Version, weil mein<br />

Arbeitgeber diese Release als<br />

Basis <strong>für</strong> seine Enterprise-<br />

Distribution gewählt hatte.<br />

Meine Arbeit wurde dadurch<br />

leichter, weil ich stets eine<br />

vertraute Sammlung von Patches<br />

anwenden konnte.“<br />

„Weil sich das bewährt hatte,<br />

traf sich auf den folgenden <strong>Linux</strong>-Konferenzen<br />

ein Grüppchen<br />

von Kernelentwicklern<br />

und bestimmte aufgrund der<br />

Releasezyklen der verschiedenen<br />

Distributionen Kernel<br />

2.6.32 als nächste langfristige<br />

Version. [...] Derzeit setzen <strong>alle</strong><br />

Distributionen in ihren Stable-<br />

und Enterprise-Ausgabe<br />

auf Kernel 2.3.32. Unser Versuch<br />

hat sich also als Erfolg<br />

erwiesen.“<br />

Auf diese Vorlage von Greg<br />

folgten viele Reaktionen. David<br />

Lang kann sich nicht damit<br />

anfreunden, die Long-Term-<br />

Version einfach nach dem Kalender<br />

auszuwählen. Er habe<br />

zu viele Kernelreleases gesehen,<br />

die das Backporting von<br />

Fehlerbereinigungen schwer<br />

machten, schreibt er. Seiner<br />

Ansicht nach sollte eine Stable-Version<br />

zum Langzeit-Kernel<br />

werden, die bereits einige<br />

Monate lang gereift ist.<br />

Der Kernelentwickler und<br />

Debian-Mitarbeiter Ben Hutchings<br />

stört sich am abrupten<br />

Support-Ende nach zwei<br />

Jahren. Er ist der Ansicht,<br />

danach sollte ein ehrenamtlicher<br />

Maintainer den Kernel<br />

noch eine Weile pflegen. Bei<br />

dieser Gelegenheit stellte sich<br />

heraus, dass Greg Kroah-Hartman<br />

genau das plant: Anfang<br />

2012 möchte er Kernel 2.6.32<br />

in die bewährten Hände von<br />

Willy Tarreau geben.<br />

Greg hatte seine geschätzten<br />

zwei Jahre Wartungszeit zunächst<br />

damit begründet, dass<br />

elektronische Geräte häufig<br />

nach diesem Zeitraum ausgetauscht<br />

werden. Doch laut<br />

Ben und anderen sei das viel<br />

kürzer als viele Unternehmen<br />

wünschen. Jeremiah C.<br />

Foster berichtet etwa aus der<br />

Automobilindustrie, dass dort<br />

über zehn Jahre Support <strong>für</strong><br />

die eingesetzte Software üblich<br />

sind.<br />

„Ist das nicht die Aufgabe der<br />

Distributionen und kommerziellen<br />

Betriebssystem-Anbieter?“,<br />

hält Greg dem entgegen.<br />

Daneben lädt er Jeremiah und<br />

andere Vertreter der Automobilbranche<br />

ein, die Problematik<br />

mit ihm in Ruhe zu diskutieren.<br />

Jeremiah räumte ein,<br />

dass die Forderung von zehn<br />

Jahren ein Auslaufmodell sein<br />

könnte: Drahtlose Updates<br />

und die Jahresinspektion<br />

beim Händler könnten den<br />

Zeitraum auf fünf Jahre oder<br />

weniger verkürzen.<br />

Die von Greg angeregte Diskussion<br />

dürfte sich noch eine<br />

Weile fortsetzen, unter anderem<br />

auf dem Kernel-Summit,<br />

der Ende Oktober in Prag<br />

stattfindet.<br />

n<br />

Der Suse-Entwickler Greg Kroah-Hartman sucht nach einem neuen Auswahlmodus<br />

<strong>für</strong> Kernelversionen mit Long-Term-Support.<br />

Angriff auf Server<br />

von Kernel.org<br />

Einige Server von Kernel.org<br />

sind bei einem Angriff kompromittiert<br />

worden. Entdeckt<br />

haben die Administratoren<br />

den Angriff bereits Ende August.<br />

Erste Recherchen haben<br />

ergeben, dass es dem Angreifer<br />

gelungen ist, Rootrechte<br />

auf dem Server Hera zu erlangen,<br />

wahrscheinlich habe<br />

er da<strong>für</strong> einen Nutzeraccount<br />

missbraucht.<br />

Auf welchem Weg es geklappt<br />

hat, sich darüber bis zu den<br />

erforderlichen Rootrechten<br />

hochzuschleichen, ist bislang<br />

noch unklar. Der Angreifer<br />

habe die Startskripte des Systems<br />

so verändert, dass ein<br />

Trojaner startet. Zudem habe<br />

er Nutzeraktivitäten protokolliert.<br />

Die Passwörter und<br />

SSH-Keys der 448 rechtmäßigen<br />

User sind inzwischen<br />

geändert.<br />

Die Kernel.org-Admins gehen<br />

davon aus, dass die Sourcecode-Repositories<br />

unangetastet<br />

sind, Gewissheit sollen<br />

weitere Recherchen bringen.<br />

Klar ist aber, dass die Betreiber<br />

die Sicherheit ihrer Server<br />

verbessern wollen. Die betroffenen<br />

Maschinen seien derzeit<br />

offline, zudem seien die<br />

zuständigen Behörden in den<br />

USA und Europa eingeschaltet<br />

worden, schreiben sie.<br />

Als Übergangslösung hat der<br />

Kernel-Chef Linus Torvalds<br />

den fälligen Release Candidate<br />

<strong>für</strong> Kernel 3.1 auf sein Github-<br />

Konto unter [https://​github.​com/​<br />

​torvalds/​linux] hochgeladen. n


Neustart <strong>für</strong> Kerneloops.org<br />

Jetzt<br />

am KiosK!<br />

Einige engagierte Ker nelentwickler<br />

helfen der Website<br />

Kerneloops.org wieder auf die<br />

Beine. Die Seite war seit Monaten<br />

kaputt, schon im Juni<br />

2011 beklagte dies der Suse-<br />

Mitarbeiter Jiri Slaby.<br />

Wie der Name sagt, beschäftigt<br />

sich Kerneloops.org mit<br />

dem Oops, jenem Bugreport,<br />

den ein geeignet konfigurierter<br />

<strong>Linux</strong>-Kernel bei einem<br />

Fehler produziert. Dieser enthält<br />

zahlreiche Informationen<br />

wie den Inhalt der Register<br />

und ein Backtrace, von denen<br />

Entwickler bei der Fehlerbehebung<br />

profitieren. Die Website<br />

sammelt diese Berichte in einer<br />

Datenbank und archiviert<br />

sie samt Kernelversion und<br />

anderen Angaben.<br />

Daneben werten einige Skripte<br />

die Berichte automatisiert<br />

aus. So lassen sich beispielsweise<br />

Kernelversionen und<br />

‐funktionen ermitteln, die<br />

besonders häufig Fehler verursachen.<br />

Ab August warb der Intel-<br />

Mitarbeiter Arjan van de Ven<br />

Freiwillige an, um den Code<br />

zu reparieren und die nützliche<br />

Webanwendung wieder<br />

flottzumachen. Es hat eine<br />

Weile gedauert, aber nun ist<br />

Kerneloops.org größtenteils<br />

wieder benutzbar. n<br />

Jetzt aUcH<br />

aLs PDF<br />

erHäLtLicH!<br />

Wieder flottgemacht: Die Website Kerneloops.org sammelt Fehlerberichte und<br />

‐statistiken zum <strong>Linux</strong>-Kernel.<br />

Graswurzel-WLAN<br />

Der WLAN-Spezialist Luis R.<br />

Rodriguez sympathisiert mit<br />

der Open-Wireless-Kampagne<br />

der Electronic Frontier Foundation.<br />

Diese Initiative hat das<br />

Ziel, ein von Privatleuten getragenes<br />

drahtloses Netzwerk<br />

zu schaffen, das unabhängig<br />

von Konzernen arbeitet. Informationen<br />

dazu gibt es unter<br />

[http://​www.​eff.​org/​deeplinks/​2011/​<br />

​04/​open‐wireless‐movement].<br />

Für die interessierten Kernelhacker<br />

hat Luis unter [http://​<br />

​wireless.​kernel.​org/​en/​developers/​<br />

​OpenWirelessMovement] eine<br />

Wiki -Seite zum Thema angelegt.<br />

Andere Kernelentwickler<br />

zeigen sich eher skeptisch: Eine<br />

derart offene Infrastruktur<br />

sei wegen zahlreicher technischer<br />

und juristischer Probleme<br />

nicht praktikabel. (Zack<br />

Brown/​uba/mhu)<br />

n<br />

als einzelheft oder im abo:<br />

www.ubuntu-user.de<br />

schneller bestellen per:<br />

l Fax: 07131 / 2707 78 601<br />

l telefon: 07131 / 2707 274<br />

l mail: order@linuxnewmedia.de<br />

mit dem Jahres-abo erhalten sie 4 ausgaben<br />

Ubuntu User zum Vorzugspreis von euro<br />

26,90 * statt euro 31,60 * (Lieferung frei<br />

Haus).<br />

* Preise gelten <strong>für</strong> Deutschland. Schweiz: SFr 53,90; Österreich:<br />

Euro 29,90; anderes Europa: Euro 33,90


Aktuell<br />

www.linux-magazin.de Open Suse 11/2011<br />

22<br />

Open Suse Conference 2011<br />

Kernthema Kernel<br />

Viele Anhänger freier Software hatten nach der Übernahme der Distribution Suse durch Attachmate um deren<br />

Engagement <strong>für</strong> freie Software, besonders den <strong>Linux</strong>-Kernel, ge<strong>für</strong>chtet. Die Berichte der Suse-Entwickler auf<br />

der hauseigenen Konferenz räumten solche Bedenken aber aus. Peter Kreußel<br />

Abbildung 1: Ohne Novell: Im Jahr 2011 mischte sich<br />

kaum mehr Rot ins omnipräsente Suse-Grün.<br />

Die Open-Suse-Konferenz 2011<br />

war die erste nach der Übernahme<br />

durch den amerikanischen<br />

Softwarehersteller Attachmate<br />

(Abbildung 1). Da<br />

dieser bisher kein Open-<br />

Source-Engagement vorweisen<br />

kann, <strong>für</strong>chteten viele um<br />

die Zukunft von Suse.<br />

Der neue Suse-CEO Nils<br />

Brauck mann und weitere Vertreter<br />

des Managements stellten<br />

sich diesen Be<strong>für</strong>chtungen<br />

in einem Pressegespräch. Sie<br />

wiesen darauf hin, dass Suse<br />

nun als eigenständige Business<br />

Unit organisiert sei und<br />

damit mehr Eigenständigkeit<br />

genieße als unter Novell. Nils<br />

Brauckmann bestätigte gegenüber<br />

dem <strong>Linux</strong>-<strong>Magazin</strong>,<br />

dass Suse ihr Engagement<br />

in der <strong>Linux</strong>-Welt nach dem<br />

Rückzug aus Mono nicht weiter<br />

einschränken will.<br />

Crashdumps<br />

Im Konferenzprogramm zeigten<br />

sich beispielsweise die Aktivitäten<br />

des Unternehmens in<br />

der Kernelentwicklung. Hervorzuheben<br />

ist der Beitrag<br />

von Stefan Seyfried (B1 Systems),<br />

der erläuterte, wie sich<br />

Crashdumps bei einer Kernel<br />

Panic einfangen und auswerten<br />

lassen. Das erzeugte<br />

Kdump-File enthält Prozessund<br />

Speicherinformationen,<br />

sodass sogar das händische<br />

Auslösen einer Panic vor dem<br />

unvermeidbaren Reboot eines<br />

geschäftskritischen Systems<br />

sinnvoll sein kann.<br />

Über die Cgroups, mit denen<br />

sich Prozessgruppen weit<br />

granularer und umfassender<br />

steuern lassen als mit<br />

»ulimit«, referierte<br />

Michal Hocko von<br />

der Suse-Niederlassung<br />

in Tschechien.<br />

Nicht ausschließlich,<br />

aber auch um den<br />

<strong>Linux</strong>-Kernel ging es<br />

im Vortrag seines Kollegen<br />

Jiri Slaby über<br />

den State of the Art in<br />

der statischen Code-<br />

© Pascal Bleser<br />

Analyse. Die Kernelentwickler<br />

können damit Gerätetreiber<br />

prüfen, selbst wenn die zugehörige<br />

Hardware nicht verfügbar<br />

ist.<br />

Cloud-Strategie<br />

Präsent war erwartungsgemäß<br />

auch der Themenbereich<br />

Cloud. Der Suse-Mitarbeiter<br />

Robert Schweikert stellte die<br />

Eucalyptus-, Open-Nebulaund<br />

Open-Stack-Pakete vor,<br />

die er im Auftrag von IBM mit<br />

Hilfe des Open-Suse-Buildservice<br />

erstellt hat.<br />

Der Vortrag über die Cloud-<br />

Architektur Open Stack blieb<br />

mit Christian Baumann von<br />

B1 Systems einem Externen<br />

überlassen. Womöglich ist<br />

das kein Zufall, denn auf die<br />

Frage, in welchem Bereich<br />

Suse Nachholbedarf habe,<br />

nannte Produktmanager Gerald<br />

Pfeiffer die Cloud. Zugleich<br />

kündigte er <strong>für</strong> die<br />

kommenden Monaten eine<br />

umfassende Cloud-Strategie<br />

der Suse-Business-Unit an.<br />

Abbildung 2: Entspannt: Suse-Entwickler Greg<br />

Kroah-Hartman unter Gleichgesinnten.<br />

Ein weiterer Anwender des<br />

Open-Suse-Buildservice ist<br />

der bei Suse beschäftigte<br />

Kernelentwickler Greg Kroah-<br />

Hartman (Abbildung 2). Er<br />

pflegt das Tumbleweed genannte<br />

Rolling-Release-Repository<br />

[http:// en. opensuse.​<br />

org/ Portal:Tumbleweed] <strong>für</strong><br />

die ansonsten <strong>alle</strong> acht Monate<br />

veröffentlichte <strong>Linux</strong>-<br />

Distribution.<br />

Anders als Ubuntu hat sich<br />

Suse nicht mit einem ehrgeizigen<br />

Zeitplan beim Ersetzen<br />

des X-Window-Systems<br />

durch das Wayland-Protokoll<br />

aus dem Fenster gelehnt. Die<br />

Nürnberger luden jedoch den<br />

KDE-Entwickler Martin Gräßlin<br />

ein, der an der Integration<br />

des Wayland-Protokolls<br />

in Kwin arbeitet. Dieser bat<br />

zwar um zügiges Bereitstellen<br />

von Testpaketen, riet aber von<br />

einem zu schnellen Abschied<br />

vom bisherigen Fenstersystem<br />

mit den Worten ab: „Lasst andere<br />

Distributionen damit baden<br />

gehen!“<br />

Offenes Haus<br />

Die dritte Open-Suse-Konferenz<br />

[http:// conference.​<br />

opensuse. org] zog vom 11.<br />

bis 14. September etwa 350<br />

Teilnehmer an. Die rund 100<br />

Vorträge und Workshops richteten<br />

sich dabei nicht nur an<br />

Suse-Mitarbeiter – die Konferenz<br />

stand <strong>alle</strong>n Interessierten<br />

offen. (mhu)<br />

n


Performance-Sieg!<br />

Homepage Premium<br />

1blu-Homepage „Premium“<br />

> 2 Domains inklusive<br />

> 7.500 MB Webspace<br />

> Unbegrenzter Traffic<br />

> 750 E-Mail-Adressen, 35 GB Speicher<br />

> Unbegrenzte FTP-Accounts<br />

> Web 2.0 (Joomla, Typo3 uvm. vorinstalliert)<br />

> 18 MySQL-Datenbanken<br />

> PHP5, Perl, Python, SSI, SSH<br />

> 24/7-Technik-Hotline<br />

> Dauerhaft nur 3,69 ¤/Monat*<br />

> Keine Einrichtungsgebühr<br />

Tolle Website-Performance durch<br />

10 Mbit/s Bandbreiten-Garantie!<br />

Eigenes SSL-Zertifikat inklusive!<br />

!<br />

3, 69<br />

¤/Monat*<br />

Dauerpreis!<br />

* Preis/Monat inkl. 19% MwSt. Es fällt keine Einrichtungsgebühr an. Vertragslaufzeit jeweils 6 Monate, jederzeit kündbar mit einem Monat Frist zum Vertragsende. Bei Software-Bestellung 7,90 € Versandkosten.<br />

030 - 20 18 10 00 | nur unter www.1blu.de/premium


Titelthema<br />

www.linux-magazin.de Py Side 11/2011<br />

24<br />

Py Side: Programmieren mit Python und Qt<br />

Starkes Gespann<br />

Die Bibliothek Py Side kombiniert Python mit den GUI-Fähigkeiten von Qt. Unter anderem bietet sie plattformunabhängige<br />

Techniken <strong>für</strong> Nebenläufigkeit und Netzwerkprogrammierung. Rainer Poisel, Marcus Nutzinger<br />

das wie folgt von einem PPA (Personal<br />

Package Archive) tun:<br />

sudo add‐apt‐repository ppa:pyside<br />

sudo apt‐get update<br />

sudo apt‐get install python‐pyside U<br />

pyside‐tools<br />

© Jakob Kamender, 123RF<br />

Dass die umfangreiche Bibliothek Qt<br />

auf mehreren Plattformen läuft, ist nur<br />

eine ihrer Stärken. Daneben bietet das<br />

Toolkit viele weitere Funktionen, etwa<br />

einheitliche Socket-Programmierung über<br />

Betriebssysteme hinweg. Kombiniert man<br />

Qt mit einer Skriptsprache wie Python,<br />

fällt außerdem das Neukompilieren der<br />

Programme <strong>für</strong> die unterschiedlichen<br />

Plattformen weg. Das ist die Idee hinter<br />

Py Side [1], einer freien Bibliothek <strong>für</strong> die<br />

Anwendungsentwicklung.<br />

Freie Lizenz<br />

Vor Py Side hatte sich schon das Projekt<br />

Py Qt [2] als Ziel gesetzt, die GUI-<br />

Programmierung mit Qt unter Python zu<br />

ermöglichen. Die Py-Qt-Entwickler haben<br />

es jedoch versäumt, die Bibliothek unter<br />

einer freien Lizenz anzubieten, weshalb<br />

Nokia Py Side ins Leben gerufen hat, das<br />

unter der LGPL steht.<br />

Die Unterschiede <strong>für</strong> Programmierer sind<br />

unter [3] zusammengefasst. Neben dem<br />

offensichtlich unterschiedlichen Modulnamen<br />

ist vor <strong>alle</strong>m das von Py Side<br />

unterstützte API relevant. Py Qt bietet<br />

nämlich zwei verschiedene APIs, wobei<br />

sich das eine an der C++-/​Qt-Programmierung<br />

orientiert und daher <strong>für</strong> reine<br />

Python-Programmierer unsauber wirkt.<br />

Die Macher von Py Side haben sich daher<br />

entschieden, das API 2 von Py Qt zu<br />

unterstützen.<br />

Erste Schritte<br />

Um auf einem aktuellen Debian-System<br />

Py Side verwenden zu können, sind zwei<br />

Pakete zu installieren:<br />

aptitude install python‐pyside/unstable U<br />

pyside‐tools/unstable<br />

Wichtig ist dabei, beide Pakete sowie deren<br />

Abhängigkeiten von Debian Unstable<br />

zu beziehen. Debian Testing oder gar<br />

Stable bieten nur alte Pakete mit weniger<br />

Funktionalität an. Wer die Software unter<br />

Ubuntu installieren möchten, kann<br />

Das Paket »python‐pyside« ist ein Metapaket,<br />

das <strong>alle</strong> Py-Side-Module installiert.<br />

Einige wichtige Module sind »QtCore«,<br />

das Hauptmodul von Qt, das jede Anwendung<br />

benötigt, »QtGui«, das die Elemente<br />

der grafischen Oberfläche wie Textfelder<br />

und Buttons zur Verfügung stellt, sowie<br />

»QtNetwork«, eine vielseitige Schnittstelle<br />

<strong>für</strong> Socketprogrammierung, HTTP<br />

und SSL. Eine umfassende Übersicht gibt<br />

es unter [4].<br />

Aktuell bietet Py Side die Qt-Module aber<br />

nur <strong>für</strong> Python 2.x an, was Benutzern<br />

den Umstieg auf das mittlerweile als stabil<br />

deklarierte Python 3 schwer bis unmöglich<br />

macht. Die Py-Side-Entwickler<br />

kennen das Problem und es bleibt zu hoffen,<br />

dass sie die Python-3-Unterstützung<br />

bald umsetzen.<br />

Das traditionelle „Hello World“-Anfängerprogramm<br />

<strong>für</strong> Py Side zeigt Listing 1. Wie<br />

in den Zeilen 4 und 5 zu sehen ist, müssen<br />

Py-Side-Applikationen zumindest die<br />

Pakete »QtCore« und »QtGui« importieren,<br />

welche die wichtigsten Klassen zum<br />

Aufbau von Qt-Anwendungen enthalten.<br />

»QtCore« ist <strong>für</strong> die Bearbeitung von Signalen<br />

und Slots zuständig, »QtGui« stellt<br />

Widgets <strong>für</strong> die grafische Aufbereitung<br />

der GUI-Applikation bereit.<br />

Qt-SDK<br />

DELUG-DVD<br />

Auf der DELUG-DVD dieses <strong>Magazin</strong>s<br />

befindet sich das Qt-SDK von Nokia<br />

samt der beschriebenen Entwicklungsumgebung<br />

Qt Creator.


Nach dem Importieren erstellt der Code<br />

ein »QApplication«-Objekt, das die Qt-Anwendung<br />

repräsentiert und in so gut wie<br />

jedem Qt-Programm vorkommt. Das erste<br />

und in diesem Fall auch einzige erstellte<br />

Widget ist ein »QLabel« zur Textausgabe.<br />

Am Ende des Listings dient die Methode<br />

»exec_()« des »QApplication«-Objekts<br />

dazu, die Qt-Hauptschleife zu betreten.<br />

Zu beachten ist hierbei der Unterstrich<br />

als Postfix des Methodennamens. Diesen<br />

haben die Py-Side-Autoren auch <strong>für</strong> Methoden<br />

wie »bin_()«, »hex_()« und »oct_<br />

()« eingeführt, um eine Verwechslung<br />

mit gleichnamigen eingebauten Python-<br />

Funktionen zu vermeiden.<br />

Widgets<br />

In Qt gibt es eine Vielzahl verschiedener<br />

Widgets, die umfangreiche Aufgaben von<br />

GUI-Komponenten abdecken, unter [5]<br />

findet sich eine Übersicht zu Elementen<br />

und deren Stil. Alle Widgets sind bei Py<br />

Side als Module unterhalb des Moduls<br />

»QtGui« implementiert und somit nach<br />

der Anweisung »from PySide import Qt‐<br />

Gui« verfügbar. Listing 2 zeigt ein Beispielprogramm,<br />

das sich dreier häufig<br />

eingesetzter Widgets bedient. Es nimmt<br />

eine Texteingabe entgegen und gibt sie<br />

auf Knopfdruck wieder aus.<br />

Die Klasse »MyDialog« ist von »QtDialog«<br />

abgeleitet (Zeile 7) und stellt ein<br />

GUI-Fenster zur Verfügung, das Widgets<br />

aufnimmt. Das Platzieren der Elemente<br />

erfolgt anhand eines Box-Layouts, das<br />

mit dem Parameter »QBoxLayout.TopTo‐<br />

Bottom« die Elemente zeilenweise von<br />

oben nach unten anordnet (Zeile 11). Py<br />

Side und Qt bieten natürlich viel umfangreichere<br />

Layout-Widgets an, zum<br />

Beispiel das »QGridLayout«, bei welchem<br />

der Programmierer die einzelnen GUI-<br />

Komponenten in mehreren Zeilen und<br />

Spalten anordnen kann.<br />

Das Codebeispiel fügt dem Box-Layout<br />

nun der Reihe nach drei Elemente<br />

hinzu: Das »QLineEdit« dient zur Eingabe<br />

einer Textzeile. Für umfangreichere,<br />

mehrzeilige Eingaben käme »QTextEdit«<br />

zum Einsatz. Zur Interaktion mit dem<br />

Benutzer dient das nächste Element,<br />

ein »QPushButton«. Der Programmierer<br />

verwendet die Methode »connect()« des<br />

»clicked«-Signals von »QButton«, um die<br />

selbst gemachte Methode »self.button‐<br />

Clicked« mit dem entsprechenden Ereignis<br />

zu verbinden (Zeile 17). Als dritte<br />

GUI-Komponente erzeugt das Listing ein<br />

»QLabel« zur Textausgabe, um den eingegebenen<br />

Text nach einem Klick auf<br />

den Button im Label anzuzeigen. Um die<br />

Elemente grafisch auszugeben, weist der<br />

Entwickler der Klasse »MyDialog« noch<br />

das Layout zu (Zeile 23), dem er zuvor<br />

die drei Widgets per »addWidget()« hinzugefügt<br />

hat.<br />

Natürlich bieten Py Side und Qt noch<br />

eine Vielfalt weiterer GUI-Komponenten.<br />

Statt »QDialog« kann der Programmierer<br />

als Grundlage der grafischen Oberfläche<br />

auch ein »QMainWindow« [6] einsetzen.<br />

Es bietet neben Textfeldern, Buttons und<br />

Labels auch Platz <strong>für</strong> eine Menü- und<br />

Statusleiste sowie <strong>für</strong> Toolbars im oberen<br />

Teil des Fensters. Beispiele zur Verwendung<br />

unterschiedlichster Widgets finden<br />

sich unter [7] und [8].<br />

GUI-Picasso<br />

Nutzt der Programmierer prototypischer<br />

Applikationen geeignete Werkzeuge,<br />

bleibt ihm das recht mühsame Zusammenstellen<br />

der GUI-Elemente von Hand<br />

erspart. Der Entwicklerausgabe des Qt-<br />

Framework liegt die eigene Entwicklungsumgebung<br />

Qt Creator bei. Sie lässt sich<br />

von der offiziellen Projekthomepage [9]<br />

oder über den Paketmanager der <strong>Linux</strong>-<br />

Distributionen beziehen.<br />

Obwohl er auf die Entwicklung mit der<br />

Programmiersprache C++ spezialisiert<br />

ist, unterstützt Qt Creator auch den Py-<br />

Listing 2: »widget_example.py«<br />

01 import sys<br />

02 <br />

03 from PySide import QtCore<br />

04 from PySide import QtGui<br />

05 <br />

06 <br />

07 class MyDialog(QtGui.QDialog):<br />

08 def __init__(self, parent=None):<br />

09 super(MyDialog, self).__init__(parent)<br />

10 <br />

11 boxlayout = QtGui.QBoxLayout(QtGui.<br />

QBoxLayout.TopToBottom, self)<br />

12 <br />

13 self.lineedit = QtGui.QLineEdit()<br />

14 boxlayout.addWidget(self.lineedit)<br />

15 <br />

16 self.button = QtGui.<br />

QPushButton("Abschicken")<br />

Side-Anwender bei der GUI-Gestaltung.<br />

Qt legte die Elemente der Benutzerschnittstelle<br />

in einem XML-Dateiformat<br />

in den UI-Dateien an.<br />

Bei den Programmierarbeiten <strong>für</strong> diesen<br />

Artikel hat sich Qt Creator in den Versionen<br />

1.3.1 und 2.2.1 bewährt. Beide beherrschen<br />

das Erstellen von UI-Dateien,<br />

die sich als Textformat in eine Versionsverwaltung<br />

einspielen lassen. Qt Creator<br />

unterstützt die gängigsten Systeme<br />

wie Git, Subversion, CVS, Bazaar sowie<br />

Mercurial und nimmt die Versionierung<br />

über Aufrufe der Kommandozeilen-Programme<br />

vor.<br />

Wechselstube<br />

Das folgende Programmierbeispiel enthält<br />

die wesentlichen Elemente der Anwendungsprogrammierung<br />

mit Py Side. Es<br />

handelt sich um einen Währungsumrechner,<br />

der auf die im Internet frei verfügbare<br />

XML-RPC-Schnittstelle von [http://​<br />

foxrate. org] zugreift, um die aktuellen<br />

Listing 1: »hello_pyside.py«<br />

01 #!/usr/bin/python<br />

02 <br />

03 import sys<br />

04 from PySide import QtCore<br />

05 from PySide import QtGui<br />

06 <br />

07 app = QtGui.QApplication(sys.argv)<br />

08 label = QtGui.QLabel("Hello World")<br />

09 label.show()<br />

10 lReturn = app.exec_()<br />

11 sys.exit(lReturn)<br />

17 self.button.clicked.connect(self.<br />

buttonClicked)<br />

18 boxlayout.addWidget(self.button)<br />

19 <br />

20 self.label = QtGui.QLabel()<br />

21 boxlayout.addWidget(self.label)<br />

22 <br />

23 self.setLayout(boxlayout)<br />

24 <br />

25 def buttonClicked(self):<br />

26 self.label.setText(self.lineedit.<br />

text())<br />

27 self.lineedit.setText("")<br />

28 <br />

29 if __name__ == "__main__":<br />

30 app = QtGui.QApplication(sys.argv)<br />

31 dialog = MyDialog()<br />

32 sys.exit(dialog.exec_())<br />

Py Side 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

25


Titelthema<br />

www.linux-magazin.de Py Side 11/2011<br />

26<br />

Listing 3 zeigt das Einbinden der generierten<br />

Klassen. Im weiteren Sinn arbeiten<br />

diese nach dem Prinzip des Factory-<br />

Pattern. Die Methode »setupUi()« der<br />

Factory-Objekte (Zeilen 5 und 9) erwartet<br />

als Parameter die zu initialisierenden<br />

Widgets. Im F<strong>alle</strong> des Hauptfensters<br />

steht hier »self«, da die Basisklasse ein<br />

»QMainWindow« ist. Für das benutzerdefinierte<br />

Widget erstellt der Code eine<br />

Instanz der Klasse »QWidget« (Zeile 7).<br />

Eine Alternative zu dieser Vorgehensweise<br />

ist das Laden von Widgets aus so<br />

genannten Ressourcendateien, wobei der<br />

Programmierer bereits fertig initialisierte<br />

Widget-Objekte erhält.<br />

Signale und Slots<br />

Abbildung 1: Die grafische Oberfläche des Beispielprojekts in Qt Creator.<br />

Kurse zu beziehen. Zunächst erstellt der<br />

Entwickler das GUI: Nach dem Start von<br />

Qt Creator wählt er den Menü-Eintrag<br />

»Datei | Neu ... | Dateien und Klassen |<br />

Qt| Qt‐Designer‐Formular«, um eine UI-<br />

Datei anzulegen. Anschließend gilt es,<br />

das Mutterelement zu bestimmen. Im<br />

F<strong>alle</strong> eines neuen GUI-Projekts ist das<br />

»Main Window«.<br />

Nach der Namensgebung sowie der Angabe<br />

des Speicherorts präsentiert sich<br />

die Oberfläche wie in Abbildung 1. Die<br />

Elemente lassen sich per Drag & Drop aus<br />

01 from customwidget import Ui_customWidget<br />

02 from mainwindow import Ui_MainWindow<br />

03 <br />

04 self.ui = Ui_MainWindow()<br />

05 self.ui.setupUi(self)<br />

06 <br />

Listing 3: Einbinden der erzeugten<br />

UI-Dateien<br />

07 self.centralwidget = QtGui.QWidget()<br />

08 self.customwidget = Ui_customWidget()<br />

09 self.customwidget.setupUi(self.centralwidget)<br />

10 self.setCentralWidget(self.centralwidget)<br />

01 class CSomeClass(QtCore.QObject):<br />

02 <br />

03 sProgress = QtCore.Signal(int)<br />

04 <br />

05 def someMethod(self):<br />

06 sProgress.emit(20)<br />

07 #sProgress[int].emit(20)<br />

08 <br />

09 <br />

10 class CSomeOtherClass(QtCore.QObject):<br />

11 <br />

12 def __init__(self):<br />

Listing 4: Signale und Slots mit Py Side<br />

dem GUI-Klassenbereich in die zukünftige<br />

Benutzerschnittstelle ziehen. Die<br />

Klassen- und Objektübersicht verdeutlicht<br />

die Hierarchie der einzelnen Elemente.<br />

Eigenschaften wie geometrische<br />

Größen oder Masken <strong>für</strong> Eingabefelder<br />

legt der Anwender im Eigenschaftsfenster<br />

rechts unten fest.<br />

Die fertigen UI-Dateien sowie der gesamte<br />

Quelltext <strong>für</strong> diesen Artikel stehen unter<br />

[10] zum Download bereit. Die Dateien<br />

»customwidget.ui« <strong>für</strong> das Hauptfenster<br />

sowie »mainwindow.ui« <strong>für</strong> ein benutzerspezifisches<br />

Widget lassen sich über<br />

den Datei-öffnen-Dialog in Qt Creator<br />

laden. Nach dem Bearbeiten überführt<br />

der Programmierer die UI-Dateien in Python-Skripte.<br />

Dazu dient das Programm<br />

»pyside‐uic« aus den Py-Side-Tools:<br />

pyside‐uic customwidget.ui > customwidget.py<br />

pyside‐uic mainwindow.ui > mainwindow.py.<br />

13 self.mSome = CSomeClass()<br />

14 <br />

15 def someOtherMethod(self):<br />

16 self.mSome.sProgress.connect(self.<br />

onSome)<br />

17 # QtCore.QObject.connect(self.mSome,<br />

18 # QtCore.<br />

SIGNAL('sProgress(int)'), self.onSome)<br />

19 <br />

20 def onSome(self, pValue):<br />

21 print "C<strong>alle</strong>d with value: " +<br />

str(pValue)<br />

Qt zeichnet sich bei der Kommunikation<br />

zwischen Objekten durch eine Besonderheit<br />

aus: Sie lässt sich mit Hilfe so genannter<br />

Signale und Slots bewerkstelligen<br />

[11]. Diese Mechanismen ähneln dem traditionellen<br />

Callback-Prinzip, sind jedoch<br />

flexibler. Callbacks sind nicht Typ-sicher.<br />

Eine Methode mit exakt den gewünschten<br />

Parametern ist oft nicht vorhanden<br />

oder vorhersehbar. Der Programmierer<br />

muss bei Callbacks genau wissen, welche<br />

Methoden samt zugehörigen Methodenparamtern<br />

aufzurufen sind.<br />

In der Implementierung des Signal-Slot-<br />

Prinzips gibt es daher eine zusätzliche<br />

Abstraktionsschicht. Der Entwickler<br />

kann exakt festlegen, welche Methode<br />

(Slot) Qt beim Auftreten eines bestimmten<br />

Signals aufruft und welche Parametertypen<br />

diese erwartet. Die gewünschte<br />

Konfiguration gibt er beim Verbinden mit<br />

der »connect()«-Methode an.<br />

Für den zusätzlich notwendigen Code<br />

sorgen bei kompilierten Sprachen wie<br />

C++ das Qt-Buildsystem Qmake sowie<br />

der Meta-Object-Compiler. Bei Py Side<br />

passiert dies zur Laufzeit im Hintergrund.<br />

Alle Klassen, die von »QObject« erben,<br />

können Signale und Slots verarbeiten.<br />

Es ist möglich, beliebig viele Signale mit<br />

einem Slot oder beliebig viele Slots mit<br />

einem Signal zu verbinden.<br />

Bei der neuen Syntax ergeben sich die<br />

Typen der Methodenparameter aus dem<br />

Kontext: Listing 4 zeigt die zugrunde<br />

Online PLUS<br />

Ein weiterführender Artikel unter der<br />

URL [http:// www. linux‐magazin. de/​<br />

plus/ 2011/ 11] zeigt Ihnen, wie Sie Ressourcendateien<br />

sowie Qt Quick und QML <strong>für</strong> GUI-<br />

Programme verwenden.


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 />

SEIT 1982<br />

Abbildung 2: Das Beispielprogramm ist ein einfacher Währungsumrechner,<br />

der den Kurs aus dem Internet holt – hier unter <strong>Linux</strong>.<br />

liegende Syntax. Zeile 3 deklariert ein<br />

benutzerdefiniertes Signal. Mit Hilfe der<br />

Methode »emit()« kann der Programmierer<br />

das Signal aussenden (Zeile 6). Die<br />

Zuordnung der gewünschten Slots erfolgt<br />

im Vorfeld mit »connect()« (Zeile 16).<br />

Die dem Signal beim Aufruf übergebenen<br />

Parameter bekommen <strong>alle</strong> verbundenen<br />

Slots weitergereicht (den Wert »20« von<br />

Zeile 6 an den Methodenparameter »pValue«<br />

in Zeile 20).<br />

Bei grafischen Benutzeroberflächen senden<br />

Aktionselemente und Widgets wie<br />

etwa »QPushButton« Signale aus, wenn<br />

der Benutzer sie anklickt. Ist das Signal<br />

mit einer benutzerdefinierten Methode,<br />

dem Slot, durch »connect()« verbunden,<br />

wird diese aufgerufen. Ein weiteres Beispiel<br />

sind Aktionen, die bei der Wahl<br />

von Menüpunkten ausgesendet werden.<br />

Diesen Anwendungsfall zeigt die erweiterte<br />

Hauptfenster-Klasse in Listing 5<br />

(Zeilen 16 und 17). Aus der grafischen<br />

Oberfläche kann der Benutzer nun das<br />

Programm beenden oder die Autoreninformation<br />

abfragen.<br />

Aus Gründen der Vollständigkeit ist in<br />

Listing 4 auch die ursprüngliche Syntax<br />

angegeben (Zeilen 7, 17 und 18). Diese<br />

findet sich hauptsächlich in Applikationen,<br />

die auf älteren Versionen der Py-<br />

Side-Bibliothek aufbauen. Hierbei musste<br />

der Entwickler die äquivalenten C++-<br />

Datentypen explizit beim Verbinden von<br />

Signalen mit deren zugehörigen Slots<br />

angeben.<br />

Neben Signalen und Slots<br />

bietet Qt auch die Möglichkeit,<br />

so genannte Events zu<br />

verarbeiten. Diese sind <strong>für</strong><br />

den Programmierer dann<br />

von Bedeutung, wenn er Ereignisse<br />

unterhalb des Widget-Levels<br />

auswerten muss.<br />

Ein Beispiel hier<strong>für</strong> wäre,<br />

die aktuelle Position des<br />

Mauszeigers zu erfragen.<br />

Das Qt-Framework ruft<br />

die in den Schnittstellen<br />

der einzelnen Widgets<br />

vorgesehenen Callback-<br />

Routinen auf, sobald ein<br />

Event des entsprechenden<br />

Typs aufgetreten ist. Bei<br />

der Klasse »QWidget« ist<br />

dies die Methode »mouse‐<br />

MoveEvent()«.<br />

Die Beispiel-Applikation soll den aktuellen<br />

Umrechnungskurs aus dem Internet<br />

holen. Da diese Operation unter Umständen<br />

länger dauert, erarbeitet der Entwickler<br />

eine Strategie, die die grafische Oberfläche<br />

ansprechbar hält. Glücklicherweise<br />

stellen die Entwickler von Qt und Py Side<br />

geeignete Mechanismen bereit.<br />

Nebenläufig<br />

Neben den Python-Mechanismen zur<br />

nebenläufigen Programmierung bietet<br />

das Qt-Framework im Wesentlichen drei<br />

Möglichkeiten, um Programmcode nebenläufig<br />

auszuführen:<br />

n »QtCore.QThread« stellt die Basisklasse<br />

<strong>für</strong> plattformunabhängige Threads<br />

dar. Ihre Schnittstelle ähnelt der in Pythons<br />

Threading-Bibliothek enthaltenen<br />

Thread-Klasse. Die Funktionalität<br />

des Thread wird entsprechend in der<br />

»run()«-Methode implementiert.<br />

n »QtCore.QObject.moveToThread()« ändert<br />

die Thread-Affinität eines Objekts<br />

und seiner Kinder nach deren Erstellung.<br />

n »QtCore.QtConcurrent« soll eine High-<br />

Level-Programmierschnittstelle <strong>für</strong><br />

Nebenläufigkeit bei Py Side bieten, ist<br />

aber noch Zukunftsmusik.<br />

Listing 6 haucht dem Währungsumrechner<br />

Leben ein und implementiert<br />

die Umrechnung mittels der XML-RPC-<br />

Schnittstelle in einem eigenen Thread.<br />

Abbildung 3: Der Währungsumrechner läuft dank Python und Py<br />

Side mit unverändertem Code auch unter Windows.<br />

Alle Preise in Euro<br />

Innovative Computer • Zuckmayerstr. 15 • 65582 Diez<br />

BALIOS 171 1HE SERVER<br />

BALIOS 458 4HE STORAGE SERVER<br />

GmbH<br />

Kompakter 1HE Server mit 4 Gigabit LAN Ports <strong>für</strong><br />

den Einsatz als Firewall- oder Proxyserver.<br />

• Intel ® Core i3-2100 3,1GHz<br />

• Matrox G200eW 16MB DDR2 Onboard Grafik<br />

• 2x 4GB DDR3-1333 ECC x8 (8192 MB)<br />

• 3x Western Digital 1TB<br />

• 4x GLAN, 2 x USB, 1x RS232, 6x SATA, 2x PS/2<br />

• Systemtest mit SuSE <strong>Linux</strong> 64bit<br />

www.ico.de/linux<br />

inkl. Mwst<br />

exkl. Mwst<br />

BALIOS 254 2HE SERVER<br />

844,<br />

90 710,-<br />

Flexible, skalierbare Intel ® Xeon ® E3 Lösung<br />

Performanter 4HE Fileserver mit 16 Festplattenwechselrahmen.<br />

• Intel ® Xeon ® E3-1220 3,1GHz • Adaptec 51645 16+4 Port PCI-E<br />

• 2x 4GB DDR3 RAM<br />

x8 SATA/SAS inkl. BBU<br />

• 16x Western Digital 1TB • Systemtest mit SuSE <strong>Linux</strong> 64bit<br />

• 2x GLAN, 4x USB, 1x RS232,<br />

6x SATA, Onboardraid<br />

www.ico.de/linux<br />

inkl. Mwst<br />

exkl. Mwst<br />

3272, 50 2750,-<br />

Intel, das Intel Logo, Xeon, und Xeon Inside sind Marken der<br />

Intel Corporation in den USA und anderen Ländern.<br />

Art.Nr. Bto-262401-23<br />

Hier geht’s direkt<br />

zu den Produkten<br />

Art.Nr. Bto-262402-23<br />

• Intel ® Xeon ® E3-1220 3,1GHz<br />

• 2x 4GB DDR3 RAM<br />

• 4x Western Digital 1TB<br />

• 2x GLAN, 4x USB,1x RS232, 6x SATA, Onboardraid<br />

• Adaptec 6405 4+0 Port LP PCI-E x8 SATA/SAS<br />

• Systemtest mit SuSE<br />

www.ico.de/linux<br />

<strong>Linux</strong> 64bit<br />

inkl. Mwst<br />

exkl. Mwst<br />

1499, 40 1260,-<br />

Art.Nr. Bto-262403-23<br />

wir liefern auch<br />

nach Österreich<br />

u. in die Schweiz


Titelthema<br />

www.linux-magazin.de Py Side 11/2011<br />

28<br />

Der Zugriff auf die XML-RPC Schnittstelle<br />

erfolgt mit Hilfe des mit Python mitgelieferten<br />

Moduls »xmlrpclib«. Ein dazu<br />

notwendiges Proxy-Objekt legt Zeile 8<br />

mit der entsprechenden URL an.<br />

Die Zeilen 35 und 36 verbinden die Signale<br />

der grafischen Elemente mit den<br />

zugehörigen Slots. Hierbei kommt der<br />

Parameter »Qt.QueuedConnection« zum<br />

Einsatz, um die Thread-Sicherheit zu gewährleisten.<br />

Klickt der Benutzer auf den<br />

Knopf »Berechnen«, versucht das Pro‐<br />

gramm ein »QMutex«-Objekt zu sperren.<br />

Diese Objekte dienen zur Synchronisation<br />

mehrerer Threads. Ist bereits eine Berechnung<br />

in Gange, schlägt die Bedingung in<br />

Zeile 44 fehl. Ist das Mutex frei, startet<br />

der Thread nach seiner Initialisierung<br />

(Zeilen 45 bis 48) in Zeile 49.<br />

Die eigentliche Umrechnung findet per<br />

XML-RPC-Proxy in den Zeilen 15 bis 18<br />

statt. Der Code macht das Ergebnis bekannt,<br />

indem er ein »calculated«-Signal<br />

aussendet (Zeilen 20 und 22). Dies ist als<br />

Klassenmethode in Zeile 4 deklariert. Auf<br />

Seiten der grafischen Oberfläche erfolgt<br />

die Auswertung des Ergebnisses im verbundenen<br />

Slot »on_thread_calculated()«<br />

(Zeilen 51 bis 59). An dieser Stelle erfolgt<br />

auch die Freigabe des Mutex (Zeile 59),<br />

sodass der Anwender eine neue Berechnung<br />

starten kann.<br />

In Qt ist der zweite Ansatz, um Programmcode<br />

mit der Methode »QObject.<br />

moveToThread()« [12] in einen anderen<br />

Ausführungskontext zu verschieben,<br />

Listing 5: »app.py«<br />

01 [...]<br />

02 class Gui_Qt(QtGui.QMainWindow):<br />

03 <br />

04 def __init__(self, parent=None):<br />

05 super(Gui_Qt, self).__init__(parent)<br />

06 <br />

07 self.ui = Ui_MainWindow()<br />

08 self.ui.setupUi(self)<br />

09 <br />

10 self.centralwidget = QtGui.QWidget()<br />

11 self.customwidget = Ui_customWidget()<br />

12 self.customwidget.setupUi(self.centralwidget)<br />

13 self.setCentralWidget(self.centralwidget)<br />

14 <br />

15 # actions<br />

16 self.ui.actionExit.triggered.connect(self.<br />

on_actionExit_triggered)<br />

17 self.ui.actionAbout.triggered.connect(self.<br />

on_actionAbout_triggered)<br />

18 <br />

19 def on_actionExit_triggered(self):<br />

20 self.close()<br />

21 <br />

22 def on_actionAbout_triggered(self):<br />

23 QtGui.QMessageBox.about(self, "XML‐RPC Currency Calculator",<br />

24 "&copy; Rainer Poisel und Marcus Nutzinger,<br />

2011")<br />

25 [...]<br />

Listing 6: »app_qthread.py« (gekürzt)<br />

01 [...]<br />

02 class CCurrencyThread(QtCore.QThread):<br />

03 <br />

04 calculated = QtCore.Signal(str)<br />

05 <br />

06 def __init__(self):<br />

07 super(CCurrencyThread, self).__init__()<br />

08 self.mProxy = xmlrpclib.ServerProxy("http://foxrate.org/rpc/")<br />

09 [...]<br />

10 <br />

11 def setArgs(self, pCurSrc, pCurDst, pVal):<br />

12 [...]<br />

13 <br />

14 def run(self):<br />

15 lResult = self.mProxy.foxrate.currencyConvert(\<br />

16 self.mCurSrc, \<br />

17 self.mCurDst, \<br />

18 self.mVal)<br />

19 if lResult['message'] != '"N/A"':<br />

20 self.calculated.emit(str(lResult['amount']))<br />

21 else:<br />

22 self.calculated.emit('')<br />

23 <br />

24 <br />

25 # Create a class for our main window<br />

26 class Gui_Qt(QtGui.QMainWindow):<br />

27 <br />

28 def __init__(self, parent=None):<br />

29 super(Gui_Qt, self).__init__(parent)<br />

30 <br />

31 self.mThread = CCurrencyThread()<br />

32 self.mMutex = QtCore.QMutex()<br />

33 <br />

34 [...]<br />

35 self.mThread.calculated.connect(self.on_thread_calculated,<br />

36 QtCore.Qt.QueuedConnection)<br />

37 <br />

38 def on_actionExit_triggered(self):<br />

39 while self.mThread.isRunning() == True:<br />

40 QtCore.QThread.msleep(100)<br />

41 self.close()<br />

42 <br />

43 def on_processButton_clicked(self):<br />

44 if self.mMutex.tryLock() == True:<br />

45 self.mThread.setArgs(<br />

46 self.customwidget.sourceCurrency.text(),<br />

47 self.customwidget.destinationCurrency.text(),<br />

48 int(self.customwidget.value.text()))<br />

49 self.mThread.start()<br />

50 <br />

51 def on_thread_calculated(self, pAmount):<br />

52 if pAmount == '':<br />

53 self.customwidget.result.setText("")<br />

54 self.customwidget.status.setText("Fehler!")<br />

56 else:<br />

57 self.customwidget.result.setText(str(pAmount))<br />

58 self.customwidget.status.setText("OK")<br />

59 self.mMutex.unlock()<br />

60 [...]


plattformübergreifend einheitlich implementiert.<br />

Listing 7 zeigt das Prinzip:<br />

Nachdem das Objekt und der Thread<br />

erzeugt sind, verschiebt das Programm<br />

die Thread-Affinität des Objekts. Methodenaufrufe<br />

des Objekts erfolgen nun im<br />

zugewiesenen Thread.<br />

Mit »moveToThread()« ergibt sich aber<br />

das Problem, dass sich Signale in einer<br />

Warteschlange sammeln. Es gibt dann<br />

zwar keine Schwierigkeiten mit der<br />

Thread-Sicherheit, sendet der Benutzer<br />

aber das Signal zum Starten einer so verschobenen<br />

Methode mehrmals rasch hintereinander,<br />

wird die unter Umständen<br />

zeitaufwändige Methode auch mehrmals<br />

hintereinander ausgeführt.<br />

Bei komplexen Berechnungen muss sich<br />

der Entwickler aber ohnehin Gedanken<br />

machen, wie er die grafische Oberfläche<br />

ansprechbar hält. Der Artikel „Keeping<br />

the GUI responsive“ von Witold Wysota<br />

[13] beschreibt gängige Strategien.<br />

Gutes GUI-Gefühl<br />

Die Verwendung von Threads ist in Python<br />

aufgrund des Global Interpreter<br />

Lock (GIL) generell problematisch. Die<br />

Abhängigkeiten bei der Ausführung von<br />

Code in mehreren Threads sind <strong>für</strong> den<br />

Skriptprogrammierer oft nicht erkennbar.<br />

Soll komplexerer Programmcode daher<br />

plattformübergreifend par<strong>alle</strong>l laufen, hat<br />

sich der Einsatz des im Lieferumfang von<br />

Python enthaltenen Moduls »multiprocessing«<br />

am besten bewährt. Es ist zwar<br />

nur über Umwege möglich, aus gestarteten<br />

Prozessen auf Elemente der grafischen<br />

Benutzeroberfläche zuzugreifen,<br />

meist ist das aber auch unerwünscht oder<br />

widerspricht den Vorgaben der Software-<br />

Architektur.<br />

Das Beispielprogramm läuft bei installiertem<br />

Python und Py Side auf <strong>Linux</strong><br />

(Abbildung 2), Windows (Abbildung 3)<br />

und Mac OS X. Die Installation von Py<br />

Side auf dem Maemo-Gerät N 900 dagegen<br />

erwies sich im Test als relativ<br />

schwierig. Eine Alternative besteht darin,<br />

die Anwendung mit dem Qt Simulator<br />

auszuprobieren [14]. Ein Aufruf des<br />

Programms startet die Applikation in der<br />

gewünschten Umgebung. Abbildung 4<br />

zeigt die Konfiguration <strong>für</strong> das N 900.<br />

Ausblick<br />

Py Side bietet im aktuellen Entwicklungsstadium<br />

einen beachtlichen Funktionsumfang.<br />

In der Verwendung <strong>für</strong> Forschungs-<br />

und Entwicklungsprojekte hat<br />

es sich als geradezu ideal herausgestellt.<br />

Nicht nur Mockups, sondern auch Prototypen<br />

mit Programmlogik lassen sich<br />

im Handumdrehen umsetzen. Die Plattformunabhängigkeit<br />

des Qt-Framework<br />

sowie die umfangreiche Standardausstattung<br />

von Python bilden hier genau das<br />

passende Gespann.<br />

Dass der Hersteller Nokia an der Verbreitung<br />

von Py Side interessiert ist, zeigt<br />

die konsequente Umsetzung der Qt-Programmierbeispiele<br />

in die Programmiersprache<br />

Python. Wer die Beispiele von<br />

der Projektseite [15] herunterlädt, wird<br />

reichlich belohnt. Dieser Code deckt mittlerweile<br />

fast <strong>alle</strong> Teilbereiche ab, die das<br />

Qt-Framework umfasst.<br />

Die nahe Zukunft birgt <strong>alle</strong>rdings auch<br />

große Herausforderungen: Denn einer<br />

Pressemeldung des Kernentwicklerteams<br />

[16] zufolge stellt Nokia die Förderung<br />

<strong>für</strong> das Py-Side-Projekt mit Ende des Jahres<br />

2011 ein. Auf der Mailingliste wird<br />

das Thema ausgiebig erörtert. Dabei sind<br />

Orte <strong>für</strong> die notwendigen Treffen sowie<br />

Planungen der Ressourcen genauso Diskussionsthema<br />

wie die zukünftige Leitung<br />

des Projekts.<br />

Einen großen Einfluss auf den weiteren<br />

Verlauf wird der Umgang des Herstellers<br />

mit dem gesamten Qt-Framework haben.<br />

Branchenkenner haben unterschiedliche<br />

Zukunftszenarien <strong>für</strong> Nokia ausgemalt.<br />

Da scheint Qt auch in Zukunft eine wesentliche<br />

Rolle einzunehmen. (mhu) n<br />

[3] Mark Summerfield, „Adopt PyQt’s API 2<br />

for PySide“: [http:// www. pyside. org/ docs/​<br />

pseps/ psep‐0101. html]<br />

[4] Py-Side-Module: [http:// www. pyside. org/​<br />

docs/ pyside/ py‐modindex. html]<br />

[5] Widget-Galerie: [http:// doc. qt. nokia. com/​<br />

latest/ g<strong>alle</strong>ry‐plastique. html]<br />

[6] »QMainWindow«:<br />

[http:// www. pyside. org/ docs/ pyside/​<br />

PySide/ QtGui/ QMainWindow. html]<br />

[7] Widget-Beispiele: [https:// qt. gitorious.​<br />

org/ pyside/ pyside‐examples/ trees/​<br />

master/ examples/ widgets]<br />

[8] Beispiele <strong>für</strong> Item-Views: [https:// qt.​<br />

gitorious. org/ pyside/ pyside‐examples/​<br />

trees/ master/ examples/ itemviews]<br />

[9] Qt Creator: [http:// qt. nokia. com/ products/​<br />

developer‐tools/]<br />

[10] Listings zum Artikel:<br />

[http:// www. linux‐magazin. de/ static/​<br />

listings/ magazin/ 2011/ 11/]<br />

[11] Signale und Slots: [http:// doc. qt. nokia.​<br />

com/ latest/ signalsandslots. html]<br />

[12] »moveToThread()« [http:// www. pyside.​<br />

org/ docs/ pyside/ PySide/ QtCore/ QObject.​<br />

html# PySide. QtCore. PySide. QtCore.​<br />

QObject. moveToThread]<br />

[13] Witold Wysota, „Keeping the GUI Responsive“:<br />

[http:// doc. qt. nokia. com/ qq/​<br />

qq27‐responsive‐guis. html]<br />

[14] Py-Side-Applikationen auf Qt Simulator:<br />

[http:// www. maemonokian900. com/​<br />

maemo‐news/ running‐pyside‐applications<br />

‐on‐qt‐simulator/]<br />

[15] Py-Side-Beispiele von Nokia:<br />

[https:// qt. gitorious. org/ pyside/​<br />

pyside‐examples/ trees/ master/ examples]<br />

[16] Zur Zukunft von Py Side:<br />

[http:// www. pyside. org/ 2011/ 08/​<br />

pyside‐project‐future/]<br />

Die Autoren<br />

Marcus Nutzinger arbeitet als Entwickler bei<br />

Theobroma Systems in Wien. Er programmiert in<br />

C und Python einerseits Kerneltreiber, andererseits<br />

Dienste und Anwendungen. Rainer Poisel<br />

ist wissenschaftlicher Mitarbeiter am Institut <strong>für</strong><br />

IT-Sicherheitsforschung an der Fachhochschule<br />

St. Pölten in Österreich. Dort forscht er in der IT-<br />

Forensik und lehrt im Studiengang IT-Security.<br />

Listing 7: »moveToThread()«<br />

Py Side 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

29<br />

Abbildung 4: Der Einsatz der Anwendung auf Mobilgeräten<br />

lässt sich mit Qt Simulator ohne Installationsaufwand<br />

testen.<br />

Infos<br />

[1] Py Side: [http:// www. pyside. org]<br />

[2] Py Qt: [http:// www. riverbankcomputing.​<br />

com/ software/ pyqt/ intro]<br />

01 lObject = QtCore.QObject()<br />

02 lThread = QtCore.QThread()<br />

03 lObject.moveToThread(lThread)<br />

04 lThread.start()<br />

05 lObject.exampleMethod()


Titelthema<br />

www.linux-magazin.de GTK+ 11/2011<br />

30<br />

Crossplattform-Entwicklung mit Python und GTK+<br />

Auf einen Streich<br />

Mit Python und GTK+ ist eine GUI-Anwendung <strong>für</strong> <strong>Linux</strong> rasch geschrieben. Mit ein wenig Installationsarbeit<br />

läuft der gleiche Code auch unter Windows und Mac OS X. Matthias Warkus<br />

Pakete »intltool«, »libgtk2.0‐dev« und<br />

»libxml2‐dev« erforderlich, die sich per<br />

Paketverwaltung installieren lassen. Den<br />

ausgepackten Quelltext-Tarball von Glade<br />

übersetzt und installiert klassisch »./configure<br />

&& make && sudo make install«.<br />

Unter anderen <strong>Linux</strong>-Distributionen ist<br />

es oft möglich, Glade 3.8 über den Paketmanager<br />

zu installieren, eventuell sogar<br />

par<strong>alle</strong>l zu Glade 3.10.<br />

Oberflächen-Bausatz<br />

© jirkaejc, 123RF<br />

Das Framework GTK+ taugt nicht nur<br />

<strong>für</strong> grafische Benutzeroberflächen unter<br />

<strong>Linux</strong>, sondern läuft auch unter Windows<br />

und Mac OS X. Python eignet sich<br />

als Programmiersprache, um mit GTK+<br />

schnell Ergebnisse zu erzielen. Das zeigt<br />

sich unter anderem darin, dass diverse<br />

Komponenten von Gnome und Ubuntu<br />

mittlerweile mit Hilfe dieser Kombination<br />

realisiert sind.<br />

Eines <strong>für</strong> drei<br />

Dieser Artikel zeigt, wie man eine kleine<br />

Python-GTK+-Anwendung programmiert,<br />

die sich <strong>für</strong> mehrere Plattformen<br />

eignet: <strong>Linux</strong>, (eine Betaversion von<br />

Ubuntu 11.10 Oneiric Ocelot), Mac OS<br />

X 10.7.1 Lion und Windows 7, bei <strong>alle</strong>n<br />

Systemen auf der 64-Bit-Intel-Architektur.<br />

Dabei kommt GTK+ [1] in Version<br />

2.24 zum Einsatz, Python in Version 2.7.<br />

Für neuere GTK+-Ausgaben gibt es im<br />

Zusammenspiel mit Python noch keine<br />

produktionsreife Unterstützung auf diesen<br />

drei Systemen, insbesondere nicht<br />

mit Python 3. Einen Ausblick in Sachen<br />

Versionen gibt der Kasten „Die Zukunft:<br />

GTK+ 3, Python 3, Py Gobject“.<br />

Als Beispielprogramm dient ein Temperatur-Umrechner<br />

– nichts anderes als ein<br />

Dialogfenster, das fünf Zahlenfelder enthält,<br />

die eine Temperatur in unterschiedlichen<br />

Einheiten wie Fahrenheit und Celsius<br />

anzeigen. Ändert der Nutzer einen<br />

Wert in einem der Felder, ändern sich<br />

auch die anderen entsprechend.<br />

Die Entwicklung einer GTK+-Anwendung<br />

beginnt damit, eine oder mehrere<br />

Benutzeroberflächen-Dateien im GTK-<br />

Builder-Format mit dem GUI-Tool Glade<br />

[2] zu erstellen. Für diesen Artikel erledigt<br />

das Glade 3.8, die letzte Version<br />

mit Unterstützung <strong>für</strong> GTK+ 2.x, der<br />

Einfachheit halber unter <strong>Linux</strong>.<br />

Da Oneiric Ocelot von Haus aus nur<br />

noch 3.10 – die Glade-Version <strong>für</strong> GTK+<br />

3.0 und aufwärts – mitbringt, muss der<br />

Ubuntu-Benutzer Glade aus dem Quellpaket<br />

[3] kompilieren. Dazu sind die<br />

Nach dem Starten von Glade durch das<br />

Kommando »glade‐3« oder per Startmenü<br />

erscheint ein Fenster mit einer Arbeitsfläche<br />

(in der Mitte), einer Palette mit<br />

Widgets (links), einer Baumdarstellung<br />

der Widget-Hierarchie (rechts oben) und<br />

einer umfangreichen Liste zum Bearbeiten<br />

der Eigenschaften des jeweiligen<br />

Widgets (Abbildung 1). Ein Klick auf das<br />

Symbol <strong>für</strong> Dialogfenster in der Widget-<br />

Palette fügt das Fenster als oberste Ebene<br />

der Hierarchie ein. Darin befinden sich<br />

Platzhalter, in die der Anwender weitere<br />

Widgets einfügt.<br />

Am Ende der recht grafischen Arbeit steht<br />

ein Dialog mit einem Schließen-Knopf,<br />

einer Beschriftung und dem Tabellenbehälter<br />

»GtkTable«, der fünf weitere Beschriftungen<br />

und daneben jeweils ein<br />

Zahlenfeld enthält. Die Zahlenfelder sind<br />

jeweils mit je einem »GtkAdjustment« assoziiert,<br />

das nach dem MVC-Paradigma<br />

als Model fungiert – dies muss explizit<br />

von Hand passieren. Die Zahlenfelder<br />

sowie der Schließen-Knopf haben eindeutige<br />

Kennungen erhalten.<br />

Die fertige Oberflächenbeschreibung lässt<br />

sich als Datei »temperatur.gtkbuilder«<br />

abspeichern. Listing 1 zeigt einen Ausschnitt<br />

daraus, der ahnen lässt, wie die<br />

Widget-Hierarchie und die verschiedenen


Eigenschaftswerte <strong>für</strong> das Layout in XML<br />

festgehalten sind. Diese und andere Dateien<br />

zu diesem Artikel stehen ungekürzt<br />

unter [4] zum Download bereit.<br />

GTK+ 11/2011<br />

Titelthema<br />

Der Code<br />

Abbildung 1: Die Oberfläche des Temperatur-Umrechners stellt der Entwickler in Glade zusammen.<br />

Das Programm selbst findet sich in<br />

Listing 2. Es enthält knapp über 60 Zeilen<br />

Python und ist recht simpel gestrickt.<br />

Die gesamte Anwendung besteht aus der<br />

Definition der Klasse »TemperaturApp«<br />

(Zeile 11), die neben dem Konstruktor<br />

»_ _init_ _()« die Methoden »main()«,<br />

»delete_event()«, »destroy()« und »geaendert()«<br />

umfasst.<br />

Die Methode »main()« in Zeile 58 startet<br />

lediglich die Hauptschleife, »destroy()« in<br />

Zeile 16 beendet diese beim Aufruf, »delete_event()«<br />

in Zeile 13 ist ein Ereignishandler<br />

<strong>für</strong> das Schließen des Programms<br />

durch den Fenstermanager und gibt nur<br />

»False« zurück. Die Anwendungslogik<br />

steckt in »geaendert()« ab Zeile 19. Es<br />

handelt sich um einen Signalhandler, der<br />

aufgerufen wird, wenn eines der Zahlenfelder<br />

seinen Wert ändert.<br />

Um so wenig Code wie möglich fünfmal<br />

schreiben zu müssen, verwendet der Entwickler<br />

das Tupel »felder« mit den Kennungen<br />

<strong>alle</strong>r Zahlenfeld-Widgets in der<br />

GTK-Builder-Datei sowie die Dictionaries<br />

»wert{}«, »widget{}« und »handler{}«<br />

(Zeilen 6 bis 9), die die Widget-Objekte<br />

selbst, ihre Werte <strong>für</strong> die Neuberechnung<br />

sowie die Kennungen speichern, unter<br />

denen jeweils »geaendert()« als Signalhandler<br />

an sie gebunden ist. Dabei dient<br />

das Tupel »felder« als Indexmenge.<br />

Der Konstruktor »_ _init_ _()« mit dem <strong>für</strong><br />

den Aufbau des Dialogfensters zuständigen<br />

Code ist ab Zeile 45 zu sehen. Er lädt<br />

die GTK-Builder-Datei in das Objekt<br />

»builder« und entnimmt daraus mit »get_<br />

object()« die Widgets. So weit wie möglich<br />

setzt das Programm For-Schleifen<br />

ein, um über die Widgets zu iterieren,<br />

etwa beim Binden von »geaendert()« als<br />

Signalhandler an das Signal »value_changed«<br />

der Zahlenfelder in Zeile 51.<br />

Die Methode »geaendert()« zeigt in den<br />

Zeilen 39 bis 43, wozu die Kennungen<br />

nützlich sind, die »gtk.Widget.connect()«<br />

beim Binden eines Signalhandlers zurückgibt.<br />

Sie lassen sich einsetzen, um<br />

eine Endlosschleife zu verhindern: Wenn<br />

das Programm den neu berechneten Wert<br />

in ein Zahlenfeld schreibt, würde das<br />

eigentlich eine Emission des Signals »value‐changed«<br />

und damit wiederum eine<br />

Neuberechnung auslösen. Daher sperrt<br />

der Code vor dem Setzen des Wertes den<br />

Signalhandler des betreffenden Felds mit<br />

der Widget-Methode »handler_block()«,<br />

hinterher entsperrt er sie mit »handler_<br />

unblock()« wieder.<br />

<strong>Linux</strong><br />

Unter <strong>Linux</strong> läuft das Programm wie erwartet<br />

ohne Probleme. Da Ubuntu-Kern‐<br />

www.linux-magazin.de<br />

31<br />

Listing 1: »temperatur.gtkbuilder« (gekürzt)<br />

01 <br />

02 <br />

03 <br />

04 <br />

05 [...]<br />

06 <br />

07 False<br />

08 12<br />

09 Temperaturumrechner<br />

<br />

10 400<br />

11 dialog<br />

12 <br />

13 <br />

14 True<br />

15 False<br />

16 2<br />

17 <br />

18 <br />

19 [...]<br />

20 <br />

21 <br />

22 [...]<br />

23 <br />

24 <br />

25 False<br />

26 False<br />

27 0<br />

28 <br />

29 <br />

30 <br />

31 <br />

32 [...]<br />

33 <br />

34 <br />

35 <br />

36


Titelthema<br />

www.linux-magazin.de GTK+ 11/2011<br />

32<br />

01 #!/usr/bin/python<br />

02 import pygtk<br />

komponenten auf Python und GTK+<br />

basieren, sind die benötigten Pakete<br />

»python‐gtk2« und »python‐glade2« samt<br />

ihren Abhängigkeiten ohnehin schon installiert.<br />

Aufgerufen mit »./temperatur.<br />

py« sieht das Ergebnis aus wie in Abbildung<br />

2.<br />

Mac OS X<br />

03 pygtk.require('2.0')<br />

04 import gtk<br />

05 <br />

Mac OS X 10.7.1 liefert zwar ein ziemlich<br />

aktuelles Python (2.7.1) mit, <strong>alle</strong>rdings<br />

ohne Py GTK. Der derzeit neueste und<br />

schickste Paket-Installationsmanager<br />

Homebrew [5] verweigert aus Prinzip<br />

Pakete in seine Sammlung aufzunehmen,<br />

die bereits der Paketmanager einer<br />

Programmiersprache anbietet. Und lei‐<br />

der scheitern auch die Python-Lösungen<br />

»easy_install« und »pip«. Es bleibt als<br />

einfachste Lösung, ein vollständiges Python-System<br />

samt Py GTK mit dem etwas<br />

älteren Installationswerkzeug Macports<br />

zu kompilieren. Ist Macports nach der<br />

Anleitung auf der Homepage [6] installiert,<br />

dann reicht die einfache Befehlszeile<br />

»sudo port install py27‐gtk«. Der<br />

darauf folgende Kompiliervorgang kann<br />

ein wenig dauern – es empfiehlt sich, Geduld<br />

und eine Kanne des koffeinhaltigen<br />

Lieblingsgetränks bereitzuhalten.<br />

Dann muss der Mac-Anwender noch sicherstellen,<br />

dass die Umgebungsvariablen<br />

»PATH« und »PYTHONPATH« korrekt<br />

gesetzt sind. Wenn sich Macports wie<br />

verlangt in »/opt/local« befindet, heißt<br />

dies, die folgende Zeilen in die Datei<br />

06 felder = "kelvin‐feld", "celsius‐feld", "fahrenheit‐feld", "reaumur‐feld", "rankine‐feld"<br />

07 wert = {}<br />

08 widget = {}<br />

09 handler = {}<br />

10 <br />

11 class TemperaturApp:<br />

12 <br />

13 def delete_event(self, widget, event, data=None):<br />

14 return False<br />

15 <br />

16 def destroy(self, widget, data=None):<br />

17 gtk.main_quit()<br />

18 <br />

Abbildung 2: Der Temperatur-Umrechner läuft unter<br />

<strong>Linux</strong> (Ubuntu 11.10 Beta) problemlos.<br />

Listing 2: »temperatur.py« (Teil 1)<br />

19 def geaendert(self, objekt, was):<br />

20 wert[was] = widget[was].get_value()<br />

21 if was == "celsius‐feld":<br />

22 wert["kelvin‐feld"] = wert["celsius‐feld"] + 273.15<br />

23 elif was == "fahrenheit‐feld":<br />

24 wert["kelvin‐feld"] = (5.0/9.0)*(wert["fahrenheit‐feld"]‐32.0) + 273.15<br />

25 elif was == "reaumur‐feld":<br />

Abbildung 3: Unter Mac OS X 10.7.1 Lion sieht das<br />

Programm nicht besonders Mac-artig aus.<br />

Abbildung 4: Auf Windows 7 Home Professional 64<br />

Bit passt die Anwendung gut zur Umgebung.<br />

»~/.profile« einzutragen und sich neu<br />

einzuloggen:<br />

export PATH=/opt/local/bin:$PATH<br />

export PYTHONPATH=/opt/local/Library/U<br />

Frameworks/Python.framework/Versions/2.7/U<br />

lib/python2.7/site‐packages/<br />

Der Aufruf von »./temperatur.py« führt<br />

dazu, dass das Icon des X-Servers im<br />

Dock auftaucht; dann startet der Temperatur-Umrechner,<br />

ungefähr wie auf Abbildung<br />

3 zu sehen.<br />

Es fällt auf, dass die Widgets das Standardaussehen<br />

von GTK+ haben – im<br />

Gegensatz zum Ubuntu-Look in Abbildung<br />

2, aber auch zum nativen Look<br />

von Mac OS X. Daran lässt sich mit vertretbarem<br />

Aufwand auch wenig ändern.<br />

Es existieren ein natives Quartz-Backend<br />

GTK-OSX [7], das leider nicht gerade hingebungsvoll<br />

gepflegt wird, und auch eine<br />

Themen-Engine <strong>für</strong> GTK+, die native<br />

Anwendungen imitiert. Deren Installation<br />

ist <strong>alle</strong>rdings sehr aufwändig.<br />

Windows 7<br />

Unter Windows ist zunächst ein Python-<br />

Interpreter erforderlich, und zwar in der<br />

32-Bit-Version [8], denn die 64-Bit-Version<br />

unterstützt Py GTK derzeit nicht.<br />

Hat der Anwender das MSI-Paket mit dem<br />

Durchklicken des Installationsassistenten<br />

installiert, kann er als nächsten Schritt<br />

einfach das All-in-one-Installationspaket<br />

<strong>für</strong> Py GTK einspielen [9], das <strong>alle</strong> Abhängigkeiten<br />

mitbringt. Anschließend<br />

muss er unter Umständen noch der Pfad<br />

setzen:<br />

set PYTHONPATH=%PYTHONPATH%;U<br />

C:\Python27\Lib\site‐packages<br />

Danach kann er in der Eingabeaufforderung<br />

mit »temperatur.py« das Programm


starten. Wer nun kaputte Zeichen sieht,<br />

sollte durch Öffnen in einem Editor sicherstellen,<br />

dass die GTK-Builder-Datei<br />

UTF8-kodiert ist. Stimmt <strong>alle</strong>s, so sieht<br />

das Ergebnis aus wie in Abbildung 4. Unter<br />

Windows kommt die GTK+-Anwendung<br />

einem nativen Aussehen sichtlich<br />

näher als unter Mac OS X.<br />

Installationssache<br />

Wie dieser Artikel zeigt, ist die Portierung<br />

von einfachen Py-GTK-Programmen<br />

zwischen den drei großen Desktop-<br />

Plattformen kein Programmierproblem.<br />

Der wesentliche Aufwand besteht in der<br />

Installation der nötigen Pakete auf den<br />

Zielsystemen. Unter Mac OS X bleibt<br />

eine einfach zu installierende GTK+-<br />

Implementierung auf nativer Basis wünschenswert,<br />

unter Windows fehlt eine<br />

64-Bit-taugliche Py-GTK-Version. Auf den<br />

beiden Nicht-<strong>Linux</strong>-Plattformen ist die<br />

neueste GTK+-Version 3.0 mit Python<br />

aber noch nicht reif <strong>für</strong> den Produktiveinsatz.<br />

(mhu)<br />

n<br />

Infos<br />

[1] GTK+: [http:// www. gtk. org]<br />

[2] Glade: [http:// glade. gnome. org]<br />

[3] Glade 3.8: [http:// launchpad. net/ glade/<br />

3. 8/ 3. 8. 0/ +download/ glade3‐3. 8. 0. tar. gz]<br />

[4] Quelltexte zum Artikel:<br />

[http:// www. linux‐magazin. de/ static/​<br />

listings/ magazin/ 2011/ 11/ gtk/]<br />

[5] Homebrew:<br />

[https:// github. com/ mxcl/ homebrew/]<br />

[6] Installation von Macports:<br />

[http:// www. macports. org/ install. php]<br />

[7] Quartz-Backend GTK-OSX:<br />

[http:// gtk‐osx. sourceforge. net]<br />

[8] Python <strong>für</strong> Windows: [http:// www. python.​<br />

org/ ftp/ python/ 2. 7. 2/ python‐2. 7. 2. msi]<br />

[9] Py GTK <strong>für</strong> Windows:<br />

[http:// ftp. gnome. org/ pub/ GNOME/​<br />

binaries/ win32/ pygtk/ 2. 24/​<br />

pygtk‐all‐in‐one‐2. 24. 0. win32‐py2. 7. msi]<br />

[10] Py Gobject:<br />

[http:// live. gnome. org/ PyGObject]<br />

Der Autor<br />

Matthias Warkus ist Autor von offiziellen Entwicklerhandbüchern<br />

<strong>für</strong> GTK+ und Gnome. Er<br />

promoviert an der Philipps-Universität Marburg<br />

in Philosophie und war auch <strong>für</strong> das dortige Hochschulrechenzentrum<br />

tätig.<br />

Die Zukunft: GTK+ 3, Python 3, Py Gobject<br />

Listing 2: »temperatur.py« (Teil 2)<br />

26 wert["kelvin‐feld"] = (5.0/4.0)*wert["reaumur‐feld"] + 273.15<br />

27 elif was == "rankine‐feld":<br />

28 wert["kelvin‐feld"] = (5.0/9.0)*wert["rankine‐feld"]<br />

29 <br />

30 if was != "celsius‐feld":<br />

31 wert["celsius‐feld"] = wert["kelvin‐feld"] ‐ 273.15<br />

32 if was != "fahrenheit‐feld":<br />

33 wert["fahrenheit‐feld"] = (9.0/5.0)*(wert["kelvin‐feld"]‐273.15) + 32.0<br />

34 if was != "reaumur‐feld":<br />

35 wert["reaumur‐feld"] = (4.0/5.0)*(wert["kelvin‐feld"]‐273.15)<br />

36 if was != "rankine‐feld":<br />

37 wert["rankine‐feld"] = (9.0/5.0)*wert["kelvin‐feld"]<br />

38 <br />

39 for i in felder:<br />

40 if was != i:<br />

41 widget[i].handler_block(handler[i])<br />

42 widget[i].set_value(wert[i])<br />

43 widget[i].handler_unblock(handler[i])<br />

44 <br />

45 def __init__(self):<br />

46 builder = gtk.Builder()<br />

47 builder.add_from_file("temperatur.gtkbuilder")<br />

48 for i in (("fenster", "schliessknopf") + felder):<br />

49 widget[i] = builder.get_object(i)<br />

50 for i in felder:<br />

51 handler[i] = widget[i].connect("value_changed", self.geaendert, i)<br />

52 widget["schliessknopf"].connect_object("clicked", gtk.Window.destroy, widget["fenster"])<br />

53 widget["fenster"].connect("delete_event", self.delete_event)<br />

54 widget["fenster"].connect("destroy", self.destroy)<br />

55 widget["fenster"].show_all()<br />

56 widget["celsius‐feld"].set_value(100)<br />

57 <br />

58 def main(self):<br />

59 gtk.main()<br />

60 <br />

61 if __name__ == "__main__":<br />

62 app = TemperaturApp()<br />

63 app.main()<br />

Unter <strong>Linux</strong> ist es heute bereits problemlos<br />

möglich, den Temperatur-Umrechner unter<br />

Python 3 und mit der GTK+-Version 3 zu realisieren.<br />

Dabei kommt zweckmäßigerweise auch<br />

das neue Python-Binding Py Gobject 2.90 [10]<br />

zum Einsatz. Es hat den Vorteil, dass es nicht<br />

mehr statisch implementiert ist, sondern über<br />

Gobject-Introspektion dynamisch funktioniert:<br />

Py Gobject 2.90 ist sozusagen nur noch ein<br />

kleiner Treiber, der Python beibringt, um auf<br />

die Gobject-Introspektionsdatenbank zuzugreifen,<br />

in der die verfügbaren Klassen mit ihren<br />

Fähigkeiten verzeichnet sind. Der Wartungsaufwand<br />

zusätzlicher Sprachbindungen <strong>für</strong> Glib,<br />

Gobject, GTK+ und die sonstigen Bibliotheken<br />

der G-Welt soll so drastisch sinken.<br />

Für den Temperatur-Umrechner relevant und<br />

neu in GTK+ 3 sind ansonsten vor <strong>alle</strong>m der<br />

neue Container »GtkGrid«, der »GtkTable« ablöst<br />

und einige Layouts einfacher umsetzbar<br />

macht, sowie das Anwendungsobjekt »GtkApplication«,<br />

das die laufende Anwendung sauber<br />

als Objekt abbildet. Damit wird es überflüssig,<br />

die Hauptschleife von Hand zu starten.<br />

Leider ist die Installation von GTK+ 3 – ganz<br />

gleich auf welcher Python-Version – derzeit<br />

nur auf <strong>Linux</strong>-Systemen mit vertretbarem Aufwand<br />

möglich. Unter Mac OS X und Windows<br />

7 fehlt es noch an fertigen Paketen, sodass<br />

der Anwender außerordentlich viel von Hand<br />

kompilieren muss. Unter Windows kommt als<br />

zusätzliche Hürde – insbesondere bei der<br />

64-Bit-Version – hinzu, dass da<strong>für</strong> erst einmal<br />

eine GNU-Toolchain wie Cygwin oder Min GW<br />

erforderlich ist.<br />

Für Interessierte ist unter [4] der Temperaturumrechner<br />

als GTK+-3-Version verfügbar, lauffähig<br />

mit Python 2 oder Python 3.<br />

GTK+ 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

33


Titelthema<br />

www.linux-magazin.de Java 11/2011<br />

34<br />

Plattformunabhängig mit Java<br />

Kaffee <strong>für</strong> <strong>alle</strong><br />

Sun hatte Java mit dem Anspruch der Plattformunabhängigkeit entwickelt – „Write once, run everywhere“ ist<br />

das Motto der Virtual Machines, die ihren Bytecode abarbeiten. Die Zubereitung einer überall schmackhaften<br />

Anwendung bedarf trotzdem erlesener Zutaten. Konstantin Agouros<br />

© mem-film.de, photocase.com<br />

Java versucht die Plattformunabhängigkeit<br />

dadurch zu erreichen, dass es selbst<br />

eine Plattform ist. So schafft es eine Abstraktion<br />

gegenüber dem Betriebssystem<br />

und der Hardware. Im Prinzip erfüllt Java<br />

den Anspruch: Crosskompilieren ist nicht<br />

notwendig, Datenstrukturen, Algorithmen<br />

und der Binärcode laufen auf jeder<br />

Java Virtual Machine (JVM).<br />

Aber Java ist nicht gleich Java: Der Markt<br />

bietet Implementierungen mehrerer Hersteller<br />

<strong>für</strong> <strong>alle</strong> gängigen Betriebssysteme<br />

in vielen Versionen. Dazu kommen Exoten<br />

wie die Micro Edition [1], die nur ein<br />

Subset implementiert. Die Unterschiede<br />

zwischen den JVMs sind meist subtiler<br />

als die unterschiedliche Schreibweise<br />

des Dateipfad-Trenners (»/« versus »\«).<br />

Dieser Artikel gibt dem Entwickler einen<br />

Leitfaden, anhand dessen er<br />

seine Programme hochportabel<br />

gestalten kann.<br />

Das Dateisystem<br />

Die Java-Programmierer wickeln<br />

Zugriffe auf Dateien<br />

meist über IO-Klassen oder<br />

noch abstraktere Klassen<br />

ab. Trotzdem müssen manche<br />

Programme einen Dateinamen<br />

übergeben oder das<br />

Homedirectory des Benutzers<br />

ermitteln.<br />

Die Abstraktionsklasse <strong>für</strong><br />

Da teizugriffe ist »java.io.File«.<br />

Gibt man einen absoluten Dateinamen<br />

beim Instanziieren<br />

der Klasse an, so ist dies plattformunabhängig<br />

und Java<br />

tauscht »/« und »\« passend<br />

aus. Über die Variablen »File.<br />

separator« oder »System.get-<br />

Property("file.separator")« lässt sich der<br />

Trenner der Plattform ermitteln. Zum Navigieren<br />

in Pfaden bietet die File-Klasse<br />

Methoden, die überall funktionieren; Beachtung<br />

verdient nur der in Unix-Pfaden<br />

fehlende Laufwerksbuchstabe.<br />

Seit der neuen Version 7 [2] gestattet es<br />

Java erstmalig, auf spezielle Eigenschaften<br />

der Dateisysteme wie Berechtigungen,<br />

Gruppen und so weiter zuzugreifen.<br />

Schon länger sind fortgeschrittene Techniken<br />

wie Memory Mapped IO möglich,<br />

wie sie der Artikel [3] beschreibt.<br />

Drei grafische Frameworks<br />

Die erste Inkarnation eines GUI in Java<br />

war das Abstract Windowing Toolkit [4].<br />

AWT beinhaltet Basiskomponenten wie<br />

Buttons oder Textfelder und hilft sie anzuordnen.<br />

AWT ist nicht besonders flexibel<br />

und die GUI-Elemente beschränken sich<br />

auf einen Basissatz. Die JVM bildet eine<br />

AWT-Applikation auf das Windowing der<br />

Plattform ab, auf der sie läuft.<br />

Programmierer, die sich auf die Standardeinstellungen<br />

verlassen, indem sie etwa<br />

einen Button mit dem Text, der im Button<br />

erscheinen soll, instanziieren, sollten auf<br />

<strong>alle</strong>n in Frage kommenden Ablaufplattformen<br />

testen, ob die Komponenten wie<br />

erwartet sichtbar sind. Eventuell nötige<br />

Änderungen betreffen meist nur Größe<br />

und Anordnung, aber auch das Verhalten<br />

beim Ändern der Fenstergröße unterscheidet<br />

sich ab und an.<br />

Die zweite Inkarnation eines GUI-Toolkit<br />

war und ist Swing ([5], [6]). Sun hatte<br />

es erstmals mit Java 1.2 ausgeliefert. Es<br />

erweitert Java um Tabellen und andere<br />

etwas anspruchsvollere GUI-Komponenten<br />

sowie die so genannten Look-and-<br />

Feels. Das Metal-Look-and-Feel zeichnet<br />

seither die meisten Java-Applikationen<br />

aus. Auch aktuelle Java-Applikationen<br />

setzen noch auf diese Technologie.<br />

Die Zukunft gehört, glaubt man Oracle,<br />

aber dem Framework Java FX. Nach einer<br />

desaströsen Version 1.0, in der Programmierer<br />

GUIs über eine getrennte<br />

Skriptsprache definieren sollten, machte<br />

FX 2.0 <strong>alle</strong>s neu und gut [7]. Vor <strong>alle</strong>m<br />

Java-Interfaces zu FX – die bei 1.0 fehlten<br />

– existieren jetzt. Look-and-Feel ist aber<br />

mehr als der Metal-Look. Es ermöglicht<br />

das Umschalten zwischen GUI-Familien.<br />

Das Codefragment in Listing 1 zeigt, wie<br />

man die von einer Plattform bereitgestellten<br />

Look-and-Feels auflistet.<br />

Die Ausgabe des Codefragments unterscheidet<br />

sich je nach verwendeter Plattform<br />

und Java-Version. Oracles Java 1.6


gibt auf <strong>Linux</strong> Metal, Nimbus, CDE-Motif<br />

und GTK+ aus. Metal und (seit Java 1.6<br />

Release 10) dessen peppigere Alternative<br />

Nimbus sind Java-eigen, es gibt sie auf<br />

<strong>alle</strong>n Plattformen. CDE-Motif, das das<br />

Look-and-Feel von Unix-Workstations<br />

der 90er Jahre nachstellt, ebenso. Nicht<br />

<strong>für</strong> plattformneutrale Programmierung<br />

eignen sich die Look-and-Feels GTK+,<br />

Windows, Windows Classic und Mac OS<br />

X (siehe Abbildung 1).<br />

Kommen auch ältere Java-Versionen zum<br />

Einsatz, ändern sich die Wahlmöglichkeiten<br />

abermals: Blackdown-JDK 1.4 bietet<br />

Metal, CDE-Motif und Windows, Sun JDK<br />

1.5 Metal, CDE-Motif und GTK+. Um<br />

„Runs everywhere“ zu erfüllen, muss der<br />

Entwickler entweder <strong>alle</strong> sechs Versionen<br />

testen oder versuchen das Programm auf<br />

Metal festzunageln.<br />

Dabei reicht es auch nicht, sich auf das<br />

Defaultverhalten zu verlassen (ein Standardwert,<br />

der sich je nach Plattform<br />

unterscheidet), da es über die Kommandozeilenoption<br />

»‐Djava ‐Dswing.<br />

defaultlaf=Gewünschte_Version« oder<br />

eine Properties-Datei beeinflussbar ist.<br />

Das Look-and-Feel auszuwählen, das<br />

dem verwendeten Betriebssystem am<br />

ähnlichsten sieht, gelingt mit der Zeile:<br />

UIManager.setLookAndFeel(UIManagerU<br />

.getSystemLookAndFeelClassName());<br />

Bei GTK unter <strong>Linux</strong> verwendet Java sogar<br />

die vom Benutzer ausgewählten Themadateien.<br />

Obendrein darf ein Anwender<br />

eigene Look-and-Feels entwerfen und damit<br />

das Standardverhalten überschreiben,<br />

sodass dem Programmierer nur noch das<br />

Festnageln auf Metal übrig bleibt, um<br />

vor Überraschungen sicher zu sein. Und<br />

dass selbst Metal nicht gleich Metal ist,<br />

musste der Autor dieses Artikels vor Kurzem<br />

am eigenen Leib erleben, als eine<br />

Applikation, die er zum Testen bekam,<br />

auf <strong>Linux</strong> und Windows anstandslos lief,<br />

auf einem Mac jedoch Probleme beim<br />

Redraw machte.<br />

Als Alternative zu Swing schickte IBM im<br />

Jahr 2001 das Standard Widget Toolkit<br />

[8] ins Rennen. SWT versucht – ähnlich<br />

wie AWT – die nativen Elemente der darunterliegenden<br />

Plattform heranzuziehen.<br />

Dies ist ein Segen <strong>für</strong> die Performance<br />

der Anwendung – wenn SWT geeignete<br />

Bibliotheken auf der Plattform vorfindet<br />

und damit das GUI so schnell wird wie<br />

eine native Applikation. Zum Fluch <strong>für</strong><br />

die Performance gerät die Sache, wenn<br />

es keine Bibliothek vorfindet und jede<br />

Aktion emulieren muss.<br />

Java Native Interface<br />

Für das plattformunabhängige Layout<br />

bereiten AWT und Swing dem Entwickler<br />

die gleiche Problem: Er muss sein<br />

Programm auf <strong>alle</strong>n Zielplattformen testen.<br />

Bei SWT kommt hinzu, dass es das<br />

Java Native Interface [9] verwendet. Mit<br />

JNI erreicht Javas Idee der Plattformunabhängigkeit<br />

dann auch ihr Ende: Das<br />

Interface macht Java-Anwendungen die<br />

Routinen vorhandener Binärbibliotheken<br />

zugänglich. Dazu muss die Java-Klasse<br />

die Bibliothek selbst laden, entweder eine<br />

Shared Library bei <strong>Linux</strong> und Unix oder<br />

eine DLL unter Windows.<br />

Wer ein JNI-nutzendes Programm <strong>für</strong><br />

mehrere Plattformen bereitstellen will,<br />

sollte die Shared Libraries am besten<br />

selbst einpacken – auch wenn es Standardbibliotheken<br />

sind –, um Versionskonflikte<br />

zu vermeiden. SWT, das wie<br />

erwähnt JNI verwendet, liefert die entsprechenden<br />

Binärbibliotheken mit. Beim<br />

Paketieren der eigenen Anwendung, baut<br />

man entweder einzelne Pakete <strong>für</strong> die<br />

unterschiedlichen Plattformen oder packt<br />

<strong>alle</strong> Versionen ein.<br />

Eine interessante Alternative zu JNI ist<br />

Java Native Access (JNA, Homepage und<br />

Download unter [10]). Statt die Shared<br />

Library hinzuzuladen, stellt JNA nur eine<br />

kleine Klasse bereit, die generische Bibliotheken<br />

lädt, den Rest erledigt der Entwickler<br />

in reinem Java. Im Paket finden<br />

sich Interfaces <strong>für</strong> <strong>Linux</strong>, Free BSD und<br />

Windows <strong>für</strong> 32 und 64 Bit.<br />

Die Matrix<br />

Java-Kompatibilität entfaltet sich zu einem<br />

zweidimensionalen Problem: Auf<br />

der einen Achse kann man die Versionen<br />

– beginnend mit 1.0 – bis zum gerade<br />

erschienenen Java 7 [3] auftragen. Auf<br />

der zweiten Achse stehen die JVMs verschiedener<br />

Hersteller, die wichtigsten sicherlich<br />

Oracle, IBM und Open JDK.<br />

Hinzu kommt Android mit der Dalvik<br />

Engine, die funktional etwas deutlich anderes<br />

ist. Der Entwickler, der seinen Code<br />

Listing 1: Look-and-Feel auflisten<br />

01 javax.swing.UIManager.LookAndFeelInfo[] landfs =<br />

02 javax.swing.UIManager.getInst<strong>alle</strong>dLookAndFeels();<br />

03 for(i=0; i < landfs.length; i++)<br />

04 System.out.println(landfs[i].getName());<br />

Java 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

35


Titelthema<br />

www.linux-magazin.de Java 11/2011<br />

36<br />

nur ein mal schreiben und eine mobile<br />

Version seiner Software unters Volk<br />

bringen will, muss <strong>alle</strong> Besonderheiten<br />

dieser Plattform beachten, nicht nur beim<br />

sowieso anders gearteten GUI.<br />

Übersetzter Java-Bytecode ist aufwärtskompatibel,<br />

Oracle gibt sich mit ausgiebigen<br />

Kompatibilitätstests große Mühe,<br />

dass die mitgelieferten Runtime-Bibliotheken<br />

stabil bleiben. Lediglich die Hersteller<br />

von 3rd-Party-Bibliotheken ändern<br />

gelegentlich APIs, üblicherweise aber<br />

erst, nachdem sie ihre Absicht schon in<br />

der Vorversion per Deprecated-Markierung<br />

angekündigt haben. Das bedeutet,<br />

dass eine mit dem Compiler aus Java 1.0<br />

übersetzte Klasse auch unter Java 7 ausführbar<br />

bleibt. In der anderen Richtung<br />

gilt dies aber nicht!<br />

Entwickler portabler Programme sollten<br />

sich daher nicht am neuesten Stand der<br />

Technik orientieren. Gerade wer Software<br />

übers Internet verteilt, sollte seine Klassen<br />

kompatibel zur vorletzen Version<br />

übersetzen. Beim Übersetzen mit Javac<br />

sorgt die Option »‐target Release« da<strong>für</strong>,<br />

»‐source Release« veranlasst den Compiler<br />

auch dazu, so zu kompilieren, als<br />

wäre er die angegebene Version.<br />

Alt und neu?<br />

Wie andere Sprachen auch ändert Java<br />

von Version zu Version das eine oder<br />

andere, zum Beispiel das Handling der<br />

Generics. Java 5 hatte diese Container-<br />

Typangabe <strong>für</strong> Vektoren oder Ähnliches<br />

eingeführt, um <strong>für</strong> etwas mehr Typsicherheit<br />

zu sorgen. In Java 7 änderte sich<br />

deren Verhalten wieder.<br />

Wer nun mit gleicher Codebasis Java-ME-<br />

Anwendungen <strong>für</strong> Handys entwickeln<br />

will, kämpft damit, dass ME auf Java 1.1<br />

fußt, das die Generics noch nicht kannte.<br />

Dann kodiert der Entwickler nach altem<br />

Standard und muss mit Warnungen leben.<br />

Entwickelt er den Code aber unter<br />

Java 5 oder 6 und kommt später auf die<br />

Idee, eine Java-ME-Version zu bauen,<br />

muss er viel Code umschreiben.<br />

Zum Teil unterscheiden sich die JVMs<br />

auch in der Speicherverwaltung, was<br />

dazu führen kann, dass die identische<br />

Applikation mit dem gleichen den Speicher<br />

begrenzenden Parameter unter JVM<br />

A einwandfrei läuft und unter JVM B mit<br />

vollgelaufenem Speicher abstürzt. 64-Bit-<br />

Systeme benötigen zum Beispiel mehr<br />

Platz im Heap, weil <strong>alle</strong> Zeiger doppelt<br />

so groß sind. Es ist zwar möglich, entsprechend<br />

mehr Speicher zu adressieren,<br />

aber auch das Verwalten des Speichers<br />

benötigt den doppelten Platz.<br />

Auch bei der Wahl der Entwicklungsumgebung<br />

gibt es Feinheiten, die dazu führen,<br />

dass derselbe Quellcode in Eclipse<br />

funktioniert und sich daraus ein Paket<br />

bauen lässt, mit Ant und Javac aber<br />

nicht. Der Hintergrund ist, dass Eclipse<br />

einen eigenen Java-Compiler verwendet<br />

und dieser fehlerhafte Methoden einfach<br />

ausblendet. Um den eigenen Testaufwand<br />

gering zu halten, supporten daher<br />

viele Anbieter kommerzieller, in Java<br />

geschriebener Produkte nur genau eine<br />

JVM-Version.<br />

Testen, testen, testen<br />

Java-Entwickler plagen bei der platt formunabhängigen<br />

Entwicklung viel weniger<br />

Sorgen als andere. Die virtuelle Maschine<br />

abstrahiert Betriebssystem und Hardware<br />

in hohem Maße, selbst <strong>für</strong> Details wie<br />

Byteorder oder Pfadangaben ist gesorgt.<br />

Trotzdem erspart dies dem Programmierer<br />

nicht, ausgiebig mit verschiedenen<br />

Plattformen zu testen. Das müssen nicht<br />

<strong>alle</strong> Java-Versionen auf <strong>alle</strong>n Betriebssystemen<br />

sein, aber zumindest die vorletzte.<br />

Entwickler von GUI-Applikationen, die<br />

Swing als Basis benutzen, sollten zudem<br />

ihren Code mit den gängigen Look-and-<br />

Feels in Augenschein nehmen. (jk) n<br />

Infos<br />

[1] Java ME: [http:// www. oracle. com/​<br />

technetwork/ java/ javame/]<br />

[2] Java Platform Standard Edition 7 Documentation:<br />

[http:// download. oracle. com/​<br />

javase/ 7/ docs/]<br />

[3] Carsten Zerbst, „Was Java 7 Neues<br />

bringt“: <strong>Linux</strong>-<strong>Magazin</strong> 09/​11, S. 100<br />

[4] „The AWT in 1.0 and 1.1“:<br />

[http:// java. sun. com/ products/ jdk/ awt/]<br />

[5] „Creating a GUI With JFC/​Swing“:<br />

[http:// download. oracle. com/ javase/​<br />

tutorial/ uiswing]<br />

[6] Bernhard Bablok, „Nützliche Komponenten<br />

<strong>für</strong> Swing-Anwendungen – Coffeeshop“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 04/​06, S. 136<br />

[7] „What Is JavaFX?“:<br />

[http:// download. oracle. com/ javafx/ 2. 0/​<br />

overview/ jfxpub‐overview. htm]<br />

[8] SWT: [http:// www. eclipse. org/ swt/]<br />

[9] JNI: [http:// download.​oracle. com/ javase/​<br />

7/ docs/ technotes/ guides/ jni/]<br />

[10] JNA: [https:// github. com/ twall/ jna]<br />

Der Autor<br />

Konstantin Agouros arbeitet bei der N.runs AG<br />

als Berater <strong>für</strong> Netzwerksicherheit. Dabei liegt<br />

sein Schwerpunkt im Bereich der Telekommunikationsanbieter.<br />

Sein Buch „DNS/​DHCP“ ist bei<br />

Open Source Press erschienen.<br />

Abbildung 1: Sieben Mal die gleiche Java-Testanwendung gestartet – die zum Teil deutlichen Ausprägungen<br />

der beiden einfachen GUI-Elemente ergeben sich durch sieben verschiedene Look-and-Feels: Metal, Nimbus,<br />

CDE-Motif, GTK+, Windows, Windows Classic und Mac OS X (von links nach rechts und oben nach unten).<br />

Metal, Nimbus, CDE-Motif sind <strong>für</strong> <strong>alle</strong> Plattformen verfügbar und darum gut portabel.


STRATO PRO<br />

Server-Technik, die begeistert!<br />

STRATO MultiServer<br />

Die Private Cloud auf flexiblen Hardware-Pools<br />

Setzen Sie bei Ihren Webprojekten voll auf die Flexibilität der STRATO MultiServer. Sie mieten dedizierte Leistung und können diese mit<br />

Hilfe der vorinstallierten Virtualisierungsoberfläche selbst aufteilen. Erstellen Sie virtuelle Maschinen und weisen dedizierte Ressourcen<br />

zu. So entsteht Ihre persönliche Cloud. Dank der neuen Hardware-Pools können weitere MultiServer zu einem Verbund zusammengefügt<br />

werden, so daß sich Daten und VMs untereinander flexibel verteilen lassen. Das Cloning funktioniert nun unmittelbar von Server<br />

zu Server – ohne Umweg über das Internet. So können Sie bequem Up- und Downgrades realisieren. Das ist echtes Cloud Computing!<br />

NEU! Hardware-Pools – schnell und flexibel Daten im<br />

MultiServer-Verbund austauschen<br />

TOP! Volle Kontrolle der privaten Cloud durch eigene<br />

dedizierte Hardware<br />

Par<strong>alle</strong>lbetrieb von bis zu 8 aktiven virtuellen Maschinen<br />

VM-Cloning und BackupControl inklusive<br />

Simultaner Betrieb von Produktiv-, Entwicklungs- und<br />

Testsystemen auf virtuellen Maschinen<br />

Preisaktion bis 31.10.2011<br />

3 Monate<br />

19<br />

*<br />

€mtl.<br />

ab<br />

danach ab 69 €<br />

Telefon: 0 18 05 - 00 76 77<br />

(0,14 €/Min. aus dem dt. Festnetz, Mobilfunk max. 0,42 €/Min.)<br />

strato-pro.de<br />

* Vertragslaufzeit 12 Monate. Preis inkl. MwSt.


Titelthema<br />

www.linux-magazin.de Mono 11/2011<br />

38<br />

Von Dotnet über Novell-Suse zu Xamarin und mobilen Devices: Mono<br />

Affentheater<br />

Vom ehemaligen Besitzer <strong>alle</strong>in gelassen, vom eigenen Vater adoptiert und mit dem Symbol eines Affen versehen:<br />

Mono durchlebt stürmische Zeiten. Wozu das Dotnet <strong>für</strong> <strong>Linux</strong> in der Lage ist, beweist eindrucksvoll ein<br />

deutscher Datenbankhersteller. In Zukunft wird Mono wohl verstärkt in Jackentaschen verschwinden. Tim Schürmann<br />

© Bidouze Stéphane, 123RF<br />

Im Mai 2011 schockte eine Meldung die<br />

Entwicklergemeinde: Attachmate kaufte<br />

nicht nur Novell, sondern stellte auch<br />

die Entwicklung von Mono ein. Das komplette<br />

Programmiererteam, einschließlich<br />

des Mono-Vaters und Gnome-Gründers<br />

Miguel de Icaza, musste gehen. Angeblich<br />

war die Nachfrage bei den Kunden<br />

zu gering, das Mono-Projekt somit letztendlich<br />

nicht profitabel (siehe Kasten<br />

„Was ist Mono?“, [1]).<br />

Nicht das Ende<br />

Kurze Zeit sah es sogar danach aus, als<br />

wäre dies das Ende der ebenso geliebten<br />

wie gehassten Entwicklungsplatt form.<br />

Der folgende Artikel unternimmt eine Bestandsaufnahme<br />

und sortiert die Fakten.<br />

Das <strong>Linux</strong>-<strong>Magazin</strong> hat da<strong>für</strong> mit Mono-<br />

Entwicklern und Protagonisten wie<br />

Miguel de Icaza (siehe Interview im Kasten<br />

„Es bricht mir das Herz“) gesprochen.<br />

Zwei weitere Interviews<br />

– mit F-Spot-<br />

Programmierer Timothy<br />

Howard und Daniel<br />

Kirstenpfad vom Datenbank-Entwickler<br />

Sones<br />

– stehen im Online-Plus-<br />

Bereich des <strong>Linux</strong>-<strong>Magazin</strong>s<br />

in voller Länge<br />

zur Verfügung.<br />

Mono: Der<br />

Neustart<br />

Miguel De Icaza gründete<br />

nach seiner Suse-<br />

Karriere zusammen mit<br />

Nat Friedman im Mai<br />

2011 das Unternehmen<br />

Xamarin ([2], nicht zu<br />

verwechseln mit ihrer alten Firma Ximian).<br />

Den beiden folgten weitere ehemalige<br />

Mono-Entwickler. Dummerweise<br />

verblieben die Rechte an den Mono-Produkten<br />

bei Attachmate beziehungsweise<br />

Suse. Das betraf insbesondere die profitablen<br />

Mono-Portierungen auf Android<br />

und iPhone.<br />

Also begann Xamarin zunächst mit der<br />

Entwicklung eigener mobiler Mono-Varianten.<br />

Mitte Juli überließ Suse jedoch<br />

überraschend dem kleinen Start-up eine<br />

unbegrenzte und umfassende Lizenz an<br />

Mono, Mono Touch, Mono for Android<br />

(Mono Droid) und den Mono-Tools <strong>für</strong><br />

Visual Studio [3].<br />

Gleichzeitig übernahm Xamarin <strong>alle</strong><br />

Supportverträge der ehemaligen Novell-<br />

Mono-Kunden sowie die Federführung<br />

beim Mono-Community-Projekt. Dieses<br />

Projekt entwickelt die quelloffene Desktop-Variante<br />

von Mono nebst C#-Compiler<br />

weiter. Auf der Mono-Homepage [1] war<br />

zum Redaktionsschluss aber noch Novell<br />

als Projektsponsor, Ansprechpartner und<br />

Anbieter von kommerziellem Support genannt,<br />

auch die entsprechenden Seiten<br />

bei Suse existierten weiterhin.<br />

ECMA-Standards<br />

Die Mono-Entwickler orientieren sich an<br />

den ECMA-Standards <strong>für</strong> die C#-Programmiersprache<br />

[4] und der so genannten<br />

Common Language Infrastructure, also<br />

der Laufzeitumgebung mit einigen Basisbibliotheken<br />

[5]. Dort sind <strong>alle</strong>rdings<br />

nicht <strong>alle</strong> Teile von Microsofts Dotnet<br />

normiert. Damit dennoch möglichst viele<br />

Dotnet-Programme unter Mono laufen,<br />

versuchen die Mono-Entwickler zumindest<br />

die wichtigsten Microsoft-Bibliotheken<br />

nachzubauen.<br />

Mangels helfender Hände hecheln sie dabei<br />

jedoch Microsoft ständig hinterher.<br />

So implementiert die aktuelle Version<br />

2.10 von Mono gerade mal die Basisbibliotheken<br />

der Dotnet-2.0-Spezifikation<br />

vollständig. Von den Nachfolgern 3.0,<br />

3.5 und 4.0 sind nur Teile umgesetzt.<br />

Der Kasten „Bestandsaufnahme“ verrät,<br />

welche Klassen Mono derzeit kennt<br />

und welche nicht.<br />

Um die Lücken zu kompensieren, bringt<br />

Mono eigene Klassenbibliotheken mit.<br />

Diese binden die Gecko-Engine des Mozilla-Browsers<br />

ein, rüsten Posix-Unterstützung<br />

<strong>für</strong> Unix-Betriebssysteme nach<br />

Online PLUS<br />

Zwei Interviews rund um Mono – mit<br />

Timothy Howard (F-Spot) und Daniel<br />

Kirstenpfad (Sones) – stehen im Online-Plus-<br />

Bereich des <strong>Linux</strong>-<strong>Magazin</strong>s: [http:// www.​<br />

linux‐magazin. de/ plus/ 2011/ 11]


opensourcepress.de<br />

BÜCHER<br />

Abbildung 1: Ein kleines Beispiel <strong>für</strong> einen Graphen: Hier zeigt er die Beziehungen<br />

zwischen verschiedenen Personen.<br />

und liefern Zugriff auf Datenbanken, wie<br />

Db4o, Firebird, MySQL, PostgreSQL oder<br />

SQLite. Damit stehen aber wieder nicht<br />

<strong>alle</strong> Klassenbibliotheken aus Mono unter<br />

Dotnet bereit. Wer also ein Dotnet-Programm<br />

<strong>für</strong> mehrere Plattformen schreiben<br />

möchte, muss sich auf den kleinsten<br />

gemeinsamen Nenner beschränken.<br />

Android, I-OS und der<br />

Problemfall Grafik<br />

Was ist Mono?<br />

Mono ist eine freie Implementierung des C#-<br />

Compilers und der zugehörigen Laufzeitumgebung.<br />

Das System lässt sich grob mit Java<br />

vergleichen: Der Compiler übersetzt den<br />

Quellcode in einen Bytecode, den wiederum<br />

die Laufzeitumgebung ausführt. Damit Letzteres<br />

möglichst schnell geschieht, nutzt diese<br />

so genannte Common Language Runtime (CLR)<br />

einen Just-in-Time-Compiler.<br />

Bibliotheken <strong>für</strong>s GUI<br />

Ein paar Klassenbibliotheken erleichtern die<br />

Programmierung von grafischen Benutzeroberflächen,<br />

die Netzwerk-Kommunikation<br />

und Datenbankabfragen. Alle Bestandteile sind<br />

weitgehend kompatibel zum ursprünglich von<br />

Microsoft entwickelten Dotnet-Framework. Im<br />

Idealfall lassen sich unter Mono geschriebene<br />

Programme ohne eine erneute Übersetzung<br />

unter Dotnet ausführen und umgekehrt. Mono<br />

läuft derzeit unter <strong>Linux</strong>, Mac OS X, Solaris,<br />

Ähnliches gilt, wenn man die Welt von<br />

Android und I-OS betritt: Die Mono-Fassungen<br />

<strong>für</strong> die mobilen Geräte umfassen<br />

lediglich die Kern-Libraries sowie Klassenbibliotheken,<br />

über<br />

die man die nativen<br />

APIs der Geräte anspricht.<br />

Wer sich auf<br />

Android beschränkt,<br />

muss immerhin die<br />

Anwendung nur einmal<br />

entwickeln, damit<br />

sie auf <strong>alle</strong>n Android-<br />

Geräten läuft.<br />

Mono Touch <strong>für</strong> das<br />

iPhone übersetzt übrigens<br />

den Quellcode<br />

in nativen iPhone-Programmcode,<br />

da Apple<br />

dazwischengeschaltete<br />

(JIT-)Interpreter und<br />

virtuelle Maschinen<br />

verbietet.<br />

Ein weiteres Problem bilden grafische<br />

Benutzeroberflächen. Hier ist besonders<br />

spürbar, dass unter Mono die Windows<br />

Presentation Foundations (WPF) fehlen.<br />

Zwar sollen diese – neuesten Meldungen<br />

von Microsoft zufolge – ab Windows 8<br />

wegf<strong>alle</strong>n, doch mit den in WPF enthaltenen<br />

Klassen entstehen heutzutage die Benutzeroberflächen<br />

von Dotnet-Programmen.<br />

Unter Mono muss der Entwickler<br />

auf die alten, eigentlich durch die WPF<br />

abgelösten Windows Forms oder eben<br />

GTK# zurückgreifen.<br />

Wie der Name andeutet, bindet GTK#<br />

die guten alten GTK+-Bibliotheken ein.<br />

Der F-Spot-Programmierer Timothy How-<br />

Windows, mehreren BSD-Varianten und sogar<br />

auf Videospiel-Konsolen wie Nintendos Wii oder<br />

der Playstation 3. Spezielle Versionen gibt es<br />

zudem <strong>für</strong> Android (Mono for Android) und Apples<br />

I-OS-Geräte (Mono Touch).<br />

Die Komponenten des Mono-Pakets stehen<br />

meist unter der LGPLv2, einzelne Teile aber<br />

auch unter anderen Open-Source-Lizenzen,<br />

etwa der MIT-Lizenz. Alternativ bietet Xamarin<br />

auf Nachfrage eine kommerzielle Variante an.<br />

Eine Ausnahme bilden Mono Touch und Mono<br />

for Android, sie sind Closed Source und verlangen<br />

je nach Ausführung einen mehr oder<br />

weniger tiefen Griff in die Firmenkasse.<br />

Zu Mono gehört auch Moonlight, eine freie<br />

Implementierung von Silverlight. Salopp formuliert<br />

verbirgt sich dahinter Microsofts Gegenstück<br />

zu Adobes Flash. In Arbeit ist derzeit<br />

Moonlight 3, das mit Silverlight 3 gleichziehen<br />

soll. Microsoft ist hier <strong>alle</strong>rdings schon bei Version<br />

5 angelangt.<br />

Neu<br />

ISBN 978-3-941841-42-0<br />

328 Seiten · brosch. · 29,90 [D]<br />

Neu<br />

ISBN 978-3-941841-49-9 · english<br />

331 Seiten · brosch. · 39,90 [D]<br />

ISBN 978-3-941841-36-9<br />

343 Seiten · brosch. · 34,90 [D]<br />

opensourceschool.de<br />

TRAINING<br />

Nagios<br />

C++<br />

SUSE<br />

Git<br />

Apache LPI 301<br />

JavaScript<br />

Novell<br />

Neu<br />

ISBN 978-3-941841-44-4<br />

301 Seiten · brosch. · 24,90 [D]<br />

Neu<br />

ISBN 978-3-941841-43-7<br />

492 Seiten · brosch. · 34,90 [D]<br />

ISBN 978-3-941841-26-0<br />

248 Seiten · brosch. · 24,90 [D]<br />

TYPO3<br />

Inhouse-Schulungen<br />

Android<br />

Metasploit<br />

Asterisk<br />

Kerberos<br />

CSS3<br />

Samba<br />

PostgreSQL<br />

Hadoop<br />

Lua<br />

ExtJS<br />

Nmap<br />

HTML5<br />

OTRS Bacula<br />

LPIC-2<br />

LPIC-1<br />

UML<br />

PHP<br />

Perl<br />

Qt<br />

KVM Magento<br />

Mainframe<br />

IPv6<br />

OpenLayers<br />

jQuery<br />

Anfragen unter:


Titelthema<br />

www.linux-magazin.de Mono 11/2011<br />

40<br />

ard bestätigt, dass die Bibliotheken zwar<br />

mittlerweile stabil unter Windows laufen,<br />

sie sehen aber nach Meinung vieler Nutzer<br />

hässlich und veraltet aus.<br />

Eine gewöhnungsbedürftige Optik zeigt<br />

<strong>alle</strong>rdings auch der Windows-Forms-Ersatz<br />

auf Nicht-Windows-Rechnern. Neben<br />

den Forms und GTK# gibt es weitere<br />

GUI-Toolkits, die die Mono-Entwickler<br />

auf ihren Projektseiten detailliert gegenübergestellt<br />

haben [9].<br />

F-Spot: Plattformabhängige<br />

Bildbearbeitung mit Mono<br />

Mehr Probleme bekam Timothy Howard,<br />

als er die Bildbearbeitung F-Spot [10] auf<br />

Windows portieren wollte. F-Spot selbst<br />

ist komplett in C# und Mono geschrieben.<br />

Für die Benutzeroberfläche setzt es<br />

auf GTK# – primär, um sich besser in den<br />

Gnome-Desktop zu integrieren.<br />

F-Spot war jedoch nie auf Plattformunabhängigkeit<br />

ausgelegt. Seine Entwickler<br />

hatten deshalb nicht nur einfach hemmungslos<br />

drauflosprogrammiert, sondern<br />

auch so genannten „unmanaged Code“<br />

verwendet, also externe <strong>Linux</strong>-Bibliotheken<br />

und Programme eingebunden. Davon<br />

betroffen waren unter anderem das Farbmanagement<br />

und der Import von Fotos<br />

aus der Kamera, dies geschah beispielsweise<br />

mit Gphoto.<br />

Timothy Howard kommentierte deshalb<br />

erst einmal die meisten dieser Funktionen<br />

aus und konzentrierte sich zunächst<br />

ganz auf die Benutzeroberfläche [11]. Die<br />

ließ sich mit GTK# nach einigen Anfangsschwierigkeiten<br />

mit Signal-Handlern und<br />

GTK Builder ziemlich reibungslos portieren.<br />

Auch die unterschiedlich aufgebauten<br />

Verzeichnisnamen und Trennzeichen<br />

(»\« statt des Schrägstrichs) waren recht<br />

schnell korrigiert. „Nachdem ich das<br />

GTK-Builder-Problem gelöst hatte, fand<br />

ich es erstaunlich einfach, F-Spot zum<br />

Laufen zu bekommen, die SQLite-Datenbank<br />

zu lesen und Fotos anzuzeigen“, so<br />

Timothy Howard.<br />

Sehr viel weiter kam er jedoch noch nicht<br />

– vor <strong>alle</strong>m weil F-Spot seinen Angaben<br />

zufolge selbst auf Eis liegt. Die Gründe<br />

da<strong>für</strong> sind jedoch weniger bei Mono zu<br />

suchen als bei fehlenden Entwicklern. Ob<br />

es noch einmal weitergeht, ist ungewiss.<br />

Distributionen wie Fedora und Ubuntu<br />

haben die Bildbearbeitung schon vor einigen<br />

Ausgaben aus der Standardinstallation<br />

verbannt.<br />

Auch hier gaben wieder die Funktionen<br />

den Ausschlag, nicht Mono selbst. Im Gegenteil:<br />

Die meisten <strong>Linux</strong>-Distributionen<br />

mit Gnome-Desktop installieren Mono<br />

nach wie vor standardmäßig.<br />

Spot aus?<br />

Gegenüber dem <strong>Linux</strong>-<strong>Magazin</strong> resümiert<br />

Timothy Howard: „So wie ich das<br />

anhand des Windows-Ports beurteilen<br />

kann, ist F-Spots größtes Problem, dass<br />

es von den aktuellen Mono-Standards<br />

überholt wurde. Die Entwicklung begann<br />

2005 nahezu gleichzeitig mit der Entstehung<br />

von Mono (auch wenn Mono<br />

1.0 im Juni 2004 erschien).“ Sein Blick<br />

zurück? „Viele Dinge wurden damals getan,<br />

die ich heute sicher anders machen<br />

würde, insbesondere dann, wenn man<br />

die Entwicklung einer Crossplattform-<br />

Fotoverwaltung im Auge behält.“<br />

Bestandsaufnahme<br />

Das Mono-Paket umfasst zahlreiche Bestandteile.<br />

Die folgenden Listen geben den aktuellen<br />

Stand bei Redaktionsschluss wieder.<br />

Die Dotnet-Kompatibilität stellen folgende<br />

Komponenten sicher:<br />

n Der Kern: Mscorlib, System, System.Xml in<br />

den Dotnet-Versionen 1.1 und 2.0<br />

n System.Core (Version 3.5)<br />

n Webmatrix.Data zum Datenbankzugriff<br />

n Win Forms bildet die Windows Forms und<br />

System.Drawing nach (in den Versionen<br />

1.1 und 2.0)<br />

n WCF (teilweise, die <strong>für</strong> Silverlight 2.0 benötigte<br />

Teilmenge ist komplett)<br />

n ASP.NET 1.1, 2.0, 3.5 (und MVC), 4.0<br />

n ADO.NET 1.1, 2.0<br />

n System.Transactions<br />

n LINQ (LINQ to SQL, <strong>alle</strong>rdings noch nicht in<br />

vollem Umfang)<br />

Aus Dotnet 4.0 sind schon enthalten:<br />

n System.Numerics<br />

n Par<strong>alle</strong>l Framework und PLINQ<br />

n Client <strong>für</strong>s Open-Data-Protokoll (von Microsofts<br />

Dotnet übernommen, steht unter<br />

der MS-PL-Lizenz)<br />

n Dynamic Language Runtime (von Dotnet<br />

übernommen, steht unter der MS-PL-<br />

Lizenz)<br />

n Managed Extensibily Framework (von Microsofts<br />

Dotnet übernommen, steht unter<br />

der MS-PL-Lizenz)<br />

Zusätzliche An- und Einbindungen an:<br />

n GTK via GTK#<br />

n Gnome<br />

n Webkit<br />

n Gecko<br />

n Apache (Mod_mono)<br />

n Google Native Client<br />

n Mono.Cecil (eine Bibliothek zum Erzeugen<br />

und Inspizieren von CIL-Bytecode-<br />

Dateien)<br />

Unterstützung <strong>für</strong> Compiler:<br />

n C# <strong>für</strong> die Sprachversionen 2.0, 3.0 und<br />

4.0 einschließlich LINQ; ein Compiler <strong>für</strong><br />

Version 5.0 ist derzeit in Arbeit<br />

n Visual Basic in den 2.0- und 4.0-Profilen<br />

n Integration des extern entwickelten F#-<br />

Compilers sowie Iron Ruby und Iron Python<br />

Eingebaute Werkzeuge:<br />

n ECMA-kompatible Laufzeitumgebung<br />

(Com mon Language Runtime, CLR), die<br />

den CIL-Bytecode ausführen kann; sie unterstützt<br />

die Architekturen x86, PowerPC,<br />

ARM, Sparc, S/​390, AMD64 und IA64<br />

n Profiler<br />

n Debugger<br />

n C#-Shell, die C#-Skripte in Unix ausführt<br />

n Entwicklungsumgebung Mono Develop,<br />

unter Windows integriert sich Mono auch<br />

in Visual Studio<br />

n Der Mono Migration Analyzer (MoMA) gibt<br />

erste Hinweise, ob ein aktuelles Dotnet-<br />

Programm unter Mono läuft, und wenn<br />

nicht, was dies verhindert [6]<br />

Darüber hinaus gibt es zahlreiche weitere Bibliotheken<br />

von Drittanbietern, und zwar sowohl<br />

speziell <strong>für</strong> Mono als auch <strong>für</strong> Dotnet. Letztere<br />

funktionieren aber nur, wenn sie auf den<br />

Basisbibliotheken aufbauen beziehungsweise<br />

keine speziellen Windows-Funktionen aufrufen.<br />

Ein Beispiel ist die Razor-Bibliothek, die auch<br />

auf Mono 2.10 läuft und somit wiederum Microsofts<br />

Content-Managementsystem Orchard<br />

ausführen kann.<br />

Auf der anderen Seite bietet das Tao-Framework<br />

eine Anbindung an Open GL als Alternative zu<br />

Direct X. Mono.Posix bietet Anbindungen <strong>für</strong><br />

Posix-Anwendungen, Mono.Http erlaubt es,<br />

Webserver in Mono zu erstellen [7]. Mit Mono<br />

kompatible Compiler listet [8].<br />

Aus Dotnet fehlen heute insbesondere:<br />

n WPF<br />

n W F<br />

n Cross-Process Transactions<br />

n System.Management<br />

n Entity Frameworks<br />

n Server <strong>für</strong> Open Data<br />

n Powershell<br />

Sowie die veralteten:<br />

n System.Enterpriseservices<br />

n WSE (Extensions zu System.Web.Services)<br />

n Workflow Foundation 3 (WF3)<br />

n Code Access Security aus Dotnet 1.0


© sones GmbH, Leipzig<br />

Abbildung 2: Wie Sones Messungen belegen, liefert die Graph DB Anfragen unter<br />

aktuellen Mono-Versionen wesentlich schneller aus als unter Dotnet.<br />

Wie einfach sich mit Mono portable Programme<br />

schreiben lassen, beweist die in<br />

Leipzig ansässige Sones GmbH mit ihrer<br />

Graphdatenbank Graph DB [12].<br />

Mono im Datenbank-<br />

Backend: Sones Graph DB<br />

Im Gegensatz zu MySQL & Co. speichert<br />

Graph DB keine Tabellen, sondern komplexe<br />

Graphen (Abbildung 1). Die bestehen<br />

wiederum aus Knoten (den Informationsträgern)<br />

und Kanten (den Beziehungen<br />

zwischen den Informationen). Ein<br />

Graph repräsentiert so je nach Anwendungsgebiet<br />

eine<br />

Straßenkarte, eine<br />

Netzwerktopologie<br />

oder die Beziehungen<br />

zwischen Mitarbeitern<br />

in einer<br />

Firma.<br />

Bei solchen Daten<br />

liefert die spezialisierte<br />

Graph DB zusammen mit der<br />

eigenen Abfragesprache GQL wesentlich<br />

schneller ein Abfrage-Ergebnis als herkömmliche<br />

relationale Datenbanken. Es<br />

entf<strong>alle</strong>n insbesondere die zeitfressenden<br />

Joins und Lookups.<br />

Graph DB ist vollständig in C# geschrieben<br />

und ließ sich 2010 mit Mono auf<br />

<strong>Linux</strong> und Mac OS X portieren. „Das<br />

lief erstaunlich gut: Schon nach wenigen<br />

Stunden kompilierte <strong>alle</strong>s, nach einigen<br />

Tagen lief die Datenbank unter Mono“,<br />

erläutert Daniel Kirstenpfad, CTO von<br />

Sones. Probleme konnten die Entwickler<br />

schnell zusammen mit den Mono-Machern<br />

klären: „Wir konnten bei Fragen<br />

und Anregungen schnell den eigentlichen<br />

Autor kontaktieren und haben immer zügig<br />

Feedback erhalten. Mit der Gründung<br />

von Xamarin haben sich aus unserer<br />

Sicht Austausch und Unterstützung noch<br />

einmal verbessert.“<br />

Die derzeit rund um Graph DB entstehenden<br />

Hilfswerkzeuge sind <strong>alle</strong>rdings im<br />

Moment nur unter Windows verfügbar.<br />

Das noch nicht freigegebene Graph-DB-<br />

Visualization-Tool, das die gespeicherten<br />

Graphen übersichtlich auf den Bildschirm<br />

zeichnet, nutzt bislang die WPF [13].<br />

Entwickelt in Dotnet, aber<br />

schneller dank Mono<br />

Der bereits erhältliche Sones Assembly<br />

Merger verwendet hingegen die Windows<br />

Forms, wäre somit prinzipiell auch<br />

auf Mono portierbar [14]. Offiziell gibt<br />

es aber nur eine Windows-Version, der<br />

Quellcode liegt jedoch offen [15]. In Zu-<br />

Mono 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

41<br />

1. Lernen Sie!<br />

Ja, „training-on-the-job“, oft praktiziert, aber nicht<br />

überzeugend. Denn die Kollegen haben nie Zeit<br />

<strong>für</strong> echte Erklärungen, außerdem werden „Neue“<br />

sofort von dem vereinnahmt, was im Unternehmen<br />

schon seit Ewigkeiten tradiert wird. Warum gibt's<br />

seit 2000 Jahren Schulen und Universitäten?<br />

„LERNEN“ ist eine vollwertige Tätigkeit, auf die<br />

man sich konzentrieren muß, die man nicht 'mal<br />

eben so nebenbei tun kann, und die immer auch<br />

eine Prise „Erneuerung“ beinhalten sollte!<br />

2. Ineffiziente Arbeit nicht akzeptieren!<br />

Je spezialisierter Sie arbeiten, desto weniger<br />

echte, fachliche Kollegen haben Sie in Ihrem eigenen<br />

Unternehmen. Wir stellen deshalb Gruppen<br />

zusammen, in denen Sie neben hilfsbereiten<br />

Kollegen mit ähnlichen Kenntnissen an IHREM<br />

Projekt arbeiten. Und ständig ist ein fachlicher Berater<br />

anwesend.<br />

„Guided Coworking“ nennen wir das, und es<br />

könnte DIE Lösung <strong>für</strong> so manches Projekt sein,<br />

das in Ihrer Firma „hakt“.<br />

3. Hintergrund<br />

Wer den riesigen OpenSource-Baukasten schnell<br />

beherrschen muß, geht zu einer unserer über 100<br />

Schulungen. Wer das bereits kann, aber schneller<br />

mit seinen Projekten vorankommen will, der<br />

kommt mit seiner Arbeit zum Guided Coworking.<br />

Wir sind eine der erfolgreichsten Schulungseinrichtungen<br />

im gesamten Bereich „OpenSource“<br />

- sowohl <strong>für</strong> Admins, als auch <strong>für</strong> Entwickler.<br />

Siehe www.linuxhotel.de


Titelthema<br />

www.linux-magazin.de Mono 11/2011<br />

42<br />

kunft will Sones Benutzeroberflächen mit<br />

plattformunabhängigen Webtechniken<br />

programmieren, namentlich mit HTML 5<br />

und Javascript.<br />

Mit Version 2.8 erhielt Mono einen neuen<br />

Garbage Collector, also die integrierte<br />

automatische Speicherverwaltung. Die<br />

sorgt in vielen Fällen <strong>für</strong> einen solchen<br />

Geschwindigkeitsschub, dass Graph DB<br />

unter Mono heute schneller läuft als unter<br />

Microsofts Dotnet (Abbildung 2). Genaue<br />

Zahlen liefert das Sones-Entwickler-<br />

Blog auf der Webseite der Firma.<br />

Community Edition, Dotnet<br />

4.0 und mobile Plattformen<br />

Die Community Edition von Graph DB<br />

steht übrigens unter der AGPL 3 (Affero<br />

General Public License), die zugehörigen<br />

Client-Bibliotheken zum Anbinden eigener<br />

Programme unter der LGPL. Zusätzlich<br />

gibt es eine kommerzielle Enterprise-<br />

Variante mit erweiterten Funktionen. So<br />

merkt sich die freie Version beispielsweise<br />

Graphen nur im RAM.<br />

Die Mono-Entwickler werkeln derzeit<br />

fleißig an einer Unterstützung <strong>für</strong> Dotnet<br />

4.0. Außen vor bleibt dabei auch künftig<br />

die Windows Presentation Foundation.<br />

Als Grund nennt Miguel de Icaza<br />

in seinem Blog den schlichtweg zu hohen<br />

Arbeitsaufwand. Immerhin soll es<br />

demnächst eine Unterstützung <strong>für</strong> die<br />

Beschreibungssprache XAML geben, und<br />

die wird laut Microsoft auch weiterhin<br />

ein wichtiges Standbein <strong>für</strong> Windows-<br />

Entwickler sein.<br />

Xamarin legt den Fokus auf die mobilen<br />

Plattformen und macht damit wohl<br />

rege Gewinne [16]. Nach Icazas Angaben<br />

schlummern in den App-Stores mittlerweile<br />

über 2000 mit Mono geschriebene<br />

Anwendungen. Deren Entwickler mussten<br />

brav eine Mono-Lizenz erwerben, die<br />

zudem nicht ganz billig ist: Fast 400 Euro<br />

pro Jahr muss ein Android-Developer in<br />

der einfachsten Variante hinblättern.<br />

Darüber hinaus wächst der Markt mit<br />

Smartphones und Tablets, der traditionelle<br />

Desktop ist rückläufig. Laut Icaza<br />

hat Mono auf dem iPhone und Android<br />

mehr Entwickler, als jemals zuvor auf<br />

dem Desktop.<br />

Richard Doll, der CEO von Sones, betrachtet<br />

dies auch <strong>für</strong> den Desktop als<br />

vorteilhaft: „Durch die Verschiedenheit<br />

und die Beschränkungen der Anbieter<br />

hat sich hier ein glasklarer Anwendungsfall<br />

<strong>für</strong> die Portierbarkeit von Mono-<br />

Code-Development ergeben. Das kann<br />

nur gut sein <strong>für</strong> die Bekanntheit und das<br />

Wachsen von Mono. Für viele Entwickler<br />

einer populären Plattform heißt das, dass<br />

sich <strong>für</strong> das Mono-Projekt die kommerziellen<br />

Chancen erhöhen. Das sichert die<br />

Zukunft.“<br />

Die Referenzliste auf den Seiten des<br />

Mono-Projekts [17] scheint dies auf den<br />

ersten Blick zu unterstreichen: Erstaunlich<br />

viele Firmen setzen auf Mono, darunter<br />

auch Größen wie Electronic Arts,<br />

die Wikipedia oder die 3-D-Spiele-Engine<br />

Unity. Doch bei genauer Betrachtung<br />

kommt Mono oft nur in kleineren Teilaufgaben<br />

zum Einsatz. Für Dotnet gibt es<br />

dagegen Unmengen an Anwendungen.<br />

Perspektiven, Gegner und<br />

Zukunft<br />

Xamarin und Mono arbeiten immer gegen<br />

die riesigen Teams von Microsoft und<br />

die starke Verzahnung von Dotnet mit<br />

„Es bricht mir das Herz“<br />

Miguel de Icaza hat das<br />

Gnome-Projekt gegründet<br />

und führt heute die Firma<br />

Xamarin und das Mono-<br />

Projekt an.<br />

Im Interview am Rande von<br />

Microsofts Build-Konferenz<br />

2011 erzählt er, warum er sein iPad liebt und was<br />

Xamarin und das Mono-Projekt bewegt.<br />

<strong>Linux</strong>-<strong>Magazin</strong>: Warum haben Sie mit Xamarin<br />

ein Unternehmen gegründet und keine nichtkommerzielle<br />

Mono-Stiftung?<br />

Icaza: Ich selbst habe nur leider nicht die Zeit<br />

<strong>für</strong> beides. Und ein Not-for-Profit-Unternehmen<br />

kann schwerlich die Gehälter <strong>für</strong> unsere 35<br />

hochqualifizierten Entwickler aufbringen. Aber<br />

ich helfe gerne in einer Foundation mit, ich wäre<br />

sicher auch ein gutes Mitglied im Board.<br />

<strong>Linux</strong>-<strong>Magazin</strong>: Warum hat Xamarin gegenüber<br />

Kunden schon öfter Nein sagen müssen? Weil die<br />

Manpower nicht reichte?<br />

Icaza: Wir wollen in erster Linie Produkte entwickeln<br />

und verkaufen. Bei Novell war das genauso.<br />

Bei der Gründung von Xamarin erkannten<br />

wir aber den Bedarf. Trotzdem steht der Support<br />

nicht im Mittelpunkt unseres Interesses.<br />

Ein Start-up ohne viel Kapital kann sich das aber<br />

nicht immer aussuchen, und deshalb entstand<br />

wohl oft der falsche Eindruck. Aber wir wollen<br />

definitiv ein Produkt entwickeln und vermarkten,<br />

nicht Support und Consulting.<br />

Klar verraten wir hier den Open-Source-Ansatz,<br />

das ist traurig. Aber das Schöne an Mono Touch<br />

und Droid bleibt: Es bezahlt unsere Rechnungen.<br />

„Himmlische Verknüpfung“: Mono und iPad<br />

<strong>Linux</strong>-<strong>Magazin</strong>: Warum setzt Xamarin auf mobile<br />

Plattformen? Ist Dotnet nicht eng mit dem Desktop<br />

verbandelt?<br />

Icaza: Nein. Dotnet ist ein Runtime-Environment<br />

mit einer großen Anzahl an Bibliotheken. Manche<br />

davon sind <strong>für</strong> Desktops, manche <strong>für</strong> Server,<br />

andere <strong>für</strong> exotische Sachen, zum Beispiel <strong>für</strong><br />

Xbox-Spiele. Auf jeden Fall ist es universell <strong>für</strong><br />

Microsoft. Wir glauben an Dotnet, wir lieben es<br />

sogar, aber wir lieben auch unsere Plattform,<br />

den <strong>Linux</strong>-Server, iPhones, iPads und Android.<br />

Und Dotnet auf dem iPad, das halten wir eben<br />

<strong>für</strong> eine wahrhaft himmlische Verknüpfung,<br />

ebenso Dotnet auf <strong>Linux</strong>. Das schließt ja Perl<br />

oder Python nicht aus, im Gegenteil, da ist Platz<br />

<strong>für</strong> <strong>alle</strong> Sprachen. Allerdings muss man konstatieren,<br />

dass Low-Level-Sprachen eben fehleranfälliger<br />

sind als zum Beispiel Dotnet.<br />

Der mobile Markt ist natürlich auch sehr interessant,<br />

weil Dotnet eine gute Performance<br />

bei hohem Programmierkomfort bieten kann.<br />

Deshalb konzentrieren wir bei Xamarin uns auf<br />

Dotnet <strong>für</strong> Nicht-Microsoft-Plattformen. Mit<br />

Mono Touch und Mono Droid lässt sich gutes<br />

Geld verdienen. Das ist zwar schade, weil der<br />

Open-Source-Ansatz verloren geht, aber es hilft,<br />

die Rechnungen zu bezahlen. Wir sind knapp 40<br />

Leute und wir konzentrieren uns auf Mobiles.<br />

Aber wir arbeiten auch an allgemeinen Sachen,<br />

sowohl Server als auch <strong>Linux</strong>.<br />

Mono immer mehr im Backend<br />

<strong>Linux</strong>-<strong>Magazin</strong>: Wenn man sich die Statistiken<br />

von Sones anschaut (Abbildung 2), dann scheint<br />

Mono ja auch im Backend sehr erfolgreich zu<br />

sein. Die Graph DB läuft mit dem neuen Garbage<br />

Collector auf Mono schneller als auf Dotnet, wo<br />

sie ursprünglich entwickelt wurde.<br />

Icaza: Ehrlich? Das wusste ich gar nicht, das ist<br />

ja ein sehr schöner Erfolg. Tja, Mono haben wir<br />

ursprünglich <strong>für</strong> den Desktop entwickelt, <strong>für</strong> den<br />

<strong>Linux</strong>-Desktop, um genau zu sein. Leider ist aber<br />

die Bedeutung des <strong>Linux</strong>-Desktops stark zurückgegangen.<br />

Das ist sehr, sehr traurig, es bricht<br />

mir das Herz. Ich bin immer ein <strong>Linux</strong>-Typ gewesen<br />

– ich habe Gnome gestartet! – und schauen<br />

Sie sich an, womit ich jetzt herumrenne. [Er<br />

zeigt auf sein iPad, Abbildung 3.]<br />

Und genauso ironisch ist doch, dass – bei all<br />

dem, was Microsoft so getrieben hat in den letzten<br />

Jahrzehnten – am Ende Java vor Gericht ge-


Windows an. Dass die Redmonder jüngst<br />

einige Dotnet-Komponenten geöffnet haben,<br />

hat auch die Weiterentwicklung von<br />

Mono beschleunigt.<br />

Allerdings sind nach wie vor einige Teile<br />

der auch von Mono angebotenen Klassenbibliotheken<br />

möglicherweise mit<br />

Patenten von Microsoft belastet, was<br />

Verfechter freier Software unermüdlich<br />

kritisieren, auch wenn Microsoft immerhin<br />

angekündigt hat, bei Dotnet auf Patentklagen<br />

zu verzichten. Die Teile des<br />

ECMA-Standards unterstehen zudem dem<br />

Microsoft Community Promise, einer Art<br />

Nichtangriffspakt [18].<br />

Im Frühling überraschte Sones mit der<br />

Meldung, gemeinsam mit Xamarin eine<br />

Stiftung <strong>für</strong> Mono gründen zu wollen,<br />

<strong>alle</strong>rdings noch bevor Suse ihre Mono-<br />

Lizenzen an Xamarin übertrug und Icazas<br />

Firma die Führung im Mono-Projekt<br />

übernahm [19].<br />

Die Zukunft von Mono sehen die Entwicklern<br />

bei den mobilen Plattformen.<br />

Xamarin entwickelt zwar Mono weiter,<br />

konzentriert sich dabei aber auf den<br />

ECMA-Standard und wird nicht bedingungslos<br />

Microsofts Dotnet hinterher-<br />

hecheln. Sones Graph DB zeigt, wozu<br />

Mono heute in der Lage ist – und F-Spot,<br />

wo mögliche Probleme warten. Die entstehen<br />

vor <strong>alle</strong>m dann, wenn man grafische<br />

Oberflächen benötigt, auf native<br />

Bibliotheken zurückgreift und nicht auf<br />

portierbaren Programmcode achtet.<br />

Empfehlenswerter Einstieg:<br />

Ein Build- und Testsystem<br />

Wer plattformübergreifende Anwendungen<br />

mit Mono schreiben möchte, dem<br />

rät Daniel Kirstenpfad von Sones „ein<br />

entsprechendes Build- und Testsystem<br />

schon zu Beginn der Entwicklung aufzusetzen.<br />

Dieses kann dann automatisiert<br />

unter Mono und Dotnet auf verschiedenen<br />

Plattformen den aktuellen Stand der<br />

Entwicklung durchtesten“. Einsteiger in<br />

Mono und Dotnet sollten zudem „kleine<br />

Schritte gehen. So gewinnt man Vertrauen<br />

und Sicherheit zur Technologie.<br />

Die Community zu fragen und selbst zu<br />

helfen ist immer eine gute Idee“.<br />

Timothy Howard empfiehlt, sich erfolgreiche<br />

und portable Anwendungen anzusehen.<br />

„Eine Crossplattform-Anwendung<br />

mit Mono zu erstellen ist mittlerweile<br />

eine triviale Aufgabe, verglichen mit der<br />

Situation vor ein paar Jahren“, so der<br />

ehemalige F-Spot-Programmierer.<br />

Icaza: Trennt die Logik von<br />

der Darstellungsebene!<br />

Miguel de Icaza ist erst einmal wichtig,<br />

dass „die Leute die Sprache aussuchen,<br />

die ihnen am meisten liegt. Mir ist Java<br />

ein wenig zu statisch. Viele moderne<br />

Ansätze anderer Sprachen gibt es dort<br />

einfach nicht, aber wenn einem Programmierer<br />

Java, Perl, PHP oder C# besser<br />

gefällt als Mono, soll er das verwenden.<br />

Da habe ich volles Verständnis da<strong>für</strong>.“<br />

Was immer die Probleme löse, sei ideal,<br />

so Icaza. Aber das Core-Set von Mono-<br />

APIs sei universell und robust, was sich<br />

eben vor <strong>alle</strong>m bei der Datenbankanbindung<br />

zeige.<br />

Für die Darstellung entstünden immer<br />

mehr APIs, vom Web über iPhone, Mac,<br />

Android bis zum neuen Windows RT.<br />

Wichtig ist auf jeden Fall: „Ich rate jedem<br />

Entwickler, Business Engine und Applikationslogik<br />

von Darstellungsschicht zu<br />

Mono 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

43<br />

landet ist. Ausgerechnet Java! Aber ich bin weg<br />

davon, jetzt machen wir mobile Applikationen.<br />

Und am Wochenende, in meiner freien Zeit, da<br />

arbeite ich an Mono <strong>für</strong> den Mac. Ich mag das,<br />

was Steve Jobs macht, das gefällt mir sehr.<br />

<strong>Linux</strong>-<strong>Magazin</strong>: Microsoft hat hier auf der<br />

Build-Konferenz vor wenigen Stunden mit dem<br />

Windows-RT-API und der Metro-Oberfläche <strong>für</strong><br />

Windows 8 weitreichende Neuheiten vorgestellt.<br />

Haben die auch Konsequenzen <strong>für</strong> Mono?<br />

Abbildung 3: Der Gnome-Gründer und Mono-Vordenker<br />

Miguel de Icaza glaubt nicht mehr an die<br />

Zukunft des <strong>Linux</strong>-Desktops.<br />

Ica za: Nein, das glaube ich nicht. Windows RT betrifft<br />

eher Anwendungsprogrammierer <strong>für</strong> Windows,<br />

das hat wohl keine Folgen <strong>für</strong> Mono. Noch<br />

vor drei oder vier Jahren hätte ich gesagt: Cool,<br />

lasst uns ein RT4<strong>Linux</strong>-Projekt starten, damit<br />

RT-Applikationen auch auf <strong>Linux</strong> laufen. Windows<br />

RT ist eine fantastische Technologie, eine tolle<br />

Zwischenschicht <strong>für</strong> C# und Javascript, aber<br />

eben nur <strong>für</strong> Windows. Sie ist auch nicht so fortschrittlich<br />

wie etwa das Cocoa-Framework von<br />

Apple. Das macht sie auf dem Mac überflüssig,<br />

und deshalb macht ein RT <strong>für</strong> andere Plattformen<br />

wenig Sinn.<br />

Vom Fehler, das perfekte System zu wollen<br />

Heute schaut die Lage <strong>für</strong> den <strong>Linux</strong>-Desktop<br />

eben schlechter aus: Open Source hat zwar viele<br />

Vorteile, aber auch einige Nachteile. Es ist ein<br />

Fehler, das perfekte System bauen zu wollen. Es<br />

ist ein Fehler, APIs so oft zu ändern, weil man<br />

glaubt, durch die Verfügbarkeit des Sourcecode<br />

die Anwendungen schnell nachziehen zu können.<br />

Aber wenn man wie bei <strong>Linux</strong> <strong>alle</strong> sechs Monate<br />

APIs ändert, bleiben irgendwann nur sehr wenige<br />

Anwendungen übrig.<br />

Ich rede nicht von Inkompatibilitäten, sondern<br />

davon, dass Subsysteme wie Sound, Grafik oder<br />

Printer überarbeitet und erneuert werden. Das<br />

macht es Herstellern sehr schwer, Anwendungen<br />

herauszubringen, die funktionieren. Ich habe zu<br />

Hause ein Suse-11.2-System laufen, mit dem ich<br />

sehr zufrieden bin. Aber versuchen Sie mal, da<strong>für</strong><br />

einen aktuellen Chrome zu bekommen – und<br />

die 11.2 ist gerade mal anderthalb Jahre alt!<br />

<strong>Linux</strong>-<strong>Magazin</strong>: Hat der <strong>Linux</strong>-Desktop Ihrer Meinung<br />

nach keine Zukunft?<br />

Icaza: <strong>Linux</strong> hat heute keine vertrauenswürdige<br />

Plattform. Nein, ich glaube nicht mehr daran,<br />

dass <strong>Linux</strong> auf dem Desktop Perspektiven hat.<br />

Nicht weil es das grundsätzlich nicht könnte,<br />

sondern weil die Community Standards allzu<br />

schnell über den Haufen wirft und neu designt.<br />

Wir müssen es erst noch lernen, dass es okay ist,<br />

proprietäre Software zu integrieren, und dass<br />

es nicht in Ordnung ist, die APIs zu ändern und<br />

damit Geschäftsmodelle zu zerstören.<br />

„Für den <strong>Linux</strong>-Desktop kämpfen lohnt nicht“<br />

Es gibt ja auch solche Anstrengungen: Vor vielen<br />

Jahren gab es mal die <strong>Linux</strong> Standard Base, wo<br />

sich <strong>alle</strong> Distributoren zusammengesetzt haben<br />

und <strong>Linux</strong> standardisiert haben. Damals war<br />

Red Hat vorne, hatte deshalb kein Interesse<br />

an Standardisierung und hat nicht mitgemacht.<br />

Jetzt hat Ubuntu die Nase vorn und sagt das<br />

Gleiche: „Wir dürfen uns nicht von Standards<br />

gängeln lassen.“<br />

Ich habe viele Jahre <strong>für</strong> den <strong>Linux</strong>-Desktop aufgebracht,<br />

aber ich glaube, er ist es nicht mehr<br />

wert, da<strong>für</strong> zu kämpfen. Ich will aber auch niemanden<br />

davon abhalten. (Markus Feilner)


Titelthema<br />

www.linux-magazin.de Mono 11/2011<br />

44<br />

trennen. Im Frontend bedarf es verschiedener<br />

Apps <strong>für</strong> unterschiedliche Geräte<br />

und Eingabeformen. Also ist es besser,<br />

den Code so zu strukturieren, dass Programmierer<br />

nur noch die jeweilige App<br />

erstellen und polieren müssen.“ (mfe)n<br />

Infos<br />

[1] Mono: [http:// www.mono-pproject.com]<br />

[2] Xamarin: [http:// www.xamarin.com]<br />

[3] Mono-Lizenz <strong>für</strong> Xamarin:<br />

[http:// www. suse. com/ company/ press/​<br />

2011/ 7/ suse‐and‐xamarin‐partner‐to<br />

- accelerate‐innovation‐and‐support‐mono<br />

‐customers‐and‐community. html]<br />

[4] ECMA-Standard C#:<br />

[http:// www. ecma‐international. org/​<br />

publications/ standards/ Ecma‐334. htm]<br />

[5] ECMA-Standard-Laufzeitumgebung:<br />

[http:// www. ecma‐international. org/​<br />

publications/ standards/ Ecma‐335. htm]<br />

[6] Mono Migration Analyzer (MoMA):<br />

[http:// www. mono‐framework. com/ MoMA]<br />

[7] Mono-Bibliotheken:<br />

[http:// mono‐project. com/ Libraries]<br />

[8] Mono-kompatible Compiler:<br />

[http:// mono‐project. com/ Languages]<br />

[9] GUI-Toolkits <strong>für</strong> Mono: [http://​<br />

mono‐framework. com/ Gui_Toolkits]<br />

[10] F-Spot: [http:// f-spot.org]<br />

[11] Timothy Howards Blogeintrag zur F-Spot-<br />

Windows-Portierung:<br />

[http:// timothyhoward. org/ blog/ ? p=68]<br />

[12] Sones Graph DB: [http:// www. sones. com]<br />

[13] Graph DB Visualization Tool:<br />

[http:// developers. sones. de/ 2010/ 01/ 25/<br />

sones‐graphdb‐visualization‐tool/]<br />

[14] Sones Assembly Merger:<br />

[http:// developers. sones. de/ 2011/ 07/ 04/<br />

sones‐graphdb‐assembly‐merger‐gui/]<br />

[15] Quellcode des Sones Assembly Merger:<br />

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

sones‐assemblymerger]<br />

[16] Interview mit Miguel de Icaza: [http://​<br />

www. zdnet. co. uk/ news/​application<br />

‐development/ 2011/ 08/ 11/ mono‐a‐cure<br />

‐for‐microsoft‐monotheism‐40093649/]<br />

[17] Mono-Referenzliste: [http:// monoframework.<br />

com/ Companies_Using_Mono]<br />

[18] MS Community Promise [http:// www.​<br />

microsoft. com/ openspecifications/ en/ us/​<br />

programs/ community‐promise/ default. aspx]<br />

[19] <strong>Linux</strong>-Community, „Xamarin und Sones<br />

planen Mono Stiftung“: [http:// www.​<br />

linux‐community. de/ Internal/ Nachrichten/<br />

Xamarin‐und‐Sones‐planen‐Mono‐Stiftung]<br />

1&1 MOBILE<br />

NEU IM<br />

OKTOBER!<br />

SAMSUNG GALAXY W<br />

€ *<br />

0,–399,– €<br />

1&1<br />

* 24 Monate Mindestvertragslaufzeit. Einmalige Bereitstellungsgebühr 29,90 €, keine Versandkosten.


ALL-NET-FLAT<br />

✓FLAT FESTNETZ<br />

✓FLAT<br />

ALLE<br />

HANDY-NETZE<br />

✓FLAT INTERNET<br />

29, 99<br />

39, 99<br />

39, 99<br />

39,€/Monat*<br />

Galaktisch gut: In bester D-Netz-Qualität unbegrenzt ins gesamte deutsche<br />

Festnetz und in <strong>alle</strong> deutschen Handy-Netze telefonieren und mobil surfen.<br />

24 Monate lang mit Ihrem Handy <strong>für</strong> 29,99 €/Monat. Oder mit einem kostenlosen<br />

Smartphone wie dem Samsung Galaxy W von 1&1 <strong>für</strong> 39,99 €/Monat.<br />

Jetzt informieren und bestellen: 0 26 02 / 96 96<br />

www.1und1.de


Titelthema<br />

www.linux-magazin.de HTML 5 11/2011<br />

46<br />

Plattformunabhängig Grafik und 3-D programmieren mit HTML 5<br />

Malkasten<br />

Webanwendungen gelingt der Spagat, bei dem ein Programm unverändert auf <strong>alle</strong>n Plattformen läuft. Mit<br />

HTML 5 schließen die Browser-Apps funktional zu den Desktop-Toolkits auf. Das gelingt vor <strong>alle</strong>m dank der Leinwand<br />

Canvas, des Vektorformats SVG, der 3-D-Funktionen von Web GL und Werkzeugen wie Raphaël. Peter Kreußel<br />

HTML 5 hat beim W3C den Status „Last<br />

Call“. Das ist vergleichbar mit einem Release<br />

Candidate. Zwar soll der Standard<br />

erst 2014 [4] fertig werden, doch an dem<br />

Canvas-API dürfte sich – nach den Erfahrungen<br />

der letzten Jahre zu schließen<br />

– nur noch wenig ändern.<br />

SVG 1.1 ist seit Anfang 2003 standardisiert,<br />

das Einbetten à la HTML 5 beherrschen<br />

viele Browser <strong>alle</strong>rdings erst seit<br />

Kurzem. Außerdem verstehen die wenigsten<br />

Browser den vollen Umfang des<br />

SVG-Standards [5].<br />

© Studio Porto Sabbia,123RF<br />

HTML 5 verhilft dem Browser zu Zeichenkünsten,<br />

die bisher Desktop-Toolkits wie<br />

Qt oder Cairo vorbehalten waren. Ein anschauliches<br />

Beispiel da<strong>für</strong> findet sich auf<br />

der Webseite [1] des Entwicklers Marius<br />

Watz: eine sich permanent wandelnde<br />

Canvas-Grafik aus bunten Luftschlangen.<br />

Simples Javascript zeichnet nach einem<br />

Mausklick immer neue Ornamente. Mit<br />

dem »canvas«-HTML-Element, auf dem<br />

diese grafische Spielerei basiert, steht<br />

Webdesignern endlich eine interaktive<br />

Freiform-Zeichenfläche zur Verfügung –<br />

und das auf nahezu jeder Plattform, wie<br />

die Aufstellung in Tabelle 2 zeigt.<br />

Frühreif mit XML und SVG<br />

Ähnliche Effekte lassen sich mit per<br />

Javascript manipulierten SVG-Grafiken<br />

erzielen. In HTML 5 dürfen Entwickler<br />

ihren XML-Code direkt in das HTML-<br />

Markup einbetten. Dies erleichtert den<br />

Zugriff auf einzelne Elemente über die<br />

DOM-Schnittstelle des Browsers. Ein<br />

Beispiel, dessen Gestaltungsprinzip sich<br />

auch <strong>für</strong> anschauliche Bedienungsanleitungen<br />

nutzen lässt, ist die animierte Explosionszeichnung<br />

der Trajanssäule des<br />

Wikimedia-Benutzers „Hk kng“ (Abbildung<br />

1, [2]).<br />

Aus der Reihe tanzt nur der Internet Explorer,<br />

der den Canvas- und SVG-Support<br />

erst im März 2011 mit der aktuellen<br />

Version 9 nachliefert und <strong>für</strong> Version 10<br />

weitere Nachbesserungen verspricht. Es<br />

gibt aber Javascript-Bibliotheken, die das<br />

Canvas-API und SVG-Elemente transparent<br />

in Microsofts proprietäre, bereits im<br />

Internet Explorer 6 verfügbaren Grafiksprache<br />

VML übersetzen [3].<br />

Ein Silberstreif am Horizont ist in Sicht:<br />

Der auf Microsofts Build-Konferenz vorgestellte<br />

Internet Explorer 10 sowie die<br />

Apps-Landschaft <strong>für</strong> Windows 8 (geplant<br />

<strong>für</strong> 2012) setzen intensiv auf HTML 5.<br />

Geduld braucht auch, wer darauf wartet,<br />

dass der Standard endlich fertig wird.<br />

Mobilität gefragt<br />

SVG und Canvas sind nicht auf den PC<br />

beschränkt, die meisten Smartphoneund<br />

Tablet-Browser nutzen die gleichen<br />

Rendering Engines wie ihre großen Geschwister<br />

(Abbildung 2). Lediglich Opera<br />

Mini haben die Entwickler bewusst stark<br />

abgespeckt. Beim Android-Browser fehlt<br />

bis Version 3.0 der SVG-Support wegen<br />

seines Umfangs.<br />

Anders sieht es unter Microsofts wenig<br />

erfolgreicher Plattform Windows Phone<br />

7 aus: Der eingebaute Browser basiert<br />

auf dem Internet Explorer 7, der von den<br />

neuen Standards noch nichts weiß. Bisher<br />

sperrte die von Microsoft diktierte<br />

Beschränkung, Apps nur in nativen Microsoft-Techniken<br />

wie C# und Silverlight<br />

zuzulassen, alternative Browser aus. Erst<br />

das <strong>für</strong> diesen Herbst erwartete Windows<br />

Phone 7.5 soll hier mit einem neuen nativen<br />

Browser nachbessern. Der jüngst<br />

angekündigte, überraschende Schwenk<br />

Microsofts hin zu HTML 5 dürfte die Situation<br />

deutlich verbessern.<br />

Auch wenn manche <strong>für</strong> den Desktop-<br />

Browser konzipierten Programme an zu<br />

geringen CPU-Ressourcen oder einem


Internet Explorer) inzwischen<br />

nativen Support erwarten.<br />

Workarounds [7] sorgen jedoch<br />

auch beim Sorgenkind<br />

der Webentwickler <strong>für</strong> Abwärtskompatibilität<br />

bis zu<br />

Version 6.<br />

SUPERGÜNSTIG<br />

MOBIL<br />

SURFEN<br />

Malkasten<br />

Abbildung 1: SVG-Grafiken taugen nicht nur <strong>für</strong> Stillleben. Auch<br />

per Javascript animierte SVGs wie diese per Mausklick zerlegbare<br />

antike Säule f<strong>alle</strong>n Webentwicklern dank des vertrauten Zugriffs<br />

über die DOM-Schnittstelle nicht schwer.<br />

zu kleinen Bildschirm scheitern: Grundsätzlich<br />

laufen Canvas-Anwendungen<br />

und Javascript-Skripte, die SVG-Grafiken<br />

manipulieren, auch auf dem Handy ohne<br />

Anpassung.<br />

Nachbesserungsbedarf besteht jedoch<br />

bei der Bedienung. Zwar funktionieren<br />

die »onclick«-Handler, die die Mausklicks<br />

auf Buttons einfangen, auch wenn ein<br />

Handy- oder Tablet-Benutzer mit dem<br />

Finger darauf tippt. Multitouch jedoch<br />

gelingt nur mit dem speziell da<strong>für</strong> geschaffen<br />

Javascript-API [6].<br />

Um den plattformübergreifenden Support<br />

von Canvas-2-D und SVG steht es also besser<br />

als bei jeder Desktop-Bibliothek: Die<br />

neuen grafischen Fähigkeiten von HTML<br />

sind unter <strong>Linux</strong>, Mac OS und Windows,<br />

Android-Smartphones und dem iPhone<br />

verfügbar (Tabelle 2). Entwickler dürfen<br />

bei <strong>alle</strong>n Desktop-Browsern (außer dem<br />

Tabelle 1: Canvas-Bibliotheken<br />

Name Beschreibung Homepage<br />

Processing.js<br />

Plotkit<br />

Javascript-Port der Visualisierungssprache<br />

Processing<br />

Chart-Bibliothek, zeichnet mit<br />

Canvas und als SVG<br />

In den Canvas zeichnet Javascript<br />

in Echtzeit Linien, Ellipsen<br />

und Rechtecke sowie<br />

die aus Zeichenprogrammen<br />

bekannten Bézierkurven.<br />

Eine Ausfüllen-Funktion verpasst<br />

den Elementen eine Füllung,<br />

auch Farbverläufe und<br />

Schatteneffekte sind möglich.<br />

Der ganze Canvas lässt sich<br />

drehen, zoomen und verschieben.<br />

Ein Canvas-Element besteht lediglich aus<br />

dem »canvas«-Tag. Seine Methode »get-<br />

Context()« gibt in Javascript ein Objekt<br />

zurück, das die Zeichenbefehle als Methoden<br />

enthält:<br />

var canvas = document.getElementByIdU<br />

("Canvas-Element");<br />

var ctx = canvas.getContext('2d');<br />

Der 2-D-Kontext ist leicht zu meistern.<br />

Das in diesem Code erzeugte Canvas-<br />

»2d«-Objekt stellt Befehle <strong>für</strong> Zeichenmethoden<br />

zur Verfügung. Verständlich<br />

dokumentiert sind sie unter [8], der entsprechende<br />

W3C-Standard ist unter [9]<br />

zu finden.<br />

Listing 1 enthält ein einfaches Beispiel<br />

<strong>für</strong> die wichtigsten Canvas-Methoden<br />

(Abbildung 2). Die Zeilen 6 und 7 laden<br />

eine Bilddatei in ein Javascript-Objekt.<br />

Da der weitere Code erst ablaufen darf,<br />

[http:// processingjs. org]<br />

[http:// www. liquidx. net/ plotkit/]<br />

Kapi Animationen ohne Flash [http:// jeremyckahn. github. com/ kapi/]<br />

Infovis Interaktive Graphen [http:// thejit. org]<br />

Springy<br />

Minimalistische Demo <strong>für</strong> Federkraft-getriebenes<br />

Graphenlayout<br />

[http:// dhotson. github. com/ springy/​<br />

demo. html]<br />

Cufon Canvas-basierte Schriften [https:// github. com/ sorccu/ cufon/]<br />

Jqcanvas<br />

Abgerundete Ecken und Farbverläufe<br />

ohne Grafikdateien<br />

[http:// code. google. com/ p/ jqcanvas/]<br />

1&1 NOTEBOOK-FLAT<br />

9, 99<br />

€/Monat*<br />

✓<br />

✓<br />

✓<br />

1&1 Surf-<br />

Stick 0,– €!*<br />

Internet-Flatrate per<br />

HSDPA/UMTS!<br />

1&1 Surf-Stick oder Micro-<br />

SIM-Karte <strong>für</strong> 0,– €!*<br />

Beste D-Netz-Qualität!<br />

Jetzt informieren und<br />

bestellen: 0 26 02 / 96 96<br />

www.1und1.de<br />

* 1&1 Notebook-Flat mit bis zu 7.200 kBit/s. Ab einem Datenvolumen von<br />

1 GB steht eine Bandbreite von max. 64 kBit/s zur Verfügung. 24 Monate<br />

Mindestvertragslaufzeit. Keine Bereitstellungsgebühr, keine Versandkosten.


Titelthema<br />

www.linux-magazin.de HTML 5 11/2011<br />

48<br />

Abbildung 2: Viele mobile Browser bieten SVG- und Canvas-Support. Der native Android-Browser (links) versteht<br />

SVG <strong>alle</strong>rdings erst ab Android-Version 3.<br />

wenn das Bild vom Server geladen ist,<br />

hängt er vom »onload«-Event des HTML-<br />

Dokuments ab.<br />

Pfade und Linien<br />

Die Zeilen 11 bis 12 initialisieren einen<br />

2-D-Canvas-Kontext, Zeilen 14 bis 15<br />

setzen Füllung und Umriss <strong>für</strong> künftige<br />

Zeichenoperationen, 19 bis 22 Schatten-<br />

Offset, Unschärfe und Farbe. Die ersten<br />

Zeichenbefehle folgen in den Zeilen 25<br />

und 26: ein gefülltes Rechteck und ein<br />

passender Umriss in derselben Größe. Die<br />

Zeilen 29 bis 35 zeichnen einen Pfad aus<br />

geraden Linien, einem Kreisbogen und<br />

einer Bézierkurve. Die ersten zwei Zeilen<br />

eröffnen den Pfad und setzen den Startpunkt.<br />

Dann folgen eine gerade Linie, ein<br />

Halbkreisbogen und eine weitere gerade<br />

Linie. Zu beachten ist, dass die »arc()«-<br />

Methode Start- und Endwinkel (vierter<br />

und fünfter Parameter) nicht als Winkel,<br />

sondern als Radiant interpretiert.<br />

Die Bézierkurve bildet die Unterseite des<br />

ockerfarbenen Kastens. Die ersten vier<br />

Parameter beschreiben die x- und y-Koordinaten<br />

der so genannten Kon trollpunkte,<br />

die wie in einem Zeichenprogramm<br />

Krümmungsrichtung und ‐tiefe festlegen<br />

(Abbildung 3).<br />

Effekte<br />

Effektvolle Beispiele auf Canvas-Basis<br />

sind bei [10] zu finden. Sie beweisen,<br />

dass sich auf aktuellen Rechnern auch<br />

bei komplexen optischen Effekten noch<br />

Frame-Raten <strong>für</strong> fließende Animationen<br />

erzielen lassen. Weitere Javascript-Bibliotheken,<br />

die den Umgang mit dem Canvas<br />

erleichtern, nennt Tabelle 1.<br />

Der HTML-Canvas gleicht einem Malprogramm<br />

wie Gimp: Wie in einer Bitmap-<br />

Grafik lassen sich Bildbereiche auswählen<br />

und verändern. Soll ein von anderen<br />

Objekten überdecktes Element verändert<br />

werden, so ist daher der ganze betroffene<br />

Bildausschnitt neu zu zeichnen.<br />

Wer mit einem Vektorzeichenprogramm<br />

wie Inkscape vertraut ist, der weiß, dass<br />

dies dort einfacher geht: Alle gezeichneten<br />

Formen bleiben unabhängig von der<br />

Umgebung manipulierbar. Wer das Vektorprinzip<br />

dem Canvas-Malkasten vorzieht,<br />

realisiert es in HTML 5 über direkt<br />

in den Seitencode eingebundene SVG-<br />

Grafiken. Das vom W3C standardisierte<br />

Dateiformat [11] ist auch deshalb von<br />

Vorteil, weil Programme wie Inkscape es<br />

als Standard benutzen.<br />

Bewegende Künste<br />

Mit statischen Grafiken sind die Möglichkeiten<br />

von SVG aber noch lange<br />

nicht ausgeschöpft: Der Browser kann<br />

das XML-Markup mit der eingebauten<br />

DOM-Schnittstelle von Javascript aus<br />

ansprechen – genau wie die Elemente<br />

einer gewöhnlichen Webseite. So lassen<br />

sich SVG-Grafiken im Browser interaktiv<br />

gestalten und animieren. Wie in HTML-<br />

Seiten legen Stylesheets die Attribute der<br />

Zeichnungselemente fest.<br />

Tabelle 2: Browser-Kompatibilität<br />

Browser Betriebssystem Canvas ab Version Canvas-3-D/​<br />

Web GL<br />

SVG ab Version<br />

Inline SVG ab<br />

Version<br />

Android-Browser Android 2.1 – 3.0 3.0 02/​2011<br />

Chrome <strong>Linux</strong>, OS X, Windows 3.0 9 1.0 7.0 10/​2009<br />

Firefox <strong>Linux</strong>, OS X, Windows 1.5 4.0 1.5/​2 4.0 10/​2006<br />

Canvas und SVG ab<br />

Datum<br />

Firefox Mobile Android, iPhone 4 Beta – 4 Beta 4 Beta im Betastadium<br />

Internet Explorer Windows 9 – 9 9 03/​2011<br />

Opera <strong>Linux</strong>, OS X, Windows 9.0 11 8 (SVG Tiny), 9 12 06/​2006<br />

Opera Mini Android, iPhone,<br />

Windows Mobile (nicht<br />

Windows Phone 7)<br />

5.0 (teilweise) – 4 (Clientside Scripting<br />

stark eingeschränkt,<br />

[11])<br />

– 08/​2009<br />

Opera Mobile diverse mobile 10.0, Text: 11.0 – 10.0 – [11] 03/​2010<br />

Safari OS X, Windows 3.1 5.2 3.2 5.1 11/​2008<br />

Safari (iPhone) iPhone 3.2 – 3.1 – 08/​2010<br />

Windows Phone<br />

7 (eingebauter<br />

Browser)<br />

Windows Phone 7 ab Windows Phone<br />

7.5 (erwartet <strong>für</strong><br />

Herbst 2011)<br />

– ab Windows Phone<br />

7.5 (erwartet <strong>für</strong><br />

Herbst 2011)<br />

ab Windows Phone<br />

7.5 (erwartet <strong>für</strong><br />

Herbst 2011)<br />

erwartet <strong>für</strong> Herbst<br />

2011


Ältere Browser (vergleiche Tabelle 2) zeigen<br />

SVG-Grafiken nur an, wenn sie über<br />

den »object«-Tag als externe Dateien eingebunden<br />

sind. Auch Javascript-Code <strong>für</strong><br />

Manipulation zur Laufzeit muss in dieser<br />

externen Datei stehen, was die Entwicklung<br />

verkompliziert, die interaktiven Fähigkeiten<br />

aber nicht beschränkt.<br />

Mit der SVG-1.1-Spezifikation hat das<br />

W3C einen enorm leistungsfähigen Standard<br />

<strong>für</strong> Vektorgrafiken geschaffen, der<br />

Adobes PDF-Format mit seinen Effektfiltern<br />

stellenweise überflügelt: Damit lassen<br />

sich realistische Schlagschatten, aber<br />

auch viele Licht- und Überblendungseffekte<br />

erzeugen, bei denen PDF auf eingebettete<br />

Bitmaps mit fester Auflösung<br />

angewiesen bleibt.<br />

Als erste Anlaufstelle <strong>für</strong> Einsteiger eignet<br />

sich [12], etwas mehr in die Tiefe<br />

geht [13]. Tabelle 3 zeigt eine Liste der<br />

Grundfunktionen.<br />

Helfer gefragt<br />

Allerdings funktionieren die inzwischen<br />

beinahe unverzichtbaren Helfer beim<br />

Arbeiten mit der DOM-Schnittstelle und<br />

Javascript-Bibliotheken wie Jquery oder<br />

YUI, aber mit SVG nur begrenzt. Zwar<br />

klappt das Ansprechen einzelner Elemente,<br />

doch die SVG-Attribute sind nicht<br />

wie in HTML auf Strings beschränkt. Sie<br />

weisen eine Objektstruktur auf, mit der<br />

die <strong>für</strong> HTML konzipierten Javascript-<br />

Bibliotheken nichts anfangen können.<br />

Tabelle 3: SVG im Überblick<br />

Grundformen<br />

Pfade<br />

Text<br />

Farben<br />

Filtereffekte<br />

Interaktivität<br />

Animation<br />

Fonts<br />

Für Jquery gibt es ein SVG-Plugin [15],<br />

das leider eine leichte Modifikation der<br />

Jquery-Basisbibliothek voraussetzt. Da<strong>für</strong><br />

lässt sich damit der XML-Code einer<br />

SVG-Grafik so verarbeiten, wie Webentwickler<br />

es von Jquery kennen.<br />

Dass SVG im Internet noch immer eine<br />

nur geringe Rolle spielt, liegt vor <strong>alle</strong>m<br />

an Microsoft: Erst der Internet Explorer<br />

9 weist einen zudem noch recht lückenhaften<br />

SVG-Support auf (Abbildung 4).<br />

Zwei Workarounds sind verfügbar: Die<br />

von Google entwickelte Javascript-Bibliothek<br />

SVG Web verwandelt SVG-Grafiken<br />

in Flash-Objekte.<br />

Die ebenfalls in Javascript umgesetzte<br />

Zeichenbibliothek Rafaël [16] arbeitet<br />

nicht mit fertigen SVG-Dateien. Sie stellt<br />

Zeichenbefehle bereit, die sie je nach<br />

Browser entweder in SVG- oder dem vom<br />

Internet Explorer unterstützten proprietären<br />

VML umsetzt.<br />

Rechtecke (auch mit gerundeten Ecken), Polygone, Kreise und Ellipsen<br />

Gerade Linien, Bézier- und Polynomkurven<br />

Unicode, auch bidirektional und entlang eines Pfads<br />

Einfache Farben, Transparenz, Farbverläufe, Füllmuster<br />

Breite Palette von Unschärfe bis hin zu Spiegelungseffekten, das Alleinstellungsmerkmal<br />

von SVG<br />

Skriptbar mit Javascript, DOM-Schnittstelle ähnlich HTML, Events <strong>für</strong><br />

Mausaktionen<br />

Kompatibel mit SMIL [14], ein W3C-Standard zur Beschreibung von Animationen<br />

Externe Systemfonts und eingebettete SVG-Fonts<br />

Das API von Rafaël lehnt sich an SVG<br />

an. Wer es beherrscht, kommt mit der<br />

Bibliothek sofort klar, der Einsteiger sogar<br />

schneller als beim direkten Umgang<br />

mit SVG: Rafaël stellt Hilfsfunktionen <strong>für</strong><br />

Animationen und den Zugriff auf SVG-<br />

Elemente über die DOM-Schnittstelle des<br />

Browsers zur Verfügung. Das wichtigste<br />

Plus ist aber die Kompatibilität mit dem<br />

Internet Explorer 6 bis 9.<br />

Zeichenkünstler Rafaël<br />

Das Beispiel in Abbildung 5 zeigt die<br />

grundlegenden Fähigkeiten der Zeichenbibliothek<br />

und demonstriert, wie sich<br />

Ink scape als Hilfsmittel nutzen lässt. Die<br />

ersten Zeilen des Listings 2 enthalten<br />

den HTML-Kopf und binden Rafaël und<br />

Jquery ein. Letzteres ist <strong>für</strong> die Arbeit<br />

mit Rafaël nicht unbedingt nötig, doch<br />

Jquery erleichtert das Einrichten eines<br />

HTML 5 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

49<br />

Listing 1: Canvas-2-D-Beispiel<br />

01 <br />

02 <br />

03 <br />

04 <br />

05 //Image‐Objekt<br />

06 var rose = new Image();<br />

07 rose.src="rose.png";<br />

08 //erst ausführen, wenn das Bild geladen<br />

ist<br />

09 window.onload = function(){<br />

10 //Canvas‐Kontext<br />

11 var canvas = document.getElementById<br />

("mycanvas");<br />

12 var ctx = canvas.getContext('2d');<br />

13 <br />

14 //Füllung, Umriss<br />

15 ctx.fillStyle = "rgba(0,255,50,0.5)";<br />

16 ctx.strokeStyle = "rgba(150,75,0,1)";<br />

17 <br />

18 //Schatten<br />

19 ctx.shadowOffsetX = 2;<br />

20 ctx.shadowOffsetY = 3;<br />

21 ctx.shadowBlur = 5;<br />

22 ctx.shadowColor = "#888888"<br />

23 <br />

24 //Rechteck<br />

25 ctx.fillRect(50,50,125,125);<br />

26 ctx.strokeRect(50,50,125,125);<br />

27 <br />

28 //Pfad‐Objekt zeichnen<br />

29 ctx.beginPath();<br />

30 ctx.moveTo(25, 25);<br />

31 ctx.lineTo(105, 25);<br />

32 ctx.arc(125, 25, 20, ‐Math.PI, 0,<br />

false)<br />

33 ctx.lineTo(145, 125);<br />

34 ctx.bezierCurveTo(80, 145, 105, 105,<br />

25, 125)<br />

35 ctx.closePath();<br />

36 <br />

37 //Pfad‐Objekt füllen<br />

38 ctx.fillStyle = "rgba(255,255,50,<br />

0.5)";<br />

39 ctx.fill();<br />

40 ctx.stroke();<br />

41 <br />

42 //Bitmap<br />

43 ctx.fillStyle = "rgba(0, 0, 0, 1)";<br />

44 ctx.drawImage(rose, 55, 55, 50, 50);<br />

45 }<br />

46 <br />

47 <br />

48 <br />

49 <br />

50 <br />

51


Titelthema<br />

www.linux-magazin.de HTML 5 11/2011<br />

50<br />

auf <strong>alle</strong>n Browsern lauffähigen Event-<br />

Handlers (Zeile 54) und sorgt da<strong>für</strong>, dass<br />

der Javascript-Code erst abläuft, wenn die<br />

DOM-Schnittstelle bereit ist (»$«-Funktion<br />

in Zeile 8).<br />

Ein Herz genommen<br />

Zeile 15 initialisiert die Rafaël-Zeichenfläche,<br />

Zeile 17 zeichnet den kleinen Kreis<br />

(Abbildung 6). Zum Zeichnen kommen<br />

stets Methoden des Zeichenflächenobjekts<br />

»paper« zum Einsatz. Die Zeilen 19<br />

bis 22 erzeugt das Herz aus mehreren<br />

Bézierkurven-Segmenten. Die Pfad-Definition<br />

folgt dabei dem SVG-Standard, der<br />

sich nicht gerade durch gute Lesbarkeit<br />

auszeichnet.<br />

In der Praxis stört das kaum: Die Zahlenund<br />

Zeichenfolge lässt sich leicht mit Inkscape<br />

erzeugen. Wer dort die Herzform<br />

mit dem Bézierkurven-Werkzeug zeichnet,<br />

den Pfad markiert und »Bearbeiten<br />

Abbildung 3: Krümmung nach Maß: Die beiden Kontrollpunkte einer Bézierkurve<br />

(rot markiert) tauchen in der Canvas-Funktion »bezierCurveTo()«<br />

ebenfalls als Parameter auf.<br />

| XML‐Editor« auswählt, muss nur noch<br />

den Inhalt des ersten Attributs »d« als<br />

Parameter <strong>für</strong> »path()« kopieren.<br />

Die Zeilen 24 und 25 setzen die Pfad-Attribute<br />

»fill« und »stroke« (Füllung und<br />

Umriss) auf »#ff0«, den hexadezimalen<br />

Farbcode <strong>für</strong> Rot. Zeilen<br />

27 und 29 schreiben<br />

Text in die Herzform<br />

und färben ihn<br />

gelb. Interessant wird<br />

es bei den Animationsfunktionen<br />

(Zeilen<br />

36 bis 51), die die folgenden<br />

zwei Zeilen<br />

zur Initialisierung einmal<br />

aufrufen.<br />

Immer in<br />

Bewegung<br />

Die Anweisung »animateCircle()«<br />

ab Zeile<br />

36 sorgt da<strong>für</strong>, dass der kleine Ball sich<br />

pausenlos entlang der Kante der Herzform<br />

bewegt. Dazu kommt die Rafaël-<br />

Methode »animateAlong()« zum Einsatz.<br />

Sie erhält als Parameter mit »(path,<br />

2000, false)« den bereits gezeichneten<br />

01 <br />

02 <br />

03 <br />

Listing 2: Rafaël-Beispiel<br />

32 animateCircle();<br />

33 colorChange();<br />

34 <br />

04 <br />

05 <br />

06 <br />

07 //JQuery‐Funktion zur Ausführung nach laden des Dokuments<br />

08 $(function(){<br />

09 //Farben, zwischen denen der Ball wechselt<br />

10 var colors = ["#000", "#800", "#f00", "#f80", "#ff0"];<br />

11 //Array‐Zähler<br />

12 var counter = 0, zoom = 1;<br />

13 <br />

14 //Zeichenfläche 200x200 bei Position 50,50<br />

15 var paper = Raphael(50, 50, 200, 200);<br />

16 //Kreis an Position 40, 60, Radius 10<br />

17 var circle = paper.circle(40, 60, 10);<br />

18 //aus Inkscape kopierte Pfad‐Definition<br />

19 var path = paper.path("m 41.416257,61.90761 c 17.95308,<br />

‐27.77874 " +<br />

20 "56.06346,0.53741 56.06346,0.53741 0,0 38.055253,‐28.20692<br />

" +<br />

21 "55.982363,‐0.46836 34.96991,54.10886 ‐55.982363,112.02335<br />

" +<br />

22 "‐55.982363,112.02335 0,0 ‐91.0840396,‐57.90515<br />

‐56.06346,‐112.0924 z");<br />

23 //Rot <strong>für</strong> Füllung und Umriss<br />

24 path.attr("fill", "#f00");<br />

25 path.attr("stroke", "#f00");<br />

26 //Text in der Mitte der Herzform<br />

27 var text = paper.text(100, 100, "Please\nclick me!");<br />

28 //Textfarbe Gelb<br />

29 text.attr("fill", "#ff0");<br />

30 <br />

31 //Animationen in Gang setzen<br />

35 //animiere den Ball <strong>alle</strong> 2000 ms neu<br />

36 function animateCircle(){<br />

37 //Rafaël‐Methode <strong>für</strong> das Bewegen das Balls entlang path<br />

38 circle.animateAlong(path, 2000, false);<br />

39 //Timer neu setzen<br />

40 setTimeout(animateCircle, 2000);<br />

41 }<br />

42 <br />

43 //ändere Farbe des Balls in zufälligen Zeitabständen<br />

44 function colorChange(){<br />

45 //Rafaël‐Funktion verändert Element‐Attribute<br />

46 circle.attr("fill", colors[counter]);<br />

47 //Elemente von Array colors hochzählen, ggf. zurück zu 0<br />

48 counter = (counter < 5) ? ++counter : 0;<br />

49 //Timer neu setzen<br />

50 setTimeout(colorChange, Math.random()*50);<br />

51 }<br />

52 <br />

53 //Jquery‐Click‐Handler <strong>für</strong> das Herz<br />

54 $(path.node).click(function(){<br />

55 //> 1 ‐> mache kleiner und umgekehrt<br />

56 zoom = (zoom > 0.95) ?<br />

57 zoom ‐ 0.1:<br />

58 zoom + 0.1;<br />

59 //animiere Herz‐Skalierung mit Typ "bounce" (hin und her)<br />

60 path.animate({scale:zoom}, 500, "bounce")<br />

61 });<br />

62 });<br />

63 <br />

64 <br />

65 <br />

66


LINUX<br />

Lassen Sie Ihre <strong>Linux</strong>-Projekte von einem<br />

Team erledigen, das Sie GLÜCKLICH macht.<br />

Abbildung 4: Mit dem Internet Explorer 9 (links) beginnt der SVG-Support bei Microsoft mit zehn Jahren Verspätung.<br />

Mangels Filterunterstützung f<strong>alle</strong>n Grafiken – im Vergleich zu Firefox (rechts) – <strong>alle</strong>rdings ein wenig<br />

schlicht aus. Besser soll das erst mit dem IE 10 werden.<br />

Pfad, die Animationsdauer und »false«,<br />

um die Rotation des animierten Objekts<br />

abzuschalten, die auf den Kreis keine<br />

sichtbaren Auswirkungen hätte. Zeile 40<br />

setzt einen Javascript-Timeout, der die<br />

Funktion nach Ende der Animation erneut<br />

aufruft.<br />

Die Funktion »colorChange()« zählt die<br />

fünf Elemente des Array »color« durch<br />

und weist der Füllfarbe des Kreises ihren<br />

Wert zu, und »setTimeout()« in Zeile 50<br />

sorgt dann da<strong>für</strong>, dass die Funktion in<br />

zufälligen Zeitinterv<strong>alle</strong>n immer wieder<br />

abläuft.<br />

Bleibt noch der Klick-Handler <strong>für</strong> das<br />

Herz. Er nutzt die Event-Handler-Abstraktion<br />

von Jquery, damit er auch im Internet<br />

Explorer 6 funktioniert. Rafaël entfaltet<br />

seine Zeichenkünste selbst in diesem<br />

Browser-Urahn ohne Einschränkung (Abbildung<br />

6). Bei einem Mausklick auf das<br />

Herz weist er diesem einen Skalierungsfaktor<br />

zu, der um den Betrag »0.1« um<br />

den ursprünglichen Wert »1« pendelt.<br />

Der Code zeigt, dass Rafaël viele SVG-<br />

Attribute nicht nur auf einen Schlag verändert,<br />

sondern auch gleitend animiert.<br />

Es kommt die »animate()«-Methode zum<br />

Einsatz, die ein Objekt aus Attribut-Wertepaaren,<br />

die Animationsdauer sowie den<br />

Animationstyp als Parameter erwartet.<br />

»bounce« bewirkt, auf die Skalierung angewandt,<br />

einen Wackelpudding-Effekt.<br />

Die Tiefe des Raumes<br />

Schon vor Jahren gab es mit VRML den<br />

Versuch, interaktive 3-D-Szenen in HTML-<br />

Seiten einzubetten. Ihm war wenig Erfolg<br />

beschieden, kein Browser unterstützte die<br />

3-D-Modellierungssprache nativ. Viel besser<br />

sieht es heute <strong>für</strong> Web GL [17] aus,<br />

einem auf Open GL ES 2.0 basierenden<br />

3-D-API. Der Browser erhält damit direkten<br />

Zugriff auf die Hardware beschleunigung<br />

der Grafikkarte.<br />

Aktuelle Browser, ausgenommen der Internet<br />

Explorer, unterstützen es bereits.<br />

FACHLICH GUT.<br />

... unterstützt uns seit einigen<br />

Jahren fachkundig und rund um die<br />

Uhr bei Betrieb und Troubleshooting<br />

unserer <strong>für</strong> den Flugbetrieb wichtigen<br />

<strong>Linux</strong>-Cluster.<br />

Markus Haake, Head of IT-Infrastructure<br />

EFFIZIENT.<br />

...lange Diskussionen und Planungen<br />

waren unnötig. Die Heinleins haben<br />

mit ihrer Erfahrung ein überzeugendes<br />

Konzept fertig auf den Tisch gelegt.<br />

Marcus Lindner, Head of Corporate Network/Office-IT<br />

FERTIG.<br />

... innerhalb der recht sportlichen<br />

Vorgabe von zwei Wochen wurden<br />

<strong>alle</strong> Punkte umgesetzt.<br />

Holger Bürger, Director Site Operations<br />

Abbildung 5: Das Open-Source-Zeichenprogramm Inkscape arbeitet mit SVG und zeigt den erzeugten Code in<br />

seinem eingebauten XML-Editor.<br />

http://www.heinlein-support.de


Titelthema<br />

www.linux-magazin.de HTML 5 11/2011<br />

52<br />

01 <br />

02 <br />

03 <br />

04 <br />

Da Microsoft angeblich<br />

Bedenken bezüglich der<br />

Sicherheit beim Freigeben<br />

der Hardware <strong>für</strong><br />

einen Zugriff aus dem<br />

Internet plagen [18], ist<br />

Unterstützung aus Redmond<br />

auch in Zukunft<br />

nicht zu erwarten (Abbildung<br />

7).<br />

Web GL klinkt sich in<br />

den HTML-Canvas ein.<br />

Wer ihn einsetzen will,<br />

der ruft »canvas.getContext();«<br />

mit dem Parameter<br />

»webgl« auf. Zurzeit<br />

müssen Entwickler<br />

<strong>alle</strong>rdings noch damit<br />

rechnen, dass der Browser<br />

stattdessen Bezeichnungen<br />

wie »experimental‐webgl«,<br />

»moz‐webgl« und »webkit‐3d«<br />

erwartet und diese Varianten erst durchtestet,<br />

bis »getContext()« ein gültiges Objekt<br />

zurückgibt.<br />

Web GL beruht auf 3-D-<br />

Technik der 80er Jahre<br />

Web GL ermöglicht direkten Zugriff auf<br />

Open-GL-Shader aus Javascript. Praktisch<br />

<strong>alle</strong>s, was sich in Open GL programmieren<br />

lässt, zaubern in der 3-D-Programierung<br />

versierte Entwickler damit ohne Plugin in<br />

das Browserfenster. Ausgenommen sind<br />

numerisch aufwändige physikalische<br />

Berechnungen, wie sie aktuelle Spiele-<br />

Engines oder Blender beherrschen. Als<br />

hochperformante Rechenmaschine <strong>für</strong><br />

Vektoren und Matrizen eignet sich der Javascript-Interpreter<br />

nämlich trotz großer<br />

Fortschritte in letzter Zeit noch nicht.<br />

Listing 3: Web-GL-HTML-Code<br />

05 <br />

06 <br />

07 <br />

08 <br />

09 var canvasElement = document.<br />

getElementById("canvas");<br />

10 var doc = new GLGE.Document();<br />

11 <br />

Abbildung 6: Rafaël kommt auch mit dem Uralt-<br />

Browser Internet Explorer 6 zurecht. Ohne dass<br />

der Entwickler davon etwas bemerkt, setzt Rafaël<br />

Zeichenbefehle und Animationen dann mit der<br />

Microsoft-spezifischen Zeichensprache VML um.<br />

Manchen Webentwicklern fällt der Einstieg<br />

in die Web-GL-Programmierung<br />

wegen des Low-Level-Ansatzes leider<br />

schwer. Das Design prinzip von Web GL<br />

weicht stark von den heute üblichen objektorientierten<br />

APIs ab – kein Wunder,<br />

die Wurzeln von Open GL liegen in den<br />

80er Jahren. Doch es gibt bereits einige<br />

Bibliotheken, die in der C- oder GL-Shader-Programmierung<br />

unerfahrenen Entwicklern<br />

auf die Sprünge helfen. Einen<br />

ausgereiften Eindruck machen GLGE<br />

[20] und Scene JS [21].<br />

Das einfache Beispiel in den Listings 3<br />

und 4 definiert den Würfel aus Abbildung<br />

8 mit Hilfe von GLGE. Es besteht<br />

aus zwei Teilen: einer HTML-Datei inklusive<br />

Javascript-Code und einer XML-<br />

Datei, die die Elemente der räumlichen<br />

Szene definiert. Die HTML-Datei (Listing<br />

3) enthält ein »canvas«-Element und<br />

12 doc.load("defs.xml");<br />

13 <br />

14 doc.onLoad = function() {<br />

15 var renderer = new GLGE.<br />

Renderer(canvasElement);<br />

16 var scene = new GLGE.Scene();<br />

17 scene = doc.getElement<br />

("mainScene");<br />

18 renderer.setScene(scene);<br />

19 renderer.render();<br />

20 }<br />

21 <br />

22 <br />

23 <br />

Abbildung 7: Ein Vorbote <strong>für</strong> Microsofts Zukunft im Web? Die HTML-5-<br />

Spieleseite Tubagames [19] sagt wegen fehlendem Web-GL-Support Nein<br />

zum Internet Explorer.<br />

bindet die GLGE-Bibliothek ein, deren<br />

»load()«-Methode nach Initialisierung des<br />

GLGE-Objekts die XML-Szenendatei lädt<br />

(Zeilen 5 bis 12). Die nach dem Laden<br />

der Szene aufgerufene Funktion von Zeile<br />

14 bis 20 erledigt die eigentliche Arbeit.<br />

Zunächst initialisiert sie den Canvas als<br />

Renderer und die 3-D-Szene.<br />

Die Variable »doc« enthält bereits die<br />

Szenendefinition als per DOM parsbares<br />

XML-Dokument (Listing 4). Darin ist<br />

eine Szenendefition mit der ID »main-<br />

Scene« enthalten, die die Zeilen 16 und<br />

17 an den Renderer ankoppeln. Nun fehlt<br />

nur noch der Aufruf von »render()«. Im<br />

Browser erscheint ein natürlich ausgeleuchteter<br />

Würfel.<br />

Die Szenendefinition kombiniert die<br />

räumlichen Koordinaten von sechsmal<br />

sechs Dreiecken zu einem 3-D-Gitternetz<br />

(Mesh, Zeilen 5 bis 10). Das Dreieck ist<br />

die Grundform jedes 3-D-Programms,<br />

auch von GLGE. Die Koordinaten sind so<br />

gewählt, dass ein Würfel mit der Kanten-<br />

Abbildung 8: Der Browser als Renderer: Web GL<br />

verknüpft Open GL ES 2.0 und Javascript.


Abbildung 9: Glänzende Oberflächen spiegeln in mit<br />

GLGE gestalteten Szenen die Umgebung wider.<br />

länge 1 entsteht. Ein Mesh-Objekt braucht<br />

ein Material, das seine Oberflächeneigenschaften<br />

festlegt. Im Beispiel sind bloß<br />

die Stärke der Spiegelung und die Farbe<br />

definiert (Zeile 16). Das »scene«-Element<br />

platziert Mesh, Kamera und ein Licht,<br />

ohne das nichts erkennbar wäre.<br />

Bewegt und strahlend<br />

Bereits das einfache Beispiel zeigt: Wer<br />

GLGE benutzt, muss sich nicht mit der<br />

Shader-Programmierung herumschlagen.<br />

Was noch nicht zum Vorschein kommt,<br />

ist der beeindruckende Leistungsumfang<br />

der Bibliothek: GLGE beherrscht<br />

Keyframe-basierte Animation, die <strong>für</strong> die<br />

Charakter-Animation auch ein Skelett-<br />

System bereitstellt.<br />

Für realistische Ausleuchtung sorgen<br />

gerichtete Spot- und Punktlichter sowie<br />

Normalmapping, also das Interpolieren<br />

der Ausleuchtung zwischen den Mesh-<br />

Kacheln. Abbildung 9 zeigt das Environment-Mapping<br />

in Aktion. Wie im Beispiel<br />

lassen sich <strong>alle</strong> diese Features über ein<br />

objektorientiertes API und deklaratives<br />

XML ansprechen, Open-GL-Programmierung<br />

ist nicht erforderlich. Damit Entwickler<br />

auch die langen Matrizen <strong>für</strong> die<br />

Mesh-Definitionen (Listing 4, Zeilen 5<br />

bis 10) nicht per Hand schreiben müssen,<br />

gibt es zwei Export-Plugins <strong>für</strong> den 3-D-<br />

Editor Blender, die leider beide im Test<br />

mit der aktuellen Blender-2.5-Version<br />

nicht funktionierten.<br />

Mehr Licht als Schatten<br />

Wer sich die jüngere Entwicklung von<br />

HTML ansieht, erblickt mehr Licht als<br />

Schatten: Mit Canvas und SVG, das –<br />

spät genug – nun auch der Internet Explorer<br />

unterstützt, gewinnt die Internet-<br />

Auszeichnungssprache beeindruckende<br />

Möglichkeiten <strong>für</strong> anspruchsvolle Weboberflächen.<br />

Um die Standardkonformität<br />

der Browser steht es bei Canvas und<br />

SVG viel besser als zu Zeiten des Browserkriegs:<br />

Was die aktuell verbreiteten<br />

Browser umsetzen, das folgt so gut wie<br />

immer den Spezifikationen. (mfe) n<br />

Infos<br />

[1] Canvas-Zeichnung von Marius Watz:<br />

[http:// mariuswatz. com/ works/​<br />

abstract01js/ index. html]<br />

[2] Animierte SVG-Zeichnung:<br />

[http:// de. wikibooks. org/ wiki/ Datei:<br />

Trajans‐Column‐lower‐animated. svg]<br />

[3] VML: [http:// de. wikipedia. org/ wiki/​<br />

Vector_Markup_Language]<br />

[4] W3C-Zeitplan <strong>für</strong> HTML 5:<br />

[http:// www. w3. org/ html/ wiki/ FAQs#​<br />

When_will_HTML5_be_done. 3F]<br />

[5] SVG-Support der Browser im Detail: [http://​<br />

www. codedread. com/ svg‐support. php],<br />

Webkit: [http:// www. webkit. org/ projects/​<br />

svg/ status. xml]<br />

[6] Multitouch <strong>für</strong> Javascript:<br />

[http:// dvcs. w3. org/ hg/ webevents/​<br />

raw‐file/ tip/ touchevents. html]<br />

[7] Canvas <strong>für</strong> Internet Explorer 6+:<br />

[http:// code. google. com/ p/​<br />

explorer canvas/],<br />

SVG <strong>für</strong> Internet Explorer 6+:<br />

[http:// code. google. com/ p/ svgweb/]<br />

[8] Canvas-Tutorial:<br />

[http:// www. html5canvastutorials. com]<br />

[9] Canvas-W3C-Standard:<br />

[http:// dev. w3. org/ html5/ spec/ Overview.​<br />

html# the‐canvas‐element]<br />

[10] Tutorials rund um Canvas-Effekte:<br />

[http:// www. html5canvastutorials. com],<br />

[http:// js‐fireworks. appspot. com],<br />

[http:// glimr. rubyforge. org/ cake/<br />

canvas. html]<br />

[11] SVG-Standard:<br />

[http:// www. w3. org/ TR/ SVG11/]<br />

[12] SVG-Einsteiger-Tutorial:<br />

[http:// www. w3schools. com/ svg/]<br />

[13] SVG-Tutorial:<br />

[http:// svg. tutorial. aptico. de]<br />

[14] SMIL: [http:// www. w3. org/ TR/ 2008/​<br />

REC‐SMIL3‐20081201/]<br />

[15] Jquery-SVG-Plugin:<br />

[http:// keith‐wood. name/ svg. html]<br />

[16] Raphaël:<br />

[http://www.raphaeljs.com]<br />

[17] Web GL: [http:// www. khronos. org/ webgl/]<br />

[18] Microsofts Sicherheitsbedenken bei<br />

Web GL: [http:// blogs. technet.​<br />

com/ b/ srd/ archive/ 2011/ 06/ 16/​<br />

webgl‐considered‐harmful. aspx]<br />

[19] Tubagames: [http:// www. tubagames. net]<br />

[20] GLGE: [http:// www. glge. org]<br />

[21] Scene JS: [http:// scenejs. org]<br />

HTML 5 11/2011<br />

Titelthema<br />

www.linux-magazin.de<br />

53<br />

Listing 4: Szenendefinition <strong>für</strong> Abbildung 8<br />

01 <br />

02 <br />

03 <br />

04 <br />

05 1, 1, 1, 1, 1, ‐1, ‐1, 1, ‐1, 1, 1, 1, ‐1, 1,<br />

‐1, ‐1, 1, 1,<br />

06 ‐1, ‐1, ‐1, ‐1, ‐1, 1, ‐1, 1, 1, ‐1, ‐1, ‐1, ‐1,<br />

1, 1, ‐1, 1, ‐1,<br />

07 1, ‐1, ‐1, 1, ‐1, 1, ‐1, ‐1, ‐1, 1, ‐1, 1, ‐1, ‐1,<br />

1, ‐1, ‐1, ‐1,<br />

08 1, 1, ‐1, 1, 1, 1, 1, ‐1, ‐1, 1, 1, 1, 1, ‐1,<br />

1, 1, ‐1, ‐1,<br />

09 1, 1, 1, ‐1, 1, 1, 1, ‐1, 1, ‐1, 1, 1, ‐1, ‐1,<br />

1, 1, ‐1, 1,<br />

10 1, 1, ‐1, 1, ‐1, ‐1, ‐1, ‐1, ‐1, 1, 1, ‐1, ‐1,<br />

‐1, ‐1, ‐1, 1, ‐1<br />

11 <br />

12 <br />

13 <br />

14 <br />

15 <br />

16 <br />

17 <br />

19 <br />

20 <br />

21 <br />

22


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

ACADEMY<br />

LPIC-1<br />

All-in-One Solution<br />

✓<br />

Stellen Sie Ihr <strong>Linux</strong>-Wissen mit<br />

einer Zertifizierung unter Beweis!<br />

✓ Nutzen Sie die volle Flexibilität bei<br />

der Zeiteinteilung Ihrer Schulung!<br />

✓ Holen Sie sich <strong>alle</strong>s, was Sie<br />

benötigen, in einem Paket!<br />

LPIC-1 Komplettpaket* nur € 1.249<br />

*Zertifizierung als „Junior Level <strong>Linux</strong> Professional“<br />

(zzgl. MwSt.)<br />

100% flexibel!<br />

Weitere Infos: academy.linux-magazin.de/solution


In eigener Sache: DELUG-DVD<br />

Knoppix, Fog und „Visionäre“<br />

Einführung 12/2010 11/2011<br />

Software<br />

Auch diesen Monat bekommen die DELUG-Käufer die doppelte Datenmenge zum einfachen Preis: Auf der DVD-9<br />

findet sich die neueste Knoppix-Version, eine Appliance zum Erstellen von Disk-Images übers Netz und Videos<br />

von der Debconf. Dazu gibt’s ein E-Book von O’Reilly und viel frische Software. Markus Feilner<br />

www.linux-magazin.de<br />

57<br />

Inhalt<br />

58 Bitparade<br />

Wer den Überblick über seine Quellen<br />

behalten will, greift zu professionellen<br />

Literaturverwaltungen auf <strong>Linux</strong>.<br />

68 Tooltipps<br />

Komprimierte Dateisysteme mit Cromfs,<br />

der Paketsniffer Justsniffer und par<strong>alle</strong>le<br />

SSH-Sitzungen mit Massh. Mount-<br />

GTK bindet Wechselmedien ein, MP3<br />

Diags analysiert Musiksammlungen und<br />

die Rename Utils benennen Dateien um.<br />

Neben einem normalen <strong>Linux</strong>-<strong>Magazin</strong><br />

ohne Datenträger gibt es die DELUG-Ausgabe<br />

mit Monats-DVD, bei der die Redaktion<br />

den Datenträger nach einem speziellen<br />

Konzept zusammenstellt: In einer Art<br />

modularem System enthält er Programme<br />

und Tools, die in der jeweiligen <strong>Magazin</strong>-<br />

Ausgabe getestet und besprochen wer-<br />

Abbildung 2: Interviews mit Chuck Moore, Guido<br />

van Rossum oder Bjarne Stroustrup und viele<br />

Hintergrundinformationen über die Entstehung von<br />

Programmiersprachen im kostenlosen E-Book von<br />

O’Reilly – nur auf der DELUG-DVD.<br />

den. Zudem gibt es nicht im<br />

Heft abgehandelte Software,<br />

die die Redaktion besonders<br />

empfiehlt, <strong>alle</strong>s gebündelt unter<br />

einer HTML-Oberfläche.<br />

Knoppix 6.7.1<br />

Nach nur einem Monat überrascht<br />

Klaus Knopper mit dem<br />

ersten Update seiner beliebten<br />

Knoppix-Distribution. Die<br />

Ausgabe 6.7.1 (Abbildung 1)<br />

bootet von der ersten Seite der<br />

DVD, bringt <strong>Linux</strong>-Kernel 3.0.4,<br />

Firefox 6.0.2 und Chrome 13.0.<br />

Für die Büroarbeiten ist Libre<br />

Office 3.4.3 enthalten. Wer ein<br />

64-Bit-System hat und mehr als 4 GByte<br />

RAM nutzen will, startet den Debian-<br />

Squeeze-Abkömmling mit dem Cheatcode<br />

»knoppix64« als Kernelparameter<br />

im Bootmenü.<br />

Visionäre und Fog<br />

Wer mit dem Browser auf den Silberling<br />

zugreift, landet im HTML-Menü der<br />

DELUG-DVD. Dort findet er den Eintrag<br />

»Exklusiv«, der ihn zu einem E-Book von<br />

O’Reilly bringt (Abbildung 2). Federico<br />

Biancuzzi und Shane Warden porträtieren<br />

„Visionäre der Programmierung“, die<br />

Schöpfer der wichtigsten Programmiersprachen<br />

der Welt. Detaillierte Informationen<br />

über die Entstehungsgeschichte der<br />

Sprachen und deren Ausgangssituation<br />

sowie eine Interviewsammlung erlauben<br />

einen tiefen Einblick in die Entstehung<br />

von Programmier sprachen. Das O’Reilly-<br />

E-Book kostet 28 Euro, DELUG-Besitzer<br />

lesen es kostenlos.<br />

Die virtuelle Appliance von Fog [1] erlaubt<br />

es, Disk-Images der Betriebssysteme Win-<br />

Abbildung 1: Kernel 3.0.4, Chrome 13, Libre Office 3.4.3: Nur<br />

einen Monat nach Knoppix 6.7 legt Version 6.7.1 ordentlich nach.<br />

dows XP, Vista und 7 live über das Netzwerk<br />

zu erstellen und zu verwalten. Da<strong>für</strong><br />

nutzt die <strong>Linux</strong>-Distribution PXE und<br />

TFTP und vereint in einem PHP-Web-GUI<br />

mehrere Open-Source-Tools unter einer<br />

Oberfläche. Fog kann Images sogar nachträglich<br />

verkleinern, die Hostnamen der<br />

angeschlossenen Clients ändern oder den<br />

entfernten Rechner neu starten.<br />

Software, Videos<br />

Damit nicht genug: Zu Tools zum Titelthema<br />

„Plattformunabhängig Entwickeln“,<br />

der Bitparade und den Tooltipps<br />

gesellen sich auf der DVD auch noch<br />

die Überwachungssuite Monitorix, PDF-<br />

Masher und knapp vier Stunden Videos<br />

von der Debconf 2011 in Banja Luka. Die<br />

Vorträge von Sylvestre Ledru, Andreas<br />

Tille, Guillaume Mazoyer, Tom Marble,<br />

David Bremner und Ben Hutchings liegen<br />

im Ogg-Vorbis-Format auf der DVD. n<br />

Infos<br />

[1] Fog: [http://​www.​fogproject.​org]


Software<br />

www.linux-magazin.de Bitparade 11/2011<br />

58<br />

Vier Literaturverwaltungen <strong>für</strong> Studium und Beruf<br />

Summa cum laude<br />

Die politische Elite Deutschlands hat sich ein merkwürdiges neues Hobby zugelegt: Sie verliert gerne den<br />

Überblick über ihre Quellen. Diese Bitparade stellt vier Literaturverwaltungen vor, die Publikationen, Zitate<br />

und andere Recherche-Ergebnisse managen. Mela Eckenfels<br />

gen das kommerzielle Mendeley und den<br />

Onlinedienst Refworks an. Auf dem Testrechner<br />

werkelte ein aktuelles Ubuntu-<br />

System (11.04 mit Unity als Oberfläche).<br />

Eine seit 2005/​2006 fleißig bestückte<br />

Recherche datenbank kam in den Stresstests<br />

zum Einsatz.<br />

E Jabref<br />

© luxuz::., photocase.com<br />

„Zu dem Thema habe ich doch irgendwo<br />

einen Artikel gelesen, aber wo?“ Dem<br />

Kollegen, der diesen Satz am Mittagstisch<br />

zum aktuellen Bundesligaskandal<br />

beiträgt, verzeiht man die Vergesslichkeit.<br />

Fällt ein solcher oder ähnlicher Satz<br />

<strong>alle</strong>rdings während einer Krisensitzung<br />

zu einer jüngst entdeckten, kniffligen Sicherheitslücke<br />

im Firmenserver, ist das<br />

eher suboptimal.<br />

Noch strengere Maßstäbe gelten bekanntlich<br />

<strong>für</strong> wissenschaftliche Arbeiten. Ein<br />

Forscher, der nicht nachweisen kann, wie<br />

er zu seinen Schlussfolgerungen gelangt,<br />

Literaturverwaltungen<br />

Die Delug-DVD dieses <strong>Linux</strong>-<br />

DELUG-DVD<br />

<strong>Magazin</strong>s enthält die beiden Test kandidaten<br />

Jabref und Zotero. Das zuletzt genannte<br />

Tool ist sowohl als Standalone-Client als<br />

auch als Firefox-Addon auf dem Datenträger<br />

zu finden.<br />

ist keiner. Literatur-, Zitate- und Recherche-Verwaltungen<br />

sind die Windbrecher<br />

im Sturm der Informationen, schützen<br />

vor der eigenen Vergesslichkeit und stellen<br />

den schnellen Zugriff auf Gelesenes<br />

über Schlagworte und fortgeschrittene<br />

Suchfunktionen sicher.<br />

Zudem verwalten sie die eigenen Literaturbestände,<br />

exportieren diese zum<br />

Weiterverarbeiten mit anderen Tools und<br />

geben die gesammelten Titeleinträge als<br />

Literaturverzeichnis in unterschiedlichen<br />

Zitationsstilen aus – passend zu dem<br />

Standard, den der Verlag oder die Hochschule<br />

wünscht. Das Sahnehäubchen ist<br />

die Integration in Textverarbeitungen, um<br />

automatisch Referenzlisten aus der eigenen<br />

Sammlung zu generieren.<br />

Stellvertretend <strong>für</strong> die unzähligen freien<br />

und kommerziellen Werkzeuge auf dem<br />

Markt treten in dieser Folge der Bitparade<br />

die beiden Tools Jabref und Zotero ge-<br />

Der erste Kandidat steht unter der GPL<br />

und ist kostenlos. Als Java-Anwendung<br />

läuft Jabref [1] auf den meisten Betriebssystemen.<br />

Voraussetzung ist lediglich<br />

eine Java-Laufzeitumgebung (JRE)<br />

oder das Java Development Kit (JDK)<br />

von Sun, jetzt Oracle. Laut FAQ von der<br />

Projektseite ist der Einsatz freier Java-<br />

Umgebungen denkbar, aber nicht garantiert.<br />

Alle freien Sun-JRE-Alternativen auf<br />

dem Testrechner jedenfalls funktionierten<br />

mit der getesteten Jabref-Version 2.7 einwandfrei.<br />

Das zum Download angebotene<br />

Java-Archiv führen Anwender auf<br />

ihren <strong>Linux</strong>-Systemen direkt aus: »java<br />

‐jar JabRef‐2.7.jar«.<br />

Die Literaturverwaltung setzt im Hintergrund<br />

auf Bibtex, ein Latex/​Tex-Hilfstool<br />

<strong>für</strong> Literaturverzeichnisse und ‐angaben.<br />

Das offene Format arbeitet auch mit<br />

großen Datenbeständen problemlos zusammen<br />

und hat sich wohl daher im<br />

wissenschaftlichen Umfeld seit Jahren<br />

als Standard etabliert. Anwender, die mit<br />

Bibtex noch nicht vertraut sind, sollten<br />

einen Blick in die deutschsprachige Jabref-Dokumentation<br />

werfen. Alle anderen<br />

dürften das Java-Programm weitgehend<br />

selbsterklärend finden.<br />

Neue Literaturdatenbanken und Einträge<br />

<strong>für</strong> diese erstellt der Anwender bequem<br />

per Mausklick. Hier entscheidet er zunächst,<br />

um welche Publikationsart es


sich handelt. Zur Wahl stehen neben Artikeln<br />

auch Bücher, elektronische Werke,<br />

Konferenzen, Handbücher und sogar Unveröffentlichtes<br />

(Abbildung 1). Je nach<br />

Kategorie sieht das fertige Formular mit<br />

den Detailangaben anders aus.<br />

Ist absehbar, dass eine bestimmte Sorte<br />

oder ein Autor häufiger in der Datenbank<br />

erscheinen, trägt der Nutzer diese über<br />

den Menüpunkt »Verwalten« beziehungsweise<br />

»Manage« fest in die Jabref-Installation<br />

ein. Die neuen Elemente tauchen<br />

anschließend in den entsprechenden<br />

Dropdown-Menüs auf.<br />

Außer den Pflichtangaben im Reiter »Required<br />

Fields« stehen weitere Tabs bereit,<br />

die aus Jabref mehr als eine reine<br />

Bestandsanzeige machen. In das Feld<br />

»Keywords« gehören hilfreiche Schlüsselwörter,<br />

»URL« hilft dabei, Onlinequellen<br />

wiederzufinden, und »Abstract« gibt auch<br />

noch Jahre später einen kurzen Überblick<br />

zum Inhalt des Werks.<br />

Praktisch ist ebenfalls der Tab »Review«,<br />

auf dem Anwender ihre eigenen Gedanken<br />

zu dem Gelesenen festhalten. In den<br />

Programmeinstellungen erweitern sie<br />

diesen um weitere Eingabefelder, beispielsweise<br />

<strong>für</strong> Zitate. Es ist auch möglich,<br />

längere Textteile oder vollständige<br />

Artikel in den Eintragseditor zu kopieren.<br />

Allerdings bläht dies die Bibtex-Dateien<br />

auf Dauer unnötig auf.<br />

Datenstaubsauger<br />

Wer nicht jeden Eintrag von Hand anlegen<br />

möchte, der erreicht über das Menü<br />

»Internet« beispielsweise diverse bibliografische<br />

Dienste wie JSTOR [2] oder<br />

Medline [3]. Von beiden Anbietern kann<br />

Jabref direkt die Metadaten übernehmen<br />

und eigene Einträge generieren. Viele<br />

Webseiten bieten darüber hinaus den<br />

Bibtex-Export einzelner Artikel an. Ein<br />

Tipp am Rande: Bei der Online-Enzyklopädie<br />

Wikipedia befindet sich diese<br />

Funktion etwas versteckt in der linken<br />

Seitenleiste unter »Werkzeuge« und dort<br />

unter »Seite zitieren«.<br />

Am schnellsten geschieht die Aufnahme<br />

neuer Bücher in die Jabref-Datenbank<br />

über Google Books. Dort gibt der Nutzer<br />

den Titel oder den Autor des gesuchten<br />

Werks ein und klickt dann im Bereich<br />

»Export Citation« auf den Bibtex-Eintrag<br />

(siehe Abbildung 2). Dieser enthält die<br />

wichtigsten Metadaten wie etwa Titel,<br />

Autoren oder Publikation und manchmal<br />

sogar Schlagwörter.<br />

Kennen Sie<br />

den schon?<br />

Stefan Semmelroggen baut<br />

schon seit Anfang der 90er<br />

Jahre Netzwerke auf und ist<br />

seit 1995 zur <strong>Linux</strong> Gemeinde<br />

gestoßen. Freiberuflich war er<br />

jahrelang als <strong>Linux</strong>/UNIX-Administrator und<br />

Consultant <strong>für</strong> viele namhafte Unternehmen<br />

tätig und gibt sein Praxiswissen in Schulungen<br />

gerne weiter. Bei Heinlein Support löst er<br />

im CompetenceCall auch schwere Notfälle.<br />

Seine nächsten Kurse:<br />

Hochperformante Webcluster<br />

SUSE Manager<br />

02.11.<br />

Sicherheit <strong>für</strong> <strong>Linux</strong> Server<br />

Disaster Recovery mit ReaR<br />

21.11.<br />

Firewalls mit iptables/fwbuilder<br />

24.10.<br />

30.11.<br />

05.12.<br />

WIR KÖNNEN NOCH MEHR...<br />

PostgreSQL<br />

24.10.<br />

Hochperformante Webcluster<br />

<strong>Linux</strong> Admin Grundlagen<br />

Xen – Virtualisierte Server<br />

SpamAssassin und AMaViS<br />

24.10.<br />

31.10.<br />

31.10.<br />

24.10.<br />

Abbildung 1: Zuerst legen Anwender neue Datenbanken an, danach füllen sie diese mit Einträgen. Jabref<br />

bietet dazu einige Formate in der Vorauswahl an.<br />

http://www.heinlein-support.de/kurse


Software<br />

www.linux-magazin.de Bitparade 11/2011<br />

60<br />

Zwei Wege führen zu einem neuen Datenbankeintrag<br />

via Bibtex. Zeigt ein<br />

Online-Anbieter lediglich den Quelltext<br />

auf der Webseite an, wandert er über<br />

Copy & Paste und den Reiter »Bibtex<br />

source« in die Datenbank. Steht im Netz<br />

<strong>alle</strong>rdings eine Datei mit der Endung<br />

».bib« oder ».bibtex« zur Verfügung, hilft<br />

»Datei« | »Importieren« weiter. Im Importdialog<br />

entscheidet der Nutzer, ob er<br />

den Eintrag zu einer bestehenden Datenbank<br />

hinzufügen oder eine neue anlegen<br />

möchte. Enthält eine zum Import vorgesehene<br />

Datei mehr als einen Bibtex-<br />

Eintrag, erkennt Jabref dies.<br />

Bei den wenigen Literaturverwaltungen,<br />

die auf einen Bibtex-Export verzichten,<br />

aber Metadaten in einer halbwegs strukturierten<br />

Form darstellen (beispielsweise<br />

Worldcat [4]), erspart die Funktion<br />

»Neuer Eintrag aus Klartext« das lästige<br />

Kopieren einzelner Strings und die Zuordnung<br />

zu den richtigen Feldern. Der<br />

Anwender fügt die kompletten Metadaten<br />

zunächst in das da<strong>für</strong> vorgesehene Feld.<br />

Dann markiert er den Namen des Autors<br />

und ordnet ihm den Key »Author« zu.<br />

Den Vorgang wiederholt er <strong>für</strong> <strong>alle</strong> anderen<br />

Elemente und bestimmt so den Titel,<br />

das Erscheinungsjahr und so weiter.<br />

Datengärtnerei<br />

Jabrefs Suchfunktionen sind einem guten<br />

Unix-Werkzeug angemessen. Eine direkte<br />

Suche springt jeweils den nächsten Ein-<br />

Abbildung 3: Zotero bietet eine große Auswahl fertiger Kategorien. Außer oft genutzten Formaten <strong>für</strong><br />

Bücher und Artikel sind auch Exoten wie Gesetzentwurf oder Wörterbucheintrag dabei.<br />

trag an, der die gesuchte Zeichenkette<br />

enthält. Zusätzlich fahnden Anwender<br />

nach ganzen Wörtern, mit booleschen<br />

Operatoren und regulären Ausdrücken.<br />

Ein Klick auf das Lupensymbol blendet<br />

die Suchfunktion ein und aus.<br />

Abbildung 2: Jabref importiert Bibtex-Dateien von Wikipedia, Google Books und anderen Anbietern. Vor dem<br />

tatsächlichen Import überprüft der Anwender die Metadaten in einem Dialogfenster.<br />

Der Weg der Jabref-Daten in verschiedene<br />

Textverarbeitungen ist mitunter mit<br />

Umwegen verbunden. Eine Aufnahme<br />

der Bibtex-Dateien in MS Word ist dank<br />

des externen Helfers Bibtex4Word keine<br />

große Herausforderung. Anders sieht es<br />

mit dem auf der Homepage angebotenen<br />

Open-Office-Plugin aus. Damit sich die<br />

Literaturverwaltung mit der Officesuite<br />

unterhält, benötigt sie eine Style-Datei.<br />

Wer unter den sechs angebotenen Zitierstilen<br />

nicht fündig wird, muss selbst<br />

Hand anlegen und sich sowohl mit dem<br />

Format der Jabref-Style-Dateien als auch<br />

mit den Anforderungen des Zitierstils<br />

auseinandersetzen.<br />

Mit einer passenden Style-Datei bewaffnet,<br />

verbindet der Nutzer Jabref und<br />

Open beziehungsweise Libre Office über<br />

das Icon mit dem Stecker und fügt die<br />

Referenz über das Feld »Cite« oder »Cite<br />

in‐text« ein. Zudem ist Jabref in der Lage,<br />

automatisch eine Bibliografie am Ende<br />

des Textes zu erstellen. Dazu aktiviert<br />

der Anwender in den Programmeinstellungen<br />

die Funktion »Automatically sync<br />

bibliography when inserting citations«.


Im Test mit Libre Office hakte es hier des<br />

Öfteren, da Style-Datei und Absatzformat<br />

des Dokuments offenbar nicht miteinander<br />

harmonierten.<br />

Wer die liebevoll gehegte und gepflegte<br />

Jabref-Datenbank auf mehr als einem<br />

Rechner nutzen möchte, der greift am<br />

besten zu Unix-Bordmitteln wie Rsync<br />

oder Unison. Eine eigene Funktion zur<br />

Synchronisation fehlt der Literaturverwaltung<br />

ebenso wie moderne Kollaborationstools.<br />

Der gemeinsame Zugriff über<br />

ein NAS oder ein Netzlaufwerk ist aber<br />

kein großes Problem. Felder wie »Timestamp«<br />

und »Owner« machen Änderungen<br />

nachvollziehbar.<br />

E Zotero<br />

Der zweite Testkandidat entsteht am Roy<br />

Rosenzweig Center for History and New<br />

Media der George Mason University in<br />

Fairfax. Zotero [5] ist unter der AGPLv3<br />

veröffentlicht und ebenfalls kostenlos<br />

erhältlich. Bis Ende des letzten Jahres<br />

waren Zotero-Anwender gezwungen,<br />

Firefox zu nutzen, denn das Tool war<br />

ein reines Browser-Addon. Seit Januar<br />

2011 existiert ein Standalone-Client. Dieser<br />

basiert auf dem Mozilla Application<br />

Framework und bietet Konnektoren <strong>für</strong><br />

Chrome und Safari; andere Browser folgen<br />

möglicherweise. Im Test trat Zotero<br />

3.0b2.1 Beta an.<br />

Zusätzlich stellt der Hersteller eine eigene<br />

Storagelösung zur Verfügung. Die ersten<br />

100 MByte sind kostenlos, danach folgt<br />

eine Staffelung von 1 GByte Speicherplatz<br />

(20 US-Dollar pro Jahr), über 5 GByte<br />

(60 US-Dollar) und 10 GByte (100 US-<br />

Dollar) bis 25 GByte (240 US-Dollar).<br />

Anwender müssen dieses Angebot jedoch<br />

nicht annehmen – Zotero nutzt alternativ<br />

<strong>für</strong> die Synchronisation jeden Webdavfähigen<br />

Server.<br />

Das Browser-Addon (aktuell zur Drucklegung:<br />

2.1.8) nistet sich in der Firefox-<br />

Fußzeile ein und öffnet nach einem<br />

Mausklick das Zotero-Fenster. Es schiebt<br />

sich über die untere Hälfte des Browserfensters<br />

und bleibt selbst beim Tabwechsel<br />

im Vordergrund. So halbiert sich der<br />

sichtbare Bereich geöffneter Webseiten<br />

bei jedem Zotero-Einsatz, was bei längeren<br />

Arbeitssitzungen oder kleinen Displays<br />

durchaus <strong>für</strong> Frust sorgt.<br />

Als Alternative empfiehlt sich der Standalone-Client,<br />

er blockiert nicht länger das<br />

Browserfenster. Eine Betaversion steht<br />

als Tar.gz-Archiv zum Download bereit.<br />

Nach dem Auspacken ist die Anwendung<br />

unter <strong>Linux</strong> ohne Installation lauffähig,<br />

Nutzer starten den Client direkt aus dem<br />

Verzeichnis mit den Quellen.<br />

Im Großen und Ganzen zeigte sich die Betaversion<br />

recht ausgereift im Test, vertrug<br />

sich aber nicht mit der stabilen Variante<br />

des Addon. Solange der Standalone-Client<br />

läuft, können Nutzer aus Firefox heraus<br />

nicht auf Zotero-Funktionen zugreifen.<br />

Ein mutiges Update auf die Betaversion<br />

der Browser-Erweiterung schafft Abhilfe,<br />

Bitparade 11/2011<br />

Software<br />

www.linux-magazin.de<br />

61<br />

www.android–user.de


Software<br />

www.linux-magazin.de Bitparade 11/2011<br />

62<br />

denn sie wechselt automatisch in den<br />

Konnektormodus, wenn das eigenständige<br />

Programm läuft.<br />

Vor der eigentlichen Arbeit mit Zotero ist<br />

ein Besuch in den Einstellungen Pflicht.<br />

Im Bereich »Erweitert« empfiehlt sich unbedingt<br />

die Auswahl eines Speicherorts<br />

<strong>für</strong> die Datenbank. In der Voreinstellung<br />

landet diese im Firefox-Konfigurationsverzeichnis.<br />

Der eigene Datenbestand<br />

wächst schnell auf mehrere GByte an<br />

und so ist die Auslagerung – eventuell<br />

sogar auf eine eigene Datenpartition –<br />

sinnvoll. Im Einrichtungsdialog sollten<br />

sich Anwender weiterhin in den Bereich<br />

<strong>für</strong> die Suchfunktion begeben und die<br />

Hilfstools zur Indizierung von PDFs einstellen.<br />

Mehr als ein Klick ist zur Installation<br />

aber nicht nötig.<br />

Die liebe Ordnung<br />

Was bei Jabref Gruppen sind, nennt Zotero<br />

Sammlungen. Diese tauchen in der<br />

linken Spalte als hierarchische Ordnerstruktur<br />

auf. In der Mitte zeigt das Tool<br />

den Inhalt der ausgewählten Sammlung<br />

oder einen Überblick über <strong>alle</strong> Einträge<br />

an und rechts befindet sich der Eintragseditor.<br />

Ein neues Werk wandert beispiels-<br />

Abbildung 5: Mendeley oder Zotero? Nein, Mendeley und Zotero! Mendeley kann auf bestehende Zotero-<br />

Datenbanken zugreifen und integriert auch später hinzugefügte Daten vollautomatisch.<br />

Handarbeit ist unter Zotero weitgehend<br />

unnötig. Da<strong>für</strong> sorgen viele Helfer und<br />

Import-Tools. Im Firefox-Addon befindet<br />

sich rechts neben dem grünen Pluszeichen<br />

ein blaues Symbol, das wie ein<br />

Brief aussieht. Dahinter verbirgt sich die<br />

Snapshotfunktion, die Zotero zum Werkzeug<br />

der Wahl <strong>für</strong> <strong>alle</strong> macht, die hauptsächlich<br />

online recherchieren.<br />

Ein Klick auf das Icon erstellt einen<br />

vollständigen HTML-Snapshot der aktuell<br />

geöffneten Webseite inklusive <strong>alle</strong>r<br />

eingebundener Bilder. Titel und URL generiert<br />

die Literaturverwaltung automatisch.<br />

Weitere HTML-Metainformationen<br />

liest das Tool derzeit nicht aus. So muss<br />

der Nutzer <strong>für</strong> die Autorenangaben oder<br />

die Schlüsselwörter selbst Hand anlegen.<br />

Letzteres ist bei SEO-Keywordgewittern<br />

nicht unbedingt ein Nachteil.<br />

Der Standalone-Client stellt das Feature<br />

über die Kontextmenüs der Browser zur<br />

Verfügung. Voraussetzung ist <strong>alle</strong>rdings,<br />

dass die entsprechenden Konnektoren<br />

vorhanden sind und im Firefox das 3.xweise<br />

über das grüne Icon mit dem Pluszeichen<br />

in die Datenbank. Im Vergleich<br />

zu Jabref, das nur die klassischen Typen<br />

aus Studium und Forschung anbietet, hat<br />

Zotero unter »Mehr« zahlreiche Einträge<br />

im Angebot, die sich an eine multimedial<br />

recherchierende Nutzergemeinde wenden<br />

(Abbildung 3).<br />

Je nach Kategorie variieren die Felder<br />

im Eintragseditor. Hier zeigt Zotero sich<br />

flexibel und wesentlich vollständiger als<br />

Jabref. Was dem Buch sein ISBN-Feld<br />

ist, ist dem Artikel die Information zur<br />

ISSN. Ein Klick auf eine graue Fläche<br />

rechts neben einem Feldtitel öffnet die<br />

entsprechende Eingabezeile. Wandert<br />

der Anwender zum nächsten Feld weiter,<br />

schließt sich die zuvor bearbeitete Zeile<br />

und Zotero speichert den Inhalt automatisch.<br />

Die Änderung einer Kategorie über<br />

die Schaltfläche »Eintragsart« ist zwar<br />

möglich, aber es kann passieren, dass<br />

Zotero den Inhalt bereits ausgefüllter,<br />

aber nicht mehr zum neuen Eintragstyp<br />

passender Felder verliert.<br />

Der Reiter »Notizen« des Eintragseditors<br />

entspricht in etwa dem Reiter »Review«<br />

in Jabref, Schlüsselwörter haben in Zotero<br />

einen eigenen Tab. Darüber hinaus<br />

punktet dieser Testkandidat mit dem Reiter<br />

»Zugehörig«. Dieser erlaubt es dem<br />

Anwender, Querverweise zwischen Einträgen<br />

zu schaffen.<br />

Einfuhrkontrolle<br />

Abbildung 4: Die Zotero-Plugins spielen sehr gut mit den großen Officesuiten zusammen. Die Literaturverwaltung<br />

kennt fast 1700 Zitierstile.


Beta-Addon installiert ist. Die erwähnten<br />

Konnektoren befinden sich im Downloadbereich<br />

der Zotero-Webseite.<br />

Die Suche nach Metadaten mit Hilfe von<br />

Google Books und anderen Diensten ist<br />

dank des Zauberstab-Icons überflüssig.<br />

Über den Worldcat-Service importiert<br />

Zotero Metadaten anhand einer ISBN,<br />

einer DOI (Digital Object Identifier, eine<br />

Art ISBN <strong>für</strong> wissenschaftliche Fachartikel)<br />

oder einer PMID (Pubmed ID, eine<br />

ISBN <strong>für</strong> wissenschaftliche Fachartikel<br />

aus dem Medizinbereich).<br />

Bitparade 11/2011<br />

Software<br />

www.linux-magazin.de<br />

63<br />

Gut verteilt<br />

Zotero importiert zwölf verschiedene Formate.<br />

Die Literaturverwaltung unterstützt<br />

neben Bibtex auch das ebenfalls verbreitete<br />

RIS-Format (Research Info Systems)<br />

oder das aus den 70er Jahren stammende<br />

MARC-Fossil der Library of Congress (Machine<br />

Readable Cataloging). Die Angaben<br />

wandern per Datei oder direkt aus der<br />

Zwischenablage in die Datenbank.<br />

Abbildung 6: Nimmt Mendeley eine neue PDF-Datei auf, weist es auf unvollständige Informationen hin und<br />

gibt die Möglichkeit nachzubessern. Gerade bei Umlauten und Sonderzeichen sind oft Korrekturen nötig.<br />

Im Hintergrund verwaltet SQLite die Informationen.<br />

Außerdem existiert ein spezielles<br />

Verzeichnis (»storage«), in dem<br />

Snapshots und eingebundene Dateien in<br />

ihren Ursprungsformaten liegen. Die Ordnerstruktur<br />

ist <strong>alle</strong>rdings so undurchsich-<br />

Alles zum ThemA Android<br />

Die Monatszeitschrift <strong>für</strong> Android-Fans, Smartphone-und Tablet Nutzer<br />

Neu!<br />

Kennenlernangebot:<br />

3 AusgAben<br />

<strong>für</strong> nur 3 euro<br />

Jetzt bestellen unter:<br />

www.android–user.de/miniabo<br />

Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de


Software<br />

www.linux-magazin.de Bitparade 11/2011<br />

64<br />

Der nächste Testkandidat ist nichts <strong>für</strong><br />

Anwender, die ihre Daten gerne ausschließlich<br />

auf dem eigenen Rechner vortig,<br />

dass eine Suche über das Dateisystem<br />

wenig bis keinen Sinn ergibt. Auch Liebhaber<br />

regulärer Ausdrücke kommen bei<br />

Zotero nicht auf ihre Kosten. Dennoch ist<br />

die mitgelieferte Suchfunktion durchaus<br />

mächtig. Eine Schnellsuche ist über das<br />

Eingabefeld in der Menüzeile erreichbar<br />

und fahndet in <strong>alle</strong>n Bereichen, also in<br />

Feldern und Datei-Anhängen. Zusätzlich<br />

öffnet ein Klick auf die Lupe eine komplexe<br />

Suchleiste, in der Anwender Bedingungen<br />

definieren und Suchausdrücke<br />

abspeichern können.<br />

Weit unproblematisch als bei Jabref gestaltet<br />

sich die Integration von Zotero in<br />

die großen Office-Anwendungen. Plugins<br />

<strong>für</strong> MS Word, Open, Neo und Libre Office<br />

stehen samt ausführlicher Anleitung auf<br />

der Projektseite bereit. Der Standalone-<br />

Client installiert die Erweiterungen selbstständig;<br />

Nutzer des Firefox-Addon rüsten<br />

von Hand nach. Nach dem Neustart des<br />

Browsers und der Office-Anwendung bietet<br />

eine neue Werkzeugleiste verschiedene<br />

Zotero-Funktionen an.<br />

Sobald der Anwender auf »Zitat einfügen«<br />

klickt, öffnet sich eine Liste vorinstallierter<br />

Stile, aus der er den passenden<br />

auswählt. Ist die gewünschte Zitierweise<br />

nicht dabei, hilft möglichweise ein Blick<br />

auf die Zotero-Webseite weiter. Dort stehen<br />

fast 1700 unterschiedliche Zitierstile<br />

zum Download. Im Zitate-Editor nimmt<br />

der Nutzer weitere Einstellungen oder<br />

schnelle Korrekturen vor. Jedes ins Office-Dokument<br />

eingefügte Zitat landet<br />

automatisch auch in der Bibliografie am<br />

Ende des Textes (Abbildung 4).<br />

Zotero synchronisiert wahlweise nur die<br />

Metadaten oder die Anhänge gleich mit.<br />

Danach greifen Anwender von jedem anderen<br />

Rechner aus darauf zu, auch ohne<br />

eine Zotero-Installation zur Hand zu<br />

haben. Die Zotero-Cloud ermöglicht außerdem<br />

einen Sync zwischen mehreren<br />

Computern. Wer die Anhänge ebenfalls<br />

abgleichen möchte, der sollte einen Webdav-fähigen<br />

Server haben oder eben das<br />

kostenpflichtige Zotero-Storageangebot<br />

nutzen. Anwender mit solchen Accounts<br />

können ihre Daten mit anderen Nutzern<br />

eines Onlinezugangs teilen. Dazu erstellen<br />

sie im Webinterface eine Gruppe, zu<br />

der sie weitere Mitarbeiter einladen.<br />

E Mendeley<br />

halten. Mendeley [6] ist ein Desktoptool<br />

mit Online-Erweiterung. Das unter einer<br />

eigenen Lizenz veröffentlichte Qt-Programm<br />

versucht den Nutzer schon beim<br />

ersten Download zu überreden, einen<br />

Account auf dem Server des Anbieters<br />

anzulegen. Überspringt er diesen Schritt,<br />

geht es spätestens nach dem ersten Programmstart<br />

ohne einen solchen Account<br />

nicht mehr weiter.<br />

In der kostenlosen Basisvariante steht<br />

1 GByte Webspace zur Verfügung, 500<br />

MByte <strong>für</strong> persönliche Daten und 500<br />

MByte <strong>für</strong> gemeinsam genutzte Daten.<br />

Der Speicherplatz und die Zahl privater<br />

Arbeitsgruppen (maximal fünf im kostenlosen<br />

Account) kann der Anwender<br />

staffelweise erhöhen. Für rund 5 Euro<br />

monatlich gibt es 7 GByte Speicher und<br />

zehn Arbeitsgruppen, <strong>für</strong> zirka 10 Euro<br />

15 GByte und 25 Gruppen. Wer mehr<br />

Platz benötigt, kann beim Hersteller ein<br />

Angebot anfordern.<br />

Im Downloadbereich warten Pakete <strong>für</strong><br />

verschiedene <strong>Linux</strong>-Systeme, <strong>für</strong> Mac OS<br />

X und diverse Windows-Generationen.<br />

Darüber hinaus bietet der Hersteller eine<br />

App <strong>für</strong> iPhones, iPads und iPods an. Im<br />

Test trat Version 1.0.1 an.<br />

Kollegial<br />

Abbildung 7: Auch was den Import anderer Formate angeht, hat der reine Onlinedienst die Nase vorn. Refworks<br />

stellt eine überwältigende Anzahl von Filtern zur Verfügung und versteht auch exotische Formate.<br />

Mendeley wirkt auf den ersten Blick<br />

wie ein Zotero-Ableger, den bessere Interfacedesigner<br />

hier und da etwas aufgehübscht<br />

haben. Sogar die Aufteilung<br />

des Hauptfensters ähnelt dem vorherigen<br />

Testkandidaten, ebenso das Ordner- und<br />

Gruppenschema. Die Übereinstimmung<br />

geht noch weiter: Mendeley kann Zotero-Datenbanken<br />

integrieren, sodass Anwender<br />

sich nicht <strong>für</strong> eines der beiden<br />

Tools entscheiden müssen, sondern die<br />

Datenbestände abgleichen können (siehe<br />

Abbildung 5).<br />

Neue Einträge wandern über »Add Documents«<br />

in die Datenbank. Hinter diesem<br />

Menüpunkt verbergen sich Funktionen,<br />

die verschiedene Dateiformate oder <strong>alle</strong><br />

Dateien innerhalb eines Ordners importieren,<br />

sowie eine Option, um manuelle<br />

Einträge hinzuzufügen. Bei der Anzahl an<br />

Kategorien hat Zotero gegenüber diesem<br />

Kandidaten leicht die Nase vorn. Da<strong>für</strong><br />

bietet Mendeley DOI- und PMID-Felder<br />

im Eintragseditor und verknüpft diese mit<br />

einer Lookup-Funktion <strong>für</strong> Metadaten.


ISBNs müssen leider draußen bleiben,<br />

zwar ist ein Feld da<strong>für</strong> vorgesehen, aber<br />

es besitzt keine Importfunktion.<br />

Dateien im Bibtex- oder RIS-Format erkennt<br />

Mendeley und importiert den Inhalt<br />

komplett und ohne Nachfrage. Aus<br />

PDFs versucht die Anwendung Metadaten<br />

so weit wie möglich anhand der Dokument-Auszeichnung<br />

zu extrahieren. Alle<br />

anderen Formate nimmt das Programm<br />

ohne zu murren in die Datenbank auf,<br />

überlässt die Eingabe der zugehörigen<br />

Metadaten aber ganz dem User. Im Zweifelsfall<br />

fragt die Literaturverwaltung nach<br />

und gibt dem Nutzer die Möglichkeit<br />

nachzuarbeiten (Abbildung 6).<br />

Datenpflege<br />

Insbesondere bei PDF-Dateien entfaltet<br />

dieser Testkandidat seine ganze Stärke.<br />

Der integrierte Betrachter ist exzellent<br />

und verfügt über Markierungs- und Notizwerkzeuge.<br />

Schwächen offenbaren<br />

sich hingegen bei der Suche. Zwar ist<br />

es möglich, nach bestimmten Feldern zu<br />

suchen, aber fortgeschrittene Funktionen<br />

sind nicht implementiert und sogar boolesche<br />

Logik ist nicht verfügbar. Außerdem<br />

sind die vorhandenen Features in<br />

diesem Bereich nirgends dokumentiert<br />

und erschließen sich nur dem Anwender,<br />

der gerne probiert und testet.<br />

Bei den Office-Plugins hat sich Mendeley<br />

beim Zotero-Code bedient, so verwundert<br />

es nicht, dass die Integration in gängige<br />

Textverarbeitungen genauso zuverlässig<br />

funktioniert. Lediglich der Mendeley-<br />

Zitatstil-Verwalter hat leicht die Nase<br />

vorn – neue Stile sind komfortabler zu<br />

installieren.<br />

Nach dem Einspielen der Erweiterung<br />

und dem Neustart der Bürosuite erscheint<br />

eine ähnliche Menüleiste wie beim freien<br />

Konkurrenten. Zu Schwierigkeiten kann<br />

es nur kommen, wenn beide Literaturverwaltungen<br />

ihre Plugins auf die Textverarbeitungen<br />

loslassen. Dann empfiehlt<br />

sich vor der Nutzung in Mendeley, die<br />

Zotero-Plugins zu deaktivieren.<br />

Der Austausch der Mendeley-Datenbank<br />

zwischen zwei Rechnern findet immer<br />

über den Account des Anbieters statt,<br />

und da heißt es ab einer Datenmenge<br />

von 1 GByte – zahlen. Genau wie bei<br />

Zotero (wo der Onlinespeicher optional<br />

und Mitarbeiter einladen, die dann <strong>alle</strong>rdings<br />

ebenfalls einen Mendeley-Account<br />

benötigen.<br />

E Refworks<br />

Cloud oder nicht – diese Frage stellt sich<br />

beim letzten Kandidaten gar nicht erst.<br />

Mit dem kommerziellen Tool Refworks<br />

[7] arbeiten Nutzer ausschließlich über<br />

eine ASP-Weboberfläche, die auch <strong>für</strong><br />

den Zugriff mit Smartphones optimiert<br />

ist. Auch beim Preis macht der Anbieter<br />

aus Michigan keine halben Sachen. Ein<br />

Refworks-Zugang schlägt mit 100 US-<br />

Dollar pro Jahr zu Buche. Staffel-, Monats-<br />

oder Speicherpreise gibt es nicht.<br />

Zum Testen bietet der Hersteller einen<br />

30-tägigen Probezugang an.<br />

Privatpersonen dürfte der Preis eher selten<br />

einen zweiten Gedanken wert sein.<br />

Refworks erzielt seinen Hauptumsatz<br />

durch Campus- oder Institutslizenzen.<br />

Ob in Yale oder am MIT, in Münster oder<br />

Dresden – über den Proxy der örtlichen<br />

Universitätsbibliothek ist ein kostenfreier<br />

Zugriff auf Refworks dank solcher Lizenzen<br />

möglich.<br />

Als technische Voraussetzungen nennt<br />

Refworks tatsächlich immer noch Netscape<br />

6 und stellt damit selbst den<br />

zerstreutesten Professor zufrieden, der<br />

nicht von Windows 95 ablassen mag.<br />

Den Dienst gibt es in den Geschmacksrichtungen<br />

Refworks Classic <strong>für</strong> ältere<br />

Browser und Refworks 2.0 <strong>für</strong> modernere<br />

Systeme. Zusätzlich steht mit Refmobile<br />

eine <strong>für</strong> mobile Geräte optimierte<br />

Variante des Dienstes bereit.<br />

Nach dem ersten Login findet der Anwender<br />

die vertraute Ordnerstruktur vor.<br />

Über den Button »Neue Referenz« öffnet<br />

er die Eingabemaske <strong>für</strong> einen neuen<br />

Eintrag und steht vor der Qual der Wahl<br />

(Abbildung 8). Nicht nur, dass Refworks<br />

mehr Typen als die anderen Kandidaten<br />

kennt, in zahlreichen Eingabefeldern<br />

können die Nutzer jedes noch so kleine<br />

Detail zu einer Quelle notieren. Es bietet<br />

sich daher an, die Felder durch die<br />

Wahl eines Zitatformats einzuschränken<br />

und auf eine überschaubare Anzahl zu<br />

reduzieren. Manuelle Einträge dürften<br />

aber auch hier die absolute Ausnahme<br />

darstellen.<br />

Viele Wissensdatenbanken bieten praktischerweise<br />

einen direkten Export nach<br />

ist) können Anwender Gruppen bilden<br />

NETWAYS ®<br />

MAGAZIN


Software<br />

www.linux-magazin.de Bitparade 11/2011<br />

66<br />

Refworks an. Dessen Importfunktion versteht<br />

die meisten bekannten bibliografischen<br />

Formate (Abbildung 7).<br />

Ein nützlicher Helfer kommt zudem<br />

in Form eines Browser-Addon namens<br />

Refgrab-It [8]. Es findet selbstständig<br />

bibliografische Daten auf geöffneten<br />

Webseiten, sucht also beispielsweise<br />

nach ISBN-Nummern, Pubmed-IDs oder<br />

DOIs und importiert diese. Refgrab-It<br />

kontaktiert außerdem automatisch andere<br />

Datenquellen, um weiterführende<br />

Informationen abzufragen. Welche externen<br />

Quellen das Tool dazu befragt<br />

und auch die gefundenen Angaben zeigt<br />

eine eigene Seite an, die das Addon temporär<br />

generiert.<br />

Mit halber Kraft?<br />

Wie Zotero und Mendeley kann Refworks<br />

bibliografischen Einträgen Datei-Anhänge<br />

beifügen – <strong>alle</strong>rdings nur im Rahmen von<br />

Campuslizenzen. Einzelkunden steht das<br />

Feature nicht zur Verfügung. Alle anderen<br />

sollten sich dennoch nach den verfügbaren<br />

Limits erkundigen. Eine Datei<br />

darf nicht größer als 20 MByte sein und<br />

insgesamt sind normalerweise nur 100<br />

MByte erlaubt. Das Gleiche gilt <strong>für</strong> das<br />

Feature »Teilen«. Nur über ihre Hochschule<br />

angebundene Anwender dürfen<br />

ihre Quellen mit anderen Refworks-Kunden<br />

gemeinsam nutzen.<br />

Was die Suchfunktion betrifft, ähnelt<br />

Refworks dem zweiten Testkandidaten.<br />

Eine Schnellsuche arbeitet wie bei<br />

Zotero ohne Filter über den gesamten<br />

Inhalt der Benutzerdatenbank. Die<br />

Fahndung in Datei-Anhängen kann der<br />

Anwender über einen Extraschalter neben<br />

dem Suchfeld ausschließen. Eine<br />

erweiterte Suchfunktion mit Filtern,<br />

booleschen Operatoren und Speichermöglichkeiten<br />

zur späteren Verwendung<br />

ist ebenfalls dabei.<br />

Die Refworks-Erweiterung Write-N-Cite,<br />

die auf der Projekthomepage zum Download<br />

bereitsteht, schließt <strong>Linux</strong>-Nutzer<br />

kaltlächelnd aus. Bislang kommen nur<br />

Mac-OS-X- und Windows-Anwender in<br />

den Genuss dieser Automatismen – <strong>Linux</strong>ern<br />

bleibt das gute alte Copy & Paste,<br />

um einzelne Zitate zur Sammlung hinzuzufügen.<br />

Die Funktion zum automatischen Zusammenstellen<br />

von Bibliografien funktioniert<br />

jedoch <strong>für</strong> <strong>alle</strong> Betriebssysteme<br />

gleichermaßen. Sie wandelt <strong>alle</strong> in einem<br />

Ordner befindlichen oder als Favoriten<br />

markierten Referenzen in HTML-, RTF-,<br />

Office- oder Textdokumente um.<br />

Fazit: Bunte Vielfalt<br />

Jabref ist schnell und flexibel und eignet<br />

sich vor <strong>alle</strong>m <strong>für</strong> Anwender, die sich weder<br />

an einen Browser noch an ein kommerzielles<br />

Programm binden wollen. Eine<br />

Snapshotfunktion sucht man hier vergeblich,<br />

denn Jabref spricht eher Nutzer an,<br />

die es schlicht mögen oder die ihre Texte<br />

sowieso in Latex verfassen.<br />

Zotero und Mendeley ähneln sich sehr.<br />

Zotero ist ein modernes Werkzeug <strong>für</strong><br />

den multimedialen Anwender, der sowohl<br />

<strong>alle</strong>ine als auch im Team arbeitet.<br />

Auch große Datenbanken sind <strong>für</strong> diese<br />

Literaturverwaltung kein Problem. Mendeley<br />

richtet sich hingegen an <strong>alle</strong>, die<br />

zusätzlich kommerziellen Support benötigen<br />

und oft mit PDFs arbeiten.<br />

Refworks ist ein wunderbares Tool <strong>für</strong><br />

den Bildungsbereich und vor <strong>alle</strong>m <strong>für</strong><br />

Studenten und Angestellte von Hochschulen<br />

gedacht, die über ihre Institute<br />

angebunden sind. Kommen exotische Import-,<br />

Export- oder Zitatformate ins Spiel,<br />

ist Refworks ebenfalls das Mittel der<br />

Wahl. Wegen fehlender Datei-Anhänge<br />

ist dieser Kandidat aber nicht besonders<br />

geeignet eine langfristige Wissensverwaltung<br />

auf die Beine zu stellen.<br />

Wer sich nicht festlegen kann oder mag,<br />

der findet im Web Ideen, wie er zwei<br />

(oder mehr) Testkandidaten miteinander<br />

verknüpft und das Beste aus <strong>alle</strong>n Welten<br />

genießt ([9], [10]). (hej)<br />

n<br />

Abbildung 8: Bei den Kategorien <strong>für</strong> die Einträge hängt Refworks die drei anderen Testkandidaten ab. Keiner<br />

der Konkurrenten hat so viele Eintragstypen im Angebot.<br />

Infos<br />

[1] Jabref: [http:// jabref. sourceforge. net]<br />

[2] JSTOR: [http:// www.jstor.org]<br />

[3] Pubmed/Medline-Datenbank:<br />

[http:// www.ncbi.nlm.nih.gov/ pubmed]<br />

[4] Worldcat: [http:// www. worldcat. org]<br />

[5] Zotero: [http:// www. zotero. org]<br />

[6] Mendeley: [http:// www. mendeley. com]<br />

[7] Refworks: [http:// refworks. com]<br />

[8] Refgrab-It <strong>für</strong> verschiedene Browser:<br />

[http:// www. refworks. com/ refgrabit/​<br />

linkpage. aspx]<br />

[9] Zotero und Jabref im Team:<br />

[http:// the‐moni‐blog. blogspot. com/ 2009/ 11/<br />

zotero‐and‐jabref‐how‐to‐make‐both‐work. html]<br />

[10]Mendeley-Zotero-Integration: [http:// www.​<br />

mendeley. com/ faq/ # import‐from‐zotero]


FÜR ÜBERBLICKER<br />

5. Secure <strong>Linux</strong> Administration Conference am 1./2. Dezember<br />

Zur Sicherheit behält ein Erdmännchen stets den Überblick.<br />

<strong>Linux</strong>-Spezialist Peer Heinlein lädt ein zur 5. Secure <strong>Linux</strong><br />

Administration Conference (SLAC) am 1. und 2. Dezember<br />

2011 in Berlin: 18 ausführliche Vorträge, zwei Tracks, zwei Tage;<br />

plus Sondertag „Rechtsfragen <strong>für</strong> Administratoren“.<br />

Die Highlights:<br />

DAS SOLLTEN SIE NICHT VERPASSEN.<br />

Hochkarätig besetzte Fachkonferenz<br />

Ergänzungstag „Rechtsfragen <strong>für</strong> Admins“<br />

Call-for-Papers läuft<br />

Jetzt anmelden:<br />

http://www.heinlein-support.de/slac<br />

Mit freundlicher Unterstützung von<br />

MAGAZIN<br />

NFS4<br />

DNSsec<br />

Puppet<br />

IT-Kriminalität<br />

Samba4<br />

Cluster<br />

+ Sondertag „Rechtsfragen <strong>für</strong> Admins“<br />

Das Know-how-Update <strong>für</strong> Administratoren und IT-Leiter.


Software<br />

www.linux-magazin.de Tooltipps 11/2011<br />

68<br />

Werkzeuge im Kurztest<br />

Tooltipps<br />

Cromfs 1.5.10<br />

Komprimiertes Read-only-Dateisystem<br />

Quelle: [http:// bisqwit. iki. fi/ source/ cromfs.​<br />

html]<br />

Lizenz: GPLv3<br />

Alternativen: Squashfs, Cramfs<br />

Justniffer 0.5.9<br />

Kompakter Paketsniffer<br />

Quelle: [http:// justniffer. sourceforge. net]<br />

Lizenz: GPLv3<br />

Alternativen: Wireshark, Etherdump<br />

Massh 2.0.57<br />

Par<strong>alle</strong>le SSH-Sitzungen<br />

Quelle: [http:// m. a. tt/ er/ massh]<br />

Lizenz: GPLv3<br />

Alternativen: Clusterssh, Pssh<br />

Mit Cromfs erzeugen Anwender aus einem<br />

Verzeichnis ein komprimiertes Image<br />

und hängen es ins Dateisystem. Das Tool<br />

nutzt kein eigenes Kernelmodul, sondern<br />

läuft im Userspace und kommuniziert<br />

mit dem <strong>Linux</strong>-Kern via Fuse. Laut Aussagen<br />

der Entwickler eignet sich Cromfs<br />

besonders dazu, sehr große Abbilder zu<br />

erzeugen. Die enthaltenen Dateien dürfen<br />

bis zu 2 64 Bytes (16 777 216 TBytes)<br />

groß sein; der gleiche Wert gilt <strong>für</strong> das<br />

Dateisystem selbst.<br />

Mit dem Kompressionsalgorithmus LZMA<br />

erzielt Cromfs eine bessere Kompressionsrate<br />

als andere Tools, die in der Regel<br />

auf Gzip oder Bzip2 setzen. Der Preis ist<br />

eine geringere Performance und ein hoher<br />

RAM-Bedarf. Die Projektwebseite stellt<br />

aber eine Reihe von Tuning-Empfehlungen<br />

samt Hintergrundinformationen vor.<br />

Neue Images erstellt »mkcromfs«, fertige<br />

binden Anwender mit »cromfs‐driver«<br />

ein. Neben dem Mountpoint nimmt das<br />

Tool eine Reihe von Fuse-Parametern entgegen.<br />

Die erlaubten Optionen zeigt der<br />

Aufruf »cromfs‐driver ‐‐help« an.<br />

★★★★★ Cromfs eignet sich gut dazu,<br />

große Datenmengen nur lesend und<br />

vor <strong>alle</strong>m platzsparend bereitzustellen.<br />

Das Tool besticht durch seine einfache<br />

Handhabung und die umfangreiche Dokumentation.<br />

n<br />

Justniffer schneidet die TCP-Kommunikation<br />

eines Rechners mit. Da das Tool auch<br />

die Response-Zeit einer Anfrage erfasst,<br />

eignet es sich ebenfalls <strong>für</strong> Performance-<br />

Analysen. Sämtliche Protokolle landen in<br />

der Voreinstellung im Apache-ähnlichen<br />

Format auf der Konsole. Das vordefinierte<br />

Logformat ergänzen Anwender optional<br />

hinter »‐l«. Justniffer hält dazu über 80<br />

Schlüsselwörter bereit. Alternativ erweitert<br />

der Nutzer mit der Aufrufoption<br />

»‐a« das bestehende Protokoll um eigene<br />

Einträge. Last but not least erlaubt es<br />

Justniffer, mit »‐r« den rohen Datenstrom<br />

zu betrachten.<br />

Hinter »‐p« definiert der Nutzer eigene<br />

Filter und beschränkt die Ausgabe beispielsweise<br />

auf bestimmte Ports. Die<br />

Filtersyntax ähnelt der von »tcpdump«.<br />

Wenn die mitgelieferten Filter- und Verarbeitungsoptionen<br />

nicht ausreichen,<br />

leitet das Tool über »‐e« seine Ausgabe<br />

an andere Programme weiter. Sowohl<br />

die Manpage als auch die Webseite des<br />

Projekts enthalten zahlreiche Konfigurations-<br />

und Anwendungsbeispiele. Ein<br />

Blick lohnt sich.<br />

★★★★★ Justniffer behält die Netzwerk-<br />

Geschwindigkeit eines Systems im Auge.<br />

Wer mit Apache-Protokollen vertraut ist,<br />

der dürfte sich schnell in den Logs zurechtfinden.<br />

Alle anderen entwerfen mit<br />

den zahlreichen Justniffer-Schlüsselwörtern<br />

ihr eigenes Format.<br />

n<br />

Wartungsarbeiten auf mehreren identischen<br />

Systemen sind lästig und fehleranfällig.<br />

Massh hilft dem Admin, indem es<br />

zu einer Gruppe von Rechnern Verbindung<br />

aufnimmt und dort die gleiche vorgegebene<br />

Befehlsfolge ausführt. Darüber<br />

hinaus ist das Tool in der Lage, Dateien<br />

auf mehrere Remotesysteme zu verteilen<br />

oder von diesen herunterzuladen.<br />

Eine Installation des Tools ist nur auf dem<br />

Computer des Admin erforderlich, auf<br />

den Zielsystemen reicht der SSH-Daemon.<br />

Damit der par<strong>alle</strong>le Verbindungsaufbau<br />

funktioniert, benötigen <strong>alle</strong> Systeme<br />

denselben passwortlosen SSH-Schlüssel.<br />

Eine Authentifizierung via Kennwort ist<br />

nicht möglich. Die Ergebnisse seiner Arbeit<br />

hinterlegt das Tool in der Datei »~/.<br />

massh/hosts/results«. Via Massh heruntergeladene<br />

Dateien der Remoterechner<br />

landen nach Zielsystemen geordnet im<br />

Verzeichnis »~/.massh/pull«.<br />

Zur Verwaltung der Remote-Adressen<br />

greift Massh zu Ambit. Das Tool stammt<br />

vom selben Entwickler und ist ebenfalls<br />

ein Shellskript. Mit Ambit fasst der<br />

Admin etwa mehrere Adressen unter<br />

einem Namen zusammen und übergibt<br />

diese Gruppe dann beim Massh-Start.<br />

★★★★★ Admins verwalten dank Massh<br />

mehrere identische Systeme ganz bequem.<br />

Auch die Funktionen zum Up- und<br />

Download sind praktisch und erleichtern<br />

den Arbeitsalltag.<br />

n


JETZT NEU<br />

BEI THOMAS KRENN<br />

DATENSCHUTZ - LEISTUNG - SICHERHEIT<br />

SANDY BRIDGE<br />

Der neue 1HE Intel Single-CPU CSE512 Server bei Thomas Krenn<br />

NUR BEI UNS<br />

AB EUR<br />

399,-<br />

1HE INTEL SINGLE-CPU CSE512 SERVER (SANDY BRIDGE)<br />

• Neueste Intel Sandy-Bridge - CPUs, bis zu 3.5GHz und 4 Kerne pro CPU<br />

• Die neue Technologie bietet kosteneffizienten Datenschutz, Leistung,<br />

erweiterte Sicherheit, Virtualisierung und Energieverwaltungsoptionen<br />

• Automatische Anpassung der Leistung durch Intel Turbo-Boost 2.0 und HT<br />

• Hochwertige, energieeffiziente Speichermodule, bis zu 16 GB möglich<br />

Infos unter: www.thomas-krenn.com/cse512_sandy_bridge<br />

Thomas-Krenn.AG ist<br />

HERBSTWORKSHOP<br />

- Schauen Sie doch mal vorbei! -<br />

Mehr Infos: www.thomas-krenn.com/events_2011<br />

Flächendeckendes Händler- und Servicenetz in<br />

der Schweiz: www.thomas-krenn.com/ch<br />

www.thomas-krenn.com<br />

EU: +49 (0) 8551 9150-0 · AT: +43 (0) 7282 20797-3600 · CH: +41 (0) 848 207970<br />

Made in Germany!<br />

Verkauf erfolgt ausschließlich an Gewerbetreibende, Firmen, Freiberufler (Ärzte, Rechtsanwälte etc.), staatliche Institutionen und Behörden. Druckfehler, Irrtümer und Änderungen in Preis und Ausstattung vorbehalten.<br />

Unsere Versandkosten richten sich nach Gewicht und Versandart. Genaue Preisangaben finden Sie unter: www.thomas-krenn.com/versandkosten. Thomas-Krenn.AG, Speltenbach-Steinäcker 1, D-94078 Freyung


Software<br />

www.linux-magazin.de Tooltipps 11/2011<br />

70<br />

Mount-GTK 1.0.11<br />

Wechselmedien per Mausklick einbinden<br />

Quelle: [http:// mount‐gtk. sourceforge. net]<br />

Lizenz: GPLv2<br />

Alternativen: USB Mount<br />

MP3 Diags 1.1.06.059<br />

MP3-Sammlung analysieren und bearbeiten<br />

Quelle: [http:// mp3diags. sourceforge. net]<br />

Lizenz: GPLv2<br />

Alternativen: Puddletag, Normalize<br />

Rename Utils 0.11.0<br />

Dateiverarbeitung im Batchmodus<br />

Quelle: [http:// www. nongnu. org/​<br />

renameutils]<br />

Lizenz: GPLv3<br />

Alternativen: Ff_rename, File Rename Utils<br />

Moderne Desktopdistributionen erkennen<br />

Wechselmedien beim Anschließen<br />

und hängen sie selbstständig ins Dateisystem<br />

ein. Wem das nicht behagt, der<br />

stellt die Automount-Funktionen ab und<br />

mountet Datenträger von Hand. Gleiches<br />

gilt <strong>für</strong> Medien, die das System nicht erkennt.<br />

Mount-GTK unterstützt Anwender<br />

beim manuellen Mounten und bietet mit<br />

seiner grafischen Oberfläche jede Menge<br />

Bedienkomfort.<br />

Das Tool besitzt keine eigenen Mountroutinen,<br />

sondern setzt im Hintergrund auf<br />

Pmount, einen Wrapper, der es Nutzern<br />

ohne Rootrechte erlaubt, wechselbare<br />

Medien ohne passenden »fstab«-Eintrag<br />

zu mounten. Nach dem Start zeigt Mount-<br />

GTK eine Übersicht <strong>alle</strong>r verwalteten Geräte<br />

und platziert zudem ein Applet im<br />

Systemtray der Panels. Um ein neues Medium<br />

mit dem Tool bekannt zu machen,<br />

betätigt der Nutzer die Schaltfläche »Edit<br />

Device« und definiert im folgenden Dialog<br />

den Gerätenamen, den Pfad und ein<br />

Label, unter dem das System das Device<br />

einbindet.<br />

In der Voreinstellung hängt Mount-GTK<br />

neue Geräte unter ihrem Label-Namen<br />

unterhalb von »/media« ein. Per Mausklick<br />

fügen Nutzer dann über das Mount-<br />

GTK-GUI Wechselmedien hinzu und melden<br />

sie wieder ab. Wer Netzwerkfreigaben<br />

oder Fuse-basierte Dateisysteme einbinden<br />

möchte, der muss trotz Pmount<br />

sicherstellen, dass <strong>für</strong> diese Geräte ein<br />

entsprechender Eintrag in »/etc/fstab«<br />

existiert. Für USB-Sticks oder CDs/​DVDs<br />

ist dies nicht erforderlich.<br />

★★★★★ Mount-GTK ist eine Lösung <strong>für</strong><br />

<strong>alle</strong>, die die Automount-Funktion ihrer<br />

Distribution ablehnen und nicht auf die<br />

Shell möchten. Das Tool ist einfach zu<br />

handhaben und integriert sich gut in die<br />

Kontrollleisten der Desktops. n<br />

Ist der Lieblingssong defekt oder die<br />

Lautstärke einer gerippten CD durcheinandergeraten<br />

oder fehlen die ID3-Tags?<br />

MP3 Diags hilft aus der Klemme, liest<br />

MP3s ein, zeigt mögliche Probleme an<br />

und offeriert Lösungen. Falls die importierte<br />

Sammlung zu groß ist, bietet das<br />

Tool an, die Anzeige über verschiedene<br />

Filter einzuschränken. So kann es beispielsweise<br />

nur bestimmte Verzeichnisse<br />

einblenden oder MP3s anhand der Tags<br />

sortieren. Auf diese Weise spürt der Anwender<br />

auch Musik auf, der die ID3-Informationen<br />

fehlen. Optional beschränkt<br />

MP3 Diags sich auch auf einzelne Alben<br />

oder Songs.<br />

Außerdem hat MP3 Diags Funktionen im<br />

Gepäck, die VBR-Daten wiederherstellen<br />

und Audiodateien normalisieren. Letzteres<br />

ist vor <strong>alle</strong>m bei der Verarbeitung<br />

ganzer Alben praktisch. Darüber hinaus<br />

entfernt das Tool unbekannte oder fehlerhafte<br />

Streams sowie ID3v2-Frames,<br />

die nicht standardkonform sind. Auch<br />

bei der Umbenennung von MP3-Dateien<br />

unterstützt das Programm den Anwender<br />

und vergibt die neuen Namen basierend<br />

auf den ID3-Informationen. Soll MP3<br />

Diags mehrere Arbeitsschritte hintereinander<br />

ausführen, kann der Anwender<br />

diese zu einer so genannten Transformation<br />

zusammenstellen. Bis zu vier solcher<br />

Verwandlungsprozesse kann er speichern<br />

und beliebig oft ausführen.<br />

★★★★★ MP3 Diags ist ein mächtiges<br />

Tool zur Bearbeitung von MP3s. Aufgrund<br />

der Funktionsvielfalt ist die erste<br />

Einarbeitung etwas zeitintensiver – der<br />

Aufwand lohnt sich aber <strong>für</strong> <strong>alle</strong> Anwender,<br />

die regelmäßig ihre MP3-Sammlung<br />

aufräumen.<br />

n<br />

Bei den Rename Utils handelt es sich<br />

um Tools, die einzelne oder mehrere Dateien<br />

umbenennen, kopieren und verschieben.<br />

Zur Sammlung gehören »deurlname«,<br />

»icp«, »imv«, »qcp« und »qmv«.<br />

Mit Ausnahme des erstgenannten Befehls<br />

handelt es sich bei den Werkzeugen um<br />

symbolische Links auf die Programme<br />

»icmd« und »qcmd«. Auch bei der eigentlichen<br />

Arbeit setzen die Rename Utils<br />

auf andere Programme im Hintergrund,<br />

und zwar auf »mv« und »cp«. Wer lieber<br />

andere Helfer verwenden möchte, der<br />

gibt diese hinter dem Parameter »‐‐command«<br />

an.<br />

Die beiden Programme »icp« und »imv«<br />

arbeiten interaktiv beim Kopieren, Verschieben<br />

und Umbenennen einzelner Dateien.<br />

Anders »qcp« und »qmv« – beide<br />

modifizieren gleich ganze Verzeichnisse.<br />

Dazu erfassen sie zunächst <strong>alle</strong> Dateien<br />

im Ordner und speichern die Namen in<br />

einer Textdatei. Diese enthält eine Spalte<br />

<strong>für</strong> die Quelle und eine <strong>für</strong> das Ziel der<br />

Aktion. Zum Zusammenstellen der Liste<br />

greifen die Tools auf »ls« und dessen Sortieroptionen<br />

zurück.<br />

Im Anschluss startet der über die Umgebungsvariable<br />

»$EDITOR« oder hinter »‐e«<br />

definierte Texteditor, in dem der Anwender<br />

die neuen Dateinamen in der Zielspalte<br />

nach seinen Wünschen anpasst.<br />

Während »qmv« im nächsten Schritt die<br />

Änderungen auf mögliche Konflikte hin<br />

untersucht und so unabsichtliches Überschreiben<br />

verhindert, zeigt »qcp« direkt<br />

den Ausführungsplan an.<br />

★★★★★ Dank der Rename Utils ist das<br />

Umbenennen von Dateien und Verzeichnissen<br />

ein Kinderspiel. Die in der Toolsammlung<br />

enthaltenen Programme bearbeiten<br />

entweder einzelne Dateien oder<br />

gehen gleich ganze Verzeichnisse an. (U.<br />

Vollbracht/​hej)<br />

n


Aus dem Alltag eines Sysadmin: S3QL<br />

Horrorbilder<br />

Einführung 11/2011<br />

Sysadmin<br />

<strong>Linux</strong>-<strong>Magazin</strong>-Kolumnist Charly Kühnast ist begeisterter Amateurfotograf. In letzter Zeit macht er sich Sorgen,<br />

dass seiner rasch wachsenden Fotosammlung etwas zustößt. Liegt die Lösung in der Cloud? Charly Kühnast<br />

Inhalt<br />

72 Startup in der Praxis<br />

Die Klassiker System-V-Init und BSD-Init<br />

im Vergleich mit Upstart und Systemd.<br />

80 Trusted Boot<br />

Mit Trusted Grub und IMA funktioniert<br />

das Trusted Platform Module (TPM)<br />

auch unter <strong>Linux</strong>.<br />

www.linux-magazin.de<br />

71<br />

Meine erste 2-Megapixel-Digitalknipse<br />

warf so kleine Jpegs aus, dass meine<br />

Fotosammlung auf ein paar Backup-CDs<br />

passte. Das ist zehn Jahre her. Meine heutige<br />

Kamera speichert Raw-Format, und<br />

ich kehre von manchem Sonntagsausflug<br />

mit 10 oder 20 GByte auf der Speicherkarte<br />

heim. Auch wenn nicht <strong>alle</strong>s in der<br />

Sammlung landet, es läppert sich.<br />

Meine Kleinkunstwerke lagere ich auf<br />

einem NAS-Böxchen zu Hause. Bilder,<br />

an denen ich besonders hänge, möchte<br />

ich zusätzlich einem weiteren (verschlüsselten)<br />

Backup außerhalb meines von<br />

Rhein-Hochwassern und NAS-Räubern<br />

bedrohten Heimes anvertrauen – vielleicht<br />

bei Amazon S3.<br />

Bei der Suche nach einem passenden Tool<br />

stieß ich auf S3QL [1]. Es spaltet meine<br />

Daten in kleine Blöcke auf, verschlüsselt<br />

diese, schickt sie in Richtung Cloud und<br />

speichert sie in einem S3-Bucket. „Bucket“<br />

ist Amazons Bezeichnung <strong>für</strong> Speicherplatz,<br />

den ich dort gemietet habe. Ich<br />

darf also mit Fug und Recht behaupten,<br />

meine Daten seien im Eimer!<br />

S3QL merkt sich in einer SQLite-Datenbank,<br />

welche Daten in welchem Block<br />

liegen. Das dient unter anderem der Deduplizierung:<br />

Wenn zwei Datenblöcke<br />

den gleichen Inhalt haben, wird nur einer<br />

von beiden in den Bucket hochgeladen,<br />

<strong>für</strong> den anderen legt S3QL nur einen Verweis<br />

in die Datenbank. Auch Kopier- und<br />

Verschiebe-Operationen finden nur in der<br />

Abbildung 1: S3-Adminoberfläche, bei der das Bucket <strong>für</strong> S3QL schon angelegt, aber noch nicht gefüllt ist.<br />

Datenbank statt und erzeugen keinen<br />

Netzwerkverkehr.<br />

Die Handhabung ist einfach: Zunächst<br />

lege ich die Datei »~/.s3ql/authinfo«<br />

mit den S3-Zugangsdaten und mein<br />

Verschlüsselungspasswort an. Wer das<br />

nicht gern auf der Festplatte liegen hat,<br />

lässt die Authinfo-Datei weg und meldet<br />

sich beim Mounten manuell an. Die<br />

»authinfo«-Datei sieht etwa so aus:<br />

backend s3 machine any login CKUEHNASTU<br />

password Sinn_42<br />

storage‐url s3://charlys‐bucketU<br />

password Geheim<br />

In der ersten Zeile hinterlege ich meine<br />

Zugangsdaten zu Amazons Speicherdienst.<br />

S3QL unterstützt auch andere<br />

Anbieter wie etwa Open Stack. In der<br />

zweiten Zeile gebe ich meinen Bucket an.<br />

Das Passwort »Geheim« braucht S3QL,<br />

um die Daten wieder zu entschlüsseln.<br />

Mkfs.wolke<br />

Vor der ersten Benutzung lege ich in meinem<br />

Bucket das Dateisystem an:<br />

mkfs.s3ql s3://charlys‐bucket<br />

Das Kommando fragt nach einem Verschlüsselungspasswort.<br />

Ich tippe das<br />

ein, dass ich in der zweiten Zeile der<br />

»authinfo«-Datei hinterlegt hatte. Jetzt<br />

kann ich das Dateisystem mounten:<br />

mount.s3ql s3://charlys‐bucket /mnt/<br />

Ab jetzt kann ich den S3-Speicherplatz<br />

wie jedes andere Filesystem nutzen.<br />

Meine Fotosammlung schieße ich nun<br />

per Backup-Programm regelmäßig in die<br />

Wolke. Ein Nachteil sei aber nicht verschwiegen:<br />

Was S3QL schreibt, kann nur<br />

S3QL auch wieder lesen. (jk) n<br />

Infos<br />

[1] S3QL: [https:// code. google. com/ p/ s3ql/]<br />

Der Autor<br />

Charly Kühnast administriert Unix-Syste me im<br />

Rechenzentrum Niederrhein in Kamp-Lintfort.<br />

Zu seinen Aufgaben gehören die Sicherheit und<br />

Verfügbarkeit der Firewalls<br />

und der DMZ. Im heißen Teil<br />

seiner Freizeit frönt er dem<br />

Ko chen, im feuchten Teil der<br />

Süßwasseraquaristik und im<br />

östlichen lernt er Japanisch.


Sysadmin<br />

www.linux-magazin.de Init-Systeme 11/2011<br />

72<br />

System-V-Init, BSD-Init, Upstart und Systemd<br />

Konkurrenz am Start<br />

Für das Starten von Systemdiensten ist das Init-System zuständig. Möchte der Admin es konfigurieren, begegnen<br />

ihm mittlerweile neben dem traditionellen System-V- und BSD-Init auch die modernen Upstart und Systemd.<br />

Eine Überlebenshilfe <strong>für</strong> die Praxis. Udo Seidel<br />

Admin zwei Möglichkeiten zur Verfügung,<br />

um einen Dienst unter die Kontrolle des<br />

Init-Daemon zu stellen. Der direkte Weg<br />

besteht darin, die Inittab anzupassen. Die<br />

allgemeine Syntax lautet:<br />

ID:Runlevels:Aktion:Prozess<br />

© Dmitriy Shironosov, 123RF<br />

Die Anzahl der verfügbaren <strong>Linux</strong>-Distributionen<br />

ist immens – mehrere Hundert<br />

listet die Website Distrowatch auf.<br />

Diese Vielfalt sorgt da<strong>für</strong>, dass jeder Anwender<br />

das spezielle <strong>Linux</strong> seiner Wahl<br />

findet. Dabei gab es lange trotz <strong>alle</strong>r Unterschiedlichkeit<br />

eine gemeinsame Komponente:<br />

den Bootvorgang. Das System<br />

lädt und initialisiert den Kernel, entpackt<br />

eventuell eine Ramdisk und übergibt den<br />

weiteren Vorgang an das Programm Init.<br />

Es ist der Vater <strong>alle</strong>r Prozesse, trägt die<br />

Prozess-ID 1 und startet direkt oder indirekt<br />

<strong>alle</strong> anderen Programme auf dem<br />

<strong>Linux</strong>-System.<br />

Prinzipiell ist das heute immer noch so,<br />

aber am Ende der Ereigniskette steht<br />

nicht mehr notwendigerweise das altvertraute<br />

System-V- oder BSD-Init. Je nach<br />

Distribution begegnet der <strong>Linux</strong>-Anwender<br />

den neueren Lösungen Upstart oder<br />

Systemd. Sie erfordern vom Admin eine<br />

Portion Umdenken und Umlernen.<br />

E System-V-Init<br />

Schon lange ist Init nicht mehr gleich<br />

Init. Auch wenn der Prozess stets »init«<br />

heißt, verbergen sich dahinter mehrere<br />

Varianten: die System-V- und die BSD-<br />

Implementierung. Beim System-V-Ansatz<br />

ist die Datei »/etc/inittab« der Dreh- und<br />

Angelpunkt. Hier legt der Admin fest,<br />

welche Prozesse der Init-Daemon beim<br />

Booten startet.<br />

Ein wesentliches Merkmal des System-V-<br />

Init ist das Runlevel-Konzept. Der <strong>Linux</strong>-<br />

Anwender legt pro Runlevel fest, welche<br />

Prozesse Init starten oder stoppen soll.<br />

Man kann sagen, dass das Runlevel den<br />

Soll-Zustand des Betriebssystems charakterisiert.<br />

Bei System-V-Init stehen dem<br />

Die ID ist gewissermaßen ein Etikett <strong>für</strong><br />

den Dienst und muss eindeutig sein. Auf<br />

alten Systemen sind hier maximal zwei<br />

Zeichen erlaubt, auf neueren sind vier<br />

möglich. Der nächste Punkt legt fest, in<br />

welchen Runlevels der Dienst laufen soll.<br />

Mit der Aktion legt der Anwender fest,<br />

wie Init den Dienst behandelt (siehe Tabelle<br />

1). Der Eintrag »Prozess« spezifiziert<br />

schließlich die auszuführende Kommandozeile.<br />

Dieses Kommando startet Init<br />

beim Booten oder beim Neu-Einlesen der<br />

Konfiguration. Entfernt der Admin die<br />

Zeile wieder, stoppt der Init-Daemon den<br />

Prozess beim Neu-Einlesen seiner Konfigurationsdatei.<br />

Init-Skripte<br />

Das Verwalten von Diensten <strong>alle</strong>in über<br />

die Inittab ist längst nicht mehr zeitgemäß.<br />

Das Runlevel-Konzept des System-<br />

Tabelle 1: Wichtige Inittab-Aktionen<br />

Aktion<br />

respawn<br />

once<br />

wait<br />

boot<br />

bootwait<br />

Beschreibung<br />

Init startet den Prozess neu,<br />

falls er terminiert.<br />

Init startet den Prozess einmalig<br />

beim Erreichen des Runlevels.<br />

Wie »once«, aber Init wartet das<br />

Beenden des Prozesses ab.<br />

Unabhängig von den definierten<br />

Runlevels startet Init den Prozess<br />

einmalig beim Booten.<br />

Wie »once«, aber Init wartet das<br />

Beenden des Prozesses ab.


Abbildung 1: Verwaltung eines Dienstes direkt in der Konfigurationsdatei »/etc/inittab«.<br />

V-Init erlaubt eine elegantere und auch<br />

besser automatisierbare Vorgehensweise.<br />

Pro Dienst existiert ein Shellskript im Verzeichnis<br />

»/etc/init.d/«. Das nicht ungefährliche<br />

Editieren der Konfigurationsdatei<br />

des Init-Daemon entfällt.<br />

Wer ein Skript im Verzeichnis »/etc/<br />

init.d/« platziert, schafft zwar die Voraussetzungen<br />

<strong>für</strong> die Verwaltung durch<br />

Init, aktiviert diese aber nicht. Dazu<br />

fehlen die symbolischen Links in den<br />

entsprechenden Runlevel-Verzeichnissen<br />

»/etc/rcN.d/«. Dennoch kann der Admin<br />

das Skript über »/etc/init.d/myservice<br />

Aktion« testen. Gültige Aktionen sind in<br />

Tabelle 2 aufgelistet.<br />

Aktionen<br />

Die Aktionen »start«, »stop«, »restart«,<br />

»force‐reload« und »status« sollten eigentlich<br />

<strong>alle</strong> Init-Skripte unterstützten – »reload«<br />

dagegen ist optional. Erfahrungsgemäß<br />

implementieren fast <strong>alle</strong> Skripte<br />

das Starten und Stoppen des Dienstes,<br />

Tabelle 2: Aktionen <strong>für</strong> ein<br />

System-V-init-Skript<br />

Aktion<br />

start<br />

stop<br />

restart<br />

reload<br />

force-reload<br />

status<br />

Beschreibung<br />

Starten des Dienstes<br />

Stoppen des Dienstes<br />

(Neu-)Start des Dienstes<br />

Neueinlesen der Konfiguration<br />

des Dienstes ohne Neustart<br />

Wie »reload«, aber gegebenenfalls<br />

mit Neustart<br />

Ausgabe des Status des<br />

Dienstes<br />

danach trennt sich die Spreu vom Weizen.<br />

Schade, denn die Restart-Option zu<br />

implementieren ist ein Kinderspiel, wenn<br />

Starten und Stoppen funktionieren.<br />

Zurück zum Anlegen der Symlinks in den<br />

Runlevel-Verzeichnissen: Im einfachsten<br />

Fall muss der Admin dies manuell tun.<br />

Er schafft Start-Links, deren Name mit<br />

S, und Kill-Links, deren Name mit K beginnt.<br />

Darauf folgen Nummern, die dem<br />

Init-System mitteilen, in welcher Reihenfolge<br />

die Links abzuarbeiten sind.<br />

Leichter hat es der Admin, wenn er ein<br />

<strong>Linux</strong>-System vor sich hat, das den Anforderungen<br />

der <strong>Linux</strong> Standard Base (LSB)<br />

genügt. Diese Spezifikation schreibt vor,<br />

dass sich das Anlegen und Löschen der<br />

Symlinks auch mit dem Tool »insserv«<br />

erledigen lässt. Suse-Benutzer kennen<br />

dieses Kommando schon länger, aber inzwischen<br />

hat es auch in der Debian-Welt<br />

Einzug gehalten. Red-Hat-Freunde müssen<br />

eventuell einen anderen Weg gehen,<br />

doch dazu gleich mehr.<br />

Damit die Automatisierung der Symlinks<br />

funktioniert, muss das Init-Skript<br />

einen festgelegten Header besitzen, der<br />

die notwendigen Informationen enthält<br />

(siehe Listing 1). Mit »insserv /etc/init.d/<br />

Dienst« registriert der <strong>Linux</strong>-Admin den<br />

Tabelle 3: Kurzbeschreibung des<br />

Foobar-Dienstes<br />

Eigenschaft<br />

Name<br />

Binary<br />

Kommando<br />

foobar<br />

/usr/​sbin/​foobar<br />

Start-Kommando /usr/​sbin/​foobar ‐d<br />

Stopp-Kommando /usr/​sbin/​foobar ‐k<br />

Dienst beim Init-Daemon, das Kommando<br />

»insserv ‐r /etc/init.d/Dienst«<br />

meldet das Skript wieder ab. Sind die<br />

entsprechenden LSB-Konformitätspakete<br />

installiert, ist ein ähnliches Vorgehen<br />

auch bei Fedora oder Mandriva möglich.<br />

Gemäß der Spezifikation kann der <strong>Linux</strong>-<br />

User auch die Kommandos »/usr/lib/lsb/<br />

install_initd« und »/usr/lib/lsb/remove_<br />

initd« zum Registrieren oder Abmelden<br />

eines Init-Skripts verwenden.<br />

Auf einer Red-Hat-kompatiblen Plattform<br />

gibt es aber noch eine andere Möglichkeit:<br />

das Tool »chkconfig«. Analog zu<br />

»insserv« erwartet das Kommando einen<br />

speziellen Header im Init-Skript, der die<br />

nötigen Information zum Anlegen oder<br />

Löschen der Runlevel-Symlinks enthält<br />

(siehe Listing 2). Der Befehl »chkconfig<br />

‐‐add Dienst« meldet den Dienst beim<br />

Init-Daemon an, »chkconfig ‐‐del Dienst«<br />

entfernt die Symlinks. Neuere Versionen<br />

des Tools verstehen auch den LSB-Header<br />

und räumen diesen Angaben sogar höhere<br />

Priorität ein.<br />

Selbst eingerichtet<br />

Als Beispiel <strong>für</strong> einen selbst eingerichteten<br />

Daemon soll ein Dienst namens<br />

»foobar« herhalten. Seine Merkmale sind<br />

in Tabelle 3 aufgelistet. Die direkte Verwaltung<br />

durch den Init-Daemon zeigt<br />

Abbildung 1 in Form einer interaktiven<br />

Terminalsitzung: Der Admin aktiviert<br />

den Dienst Foobar in »/etc/inittab« durch<br />

Entfernen des Kommentarzeichens. Der<br />

Listing 1: LSB-kompatibler Header<br />

eines Init-Skripts<br />

01 ### BEGIN INIT INFO<br />

02 # Provides: boot_facility_1 [ boot_facility_2 ...]<br />

03 # Required‐Start: boot_facility_1 [ boot_facility_2 ...]<br />

04 # Required‐Stop: boot_facility_1 [ boot_facility_2 ...]<br />

05 # Should‐Start: boot_facility_1 [ boot_facility_2 ...]<br />

06 # Should‐Stop: boot_facility_1 [ boot_facility_2 ...]<br />

07 # Default‐Start: run_level_1 [ run_level_2 ...]<br />

08 # Default‐Stop: run_level_1 [ run_level_2 ...]<br />

09 # Short‐Description: short_description<br />

10 # Description: multiline_description<br />

11 ### END INIT INFO<br />

Listing 2: Angaben <strong>für</strong> »chkconfig«<br />

im System-V-init-Skript<br />

01 # chkconfig: run_level_1[ run_level_2 ...] start_<br />

priority stop_priority<br />

02 # description: short_description<br />

Init-Systeme 11/2011<br />

Sysadmin<br />

www.linux-magazin.de<br />

73


Sysadmin<br />

www.linux-magazin.de Init-Systeme 11/2011<br />

74<br />

Init-Daemon erfährt durch das Kommando<br />

»telinit q« von dieser Änderung<br />

und startet den Service, der daraufhin in<br />

der Prozessliste auftaucht. Das Entfernen<br />

(oder Auskommentieren) des Dienstes<br />

Foobar deaktiviert ihn wieder, wobei<br />

der Init-Prozess den Foobar-Service erst<br />

nach der erneuten Eingabe von »telinit<br />

q« beendet.<br />

Listing 3 zeigt ein – zugegeben recht<br />

einfaches – System-V-Init-Skript. Neben<br />

dem LSB-Header sind auch Informationen<br />

<strong>für</strong> »chkconfig« enthalten. Dabei ist<br />

das Skript nicht vollständig LSB-konform,<br />

denn es fehlt die Festlegung der Rückgabewerte,<br />

wie es der Standard eigentlich<br />

vorschreibt. Als Anschauung genügt es<br />

aber auch in dieser Form, weiterführende<br />

Infos findet der Leser in der LSB-Spezifikation<br />

<strong>für</strong> Init-Skripte unter [1].<br />

E Init auf BSD-Art<br />

Die BSD-Variante <strong>für</strong> den Init-Vorgang<br />

ist unter <strong>Linux</strong> nicht mehr besonders<br />

verbreitet. Einige Distributionen wie<br />

Arch <strong>Linux</strong> verwenden immerhin einen<br />

hybriden Ansatz, eine Mischung aus<br />

System-V- und BSD-Init. Im Unterschied<br />

zu System-V kennt das BSD-Init keine<br />

Runlevel, auch die Konfigurationsdatei<br />

»/etc/inittab« existiert nicht. Die System-<br />

Initialisierung erledigt »/etc/rc«, ein<br />

Abbildung 2: Schlicht: Auszug aus der »/etc/rc.local« <strong>für</strong> das Starten des Foobar-Daemon.<br />

langes Shellskript, das eine Konfigurationsdatei<br />

unter »/etc/rc.conf« besitzt. Es<br />

gibt dabei also keine dienstspezifischen<br />

Skripte. Will der Admin einen Dienst einschalten,<br />

muss er »rc.conf« anpassen und<br />

ihn manuell starten. Das Ändern der Konfigurationsdatei<br />

stellt nur sicher, dass der<br />

entsprechende Prozess auch nach einem<br />

Reboot läuft.<br />

Die Integration eigener Dienste erfolgt in<br />

der Datei »/etc/rc.local« beziehungsweise<br />

in »/etc/rc.shutdown«. Für Prozesse, die<br />

dem System unbekannt sind, fügt der<br />

Admin die entsprechenden Codezeilen<br />

in diese Shellskripte ein. Da es sich um<br />

pures Shellscripting handelt, kann er den<br />

entsprechenden Code auch in ein externes<br />

Skript auslagern, das auf Wunsch<br />

sogar die Argumente »start« und »stop«<br />

versteht. Auf diese Weise ist es einfacher,<br />

die Prozesse zur Laufzeit zu stoppen oder<br />

zu starten – analog zum System-V-Ansatz.<br />

Abbildung 2 illustriert die Integration<br />

des Beispiel-Dienstes »foobar« in den<br />

BSD-Init-Prozess.<br />

E Upstart macht Tempo<br />

Das serielle Starten von Diensten beim<br />

traditionellen Init-Konzept führt dazu,<br />

dass damit ausgerüstete <strong>Linux</strong>-Distributionen<br />

den Großteil des Bootprozesses<br />

mit dem Starten der Hintergrunddienste<br />

verbringen. Mit Upstart [2] stellte die<br />

Ubuntu-Firma Canonical einen neuen<br />

Ansatz vor, der in Ubuntu 9.10 erstmals<br />

umfangreich zum Einsatz kam. Die starre<br />

alphanumerische Ordnung löst Upstart<br />

durch ein ereignisgesteuertes Modell ab:<br />

Das System passt bestimmte Ereignisse<br />

ab, etwa die Aktivierung des Netzwerks<br />

oder das Einhängen der Dateisysteme.<br />

Diese sind die Voraussetzung, dass bestimmte<br />

Dienste starten [3].<br />

Das zentrale Kommando zur Jobverwaltung<br />

ist »initctl«: Über »initctl list« erhält<br />

Listing 3: Einfaches Init-Skript <strong>für</strong> den »foobar«-Dienst<br />

01 #!/bin/sh<br />

02 #<br />

03 ### BEGIN INIT INFO<br />

04 # Provides: foobar<br />

05 # Required‐Start:<br />

06 # Should‐Start: $syslog<br />

07 # Required‐Stop:<br />

08 # Should‐Stop: $syslog<br />

09 # Default‐Start: 3 5<br />

10 # Default‐Stop:<br />

11 # Short‐Description: foobar service<br />

12 # Description: Start the foobar daemon for educational purposes<br />

13 ### END INIT INFO<br />

14 <br />

15 FOOBARBIN=/usr/sbin/foobar<br />

16 MYRC=0<br />

17 <br />

18 case "$1" in<br />

19 start)<br />

20 echo ‐n "Starting foobar service"<br />

21 $FOOBARBIN ‐d || MYRC=1<br />

22 ;;<br />

23 stop)<br />

24 echo ‐n "Stopping foobar service "<br />

25 $FOOBARBIN ‐k || MYRC=1<br />

26 ;;<br />

27 restart)<br />

28 $0 stop<br />

29 $0 start<br />

30 ;;<br />

31 status)<br />

32 ps ‐ef|grep [f]oobar > /dev/null 2>&1<br />

33 if [ "$?" ‐eq 0 ]; then<br />

34 echo "Service foobar is running"<br />

35 else<br />

36 echo "Service foobar is NOT running"<br />

37 fi<br />

38 ;;<br />

39 *)<br />

40 echo "Usage: $0 {start|stop|restart|status}"<br />

41 exit 1<br />

42 ;;<br />

43 esac<br />

44 <br />

45 exit $MYRC


Abbildung 3: Auch der Upstart-Daemon heißt Init, die Konfigurationsdateien befinden sich in »/etc/init/«.<br />

der Admin den aktuellen Status <strong>alle</strong>r über<br />

Upstart verwalteten Prozesse. Der Befehl<br />

»initctl stop foobar« beendet den Dienst<br />

»foobar«, das Kommando »initctl start<br />

foobar« startet ihn wieder.<br />

Die Jobkonfigurationen finden sich im<br />

Verzeichnis »/etc/init/«. Upstart arbeitet<br />

dort <strong>alle</strong> Dateien mit der Endung ».conf«<br />

ab (Abbildung 3). Einfaches Umbenennen<br />

der Datei, sodass der Name nicht<br />

mehr auf ».conf« endet, verhindert den<br />

automatischen Start. Übrigens findet der<br />

Anwender zwar noch einen Prozess names<br />

»init«, aber dahinter verbirgt sich der<br />

Upstart-Daemon. Es existiert im Normalfall<br />

auch keine »/etc/inittab« mehr – oder<br />

nur noch ein Bruchteil davon.<br />

Upstart konfigurieren<br />

Ein Upstart-Job <strong>für</strong> den Foobar-Dienst<br />

ist nicht schwer einzurichten. Im folgenden<br />

Beispiel (Listing 4) startet der<br />

neue Init-Prozess den Daemon in den<br />

Runlevels »2345« und stoppt ihn in den<br />

restlichen. Vor dem Start und nach dem<br />

Beenden führt Upstart noch jeweils ein<br />

Shellkommando aus: Der Admin möchte<br />

den Vorgang per »logger« im Syslog mitprotokollieren.<br />

Listing 5 zeigt eine interaktive<br />

Sitzung, in der der Admin den<br />

Tabelle 4: Wichtige Kommandos <strong>für</strong> Systemd<br />

Beschreibung<br />

Aktive Service-Units auflisten<br />

Alle Service-Units auflisten<br />

Unit starten<br />

Unit stoppen<br />

Status einer Unit anzeigen<br />

Unit beim Boot automatisch starten<br />

Unit beim Boot nicht automatisch starten<br />

neu eingerichteten Foobar-Dienst startet,<br />

anhält und schließlich deaktiviert.<br />

E Alles neu: Systemd<br />

Nachdem es lange Zeit so aussah, als<br />

würde Upstart das alte Init-System ablösen,<br />

betrat 2010 mit Systemd ein neuer<br />

Star die Bühne. Benutzer von Fedora 15<br />

finden das neue System bereits als Standard<br />

vor. Systemd unterteilt seine Aufgaben<br />

in vier Kategorien: Hardware einrichten,<br />

Datenträger einbinden, Sockets<br />

anlegen und Daemons starten.<br />

Von diesen so genannten Units entspricht<br />

die letzte am ehesten den bekannten System-V-Init-Skripten.<br />

Setup, Konfiguration<br />

und Wartung von Systemd-Units verlangen<br />

Umgewöhnung: Das zentrale Tool<br />

ist »systemctl«. Damit listet der Admin<br />

aktive Units auf, (de-)aktiviert den automatischen<br />

Start beim Booten und startet<br />

beziehungsweise beendet die entsprechenden<br />

Prozesse (Tabelle 4).<br />

Die gute Nachricht vorweg: Systemd versteht<br />

auch die klassischen System-V-Init-<br />

Skripte. Der Anwender kann also wie<br />

gewohnt das Shellskript im Verzeichnis<br />

»/etc/init.d/« ablegen und mit Hilfe des<br />

Werkzeugs »systemctl« verwalten. Systemd<br />

erkennt das Init-Skript im alten Stil<br />

Kommando<br />

systemctl --type=service<br />

systemctl --type=service --all<br />

systemctl start foobar.service<br />

systemctl stop foobar.service<br />

systemctl status foobar.service<br />

systemctl enable foobar.service<br />

systemctl disable foobar.service<br />

und schaltet automatisch auf die Kommandos<br />

»chkconfig« oder »insserv« um<br />

(siehe Listing 6). Ist ein LSB-Header im<br />

Init-Skript vorhanden, wertet auch der<br />

Systemd-Daemon ihn aus.<br />

Mit ein bisschen Zeit und etwas Lernwillen<br />

ist es <strong>für</strong> den <strong>Linux</strong>-Benutzer kein<br />

Problem, ein Init-Skript in eine Systemd-<br />

Unit umzuwandeln. Die Unit-Dateien<br />

erinnern an die von Windows bekannten<br />

Ini-Dateien und sind im allgemeinen<br />

deutlich kürzer als die Init-Skripte. Eine<br />

ausführliche Beschreibung der Konfigurationsparameter<br />

und weitere Hinweise <strong>für</strong><br />

Admins gibt es unter [4].<br />

Systemd ist sehr umfassend konfigurierund<br />

bedienbar. Bei einem minimalistischen<br />

Ansatz sind aber drei Einträge<br />

wichtig: »Unit«, »Service« und »Install«.<br />

Jeder Abschnitt enthält eine Anweisung:<br />

die Beschreibung des Dienstes, das Kom-<br />

Listing 4: »foobar.conf«: Upstart-<br />

Job <strong>für</strong> Foobar-Dienst<br />

01 # foobar ‐ foobar Service<br />

02 #<br />

03 # foobar is a pseudo service<br />

04 <br />

05 description "foobar daemon"<br />

06 <br />

07 pre‐start script<br />

08 logger ‐p user.err "starting foobar service"<br />

09 end script<br />

10 <br />

11 start on runlevel [2345]<br />

12 stop on runlevel [!2345]<br />

13 <br />

14 exec /usr/sbin/foobar ‐d<br />

15 <br />

16 post‐stop script<br />

17 logger ‐p user.err "foobar service stopped"<br />

18 end script<br />

Listing 5: Arbeiten mit »initctl«<br />

01 # initctl status foobar<br />

02 foobar stop/waiting<br />

03 # initctl start foobar<br />

04 foobar start/running, process 2327<br />

05 # initctl status foobar<br />

06 foobar start/running, process 2327<br />

07 # ps ‐ef|grep [fo]oba<br />

08 root 2327 1 0 13:28 ? 00:00:00<br />

09 #<br />

/usr/sbin/foobar ‐d<br />

10 # initctl stop foobar<br />

11 foobar stop/waiting<br />

12 # mv /etc/init/foobar.conf /etc/init/foobar.conf.weg<br />

13 # initctl status foobar<br />

14 initctl: Unknown job: foobar<br />

Init-Systeme 11/2011<br />

Sysadmin<br />

www.linux-magazin.de<br />

75


Sysadmin<br />

www.linux-magazin.de Init-Systeme 11/2011<br />

76<br />

Abbildung 4: Die Systemd-Unit <strong>für</strong> den Foobar-Service.<br />

ein System-V-Init-Skript funktioniert. In<br />

diesem Fall genügt aber der Verweis auf<br />

die eigentliche Binärdatei.<br />

Die Ablösung bei den Init-Systemen ist<br />

im vollen Gange. Gerade noch setzte<br />

Fedora auf Upstart, schon sieht sich der<br />

Anwender Systemd gegenüber. Die Konfigurationen<br />

des klassischen Init, von<br />

Upstart und Systemd unterscheiden sich<br />

deutlich. Aber schon nach kurzer Einarbeitung<br />

ist es möglich, die notwendigen<br />

Skripte, Jobs oder Units anzufertigen und<br />

zu verwalten. (mhu)<br />

n<br />

mando zum Starten des Prozesses sowie<br />

eine Angabe, in welchem Zustand oder<br />

Runlevel Systemd das Startkommando<br />

ausführen soll.<br />

Die System-V-Runlevels sind im Target-<br />

Konzept von Systemd aufgegangen. Jedes<br />

Target beschreibt eine Ansammlung von<br />

Units, die Systemd beim Ansteuern des<br />

Bootziels startet. Reagiert der Prozess<br />

nicht auf das übliche »SIGTERM«-Signal,<br />

muss die Unit-Konfiguration auch das<br />

Stoppkommando enthalten.<br />

Systemd sucht seine Konfigurationsdateien<br />

in den Verzeichnissen »/lib/systemd/system/«<br />

und »/etc/systemd/system/«.<br />

Letzteres ist <strong>für</strong> angepasste und<br />

selbst entwickelte Dateien vorgesehen.<br />

Ist die Unit-Datei platziert, kann der<br />

Admin den Dienst über »systemctl start<br />

foobar.service« starten. Damit der Dienst<br />

auch nach einem Reboot läuft, bindet der<br />

<strong>Linux</strong>-Anwender die Unit-Konfiguration<br />

in das unter »Install« definierte Target<br />

ein: »systemctl enable foobar.service«.<br />

Systemd legt einen Symlink in das entsprechende<br />

Target-Verzeichnis – analog<br />

zu den Symlinks von System-V-Init.<br />

Meine Einheit<br />

Abbildung 4 zeigt die Unit-Datei <strong>für</strong> den<br />

Beispielprozess Foobar. Der Ansatz erweist<br />

sich als etwas weniger spartanisch<br />

als oben beschrieben. Im »Unit«-Abschnitt<br />

ist festgelegt, dass »crond« auf jeden Fall<br />

vorher laufen muss und lokale Anpassungen<br />

erst nach dem Foobar-Daemon an<br />

der Reihe sind. Beim Festlegen der Startund<br />

Stoppkommandos könnte der Admin<br />

auch auf Shellskripte verweisen – sogar<br />

Infos<br />

[1] System-V-Init-Skripte laut LSB 4.0:<br />

[http:// refspecs. linux‐foundation.​<br />

org/ LSB_4. 0. 0/ LSB‐Core‐generic/​<br />

LSB‐Core‐generic/ iniscrptact. html]<br />

[2] Upstart: [http:// upstart. ubuntu. com]<br />

[3] Nico Dietrich, Dirk von Suchodoletz, „Auf<br />

die Plätze, fertig …“ – Schnelles Booten<br />

mit Upstart, einem Ersatz <strong>für</strong> das betagte<br />

Sys-V-Init: <strong>Linux</strong>-<strong>Magazin</strong> 02/​07, S. 72<br />

[4] Systemd: [http:// freedesktop. org/ wiki/​<br />

Software/ systemd]<br />

Der Autor<br />

Dr. Udo Seidel ist eigentlich Mathe-Physik-Lehrer<br />

und seit 1996 <strong>Linux</strong>-Fan. Er hat als <strong>Linux</strong>/​Unix-<br />

Trainer, Systemadministrator und Senior Solution<br />

Engineer gearbeitet. Heute ist er Leiter eines<br />

<strong>Linux</strong>/​Unix-Teams bei der Amadeus Data Processing<br />

GmbH in Erding.<br />

Listing 6: Verwaltung des Foobar-Dienstes mit Systemctl<br />

01 # systemctl ‐‐type=service ‐‐all|grep foobar<br />

02 foobar.service loaded inactive dead LSB: foobar<br />

service<br />

03 # systemctl enable foobar.service<br />

04 foobar.service is not a native service, redirecting to /sbin/chkconfig.<br />

05 Executing /sbin/chkconfig foobar on<br />

06 # systemctl start foobar.service<br />

07 # systemctl status foobar.service<br />

08 foobar.service ‐ LSB: foobar service<br />

09 Loaded: loaded (/etc/rc.d/init.d/foobar)<br />

10 Active: active (running) since Mon, 12 Sep 2011 10:52:44<br />

+0200; 2s ago<br />

11 Process: 967 ExecStart=/etc/rc.d/init.d/foobar start<br />

(code=exited, status=0/SUCCESS)<br />

12 Main PID: 969 (foobar)<br />

13 CGroup: name=systemd:/system/foobar.service<br />

14 969 /usr/sbin/foobar ‐d<br />

15 #<br />

16 # systemctl stop foobar.service<br />

17 # systemctl status foobar.service<br />

18 foobar.service ‐ LSB: foobar service<br />

19 Loaded: loaded (/etc/rc.d/init.d/foobar)<br />

20 Active: inactive (dead) since Mon, 12 Sep 2011 10:53:42<br />

+0200; 1s ago<br />

21 Process: 973 ExecStop=/etc/rc.d/init.d/foobar stop<br />

(code=killed, signal=TERM)<br />

22 Process: 967 ExecStart=/etc/rc.d/init.d/foobar start<br />

(code=exited, status=0/SUCCESS)<br />

23 Main PID: 969 (code=exited, status=0/SUCCESS)<br />

24 CGroup: name=systemd:/system/foobar.service<br />

25 # systemctl disable foobar.service<br />

26 foobar.service is not a native service, redirecting to /sbin/chkconfig.<br />

27 Executing /sbin/chkconfig foobar off<br />

28 # systemctl status foobar.service<br />

29 foobar.service ‐ LSB: foobar service<br />

30 Loaded: loaded (/etc/rc.d/init.d/foobar)<br />

31 Active: inactive (dead) since Mon, 12 Sep 2011 10:53:42<br />

+0200; 19s ago<br />

32 Main PID: 969 (code=exited, status=0/SUCCESS)<br />

33 CGroup: name=systemd:/system/foobar.service<br />

34 #


Neuheiten von O’Reilly<br />

ISBN 978-3-86899-109-3 , 17,90 €<br />

ISBN 978-3-86899-119-2, 24,90 €<br />

ISBN 978-3-86899-123-9 , 24,90 €<br />

ISBN 978-3-86899-105-5 , 19,90 €<br />

ISBN 978-3-89721-316-6 34,90 €<br />

ISBN 978-3-86899-118-5 , 12,90 €<br />

ISBN 978-3-86899-114-7, 29,90 €<br />

ISBN 978-3-89721-322-7, 34,90 € ISBN 978-1-4493-0358-7 , 38,- €<br />

eBooks<br />

herunterladen<br />

Neu bei O’Reilly!<br />

Bundles aus PDF & EPUB<br />

www.oreilly.de/ebooks<br />

Blog:<br />

http://community.oreilly.de/blog<br />

Twitter:<br />

http://twitter.com/OReilly_Verlag<br />

Facebook:<br />

www.facebook.com/oreilly.de<br />

O’REILLY ®<br />

www.oreilly.de


Sysadmin<br />

www.linux-magazin.de Trusted Boot 11/2011<br />

80<br />

Hardware absichern mit IMA und Trusted Boot<br />

Kette des Vertrauens<br />

Gut ausgestattete Mainboards bringen meist Trusted-Computing-Chips mit, die Benutzer und Betriebssysteme<br />

aber nur selten nutzen. Der <strong>Linux</strong>-Kernel beherrscht die Technik und ermöglicht mit Trusted Grub eine weitreichende<br />

Vertrauenskette – zumindest theoretisch. Falk Nedwal<br />

© stylephotographs, 123RF<br />

Notebooks. In der Voreinstellung fristet<br />

es jedoch meist nur ein Schattendasein<br />

und bleibt deaktiviert. Das TPM ist von<br />

der TCG (Trusted Computing Group,<br />

siehe Kasten „TCG“) spezifiziert und<br />

standardisiert (ISO/​IEC 11889). Es enthält<br />

Komponenten <strong>für</strong>s Trusted Computing<br />

und verschafft einem Rechner Zugang<br />

zu folgenden Funktionen:<br />

n Eindeutige Plattform-Identität<br />

n Sicherer Schlüsselspeicher<br />

n Versiegeln von Daten<br />

n Kryptographie-Funktionen<br />

n Bewertung der System-Integrität<br />

Die standardkonforme Realisierung des<br />

Chips bestätigen diverse Zertifikate und<br />

Signaturen (siehe Kasten „TPM“). Seine<br />

Vertrauenswürdigkeit beruht damit auf<br />

der Vertrauenswürdigkeit des Herstellers<br />

sowie der unterzeichnenden Instanzen<br />

der enthaltenen Zertifikate.<br />

Die digitale Unterschrift <strong>alle</strong>ine reicht<br />

nicht. Selbst wenn die qualifizierte elektronische<br />

Signatur als Ersatz der händischen<br />

Unterschrift in der Praxis anerkannt<br />

wäre, müsste die Software garantieren<br />

können, dass die Anwendung auch<br />

das signiert hat, was auf dem Bildschirm<br />

angezeigt wurde.<br />

Wer da von der Vertrauenswürdigkeit der<br />

verwendeten Hardware ausgeht (Stichwort<br />

„Trusted Display“), dem stellt sich<br />

die Frage nach der Glaubhaftigkeit der<br />

verwendeten Programme. Der folgende<br />

Artikel beschreibt eine Möglichkeit, wie<br />

sich die Integrität von Software mit <strong>Linux</strong>,<br />

entsprechender Hardware und den richtigen<br />

Tools überprüfen lässt, und zeigt,<br />

wo es noch hakt und an welchen Stellen<br />

das freie System dennoch gegenüber Microsofts<br />

Windows die Nase vorn hat.<br />

Soll in einem PC-System eine Anwendung<br />

die Integrität einer anderen überprüfen,<br />

so muss sie dazu selbst vertrauenswürdig<br />

sein. Aber weil auch die Überprüfung<br />

dieser Annahme wiederum von einer anderen<br />

vertrauenswürdigen Anwendung<br />

zu erfolgen hat, bedarf es einer Kette von<br />

Überprüfungen, einer Chain of Trust. Damit<br />

nicht genug: An deren Anfang muss<br />

eine vollkommen vertrauenswürdige Instanz<br />

stehen, der Sicherheitsanker oder<br />

Root of Trust.<br />

Trusted Platform Module<br />

als Anker<br />

Im PC-Umfeld hat sich in den letzten Jahren<br />

das TPM (Trusted Platform Module,<br />

[1]) etabliert – als Hardware in Form eines<br />

Chips auf den Mainboards vieler PCs und<br />

Trusted Boot<br />

Bei PC-Systemen initialisiert ein vertrauenswürdiger<br />

Bootvorgang (Trusted Boot)<br />

die Chain of Trust. Er nimmt seinen An-<br />

TCG<br />

Die Trusted Computing Group (TCG, [2]) ist<br />

eine Standardisierungsorganisation, die AMD,<br />

Intel, HP, IBM und Microsoft 2003 gegründet<br />

haben und die heute über 100 Mitglieder<br />

zählt. Das ursprüngliche Ziel der TCG war die<br />

Definition eines Trusted Platform Module. Im<br />

Laufe der Zeit entstanden weitere Spezifikationen<br />

zu Fragen der Sicherheit von Computern<br />

und Netzwerken.<br />

In verschiedenen Arbeitsgruppen befasst<br />

sich die Non-Profit-Organisation mit Themen<br />

wie Infrastruktur-Sicherheit, Sicherheit <strong>für</strong><br />

mobile Endgeräte, PC-Clients, Servern und<br />

Storage-Devices oder mit Endpunkt-Sicherheit<br />

bei vernetzten Systemen.


fang mit dem Einschalten des Systems<br />

und der Ausführung des ROM-Bios-Code.<br />

Hier finden die grundlegenden Hardware-<br />

Initialisierungen, speziell die des TPM-<br />

Chips, statt.<br />

Damit dessen Funktionen schon beim<br />

Booten bereitstehen, hilft eine Bios-Erweiterung<br />

namens CRTM (Core Root of<br />

Trust for Measurement). Sie ist ebenfalls<br />

von der TCG spezifiziert und sorgt <strong>für</strong><br />

die Messung von Systemzuständen noch<br />

vor dem Start des Betriebssystems. Die<br />

Messung erfolgt durch eine Hashfunktion<br />

über relevante Datenbereiche und das<br />

Speichern der Ergebnisse in den PCR-<br />

Registern des TPM.<br />

Abbildung 1 zeigt, wie das TPM zunächst<br />

den Bios-Code selbst unter die Lupe<br />

nimmt, dann den Bios-Code von externer<br />

Hardware und schließlich Daten, die<br />

sich aus dem Ergebnis des Einlesens von<br />

Hardware-Informationen ergeben. Damit<br />

ist die vorliegende Hardwarekonfiguration<br />

bereits Bestandteil der Integritätsprüfung.<br />

Im weiteren Verlauf sucht das Bios<br />

nach einem bootfähigen Gerät. Findet es<br />

dabei eine Festplatte, liest es deren ersten<br />

Sektor ein, misst ihn und führt einen<br />

gefundenen MBR-Code aus.<br />

CRTM übergibt an den<br />

Master Boot Record<br />

An dieser Stelle endet die Zuständigkeit<br />

des CRTM <strong>für</strong> den Trusted Boot, der im<br />

MBR enthaltene Bootloader sorgt nun <strong>für</strong><br />

die Fortsetzung der Chain of Trust: Dieser<br />

Code muss folglich selbst den Code<br />

messen, den er im weiteren Verlauf lädt<br />

und ausführt.<br />

Später startet der Betriebssystem-Loader<br />

den Kernel des Betriebssystems, der<br />

wiederum entsprechende Mechanismen<br />

zum Messen von auszuführendem Code<br />

Alles<br />

zum ThemA<br />

Android<br />

Die Monatszeitschrift <strong>für</strong> Android-Fans,<br />

Smartphone- und Tablet Nutzer<br />

DigisuB:<br />

nur 35,90 €<br />

im Jahr (12 PDFs)<br />

+ Preisvorteil von 15%<br />

im Abo gegenüber<br />

dem PDF-Einzelkauf!<br />

TPM<br />

Das Trusted Platform Module ist ein von der<br />

TCG spezifizierter Chip, der Computer oder<br />

ähnliche Geräte um grundlegende Sicherheitsfunktionen<br />

erweitert. Sie umfassen kryptographische<br />

Algorithmen, einen Hardware-Zufallszahlengenerator<br />

sowie diverse Mechanismen<br />

<strong>für</strong> das sichere Verwalten und Ablegen von<br />

Schlüsseln und digitalen Zertifikaten. Aufgrund<br />

der hohen Sensibilität ist die Einhaltung der<br />

TPM-Spezifikation durch die Chiphersteller von<br />

großer Bedeutung: Schließlich dient er als Wurzel<br />

einer Vertrauenskette, auf deren Sicherheit<br />

die des gesamten Systems aufbaut.<br />

Vertrauen<br />

Um das Vertrauen des Anwenders in die Einhaltung<br />

der Spezifikation durch den Hersteller<br />

zu gewährleisten, sind im TPM diverse Zertifikate<br />

enthalten, die die Korrektheit des Herstellungsprozesses<br />

bestätigen sollen. Zudem<br />

enthält der Chip einige Schlüsselpaare, die<br />

das Modul eindeutig identifizieren und zum<br />

Verschlüsseln oder digitalen Signieren von Daten<br />

dienen. Auch der Nutzer generiert einige<br />

dieser Schlüssel. Beim ersten Erstellen der<br />

Keys verleiht der Anwender dem Modul seine<br />

Identität. Dieser Prozess heißt Inbesitznahme<br />

(Take Ownership). Einen guten Überblick über<br />

die Zusammenhänge findet sich in [3].<br />

Platform Configuration Register<br />

Eine wichtige Rolle <strong>für</strong> die Integritätsprüfung<br />

(Trusted Boot) spielen die so genannten Platform<br />

Configuration Registers (PCR). Es handelt<br />

sich um einen Satz von 16 Registern mit einer<br />

Datenbreite von 20 Byte. Das entspricht genau<br />

der Ergebnisgröße der kryptographischen<br />

Einwegfunktion SHA-1 (siehe unten). Die PCR<br />

sind beim Neustart oder Reset des Computers<br />

mit 0 initialisiert. Danach ist kein Setzen auf<br />

vorbestimmte Werte mehr möglich.<br />

Die einzige Möglichkeit der Modifikation besteht<br />

im Aufruf der so genannten TPM-Extend-<br />

Funktion. Sie ist definiert über »TPM_Extend[n]<br />

:= SHA‐1(PCR[n] || D)«. Das bedeutet: Ein Datum<br />

beliebiger Länge D wird mit dem aktuellen Wert<br />

des PCR-Registers Nummer n verkettet und<br />

darüber dann die kryptographische Einwegfunktion<br />

(Prüfsumme) SHA-1 berechnet. Das 20<br />

Byte lange Ergebnis landet im PCR-Register n.<br />

Bedingt durch die Eigenschaften der Einwegfunktion<br />

ist es praktisch nicht möglich, über<br />

diesen Mechanismus einen bestimmten Wert<br />

gezielt in das PCR zu schreiben. Das nutzt beispielsweise<br />

Trusted Boot, um die Messwerte<br />

D beim Booten manipulationssicher in einem<br />

PCR abzulegen.<br />

Remote Attestation Protocol<br />

Eine weitere API-Funktion zum Zugriff auf<br />

den TPM-Chip kommt bei der Überprüfung der<br />

Integrität mittels des Remote-Attestation-<br />

Protokolls zum Einsatz. Es handelt sich um<br />

TPM_Quote, die gezielt PCR-Registerwerte zusammen<br />

mit einer digitalen Signatur ausliest.<br />

Als Eingabe parameter erwartet sie einen Selektor<br />

<strong>für</strong> einen TPM-Schlüssel, der zum Signieren<br />

der Daten dient, eine Zufallszahl (Nonce),<br />

die in die Signaturberechnung eingeht, sowie<br />

die gewünschten PCR. Als Ergebnis bekommt<br />

der Anwender die PCR-Inhalte, signiert mit<br />

dem angegebene privaten Schlüssel.<br />

ab 29.09.<br />

Neu!<br />

Jetzt bestellen unter:<br />

android–user.de/digisub<br />

Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601<br />

E-Mail: abo@android-user.de


Sysadmin<br />

www.linux-magazin.de Trusted Boot 11/2011<br />

82<br />

(einschließlich Treibern) enthält. Da Systemaufrufe<br />

im Kernel letztlich auch die<br />

Programme starten, lassen sich so auch<br />

<strong>alle</strong> gestarteten Anwendungen messen.<br />

<strong>Linux</strong>: Trusted Boot mit<br />

Trusted Grub<br />

Wer solch ein sicheres System unter<br />

<strong>Linux</strong> aufsetzen will, hat zunächst die<br />

Unterstützung des TPM im Bios-Setup<br />

zu aktivieren. Beim ersten Mal erzeugt<br />

er dazu intern diverse Schlüssel („Inbesitznahme“,<br />

siehe Kasten „TPM“). In<br />

den darauf folgenden Schritten braucht<br />

er noch<br />

n den Bootmanager Trusted Grub und<br />

n einen Kernel mit aktiviertem IMA.<br />

Das im Folgenden vorgestellte Verfahren<br />

nutzt ein Patch auf die alte Grub-<br />

Version 0.9.7. Es gehört zum Trusted-<br />

Grub-Projekt, einer Zusammenarbeit der<br />

Firma Sirrix mit der Uni Bochum. Auf<br />

der Projektseite [4] stehen neben dem<br />

Source code ein Wiki und eine detaillierte<br />

Installationsanleitung bereit. Die aktuelle<br />

Version 1.1.5 stammt vom August 2010.<br />

Listing 1: »/boot/grub/grub‐check«<br />

01 792f802081e5193a304606026365797e69334adc (hd0,6)/boot/initrd.img‐2.6.35.4‐ima<br />

02 b6787ae6767deacefc5758ef7a4c0cdcbd0665ca (hd0,6)/boot/vmlinuz‐2.6.35.4‐ima<br />

01 ****Trusted GRUB now booting Ubuntu‐IMA<br />

02 ****Progress:****XX<br />

03 tGRUB: Verifiying (hd0,6)/boot/initrd.img‐2.6.35.4‐ima ‐> Integrity Error!<br />

04 tGRUB: Data integrity not Guaranteed, 1 problem(s) occurred<br />

05 tGRUB: Press ESC to stop booting or any other key to continue ...<br />

01 title Ubuntu‐IMA<br />

02 root (hd0,6)<br />

Listing 2: Trusted-Grub-Bootmeldungen<br />

Listing 3: Ausschnitt aus »/boot/​grub/​menu.lst«<br />

03 checkfile (hd0,6)/boot/grub/grub‐check<br />

04 kernel /boot/vmlinuz‐2.6.35.4‐ima root=/dev/sda7 vga=0x317 ima_tcb=1<br />

05 initrd /boot/initrd.img‐2.6.35.4‐ima<br />

01 # head ‐5 /sys/kernel/security/ima/ascii_runtime_measurements<br />

Ein installierter Trusted Grub im MBR der<br />

Festplatte setzt den TPM-unterstützten<br />

Bootprozess in folgender Weise fort:<br />

n Die TCG-Bios-Erweiterung (CRTM)<br />

prüft Grub Stage 1 (MBR-Code)<br />

n Grub Stage 1 prüft den Beginn von<br />

Grub Stage 2<br />

02 PCR template‐hash filedata‐hash filename‐hint<br />

03 10 0f7aa9805f51800bf1403c3de856c4bee66dfa21 ima dd16d778c4dbfdea44536cdc10890757684fe1e0<br />

boot_aggregate<br />

04 10 1dfdf1da8cca8248c420f365bbb7cb00ad59597e ima 648090bfe9593bcc2702461433d5c9ef64399ee5 /init<br />

05 10 afaefb735a3d93f5c6f66f7893b558f04438e8c0 ima 5fb8c8479f31574c435aa06d5bae6ae5a737ca81 /init<br />

06 10 08005d2b0ba3ee8c10c40f87eef76f3c4cea41d5 ima 195b25cdab5501b58858bc0923e51a0eab2447a3<br />

ld‐linux.so.2<br />

Listing 4: Hashliste im laufenden System<br />

- CPU im Real Mode<br />

- Startet bei »0xFFFF0«<br />

- Springt zu ROM-Bios-Start<br />

Power<br />

on<br />

07 10 63d7494f6da7fb0fc3332ab4fce2a2e1d45fbaf2 ima d3d48ff690110248aba853fdb0748bfe4dd64673 libc.so.6<br />

TPM<br />

Hash<br />

TPM_Extend()<br />

CRTM<br />

(HW Init)<br />

Bios externer<br />

Hardware<br />

(zum Beispiel VGA)<br />

ROM<br />

Bios<br />

(POST)<br />

PCR (Platform Configuration Registers)<br />

Sucht<br />

bootbare Devices<br />

Trusted<br />

Grub<br />

(Stage 1)<br />

Trusted<br />

Grub<br />

(Stage 2)<br />

MBR-Code<br />

(Bootmanager)<br />

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

Kernelmodule<br />

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

Kernel<br />

(IMA)<br />

Applikationen<br />

Bootsektor<br />

der Festplatte<br />

Bios-<br />

Erweiterungen<br />

Abbildung 1: Die Chain of Trust beginnt beim Einschalten des PCs und setzt sich im Idealfall lückenlos bis zum<br />

gestarteten Betriebssystem fort. Unter <strong>Linux</strong> hilft da Trusted Grub.<br />

n Grub Stage 2 prüft den Rest von Grub<br />

Stage 2<br />

n Grub Stage 2 prüft außerdem den Betriebssystemkernel<br />

und die zu ladenden<br />

Kernelmodule<br />

Darüber hinaus ermöglicht Trusted Grub<br />

das Vermessen beliebiger Dateien, was<br />

der Admin durch eine neue Option in der<br />

Grub-Konfigurationsdatei »/boot/grub/<br />

menu.lst« definiert: »checkfile (hdX,X?)/<br />

Pfad_zur_Datei«. Die Partition mit der angegebenen<br />

Datei ist in der Grub-üblichen<br />

Weise anzugeben, die Dateigröße ist jedoch<br />

auf 8 KByte begrenzt. Dieses File<br />

enthält eine Liste zu prüfender Dateien<br />

sowie deren korrekte Prüfsumme (SHA-1,<br />

Listing 1 zeigt ein Beispiel).<br />

Simple Grub-Konfiguration<br />

via »menu.lst«<br />

Beim Bootvorgang überprüft Grub der<br />

Reihe nach jeden Eintrag dieser Liste.<br />

Stimmt die berechnete Prüfsumme nicht<br />

mit der angegebenen überein, bricht der<br />

Bootprozess mit einer Meldung an den<br />

Nutzer ab. Mit der Abfrage aus Listing 2<br />

hat der Anwender die Wahl, ganz abzubrechen<br />

oder das Booten dennoch fortzusetzen.<br />

Ganz nebenbei landen hier die Prüfsummen<br />

über die Dateien stets mit<br />

TPM_Extend in den entsprechenden<br />

PCR-Registern des TPM. Beim Start des<br />

<strong>Linux</strong>-Kernels durch Trusted Grub übergibt<br />

der Bootloader die Zuständigkeit <strong>für</strong><br />

die Chain of Trust an den Kernel.


Die Funktionen der TPM-gestützten Integritätsprüfung<br />

im Kernel existieren bereits<br />

seit 2005. Ein entsprechendes Kernelpatch<br />

<strong>für</strong> die Integrity Measurement<br />

Architecture (IMA) stammt von IBM Research<br />

([5], [6]).<br />

Die Integrity Measurement<br />

Architecture unter <strong>Linux</strong><br />

Seit Version 2.6.30 ist IMA offizieller Bestandteil<br />

des <strong>Linux</strong>-Kernels – aber üblicherweise<br />

nicht aktiviert, sodass Neu-<br />

Übersetzen erforderlich ist, und zwar mit<br />

diesen Einstellungen:<br />

n CONFIG_IMA=Y<br />

n CONFIG_IMA_MEASURE_PCR_IN-<br />

DEX=10<br />

n CONFIG_IMA_AUDIT=Y<br />

n CONFIG_IMA_LSM_RULES=Y<br />

Außerdem bedarf es einer zusätzlichen<br />

Bootoption <strong>für</strong> den Kernel »ima_tcb=1«.<br />

Einen Ausschnitt aus der Grub-Konfiguration<br />

mit aktivem IMA sowie einer Grub-<br />

Checkdatei zeigt Listing 3.<br />

IMA nutzt die so genannten LSM-Hooks<br />

(Linx Security Module) im Kernel, auf die<br />

beispielsweise auch Mandatory-Access-<br />

Control-Erweiterungen (MAC) wie SE<br />

<strong>Linux</strong> zurückgreifen. An diesen Hooks<br />

können Programmierer Kernel-interne<br />

Funktionen registrieren, die beim Zugriff<br />

auf sicherheitsrelevante Funktionen oder<br />

Systemcalls aufgerufen werden. Die IMA-<br />

Funktionen startet der Kernel etwa an<br />

jenen Hooks, die der Kernel vor jedem<br />

Laden ausführbarer Dateien durchläuft.<br />

Dies betrifft Systemcalls wie »mmap()«,<br />

»execve()« und »sys_init_module()«.<br />

Zuerst kommt immer der<br />

IMA-Code<br />

So ist sichergestellt, dass vor jedem Laden<br />

oder Ausführen von Kernelmodulen,<br />

Bibliotheken, Binärdateien oder Skripten<br />

der IMA-Code läuft. Dieser Code berechnet<br />

– analog zum vorherigen Booten –<br />

Trusted Boot 11/2011<br />

Sysadmin<br />

www.linux-magazin.de<br />

83<br />

Listing 5: PCR-Register des TPM<br />

# head ‐10 /sys/kernel/security/tpm0/ascii_Bios_measurements<br />

01 6226702b792e3ddd4b33491ce19375c671a8f8a7 08 [S‐CRTM Version]<br />

02 4bb5a4e9f0f392abfa4eab2202b3bd924621dc63 01 [POST CODE]<br />

03 1ea0e02ec49aaf3fda0bc8186da2cf246d7cfecf 01 [POST CODE]<br />

04 dd261ca7511a7daf9e16cb572318e8e5fbd22963 01 [POST CODE]<br />

05 df22cabc0e09aabf938bcb8ff76853dbcaae670d 01 [POST CODE]<br />

06 a0d023a7f94efcdbc8bb95ab415d839bdfd73e9e 01 [POST CODE]<br />

07 05ce5aa3a72f4dccdaa251bbac738a03296be1f7 01 [POST CODE]<br />

08 dd261ca7511a7daf9e16cb572318e8e5fbd22963 01 [POST CODE]<br />

09 df22cabc0e09aabf938bcb8ff76853dbcaae670d 01 [POST CODE]<br />

10 a0d023a7f94efcdbc8bb95ab415d839bdfd73e9e 01 [POST CODE]<br />

ADMIN<br />

Netzwerk & Security<br />

Online-Archiv<br />

Rund 2.000 Seiten Artikel,<br />

Studien und Workshops aus<br />

fünf Jahren Technical Review<br />

+<br />

nur<br />

4,-e*<br />

im Monat<br />

Onlinezugriff auf <strong>alle</strong><br />

Heftartikel aus dem<br />

ADMIN-<strong>Magazin</strong><br />

der Jahrgänge<br />

2009 bis 2011!<br />

Volltextsuche<br />

Praxisrelevante Themen<br />

<strong>für</strong> <strong>alle</strong> IT-Administratoren<br />

* Angebot gültig nur<br />

<strong>für</strong> Abonnenten eines<br />

Print- oder vollen<br />

digitalen ADMIN Abos<br />

Bestellen Sie unter: www.admin-magazin.de/archiv


Sysadmin<br />

www.linux-magazin.de Trusted Boot 11/2011<br />

84<br />

TPM<br />

Attesting Party<br />

IMA-Messwerte<br />

eine Prüfsumme über die entsprechende<br />

Datei. Das Ergebnis landet nicht in jedem<br />

Fall im TPM-Chip, sondern nur bisher<br />

ungeprüfte Dateien oder Dateien mit veränderter<br />

Prüfsumme.<br />

Ein Cache-Mechanismus sorgt da<strong>für</strong>, dass<br />

dieser Vorgang in der Praxis nicht zu<br />

spürbaren Performance-Einbußen führt.<br />

Zudem hält IMA im Kernel eine Tabelle<br />

mit den Namen <strong>alle</strong>r gemessenen Dateien<br />

und ihren Prüfsummen. Diese Liste enthält<br />

stets den aktuellen Zustand der bisher<br />

ausgeführten Dateien. Ein Vergleich<br />

dieser Prüfsummen mit Sollwerten (Prüfsummen<br />

über die integren Versionen der<br />

entsprechenden Dateien) stellt Integritätsverletzungen<br />

fest.<br />

Prüfsummen im Chip mit<br />

TPM_Extend<br />

Auch die Prüfsummen aus dieser Liste<br />

sind mit TPM_Extend im TPM-Chip abgelegt.<br />

Ändert sich die Checksumme einer<br />

2. Nonce (160 Bit)<br />

3. Sig<br />

Nonce und PCR<br />

(TPM-signiert),<br />

Liste mit<br />

Messwerten<br />

1. Erstellt sichere Zufallszahl (Nonce)<br />

Datei im laufenden System, so finden<br />

sich die unterschiedlichen Prüfsummen<br />

in den Werten des PCR-Registers. Die Tabelle<br />

im Kernel enthält jedoch nur die<br />

aktuelle Prüfsumme der Dateien.<br />

Zur Auswertung dieser Tabelle bietet IMA<br />

eine Schnittstelle zum Userspace an: Die<br />

Ascii-Repräsentation der Tabelle kann der<br />

Admin in »/sys/kernel/security/tpm0/<br />

ascii_Bios_measurements« auslesen (einen<br />

Ausschnitt zeigt Listing 4), in Listing<br />

5 wertet das <strong>Linux</strong>-Bordwerkzeug Head<br />

die PCR-Register des TCM aus.<br />

Überprüfung<br />

Ch<strong>alle</strong>nging Party<br />

4. Prüft TPM-Signatur und Nonce<br />

5. Validiert Liste mit Messwerten<br />

gegen Integritätswerte aus PCR<br />

6. Validiert individuelle Liste mit Messwerten<br />

über Datenbank mit Fingerprints<br />

Abbildung 2: Das Remote-Attestation-Protokoll erlaubt die Überprüfung der Integrität durch ein entferntes<br />

System. Leider existiert da<strong>für</strong> noch keine Implementierung.<br />

Das Prinzip von Trusted Boot ermöglicht<br />

aber keine Garantie eines integren Bootvorgangs.<br />

Dazu müsste das System die<br />

Prüfsummen ständig gegen Sollwerte<br />

vergleichen und bei jeder Abweichung<br />

sofort reagieren wie beim Secure-Boot-<br />

Verfahren. Bei Trusted Boot jedoch bricht<br />

der Bootvorgang auch bei modifizierten<br />

Daten nicht ab. Stattdessen gestattet es<br />

der Prozess aber, ein nicht-integres System<br />

zu erkennen. Die Reaktion auf eine<br />

solche Erkennung obliegt der prüfenden<br />

Instanz und ist nicht Bestandteil von<br />

Trusted Boot.<br />

Dieser Integritätscheck des Systems<br />

bildet den Kern von Trusted Boot. Die<br />

Sache hat <strong>alle</strong>rdings einen Haken: Die<br />

Überprüfung eines gestarteten PC kann<br />

prinzipbedingt nicht durch den PC selbst<br />

erfolgen (Henne-Ei-Problem). Stattdessen<br />

sieht IMA eine Überprüfung durch eine<br />

vertrauenswürdige externe Instanz vor.<br />

Remote Attestation mit<br />

Ch<strong>alle</strong>nge und Response<br />

Dieser Vorgang wird als „Remote Attestation“<br />

bezeichnet und läuft im so genannten<br />

Ch<strong>alle</strong>nge-Response-Verfahren (siehe<br />

Abbildung 2) in den sechs folgenden<br />

Schritten ab:<br />

n Die prüfende Seite erzeugt eine Zufallszahl<br />

(Nonce), (1)<br />

n Sie überträgt die Nonce zum Zielsystem<br />

(Ch<strong>alle</strong>nge), (2)<br />

n Das Zielsystem macht einen TPM_<br />

Quote-Request, lässt die Nonce und<br />

den PCR-Wert signieren und schickt<br />

das Ergebnis zusammen mit der Hashliste<br />

zurück, (3)<br />

n Die prüfende Seite untersucht Signatur<br />

und Nonce auf Authentizität und Aktualität<br />

des PCR-Werts, (4)<br />

n Sie rechnet den PCM-Wert (TPM_Extend)<br />

mit Hilfe der erhaltenen Hashliste<br />

nach, bei Gleichheit ist die Liste<br />

authentisch, (5)<br />

n Sie prüft <strong>alle</strong> Hashwerte aus der Liste<br />

gegen Referenzwerte aus einer Datenbank,<br />

bei Gleichheit sind die entsprechenden<br />

Dateien auf dem Zielsystem<br />

integer, (6)<br />

Variante mit Smartcard und Vollverschlüsselung<br />

Smartcards sind da<strong>für</strong> ausgelegt, kryptographische<br />

Operationen auszuführen, Zufallszahlen<br />

zu generieren oder Daten und Schlüssel sicher<br />

aufzubewahren. Sie agieren als Ch<strong>alle</strong>nging<br />

Party und übernehmen das Remote-Attestation-<br />

Protokoll sowie die Prüfung der Checksummen.<br />

Das Szenario besteht darin, eine sicherheitsrelevante<br />

Anwendung auf dem PC erst nach<br />

erfolgreicher Integritätsprüfung starten zu<br />

dürfen. Die Idee dahinter ist, diese Anwendung<br />

in einem verschlüsselten Container auf dem PC<br />

abzuspeichern, dessen Schlüssel auf der Smartcard<br />

gespeichert ist. Die Smartcard liefert ihn<br />

erst an den PC aus, nachdem sie die Integrität<br />

des Systems festgestellt hat.<br />

Vertrauenswürdige Instanz<br />

Zur Abwicklung des Remote-Attestation-Protokolls,<br />

zur Ansteuerung der Smartcard sowie<br />

zum Mounten des verschlüsselten Containers<br />

benötigt man eine Anwendung (Loader), die<br />

außerhalb des Containers gespeichert ist (Abbildung<br />

3). In Schritt 1 startet der Loader, er initialisiert<br />

die Smartcard und steuert den Dialog<br />

mit dem Anwender. Eine Authentisierung des<br />

Nutzers an der Smartcard schaltet diese frei<br />

(2). Dann führt der Loader das Remote-Attestation-Protokoll<br />

gegen die Smartcard durch (3).<br />

Erst nach erfolgreicher Prüfung der Integrität<br />

liefert diese den Schlüssel zum Mounten des<br />

verschlüsselten Containers aus (4). Damit kann<br />

der Loader den Container mounten (5) und die<br />

darin enthaltene Applikation starten (6).


So weit die Theorie, doch leider mangelt<br />

es immer noch an einer nutzbaren Implementierung<br />

dieses Protokolls.<br />

Varianten mit Smartcard<br />

und Crypto-Filesystemen<br />

Als Variante der Überprüfung kämen<br />

auch Smartcards als Gegenstelle in Frage,<br />

die die Rolle der vertrauenswürdigen Instanz<br />

übernehmen, auf der das Remote-<br />

Attestation-Protokoll implementiert ist.<br />

Die im Kasten „Variante mit Smartcard<br />

und Vollverschlüsselung“ vorgeschlagene<br />

Architektur sieht neben Trusted<br />

Boot eine 2-Faktor-Authentisierung des<br />

Nutzers sowie eine Vollverschlüsselung<br />

der Festplatte vor, was Integrität und<br />

Vertraulichkeit sämtlicher Daten sicherstellen<br />

würde.<br />

Doch ganz so einfach funktioniert auch<br />

das in der Praxis nicht, gilt es doch einige<br />

Hürden zu überwinden: So wird<br />

die Smartcard aufgrund ihrer begrenzten<br />

Ressourcen gewiss nicht <strong>alle</strong> korrekten<br />

Prüfsummen aufnehmen können.<br />

Ebenso wird das Protokoll einige Zeit in<br />

Anspruch nehmen.<br />

Weil der <strong>Linux</strong>-Kernel auch gleich Mechanismen<br />

mitbringt, um die Festplatten<br />

zu verschlüsseln (Dm-crypt, Devicemapper<br />

und das Crypto-API, [7]), ist<br />

ein noch komplexeres und umfassenderes<br />

Konzept denkbar. Abbildung 4 zeigt<br />

2. Logon<br />

schematisch die Erweiterung des weiter<br />

oben beschriebenen Verfahrens.<br />

Hier liegen außer den Partitions-Verwaltungsdaten<br />

keine unverschlüsselten Daten<br />

mehr auf der Festplatte. Das System<br />

bootet unter Verwendung von CRTM und<br />

Trusted Grub (Schritte 1 bis 4) von einem<br />

USB-Medium. Eleganterweise verwendet<br />

der Admin einen USB-Stick mit integriertem<br />

Smartcardleser und hat so <strong>alle</strong><br />

Application<br />

(encrypted)<br />

Loader (encrypted)<br />

4. Key 1. Execution<br />

3. Remote attestation<br />

6. Execution<br />

Application<br />

(unencrypted)<br />

Loader (encrypted)<br />

5. Decryption<br />

Festplattenspeicher<br />

Abbildung 3: Ablauf des Remote-Attestation-Protokolls mit einer Smartcard zum Schutz einer Applikation.<br />

Trusted Boot 11/2011<br />

Sysadmin<br />

www.linux-magazin.de<br />

85


Sysadmin<br />

www.linux-magazin.de Trusted Boot 11/2011<br />

86<br />

Power<br />

on<br />

TPM<br />

1. Start<br />

Zugangsdaten auf dem Stick. Die Initial<br />

Ramdisk enthält den notwendigen Code,<br />

um die Smartcard anzusprechen, die<br />

Nutzerauthentisierung durchzuführen,<br />

eventuell sogar schon eine Integritätsprüfung<br />

zu triggern und bei Erfolg den<br />

Schlüssel <strong>für</strong> die transparente Plattenverschlüsselung<br />

aus der Smartcard zu lesen<br />

(Schritte 5 bis 8). Dann kann der Rechner<br />

das Root-Dateisystem mounten und den<br />

Bootvorgang fortsetzen (Schritte 9 bis<br />

11). Danach beginnen die dargestellten<br />

Schritte zum Start der sensitiven Applikation<br />

(Schritte 12 bis 16).<br />

Natürlich ist auch dieser Ansatz nicht frei<br />

von Schwierigkeiten: So ist die Administration<br />

der Smartcards und der USB-Sticks<br />

nicht <strong>für</strong> eine größere Nutzergruppe geeignet.<br />

Eine so komplexe Architektur<br />

eignet sich ohnehin eher <strong>für</strong> dedizierte<br />

Systeme mit hoher Sensitivität, die den<br />

Administrationsaufwand und den Overhead<br />

rechtfertigen.<br />

Windows<br />

Bios<br />

2. Boot von USB<br />

Eine detaillierte Untersuchung der Sicherheit<br />

von Windows Vista [9] kommt<br />

zu der Schlussfolgerung, Microsoft habe<br />

die Sicherheit von Windows gegenüber<br />

früheren Versionen zwar deutlich verbessert,<br />

ein durchgängiges Konzept des<br />

Herstellers im Sinne der TCG sei <strong>alle</strong>rdings<br />

nicht erkennbar, zumindest nicht<br />

out-of-the-box.<br />

Microsoft hat das aber wohl erkannt<br />

und arbeitet Schritt <strong>für</strong> Schritt daran.<br />

Auf der Build-Konferenz im September<br />

2011 stellten die Entwickler ihren neuen<br />

„Secure Boot“ genannten Ansatz unter<br />

Windows 8 vor, der über UEFI (Unified<br />

Extensible Firmware Interface, [10]) nur<br />

signierte Bootloader erlaubt und so wie<br />

bei Googles Chrome OS das Betriebssys-<br />

USB-<br />

Stick<br />

3. Bootloader<br />

6. Authentifizierung<br />

Trusted<br />

Grub<br />

4. Bootmenü<br />

5. SC-Init<br />

Initial<br />

Ramdisk<br />

7. Integritätscheck<br />

(optional)<br />

PCR (Platform Configuration Registers)<br />

9. Mount<br />

8. HD-Key<br />

10. booten<br />

des Kernels<br />

OS-<br />

Kernel<br />

11. bootet OS<br />

OS<br />

12. Application<br />

loader<br />

sungen per TPM-Chip nicht fort. Die Philosophie<br />

zum Schutz der Integrität sieht<br />

hier anders aus: Bitlocker stellt via TPM<br />

sicher, dass er Integritätsverletzungen bis<br />

zum Start des Kernels erkennt. Zudem<br />

gewährleistet Bitlocker die Vertraulichkeit<br />

<strong>alle</strong>r Daten auf der Festplatte durch<br />

Vollverschlüsselung.<br />

So verhindern Admins von Microsoft-<br />

Systemen, dass ein potenzieller Angreifer<br />

offline eine gezielte Modifikation bestimmter<br />

Dateien vornimmt. Dedizierte<br />

Funktionen wie Driver Signing, Patch<br />

Guar d und User Account Control ergänzen<br />

diese Maßnahmen.<br />

MS setzt auf UEFI<br />

13. Authentifizierung<br />

15. Anwendungs-<br />

Key<br />

Anwendung<br />

Application<br />

loader<br />

16. Anwendungsstart<br />

14. Integritätscheck<br />

Abbildung 4: Eine denkbare Realisierung von Secure Boot bei Verwendung einer Smartcard als überprüfender<br />

Instanz und <strong>Linux</strong>-Vollverschlüsselung der Festplatte.<br />

Windows bietet in neueren Versionen (ab<br />

Windows Vista) eine Unterstützung des<br />

TPM-Chips durch die Pre-Boot-Authentisierung<br />

und die Festplattenverschlüsselung<br />

Bitlocker [8]. Die Software misst<br />

die Integrität des Systems in der frühen<br />

Bootphase, was dem Prinzip von Trusted<br />

Grub entspricht.<br />

Danach bricht die Chain of Trust jedoch<br />

ab, der Kernel setzt die Integritätsmestem<br />

schützen soll. Die entsprechenden<br />

UEFI-Chips sind <strong>alle</strong>rdings noch recht<br />

selten auf Hardware zu finden.<br />

Die Absicherung der Integrität von <strong>Linux</strong>-Applikationen<br />

lässt sich durch eine<br />

Kombination aus CRTM, Trusted Grub<br />

und IMA zu einem nahtlosen Trusted<br />

Boot realisieren. So erkennen Admins<br />

Modifikationen an sicherheitsrelevanten<br />

Applikationen, etwa die zum Erzeugen<br />

digitaler Signaturen.<br />

Die Anwendbarkeit in der Praxis hängt<br />

<strong>alle</strong>rdings von einem zuverlässigen Überprüfungsverfahren<br />

ab, und leider fehlt<br />

immer noch eine nutzbare, leicht zu<br />

administrierende Implementierung des<br />

Remote-Attestation-Protokolls. Im Vergleich<br />

zu Windows jedoch findet sich in<br />

IMA auf jeden Fall eine weitaus konsequentere<br />

Realisierung des Trusted-Boot-<br />

Konzepts. (mfe)<br />

n<br />

Infos<br />

[1] Christoph Wegener, Wilhelm Dolle, „Höllenglut“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 04/​06, S. 100<br />

[2] Trusted Computing Group:<br />

[http:// www. trustedcomputinggroup. org]<br />

[3] Brandl, Rosteck, „Technology, Implementation<br />

and Application of the Trusted<br />

Computing Group Standard (TCG)“: Infineon<br />

White Paper, 2004<br />

[4] Trusted Grub: [https:// projects. sirrix. com/​<br />

trac/ trustedgrub/]<br />

[5] IBM Research: [http:// domino. research.​<br />

ibm. com/ comm/ research_people. nsf/​<br />

pages/ sailer. ima. html]<br />

[6] Sailer, Zhang, Jaeger, van Doorn, „Design<br />

and Implementation of a TCG- based Integrity<br />

Measurement Architecture“: 13th<br />

USENIX Security Symposium, 2004<br />

[7] Markus Feilner, Norbert Graf, „Sicher weggeschlossen“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 06/​11, S. 50<br />

[8] Bitlocker:<br />

[http://windows.microsoft.com/en-US/<br />

windows7/products/features/bitlocker]<br />

[9] Thomas Müller, „Trusted Computing mit<br />

Windows Vista und Windows Server Longhorn“:<br />

http://www.xnos.org/fileadmin/<br />

labs/tc/TrustedVistaTM06.pdf]<br />

[10] Unified Extensiible Firmware Interface:<br />

[http:// en. wikipedia. org/ wiki/ Unified_Extensible_Firmware_Interface]<br />

Der Autor<br />

Falk Nedwal, CISSP, arbeitet als Entwickler im<br />

Bereich Embedded Security in Berlin.


Admin-mAGAZin<br />

im JAhres-Abo<br />

Jede Ausgabe des Admin-<strong>Magazin</strong>s bietet praktisch anwendbares Wissen<br />

von ausgewiesenen Experten und ausführliche Hintergrundberichte <strong>für</strong> <strong>alle</strong><br />

Systemverwalter von <strong>Linux</strong>, Unix und Windows. Die Schwerpunkte reichen von<br />

Storage und Backup bis hin zu Netzwerk-Themen und Security.<br />

Ein Sonderteil hilft Admins heterogener Welten.<br />

15 % sparen<br />

Jetzt bestellen unter:<br />

www.admin-magazin.de/abo<br />

sichern sie sich ihr<br />

GrAtis Admin t-shirt!<br />

• Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@admin-magazin.de<br />

Mit dem Jahres-Abo erhalten Sie 6 Ausgaben des Admin-<strong>Magazin</strong>s zum Vorzugspreis von E 49,90 * statt E 58,80 *<br />

(Lieferung frei Haus).<br />

* Preise gelten <strong>für</strong> Deutschland. Schweiz: SFr 99,90; Österreich: E 54,90; anderes Europa: E 59,90


Forum<br />

www.linux-magazin.de Recht 11/2011<br />

88<br />

Lizenzfragen bei der plattformübergreifenden Programmierung<br />

<strong>Einer</strong> <strong>für</strong> <strong>alle</strong><br />

Einmal entwickeln und auf <strong>alle</strong>n möglichen Systemen laufen lassen – passend zum Schwerpunkt dieser Ausgabe<br />

erklärt der Recht-Artikel diesmal die lizenzrechtlichen Auswirkungen. Fred Andresen<br />

© Helder Almeida, 123Rf<br />

Programmierer sind faul, heißt es. Viele<br />

geben das sogar selbst offenherzig zu,<br />

aber immer mit dem Hintergedanken,<br />

dass es ja eher ein Zeichen <strong>für</strong> Intelligenz<br />

ist, sich unnötige Arbeit zu ersparen. Wer<br />

also schon bei der Software-Erstellung<br />

damit rechnet, dass seine Anwendungen<br />

nicht nur auf einem einzigen Zielsystem<br />

laufen werden, wer seine Software <strong>für</strong><br />

möglichst viele verschiedene Systeme<br />

anbieten will, der setzt auf plattformneutrale<br />

Programmierung.<br />

Erschwerend kommt hinzu, dass die Benutzer<br />

neben dem funktionalen Teil eine<br />

grafische Oberfläche erwarten, ja sogar<br />

als selbstverständlich voraussetzen. Einfach<br />

gelagerte Fälle, in denen es früher<br />

genügt haben mag, ein Bash-Skript aufzusetzen,<br />

das sich an den Posix-Standard<br />

hält, ein paar Hundert Zeilen Perl-Code<br />

oder ein Standard-C-Tool herzustellen,<br />

in dem vor der eigentlichen Arbeit die<br />

wichtigen Systemvariablen abgefragt und<br />

die Umgebung analysiert werden, gibt es<br />

nicht mehr. Es braucht Fenster, Schaltflächen<br />

und möglichst interaktive Grafikelemente,<br />

damit der Benutzer nicht nur<br />

schalten und walten kann, wie er will,<br />

sondern sich auch noch heimisch fühlt.<br />

Am besten, das Programm sieht so aus<br />

und lässt sich bedienen wie <strong>alle</strong>s andere,<br />

was er auf seinem System kennt.<br />

Alle können HTML<br />

Der eine Ansatz, dies zu erreichen, ist eine<br />

Webanwendung. Moderne Browser können<br />

fast <strong>alle</strong>s darstellen und bieten darüber<br />

hinaus auch hinreichende Sicherheit<br />

<strong>für</strong> Privatgebrauch und unternehmenskritische<br />

Anwendungen, und mit etwas<br />

Mühe bringt man seine Web-App sogar<br />

dazu, auf fast <strong>alle</strong>n Browsern nahezu<br />

identisch auszusehen – was nicht nur <strong>für</strong><br />

Corporate-Identity-Fetischisten mitunter<br />

wichtig ist. Dem stehen ein paar Nachteile<br />

gegenüber: Eine Webanwendung ist<br />

stets ein Fremdprogramm, sie integriert<br />

sich nicht in den Desktop und dem Nutzer<br />

vertraute Features wie Drag & Drop<br />

lassen sich kaum realisieren.<br />

Lizenzrechtlich ist die Webanwendung<br />

dennoch die ideale Variante <strong>für</strong> jeden<br />

Entwickler: Weil lediglich die Darstellung<br />

der Daten über den Browser und dessen<br />

standardisierte Schnittstellen erfolgt, die<br />

eigentliche Datenverarbeitung jedoch der<br />

Server übernimmt, stellt sich hier erst<br />

gar nicht die Frage einer Weitergabe der<br />

Software und der damit verbundenen Lizenzprobleme.<br />

Selbstverständlich lässt sich auch die Datenverarbeitung<br />

ganz oder teilweise auf<br />

den Benutzer-PC übertragen, etwa per<br />

Javascript, dann wird der Quellcode des<br />

Skripts jedoch im Klartext übermittelt.<br />

Das offenbart schon das erste Lizenzproblem:<br />

Javascript kann freie Software<br />

sein – oder nicht. Für den (Web-)Anwendungsentwickler<br />

stellen sich drei Fragen:<br />

Kann ich fremde (also von Dritten erstellte)<br />

Javascripts in meine Seite einbinden?<br />

Und wenn ja, unter welchen Voraussetzungen?<br />

Färbt ein GPL-Javascript<br />

auf meine Webanwendung ab, muss ich<br />

diese also unter eine freie Lizenz stellen?<br />

Welche Lizenz nutze ich am besten <strong>für</strong><br />

meine eigenen Skripte?<br />

Die erste Frage ist leicht beantwortet:<br />

Neben der bloßen Nutzung fremder Software<br />

liegt hier auch eine Verbreitung<br />

vor, weil der Javascript-Code übermittelt<br />

wird. Der Seitenbetreiber benötigt<br />

daher nicht nur ein Nutzungs-, sondern<br />

eben auch das urheberrechtliche Verbreitungsrecht<br />

<strong>für</strong> das „Programm“. Handelt<br />

es sich bei dem Javascript-Code nicht<br />

lediglich um einen ganz trivialen Ansatz,<br />

schützt auch das Urheberrecht den Code,<br />

eine entsprechende Lizenz des ursprünglichen<br />

Programmierers ist erforderlich.<br />

Im Zweifel sollte man stets davon aus-


Abbildung 1: Hat die Javascript-F<strong>alle</strong> beschrieben,<br />

Richard Stallman.<br />

gehen, dass fremde Skripte nicht trivial<br />

sind, sondern die <strong>für</strong> das Urheberrecht<br />

erforderliche Schöpfungshöhe aufweisen.<br />

Wer also seinen Code nicht vollständig<br />

selbst entwickelt hat, sollte auf freie Software<br />

setzen, etwa Javascript-Dateien, die<br />

ausdrücklich unter die GPL oder LGPL<br />

gestellt sind.<br />

Ist fremder Code nicht in eigene Skriptdateien<br />

eingebunden, sondern liegen diese<br />

etwa als separate ».js«-Dateien vor, wird<br />

das Abfärben der freien Lizenz in der<br />

Regel an der erforderlichen Bearbeitung<br />

oder Übernahme ins eigene Programm<br />

scheitern, das Skript bleibt damit ein unabhängiger<br />

Programmbestandteil. Damit<br />

tritt die Verpflichtung, die eigene Webanwendung<br />

vollständig unter die im freien<br />

Skript verwendete Lizenz zu stellen,<br />

nicht ein.<br />

Die programmtechnische „Unabhängigkeit“<br />

wird aber mit zunehmender Verbundenheit<br />

dieses und gleich lizenzierter<br />

Skripte in der Web-App verschwinden,<br />

was letztlich doch wieder zur lizenzrechtlichen<br />

Abfärbung führt. Besteht die Web-<br />

App lediglich aus einem Container, in<br />

dem nahezu ausschließlich GPL-Skripte<br />

lagern, wird auch die Web-App unter die<br />

GPL zu stellen sein.<br />

Nicht nur, um solche Probleme <strong>für</strong> die<br />

Community auszuschließen, sondern<br />

auch schon aus Überzeugung sollte der<br />

Programmierer daher freien Skripten<br />

auch bei der Eigenentwicklung den Vorrang<br />

geben. Unternehmenskritische Algorithmen<br />

und Daten sind ohnehin dem<br />

Server vorbehalten, womit auch die dritte<br />

Frage letztlich nur eine Antwort zulässt:<br />

Freie Programme oder Skripte sind auch<br />

hier mit Sicherheit die beste Wahl. Außerdem<br />

löst man damit das Problem, das<br />

beispielsweise die FSF als „Javascript-<br />

Trap“ bezeichnet [1] und <strong>für</strong> das sie mit<br />

gleicher Feder Lösungsvorschläge aufzeichnet<br />

(Abbildung 1).<br />

Affero<br />

Eine speziell <strong>für</strong> Webanwendungen gestaltete<br />

Lizenz ist die GNU Affero General<br />

Public License (AGPL, [2]). Sie gewährleistet<br />

die Freiheit <strong>für</strong> den Benutzer auch<br />

bei Software, die als Dienst über das Netz<br />

zur Verfügung steht. Weil mehr und mehr<br />

Anwendungen in Form von Software as<br />

a Service angeboten werden, die normale<br />

GPL dabei jedoch nicht greift, weil die<br />

Programme selbst ja nicht weitergegeben<br />

werden, hatte ursprünglich die Firma<br />

Affero [3] zusammen mit der FSF diese<br />

Lizenz entwickelt, die eine einfache Erweiterung<br />

der GPL darstellt.<br />

Nach dieser Lizenz muss auch der<br />

Webapplikations-Anbieter die vollständigen<br />

Programmquellen verfügbar machen.<br />

Im Ergebnis die „bessere“ GPL, ist diese<br />

Lizenz natürlich auch die beste Wahl<br />

<strong>für</strong> Webanwendungs-Entwickler. Für die<br />

derzeit aktuelle AGPL-Version 3 ist ausschließlich<br />

die Free Software Foundation<br />

verantwortlich.<br />

Template: Java<br />

Eine Programmiersprache verfolgt einen<br />

ganz anderen Ansatz: Den auf einem<br />

beliebigen System erstellten Quellcode<br />

übersetzt ein Compiler in Bytecode, der<br />

dann auf beliebigen Zielsystemen, <strong>für</strong><br />

die ein passender Interpreter verfügbar<br />

ist, ausgeführt wird. Wenn dann auch<br />

die Oberflächen noch identisch aussehen<br />

oder sich nahtlos ans Zielsystem<br />

anpassen, handelt es sich um die konsequenteste<br />

Form plattformübergreifender<br />

Programmierung.<br />

Das Urgestein der Multi-Plattform-Programmierung<br />

ist sicherlich Java, das<br />

– ursprünglich von Sun Microsystems<br />

entwickelt und lange Zeit streng gehütet<br />

– inzwischen auch unter die freie Lizenz<br />

GPL gestellt ist. So ganz frei ist Java<br />

damit <strong>alle</strong>rdings noch nicht, denn Sun<br />

behielt das Recht am Markennamen und<br />

damit auch an der Referenzimplementierung.<br />

Es geht darum, was richtiges Java<br />

ist und was nicht. Neben der offiziellen<br />

Java-Runtime [4] hat sich die Community-gepflegte<br />

Open-JDK-Umgebung [5]<br />

zum Vorreiter in Sachen Entwicklung<br />

gemausert und bietet vieles, was Suns<br />

Runtime-Environment nicht schafft. Andererseits<br />

laufen viele Java-Programme<br />

zuverlässig nur mit der originalen Version,<br />

unter anderem so publikumswirksame<br />

Anwendungen wie etwa bestimmte<br />

Onlinebanking-Applikationen.<br />

Nach einigem Hin und Her ist Oracle nun<br />

auch auf das Open JDK umgeschwenkt<br />

und nutzt es als Standard-Runtime-Umgebung.<br />

Blöd nur, dass es neben dem Open<br />

JDK auch weitere freie Runtimes gibt,<br />

etwa die des Apache-Harmony-Projekts<br />

[6], die schon <strong>alle</strong>in deswegen von entscheidender<br />

Bedeutung ist, weil Android<br />

darauf aufsetzt. Und zum plattformneutralen<br />

Programmieren gehört eben die<br />

Ausrichtung auf damit angetriebene mobile<br />

Geräte. Was als „echtes“ Java verkauft<br />

wird, muss daher nicht unbedingt<br />

auch auf Android laufen. Und was auf<br />

Android läuft, kann damit nicht immer<br />

als standardkonformes Java bezeichnet<br />

werden (Abbildung 2).<br />

Lizenztechnisch ein großer Unterschied:<br />

Die offizielle Java-SE-Plattform wird unter<br />

dem Oracle Binary Code License Agreement<br />

[7] vertrieben, die anderen sind<br />

echte freie Software. Für den Entwickler<br />

kein (Lizenz-)Problem, er darf Java-<br />

Programme nach Belieben in Form von<br />

freier Software oder auch als proprietäre<br />

Closed-Source-Anwendungen vertreiben.<br />

Abbildung 2: Was auf Android-Geräten läuft, muss<br />

nicht immer standardkonformes Java sein, und was<br />

echtes Java ist, muss nicht auf Android laufen.<br />

© samsung.com<br />

Recht 11/2011<br />

Forum<br />

www.linux-magazin.de<br />

89


Forum<br />

www.linux-magazin.de Recht 11/2011<br />

90<br />

© Fmihail1981, 123RF<br />

Abbildung 3: Einmal entwickeln und damit <strong>alle</strong> anvisierten Ziele treffen,<br />

das ist anstrengend.<br />

Die Runtime dient nur dem Programmablauf<br />

und färbt lizenzrechtlich nicht auf<br />

das Programm selbst ab. Auch die verlinkte<br />

Standardbibliothek darf ohne Reue<br />

sowohl in freie als auch in „kommerzielle“<br />

Software eingebunden werden. Für<br />

die gibt es nämlich – auch wenn die Lib<br />

unter der GPL steht – eine Ausnahme,<br />

sodass man sie auch in proprietärer Software<br />

nutzen darf.<br />

Das Problem beim Einbinden freier Software<br />

lösen die Entwickler zusätzlicher<br />

Bibliotheken unterschiedlich: Steht die<br />

Library unter der LGPL, färbt diese beim<br />

Linken nicht ab, auch wenn der Quellcode<br />

der Library anzubieten ist. Eine<br />

GPL Linking Exception [8] können der<br />

oder die ursprünglichen Entwickler per<br />

Erlaubnistext in die Lizenz aufnehmen,<br />

um ebenfalls das Abfärben beim Linken<br />

zu verhindern. Das bekannteste Beispiel<br />

da<strong>für</strong> – neben der Java-Klassenbibliothek<br />

– ist GNU Class path [9], eine freie Implementierung<br />

der Java-Standardbibliothek.<br />

Wer das Abfärben der GPL oder anderer<br />

freier Lizenzen erhalten will, stellt<br />

seine Bibliotheken einfach ohne solche<br />

Ausnahmeregelung unter GPL oder die<br />

jeweilige Lizenz.<br />

Plattformspezifisch<br />

Wer seine Anwendungen zwar nur einmal<br />

entwickeln, aber <strong>für</strong> die verschiedenen<br />

Zielplattformen separat ausliefern<br />

möchte, hat viel Arbeit vor sich (Abbildung<br />

3). Am einfachsten geht’s noch<br />

mit Skriptsprachen, die <strong>für</strong> die grafische<br />

Oberfläche auf Toolkits aufsetzen. Bei<br />

der Bezeichnung Toolkit fällt einem auch<br />

gleich Tk ein, das nicht<br />

nur mit Tcl, sondern<br />

auch mit den etwas<br />

populäreren Sprachen<br />

wie Perl, Python oder<br />

sogar mit der Bash<br />

nutzbar ist.<br />

Der große Vorteil dieser<br />

Kombinationen:<br />

Alle Programme sind<br />

frei. Der Vorteil <strong>für</strong><br />

den Entwickler ist aber<br />

auch der Nachteil <strong>für</strong><br />

den Verkäufer, denn<br />

mit Klartext-interpretierten<br />

Skriptsprachen<br />

lässt sich in der Regel<br />

kein Geld verdienen. Zudem ist die Ausführung<br />

so langsam, dass man bei umfangreicheren<br />

Applikationen selbst auf<br />

neuesten Rechner-Boliden nicht guten<br />

Gewissens darauf setzen kann.<br />

Grafikbibliotheken gibt es aber auch <strong>für</strong><br />

kompilierte Sprachen. Das bekannteste<br />

Beispiel ist Qt [10], das es in einer kostenlosen<br />

und freien sowie in einer kommerziellen<br />

Version gibt: Wer selbst feie<br />

Software schreiben will, darf die freie<br />

Variante nutzen, wer kostenpflichtige<br />

Closed-Source-Programme schreiben<br />

oder aus anderen Gründen seinen Quellcode<br />

nicht offenlegen will, <strong>für</strong> den gibt es<br />

die kommerzielle Variante.<br />

Qt steht von Nokia als Qt/​X11 <strong>für</strong> die<br />

<strong>Linux</strong>/​Unix-Desktops, als Qt/​Windows<br />

<strong>für</strong> die Microsoft-Schiene und als Qt/​<br />

Mac <strong>für</strong> Apple-Anwendungen zur Verfügung.<br />

Natürlich ist Qt in erster Linie <strong>für</strong><br />

die C++-Programmierer interessant, es<br />

gibt aber auch Implementierungen <strong>für</strong> C,<br />

Python, Perl und mehr. Die nötigen Libs<br />

<strong>für</strong> einfache grafische Oberflächen sind<br />

bereits enthalten.<br />

Grafikbibliotheken<br />

Wer auf andere, eigenständige Grafikbibliotheken<br />

setzen muss, der findet zum<br />

Beispiel in Cairo [11] etwas Plattformübergreifendes<br />

<strong>für</strong> 2-D-Grafiken und mit<br />

Mesa [12] eine 3-D-Bibliothek, die <strong>alle</strong>rdings<br />

in erster Linie <strong>für</strong> das X-Window-<br />

System entwickelt und dort am besten<br />

einsetzbar ist. Cairo steht unter der LGPL<br />

und ist daher auch in kommerziellen Anwendungen<br />

nutzbar, Mesa steht unter<br />

der MIT-License und ist damit sowohl in<br />

kommerzieller Software nutzbar als auch<br />

zur GPL kompatibel.<br />

Fazit<br />

Wer möglichst plattformneutral programmieren<br />

will oder muss, ist lizenztechnisch<br />

nur mit Webanwendungen auf der<br />

sicheren Seite. Sollen die Anwendungen<br />

distribuiert werden, ist Java nach wie vor<br />

– oder wieder – erste Wahl, sind Systemintegration<br />

und einheitliches Look & Feel<br />

damit immer noch am besten gewährleistet.<br />

Und das Prinzip „Compile once, run<br />

everywhere“ ist auch noch die komfortabelste<br />

Variante <strong>für</strong> den Entwickler.<br />

Wenn es um native (Desktop-)Anwendungen<br />

geht, bietet Qt eine weitreichende<br />

und <strong>für</strong> Entwickler freier Software kostenlose<br />

Möglichkeit auch bei plattformübergreifendem<br />

Development lizenzrechtlich<br />

die passende Variante zu wählen, doch<br />

die Zielplattformen sind gegenüber Java<br />

eingeschränkt. (uba)<br />

n<br />

Infos<br />

[1] Richard Stallman, „The JavaScript Trap“:<br />

[http:// www. gnu. org/ philosophy/​<br />

javascript‐trap. html]<br />

[2] GNU Affero General Public License:<br />

[http:// www. gnu. org/ licenses/ agpl. html]<br />

[3] Affero Inc.: [http:// www. affero. com]<br />

[4] Java SE:<br />

[http:// www. oracle. com/ technetwork/​<br />

java/ javase/ downloads/ index. html]<br />

[5] Open JDK: [http:// openjdk. java. net]<br />

[6] Apache Harmony:<br />

[http:// harmony. apache. org]<br />

[7] Oracle-Binary-Lizenz: [http:// www. oracle.​<br />

com/ technetwork/ java/ javase/ downloads/​<br />

jre‐6u21‐license‐159054. txt]<br />

[8] GPL Linking Exception: [http:// de.​<br />

wikipedia. org/ wiki/ GPL_linking_exception]<br />

[9] GNU Classpath: [http:// de. wikipedia. org/​<br />

wiki/ GNU_Classpath]<br />

[10] Qt: [http:// qt. nokia. com]<br />

[11] Cairo: [http:// cairoraphics. org]<br />

[12] Mesa: [http:// www. mesa3d. org]<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).


Bücher über die Programmiersprache Scala<br />

Tux liest<br />

Bücher 11/2011<br />

Forum<br />

Unter den Programmiersprachen abseits des Mainstream erfreut sich die „Scalable Language“ Scala großer<br />

Beliebtheit. Das <strong>Linux</strong>-<strong>Magazin</strong> greift sich zwei Bücher zum Thema heraus, die erfahrenen Entwicklern eine<br />

rasche Einführung in die neue Sprache bieten. Michael Müller<br />

www.linux-magazin.de<br />

91<br />

Neben Java existieren inzwischen weitere<br />

Programmiersprachen, die auf der<br />

JVM laufen. Scala zählt dabei zu den bekanntesten.<br />

Ihr widmen sich die deutschsprachigen<br />

Bücher „Scala“ von Oliver<br />

Braun (Hanser) und „Programmieren<br />

mit Scala“ von Dean Wampler und Alex<br />

Payne (O’Reilly).<br />

Für Java-Kundige<br />

Die Bücher haben einiges gemeinsam,<br />

das Zielpublikum zum Beispiel: Für Einsteiger<br />

in die Welt der Programmierung<br />

legen beide die Latte sehr hoch. Am<br />

einfachsten findet sich der Java-Kundige<br />

zurecht, denn beide Titel verweisen immer<br />

wieder darauf, was Scala mit Java<br />

gemeinsam hat und wo die Unterschiede<br />

liegen. Insbesondere Kenntnisse der Objektorientierung<br />

helfen.<br />

Scala beherrscht als hybride Sprache <strong>alle</strong>rdings<br />

auch das funktionale Paradigma.<br />

Und spätestens hier prasselt selbst auf<br />

den erfahrenen Java-Entwickler eine<br />

Menge neuer Stoff ein. Doch wer sich<br />

gerne kompakt und schnell in eine neue<br />

Sprache einarbeitet, ist mit beiden Büchern<br />

gut bedient.<br />

Beide Titel überfliegen die Installation<br />

recht schnell; dies sollte <strong>für</strong> erfahrene<br />

Entwickler und <strong>Linux</strong>er auch kein Thema<br />

sein. Grundlagen vermitteln die Autoren<br />

in knapper Form, wobei den Java-Entwicklern<br />

der deutlich kürzere Scala-Code<br />

sofort auffällt, lassen sich doch aufgrund<br />

der Typinferenz an vielen Stellen Typangaben<br />

sowie Semikola, Klammern und<br />

mehr einsparen.<br />

Daran schließt sich die Objektorientierung<br />

an. Einen Unterschied zu Java machen<br />

hier die Traits aus, eine Art Interface<br />

mit einer Implementierung, die eine<br />

sinnvoll beschränkte Mehrfachvererbung<br />

erlaubt. Daneben gibt es im Bereich der<br />

Objektorientierung weitere Unterschiede<br />

zu Java: Was Java einen primitiven Typ<br />

nennt, ist in Scala ebenfalls ein Objekt.<br />

Das Schlüsselwort »static« kennt Scala<br />

nicht, da<strong>für</strong> Begleitobjekte und Methoden,<br />

die aussehen wie Operatoren. Reichlich<br />

neuer Stoff also.<br />

Nebenläufig<br />

Anschließend führen beide Bücher in die<br />

funktionale Programmierung ein: Funktionen<br />

liefern ein Ergebnis, aber keine<br />

Seiteneffekte. Und in Verbindung mit<br />

Aktoren kann der Scala-Programmierer<br />

damit sichere Nebenläufigkeit realisieren.<br />

Vorbei sind die Zeiten, als der Entwickler<br />

sich mit Threads, deren Synchronisation,<br />

Race Conditions et cetera herumschlagen<br />

musste. Wer aber unbedingt möchte,<br />

kann dies auch in Scala tun. Das Scala-<br />

Typsystem, XML-Handling und Parser<br />

sind weitere Themen, die sich in beiden<br />

Titeln finden.<br />

Stilfragen<br />

Wo liegen bei so viel Ähnlichkeit die Unterschiede<br />

zwischen den beiden Büchern?<br />

Da sind zum einen die Autoren: Wampler<br />

und Payne kommen aus der Entwicklung,<br />

Info<br />

Oliver Braun:<br />

Scala<br />

Hanser, 2011<br />

320 Seiten<br />

35 Euro<br />

ISBN 978-3-446-<br />

42399-2<br />

Oliver Braun als Professor aus der Lehre.<br />

Dennoch ist es Braun, im Fließtext kaum<br />

förmlicher, der in den Codebeispielen<br />

konkreter wird, indem er Kurse, Personen<br />

und Vorträge modelliert, während<br />

man im O’Reilly-Buch eher „Typ1“ und<br />

„Typ2“ liest.<br />

Das letztgenannte Buch ist aus dem Amerikanischen<br />

übersetzt. Es gibt Leser, die<br />

behaupten, es sei in solchen Fällen besser,<br />

auf das Original zurückzugreifen. Das<br />

ist beim vorliegenden Titel jedoch nicht<br />

anzuraten, denn im Rahmen der Übersetzung<br />

wurde es auf die Scala-Version 2.8<br />

aktualisiert, der sich auch das Werk aus<br />

dem Hause Hanser widmet. Beide Bücher<br />

verfügen über ein ausführliches Literaturverzeichnis,<br />

das O’Reilly-Buch über ein<br />

Glossar. Braun spendiert seinem Werk ein<br />

paar Seiten zur Webprogrammierung mit<br />

Lift sowie Scalatra.<br />

Den fachlichen Anspruch setzen beide<br />

Bücher ungefähr gleich hoch an. Und so<br />

ist es schwierig, eine Präferenz auszusprechen:<br />

Das dickere Buch von Wampler<br />

und Payne bietet ein wenig mehr an<br />

Informationen. Da<strong>für</strong> ist Brauns Werk<br />

<strong>für</strong> weniger Geld erhältlich und kommt<br />

damit auf ein etwas günstigeres Preis-<br />

Leistungs-Verhältnis. Beide Titel richten<br />

sich an den anspruchsvollen Entwickler<br />

und sind auf jeden Fall eine Empfehlung<br />

wert. (mhu)<br />

n<br />

Info<br />

Dean Wampler, Alex<br />

Payne:<br />

Programmieren mit<br />

Scala<br />

O’Reilly, 2010<br />

460 Seiten<br />

45 Euro, ISBN 978-3-<br />

89721-647-1


Forum<br />

www.linux-magazin.de Leserbriefe 11/2011<br />

92<br />

Auf den Punkt gebracht<br />

Leserbriefe<br />

Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an [redaktion@linux-­magazin.­de].<br />

Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht <strong>alle</strong> Beiträge mit<br />

Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.<br />

YAFFS<br />

10/​11, S. 40: Ich lese den Artikel „Frei<br />

– aber offen“ und wundere mich über<br />

die Darstellung des YAFFS-Dateisystems<br />

als Problemfall. Der Artikel schreibt vom<br />

„verschollenen <strong>Linux</strong>-YAFFS-Treiber“<br />

und weist auf veraltete Webseiten hin.<br />

Ich kann die Darstellung nicht teilen: Ein<br />

kurzer Test zeigt die Erreichbarkeit der<br />

Webseite [http://​­www.​­yaffs.​­net] und des<br />

zugehörigen Git-Repository. Das Herunterladen<br />

der aktuellen Quelltexte (letzter<br />

Commit 15. August 2011) ist ohne<br />

Probleme möglich. YAFFS2 ist meiner<br />

Meinung nach ein wirklich gutes und<br />

praxistaugliches Filesystem <strong>für</strong> NAND-<br />

Flashspeicher.<br />

Sascha Erlacher, per E-Mail<br />

Ich stelle nicht in Frage, dass es sich bei<br />

YAFFS um ein praxistaugliches Dateisystem<br />

handelt. Problematisch ist <strong>alle</strong>rdings<br />

die Unterstützung durch die <strong>Linux</strong>-Distributionen.<br />

Das Dateisystem lässt sich<br />

meist nur mit sehr viel Aufwand installieren,<br />

und dann nur auf einigen Releases.<br />

Das größte Problem: Manche Images<br />

lassen sich mounten, manche nicht. Dies<br />

findet sich in der Literatur, auch ich habe<br />

es in Tests festgestellt.<br />

Wenn ich ein Android-Smartphone auswerten<br />

möchte, darf es außerdem nicht<br />

Errata<br />

09/​11, S. 98: In Folge 16 des „Bash Bashing“<br />

hat sich in Listing 1 ein Fehler eingeschlichen.<br />

Falls die Eingabe ohne Newline endet, gibt<br />

das Skript die letzte Zeile nicht aus. Korrekterweise<br />

müsste es nach der While-Schleife<br />

noch prüfen, ob »$i« noch Zeichen enthält,<br />

und diese gegebenenfalls ausgeben. Danke<br />

an Bernhard Bablok <strong>für</strong> diesen Hinweis.<br />

sein, dass die Webseite wochenlang nicht<br />

erreichbar ist. Für forensische Auswertungen<br />

betrachte ich den YAFFS-Support unter<br />

<strong>Linux</strong> deshalb schon als Problemfall.<br />

(Hans-Peter Merkel)<br />

Treiberversorgung<br />

09/​11, S. 44: Ich habe die Artikel zu 20<br />

Jahren <strong>Linux</strong> mit Begeisterung gelesen,<br />

bin <strong>alle</strong>rdings bei einer Sache ins Grübeln<br />

gekommen: Sie schreiben, dass <strong>Linux</strong><br />

beim Thema Hardware-Unterstützung<br />

und Treiber recht mau ist. Der Grund<br />

sei die fehlende Dokumentation der Hersteller,<br />

die sie offensichtlich nicht herausgeben<br />

möchten. Das klang <strong>für</strong> mich<br />

zuerst recht logisch und schlüssig, warf<br />

aber dann die Frage auf, wie Microsoft<br />

das macht. Weshalb gibt es denn dann<br />

Treiber <strong>für</strong> Windows? Liegt es einzig und<br />

<strong>alle</strong>in daran, dass die Hardwarehersteller<br />

nur Windows-Treiber entwickeln, oder<br />

kauft Microsoft die Dokumente der Hersteller<br />

zum Entwickeln der Treiber?<br />

Jörg Lang, per E-Mail<br />

<strong>Linux</strong>-<strong>Magazin</strong>-Autor Peter Kreußel hat<br />

in einem Windows 7 nachgesehen, woher<br />

die Treiber stammen. Für Standardkomponenten<br />

wie Laufwerke schreibt Microsoft<br />

diese durchweg selbst. Die Treiber<br />

<strong>für</strong> Drucker, Scanner und Grafikkarte<br />

stammen von Hardwareherstellern<br />

wie Canon und Epson, bei<br />

Motherboard-Komponenten beispielsweise<br />

von Intel.<br />

Die Hersteller dürften sich hier<br />

nach der Marktmacht von Microsoft<br />

richten: kein Windows-Treiber<br />

– kein Verkauf, kein <strong>Linux</strong>-Treiber<br />

– geringe Verkaufseinbußen. Das<br />

gilt natürlich nur <strong>für</strong> den Desktop-<br />

markt. Die Hersteller von Serverhardware<br />

sind in der Regel wesentlich aufgeschlossener<br />

<strong>für</strong> <strong>Linux</strong>. (mfe)<br />

SSLH konfigurieren<br />

10/​11, S. 70: Uwe Vollbracht schreibt in<br />

den „Tooltipps“ zu SSLH (Abbildung<br />

1), das Programm ließe sich nur über<br />

Aufrufoptionen konfigurieren. Auf der<br />

Projektseite unter [https://​­github.​­com/​<br />

­slubman/​­sslh] ist <strong>alle</strong>rdings die Konfiguration<br />

in der Datei »/etc/default/sslh«<br />

beschrieben. Dort lassen sich über Angaben<br />

wie »LISTEN=ifname:443« und<br />

»SSH=localhost:22« die verwendeten<br />

Ports einstellen.<br />

Uwe Baumbach, per E-Mail<br />

Die Datei »/etc/default/sslh« wertet ausschließlich<br />

das Startskript »/etc/init.d/<br />

sslh« aus. Es ruft das SSLH-Programm auf<br />

und übergibt dabei die Werte als Kommandozeilen-Parameter.<br />

SSLH selber kennt<br />

keine Konfigurationsdatei. Übrigens unterstützt<br />

das Sys-V-Startskript noch nicht<br />

die Open-VPN- und Tinc-Weiterleitung,<br />

da es beim Auslesen nur die Parameter<br />

<strong>für</strong> SSL und SSH berücksichtigt. Hier<strong>für</strong><br />

müsste der Anwender das Skript selbst<br />

anpassen. (Uwe Vollbracht) n<br />

Abbildung 1: Ohne Konfigurationsdatei: Terminal-Helfer SSLH.


PRObElESEN<br />

OhNE RISKO<br />

UND GEwINNEN!<br />

Gewinnen Sie eine von fünf rewind mini hd<br />

kameraS im GeSamtwert von faSt 400 euro!<br />

zur Verfügung gestellt von<br />

.de<br />

SONDERAKTION!<br />

Testen Sie jetzt<br />

3 Ausgaben <strong>für</strong><br />

NUR 3€*<br />

Telefon: 07131 /2707 274<br />

Fax: 07131 / 2707 78 601<br />

E-Mail: abo@linux-user.de<br />

Mit großem Gewinnspiel unter:<br />

www.linux-user.de/probeabo<br />

* Angebot gilt innerhalb Deutschlands und Österreichs. In der Schweiz: SFr 4,50.<br />

Weitere Preise: www.linux-user.de/produkte


Know-how<br />

www.linux-magazin.de Kern-Technik 11/2011<br />

96<br />

Kernel- und Treiberprogrammierung mit dem <strong>Linux</strong>-Kernel – Folge 59<br />

Kern-Technik<br />

<strong>Linux</strong> plattformübergreifend: Die praktische Skriptsammlung Buildroot erzeugt im Handumdrehen einen<br />

Kernel <strong>für</strong> Embedded-Systeme mit ARM-CPU. Als Nebenprodukt fällt dabei ein komplettes, lauffähiges <strong>Linux</strong>-<br />

System ab, das sich im Emulator Qemu testen lässt. Jürgen Quade, Eva-Katharina Kunst<br />

© psdesign1, Fotolia<br />

59<br />

In den Anfangstagen von <strong>Linux</strong> war es<br />

nicht abzusehen, dass der ursprünglich<br />

ausschließlich <strong>für</strong> i386-CPUs entwickelte<br />

Betriebssystemkern einmal mehr als 20<br />

verschiedene Prozessoren unterstützen<br />

würde. Heute gehen dank Smartphoneund<br />

Tablet-Boom täglich mehr <strong>Linux</strong>-Systeme<br />

auf einer ARM-basierten Plattform<br />

in Betrieb als auf klassischen, x86-basierten<br />

Desktop- oder Serversystemen.<br />

Host und Target<br />

Der herkömmliche PC dient jedoch weiterhin<br />

als Entwicklungsrechner (Host),<br />

um darauf die Systemsoftware, einen<br />

Kernel und ein Root-Dateisystem <strong>für</strong> das<br />

Ziel (Target), etwa ein Android-Smartphone,<br />

zu generieren. Für diese so genannte<br />

Cross-Entwicklung braucht man<br />

Compiler, Linker und Bibliotheken, die<br />

Code <strong>für</strong> den anderen<br />

Prozessortyp erzeugen<br />

können.<br />

Verantwortlich <strong>für</strong> das<br />

Bauen eines Kernels<br />

ist das zum <strong>Linux</strong>-<br />

Quellcode gehörende<br />

Kernel-Build-System.<br />

Es benötigt die üblichen<br />

Entwicklungswerkzeuge<br />

(unter<br />

Ubuntu die Pakete<br />

»ncurses‐dev« und<br />

»build‐essentials«) sowie<br />

Cross-Compiler<br />

und Cross-Linker (in<br />

der Regel GCC und<br />

den GNU-Linker »ld«)<br />

auf dem Entwicklungsrechner.<br />

Dann kann das System<br />

mit Hilfe der Environment-Variablen<br />

beziehungsweise<br />

Aufrufparameter »ARCH«, »CROSS_COM-<br />

PILE« und »O« den Code <strong>für</strong> die Zielplattform<br />

generieren. »ARCH« spezifiziert die<br />

Zielplattform – bei Kernel 3.0 stehen die<br />

in Abbildung 1 gelisteten Architekturen<br />

zur Auswahl. »CROSS_COMPILE« spezifiziert<br />

den Teilstring, den das Kernel-Build-<br />

System vor den Namen des Compilers<br />

und des Linkers einfügt.<br />

Es liegt im Namen<br />

Typischerweise haben die Cross-Entwicklungswerkzeuge<br />

einen Namen, der unter<br />

anderem auf die Zielplattform hinweist:<br />

»arm‐linux‐gcc« beispielsweise steht <strong>für</strong><br />

einen Compiler (»gcc«), der Code <strong>für</strong> einen<br />

ARM-Prozessor generiert. Der Namensbestandteil<br />

»CROSS_COMPILE=arm‐linux‐«<br />

etwa weist das Kernel-Build-System dazu<br />

an, eine Cross-Generierung mit diesem<br />

Werkzeug durchzuführen – vorausgesetzt<br />

die Pfadvariable schließt das Verzeichnis<br />

ein, in dem sich der gewünschte Compiler<br />

befindet.<br />

Nicht unbedingt notwendig, aber hilfreich<br />

ist schließlich die Variable »O«, die<br />

das Ausgabeverzeichnis bestimmt. Damit<br />

ist es möglich, Konfigurations- und<br />

Generierungs-Informationen vom eigentlichen<br />

Quellcode des Kernels zu trennen.<br />

Liegen die Kernelquellen beispielsweise<br />

im Verzeichnis »/usr/src/linux‐3.0/«<br />

und gibt es ein Verzeichnis »/usr/src/<br />

linux‐3.0‐arm/«, lässt sich der Kernel mit<br />

dem folgenden Befehl konfigurieren, wobei<br />

das GUI-Tool Menuconfig zum Einsatz<br />

kommt (siehe Abbildung 2):<br />

cd /usr/src/linux‐3.0/<br />

make ARCH=arm U<br />

CROSS_COMPILE=arm‐linux‐ U<br />

O=/usr/src/linux‐3.0‐arm menuconfig<br />

Das nächste Kommando veranlasst anschließend<br />

die Übersetzung:<br />

cd /usr/src/linux‐3.0/<br />

make ARCH=arm U<br />

CROSS_COMPILE=arm‐linux‐ U<br />

O=/usr/src/linux‐3.0‐arm bzImage modules<br />

Das Kernel-Build-System legt den übersetzten<br />

Kernel in »/usr/src/linux‐3.0‐arm/<br />

arch/arm/boot/zImage« ab.<br />

Leider liegen auf dem Weg zum funktionierenden<br />

Kernel noch ein paar Stolpersteine<br />

aus, zunächst die korrekte Konfiguration:<br />

ARM-basierte Plattformen sind<br />

deutlich vielgestaltiger als die bekannte<br />

x86-Plattform (siehe Kasten „Advanced<br />

Risc Machine (ARM)“).<br />

Das Kernel-Build-System bietet zum Ausgleich<br />

immerhin eine Reihe von Default-<br />

Konfigurationen <strong>für</strong> verschiedenste ARM-


Dateisystem. Buildroot<br />

ist nämlich eine<br />

Sammlung von Skripten<br />

und Programmen,<br />

mit denen man auf<br />

sehr einfache Weise<br />

ein eigenes <strong>Linux</strong>-System<br />

<strong>für</strong> verschiedenste<br />

Zielplattformen konfigurieren<br />

und erzeugen<br />

Abbildung 1: Im Verzeichnis »arch« des Kernel-Quellcodes finden sich die<br />

von <strong>Linux</strong> unterstützten Architekturen.<br />

kann.<br />

Nach der Konfiguration<br />

lädt Buildroot die aktuellen Quell-<br />

Systeme an. Welche das sind, lässt sich<br />

mit Hilfe des Aufrufs<br />

code-Pakete sämtlicher Werkzeuge von<br />

deren Ursprungsserver, patcht diese<br />

cd /usr/src/linux‐3.0/<br />

wenn notwendig, generiert sie und benutzt<br />

sie, um damit das komplette <strong>Linux</strong><br />

make help ARCH=arm<br />

anzeigen und durch »make Default‐Konfiguration«<br />

aktivieren. Die zweite Stolper-<br />

Root-Dateisystem – anzufertigen (siehe<br />

– einschließlich Bootloader, Kernel und<br />

f<strong>alle</strong> sind die Cross-Entwicklungswerkzeuge<br />

selbst. Auf eventuell vorhandene Buildroot wird vom Uclib-Projekt gehos-<br />

Abbildung 3).<br />

vorkompilierte Pakete der gerade verwendeten<br />

Distribution zurückzugreifen einer C-Bibliothek verantwortlich, die <strong>für</strong><br />

tet. Dieses Projekt ist <strong>für</strong> den Quellcode<br />

ist frustrierend. Ebenso wenig Erfolg versprechend<br />

ist es, Pakete <strong>für</strong> Compiler und optimiert ist und auch in Buildroot zum<br />

den Einsatz in eingebetteten Systemen<br />

Linker gemäß diverser Anleitungen aus Einsatz kommt. Von der Projektwebseite<br />

dem Internet selbst zu generieren. lässt sich das Buildroot-Paket herunterladen<br />

[1] und in einem Verzeichnis,<br />

Lust statt Frust<br />

beispielsweise dem Home Directory auspacken.<br />

Das <strong>alle</strong>s und auch die weiteren<br />

Zum Glück gibt es mit dem Tool »buildroot«<br />

jedoch einen nahezu narrensicheren Benutzer-ID erfolgen; Superuser-Rechte<br />

Aktionen können unter einer normalen<br />

Weg, an eine funktionierende Werkzeugkette<br />

zu kommen. Mehr noch, quasi als Ein »make help« – im Hauptverzeichnis<br />

sind nicht erforderlich.<br />

Geschenk generiert Buildroot gleich den von »buildroot/« aufgerufen – listet unter<br />

Kernel und erzeugt zudem noch ein Root- anderem die unterstützten Plattformen<br />

auf, immerhin 16 in der Version »buildroot‐2011.08«.<br />

Für die ersten Versuche<br />

bietet sich die Plattform »qemu_arm_versatile«<br />

an, denn damit lässt sich das erzeugte<br />

System mit Hilfe des Emulators<br />

Qemu gleich auf dem Entwicklungsrechner<br />

testen. Die passende Konfiguration<br />

erzeugt der Befehl »make qemu_arm_versatile_defconfig«.<br />

Konfigurieren<br />

Per »make menuconfig« lässt sich die<br />

voreingestellte Version anpassen. Interessant<br />

ist es, unter dem Punkt »Kernel |<br />

Kernel version« an Stelle von »2.6.38.8«<br />

als aktuelleren Kernel »3.0« einzustellen.<br />

Außerdem sollte man unter dem Menüpunkt<br />

»System Configuration | Port to<br />

run a getty (login prompt) on« an Stelle<br />

von »ttyAMA0« lieber »tty1« einstellen.<br />

Unter »Build options | Number of jobs to<br />

run simultaneously« lässt sich die Anzahl<br />

der Prozessoren angeben, die die Entwicklungsmaschine<br />

zur Verfügung stellt.<br />

Wer also beispielsweise einen Hexacore<br />

sein Eigen nennt, trägt hier »6« ein. Nach<br />

dem Speichern der Konfiguration startet<br />

das Kommando »make« den Vorgang der<br />

Generierung.<br />

Als Erstes lädt Buildroot über das Internet<br />

die Quellcodepakete der benötigten<br />

Komponenten herunter. Diese landen<br />

im Buildroot-Unterverzeichnis »dl/«.<br />

Anschließend generiert Buildroot die<br />

Toolchain und mit deren Hilfe sowohl<br />

Kern-Technik 11/2011<br />

Know-how<br />

www.linux-magazin.de<br />

97<br />

Abbildung 2: Je nach Plattform zeigt Menuconfig bereits im Hauptmenü unterschiedliche Konfigurationsoptionen (links x86_64, rechts ARM).


Know-how<br />

www.linux-magazin.de Kern-Technik 11/2011<br />

98<br />

Konfiguration Ablauf Ergebnis<br />

»make menuconfig«<br />

Initialisierung<br />

»make busybox-menuconfig«<br />

»make linux-menuconfig«<br />

Entwicklungszyklen<br />

Die Option »‐M« spezifiziert die zu emulierende<br />

Hardwareplattform, »‐m« die<br />

Größe des zur Verfügung stehenden<br />

Hauptspeichers (hier 128 MByte), die<br />

Angabe »‐kernel« bestimmt den Kernel,<br />

»‐append« die dem Kernel zu übergebenden<br />

Parameter. Hier ist es notwendig,<br />

dem Kernel zumindest das Gerät mitzuteilen,<br />

über das er auf die Rootpartition<br />

zugreifen soll.<br />

Geht <strong>alle</strong>s gut, erscheint ein neues Fenster<br />

mit einem Login. Als User »root« eingeloggt<br />

(siehe Abbildung 5), steht dem<br />

Anwender ein rudimentäres System im<br />

Konsolenmodus zur Verfügung. Dieses<br />

kann er per Buildroot-Konfiguration<br />

und Neugenerierung umfassend an die<br />

eigenen Bedürfnisse anpassen. Um beidas<br />

Root-Filesystem als auch den Kernel.<br />

Jetzt ist Zeit <strong>für</strong> eine ausgiebige Kaffeepause,<br />

denn das Übersetzen <strong>alle</strong>r Komponenten<br />

kann abhängig von der Leistungsstärke<br />

der eingesetzten Hardware<br />

ohne Weiteres eine Stunde in Anspruch<br />

nehmen. Alle Ergebnisse des Prozesses<br />

landen im Unterverzeichnis »output« –<br />

Quellcode downloaden<br />

Pakete generieren<br />

Cross-Toolchain<br />

generieren<br />

auspacken<br />

patchen<br />

generieren<br />

Kernel bauen<br />

Root-Dateisystem<br />

zusammenbauen<br />

»./dl/«<br />

Abbildung 3: In mehreren Schritten erstellt Buildroot ein lauffähiges <strong>Linux</strong>-System.<br />

»./output/host/usr/bin/«<br />

»./output/build/«<br />

»./output/images/zImage«<br />

»./output/images/rootfs.ext2«<br />

unter »output/images« erscheinen das<br />

Root-Filesystem (»rootfs.ext2«) und der<br />

Kernel (»zImage«).<br />

Für einen Test, ob Kernel und Root-<br />

Dateisystem funktionstüchtig sind, ist ein<br />

Emulator nützlich, der mit Qemu aber<br />

nicht <strong>für</strong> <strong>alle</strong> Plattformen bereitsteht.<br />

Wichtig ist es, mindestens die Qemu-<br />

Version 14.0 zu verwenden, denn ältere<br />

Versionen verhindern in einigen Fällen<br />

einen korrekten Bootvorgang.<br />

Das folgendem Kommando bootet das<br />

neue System in Qemu:<br />

cd ~/buildroot‐2011.08/<br />

qemu‐system‐arm ‐M versatilepb U<br />

‐m 128 ‐kernel output/images/zImage U<br />

output/images/rootfs.ext2 U<br />

‐append "root=/dev/sda"<br />

Advanced Risc Machine (ARM)<br />

Eine der zurzeit wichtigsten Prozessorarchitekturen<br />

firmiert unter dem Namen Advanced<br />

Risc Machine (ARM). Von den im Jahr 2010 nach<br />

Schätzungen rund 13 Milliarden verkauften (Mikro-)Prozessoren<br />

verarbeiteten wohl beinahe<br />

50 Prozent den ARM-Befehlssatz ([2], [3])<br />

Fast <strong>alle</strong> Android-Smartphones und Tablets oder<br />

auch Navigationsgeräte sind typischerweise<br />

mit mehr als einer ARM-CPU realisiert, ebenso<br />

Apples Mobilgeräte. Das liegt daran, dass diese<br />

Architektur hohe Leistung bei niedrigem Stromverbrauch<br />

bietet.<br />

Die Entwicklung begann bereits 1983, der erste<br />

Prozessor stand 1987 mit dem ARM 2 zur Verfügung.<br />

Es handelte sich schon damals um einen<br />

32-Bit-Prozessor, der sich mit erstaunlich<br />

wenigen Transistoren und damit Silizium bauen<br />

lässt. Bei der implementierten Risc-Architektur<br />

handelt es sich um eine so genannte 3-Register-Maschine,<br />

die das Verknüpfungsergebnis<br />

der Inhalte zweier Register in einem dritten<br />

Register ablegt.<br />

Im Laufe der Zeit hat der Hersteller verschiedene<br />

Befehlssätze spezifiziert und implementiert,<br />

unter anderem mit Jazelle auch einen, der<br />

auf die Verarbeitung von Javacode spezialisiert<br />

ist. ARM-Prozessoren haben <strong>alle</strong>rdings in Normalausführung<br />

keine Floating Point Unit.<br />

Bei der Namensgebung der Prozessoren hat<br />

ARM den großen Vorbildern Intel und AMD<br />

nachgeeifert, sie ist – mit einem Wort gesagt<br />

– unübersichtlich. Es werden zunächst vier<br />

Architekturen (Befehlssätze) unterschieden:<br />

© Nvidia Corporation<br />

Abbildung 4: ARM-CPUs wie Nvidias Tegra 2 finden<br />

sich in Smartphones und Tablets.<br />

ARMv4, ARMv5, ARMv6 und ARMv7. Letztere<br />

ist aktuell. Darüber hinaus gibt es etwa sechs<br />

Familien: Arm7, Arm9, Arm11, Cortex R, Cortex<br />

M und Cortex A. Der Namensvorsatz Cortex<br />

scheint reines Marketing zu sein, M steht dagegen<br />

<strong>für</strong> Mikrocontroller, also eine CPU samt<br />

notwendigster Peripherie, R <strong>für</strong> Realtime und<br />

A <strong>für</strong> Application.<br />

Außerdem werden noch Implementierungsvariationen<br />

an den Architekturnamen gehängt.<br />

T etwa steht <strong>für</strong> einen zusätzlichen, Speicherplatz<br />

sparenden Befehlssatz (Thumb), D <strong>für</strong><br />

Hardware-technische Debugmöglichkeiten, M<br />

<strong>für</strong> Multiply-Enhanced und I <strong>für</strong> eine eingebettete<br />

ICE-Makrozelle.<br />

In den aktuellen Topmodellen der Smartphones<br />

befindet sich als High-End-Prozessor ein<br />

Cortex A9. Diese Version ist mehrkernfähig. Typischerweise<br />

bauen die Hersteller damit Dualcore-Prozessoren<br />

auf, beispielsweise den in<br />

den aktuellen Tablets vorwiegend eingesetzten<br />

Tegra von Nvidia (Abbildung 4).<br />

Besonders interessant ist, dass ARM selbst<br />

keine Prozessoren herstellt, sondern nur das<br />

Design erledigt. Die Firma verdient ihr Geld<br />

<strong>alle</strong>in auf Basis von Lizenzen. Die Lizenznehmer,<br />

Qualcomm, Nvidia, Apple und diverse andere,<br />

nehmen das Basisdesign, erweitern oder modifizieren<br />

es und bauen dann die hauseigenen<br />

Prozessoren daraus. Ob ARM seine Vormachtstellung<br />

im Segment der Mobilgeräte halten<br />

kann, ist noch fraglich. Denn der Hunger nach<br />

Rechenleistung und Speicherausbau wird immer<br />

größer und ARM hat noch keine 64-Bit-Versionen<br />

angekündigt.<br />

Unübersichtlich wie die Welt der ARM-Prozessoren<br />

ist auch der architekturspezifische Quellcode<br />

im <strong>Linux</strong>-Kernel. Linus Torvalds hat daher<br />

zu einer Aufräumaktion aufgerufen. Erste Patches<br />

sind in Kernelversion 3.0 eingeflossen.


spielsweise den Kernel zu konfigurieren,<br />

gibt der Benutzer im Hauptverzeichnis<br />

von Buildroot das Kommando »make<br />

linux‐menuconfig« ein. Viele weitere<br />

Möglichkeiten sind in der Buildroot-Dokumentation<br />

aufgeführt, die im HTML-<br />

Format im Unterverzeichnis »docs« von<br />

Buildroot liegt.<br />

Wer Buildroot lediglich verwendet, um<br />

damit an Cross-Entwicklungswerkzeuge<br />

zu kommen, muss wissen, dass sich die<br />

gewünschten Programme nach einem<br />

Generierungslauf im Buildroot-Unterverzeichnis<br />

»output/host/usr/bin/« befinden.<br />

Entweder erweitert der Benutzer<br />

seine »PATH«-Variable um diesen Pfad<br />

oder er befüllt »CROSS_COMPILE« mit<br />

»/home/user/buildroot‐2011.08/output/<br />

host/usr/bin/arm‐linux‐«. Um das Eingeben<br />

der Parameter »CROSS_COMPILE«<br />

und »ARCH« bei jedem Make-Aufruf zu<br />

vermeiden, kann man diese auch als<br />

Environment-Variable ablegen:<br />

cd /usr/src/linux‐3.0/<br />

export CROSS_COMPILE=arm‐linuxexport<br />

ARCH=arm<br />

Achtung: Diese Variablen sind <strong>für</strong> nachfolgend<br />

aufgerufene Programme nur in<br />

jener Shell sichtbar, in der sie auch exportiert<br />

wurden.<br />

Weniger ist mehr<br />

Abbildung 5: Das von Buildroot erzeugte <strong>Linux</strong>-System benötigt nur wenige Sekunden zum Booten.<br />

Um einen möglichst kompakten Kernel<br />

zu bekommen, ist es im Übrigen sinnvoll,<br />

von einer minimalen Konfiguration<br />

auszugehen. Dazu dient der Aufruf<br />

»make allnoconfig«. Anschließend lassen<br />

sich per »make menuconfig« genau jene<br />

Treiber und Subsysteme aktivieren, die<br />

benötigt beziehungsweise von der Hardware<br />

unterstützt werden. Ein weiterer<br />

Vorteil bei diesem Vorgehen ist die kurze<br />

Generierungszeit: Auf einem schnellen<br />

Rechner vergeht kaum eine Minute, bis<br />

ein solch kompakter Kernel entstanden<br />

ist, und selbst auf einem Netbook bleibt<br />

die Wartezeit erträglich.<br />

Mein <strong>Linux</strong><br />

Dank Buildroot und der Emulatorsoftware<br />

Qemu lässt sich in kurzer Zeit ein<br />

eigenes <strong>Linux</strong>-System aufbauen, und das<br />

nicht nur <strong>für</strong> die bekannte x86-Plattform,<br />

sondern auch <strong>für</strong> ganz andere Architekturen.<br />

Das selbst kompilierte System bleibt<br />

überschaubar – wie in den Anfangstagen<br />

von <strong>Linux</strong> ist es möglich, jede installierte<br />

Komponente zu verstehen. Genau das<br />

Richtige also <strong>für</strong> den technikinteressierten<br />

<strong>Linux</strong>-Fan. (mhu)<br />

n<br />

Infos<br />

[1] Download-Adresse von Buildroot: [http://​<br />

buildroot. uclibc. org/ download. html]<br />

[2] Automotive Microcontrollers Market Report,<br />

August 2010:<br />

[http:// www. electronics. ca/ publications/​<br />

products/ Automotive‐Microcontrollers‐<br />

Market‐Report. html]<br />

[3] Heise Online, „ARM freut sich über kräftig<br />

sprudelnde Lizenzeinnahmen“, Oktober<br />

2010: [http:// www. heise. de/ ct/ meldung/<br />

ARM‐freut‐sich‐ueber‐kraeftig‐sprudelnde<br />

‐Lizenzeinnahmen‐1125958. html]<br />

Die Autoren<br />

Eva-Katharina Kunst, Journalistin, und Jürgen<br />

Quade, Professor an der Hochschule Niederrhein,<br />

sind seit den Anfängen von <strong>Linux</strong>-Fans von Open<br />

Source. Mittlerweile ist die dritte Auflage ihres<br />

Buches „<strong>Linux</strong> Treiber entwickeln“ erschienen.<br />

Kern-Technik 11/2011<br />

Know-how<br />

www.linux-magazin.de<br />

99<br />

Root-Dateisystem<br />

Für ein funktionstüchtiges <strong>Linux</strong> ist neben dem<br />

Kernel noch ein Root-Dateisystem erforderlich.<br />

Es enthält die zum Betrieb notwendigen<br />

Programme, Bibliotheken und Konfigurationsdateien.<br />

Buildroot erstellt das Root-Filesystem<br />

als eine Datei, die per Loop-Device gemountet<br />

wird. Dadurch lässt sie sich auch nachträglich<br />

beliebig modifizieren.<br />

Die zentrale Komponente des von Buildroot<br />

erstellten Dateisystems bildet das Multicall-<br />

Binary Busybox. Es vereint in einem einzigen<br />

Executable eine Shell mit <strong>alle</strong>n wichtigen Systemkommandos,<br />

Editor, Logging und – falls<br />

konfiguriert – sogar Web- und FTP-Server. Der<br />

Name Multicall-Binary rührt daher, dass dieses<br />

einzelne Executable mit Hilfe vieler symbolischer<br />

Links unter <strong>alle</strong>n benötigten Programmund<br />

Kommandonamen ansprechbar ist. Busybox<br />

erkennt beim Aufruf, unter welchem Namen es<br />

gestartet wurde, und nimmt dann wie ein Chamäleon<br />

die zugehörige Funktionalität an.<br />

Kein Wunder, dass dieses Schweizer Taschenmesser<br />

auch das Init-Programm (System-V-Init),<br />

den ersten vom Kernel beim Booten gestarteten<br />

Prozess, im generierten <strong>Linux</strong> stellt. Die<br />

Konfiguration von Init befindet sich im Root-<br />

Dateisystem unter »/etc/inittab«, die zugehörigen<br />

Skripte, die zum Beispiel das Netzwerk<br />

konfigurieren, unter »/etc/init.d/«.<br />

Als Gerätedateien finden sich typischerweise<br />

»/dev/console«, »/dev/null« und »/dev/zero« im<br />

Dateisystem, weitere Einträge lassen sich nach<br />

Bedarf anlegen. Außerdem braucht das Root-<br />

Filesystem noch ein temporäres Verzeichnis<br />

(»/tmp/«) und ein Logverzeichnis (»/var/log/«).<br />

Sinnvollerweise legt man zudem Mountpoints<br />

<strong>für</strong> die virtuellen Dateisysteme »/proc/« und<br />

»/sys/« an. Das Mounten selbst erledigt eines<br />

der per Init gestarteten Skripte.


Programmieren<br />

www.linux-magazin.de Bash Bashing 11/2011<br />

102<br />

Shellskripte aus der Stümper-Liga – Folge 17: Frage und ​Antwort<br />

Bash Bashing<br />

Soll ein Shellskript mit seinen Benutzern interagieren, braucht der zuständige Bash-Programmierer auf den<br />

Spatz nicht gleich mit der GUI-Toolkit-Kanone samt zusätzlicher Programmiersprache zu schießen. Wie das<br />

Kleinkaliber funktioniert, beschreibt dieser Artikel. Bernhard Bablok<br />

01 #! /bin/bash<br />

02<br />

Unter [1] findet sich ein praktisches<br />

Skript <strong>für</strong> Wartungsarbeiten an Wordpress-Datenbanken,<br />

seine ersten Zeilen<br />

zeigt Listing 1. Für den Datenbankzugriff<br />

braucht das Skript das zugehörige<br />

Passwort – der Programmierer hat sich<br />

offenbar der Einfachheit halber dazu<br />

entschlossen, dass der Benutzer es dem<br />

Skript als Parameter übergibt.<br />

Mal abgesehen davon, dass das ganze<br />

Parameter-Handling nicht besonders robust<br />

gelöst ist, stellt die Übergabe von<br />

03 # Korrekte Parameteranzahl überprüfen<br />

04 if [ $# ‐ne 4 ];<br />

05 then<br />

Listing 1: »wordpress‐cleanup«<br />

06 echo "Usage: wordpress‐cleanup <br />

"<br />

07 exit 0<br />

08 fi<br />

Passwörtern auf der<br />

Kommandozeile ein<br />

Sicherheitsrisiko dar.<br />

Denn jeder Benutzer<br />

kann die Prozessliste<br />

mit <strong>alle</strong>n Parametern<br />

auslesen. Um diesen<br />

Design fehler zu vermeiden,<br />

muss das<br />

Skript selbst den Benutzer<br />

nach dem Datenbank-Passwort<br />

fragen,<br />

dessen Antwort<br />

entgegennehmen und<br />

verarbeiten.<br />

Es kann kaum überraschen,<br />

dass die Bash<br />

auch <strong>für</strong> dieses Problem<br />

eine Lösung parat hält.<br />

Die Passwortabfrage ist<br />

aber nur ein Spezial fall <strong>für</strong> die Benutzereingabe<br />

einzeiliger Texte. Die Bash hat<br />

da<strong>für</strong> den Befehl »read« und neuerdings<br />

»readarray« eingebaut. In Listing 2 verhindert<br />

die »read«-Option »‐r« (<strong>für</strong> raw),<br />

dass ein Backslash als Escape-Zeichen<br />

wirkt. Die Option »‐e« weist den Befehl<br />

an, die Readline-Bibliothek zu nutzen –<br />

der Anwender darf Bash-typisch in der<br />

Zeile navigieren.<br />

Die Zeile 2 im Listing ist die klassische<br />

Passwortabfrage mit der »‐s«-Option (<strong>für</strong><br />

09 <br />

10 # Variablen deklarieren<br />

11 DATABASE=$1<br />

12 WPPREFIX=$2<br />

13 USERNAME=$3<br />

14 PASSWORD=$4<br />

15 <br />

16 # MySQL‐Queries ausführen<br />

17 mysql ‐u$USERNAME ‐p$PASSWORD $DATABASE


Skript bie tet ihm eine Liste zum Auswählen<br />

an. Der Befehl »select name in ...«<br />

führt <strong>alle</strong> Wörter in der »in«-Liste als<br />

einzelne Listenpunkte auf und gibt daraufhin<br />

den PS3-Prompt aus. Das Beispiel<br />

setzt den Prompt in Zeile 3. Jetzt kann<br />

der Benutzer eine der vordefinierten<br />

Nummern eingeben, aber auch andere<br />

Antworten sind möglich.<br />

Nur im ersten Fall landet der Wert der<br />

ausgewählten Nummer in der »select«-<br />

Variablen. Bei falscher Eingabe ist die<br />

Variable leer. Die eigentliche Eingabe des<br />

Anwenders, also die Nummer oder sonstiger<br />

eingegebener Text, landet immer in<br />

der Shellvariablen »REPLY«. Mit einem<br />

Dateiende-Zeichen ([Strg]+[D]) beendet<br />

der Benutzer die Auswahl.<br />

Bestenliste<br />

Als benutzerfreundlicher erweist sich das<br />

Anwendungspattern aus Listing 3. Zusätzlich<br />

zu den Dateinamen (»/var/log/<br />

messages*«) steht der feste Wert »quit« in<br />

der »in«-Liste. Außerdem prüft das Programm<br />

bei einer falschen Eingabe, ob der<br />

Benutzer statt der Nummer irrtümlich<br />

»quit« oder zumindest »q« eingegeben hat<br />

(siehe Abbildung 1).<br />

Auf die Anordnung der Liste hat der Programmierer<br />

keinen Einfluss. Wer eine<br />

spezielle Anordnung will oder statt der<br />

Nummern Buchstaben, muss das Menü<br />

selbst programmieren. Im Prinzip ist das<br />

aber nicht aufwändig: Eine »while true;<br />

do ... done«-Schleife erfüllt den Zweck.<br />

Zuerst gibt das Programm per »echo«<br />

das Menü aus, anschließend liest es mit<br />

»read« die Antwort.<br />

In einem alten, inzwischen von modernerer<br />

Software überholten Projekt des<br />

Autors kam diese Lösung zum Einsatz<br />

(siehe Abbildung 2). Das Programm leitete<br />

den Benutzer durch diverse Konfigurationsschritte,<br />

jeder erledigte Menüpunkt<br />

änderte seine Farbe<br />

von Rot nach Grün. All das<br />

gelang mit reinen Bash-<br />

Mitteln, <strong>für</strong> die verschiedenen<br />

Farben einschließlich<br />

der Cursorsteuerung im<br />

Fenster sorgten Terminal-<br />

Escape-Sequenzen.<br />

Jenseits der Bash<br />

Zwischen reine Bash-Mittel<br />

und eigene, interaktive<br />

Programme reihen sich<br />

noch Tools wie Dialog [2] oder Xdialog<br />

[3] ein. Das erste Werkzeug fußt<br />

auf Ncurses, das andere benötigt einen<br />

laufenden X-Server. Wer auf möglichst<br />

geringe Abhängigkeiten Wert legt, verzichtet<br />

natürlich auf solche Pakete. Andererseits<br />

sind die interaktiven Widgets<br />

beider Pakete deutlich schöner und benutzerfreundlicher<br />

als reine Bash-Mittel.<br />

Vorbildliches Checkinstall<br />

Zusammenfassend lässt sich feststellen,<br />

dass mit dem Benutzer interagierende<br />

Bash-Skripte je nach Anspruch an die<br />

Optik mit recht geringem Aufwand implementierbar<br />

sind. Neben Eingabefeldern<br />

umfasst das Vokabular Menüs und<br />

Abfragen („Sind Sie sicher?“).<br />

Vorbildlich sind Skripte wie etwa Checkinstall<br />

[4]. Der Anwender kann das Programm<br />

auf Wunsch komplett oder teilweise<br />

über Kommandozeilen-Parameter<br />

steuern. Alle fehlenden Angaben fragt<br />

»checkinstall« dann über interaktive Dialoge<br />

ab, so wie es dieser Artikel beschrieben<br />

hat. Damit ist das Tool nutzbar, ohne<br />

dass der Anwender sich durch lange Hilfeseiten<br />

quälen muss. Bei regelmäßigem<br />

Gebrauch – etwa aus Makefiles – läuft<br />

das Programm aber trotzdem vollautomatisch<br />

ab. (jk)<br />

n<br />

Abbildung 1: Das gestartete Skript aus Listing 3 präsentiert eine Liste zum Auswählen einer Logdatei.<br />

Abbildung 2: Ein Menü mit Farben dank Terminal-Escape-Sequenzen.<br />

Infos<br />

[1] Bash-Skript zur Optimierung der Wordpress-Datenbank:<br />

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

de/ 7402/ bashscript‐zur‐optimierung‐derwordpress‐datenbank]<br />

[2] Dialog: [http:// www. hightek. org/ dialog/]<br />

[3] Xdialog: [http:// xdialog. dyns. net]<br />

[4] Checkinstall: [http:// www. asic‐linux. com.​<br />

mx/ ~izto/ checkinstall/]<br />

Der Autor<br />

Bernhard Bablok betreut bei der Allianz Shared Infrastructure<br />

Services ein großes Datawarehouse<br />

mit technischen Performance-Messdaten von<br />

Mainframes bis zu Servern. Wenn er nicht Musik<br />

hört, mit dem Radl oder zu Fuß unterwegs ist, beschäftigt<br />

er sich mit Themen rund um <strong>Linux</strong> und<br />

Objektorientierung. Er ist unter [mail@bablokb.​<br />

de] zu erreichen.<br />

Listing 2: Eingabefeld mit<br />

Bash-Mitteln<br />

01 read ‐r ‐e ‐p "Bitte Wert eingeben: " zeile<br />

02 read ‐p "Passwort: " ‐s passw<br />

03 read ‐p "Sind Sie sicher? J/N: " ‐N 1 antwort<br />

Listing 3: Auswahlliste per »select«<br />

01 #!/bin/bash<br />

02 <br />

03 PS3="Auswahl der Log‐Datei: "<br />

04 select logfile in /var/log/messages* quit; do<br />

05 echo ‐e "Log‐Datei: $logfile\nAuswahl: $REPLY"<br />

06 if [ ‐n "$logfile" ]; then<br />

07 case "$logfile" in<br />

08 quit) exit 0;;<br />

09 *) less "$logfile";;<br />

10 esac<br />

11 elif [ "$REPLY" = "quit" ‐o "$REPLY" = "q" ]; then<br />

12 exit 0<br />

13 else<br />

14 echo "Fehlerhafte Eingabe!" >&2<br />

15 fi<br />

16 done<br />

Bash Bashing 11/2011<br />

Programmieren<br />

www.linux-magazin.de<br />

103


Programmieren<br />

www.linux-magazin.de Perl-Snapshot 11/2011<br />

104<br />

Perl-Skript holt dynamisch generierte Werte aus Webseiten<br />

Abgesaugt<br />

Gibt es kein API <strong>für</strong> das Einsammeln von Webinformationen, hilft oft Perl mit der Brechstange des Screenscraping.<br />

Seit Neuestem überwindet es dabei sogar die Hürde Javascript. Michael Schilli<br />

© Gunnar Pippel, 123RF<br />

Nicht weniger als drei ehrwürdige Linksys-Router<br />

schaufeln die Ethernet-Pakete<br />

im Wohnbereich der Perlmeister-Labs<br />

umher. Auf <strong>alle</strong>n dreien tut die Tomato-<br />

Firmware [2] seit Jahren ohne jeglichen<br />

Störfall ihren Dienst. Da Tomatos Admin-Webseite<br />

nicht nur <strong>alle</strong>rlei nützliche<br />

Einstellungen erlaubt (Abbildung<br />

1), sondern darüber hinaus noch informative<br />

Statusdaten anzeigt, lag es nahe,<br />

einen Screenscraper zu schreiben, um<br />

die Daten in regelmäßigen Abständen auf<br />

den PC zu holen, in einer Datenbank zu<br />

speichern und bei auffälligen Ausreißern<br />

Alarm auszulösen.<br />

WWW::Mechanize statt der begehrten<br />

Uptime-Zeit lediglich Javascript-Code<br />

runterladen (Abbildung 2).<br />

Damit die Seite die Daten richtig anzeigt,<br />

muss auf Client-Seite eine Javascript-<br />

Engine anlaufen, die den Code interpretiert<br />

und gemäß den darin enthaltenen<br />

Anweisungen das DOM (Document Object<br />

Model) der im Browser dargestellten<br />

Seite auffrischt. Einfache Screenscraper<br />

tun das nicht, sondern verhalten sich wie<br />

Browser mit abgeschaltetem Javascript<br />

und erhalten daher nicht<br />

das eigentlich gewünschte<br />

Ergebnis.<br />

Plug in WWW::Scripter::Plugin::Ajax <strong>für</strong><br />

Serverrückrufe, der DOM-Schnittstelle<br />

HTML::DOM und der Pure-Perl-ECMA-<br />

Skript-(Javascript)-Engine JE stellt es <strong>alle</strong><br />

notwendigen Funktionen bereit.<br />

Wenn man darüber nachdenkt, wie viele<br />

DOM-spezifische Unterschiede bei Browsern<br />

es <strong>alle</strong>in zwischen dem Internet Explorer<br />

und Firefox gibt, dann lässt sich<br />

erahnen, wie viel Arbeit in den Modulen<br />

steckt. Außerdem verhält sich das Modul<br />

wie ein weiterer Browser, Unterschiede<br />

zwischen seiner Implementierung und<br />

dem sonst verwendeten Desktopbrowser<br />

sind unvermeidlich. Eine weitere Möglichkeit,<br />

einen Javascript-gesteuerten<br />

Skriptclient zu implementieren, wäre der<br />

Einsatz einer Browser-Fernsteuerung wie<br />

Selenium [3].<br />

Listing 1 zieht zunächst WWW::Scripter<br />

herein und lädt das separat erhältliche<br />

Ajax-Plugin mit der Methode<br />

»use_plugin()«. Die Klasse ist von<br />

WWW::Mechanize und damit auch von<br />

LWP::UserAgent abgeleitet und unterstützt<br />

demnach die Methode »get()« zum<br />

Einholen von Webseiten. Da der Router<br />

beim HTTP-Zugang nach einem Passwort<br />

<strong>für</strong> den Rootaccount fragt, stellt das Skript<br />

dieses mittels der ebenfalls ererbten Methode<br />

»credentials()« zur Verfügung.<br />

Aua, Javascript!<br />

Der erste Versuch <strong>alle</strong>rdings ging daneben:<br />

Beim Einholen der mit Basic<br />

Auth gesicherten Seite via »wget http://<br />

root:Passwort@192.162.0.1« zeigte sich,<br />

dass Tomato die Felder der Anzeige<br />

mittels Javascript auffrischt und einfache<br />

Webscraper wie das Perl-Modul<br />

Das siebte<br />

Weltwunder<br />

Die herkulische Aufgabe,<br />

diese Browseraktionen<br />

in Perl zu implementieren,<br />

hat das CPAN-Modul<br />

WWW::Scripter erledigt.<br />

Zusammen mit dem<br />

Abbildung 1: Tomatos Übersichtsseite listet unter anderem die Uptime<br />

des Routers in Tagen und Stunden auf.


Damit das Passwort nicht hart im Skript<br />

kodiert ist, liest es die Funktion »slurp()«<br />

aus der Datei »pw.txt« im aktuellen Verzeichnis<br />

ein. Die Datei enthält nur eine<br />

Zeile mit dem Passwort und sollte gegen<br />

unberechtigte Lese- oder gar Schreibzugriffe<br />

geschützt sein. Ganz astrein ist<br />

diese Lösung freilich nicht, doch irgendwie<br />

muss ich den Schlüssel unter der<br />

Fußmatte verstecken, wenn das Skript automatisch<br />

laufen soll und der User nicht<br />

jedes Mal das Passwort tippen kann.<br />

Maschine läuft an<br />

Holt »get()« die Seite vom Webinterface<br />

des Routers, enthält diese noch keine<br />

Daten, sondern nur den eingebetteten<br />

Javascript-Code. Der Aufruf »wait_for_timers()«<br />

startet nun die Javascript-Engine<br />

und lässt ihn auf dem Seiteninhalt herumfuhrwerken.<br />

Die Methode würde nun so lange blocken,<br />

bis auch der letzte Javascript-Timer<br />

im Code aufgehört hätte zu laufen, was<br />

aber bei vielen Webseiten einfach unendlich<br />

lange dauern würde. Der Parameter<br />

»max_wait« gibt deshalb vor, nicht länger<br />

als eine Sekunde zu warten. Diese<br />

Zeitspanne reicht auf Router-Seite erfahrungsgemäß,<br />

um die dynamischen Felder<br />

zu befüllen. Ein anschließender Aufruf<br />

von »content()« gibt das mit den Daten<br />

aufgefrischte HTML zurück.<br />

Den HTML-Salat entwirren<br />

Wie in Abbildung 3 ersichtlich, steht der<br />

gesuchte Uptime-Wert in einem Wirrwarr<br />

von HTML-Tags und man könnte<br />

ihn entweder mit regulären Ausdrücken<br />

oder einem HTML-Parser herausfieseln.<br />

Listing 1 wählt mit dem Xpath-Parser<br />

HTML::TreeBuilder::XPath vom CPAN die<br />

wohl bequemste Methode. Der Pfadausdruck<br />

in Zeile 21 steigt in der Hierarchie<br />

des HTML-Dokuments erst zum Body-<br />

Abbildung 2: Durch einfaches Einholen der Webseite lässt sich der Uptime-Wert nicht extrahieren.<br />

Abbildung 3: Die Javascript-Engine hat die hier hervorgehobenen Uptime-Daten eingefüllt, nachdem sie das<br />

Modul WWW::Scripter ausgeführt hat.<br />

Tag herunter und sucht dann wegen des<br />

doppelten Schrägstrichs in beliebigen<br />

Tiefen nach den weiter rechts spezifizierten<br />

Tags. Zum Ziel führt schließlich ein<br />

TR-Tag mit dem »Id«-Attribut »uptime«,<br />

das ein TD-Tag mit dem »class«-Attribut<br />

»content« einschließt, wie Abbildung<br />

3 zeigt. Die Methode »findvalue()« fördert<br />

den darin begrabenen Text zutage,<br />

es bleibt dem Skript nur noch, den gefundenen<br />

Wert auf der Standardausgabe<br />

auszugeben.<br />

Eine etwas dynamischere Aufgabe erzeugt<br />

die Tomato-Admin-Seite mit den<br />

aktuell verbrauchten Bandbreitenwerten.<br />

Unter dem Pfad »/bwm‐realtime.asp« der<br />

Router-URL erscheint der Graph in Abbildung<br />

4, der eine mittels Javascript<br />

erstellte Grafik mit den Schwankungen<br />

während der letzten 24 Stunden darstellt.<br />

In der Tabelle darunter stehen die aktuellen<br />

Werte <strong>für</strong> empfangene Daten (RX<br />

<strong>für</strong> received) in KBit/​s sowie gesendete<br />

Daten (TX <strong>für</strong> transmitted). Neben dem<br />

zuerst angezeigten, aktuell gemessenen<br />

Wert listet Tomato hier Maximalwerte<br />

(Peak) und Durchschnittswerte (Avg) auf<br />

sowie die Summe transferierter Bits seit<br />

dem Start der Messung, die beim Aufruf<br />

der Seite beginnt.<br />

Beim ersten Laden der Seite stehen <strong>alle</strong><br />

Werte auf null und erst nach einigen Sekunden<br />

füllen sich die Tabellenreihen<br />

mit interessanten Werten. Listing 2 wartet<br />

aus diesem Grund in der Funktion<br />

»rounds()« beim ersten Aufruf in Zeile 18<br />

geschlagene fünf Testdurchläufe ab, während<br />

es jeweils den Scripter mit der Methode<br />

»check_timers()« dazu auffordert,<br />

die Timer im Javascript-Code laufen zu<br />

lassen. Anschließend legt es in Zeile 28<br />

jedes Mal eine Sekunde Verschnaufpause<br />

ein. Nach Ablauf <strong>alle</strong>r vorgeschriebenen<br />

Runden startet Zeile 31 den der Funktion<br />

»rounds()« beim Aufruf hereingereichten<br />

Callback, was während der Proberunden<br />

aus Zeile 18 eine leere Funktionshülse<br />

ist, im Realbetrieb ab Zeile 19 aber die<br />

ab Zeile 35 definierte Funktion »extract_<br />

bandwidth«.<br />

Als Parser <strong>für</strong> die in HTML-Tabellen versteckte<br />

Information nutzt das Skript das<br />

CPAN-Modul HTML::TableExtract. Dessen<br />

Methode »parse()« nimmt in Zeile 40<br />

den von Javascript vorher modifizierten<br />

HTML-Code der Seite entgegen und formt<br />

einen Syntaxbaum daraus. Die Methode<br />

»first_table_found()« sucht dann die erste<br />

HTML-Tabelle, die auf Tomatos Band-<br />

Listing 1: »tomato-overview«<br />

01 #!/usr/local/bin/perl ‐w<br />

02 use strict;<br />

03 use WWW::Scripter;<br />

04 use Sysadm::Install qw(:all);<br />

05 use HTML::TreeBuilder::XPath;<br />

06<br />

07 my $w = WWW::Scripter‐>new();<br />

08 $w‐>use_plugin('Ajax');<br />

09<br />

10 my $pw = slurp "pw.txt";<br />

11 chomp $pw;<br />

12 $w‐>credentials( "root", $pw );<br />

13 $w‐>get('http://192.168.0.1');<br />

14<br />

15 $w‐>wait_for_timers( max_wait => 1 );<br />

16<br />

17 my $tree= HTML::TreeBuilder::XPath‐>new();<br />

18 $tree‐>parse( $w‐>content() );<br />

19 my $uptime =<br />

20 $tree‐>findvalue(<br />

21 '/html/body//tr[@id="uptime"]/' .<br />

22 'td[@class="content"]');<br />

23<br />

24 print "uptime: $uptime\n";<br />

Perl-Snapshot 11/2011<br />

Programmieren<br />

www.linux-magazin.de<br />

105


Programmieren<br />

www.linux-magazin.de Perl-Snapshot 11/2011<br />

106<br />

width-Seite tatsächlich die gesuchten<br />

Daten enthält.<br />

In der Testphase, während der der Entwickler<br />

noch nicht weiß, welche Tabelle<br />

welche Informationen enthält, hilft die<br />

Methode »tables()« desselben Moduls,<br />

das <strong>alle</strong> gefundenen Tabellen als Objekte<br />

zurückgibt. Deren Lage und hierarchische<br />

Verschachtelung gibt »coords()« an, ihren<br />

Inhalt schüttet »rows()« zeilenweise aus.<br />

Die Manualseite erklärt die Verwendung<br />

ausführlich.<br />

Tomato zeigt die Werte in KBit/​s an, fügt<br />

aber auch noch einen Wert Kilobyte pro<br />

Sekunde hinzu. Da sich beide jedoch<br />

lediglich um einen konstanten Faktor<br />

unterscheiden, filtert der reguläre Ausdruck<br />

in der Map-Anweisung in Zeile 47<br />

letzteren Wert aus, indem er <strong>alle</strong>s nach<br />

dem ersten Leerzeichen abschneidet. Die<br />

erste Spalte in »@cols« ist so entweder<br />

»RX« oder »TX«, gefolgt vom aktuellen<br />

Transferwert.<br />

In der vierten und sechsten Spalte (Arrayindex<br />

3 und 5 im Skript) stehen die Werte<br />

<strong>für</strong> die durchschnittliche Bandbreite und<br />

die der Spitzenwerte. Zeile 49 schiebt sie<br />

als Hash mit den Schlüsseln »avg« und<br />

»peak« in einen weiteren Hash unter die<br />

Schlüssel »RX« respektive<br />

»TX«. Damit<br />

sich die Ausgabe<br />

des Skripts<br />

maschinell leicht<br />

verarbeiten lässt,<br />

druckt Zeile 55<br />

den resultierenden<br />

Hash mit Hilfe der<br />

Methode »Dump()«<br />

des YAML-Moduls<br />

aus.<br />

Installation<br />

Abbildung 4: Der Tomato-Router frischt die aktuellen Bandbreitenwerte regel-<br />

Die dynamischen<br />

Greiferskripte benötigen<br />

außer dem<br />

Webscraper WWW<br />

::Mechanize auch mäßig mit Javascript auf.<br />

noch die CPAN-<br />

Module WWW::Scripter und WWW::<br />

Scripter::Plugin::Ajax, die sich zum Beispiel<br />

unter Ubuntu mit einer CPAN-Shell<br />

installieren lassen. Den in Listing 1 verwendeten<br />

Xpath-Parser HTML::Tree-<br />

Builder::XPath und den Tabellenparser<br />

HTML::TableExtract aus Listing 2 gibt es<br />

auch auf dem CPAN.<br />

Die im Artikel gezeigten Tricks lassen<br />

sich aber auch auf <strong>alle</strong>rlei andere interessante<br />

Seiten anwenden. Der engagierte<br />

Scraper-Hacker muss lediglich darauf<br />

achten, dass sein Datenstaubsauger nicht<br />

gegen die Terms of Service der Anbieter<br />

verstößt. (jcb)<br />

n<br />

Listing 2: »tomato-bandwidth«<br />

1 #!/usr/local/bin/perl ‐w<br />

02 use strict;<br />

03 use Sysadm::Install qw(:all);<br />

04 use WWW::Scripter;<br />

05 use HTML::TableExtract;<br />

06 use YAML qw(Dump);<br />

07<br />

08 my $w = new WWW::Scripter;<br />

09 $w‐>use_plugin('Ajax');<br />

10<br />

11 my $pw = slurp "pw.txt";<br />

12 chomp $pw;<br />

13<br />

14 $w‐>credentials( "root", $pw );<br />

15 $w‐>get(<br />

16 'http://192.168.0.1/bwm‐realtime.asp');<br />

17<br />

18 rounds( $w, 5, sub { } );<br />

19 rounds( $w, 1, \&extract_bandwidth );<br />

20<br />

21 ###########################################<br />

22 sub rounds {<br />

23 ###########################################<br />

24 my( $w, $rounds, $callback ) = @_;<br />

25<br />

26 for( 1 .. $rounds ) {<br />

27 $w‐>check_timers();<br />

28 sleep( 1 );<br />

29 }<br />

30<br />

31 $callback‐>( $w‐>content );<br />

32 }<br />

33<br />

34 ###########################################<br />

35 sub extract_bandwidth {<br />

36 ###########################################<br />

37 my( $html ) = @_;<br />

38<br />

39 my $te = HTML::TableExtract‐>new( );<br />

40 $te‐>parse( $html );<br />

41<br />

42 my $ts = $te‐>first_table_found();<br />

43<br />

44 my %bw = ();<br />

45<br />

46 foreach my $row ($ts‐>rows) {<br />

47 my @cols = map { /(\S+)/ } @$row;<br />

48<br />

49 $bw{ $cols[0] } =<br />

50 { avg => $cols[3],<br />

51 peak => $cols[5],<br />

52 };<br />

53 }<br />

54<br />

55 print Dump( \%bw );<br />

56 }<br />

Infos<br />

[1] Listings zu diesem Artikel:<br />

[ftp:// www. linux‐magazin. de/ pub/ listings/​<br />

magazin/ 2011/ 11/ Perl]<br />

[2] Tomato-Firmware <strong>für</strong> Linksys-Router:<br />

[http:// www. polarcloud. com/ tomato]<br />

[3] Michael Schilli, „Browser ferngesteuert“:<br />

<strong>Linux</strong>-<strong>Magazin</strong> 10/06, S. 118, [http:// www.​<br />

linux‐magazin. de/ Heft‐Abo/ Ausgaben/​<br />

2006/ 10/ Browser‐ferngesteuert]<br />

Der Autor<br />

Michael Schilli arbeitet<br />

als Software-Engineer bei<br />

Yahoo in Sunnyvale, Kalifornien.<br />

Er hat „Goto Perl<br />

5“ (auf Deutsch) und „Perl<br />

Power“ (auf Englisch)<br />

<strong>für</strong> Addison-Wesley geschrieben und ist unter<br />

[mschilli@perlmeister. com] zu erreichen. Seine<br />

Homepage ist [http:// perlmeister. com].<br />

Online PLUS<br />

In einem Screencast demonstriert Michael<br />

Schilli das Beispiel: [http://​www.<br />

linux-magazin.de/​plus/​2011/​11]


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

ACADEMY<br />

... wir qualifizieren Ihre Mitarbeiter!<br />

IT Trainings Online<br />

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

Nutzen Sie die Vorteile<br />

der <strong>Linux</strong>-<strong>Magazin</strong> Academy!<br />

✓<br />

✓<br />

✓<br />

✓<br />

✓<br />

Kompetent: Unsere Dozenten sind ausge wiesene<br />

Profis mit lang jähriger Schulungserfahrung.<br />

Flexibel: Der Schulungsteilnehmer lernt, wann,<br />

wo und sooft er möchte.<br />

Kosteneffizient: Nutzen Sie Einsparungen<br />

gegenüber Vor-Ort-Schulungen.<br />

Übersichtlich: Die komfortable Web- Oberfläche<br />

zeigt gleich zeitig den Trainer und dessen<br />

Arbeitsfläche<br />

Individuell: Jeder Teilnehmer folgt seinem eigenen<br />

Lerntempo.<br />

Trainingspakete:<br />

Monitoring mit Nagios<br />

• WordPress 3.0<br />

www.lpi.org<br />

LPIC-1- / LPIC-2-Training<br />

IT-Sicherheit Grundlagentraining<br />

OpenOffice – Arbeiten mit Vorlagen<br />

Was Teilnehmer über die<br />

<strong>Linux</strong>-<strong>Magazin</strong> Academy sagen:<br />

„Mit den Videos haben Sie ins Schwarze<br />

getroffen. Es gibt nichts Vergleichbares.“<br />

„Eine hervorragende Anleitung zum<br />

praktischen Arbeiten“<br />

Testen Sie unsere Demovideos:<br />

academy.linux-magazin.de/demo<br />

Präsentiert von:<br />

www.linux-magazin.de<br />

www.linuxhotel.de<br />

Weitere Infos: academy.linux-magazin.de


Service<br />

www.linux-magazin.de IT-Profimarkt 11/2011<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 />

<strong>Linux</strong> New Media AG<br />

Anzeigenabteilung<br />

Putzbrunner Str. 71<br />

D-81739 München<br />

Tel.: +49 (0)89/99 34 11-23<br />

Fax: +49 (0)89/99 34 11-99<br />

E-Mail: anzeigen@linux-magazin.de<br />

IT-Profimarkt – Liste sortiert nach Postleitzahl<br />

1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />

4= Fachliteratur 4= Seminaranbieter 5 = Software 5 = Software 6 = Schulung/Beratung 6 = Firma Anschrift Telefon Web 1 2 3 4 5 6<br />

Schlittermann internet & unix support 01099 Dresden, Tannenstr. 2 0351-802998-1 www.schlittermann.de 3 3 3 3<br />

imunixx GmbH UNIX consultants 01468 Moritzburg, Heinrich-Heine-Str. 4 0351-83975-0 www.imunixx.de 3 3 3 3 3<br />

TUXMAN Computer 10369 Berlin, Anton-Saefkow-Platz 8 030-97609773 www.tuxman.de 3 3 3 3 3<br />

Hostserver GmbH 10405 Berlin, Winsstraße 70 030-47375550 www.hostserver.de 3<br />

Compaso GmbH 10439 Berlin, Driesener Strasse 23 030-3269330 www.compaso.de 3 3 3 3 3<br />

<strong>Linux</strong> Information Systems AG Berlin 12161 Berlin, Bundes<strong>alle</strong>e 93 030-818686-03 www.linux-ag.com 3 3 3 3 3<br />

elego Software Solutions GmbH 13355 Berlin, Gustav-Meyer-Allee 25 030-2345869-6 www.elegosoft.com 3 3 3 3<br />

verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-4610-0 www.verion.de 3 3 3<br />

Logic Way GmbH 19061 Schwerin, Hagenower Str. 73 0385-39934-48 www.logicway.de 3 3 3 3<br />

Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de 3 3 3 3 3<br />

UDS-<strong>Linux</strong> - Schulung, Beratung, Entwicklung 22087 Hamburg, Lübecker Str. 1 040-45017123 www.uds-linux.de 3 3 3 3 3 3<br />

Dr. Plöger & Kollegen secom consulting<br />

GmbH & Co. KG<br />

24105 Kiel, Waitzstr. 3 0431-66849700 www.secom-consulting.de 3 3 3 3 3<br />

beitco - Behrens IT-Consulting 26197 Ahlhorn, Lessingstr. 27 04435-9537330-0 www.beitco.de 3 3 3 3<br />

talicom GmbH 30169 Hannover, Calenberger Esplanade 3 0511-123599-0 www.talicom.de 3 3 3 3 3<br />

teuto.net Netzdienste GmbH 33602 Bielefeld, Niedenstr. 26 0521-96686-0 www.teuto.net 3 3 3 3 3<br />

Hostserver GmbH 35037 Marburg, Biegenstr. 20 06421-175175-0 www.hostserver.de 3<br />

OpenIT GmbH 40599 Düsseldorf, In der Steele 33a-41 0211-239577-0 www.OpenIT.de 3 3 3 3 3<br />

<strong>Linux</strong>-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de 3 3 3 3 3<br />

<strong>Linux</strong>hotel GmbH 45279 Essen, Antonien<strong>alle</strong>e 1 0201-8536-600 www.linuxhotel.de 3<br />

OpenSource Training Ralf Spenneberg 48565 Steinfurt, Am Bahnhof 3-5 02552-638755 www.opensource-training.de 3<br />

Intevation GmbH 49074 Osnabrück, Neuer Graben 17 0541-33508-30 osnabrueck.intevation.de 3 3 3 3<br />

uib gmbh 55118 Mainz, Bonifaziusplatz 1b 06131-27561-0 www.uib.de 3 3 3 3 3<br />

LISA GmbH 55411 Bingen, Elisenhöhe 47 06721-49960 www.lisa-gmbh.de 3 3 3 3 3<br />

saveIP GmbH 64283 Darmstadt, Schleiermacherstr. 23 06151-666266 www.saveip.de 3 3 3 3 3<br />

LAMARC EDV-Schulungen u. Beratung GmbH 65193 Wiesbaden, Sonnenberger Straße 14 0611-260023 www.lamarc.com 3 3 3 3<br />

IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />

(S.110)


Markt<br />

MAGAZIN<br />

ONLINE<br />

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

Nachrichten rund um die Themen <strong>Linux</strong> und Open Source lesen Sie täglich<br />

im Newsletter des <strong>Linux</strong>-<strong>Magazin</strong>s.<br />

Newsletter<br />

informativ<br />

kompakt<br />

tagesaktuell<br />

www.linux-magazin.de/newsletter


Service<br />

www.linux-magazin.de IT-Profimarkt 11/2011<br />

110<br />

IT-Profimarkt<br />

IT-Profimarkt – Liste sortiert nach Postleitzahl (Fortsetzung von S. 108)<br />

1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />

4= Seminaranbieter 5 = Software 6 = Beratung<br />

Firma Anschrift Telefon Web 1 2 3 4 5 6<br />

ORDIX AG 65205 Wiesbaden, Kreuzberger Ring 13 0611-77840-00 www.ordix.de 3 3 3 3 3<br />

<strong>Linux</strong>Haus Stuttgart 70565 Stuttgart, Hessenwiesenstrasse 10 0711-2851905 www.linuxhaus.de 3 3 3 3 3<br />

comundus GmbH 71332 Waiblingen, Schüttelgrabenring 3 07151-5002850 www.comundus.com 3<br />

Manfred Heubach EDV und Kommunikation 73728 Esslingen, Hindenburgstr. 47 0711-4904930 www.heubach-edv.de 3 3 3 3<br />

Waldmann EDV Systeme + Service 74321 Bietigheim-Bissingen, Pleidelsheimer Str. 25 07142-21516 www.waldmann-edv.de 3 3 3 3 3<br />

in-put Das <strong>Linux</strong>-Systemhaus 76133 Karlsruhe, Moltkestr. 49 0721-6803288-0 www.in-put.de 3 3 3 3 3 3<br />

Bodenseo 78224 Singen, Pomeziastr. 9 07731-1476120 www.bodenseo.de 3 3 3<br />

<strong>Linux</strong> Information Systems AG 81739 München, Putzbrunnerstr. 71 089-993412-0 www.linux-ag.com 3 3 3 3 3<br />

Synergy Systems GmbH 81829 München, Konrad-Zuse-Platz 8 089-89080500 www.synergysystems.de 3 3 3 3 3<br />

B1 Systems GmbH 85088 Vohburg, Osterfeldstrasse 7 08457-931096 www.b1-systems.de 3 3 3 3 3<br />

ATIX AG 85716 Unterschleißheim, Einsteinstr. 10 089-4523538-0 www.atix.de 3 3 3 3 3<br />

Bereos OHG 88069 Tettnang, Kalchenstraße 6 07542-9345-20 www.bereos.eu 3 3 3 3 3<br />

OSTC Open Source Training and Consulting<br />

GmbH<br />

90425 Nürnberg, Delsenbachweg 32 0911-3474544 www.ostc.de 3 3 3 3 3 3<br />

Dipl.-Ing. Christoph Stockmayer GmbH 90571 Schwaig, Dreihöhenstr. 1 0911-505241 www.stockmayer.de 3 3 3<br />

Computersysteme Gmeiner 95643 Tirschenreuth, Fischerhüttenweg 4 09631-7000-0 www.gmeiner.de 3 3 3 3 3<br />

RealStuff Informatik AG CH-3007 Bern, Chutzenstrasse 24 0041-31-3824444 www.realstuff.ch 3 3 3<br />

CATATEC CH-3013 Bern, Dammweg 43 0041-31-3302630 www.catatec.ch 3 3 3<br />

EBP Gasser CH-4208 Nunningen, Winkel 6 0041-61793-0099 www.ebp-gasser.ch 3 3 3 3 3<br />

Syscon Systemberatungs AG CH-8003 Zürich, Zweierstrasse 129 0041-44-4542010 www.syscon.ch 3 3 3 3 3<br />

Helvetica IT AG CH-8890 Flums, Bahnhofstrasse 15 0041-817331567 www.helvetica-it.com 3 3 3<br />

IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um <strong>Linux</strong> bieten. Alle Angaben ohne Gewähr. <br />

n<br />

MAGAZIN<br />

nUr<br />

MiT dVd!<br />

SondErAkTion<br />

Testen Sie jetzt<br />

3 Ausgaben<br />

<strong>für</strong> 3 Euro!<br />

Gleich bestellen...<br />

• Telefon: 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@linux-magazin.de<br />

Mit großem Gewinnspiel (Infos unter: www.linux-magazin.de/probeabo) *Preis gilt <strong>für</strong> Deutschland


u<br />

Fo<br />

Fa<br />

eM<br />

Seminare/Markt<br />

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

ACADEMY<br />

Online-Training<br />

mit Hans-Georg Esser, Chefredakteur Easy<strong>Linux</strong><br />

OpenOffice -<br />

Arbeiten mit Vorlagen<br />

Erleichtern Sie sich Ihre<br />

tägliche Arbeit mit (Auszug):<br />

❚ einheitlichen Dokumentenvorlagen<br />

❚ automatischen Formatierungen<br />

❚ generierten Inhaltsverzeichnissen<br />

20%<br />

Treue-Rabatt <strong>für</strong><br />

Abonnenten<br />

Treue-Rabatt <strong>für</strong><br />

Abonnenten<br />

Mit vielen<br />

Praxisbeispielen<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/openoffice<br />

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

ACADEMY<br />

Online-Training<br />

Erfolgreicher Einstieg in<br />

WordPress 3<br />

Teststudium<br />

ohne Risiko!<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 <strong>für</strong> 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 <strong>für</strong><br />

Abonnenten<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/wordpress<br />

Fernstudium<br />

IT-Sicherheit<br />

Aus- und Weiterbildung zur Fachkraft <strong>für</strong><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 />

s<br />

s<br />

h<br />

a<br />

g<br />

el<br />

e<br />

p<br />

g<br />

rü<br />

Fernstudium<br />

f<br />

t<br />

n<br />

d<br />

z<br />

u<br />

Seminare/Markt 11/2011<br />

Service<br />

www.linux-magazin.de<br />

111<br />

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

Academy_1-9h_Anzeige_openoffice-Mike.indd 1<br />

©mipan, fotolia<br />

ACADEMY<br />

20%<br />

Treue-Rabatt <strong>für</strong><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 />

12.04.2011 1-9h_Anzeige_wordpress_v02.indd 15:08:54 Uhr<br />

1<br />

DiD you<br />

know?<br />

OpenSource Training Ralf Spenneberg<br />

18.04.2011 11:18:15 Uhr<br />

Schulungen direkt vom Autor<br />

SE<strong>Linux</strong> Administration<br />

2 Tage 24.10. ­ 25.10.2011<br />

Entwicklung von SE<strong>Linux</strong> Richtlinien<br />

2 Tage 26.10. ­ 27.10.2011<br />

IPv6 mit <strong>Linux</strong><br />

3 Tage 08.11. ­ 10.11.2011<br />

Administration & Deployment of Kolab Groupware<br />

5 Tage 14.11. ­ 18.11.2011<br />

VPN Lösungen mit <strong>Linux</strong><br />

4 Tage 28.11. ­ 01.12.2011<br />

Snort IDS/IPS Technology<br />

4 Tage 06.12. ­ 09.12.2011<br />

Sichere Mailserver Lösungen mit Postfix<br />

5 Tage 12.12. ­ 16.12.2011<br />

<strong>Linux</strong> System Administration / LPIC­1<br />

5 Tage 09.01. ­ 13.01.2012<br />

Hacking Webapplications<br />

4 Tage 17.01. ­ 20.01.2012<br />

Freie Distributionswahl:<br />

Opensuse, Fedora, Debian Squeeze,<br />

CentOS oder Ubuntu LTS<br />

Ergonomische Arbeitsplätze<br />

Umfangreiche Schulungsunterlagen mit<br />

Übungen<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/sicherheit<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 />

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

cademy_1-9h_Security-Mike.indd 1<br />

ACADEMY<br />

12.04.2011 14:00:35 Uhr<br />

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

ACADEMY<br />

Online-Training<br />

Monitoring mit Nagios<br />

mit Michael Streb von Netways<br />

Netzwerk überwachen<br />

leicht gemacht (Auszug):<br />

20%<br />

❚ das Webfrontend<br />

❚ Überwachung von<br />

Windows/<strong>Linux</strong>/Unix<br />

❚ Strukturieren der Konfiguration<br />

❚ Überwachen von<br />

SNMP-Komponenten<br />

❚ Addons Nagvis,<br />

Grapher V2, NDO2DB Mit vielen<br />

Treue-Rabatt <strong>für</strong><br />

Abonnenten<br />

Praxisbeispielen<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/nagios<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 <strong>alle</strong>r Welt...<br />

www.linux-magazine.com<br />

Online-Training<br />

Prüfungsvorbereitung<br />

<strong>für</strong> LPIC 1 & 2<br />

Besorgen Sie sich Brief und<br />

Siegel <strong>für</strong> Ihr <strong>Linux</strong>-<br />

Knowhow mit der<br />

LPI-Zertifizierung.<br />

- Training <strong>für</strong> die Prüfungen<br />

LPI 101 und 102<br />

- Training <strong>für</strong> die Prüfungen<br />

LPI 201 und 202<br />

Sparen Sie mit<br />

paketpreiSen!<br />

20%<br />

Treue-Rabatt <strong>für</strong><br />

Abonnenten<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/lpic<br />

Anzeige_1-9h_Anzeige_Nagios-Mike.indd 1<br />

14.04.2011 LMI_german_2-9h_black_110920.indd 11:58:43 Uhr<br />

1<br />

20.09.2011 LM-Academy_1-9h_Anzeige_LPIC-Mike.indd 15:17:49 Uhr<br />

1<br />

18.04.2011 11:05:38 Uhr


Service<br />

www.linux-magazin.de Inserenten 11/2011<br />

112<br />

Inserentenverzeichnis<br />

1&1 Internet AG http://​www.einsundeins.de 15, 44, 45, 47<br />

1blu AG http://​www.1blu.de 23<br />

9. Kieler Open Source und <strong>Linux</strong> Tage 2011 http://​www.kielux.de 9<br />

ADMIN http://​www.admin-magazin.de 83, 87<br />

Android User http://www.android-user.de 61, 63, 81<br />

embedded projects GmbH http://​www.embedded-projects.net 109<br />

Fernschule Weber GmbH http://​www.fernschule-weber.de 111<br />

Heinlein Professional <strong>Linux</strong> Support GmbH http://​www.heinlein-partner.de 51, 59, 67<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 />

InterNetX GmbH http://​www.internetx.com 17<br />

<strong>Linux</strong> <strong>Magazin</strong>e http://​www.linux-magazine.com 111<br />

<strong>Linux</strong>-Hotel http://​www.linuxhotel.de 41<br />

<strong>Linux</strong>-<strong>Magazin</strong> http://​www.linux-magazin.de 110, 115<br />

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

http://​www.academy.linux-magazin.de<br />

56, 107, 111<br />

<strong>Linux</strong>-<strong>Magazin</strong> Online http://​www.linux-magazin.de 109<br />

<strong>Linux</strong>User http://​www.linuxuser.de 93<br />

Mittwald CM Service GmbH & Co. KG http://​www.mittwald.de 19<br />

Netclusive GmbH http://​www.netclusive.de 13<br />

Netways GmbH http://​www.netways.de 65<br />

O’Reilly Verlag GmbH & Co KG http://​www.oreilly.de 77<br />

Open Source Press GmbH http://​www.opensourcepress.de 39<br />

OpenRheinRuhr http://​www.openrheinruhr.de 85<br />

OVH GmbH http://​www.ovh.de 11<br />

PlusServer AG http://​www.plusserver.de 54, 78, 94, 100<br />

Schlittermann internet & unix support http://​schlittermann.de 109<br />

SolvetecIT Services GmbH http://​www.solvetec.de​ 35<br />

Spenneberg Training & Consulting http://​www.spenneberg.com 111<br />

Strato AG http://​www.strato.de 1, 37<br />

Thomas Krenn AG http://​www.thomas-krenn.com 69<br />

Ubuntu User http://​www.ubuntu-user.de 21<br />

Einem Teil dieser Ausgabe liegt eine Beilage der Firma OVH GmbH (http://​www.ovh.<br />

de​) bei. Wir bitten unsere Leser um freundliche Beachtung.<br />

Veranstaltungen<br />

04.-07.10.2011<br />

Planet of the Apps<br />

London, UK<br />

http://www.terrapinn.com/2011/planet-of-the-apps/<br />

04.-09.10.2011<br />

PyCon DE 2011<br />

Leipzig<br />

http://de.pycon.org<br />

06.-07.10.2011<br />

Droidcon London 2011<br />

London, UK<br />

http://uk.droidcon.com<br />

12.-15.10.2011<br />

LibreOffice Conference 2011<br />

Paris, France<br />

http://conference.libreoffice.org<br />

14.-16.10.2011<br />

Ubucon 2011<br />

Leipzig<br />

http://ubucon.de<br />

17.10.2011<br />

Eclipse Embedded Day Spain 2011<br />

Zamudio, Spain<br />

http://www.tecnalia.com/en/divisions/ict-europeansoftware-institute/software-systems-engineering/ev<br />

18.-20.10.2011<br />

Blackberry DevCon 2011<br />

San Francisco, CA USA<br />

http://www.blackberrydevcon.com<br />

20.10.2011<br />

Contact Summit 2011<br />

New York, NY USA<br />

http://contactcon.com<br />

20.-21.10.2011<br />

6th International Workshop on Plan 9<br />

Madrid, Spain<br />

http://iwp9.org<br />

21.-27.10.2011<br />

Hacker Halted USA 2011<br />

Miami, FL USA<br />

http://www.hackerhalted.com/2011<br />

23.-25.10.2011<br />

<strong>Linux</strong> Kernel Summit 2011<br />

Prague, Czech Republic<br />

http://events.linuxfoundation.org/events/linux-kernelsummit<br />

26.-28.10.2011<br />

<strong>Linux</strong>Con Europe<br />

Prague, Czech Republic<br />

http://events.linuxfoundation.org/events/<br />

28.-29.10.2011<br />

9. Kieler <strong>Linux</strong>-Tage<br />

Kiel<br />

http://www.kieler-linuxtage.de<br />

01.-02.11.2011<br />

Apps World North America 2011<br />

New York City, NY, USA<br />

http://www.apps-world.net/northamerica/<br />

05.11.2011<br />

Brandenburger <strong>Linux</strong>-Infotag 2011<br />

Potsdam<br />

http://blit.org<br />

07.-11.11.2011<br />

ApacheCon NA 2011<br />

Vancouver, BC, Canada<br />

http://na11.apachecon.com<br />

09.-10.11.2011<br />

Libre Software World Conference 2011<br />

Zaragoza, Spain<br />

http://www.asolif.es/?page=fechas_lswc_2011<br />

09.-12.11.2011<br />

Grace Hopper Celebration of Women in Computing<br />

Portland, OR USA<br />

http://gracehopper.org/2011/<br />

11.-13.11.2011<br />

FSCONS 2011<br />

Gothenburg, Sweden<br />

http://fscons.org<br />

12.-13.11.2011<br />

OpenRheinRuhr 2011<br />

Oberhausen<br />

http://www.openrheinruhr.de<br />

12.-18.11.2011<br />

SC11: SuperComputing 2011<br />

Seattle, WA, USA<br />

http://sc11.supercomputing.org<br />

16.-18.11.2011<br />

Open Source Developers Conference 2011<br />

Canberra, Australia<br />

http://osdc.com.au<br />

26.11.2011<br />

<strong>Linux</strong>day Vorarlberg 2011<br />

Dornbirn, Austria<br />

http://www.linuxday.at<br />

30.11.2011<br />

Rechtsprobleme <strong>für</strong> Administratoren und IT-<br />

Entscheider<br />

Berlin (Heinlein Akademie)<br />

http://www.heinlein-support.de/rechtstag<br />

01.-02.12.2011<br />

Secure <strong>Linux</strong> Administration Conference<br />

Berlin (Heinlein Akademie)<br />

http://www.heinlein-support.de/slac<br />

02.-07.12.2011<br />

TakeDownCon – Mobile & Wireless Security<br />

Las Vegas, NV USA<br />

http://www.takedowncon.com/?page_id=165<br />

04.-09.12.2011<br />

LISA ’11<br />

Boston, MA USA<br />

http://www.usenix.org/events/<br />

07.-08.12.2011<br />

<strong>Linux</strong>Con Brazil 2011<br />

São Paulo, Brazil<br />

http://events.linuxfoundation.org/events/linuxcon-brazil<br />

16.-20.01.2012<br />

linux.conf.au 2012<br />

Ballarat, Australia<br />

http://linux.conf.au<br />

25.-26.01.2012<br />

Cloud Expo Europe 2012<br />

London, UK<br />

http://www.cloudexpoeurope.com


Impressum<br />

<strong>Linux</strong>-<strong>Magazin</strong> eine Publikation der <strong>Linux</strong> New Media AG<br />

Redaktionsanschrift Putzbrunner Str. 71<br />

81739 München<br />

Tel.: 089/993411-0<br />

Fax: 089/993411-99 oder -96<br />

Internet<br />

www.linux-magazin.de<br />

E-Mail<br />

redaktion@linux-magazin.de<br />

Geschäftsleitung<br />

Chefredakteure<br />

stv. Chefredakteure<br />

Brian Osborn (Vorstand), bosborn@linuxnewmedia.de<br />

Hermann Plank (Vorstand), hplank@linuxnewmedia.de<br />

Jan Kleinert (V.i.S.d.P.), jkleinert@linux-magazin.de (jk)<br />

Ulrich Bantle (Online), ubantle@linux-magazin.de (uba)<br />

Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />

Mathias Huber, mhuber@linux-magazin.de (mhu)<br />

Print- und Onlineredaktion<br />

Aktuell, Forum Ulrich Bantle, ubantle@linux-magazin.de (uba)<br />

Mathias Huber, mhuber@linux-magazin.de (mhu)<br />

Software, Programmierung Mathias Huber, mhuber@linux-magazin.de (mhu)<br />

Sysadmin, Know-how Markus Feilner, mfeilner@linux-magazin.de (mfe)<br />

Ständige Mitarbeiter Fred Andresen (fan), Zack Brown, Mela Eckenfels, Hans-Georg<br />

Eßer (hge), Oliver Frommel (ofr), Heike Jurzik (hej), Charly<br />

Kühnast, Martin Loschwitz, Michael Schilli, Carsten Schnober<br />

(csc), Mark Vogelsberger, Uwe Vollbracht, Britta Wülfing (bwü)<br />

Schlussredaktion<br />

Grafik<br />

Bildnachweis<br />

DELUG-DVD<br />

Chefredaktionen<br />

International<br />

Produktion<br />

Onlineshop<br />

Abo-Infoseite<br />

Abonnenten-Service<br />

ISSN 1432 – 640 X<br />

Jürgen Manthey<br />

xhoch4, München (Titel-Illustration),<br />

123RF.com, Fotolia.de, Photocase.com, Pixelio.de und andere<br />

Thomas Leichtenstern, tleichtenstern@linuxnewmedia.de (tle)<br />

<strong>Linux</strong> <strong>Magazin</strong>e International<br />

Joe Casad (jcasad@linux-magazine.com)<br />

<strong>Linux</strong> <strong>Magazin</strong>e Poland<br />

Artur Skura (askura@linux-magazine.pl)<br />

<strong>Linux</strong> <strong>Magazin</strong>e Spain<br />

Paul C. Brown (pbrown@linux-magazine.es)<br />

<strong>Linux</strong> <strong>Magazin</strong>e Brasil<br />

Rafael Peregrino (rperegrino@linuxmagazine.com.br)<br />

Christian Ullrich, cullrich@linuxnewmedia.de<br />

shop.linuxnewmedia.de<br />

www.linux-magazin.de/Produkte<br />

Lea-Maria-Schmitt<br />

abo@linux-magazin.de<br />

Tel.: 07131/27 07 274<br />

Fax: 07131/27 07 78 601<br />

CH-Tel: +41 43 816 16 27<br />

Preise Print Deutschland Österreich Schweiz Ausland EU<br />

No-Media-Ausgabe 4 5,95 4 6,70 Sfr 11,90 (siehe Titel)<br />

DELUG-DVD-Ausgabe 4 8,50 4 9,35 Sfr 17,— (siehe Titel)<br />

Jahres-DVD (Einzelpreis) 4 14,95 4 14,95 Sfr 18,90 4 14,95<br />

Jahres-DVD (zum Abo 1 ) 4 6,70 4 6,70 Sfr 8,50 4 6,70<br />

Mini-Abo (3 Ausgaben) 4 3,— 4 3,— Sfr 4,50 4 3,—<br />

Jahresabo No Media 4 63,20 4 71,50 Sfr 99,96 4 75,40<br />

Jahresabo DELUG-DVD 4 87,90 4 96,90 Sfr 142,80 4 99,90<br />

Preise Digital Deutschland Österreich Schweiz Ausland EU<br />

Heft-PDF Einzelausgabe 4 5,95 4 5,95 Sfr 7,70 4 5,95<br />

DigiSub (12 Ausgaben) 4 63,20 4 63,20 Sfr 78,50 4 63,20<br />

DigiSub (zum Printabo) 4 12,— 4 12,— Sfr 12 4 12,—<br />

HTML-Archiv (zum Abo 1 ) 4 12,— 4 12,— Sfr 12,— 4 12,—<br />

Preise Kombiabos Deutschland Österreich Schweiz Ausland EU<br />

Mega-Kombi-Abo 2 4 143,40 4 163,90 Sfr 199,90 4 173,90<br />

Profi-Abo 3 4 136,60 4 151,70 Sfr 168,90 4 165,70<br />

1<br />

nur erhältlich in Verbindung mit einem Jahresabo Print oder Digital<br />

2<br />

mit <strong>Linux</strong>User-Abo (DVD) und beiden Jahres-DVDs, inkl. DELUG-Mitgliedschaft (monatl.<br />

DELUG-DVD)<br />

3<br />

mit ADMIN-Abo und beiden Jahres-DVDs<br />

Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises<br />

oder einer aktuellen Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei<br />

Verlän gerung neu zu erbringen. Andere Abo-Formen, Ermäßigungen im Ausland etc.<br />

auf Anfrage.<br />

Adressänderungen bitte umgehend mitteilen, da Nachsendeaufträge bei der Post nicht<br />

<strong>für</strong> Zeitschriften gelten.<br />

Pressemitteilungen<br />

Marketing und Vertrieb<br />

Mediaberatung D, A, CH<br />

Mediaberatung UK, Irland<br />

Mediaberatung USA<br />

Pressevertrieb<br />

Druck<br />

presse-info@linux-magazin.de<br />

Petra Jaser, anzeigen@linuxnewmedia.de<br />

Tel.: +49 (0)89 / 99 34 11 – 24<br />

Fax: +49 (0)89 / 99 34 11 – 99<br />

Penny Wilby, pwilby@linux-magazine.com<br />

Tel.: +44 (0)1787 211100<br />

Eric Henry, ehenry@linuxnewmedia.com<br />

Tel.:+1 785 917 0990<br />

Ann Jesse, ajesse@linuxnewmedia.com<br />

Tel.: +1 785 841 8834<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 <strong>für</strong> 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 <strong>für</strong> 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 <strong>für</strong> angenommene Manuskripte liegt beim Verlag. Es<br />

darf kein Teil des Inhalts ohne ausdrückliche schriftliche Genehmigung des Verlags in<br />

irgendeiner Form vervielfältigt oder verbreitet werden.<br />

Copyright © 1994 – 2011 <strong>Linux</strong> New Media AG<br />

Impressum 11/2011<br />

Service<br />

www.linux-magazin.de<br />

113<br />

Krypto-Info<br />

GnuPG-Schlüssel der <strong>Linux</strong>-<strong>Magazin</strong>-Redaktion:<br />

pub 1024D/44F0F2B3 2000-05-08 Redaktion <strong>Linux</strong>-<strong>Magazin</strong><br />

<br />

Key fingerprint = C60B 1C94 316B 7F38 E8CC E1C1 8EA6 1F22 44F0 F2B3<br />

Public-Key der DFN-PCA:<br />

pub 2048R/7282B245 2007-12-12,<br />

DFN-PGP-PCA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />

<br />

Key fingerprint = 39 D9 D7 7F 98 A8 F1 1B 26 6B D8 F2 EE 8F BB 5A<br />

PGP-Zertifikat der DFN-User-CA:<br />

pub 2048R/6362BE8B (2007-12-12),<br />

DFN-PGP-User-CA, CERTIFICATION ONLY KEY (DFN-PGP-Policy: 2008-2009)<br />

<br />

Key fingerprint = 30 96 47 77 58 48 22 C5 89 2A 85 19 9A D1 D4 06<br />

Root-Zertifikat der CAcert:<br />

Subject: O=Root CA, OU=http://www.cacert.org, CN=CA Cert Signing Authority/<br />

Email=support@cacert.org<br />

SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33<br />

MD5 Fingerprint=A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B<br />

GPG-Schlüssel der CAcert:<br />

pub 1024D/​65D0FD58 2003-07-11 [expires: 2033-07-03]<br />

Key fingerprint = A31D 4F81 EF4E BD07 B456 FA04 D2BB 0D01 65D0 FD58<br />

uid CA Cert Signing Authority (Root CA) <br />

Autoren dieser Ausgabe<br />

Konstantin Agouros Kaffee <strong>für</strong> <strong>alle</strong> 34<br />

Fred Andresen <strong>Einer</strong> <strong>für</strong> <strong>alle</strong> 88<br />

Bernhard Bablok Bash Bashing 102<br />

Zack Brown Zacks Kernel-News 20<br />

Mela Eckenfels Summa cum laude 58<br />

Peter Kreußel Kernthema Kernel 22<br />

Peter Kreußel Malkasten 46<br />

Eva-Katharina Kunst Kern-Technik 96<br />

Charly Kühnast Horrorbilder 71<br />

Michael Müller Tux liest 91<br />

Falk Nedwal Kette des Vertrauens 80<br />

Marcus Nutzinger Starkes Gespann 24<br />

Rainer Poisel Starkes Gespann 24<br />

Jürgen Quade Kern-Technik 96<br />

Michael Schilli Abgesaugt 104<br />

Tim Schürmann Affentheater 38<br />

Dr. Udo Seidel Konkurrenz am Start 72<br />

Uwe Vollbracht Tooltipps 68<br />

Matthias Warkus Auf einen Streich 30


Service<br />

www.linux-magazin.de <strong>Vorschau</strong> 12/2011 1/2011 12/2010 11/2011<br />

114<br />

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

12/2011 Dachzeile<br />

Owncloud 2.0<br />

© Juergen Priewe, 123RF.com<br />

MAGAZIN<br />

Überschrift<br />

Das KDE-nahe Projekt Owncloud setzt Cloud-Dienste mit freier<br />

Software um und legt deren Betrieb in die Hände der Anwender.<br />

Das <strong>Linux</strong>-<strong>Magazin</strong> hat sich die bald anstehende Version 2<br />

genau angeschaut, die neben den Dateidiensten der aktuellen<br />

Version leicht zu entwickelnde Apps einführt. Gemeint sind Erweiterungen<br />

wie Kalender, Notizen, Bookmarks und so weiter.<br />

Insecurity Bulletin<br />

Virtualisierung++<br />

Der Nachweis, dass Virtualisierung wirtschaftlich und technisch<br />

in der Praxis funktioniert, ist hinlänglich erbracht. Zu berichten<br />

gibt es gleichwohl über das Thema genug – und genau<br />

das hat die kommende <strong>Linux</strong>-<strong>Magazin</strong>-Ausgabe vor. Dabei fokussiert<br />

die Redaktion auf die bislang zu unrecht wenig beachteten<br />

Bereiche Monitoring und Verfügbarkeit.<br />

Ein Beitrag wird sich mit dem Clustern von KVM beschäftigen.<br />

Nagios und Pacemaker sollen das ausgeklügelte Setup überwachen,<br />

Plugins und Tools sorgen <strong>für</strong> einen hohen Automatisierungsgrad<br />

bei auftretenden Störungen und Überlastungen.<br />

Ein anderer Beitrag wendet sich balancierten Webservern zu.<br />

Ein dritter schaut sich das Monitoring der neuesten Virtualisierungen<br />

von der Stange an, ein vierter konzipiert ein einfach<br />

aufzusetzendes Setup <strong>für</strong> den Gebrauch in kleinen Firmen.<br />

Regelmäßige Besucher von <strong>Linux</strong>-<strong>Magazin</strong> Online kennen ihn<br />

als Kolumnisten: Security-Spezialist Mark Vogelsberger. Mit<br />

ihm startet ab dem nächsten gedruckten <strong>Magazin</strong> eine Serie<br />

von Bulletins, in der er typische Schwachstellen in Open-<br />

Source-Software erklärt – und wie sie sich vermeiden lassen.<br />

Schicker als bei Kernighan & Ritchie<br />

In der nächsten Ausgabe startet das <strong>Linux</strong>-<strong>Magazin</strong> noch eine<br />

weitere Reihe: Eine <strong>für</strong> solche C++-Entwickler, die der frische<br />

Wind der Moderne nicht frösteln lässt. Unter anderem gehts<br />

um Lambda-Funktionen, Move-Semantik und Smart Pointer.<br />

Die Ausgabe 12/2011<br />

erscheint am 3. November 2011<br />

Ausgabe 11/2011<br />

erscheint am 20.10.2011<br />

© Linusb4, sxc.hu<br />

Sicherheit und Privatsphäre<br />

Niemand lässt sich gerne über die Schulter<br />

schauen, schon gar nicht bei der Arbeit am<br />

PC. In der realen Welt merken Sie schnell,<br />

wenn der Atem des Spions im Nacken kitzelt.<br />

Entlang der digitalen Pfade lauern jedoch<br />

zahlreiche gesichtslose Spitzel, die Sie<br />

erst bemerken, wenn es zu spät ist. Mit starker<br />

Kryptographie und Hilfsprogrammen<br />

sichern Sie Ihre Kommunikation über das<br />

Netz sowie die Daten auf Ihrem Rechner gegen<br />

Zugriffe. Wir zeigen, wie Sie dabei Tools wie GnuPG, Tor und<br />

Privoxy zu einer nahtlosen Abwehrstrategie verzahnen.<br />

Vom Foto zum Film<br />

Die Diashow hat ausgedient: Dank Photofilmstrip zaubern Sie mit<br />

wenigen Mausklicks aus einer Sammlung von Fotos ein Video, das<br />

Erinnerungen an Familienfeiern oder Urlaube in ein stimmungsvolles<br />

und bewegtes Moment komplett mit Ken-Burns-Effekt verwandelt.<br />

Rauf aufs Velo<br />

Alternatives Betriebssystem hilft alternativem Transportmittel: Die<br />

Software mit dem ungewöhnlichen Namen Lugdulo’V unterstützt<br />

Sie bei der Suche nach einem Mietfahrrad in vielen Städten Deutschlands<br />

sowie in vielen Ländern der Welt. Und natürlich gibt es – entsprechend<br />

dem Open-Source-Prinzip – <strong>für</strong> jeden die Möglichkeit,<br />

beim Projekt mitzumachen.<br />

Notebook liebt Ubuntu<br />

Das Rockiger Satchbook, das in der Grundausstattung<br />

mit einem Intel Core i5<br />

(2,3 GHz) sowie 500-GByte-SATA-Platte daherkommt,<br />

hat laut Hersteller nur Komponenten<br />

verbaut, die mit Ubuntu <strong>Linux</strong><br />

ausgezeichnet harmonieren.<br />

Ob das in der Praxis wirklich<br />

klappt, soll ein Test<br />

in der kommenden Ausgabe<br />

zeigen.<br />

© Rockiger


JETZT<br />

MiT dVd!<br />

MAGAZIN<br />

SondErAkTion<br />

Testen Sie jetzt<br />

3 Ausgaben<br />

<strong>für</strong> 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... EinE Von fünf rEwind Mini hd<br />

kAMErAS iM GESAMTwErT Von fAST 400 Euro!<br />

Einsendeschluss ist der 15.12.2011<br />

zur Verfügung gestellt von<br />

.de

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!