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 "© 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 / LPIC1<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 35<br />
48565 Steinfurt<br />
Tel.: 02552 638755<br />
Fax: 02552 638757<br />
Weitere Informationen unter www.ost.de<br />
<strong>Linux</strong>-<strong>Magazin</strong><br />
cademy_1-9h_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