25.02.2014 Aufrufe

ADMIN Magazin Sicher verstaut - Backup für Profis mit und ohne Cloud (Vorschau)

Erfolgreiche ePaper selbst erstellen

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

Jetzt<br />

<strong>mit</strong><br />

<strong>ADMIN</strong><br />

IT-Praxis & Strategie<br />

<strong>Sicher</strong><br />

<br />

Enterprise-SSD<br />

Flash-Speicher im Test<br />

Landscape<br />

Zentrale Verwaltung<br />

<strong>für</strong> Ubuntu-Rechner<br />

Zabbix-Monitoring:<br />

jetzt in Version 2.2<br />

Deduplizierung spart Platz<br />

<strong>Cloud</strong>-<strong>Backup</strong> <strong>für</strong> Windows<br />

Areca sichert kostenlos<br />

FreeBSD 10 –<br />

was ist neu?<br />

OpenResty:<br />

Nginx + Lua<br />

64Bit<br />

01/2014 Januar<br />

<strong>Backup</strong> <strong>für</strong> profis<br />

<strong>mit</strong> <strong>und</strong> <strong>ohne</strong> <strong>Cloud</strong><br />

<strong>verstaut</strong><br />

FreeIPA<br />

Die Unix-Alternative zu<br />

Active Directory<br />

SNMP & Co.<br />

Management-Protokolle<br />

www.admin-magazin.de<br />

Kickstack<br />

OpenStack auf Knopfdruck<br />

D EUR 9,80<br />

A EUR 10,80 - BeNeLux EUR 11,25<br />

CH sfr 19,60 - E / I EUR 12,75<br />

4 196360 509805 01


Service<br />

Editorial<br />

3<br />

Was bauen die da?<br />

Liebe Leserinnen <strong>und</strong> Leser,<br />

„Er abonniert diese <strong>Magazin</strong>e… Und er winkt einem beim Vorbeigehen nie<br />

zu. Irgendetwas versteckt er vorm Rest von uns.“ So lässt Tom Waits in seinem<br />

genialen Sprechgesang „What’s he building?“ einen misstrauischen<br />

Nachbarn vor düsterer Tonkulisse sinnieren. Man hört die Dielen knacken<br />

<strong>und</strong> Geräusche wie aus einem avantgardistischen Krimi-So<strong>und</strong>track, während<br />

sich der Spion von nebenan zu immer wüsteren Gerüchten versteigt:<br />

„Und ich schwöre bei Gott, ich hörte jemanden tief stöhnen … Er hat eine<br />

Fräse <strong>und</strong> eine Tischsäge… Und Sie würden nicht glauben, was Mr. Sticha<br />

sah: Da ist nicht nur Gift unter dem Waschbecken versteckt, da gibt es auch genug Formaldehyd, um ein<br />

Pferd umzubringen. Was baut er da drinnen nur?“<br />

Was Waits nicht wissen konnte, als er dieses w<strong>und</strong>erbare Mini-Drama <strong>für</strong> sein 1999er Album „Mule Variations“<br />

schrieb: In die Rolle des griesgrämigen, vom Argwohn zerfressenen Mitbew<strong>ohne</strong>rs schlüpft heute<br />

der Staat <strong>mit</strong> seinen Geheimdiensten. Wie der Ich-Erzähler des Songs seinen Nachbarn, stellt er jeden<br />

Bürger anlasslos unter Generalverdacht. Was basteln die sich da zusammen, seine Bürger?<br />

Mit Vorratsdatenspeicherung, <strong>mit</strong> Telefonüberwachung, <strong>mit</strong> dem Scannen von Chats <strong>und</strong> E-Mails, <strong>mit</strong><br />

Zugriff auf Kontodaten <strong>und</strong> Flugbuchungen, durch Mitlesen bei Google, Amazon oder Facebook, durch<br />

Anzapfen von Glasfaserkabeln, Standorttracking <strong>und</strong> vieles mehr raubt er ihnen die Privatheit. Bürgerrechte<br />

hin oder her. Es gibt nichts mehr, was ein zwanghafter <strong>Sicher</strong>heitswahn nicht rechtfertigen soll.<br />

Das ist inzwischen nicht mehr neu, klar. Muss deshalb nicht irgendwann mal Schluss da<strong>mit</strong> sein? Nein.<br />

Denn worum geht es? Die durch niemanden kontrollierte Ausnutzung der heutigen technischen Möglichkeiten<br />

untergräbt unsere Demokratie. Es herrscht nicht länger das Volk, sondern ein Moloch, vor dem im<br />

Bedarfsfall jeder gläsern erscheint.<br />

Glücklicherweise regt sich Widerstand: Schon im Juli haben mehr als 300 internationale Organisationen<br />

<strong>und</strong> Experten aus der ganzen Welt, aus den USA, Japan <strong>und</strong> Australien, aus Indien, China oder Europa<br />

die „Internationalen Gr<strong>und</strong>sätze <strong>für</strong> die Anwendung der Menschenrechte in der Kommunikationsüberwachung“<br />

unterschrieben. Würden sie befolgt, wären nur noch verhältnismäßige, begründete <strong>und</strong> überwachte<br />

Zugriffe auf unsere Kommunikation möglich. Und gerade eben haben Deutschland <strong>und</strong> Brasilien<br />

eine – obgleich schon wieder abgeschwächte – UNO-Resolution gegen Spähattacken eingebracht.<br />

„Er hat keine Fre<strong>und</strong>e. Bekommt aber eine Menge Post. Ich wette, er war eine Weile im Knast. Ich habe<br />

gehört, er sei letzte Nacht auf dem Dach gewesen <strong>und</strong> habe <strong>mit</strong> einer Taschenlampe geblinkt. Und was<br />

<strong>für</strong> eine Melodie pfeift er da immer? Was baut er sich da drinnen nur zusammen? Wir haben ein Recht,<br />

das zu wissen.“<br />

@ leserbriefe@admin-magazin.de www.facebook.com/adminmagazin www.twitter.com/admagz<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


4<br />

Service<br />

Inhalt<br />

<strong>ADMIN</strong><br />

IT-Praxis & Strategie<br />

<strong>Backup</strong>ab Seite 30<br />

n Login<br />

8 Vorgelesen<br />

System Performance <strong>und</strong> C++.<br />

10 Leserbriefe<br />

Kommentare <strong>und</strong> Kritik.<br />

12 TechNet-Konferenz<br />

Besuch in Berlin.<br />

14 Branchen-News<br />

Neues von Firmen <strong>und</strong> Projekten.<br />

20 Admin-Story<br />

Logging <strong>mit</strong> Systemd.<br />

n Netzwerk<br />

22 OpenResty<br />

Modul-Distribution <strong>für</strong> Nginx.<br />

26 SNMP, CMI, WBEM<br />

Standards <strong>für</strong>s Netzwerk- <strong>und</strong><br />

Systemmanagement.<br />

n Schwerpunkt<br />

30 Deduplizierung<br />

Das neue Deduplizierungs-Feature<br />

bei SEP sesam.<br />

34 Azure<br />

Online-<strong>Backup</strong> <strong>mit</strong> Windows Azure.<br />

40 Areca<br />

Datensicherung einzelner Hosts<br />

94<br />

<strong>mit</strong> freier Software.<br />

Pandas<br />

Daten analysieren <strong>mit</strong><br />

Python.<br />

22<br />

OpenResty<br />

Application Server auf<br />

Basis von Nginx.<br />

Service<br />

3 Editorial<br />

4 Inhalt<br />

6 Heft-DVD<br />

114 Impressum <strong>und</strong> <strong>Vorschau</strong><br />

Ausgabe 01-2014<br />

Admin<br />

www.admin-magazin.de


Service<br />

Inhalt<br />

5<br />

92<br />

Directory Service auf<br />

52FreeIPA<br />

Augenhöhe.<br />

Virt-Builder<br />

Images <strong>für</strong> virtuelle<br />

Maschinen <strong>mit</strong> Linux.<br />

Seite 6 <strong>und</strong> 73<br />

n Know-how<br />

44 Al'exa GUI-Tester<br />

End-to-End-Monitoring <strong>mit</strong> Benutzersimulation<br />

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

48 Landscape<br />

Das Canonical-Werkzeug wartet<br />

Ubuntu-Umgebungen.<br />

n Security<br />

52 FreeIPA<br />

Active Directory <strong>mit</strong> freier<br />

Software.<br />

58 Crypto-FS<br />

Verschlüsselung von Block Devices.<br />

n Basics<br />

62 Kickstack<br />

OpenStack einfach deployen <strong>mit</strong><br />

Puppet <strong>und</strong> Kickstack.<br />

68 User <strong>und</strong> Logs<br />

Benutzer- <strong>und</strong> Logdaten unter<br />

Linux verwalten.<br />

72 <strong>ADMIN</strong>-Tipps<br />

Die monatlichen Tipps.<br />

n Test<br />

73 OpenSuse 13.1<br />

Die neue OpenSuse-Version.<br />

74 Test: Enterprise-SSDs<br />

Enterprise-SSDs im Vergleich.<br />

78 Zabbix 2.2<br />

Monitoring-Paket überarbeitet.<br />

n Virtualisierung<br />

82 <strong>Cloud</strong>ify<br />

<strong>Cloud</strong>-Orchestration <strong>mit</strong> <strong>Cloud</strong>ify.<br />

88 Storage in in Hyper-V<br />

Virtuelle IDE- <strong>und</strong> SCSI-Controller<br />

<strong>mit</strong> Hyper-V einsetzen.<br />

92 Virt-Builder<br />

VM-Images im Handumdrehen.<br />

n Programmieren<br />

94 Pandas<br />

Datenanalyse <strong>mit</strong> Python.<br />

100 Lua<br />

Programmieren <strong>mit</strong> Lua.<br />

n FreeX<br />

106 FreeBSD 10<br />

FreeBSD erscheint in Version 10.<br />

Zuverlässige <strong>und</strong> performante<br />

74Enterprise-SSDs<br />

Flash-Speicher im Test.<br />

58<br />

CryptoFS<br />

Linux verschlüsselt<br />

Festplatten.<br />

Admin<br />

Ausgabe 01-2014


6<br />

Service<br />

Heft-DVD<br />

DVD kaputt?<br />

Wir schicken Ihnen kostenlos eine Ersatz-DVD<br />

zu. E-Mail genügt: info@admin-magazin.de<br />

OpenSuse 13.1<br />

Heft-DVD<br />

Auf dem beiliegenden Datenträger finden Sie die Linux-Distribution<br />

OpenSuse in der neuesten Version 13.1.<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31047<br />

n Enthält 6000 Pakete.<br />

n Mit der aktuellen Version "Havana"<br />

des <strong>Cloud</strong>-Computing-Frameworks<br />

OpenStack.<br />

n Mit zwei Virtualisierungslösungen:<br />

KVM 1.6 <strong>und</strong> Xen 4.1.<br />

n Bindet den Amazon-Speicherdienst<br />

S3 direkt als Dateisystem ein.<br />

n Läuft <strong>mit</strong> dem aktuellen Linux-<br />

Kernel 3.11 <strong>mit</strong> verbesserter Speicherverwaltung,<br />

komprimiertem<br />

Swap-Cache (Zswap) <strong>und</strong> neuen<br />

Dateisystemen.<br />

Legen Sie einfach die DVD in das Laufwerk<br />

ein <strong>und</strong> starten Sie den Rechner.<br />

Möglicherweise müssen Sie noch im<br />

BIOS die richtige Boot-Reihenfolge<br />

einstellen. Danach können Sie Open-<br />

Suse 13.1 auf dem Rechner als Betriebssystem<br />

installieren. n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


8<br />

Login<br />

Bücher<br />

Galina Peshkova, 123RF<br />

Methodologie zur System-Performance <strong>und</strong> C++-Bibel in neuer Auflage<br />

Vorgelesen<br />

Über 2000 Seiten: Die aktuellen Buchbesprechungen nehmen biblische<br />

Ausmaße an. Es geht in englischen Originalausgaben um<br />

System-Performance <strong>und</strong> C++. Oliver Frommel, Rainer Grimm<br />

Allein schon aufgr<strong>und</strong> des Umfangs von<br />

gut 700 Seiten drängt sich der Eindruck<br />

auf, hier versuche jemand eine Bibel<br />

der System-Performance<br />

zu verfassen. Und tatsächlich<br />

ist es der Anspruch des<br />

Autors, methodologische<br />

Gr<strong>und</strong>lagenarbeit zu leisten.<br />

Zu diesem Zweck hat<br />

er <strong>für</strong> die Performance-<br />

Analyse die USE-Methode<br />

(Utilization, Saturation,<br />

Errors) entwickelt, die sich<br />

als roter Faden durch das Buch zieht.<br />

Darüber hinaus erklärt er ausführlich<br />

den Aufbau jedes Subsystems von<br />

Linux- <strong>und</strong> Solaris-Servern, denn<br />

das gr<strong>und</strong>legende Verständnis ist die<br />

Gr<strong>und</strong>lage jeder Analyse. Für jedes dieser<br />

Systeme, das heißt CPU, Speicher,<br />

Disk, Dateisystem <strong>und</strong> Netzwerk, stellt<br />

Gregg die wichtigen Leistungsvariablen<br />

<strong>und</strong> die zur Messung verfügbaren<br />

Tools vor, wieder jeweils <strong>für</strong> Linux <strong>und</strong><br />

Solaris. Das sind bekannte <strong>und</strong> weniger<br />

bekannte Utilities <strong>und</strong> auch komplexe<br />

Tracing-Tools wie DTrace, das ebenfalls<br />

immer wieder seinen Platz hat.<br />

Das Kapitel über <strong>Cloud</strong> Computing geht<br />

dagegen wenig in die Tiefe <strong>und</strong> ist wohl<br />

eher dem Zeitgeist <strong>und</strong> der Beschäftigung<br />

Greggs beim <strong>Cloud</strong>-Provider<br />

Joyent geschuldet. Nützlicher sind eine<br />

umfangreiche Fallstudie <strong>und</strong> die Checklisten<br />

zur Anwendung der USE-Methode<br />

<strong>mit</strong> den verfügbaren Tools auf Linux<br />

<strong>und</strong> Solaris. Auch eine Übersetzungstabelle<br />

von DTrace zum Linux-Pendant ist<br />

praktisch.<br />

Allein schon die enzyklopädischen<br />

Übersichten von Computer- <strong>und</strong> Betriebssystemarchitekturen,<br />

die sich auf<br />

dem aktuellen Stand befinden,<br />

sind den Kauf des Buchs wert.<br />

Ansonsten hat Gregg sein Ziel<br />

erreicht, ein umfangreiches<br />

Kompendium der Performance-Analyse<br />

zu schreiben.<br />

Lediglich der Praxisbezug<br />

hinsichtlich der Interpretation<br />

der gemessenen Werte könnte<br />

etwas ausführlicher ausfallen.<br />

C++-Bibel aktualisiert<br />

Mit gut 1300 Seiten bringt »The C++<br />

Programming Language« von Bjarne<br />

Stroustrup in seiner vierten Auflage<br />

genauso viel auf die Waage wie der<br />

aktuelle C++-Standard,<br />

der die Gr<strong>und</strong>lage des<br />

Buches bildet.<br />

Das Buch gilt einerseits<br />

als C++-Bibel, droht<br />

andererseits den C++-<br />

Einsteiger aufgr<strong>und</strong> seines<br />

Umfangs <strong>und</strong> seiner<br />

Akribie zu erschlagen.<br />

»The C++ Programming Language« besteht<br />

aus vier Themenblöcken. Bevor<br />

n Systems Performance<br />

Brendan Gregg<br />

Systems Performance: Enterprise and<br />

the <strong>Cloud</strong><br />

Prentice Hall 2013, 735 Seiten<br />

47 Euro<br />

ISBN-10: 0133390098<br />

Bjarne Stroustrup auf gut 300 Seiten<br />

die Gr<strong>und</strong>lagen der Programmiersprache<br />

vorstellt, gibt er eine Einführung in<br />

C sowie die Abstraktionen in C++ im Allgemeinen<br />

<strong>und</strong> in sein eigenes Werk im<br />

Besonderen. So beschäftigt Stroustrup<br />

sich im weiteren Verlauf des Buchs <strong>mit</strong><br />

objektorientierter <strong>und</strong> generischer Programmierung.<br />

Den Abschluss des Buches bildet die<br />

Standardbibliothek. Das umfasst die<br />

Standard Template Library, die I/​O-<br />

Streams, die neuen Bibliotheken <strong>für</strong><br />

reguläre Ausdrücke <strong>und</strong> Smart Pointer,<br />

aber auch die neue Multithreading-<br />

Funktionalität von C++.<br />

Dieser Klassiker ist im wahrsten Sinne<br />

des Wortes schwere Literatur. Der<br />

Autor stellt nicht nur C++ <strong>mit</strong> vielen<br />

Code-Beispielen <strong>und</strong> großer Liebe zum<br />

Detail vor, er belegt die Theorie auch<br />

<strong>mit</strong> Verweisen zum C++-Standard, setzt<br />

sie in mehreren Beispielen zu String-,<br />

Datums- <strong>und</strong> Vektorklassen um <strong>und</strong> beendet<br />

jedes Kapitel <strong>mit</strong> einigen<br />

Ratschlägen.<br />

Neben der vielen Theorie <strong>und</strong><br />

Praxis zieht sich ein Aspekt wie<br />

ein roter Faden durch das ganze<br />

Werk, der ihm den Ruf einer Bibel<br />

eingebracht hat: Stroustrups<br />

Vorstellung von gutem C++-Stil,<br />

den er immer wieder ver<strong>mit</strong>telt.<br />

Ein großartiges Buch, das Detailwissen<br />

<strong>mit</strong> der Vorstellung von gutem Stil auf<br />

einzigartige Weise verbindet. (csc) n<br />

n C++<br />

Bjarne Stroustrup<br />

The C++ Programming Language<br />

Addison-Wesley 2013, 1370 Seiten<br />

50 Euro<br />

ISBN: 978-0-3215-6384-2<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Login<br />

10 Leserbriefe<br />

Pavel Ignatov, 123RF<br />

Leser-Feedback<br />

Leserbriefe<br />

Haben Sie Anregungen, Kritik oder Kommentare? Dann schreiben Sie an leserbriefe@admin-magazin.de.<br />

Die Redaktion behält es sich vor, die Zuschriften <strong>und</strong> Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge<br />

<strong>mit</strong> Namen, sofern der Autor nicht ausdrücklich Anony<strong>mit</strong>ät wünscht.<br />

Browser-Fingerprinting<br />

11/​2013, Seite 32: Sie schreiben im<br />

Artikel „Inkognito“ über Browser-<br />

Fingerprinting, dass noch keine Anzeigen-<br />

oder sonstige Netzwerke vom<br />

Browser-Fingerprinting Gebrauch machen<br />

würden. Der Fingerabdruck des<br />

Browsers wird aber bereits von folgenden<br />

Tracking-Diensten ausgewertet:<br />

Bluecava, Zanox.com, Multicounter.de,<br />

PianoMedia <strong>und</strong> WebTrekk. Weitere<br />

Informationen zum Fingerprinting <strong>und</strong><br />

zu den genannten Tracking-Diensten<br />

finden Sie unter: [https:// www.​<br />

anonym‐surfen. de/ help/ wwwprivacy_<br />

technik. html# fingerprint]<br />

Eine wissenschaftliche Untersuchung<br />

zum Einsatz von Browser-Fingerprinting<br />

auf populären Webseiten hat die<br />

Universität KU Leuven (Belgien) veröffentlicht:<br />

[http:// www. cosic. esat. kuleuven. be/​<br />

publications/ article‐2334. pdf]<br />

Carsten N. (per E-Mail)<br />

Für Kommentare <strong>und</strong> Anregungen können Sie<br />

<strong>mit</strong> der Redaktion auch über die Facebook- oder<br />

Google+-Seiten in Kontakt treten, die Sie unter<br />

[http:// facebook. com/ adminmagazin] <strong>und</strong><br />

[http://google.com/+Admin-magazinDe] finden.<br />

Neues <strong>ADMIN</strong>-Layout<br />

Neugestaltungen sind immer so eine<br />

Sache: Altes wird über Bord geworfen<br />

um Neuem Platz zu machen. Da<strong>mit</strong><br />

riskiert man aber auch, Altbewährtes<br />

zu zerstören, welches noch gut hätte<br />

weiterbestehen können, <strong>ohne</strong> altbacken<br />

zu wirken.<br />

Auf der positiven Seite der Umgestaltung<br />

möchte ich die Schrift erwähnen.<br />

Trotz des typgrafischen Dogmas, dass<br />

man <strong>für</strong> Drucksachen Serifenschriften<br />

benutzen soll, zeigt das neue <strong>ADMIN</strong>-<br />

<strong>Magazin</strong>, dass auch Groteskschriften<br />

gut lesbar sind. Im aktuellen Fall meines<br />

Erachtens sogar klar lesbarer als<br />

vorher. Das Schriftbild wirkt angenehm<br />

locker <strong>und</strong> die Schrift einen Tick größer<br />

als die alte.<br />

Das größte Ärgernis aus meiner Sicht<br />

ist, dass die weiterführenden Informationen<br />

auf die Webseiten des <strong>ADMIN</strong>-<br />

<strong>Magazin</strong>s ausgelagert worden sind.<br />

Ein großes NEIN zu dieser Maßnahme!<br />

Fußnoten <strong>und</strong> Autoreninformationen<br />

in einem gedruckten Artikel sind integraler<br />

Teil des Artikels <strong>und</strong> gehören ins<br />

gedruckte Medium. Ansonsten wird die<br />

Einheit des Artikels zerstört. Der Medienbruch<br />

Papier/​Web sollte nach dem<br />

Artikel beginnen, nicht im Artikel.<br />

Wenn ich einen Artikel lese, will ich<br />

sofort wissen, was die Fußnoten sind,<br />

also beispielsweise den Titel <strong>und</strong> die<br />

URL. Es spricht nichts dagegen, diese<br />

Informationen zusätzlich auf einer<br />

Webseite bereitzuhalten, aber nicht<br />

ausschließlich.<br />

Frank Thommen (per E-Mail)<br />

Danke <strong>für</strong> das Lob <strong>und</strong> Ihre Kritik. Ehrlich<br />

gesagt überrascht es mich etwas,<br />

dass der Wegfall des Infokastens auf<br />

negative Resonanz stößt. Die hinter der<br />

Änderung stehende Idee war, den Lesern<br />

<strong>und</strong> Leserinnen Arbeit zu ersparen <strong>und</strong><br />

die Referenzen, die zum größten Teil aus<br />

URLs bestehen, elektronisch anzubieten.<br />

Schließlich muss man sich, wenn man<br />

diese URLs besuchen möchte, <strong>ohne</strong>hin<br />

an einen Rechner begeben oder ein<br />

Smartphone verwenden.<br />

Allerdings sind Sie nicht der Einzige, der<br />

sich an dieser Änderung stört, weshalb<br />

sich die <strong>ADMIN</strong>-Redaktion zu einem<br />

Kompromiss entschlossen hat: Künftig<br />

werden wir wieder wie gewohnt die Infokästen<br />

abdrucken <strong>und</strong> zusätzlich einen<br />

Kurzlink <strong>mit</strong> einem QR-Code. Wir hoffen,<br />

dass da<strong>mit</strong> allen Lesern gedient ist.<br />

Unsere neue Schrift ist übrigens die<br />

Source Sans Pro von Adobe, die unter<br />

einer freien Lizenz verfügbar ist.<br />

(Oliver Frommel)<br />

@ leserbriefe@admin-magazin.de www.facebook.com/adminmagazin www.twitter.com/admagz<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


12<br />

Login<br />

TechNet-Konferenz<br />

Die IT-Welt aus Microsoft-Perspektive:<br />

Auf drei von vier<br />

Servern läuft Windows.<br />

Microsofts TechNet-Konferenz in Berlin<br />

Im Kosmos<br />

Microsoft hat in Berlin eine technikorientierte Konferenz veranstaltet.<br />

Das <strong>ADMIN</strong>-<strong>Magazin</strong> war dabei. Oliver Frommel<br />

Ein Event von der Community <strong>für</strong><br />

die Community sollte die TechNet-<br />

Konferenz in Berlin sein, betonte Karin<br />

Janina Schweizer von Microsoft in ihrer<br />

Begrüßungsansprache. Dass sich dann<br />

doch sämtliche Präsentationen um Microsoft-Produkte<br />

drehten <strong>und</strong> ihren Teil<br />

zum Marketing beitrugen, liegt wohl in<br />

der Natur der Sache.<br />

Präsentiert wurden die vielen Features<br />

neuer Windows-Technologien aber<br />

wenigstens nicht nur von Microsoft-<br />

Mitarbeitern, sondern von insgesamt<br />

80 anwesenden MVPs (Most Valuable<br />

Professionals). Lediglich die Keynote<br />

war Mike Schutz vom Microsoft-Headquarter<br />

vorbehalten, der die Vision des<br />

Unternehmens vorstellte, die unter<br />

dem Schlagwort „<strong>Cloud</strong> OS“ zusammengefasst<br />

wurde. Da<strong>mit</strong> wolle man<br />

den aktuellen Trends wie Big Data, Mobile<br />

Workplace <strong>und</strong> Consumerization of<br />

IT folgen. In Software gegossen werden<br />

Großer Andrang vor<br />

der Microsoft-Tech-<br />

Net-Konferenz. Der<br />

Veranstaltungsort,<br />

das Kosmos Berlin,<br />

ist ein ehemaliges<br />

Kino im Osten.<br />

soll die Vision <strong>mit</strong> neuen <strong>und</strong> immer<br />

weiter entwickelten Produkten wie<br />

Windows Server 2012 R2, Hyper-V <strong>und</strong><br />

Windows Azure, der <strong>Cloud</strong>-Plattform<br />

von Microsoft. Die Ausgangsbedingungen<br />

<strong>für</strong> die Vision „<strong>Cloud</strong> OS“ sind günstig,<br />

wenn man Schutz glauben darf:<br />

Auf 75 Prozent der 30 Millionen Server<br />

weltweit läuft derzeit ein Windows-<br />

Betriebssystem.<br />

Big Data ist das große Thema <strong>für</strong> SQL<br />

Server 2014, das laut Schutz etwa 45<br />

Prozent aller Datenbank-Installationen<br />

weltweit ausmacht <strong>und</strong> da<strong>mit</strong> den<br />

größten Anteil einnimmt – der Rest teilt<br />

sich auf zahlreiche kommerzielle wie<br />

freie Datenbanken auf. Unstrukturierten<br />

Daten will Microsoft künftig da<strong>mit</strong><br />

Rechnung tragen, dass es Hadoop in<br />

SQL Server integriert. Hierzu gibt es<br />

eigene Produkte wie HDInsight, das<br />

helfen soll, Erkenntnisse aus solchen<br />

Datenmengen zu gewinnen.<br />

Während die Übernahme von Nokia<br />

durch Microsoft noch läuft, trägt Microsoft<br />

erst einmal der herrschenden<br />

Marktsituation Rechnung <strong>und</strong> unterstützt<br />

künftig iOS <strong>und</strong> Android besser,<br />

etwa <strong>mit</strong> eigenen Remotedesktop-<br />

Clients <strong>für</strong> diese Plattformen.<br />

Im Fokus: Hyper-V<br />

Die folgenden Vorträge gingen dann<br />

etwas mehr in die Tiefe <strong>und</strong> stellten<br />

etwa die neuen Features des Hypervisors<br />

Hyper-V im Detail vor. Dabei ist<br />

es durchaus beeindruckend, wie es<br />

Microsoft geschafft hat, <strong>mit</strong> dem Konkurrenten<br />

VMware nicht nur gleichzuziehen,<br />

sondern ihn in vielen Aspekten<br />

noch zu überr<strong>und</strong>en, wenngleich etwa<br />

die maximale Anzahl von Cores in einer<br />

VM <strong>und</strong> ähnliche Li<strong>mit</strong>s nur <strong>für</strong> eine<br />

kleine Gruppe von Anwendern eine<br />

Rolle spielen dürfte. Interessanter ist<br />

dabei vermutlich die noch einmal gesteigerte<br />

Geschwindigkeit bei der Live-<br />

Migrations von virtuellen Maschinen,<br />

automatische Performance-Gewinne<br />

<strong>und</strong> gleichzeitig einfaches Deployment<br />

bei der Verwendung des neuen SMB3-<br />

Protokolls <strong>und</strong> natürlich die Integration<br />

in die Management-Tools. Die MVPs,<br />

darunter Szene-Legenden wie Aidan<br />

Finn, waren jedenfalls begeistert von<br />

dem, was Microsoft ihnen in den neuen<br />

Releases beschert hat, <strong>und</strong> schlimmstenfalls<br />

enttäuscht davon, das etwa die<br />

Konfigurations eines HA-Clusters nun<br />

so einfach vonstatten geht.<br />

Als praktisches Beispiel <strong>für</strong> die Anwendung<br />

von Hyper-V stellte die Wortmann<br />

AG im Detail ihre neue <strong>Cloud</strong> vor, die<br />

komplett auf Microsoft-Technologie<br />

basiert. Auch hier gab es Beeindruckendes<br />

zu sehen, etwa die Hardware, die<br />

Wortmann dazu in den Racks seines<br />

Rechenzentrums verbaut hat: Switche<br />

<strong>mit</strong> 40 GBit/s, Mellanox-Ethernet-<br />

Karten, SAS Dual Channel Storage <strong>und</strong><br />

dergleichen mehr.<br />

Begleitet wurden die Vorträge auf der<br />

TechNet-Konferenz von praktisch orientierten<br />

Hands-on-Labs, die alle restlos<br />

ausgebucht waren. Insgesamt waren<br />

nach Angaben von Microsoft etwa 500<br />

IT-Professionals auf der Veranstaltung,<br />

die vom Veranstalter als voller Erfolg<br />

verbucht wurde. n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


14<br />

Login<br />

News<br />

Neue Software <strong>und</strong> Produkte<br />

Branchen-News<br />

Festplatten <strong>mit</strong> Helium<br />

Die Western-Digital-Tochter HGST verkauft ab sofort heliumgefüllte<br />

6-TByte-Platten. Die Ultrastar He6, die sich <strong>für</strong> die Produkte zahlreicher<br />

Storage-OEMs eignet, darunter HP, Netflix, Huawei <strong>und</strong> Unified<br />

Storage, bietet <strong>mit</strong> 6 TByte die derzeit weltweit höchste Kapazität.<br />

Ebenfalls weltweit einmalig ist die Füllung der Laufwerke <strong>mit</strong> Helium,<br />

das nur ein Siebentel der Dichte von Luft hat. Das erlaubt einen fast<br />

um die Hälfte besseren Watt-pro-TByte-Wert <strong>und</strong> 23 Prozent weniger<br />

Stromaufnahme im Leerlauf. Dabei ist das Laufwerk außerdem deutlich<br />

leichter als ein herkömmliches 3,5-Zoll-Laufwerk.<br />

HGST sieht die Helium-Technologie als Basis <strong>für</strong> eine Reihe weiterer<br />

Storage-Technologien, die bereits im Einsatz sind – wie Shingled<br />

Magnetic Recording (SMR) <strong>und</strong> Heat-assisted Magnetic Recording<br />

(HAMR) – oder an denen derzeit entwickelt wird (wie Cold Storage).<br />

OpenSuse 13.1 veröffentlicht<br />

Wie der Community-Manager Jos Portvliet auf der Open-<br />

Suse-Website berichtet, ist das neue Release 13.1 der freien<br />

Linux-Distribution fertig. Insgesamt umfasst es 6000 Pakete<br />

<strong>und</strong> ist <strong>für</strong> fünf Rechnerarchitekturen verfügbar. Darin<br />

enthalten ist aktuelle Software wie das neueste Release<br />

„Havana“ des <strong>Cloud</strong>-Computing-Framework OpenStack.<br />

Außerdem gibt es ein neues Modul, das es erlaubt, den<br />

Amazon-Speicherdienst S3 in das lokale Dateisystem einzubinden.<br />

Zur Virtualisierung setzt OpenSuse 13.1 auf den<br />

Linux-Hypervisor KVM in Version 1.6 sowie alternativ auf<br />

Xen 4.1.<br />

OpenSuse 13.1 bringt eine aktualisierte Version von MySQL<br />

<strong>mit</strong>, die stärkere Verschlüsselung <strong>und</strong> Performance-Verbesserungen<br />

bei der InnoDB-Storage-Engine enthält. Alternativ<br />

stehen auch der MySQL-Fork MariaDB <strong>und</strong> PostgreSQL<br />

zur Verfügung. Zur Integration in Windows-Netzwerke bietet<br />

OpenSuse die Version 4.1 des Samba-Servers.<br />

Das Herz der neuen Suse-Distribution ist der Linux-Kernel<br />

3.11, der einige Verbesserungen gegenüber älteren Kernel-<br />

Versionen enthält, darunter bessere Speicherverwaltung,<br />

Zswap (komprimierter Swap-Cache), Updates <strong>für</strong> Btrfs,<br />

Ext4 <strong>und</strong> XFS, das neue Flash-Dateisystem F2FS, experimentellen<br />

Support <strong>für</strong> NFS 4.2 <strong>und</strong> einiges mehr.<br />

Das Suse-Evergreen-Team hat angekündigt, nach der<br />

üblichen Laufzeit von 18 Monaten<br />

weiterhin Patches bereitzustellen.<br />

Insgesamt erhält OpenSuse 13.1 da<strong>mit</strong><br />

also drei Jahre Support.<br />

OpenNMS-Konferenz sucht Referenten<br />

Für die nächste OpenNMS-Konferenz, die vom 8. bis 11. April<br />

im englischen Southampton stattfinden wird, startete jetzt der<br />

Call for Papers. Gesucht werden Referenten, die auf der fünften<br />

Ausgabe der OpenNMS-Konferenz zu Monitoring-Themen<br />

sprechen möchten, die einen Bezug zu OpenNMS haben. Bis<br />

zum 31. März 2013 können unter [http:// www. opennms. eu/​<br />

call‐for‐papers‐ouce‐2014] Vorschläge <strong>für</strong> Präsentationen (45<br />

Minuten), Workshops (90 Minuten) oder Lightning Talks (10<br />

Minuten) eingereicht werden. Erwartet werden r<strong>und</strong> 70 Teilnehmer.<br />

Als Vertreter der Firma OpenNMS Group wird ihr CEO<br />

Tarus Balog eine Keynote halten.<br />

Eucalyptus-<strong>Cloud</strong> verbessert<br />

Amazon-Kompatibilität<br />

Eucalyptus Systems hat <strong>mit</strong> Version 3.4 das neueste Release<br />

des gleichnamigen freien <strong>Cloud</strong>-Computing-Frameworks freigegeben.<br />

Verbessert wurde unter anderem die Kompatiblität<br />

zur Amazon Computing <strong>Cloud</strong>, die <strong>für</strong> die Eucalyptus-Entwickler<br />

hohe Priorität besitzt. Insbesondere ist nun der Identity<br />

Manager IAM implementiert, der rollenbasierte Zugangsregeln<br />

ermöglicht.<br />

Vereinfacht wurde die Migration durch neue Tools, die etwa<br />

Amazon- in Eucalyptus-Images umwandeln. Auch die Images<br />

von VMware-Maschinen lassen sich nun einfach konvertieren.<br />

Ein neuer Dienst überprüft die Images auf eventuelle Probleme.<br />

Darüber hinaus haben die Entwickler die Möglichkeiten<br />

verbessert, eine hochverfügbare <strong>Cloud</strong> aufzubauen.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Login<br />

News<br />

15<br />

Quellcode von Apple-II-Betriebssystem offen<br />

Der Quellcode des 1978 veröffentlichten Betriebssystems Apple DOS steht Computerhistorikern<br />

nun zur Verfügung.<br />

Windows, Mac OS X <strong>und</strong> Linux haben da<strong>mit</strong> nicht mehr viel gemein: 1978 brachte<br />

Apple seinen Apple-II-Computer auf den Markt. Das amerikanische Computer<br />

History Museum veröffentlicht das zugehörige Betriebssystem Apple DOS jetzt<br />

im Quelltext.<br />

Betriebssysteme wurden damals noch in Assembler geschrieben; bei vier KByte<br />

Arbeitsspeicher bot der Apple II nicht den geringsten Platz <strong>für</strong> Umwege auf dem<br />

Weg zum Prozessor. Die Assembler-Instruktionen nebst Kommentaren finden<br />

sich in der ersten veröffentlichten Version von Juni 1978 sowie in einer späteren<br />

Ausgabe vom Oktober desselben Jahres auf eingescannten Ausdrucken.<br />

Neben dem Betriebssystem veröffentlicht die computerhistorische Seite eine<br />

abgetippte Variante der späteren Apple-DOS-Version im Doc-X-Format sowie<br />

einige Dokumentationen <strong>und</strong> Besprechungsprotokolle. Auch der Vertrag <strong>mit</strong><br />

dem Programmierer Robert C. Stephardson, der <strong>für</strong> 13 000 US-Dollar zentrale<br />

Komponenten des Systems beisteuerte, findet sich als Scan. Interessant daran<br />

ist auch, dass Stephardson erst im April 1978 <strong>mit</strong> der Programmierarbeit<br />

begann; im Juni kam das fertige System auf den Markt.<br />

Das Betriebssystem bleibt weiterhin Eigentum von Apple, die Firma erlaubt<br />

die Benutzung nur <strong>für</strong> nicht kommerzielle Zwecke. Allerdings ist der Quellcode<br />

in der heutigen Praxis <strong>ohne</strong>hin eher <strong>für</strong> Historiker als <strong>für</strong> Programmierer<br />

von Interesse.


16<br />

Login<br />

News<br />

Univention Corporate Server 3.2 ist fertig<br />

Die Univention GmbH hat das Release 3.2 ihrer Enterprise-<br />

Linux-Distribution Univention Corporate Server (UCS) veröffentlicht.<br />

Im Mittelpunkt der neuen Version der Windows-<br />

Server-Alternative steht leichtere Bedienbarkeit. Darüber<br />

hinaus wurde die Kompatibilität zu aktueller Hardware <strong>und</strong><br />

zu den Microsoft-Systemen Windows Server 2012 <strong>und</strong> Windows<br />

8.1 verbessert. Da<strong>für</strong> verwendet UCS das SMB2-Protokoll<br />

<strong>und</strong> Samba 4.1.<br />

Überarbeitet wurde auch das App Center, über das sich<br />

Third-Party-Erweiterungen in UCS integrieren lassen, etwa<br />

ERP-Software oder ein Zarafa-Connector. Auch die Univention-eigenen<br />

Module <strong>für</strong> UCS werden nun über das App Center<br />

verwaltet, das da<strong>mit</strong> zum zentralen Management-Punkt<br />

wird. Eine neue Übersichtsseite vereinfacht Endanwendern<br />

<strong>und</strong> Administratoren den Zugriff auf <strong>für</strong> sie verfügbare<br />

Anwendungen.<br />

Im Bereich des Identity Management gibt es zwei Veränderungen:<br />

Administratoren können nun Single-Sign-on nutzen,<br />

um sich das immer wieder neue Einloggen auf einer Vielzahl<br />

verwalteter Rechner zu ersparen. Anwender dürfen zum Einloggen<br />

in Webservices wie Google-Enterprise-Dienste nun<br />

SAML verwenden, über das Administratoren den Zugriff wiederum<br />

einfacher regulieren können.<br />

VLANs, Bonding <strong>und</strong> Bridges lassen sich in einem eigenen<br />

Modul in der Verwaltungsoberfläche konfigurieren. Die Treiber<br />

<strong>für</strong> den virtualisierten Einsatz von Windows auf UCS wurden<br />

aktualisiert. Dazu bietet UCS Support <strong>für</strong> die Hypervisor-<br />

Systeme Xen <strong>und</strong> KVM.<br />

Im ersten Jahr kostet ein UCS-Server <strong>mit</strong> 50 Usern <strong>und</strong> Installationssupport<br />

985 Euro, <strong>mit</strong> Standardsupport 1885 Euro.<br />

Begutachten lässt sich der UCS 3.2 in einer Demo-Installation<br />

unter [http:// demo. univention. de].<br />

ENISA: Viele Fehler beim Krypto-Deployment<br />

Der »Algorithms, Key Sizes and Parameters<br />

Report« der European Union<br />

Agency for Network and Information<br />

Security (ENISA) gibt IT-Spezialisten<br />

Tipps zum Einsatz von Verschlüsselungstechnologien.<br />

Die kryptografischen<br />

Verfahren sind dabei eher unproblematisch,<br />

solange die Anwender auf<br />

bewährte Algorithmen setzen, die keine<br />

bekannten Schwächen aufweisen. Im<br />

Hinblick auf die Zukunftssicherheit sind<br />

dies etwa AES <strong>und</strong> Camilla. 3DES, Blowfish<br />

<strong>und</strong> Kasumi sind nach Meinung der<br />

ENISA nur noch <strong>für</strong> eine Übergangszeit<br />

akzeptabel. Von DES dagegen wird aufgr<strong>und</strong><br />

seiner Schwächen abgeraten. Bei<br />

Hash-Verfahren sieht es ähnlich aus:<br />

Für die Zukunft rät die ENISA zu SHA-3<br />

<strong>und</strong> Whirlpool, SHA-2 oder gar SHA-1<br />

sind problematisch.<br />

Gr<strong>und</strong>sätzlich werden die Kryptoverfahren<br />

aber als sicher angesehen, ganz<br />

im Gegensatz zu deren Anwendung, die<br />

Administratoren vor große Probleme<br />

stellt. Die da<strong>für</strong> nötigen Protokolle<br />

seien extrem komplex, schwer durchschaubar,<br />

kaum formal überprüft oder<br />

sowieso unsicher, meint die ENISA.<br />

Der vollständige Report ist unter<br />

[http:// www. enisa. europa. eu/​<br />

activities/ identity‐and‐trust/ library/​<br />

deliverables/ algorithms‐key‐sizes‐and<br />

‐parameters‐report] zu finden.<br />

Cebit 2014: Open-Source-Vorträge gesucht<br />

Vom 10. bis 14. März findet in Hannover die Messe Cebit 2014<br />

statt. Für die Special Conference Open Source nimmt die Medialinx<br />

AG bis 6. Januar Vorschläge <strong>für</strong> Vorträge an.<br />

Auch unter ihrem neuen Namen soll die bisher als Forum<br />

Open Source bekannte Vortragsreihe den Besuchern Wissenswertes<br />

r<strong>und</strong> um Open Source, Linux <strong>und</strong> freie Software<br />

ver<strong>mit</strong>teln. Der Call for Papers richtet sich an Praktiker,<br />

Entwickler <strong>und</strong> Strategen aus Community, Unternehmen<br />

<strong>und</strong> Behörden. Gesucht sind Erfahrungsberichte, die<br />

den praktischen Einsatz <strong>und</strong> die Entwicklung freier Software<br />

behandeln. Im Fokus stehen Themen, die an das Cebit-Leitthema<br />

2014 „Datability“ anknüpfen, außerdem Beiträge zu<br />

<strong>Cloud</strong> Computing <strong>und</strong> Virtualisierung, Security <strong>und</strong> Privacy,<br />

Automation <strong>und</strong> Konfigurationsmanagement <strong>und</strong> alles zu<br />

Treibern, Kernel <strong>und</strong> ARM-Architektur.<br />

Als Vortragsdauer inklusive anschließender Frage-Antwort-<br />

Session sind jeweils 30 beziehungsweise 45 Minuten vorgesehen.<br />

Die Vortragssprachen sind Deutsch <strong>und</strong> Englisch.<br />

Interessierte kontaktieren die Organisatoren über das Formular<br />

auf [http:// www. linux‐magazin. de/ callforpapers].<br />

Alternativ schicken sie eine E-Mail <strong>mit</strong> einer kurzen<br />

Beschreibung <strong>und</strong> ihrer Mobiltelefonnummer an callforpapers@medialinx-gruppe.de.<br />

Über die Vergabe der Vortragsslots<br />

entscheidet eine internationale Jury aus Open-<br />

Source-Experten.<br />

Das komplette Vortragsprogramm des Forums wird als<br />

Live-Stream auf Linux-<strong>Magazin</strong> Online übertragen <strong>und</strong><br />

später im Archiv kostenlos zugänglich gemacht.<br />

www.admin-magazin.de


Login<br />

News<br />

17<br />

Javascript-Alternative Dart fertig<br />

Google entwickelt bereits seit zwei Jahren eine neue Programmiersprache namens<br />

Dart. Sie soll wie Javascript vor allem im Web Anwendung finden <strong>und</strong> hat <strong>mit</strong> Version<br />

1.0 jetzt ein stabiles Stadium erreicht.<br />

Die Sprache vereint syntaktische Features mehrerer bekannter Sprachen wie Javascript<br />

<strong>und</strong> Java. Dazu kommt eine optionale Typisierung: Gibt der Entwickler<br />

den Typ einer Variablen an, kommt es bei Diskrepanzen zu Warnungen oder Fehlern,<br />

ansonsten erfolgt die Typisierung dynamisch. Dabei hilft Dart bei der Umsetzung<br />

zeitgemäßer Programmierparadigmen wie funktionaler Programmierung,<br />

Event-basierter asynchroner Abläufe, testgetriebener Entwicklung <strong>und</strong> macht<br />

Http-Requests sowie den Umgang <strong>mit</strong> Json leicht.<br />

Google liefert <strong>mit</strong> Dartium zugleich eine Variante des freien Chromium-Browsers<br />

<strong>mit</strong> Dart-Unterstützung aus. Da andere Browser die Sprache noch nicht kennen,<br />

übersetzt das Tool Dart2js Dart-Code in Javascript. Nach Messungen <strong>mit</strong> dem<br />

Google-Benchmark DeltaBlue läuft das Ergebnis immer noch schneller als natives<br />

Javascript, wobei solche Zahlen vor allem den zum Vergleich herangezogenen<br />

Javascript-Code in Frage stellen. Im Direktvergleich zwischen Javascript in Chrome<br />

<strong>und</strong> Dart im Dartium-Browser erzielt Letzteres im DeltaBlue-Benchmark ein etwa<br />

doppelt so gutes Ergebnis.<br />

Neben Dartium <strong>und</strong> dem Dart-Entwicklungskit liefert Google auch eine passende<br />

Entwicklungsumgebung aus. Der Dart-Editor basiert auf Eclipse <strong>und</strong> beherrscht<br />

automatische Code-Vervollständigung, Refaktorisierung <strong>und</strong> Debugging. Wer<br />

eclipse bereits benutzt, ist <strong>mit</strong> dem Dart-Plugin besser bedient.<br />

n Info<br />

Neueste nachrichten<br />

immer auf<br />

www.admin-magazin.de<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu den<br />

News finden Sie unter:<br />

www.admin-magazin.de/qr/31048


18<br />

Login<br />

News<br />

Google verschlüsselt interne Verbindungen – RC4 in Echtzeit geknackt?<br />

Die Washington Post enthüllte eine<br />

weitere Komponente im weltweiten<br />

Abhörskandal. Die Zeitung berichtete,<br />

dass der US-Geheimdienst NSA im Rahmen<br />

des Programms Muscular offenbar<br />

auch die Kommunikation zwischen<br />

internen Servern von Yahoo <strong>und</strong> Google<br />

massenhaft abfing.<br />

Verantwortlich <strong>für</strong> das Programm ist<br />

den Berichten zufolge der britische<br />

Geheimdienst GCHQ, wodurch die NSA<br />

das Abhörsystem außerhalb der Zuständigkeit<br />

US-amerikanischer Justiz<br />

verwenden konnte.<br />

Google reagiert nun offenbar auf<br />

den Angriff. Wie Google-Mitarbeiter<br />

Mike Hearn über Google+ <strong>mit</strong>teilte,<br />

verschlüsselt die Firma nun auch die<br />

über ihre privaten Glasfaserleitungen<br />

stattfindende Kommunikation. So<strong>mit</strong><br />

seien die Daten, die die NSA laut der<br />

Washington-Post-Enthüllungen <strong>mit</strong>geschnitten<br />

hatte, geschützt vor illegalen<br />

Zugriffen, durch Kriminelle oder Geheimdienste.<br />

Auf technische Details geht Hearn nicht<br />

ein. Es bleibt zu hoffen, dass Google<br />

nicht auf den RC4-Algorithmus setzt,<br />

der immer noch vielen verschlüsselten<br />

Internet-Verbindungen zugr<strong>und</strong>e liegt.<br />

Er gilt zwar schon seit Jahren als theoretisch<br />

geknackt, mangels praktischer<br />

Nutzbarkeit der <strong>Sicher</strong>heitslücken findet<br />

er aber weiterhin rege Verbreitung.<br />

Laut des <strong>Sicher</strong>heitsexperten Jacob Appelbaum,<br />

der auch bei den Enthüllungen<br />

um das globale Abhörprogramm<br />

Prism eine wichtige Rolle spielte,<br />

verfügt die NSA aber inzwischen über<br />

die Möglichkeit, RC4-verschlüsselte Verbindungen<br />

in Echtzeit zu knacken <strong>und</strong><br />

abzuhören.<br />

Dark Mail Alliance will E-Mail-<strong>Sicher</strong>heit verbessern<br />

Unter dem Namen „Dark Mail Alliance“<br />

haben die Betreiber von Lavabit <strong>und</strong> Silent<br />

Circle ein neues Projekt gestartet,<br />

das E-Mail-Benutzern mehr <strong>Sicher</strong>heit<br />

<strong>und</strong> Privatsphäre bescheren soll. Dabei<br />

soll ein neues Protokoll entstehen,<br />

dass Nachrichten über End-to-End-<br />

Verschlüsselung überträgt. Unter dem<br />

Schlagwort „E-Mail 3.0“ soll es eine<br />

neue Generation von sicherem, privaten<br />

Nachrichtenaustausch werden.<br />

Lavabit war ein Anbieter eines verschlüsselten<br />

E-Mail-Dienstes, der im<br />

Rahmen der Snowden-Affäre in die<br />

Schlagzeilen geriet.<br />

Als amerikanische <strong>Sicher</strong>heitsbehörden<br />

vom Lavabit-Betreiber die Herausgabe<br />

von Schlüsseln <strong>und</strong> so<strong>mit</strong> Einblick in<br />

die verschlüsselten E-Mails verlangten,<br />

schloss dieser kurzerhand sein komplettes<br />

Angebot. Im Anschluss an die<br />

Lavabit-Schließung stellte auch Silent<br />

Circle, das unter anderem vom PGP-<br />

Erfinder Phil Zimmerman gegründet<br />

wurde, sein Angebot ein. Die Dark Mail<br />

Alliance ist unter [http:// darkmail. info]<br />

zu finden.<br />

Neuer HPC-Europarekord<br />

Der Supercomputer Piz Daint schafft es <strong>mit</strong> einer Rechenleistung<br />

von 6,2 Petaflop/​s als schnellster europäischer Rechner<br />

in die Spitzengruppe der heute veröffentlichten 42. Top-500-<br />

Liste der Supercomputer weltweit.<br />

Darüber hinaus stellt Piz Daint (ein Cray XC30) das erste<br />

Petascale-System dar, das die 3 Gigaflop-pro-Watt-Grenze<br />

durchbricht (3,11 Gigaflop/​Watt). Dies bedeutet eine um<br />

50 Prozent höhere Energieeffizienz als der nächstplatzierte<br />

Rechner dieser Klasse.<br />

Der weltschnellste Rechner überhaupt ist nach wie vor der<br />

Tianhe-2, ein Superrechner der China National University<br />

of Defense Technology. Er bewältigt 33,86 Petaflop/​s im<br />

Linpack-Benchmark. Auf dem Silberrang rangiert Titan, ein<br />

Cray-XK7-System, installiert im Department of Energy (DOE)<br />

Oak Ridge National Laboratory. Für diesen Rechner stehen<br />

17,59 Petaflop/​s zu Buche.<br />

So beeindruckend die stetig wachsende Rechenleistung auch<br />

wirkt, wurde doch kürzlich wieder deutlich, wie beschränkt<br />

sie verglichen <strong>mit</strong> dem Intellekt des Menschen ist. Ein Team<br />

japanischer <strong>und</strong> deutscher Wissenschaftler konnte auf einem<br />

Supercomputer <strong>mit</strong> 83 000 Prozessoren ein Prozent der<br />

menschlichen Hirntätigkeit während einer Sek<strong>und</strong>e simulieren<br />

– <strong>und</strong> brauchten da<strong>für</strong> 40 Minuten.<br />

Storage-Software als Zugabe<br />

An Käufer eines virtualisierungsfähigen Servers vom Typ<br />

HP ProLiant Generation 8 (Gen8) verschenkt HP ab sofort<br />

die Software HP StoreVirtual Virtual Storage Appliance<br />

(VSA) 2014.<br />

Das Angebot soll <strong>mit</strong>telständischen K<strong>und</strong>en helfen, ihre<br />

Speicherinfrastruktur zu modernisieren. HP erwartet,<br />

dass kleine <strong>und</strong> <strong>mit</strong>telgroße K<strong>und</strong>en auf Gr<strong>und</strong>lage dieses<br />

Angebots in den nächsten zwölf Monaten Zugriff auf ein<br />

Gesamtvolumen von über einem Exabyte VSA-Storage haben<br />

werden.<br />

In Kombination <strong>mit</strong> HP StoreVirtual VSA werden HP-Pro-<br />

Liant-Server zu einer leistungsfähigen Lösung <strong>für</strong> das Software<br />

Defined Data Center (SDDC). Sie sind sofort einsetzbar<br />

<strong>und</strong> maximieren die Vorteile der Server-Virtualisierung.<br />

Mit der Verbindung dieser beiden Technologien hilft HP<br />

K<strong>und</strong>en dabei:<br />

– die Kosten <strong>für</strong> die Inbetriebnahme robuster Shared-<br />

Storage-Lösungen zu senken,<br />

– die Lösungen in Umgebungen <strong>mit</strong> VMware- <strong>und</strong> Microsoft-Hypervisoren<br />

einfacher in Betrieb zu nehmen <strong>und</strong><br />

– ihre Agilität zu erhöhen, indem Rechen- <strong>und</strong> Speicherkapazitäten<br />

parallel steigen, wenn die Geschäftsanforderungen<br />

sich ändern.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


20<br />

Login<br />

Admin-Story<br />

Zsolt Biczo, 123RF<br />

Syslog oder kein Syslog, das ist hier die Frage<br />

Besser protokolliert<br />

Log-Meldungen verwaltet in den allermeisten Fällen ein Syslog-Server. Das Fedora-Projekt will dieses jetzt<br />

ändern <strong>und</strong> in zukünftigen Releases neue Wege beschreiten. Hier soll dann Journald aus dem Systemd-<br />

Paket zum Einsatz kommen. Thorsten Scherf<br />

Wenn ich mich <strong>mit</strong> jemandem über<br />

das Thema System- <strong>und</strong> Service-Management<br />

unterhalte, stelle ich oft eine<br />

gewisse Verunsicherung fest, wenn wir<br />

auf das Thema „systemd“ zu sprechen<br />

kommen. Deshalb an dieser Stelle eine<br />

kleine Einführung <strong>und</strong> ein paar Gründe,<br />

die <strong>für</strong> ein neues Init-System sprechen.<br />

Man ist es zwar irgendwie gewohnt,<br />

dass sich ein SysV-basierter Init-Prozess<br />

um den Systemstart kümmert, da<br />

dieses System aber in die Jahre gekommen<br />

ist <strong>und</strong> aktuelle Anforderungen<br />

nicht mehr wirklich gut erfüllt, wird es<br />

Zeit <strong>für</strong> einen Nachfolger. Dieser existiert<br />

eigentlich bereits seit geraumer<br />

Zeit <strong>mit</strong> Upstart.<br />

Upstart ist zum größten Teil abwärtskompatibel<br />

<strong>mit</strong> dem alten SysV-System<br />

<strong>und</strong> löst viele der alten Probleme. Anstatt<br />

eine vordefinierte Liste abzuarbeiten,<br />

welche Dienste zu starten sind, ist<br />

Upstart Event-basiert. Auf Basis dieser<br />

Events finden dann Aktionen statt. All<br />

diese Event-/​Aktionsregeln definiert der<br />

Administrator beziehungsweise Entwickler<br />

eines Dienstes in den Upstart-<br />

Konfigurationsdateien. Und hier liegt<br />

genau das Problem von Upstart. Passt<br />

man nicht genau auf, welche Events<br />

von anderen Events abhängig sind,<br />

erhält man eine Reihe von Abhängig-<br />

keiten, die dann da<strong>für</strong> sorgen, dass<br />

Dienste wieder aufeinander warten<br />

müssen, bevor sie starten können. Und<br />

genau dies möchte man ja verhindern.<br />

Problem gelöst<br />

Lennart Poettering <strong>und</strong> sein Team wollen<br />

<strong>mit</strong> ihrer Implementierung eines<br />

neuen Init-Systems dieses (<strong>und</strong> andere)<br />

Probleme lösen <strong>und</strong> gehen sogar noch<br />

einen Schritt weiter. Die »systemd«<br />

genannte Software startet einfach alle<br />

Dienste parallel, <strong>ohne</strong> sich dabei um<br />

Abhängigkeiten zu kümmern. Möchte<br />

ein Dienst auf einen anderen Dienst zugreifen,<br />

so landen die Anfragen einfach<br />

so lange in einer Warteschlange, bis der<br />

gewünschte Dienst verfügbar ist. Dieser<br />

von Apples »launchd« bekannte Trick<br />

sorgt da<strong>für</strong>, dass ein System extrem<br />

schnell hochfährt. Neben dieser Funktion<br />

bietet »systemd« natürlich noch<br />

viele weitere Neuerungen. Interessant<br />

ist auch, dass jeder durch »systemd«<br />

gestartete Prozess in einer eigenen<br />

Control-Group (Cgroup) landet <strong>und</strong><br />

so<strong>mit</strong> unter der Kontrolle des Kernels<br />

steht. Eine sehr gute <strong>und</strong> sehr ausführliche<br />

Beschreibung des neuen Init-<br />

Systems findet sich unter [1].<br />

An dieser Stelle geht es nun um eine<br />

Funktion von Systemd, die bereits seit<br />

der Version 38 zur Verfügung steht: das<br />

Journal. Hierbei handelt es sich um<br />

ein neuartiges Logging-System, das,<br />

ähnlich wie Systemd selbst, radikale<br />

Änderungen <strong>mit</strong> sich bringt <strong>und</strong> einige<br />

gr<strong>und</strong>legende Probleme des alten Syslogd<br />

beheben möchte. Davon gibt es in<br />

der Tat genügend. So sieht das Syslog-<br />

Protokoll beispielsweise nicht vor, eine<br />

Log-Meldung zu authentifizieren. Jeder<br />

ist in der Lage, Meldungen von einem<br />

bestimmten Prozess vorzutäuschen beziehungsweise<br />

zu verändern.<br />

Das Log-Format selbst sieht nur wenige<br />

Felder vor, die in jeder Nachricht zu<br />

verwenden sind, beispielsweise den<br />

Prozessnamen <strong>und</strong> die ID des Prozesses.<br />

Der Inhalt der Nachricht wird zumeist<br />

so aufbereitet, dass er <strong>für</strong> einen<br />

Menschen gut leserlich ist. Jedoch ist<br />

das manuelle Durchforsten von Log-<br />

Dateien nicht wirklich effektiv, sodass<br />

in den allermeisten Fällen doch wieder<br />

ein Log-Parser zum Einsatz kommt. Dieser<br />

muss dann den umgekehrten Weg<br />

beschreiten <strong>und</strong> die Nachricht so zerlegen,<br />

dass ihre Informationen lesbar<br />

werden – alles nicht sehr effektiv.<br />

Hinzu kommt noch das Problem, dass<br />

die Syslog-Meldungen ja nicht die einzigen<br />

Logs auf einem System darstellen.<br />

Es existieren auch noch Logs von<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Login<br />

Admin-Story<br />

21<br />

Abbildung 1: Das Tool systemctl zeigt bei Status-Abfragen eines Dienstes die aktuellen Log-Meldungen <strong>für</strong> diesen Dienst an.<br />

anderen Subsystemen, die nicht auf<br />

Syslog zurückgreifen. Die Audit- <strong>und</strong><br />

Accounting-Subsysteme sind Beispiele<br />

hier<strong>für</strong>. Dann gibt es natürlich auch<br />

jede Menge Anwendungen, die ihre<br />

eigenen Logs verwenden. Am Ende sind<br />

es also eine Vielzahl unterschiedlicher<br />

Log-Mechanismen, <strong>mit</strong> denen man sich<br />

auseinandersetzen muss. Der in Systemd<br />

integrierte Journald versucht all<br />

diese Probleme zu lösen <strong>und</strong> stellt ein<br />

einheitliches Log <strong>für</strong> sämtliche Komponenten<br />

eines Systems zur Verfügung.<br />

Anwendungen <strong>und</strong> Services können<br />

beliebige Meta-Informationen an den<br />

Journald weiterreichen. Dies erfolgt<br />

entweder <strong>mit</strong>tels »printk()«, der regulären<br />

»syslog()«-Funktion, über die native<br />

API oder <strong>für</strong> Coredumps <strong>mit</strong>tels »/proc/<br />

proc/sys/kernel/core_pattern«. Die<br />

Informationen werden als Key-/​Value-<br />

Paare übergeben <strong>und</strong> können einzeln<br />

abgefragt werden. Log-Meldungen werden<br />

kryptografisch gesichert <strong>und</strong> sind<br />

so<strong>mit</strong> vor Veränderungen geschützt.<br />

Benutzerrelevante Meldungen können<br />

dabei von den Benutzern selbst eingesehen<br />

werden, Systemmeldungen sind<br />

»root« oder den Mitglieder der Gruppe<br />

»adm« vorbehalten.<br />

Um eine Übersicht sämtlicher Log-<br />

Meldungen, auch von bereits rotierten<br />

Logs, zu bekommen, reicht der Aufruf<br />

von »journalctl«. Die Ausgabe <strong>und</strong><br />

das Format sind nahezu identisch <strong>mit</strong><br />

dem, was man von einer »/var/log/<br />

messages«-Datei gewohnt ist. Auch die<br />

von »tail« bekannten Optionen »‐f« <strong>und</strong><br />

»‐n« kann man verwenden, um lediglich<br />

die letzten Zeilen des Journals zu<br />

sehen. Warnmeldungen stellt der »journald«<br />

fettgedruckt, Fehlermeldungen<br />

in Rot dar. Wer lediglich die Meldungen<br />

seit des letzten Bootvorgangs sehen<br />

möchte, der ruft journalctl einfach <strong>mit</strong><br />

der Option »‐b« auf. Nett, aber noch<br />

nicht sonderlich aufregend.<br />

Da das Journal <strong>für</strong> jedes Log-Feld einen<br />

Index besitzt, lassen sich die Meldungen<br />

recht schön filtern. Möchte man<br />

eine Übersicht aller Meldungen eines<br />

Services innerhalb eines bestimmten<br />

Zeitfensters bekommen, so wäre dies<br />

<strong>mit</strong> folgendem Befehl möglich:<br />

# journalctl ‐u vsftpd ‐‐since=U<br />

yesterday ‐‐until '2013‐11‐05 11:00'<br />

Keine Ahnung, welche Systemd-Units<br />

auf dem System vorhanden sind?<br />

Kein Problem: Der Befehl »systemctl<br />

list‐unit‐files« zeigt sie an. Interessiert<br />

man sich lediglich <strong>für</strong> Services, grenzt<br />

die Option »‐‐type=service« die Ausgabe<br />

entsprechend ein. Insgesamt<br />

stellt Systemd aktuell zwölf verschiedene<br />

Unit-Types zur Verfügung.<br />

Doch woher weiß man, welche Felder<br />

zu einer Log-Meldung gehören? Hier<br />

hilft es weiter, die Option »‐o verbose«<br />

an den Journald zu übergeben. Alle<br />

Felder einer Meldung werden dann<br />

im Key-/​Value-Format angezeigt. Mit<br />

diesen Informationen gewappnet, kann<br />

man weiter auf Entdeckungsreise gehen.<br />

Sie möchten etwa alle Meldungen<br />

eines bestimmten Nutzers sehen, die zu<br />

einem Fehler geführt haben? Kein Problem.<br />

Übergibt man das gewünschte<br />

Feld zusammen <strong>mit</strong> der Log-Priorität<br />

»err«, werden die beiden Optionen <strong>mit</strong>einander<br />

verknüpft <strong>und</strong> das<br />

passende Ergebnis angezeigt:<br />

# journalctl ‐p err _UID=1000<br />

Es wird noch besser. Ich<br />

möchte vielleicht alle relevanten<br />

Fehlermeldungen einer<br />

bestimmten SELinux-Domäne<br />

sehen? Nun, der Aufruf hier<strong>für</strong> wäre<br />

entsprechend:<br />

# journalct ‐p err _SELINUX_CONTEXT=U<br />

Kontext<br />

Was aber, wenn ich nicht mehr genau<br />

weiß, wie denn der Kontext der entsprechenden<br />

SELinux-Domäne lautet?<br />

Dann lasse ich das Feld <strong>für</strong> den Kontext<br />

einfach leer <strong>und</strong> drücke zweimal die<br />

Tab-Taste, bekomme eine Liste aller<br />

bekannten Kontextinformationen aus<br />

den Logs <strong>und</strong> kann die richtige Domäne<br />

raussuchen. Diese Auto-Completion<br />

funktioniert <strong>mit</strong> allen Feldern, die das<br />

Journal kennt.<br />

Suche eingebaut<br />

Abschließend sei noch erwähnt, dass<br />

die Journal-Meldungen <strong>für</strong> einen bestimmten<br />

Service in der Status-Ausgabe<br />

des Systemd verwendet werden<br />

(Abbildung 1). So<strong>mit</strong> sind alle relevanten<br />

Log-Meldungen <strong>für</strong> einen Dienst<br />

sofort sichtbar <strong>und</strong> man muss nicht<br />

erst umständlich in der passenden Log-<br />

Datei danach suchen. (ofr) n<br />

n Info<br />

n Autor<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31052<br />

Thorsten Scherf arbeitet als Principal<br />

Consultant <strong>für</strong> Red Hat EMEA. Er ist oft<br />

als Vortragender auf Konferenzen anzutreffen.<br />

Wenn ihm neben der Arbeit <strong>und</strong><br />

Familie noch Zeit bleibt, nimmt er gerne<br />

an Marathonläufen teil.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


22<br />

Netzwerk<br />

OpenResty<br />

Die OpenResty-Distribution <strong>für</strong> Nginx<br />

Agentenkoffer<br />

Kirill Kurashov, 123RF<br />

Event-basierte Verarbeitung von Requests macht Nginx zu einem flinken Webserver. Mit den OpenResty-<br />

Paketen wird daraus ein schneller Application-Server auf Basis der Skriptsprache Lua. Oliver Frommel<br />

In der Open-Source-Welt gibt es täglich<br />

so viele neue, interessante Projekte,<br />

nach denen es sich lohnt, Ausschau<br />

zu halten. Meist sind es Projekte USamerikanischen<br />

Ursprungs, denen die<br />

große Aufmerksamkeit zuteil wird,<br />

n Listing 1: /etc/​init/​openresty.conf<br />

01 # openresty<br />

02 <br />

03 description "nginx openresty stack"<br />

04 author "Oliver Frommel "<br />

05 <br />

06 start on (filesystem and net‐device‐up IFACE=lo)<br />

07 stop on runlevel [!2345]<br />

08 <br />

09 env DAEMON=/usr/local/openresty/nginx/sbin/nginx<br />

10 env PID=/var/run/nginx.pid<br />

11 <br />

12 expect fork<br />

13 respawn<br />

14 respawn li<strong>mit</strong> 10 5<br />

15 <br />

16 pre‐start script<br />

17 $DAEMON ‐t<br />

18 if [ $? ‐ne 0 ]<br />

19 then exit $?<br />

20 fi<br />

21 end script<br />

22 <br />

23 exec $DAEMON<br />

während Projekte aus anderen Ländern<br />

zum Teil eher unbekannt sind.<br />

Das können deutsche Projekte sein,<br />

aber vor allem französische oder chinesische<br />

Projekte sind hierzulande oft<br />

unbekannt. Ein Beispiel da<strong>für</strong> ist der<br />

chinesische Fork des Webservers Nginx<br />

(der ja seinerseits russischen Ursprungs<br />

ist), den wir in [1] vorgestellt haben. Ein<br />

weiteres Projekt aus dem Umfeld des<br />

„chinesischen Amazon“ Taobao ist die<br />

Nginx-Distribution OpenResty [2], die<br />

fast im Alleingang von Yichun „Agent“<br />

Zhang entwickelt wurde. Er hat in<br />

OpenResty den Nginx-Server <strong>mit</strong> vielen<br />

nützlichen Modulen gebündelt, die er<br />

zum Großteil selbst geschrieben hat<br />

<strong>und</strong> die aus Nginx einen superschnellen<br />

Web-Application-Server machen.<br />

Den Großteil von OpenResty machen<br />

Module <strong>für</strong> die Skriptsprache Lua aus,<br />

die als eingebettete Sprache wegen<br />

ihres geringen Ressourcenverbrauchs<br />

<strong>und</strong> ihrer guten Performance beliebt<br />

ist. Auch der Apache-Webserver hat<br />

<strong>mit</strong>tlerweile das in <strong>ADMIN</strong> 03/​2012<br />

vorgestellte Mod-Lua in die Kerndistribution<br />

aufgenommen [3]. Weitere Beispiele<br />

<strong>für</strong> die Beliebtheit von Lua <strong>und</strong><br />

eine Einführung in die Sprache sind im<br />

Programmieren-Teil dieses Hefts zu finden.<br />

Die OpenResty-Module erlauben<br />

es, schon in den Konfigurationsdateien<br />

Lua-Anweisungen zu verwenden. Das<br />

erlaubt komplexe <strong>und</strong> dynamische<br />

Konfigurationen, <strong>mit</strong> denen sich zum<br />

Beispiel Web-Services implementieren<br />

lassen. Mitgeliefert werden etwa Module<br />

zur Anbindung an Memcache <strong>und</strong><br />

Datenbanken wie MySQL/​Drizzle, PostgreSQL<br />

<strong>und</strong> Redis.<br />

Lua inklusive<br />

Mit OpenResty können Lua-Skripts in<br />

alle Phasen der Verarbeitung eines<br />

HTTP-Requests eingreifen, sie verändern,<br />

Antworten erstellen <strong>und</strong> Header<br />

verändern. Dies alles passiert in recht<br />

hoher Geschwindigkeit, sodass die<br />

Kombination Lua <strong>und</strong> Nginx, namentlich<br />

OpenResty, unter den ersten Plätzen<br />

der Web-Framework-Benchmarks<br />

von TechEmpower zu finden ist (Abbildung<br />

1). Der Gr<strong>und</strong> da<strong>für</strong> liegt in<br />

der Event-basierten Verarbeitung von<br />

Requests, die Nginx auszeichnet, <strong>und</strong><br />

die sich dank OpenResty auch <strong>mit</strong> Lua-<br />

Code nutzen lässt. Noch schneller geht<br />

es <strong>mit</strong> dem Lua-Just-in-Time-Compiler<br />

(LuaJIT), der Teil von OpenResty ist.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Netzwerk<br />

OpenResty<br />

23<br />

Den gängigen Linux-Distributionen<br />

liegt OpenResty nicht bei, Sie müssen<br />

es also aus dem Quellcode selbst übersetzen.<br />

Da<strong>für</strong> müssen einige Pakete <strong>und</strong><br />

Bibliotheken installiert sein, nämlich<br />

Perl 5.6.1 oder neuer, Libreadline, Libpcre<br />

<strong>und</strong> LibSSL. Dann laden Sie das<br />

Quellcode-Paket von der OpenResty-<br />

Website herunter, entpacken es <strong>und</strong><br />

führen »./configure« aus, am besten<br />

<strong>mit</strong> der Option »‐‐with‐luajit«. Per<br />

Default sind außerdem die Module <strong>für</strong><br />

die Drizzle-Datenbank, PostgreSQL<br />

<strong>und</strong> Iconv ausgeschaltet. Aktivieren<br />

Sie sie <strong>mit</strong> den passenden Configure-<br />

Optionen, wenn Sie sie brauchen. Mehr<br />

verrät »./configure ‐‐help«. Installiert<br />

werden die Binärdateien <strong>und</strong> die Module<br />

<strong>mit</strong> »make install«. Allerdings gibt<br />

es kein »make install«, weshalb es sich<br />

empfiehlt, zum Beispiel das Checkinstall-Paket<br />

zu installieren <strong>und</strong> dann<br />

OpenResty <strong>mit</strong> »checkinstall make<br />

install« zu installieren. Die installierten<br />

Dateien lassen sich dann über den<br />

Paketmanager der Distribution wieder<br />

entfernen.<br />

Manuelle Installation<br />

Per Default werden die Nginx-Dateien<br />

in »/usr/local/openresty« installiert.<br />

Wer das nicht will, setzt <strong>mit</strong> der Configure-Option<br />

»‐‐prefix« ein anderes<br />

Verzeichnis. Die Default-Einstellung ist<br />

aber nicht schlecht, denn sie kollidiert<br />

nicht <strong>mit</strong> eventuell installierten Nginx-<br />

Paketen einer Linux-Distribution. Bleibt<br />

noch, den Nginx-Server beim Booten<br />

zu starten, was die beiden Konfigurationsdateien<br />

in Listing 1 (Upstart)<br />

<strong>und</strong> Listing 2 (Systemd) übernehmen.<br />

Ein Aufruf von »nginx ‐t« überprüft die<br />

Konfiguration, bevor der Serverprozess<br />

startet. Im Fehlerfall verschafft »nginx<br />

‐V« einen Überblick über die vorhandenen<br />

Module.<br />

Abbildung 1: OpenResty rangiert unter den ersten Plätzen der TechEmpower-Benchmarks.<br />

Übrigens gibt es auch Module <strong>für</strong><br />

einschlägige Software zum Konfigurationsmanagement,<br />

<strong>mit</strong> denen sich<br />

OpenResty auf Servern deployen lässt.<br />

So liegen auf Github einige Module <strong>für</strong><br />

Puppet, ein Chef-Kochrezept ist direkt<br />

auf der Opscode-Website zu finden.<br />

Das Chef-Modul wird gut gepflegt <strong>und</strong><br />

wurde zuletzt Anfang November 2013<br />

aktualisiert.<br />

Im einfachsten Fall lässt sich nun Lua-<br />

Code über das Schlüsselwort »content_<br />

by_lua« direkt in die Konfigurationsdateien<br />

einbetten, etwa so:<br />

content_by_lua '<br />

ngx.say("test")<br />

';<br />

Aus einer Datei liest Nginx den Lua-<br />

Code über »content_by_lua_file«. Analog<br />

dazu übernimmt Lua auch das Umschreiben<br />

von Requests (Rewrite) oder<br />

die Authentifizierung. Die da<strong>für</strong> vorgesehenen<br />

Anweisungen, die Lua-Code<br />

aus einer Datei laden, heißen »rewrite_<br />

by_lua« <strong>und</strong> »content_by_lua«. Dabei<br />

lädt der Webserver normalerweise<br />

den Lua-Code nur einmal ein, was<br />

klarerweise den Overhead reduziert.<br />

Abschalten lässt sich dies, etwa bei der<br />

Entwicklung von Skripts, indem man<br />

»lua_code_cache« auf »off« setzt.<br />

Im Prinzip geht es sogar auch ganz<br />

<strong>ohne</strong> Lua-Code, wie ein Beispiel von Richard<br />

Nyström zeigt [5], der einen Web-<br />

Service nur <strong>mit</strong> SQL-Anweisungen in der<br />

Nginx-Konfiguration realisiert. Zum Beispiel<br />

liefert der folgende Ausschnitt der<br />

Konfiguration bei einem Get-Request<br />

alle Artikel einer Datenbank zurück:<br />

postgres_query HEAD GET U<br />

"SELECT * FROM articles";<br />

Oft liegen die interessanten Daten nicht<br />

direkt auf dem Webserver, sondern<br />

sind auf andere Rechner ausgelagert,<br />

wo zum Beispiel ein Verzeichnisdienst,<br />

eine Datenbank oder Ähnliches laufen.<br />

OpenResty unterstützte solche Serviceorientierten<br />

Architekturen (SOA) über<br />

sogenannte Subrequests. Ein eingehender<br />

HTTP-Requests löst also weitere<br />

n Listing 2: /lib/​systemd/​system/​nginx.service<br />

01 [Unit]<br />

02 Description=OpenResty Stack for Nginx<br />

03 After=syslog.target network.target remote‐fs.target nss‐lookup.<br />

target<br />

04 <br />

05 [Service]<br />

06 Type=forking<br />

07 PIDFile=/var/run/nginx.pid<br />

08 ExecStartPre=/usr/local/openresty/nginx/sbin/nginx ‐t<br />

09 ExecStart=/usr/local/openresty/nginx/sbin/nginx<br />

10 ExecReload=/bin/kill ‐s HUP $MAINPID<br />

11 ExecStop=/bin/kill ‐s QUIT $MAINPID<br />

12 PrivateTmp=true<br />

13 <br />

14 [Install]<br />

15 WantedBy=multi‐user.target<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


24<br />

Netzwerk<br />

OpenResty<br />

n Info<br />

Requests aus, die fehlende Daten einholen,<br />

entweder von anderen Rechnern<br />

oder von Diensten auf demselben Server,<br />

auf dem auch Nginx läuft. Ein Beispiel<br />

da<strong>für</strong> ist das Auth-Request-Modul,<br />

das Subrequests zur Authentifizierung<br />

verwendet. So lässt sich der Zugriffsschutz<br />

modular gestalten <strong>und</strong> verschiedene<br />

Dienste <strong>mit</strong>einander verbinden:<br />

Modul<br />

ArrayVarNginxModule<br />

AuthRequestNginxModule<br />

CoolkitNginxModule<br />

DrizzleNginxModule<br />

EchoNginxModule<br />

EncryptedSessionNginxModule<br />

FormInputNginxModule<br />

HeadersMoreNginxModule<br />

IconvNginxModule<br />

StandardLuaInterpreter<br />

MemcNginxModule<br />

Nginx<br />

NginxDevelKit<br />

LuaCjsonLibrary<br />

LuaJIT<br />

LuaNginxModule<br />

LuaRdsParserLibrary<br />

LuaRedisParserLibrary<br />

LuaRestyDNSLibrary<br />

LuaRestyLockLibrary<br />

LuaRestyMemcachedLibrary<br />

LuaRestyMySQLLibrary<br />

LuaRestyRedisLibrary<br />

LuaRestyStringLibrary<br />

LuaRestyUploadLibrary<br />

LuaRestyWebSocketLibrary<br />

PostgresNginxModule<br />

RdsCsvNginxModule<br />

RdsJsonNginxModule<br />

RedisNginxModule<br />

Redis2NginxModule<br />

SetMiscNginxModule<br />

SrcacheNginxModule<br />

XssNginxModule<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31291<br />

n Tabelle 1: OpenResty-Module<br />

location /private/ {<br />

auth_request /auth;<br />

...<br />

}<br />

Selbst parallele Subrequests können<br />

abgesetzt werden, wenn man den<br />

Aufruf »capture_multi« verwendet. Auf<br />

einer niedrigeren Ebene angesiedelt ist<br />

ein Interface, um direkt <strong>mit</strong> Netzwerk-<br />

Sockets zu arbeiten. Es entspricht der<br />

TCP-API von Lua, arbeitet aber per Default<br />

nichtblockierend.<br />

Auch Realtime-Webanwendungen sind<br />

<strong>mit</strong> OpenResty kein Problem. Sie lassen<br />

sich zum Beispiel <strong>mit</strong> dem Websocket-<br />

Support verwenden, den Nginx in der<br />

Funktion<br />

Array-Variablen <strong>für</strong> Nginx-Konfigurationsdateien<br />

Authentifizierung <strong>mit</strong> Subrequests<br />

Sammlung kleiner Nginx-Addons<br />

Anbindung an Drizzle- <strong>und</strong> MySQL-Datenbank<br />

Shell-artige Utilities <strong>für</strong> Debugging<br />

Verschlüsselte Session-Daten<br />

Verarbeitung von Formularen in Nginx-Konfiguration<br />

Erweiterte Header-Verarbeitung<br />

Konvertierung von Zeichensätzen<br />

Standard-Lua-Interpreter<br />

Memcache-Protokoll<br />

Nginx-Distribution<br />

Nginx-SDK<br />

Schnelles JSON-Modul <strong>für</strong> Lua<br />

Just-in-Time-Compiler <strong>für</strong> Lua<br />

Lua-Modul <strong>für</strong> Nginx<br />

Parser <strong>für</strong> Resty-DBD-Stream von Datenbankmodulen<br />

Parser <strong>für</strong> Redis-Antworten<br />

DNS-Bibliothek<br />

Nichtblockierende Mutex-Locks<br />

Treiber <strong>für</strong> Memcache<br />

Treiber <strong>für</strong> MySQL<br />

Treiber <strong>für</strong> Redis<br />

String-Bibliothek<br />

Bibliothek <strong>für</strong> HTTP-Uploads<br />

Bibliothek <strong>für</strong> Websockets<br />

Anbindung an PostgreSQL<br />

Konvertiert Resty-DBD-Streams ins CSV-Format<br />

Konvertiert Resty-DBD-Streams nach JSON<br />

Redis-Modul, liefert verarbeitete Antworten<br />

Redis-Modul, liefert unverarbeitete Antworten<br />

Diverse Einstellungen (MD5, JSON, …)<br />

Transparentes Caching<br />

Support <strong>für</strong> Cross-Site-Ajax-Requests<br />

stabilen Version 1.4.0 hinzugewonnen<br />

hat [6]. Allerdings wird Nginx da<strong>mit</strong> nur<br />

zum Websocket-Proxy. Um die Verarbeitung<br />

der Daten muss sich jemand<br />

anders kümmern. Mit OpenResty kann<br />

das zum Beispiel ein Lua-Modul übernehmen.<br />

Weil Socket-Programmierung<br />

da<strong>mit</strong> relativ unaufwendig ist, braucht<br />

es da<strong>für</strong> nur wenige Zeilen Code. Wie<br />

das geht, hat Aapo Talvensaari in seinem<br />

Blog [7] demonstriert.<br />

Ein recht interessantes Modul, das sich<br />

<strong>für</strong> Debugging oder die Entwicklung<br />

von Webanwendungen oder ‐diensten<br />

gut eignet, ist »ngx_echo«, das das<br />

Konfigurationsvokabular um Shell-artige<br />

Anweisungen wie »echo«, »sleep«,<br />

»time« <strong>und</strong> »exec« erweitert. Da<strong>mit</strong><br />

lassen sich URLs einrichten, um Clients<br />

zu testen, <strong>ohne</strong> dass auf dem Server<br />

gleichzeitig fehleranfälliger Code geschrieben<br />

werden muss. Das folgende<br />

Beispiel zeigt eine Anwendung:<br />

location /echodelay {<br />

echo hello;<br />

echo_flush;<br />

echo_sleep 2.5;<br />

echo world;<br />

}<br />

Zuerst gibt der Codeblock den String<br />

»hello« aus, der durch das Leeren des<br />

Output-Puffers <strong>mit</strong> »echo_flush« sofort<br />

sichtbar wird. Danach wartet der Server<br />

2,5 Sek<strong>und</strong>en lang, bevor er <strong>mit</strong> der<br />

Ausgabe von »world« weitermacht.<br />

Die Beschreibung der vielen Möglichkeiten,<br />

die OpenResty über die Programmierung<br />

<strong>mit</strong> Lua bietet, würde<br />

den Rahmen des Artikels sprengen. Tabelle<br />

1 gibt aber einen Überblick über<br />

alle <strong>mit</strong>gelieferten Module.<br />

Fazit<br />

Wer schon Nginx einsetzt oder <strong>mit</strong> dem<br />

Gedanken spielt, darauf umzusteigen,<br />

sollte einen Blick auf OpenResty werfen.<br />

Es enthält neben den Standardmodulen<br />

eine ganze Reihe nützlicher<br />

Erweiterungen, meistens <strong>mit</strong> der<br />

Skriptsprache Lua, die <strong>ohne</strong> großen<br />

Aufwand erlernbar ist. Da<strong>mit</strong> sind auch<br />

komplizierte Setups von Webdiensten<br />

kein Problem, <strong>und</strong> eine hohe Performance<br />

ist garantiert. n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


26<br />

Netzwerk<br />

SNMP & Co.<br />

Alexander Shadrin, 123RF<br />

Standards <strong>für</strong>s Netzwerk- <strong>und</strong> System-Management<br />

Das Ko<strong>mit</strong>ee tanzt<br />

Zwei Jahrzehnte lang hat SNMP als Protokoll <strong>für</strong>s Netzwerk-Management gedient. Dieser Artikel erklärt,<br />

wie es funktioniert <strong>und</strong> beleuchtet auch die Nachfolgeprotokolle CIM <strong>und</strong> WBMF. Oliver Frommel<br />

Ansätze zum Remote-Management von<br />

Servern <strong>und</strong> Netzwerk-Equipment gibt<br />

es eher zu viele als zu wenige. Im Internet<br />

<strong>und</strong> IP-basierten Netzen ist immer<br />

noch das Simple Network Management<br />

Protocol (SNMP) die dominierende<br />

Lösung. Ihren Ursprung hat sie im Vorgänger<br />

namens SGMP (Simple Gateway<br />

Monitoring Protocol), der 1987 standardisiert<br />

wurde. Ein Jahr später folgte<br />

dann <strong>mit</strong> dem RFC 1067 das erste Standardisierungsdokument<br />

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

Die erste Version des SNMP-Protokolls<br />

verwendete wie bereits der Vorgänger<br />

SGMP zur Definition der Syntax die<br />

abstrakte Notation ASN.1 (Abstract<br />

Syntax Notation One), die von ISO,<br />

IEC <strong>und</strong> ITU-T definiert worden war.<br />

Längerfristig sollte so der Übergang zu<br />

OSI-basierten Netzwerken erleichtert<br />

werden, aber dieser Wunsch wurde<br />

glücklicherweise nie realisiert.<br />

Lesen <strong>und</strong> Schreiben<br />

Geregelt sind in SNMP das Netzwerkprotokoll,<br />

das Client <strong>und</strong> Server (der<br />

Agent) <strong>mit</strong>einander sprechen <strong>und</strong> auch<br />

zur Authentifizierung verwenden. Dabei<br />

sieht SNMP unterschiedliche Protokoll-<br />

Token vor, um Informationen zu lesen<br />

<strong>und</strong> zu schreiben (GetRequest, SetRequest).<br />

Um den Netzwerk-Overhead<br />

zu reduzieren, bietet es auch die Möglichkeit,<br />

gleich eine ganze Reihe von<br />

Werten in einer Anfrage auszulesen.<br />

Neben dem Antwort-Typ bietet SNMP<br />

auch noch den Nachrichtentyp Trap,<br />

der vom Agenten (dem überwachten<br />

Gerät) ausgeht <strong>und</strong> zum Beispiel bei<br />

Störungen verschickt wird. Ansonsten<br />

schreibt SNMP gr<strong>und</strong>sätzlich nur die<br />

Struktur der Informationen vor, die<br />

dann konkret <strong>für</strong> eine Anwendung,<br />

etwa ein Gerät, in einer Management<br />

Information Base (MIB) abgelegt sind.<br />

Jede Informationseinheit ist dort als<br />

Objekt ID (OID) definiert.<br />

Zur Integration von SNMP-fähigen<br />

Geräten gibt es eine ganze Reihe von<br />

Möglichkeiten. Auf SNMP spezialisierte<br />

Netzwerk-Management-Software ist<br />

heute weitgehend abgelöst <strong>und</strong> in<br />

umfassenden Management-Lösungen<br />

aufgegangen, die unter anderem auch<br />

SNMP beherrschen. So bietet etwa<br />

die Firma HP statt ihres OpenView-<br />

Produkts nun den Systems Insight Manager<br />

an. Von IBM beispielsweise gibt<br />

es zum gleichen Zweck den Systems<br />

Director. In vielen Netzwerken werden<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Netzwerk<br />

SNMP & Co.<br />

27<br />

<strong>Sicher</strong>heit<br />

Die größte Schwäche von SNMP war<br />

immer die mangelnde <strong>Sicher</strong>heit des<br />

Protokolls. So gab es <strong>für</strong> den Zugriffsschutz<br />

auf die Ressourcen eines SNMPfähigen<br />

Geräts nur den sogenannten<br />

Community-String, ein einfaches unverschlüsseltes<br />

Passwort <strong>ohne</strong> Benutzernamen.<br />

Ohne weiteren Schutz waren<br />

da<strong>mit</strong> selbst Brute-Force-Angriffe<br />

ein Kinderspiel, etwa <strong>mit</strong> Onesixtyone<br />

[2]. SNMPv2 führte einige Maßnahmen<br />

<strong>für</strong> mehr <strong>Sicher</strong>heit ein, die sich aber in<br />

der Praxis kaum durchsetzten.<br />

Erst SNMPv3, das im Jahr 2003 standardisiert<br />

wurde, erweiterte den Zugriffsheute<br />

statt solcher „Enterprise-Lösungen“<br />

lieber freie Monitoring-Lösungen<br />

wie Nagios, Icinga oder Zabbix eingesetzt,<br />

die allesamt SNMP beherrschen.<br />

Darüber hinaus sind eine ganze Reihe<br />

von Programmen SNMP-fähig <strong>und</strong> lassen<br />

sich so in eine Management-Umgebung<br />

integrieren. Zum Beispiel gibt es<br />

<strong>für</strong> Telefonie-Programme wie Asterisk<br />

<strong>und</strong> Opensips eigene SNMP-Module.<br />

Auch der Viren- <strong>und</strong> Malware-Scanner<br />

Amavis bietet seine Statistiken auf<br />

Wunsch über SNMP an. Zum Management<br />

virtueller Maschinen, die in Linux-<br />

Hosts per Libvirt verwaltet werden,<br />

gibt es eine Bibliothek namens Libvirt-<br />

SNMP, die beide Welten zusammenbringt.<br />

Sie befindet sich allerdings noch<br />

in Entwicklung <strong>und</strong> muss <strong>für</strong> manche<br />

Distributionen noch selbst kompiliert<br />

werden. Allerdings ist sie beispielsweise<br />

schon Bestandteil von Fedora<br />

19. Unter dem Namen Foghorn gibt es<br />

auch eine Software, die Ereignisse des<br />

D-Bus auf Linux in SNMP umsetzt.<br />

Agenten<br />

Router <strong>und</strong> bessere Switches besitzen<br />

wie auch Storage-Geräte meistens eingebauten<br />

SNMP-Support. Um sie per<br />

SNMP zu managen, muss der Administrator<br />

nur noch die passende MIB in das<br />

Management-System integrieren, um<br />

<strong>mit</strong> Namen auf die vorhandenen Subsysteme<br />

unter Interfaces zuzugreifen.<br />

Oft ist allerdings aus <strong>Sicher</strong>heitsgründen<br />

die SNMP-Funktionalität ab Werk<br />

ausgeschaltet, also muss der Anwender<br />

sie zuerst manuell aktivieren.<br />

Bei Linux-Servern sieht die Sache anders<br />

aus. Prinzipiell gibt es ein Menge<br />

freier SNMP-Software, die man auf<br />

einer Distribution installieren kann,<br />

so etwa auch einen SNMP-Agenten,<br />

der das System überwacht <strong>und</strong> die<br />

Laufdaten an das Management-System<br />

übergibt. Die bessere Option ist allerdings<br />

oft ein spezifischer Agent, den<br />

ein Hardware-Hersteller zur Verfügung<br />

stellt. Dies tut er, wenn überhaupt,<br />

aber meistens nur <strong>für</strong> eine Handvoll<br />

(Enterprise-)Distributionen. Das SNMP-<br />

Paket auf Linux basiert meist auf<br />

Net-SNMP [1], während die Standard-<br />

MIBs die OIDs wie »HOST‐RESOUR-<br />

CES‐MIB::hrFSTable« bereitstellen. Ein<br />

Abbildung 1: Bei richtiger Konfiguration gibt das Kommando »snmptable« die konfigurierten<br />

Dateisysteme eines Linux-Servers aus.<br />

Beispiel da<strong>für</strong>, wie man solche Werte<br />

ausliest, findet sich im Kasten „Linux-<br />

Setup“.<br />

In der Windows-Welt hat sich im Laufe<br />

der Jahre hinsichtlich SNMP etwas<br />

verändert. Microsoft hat nämlich in<br />

Windows Server 2012 den SNMP-Support<br />

<strong>für</strong> veraltet (deprecated) erklärt.<br />

Stattdessen wird Windows-Admins<br />

empfohlen, künftig CIM zu verwenden<br />

(dazu später mehr). Allerdings steht die<br />

Software weiterhin zur Verfügung, sie<br />

muss nur extra aktiviert werden: Der<br />

Dienst ist im Feature »SNMP Services«<br />

(»SNMP‐Dienst«) enthalten, die Programme<br />

in »SNMP Tools«.<br />

Wer selbst Hand anlegen möchte, findet<br />

dazu in den meisten Programmiersprachen<br />

Gelegenheit. Diverse Bibliotheken<br />

gehören zum Standardumfang<br />

der gängigen Linux-Distributionen,<br />

etwa die C-Bibliothek von Net-SNMP<br />

»net‐snmp‐devel« (Red Hat, Fedora)<br />

beziehungsweise »libsnmp‐dev« (Debian/​Ubuntu).<br />

Für C++-Programmierer<br />

gibt es SNMP++, <strong>für</strong> die Java-Welt SN-<br />

MP4J. Skript-Programmierer können<br />

beispielsweise auf Pysnmp, PHP-SNMP<br />

oder Perl-Net-SNMP zurückgreifen.<br />

schutz so, dass er einerseits umfassend<br />

<strong>und</strong> andererseits so einfach war, dass<br />

ihn die Anwender auch einsetzen<br />

wollten. Mit dem neuen Protokoll gibt<br />

es nun Authentifizierung <strong>mit</strong> Benutzernamen<br />

<strong>und</strong> einem verschlüsselten<br />

Passwort. Gleichzeitig stellt das Protokoll<br />

sicher, dass SNMP-Pakete nicht<br />

unterwegs abgehört oder modifiziert<br />

werden. Wer besonders sicher gehen<br />

will, verschlüsselt die SNMP-Verbindungen<br />

zwischen Management-System <strong>und</strong><br />

Agent zusätzlich <strong>mit</strong> TLS.<br />

n Linux-Setup<br />

Wie üblich ist die SNMP-Konfiguration <strong>mit</strong> Linux distributionsspezifisch.<br />

Bei Ubuntu/​Debian heißen die<br />

Agenten-Pakete »snmpd«, die Tools sind im »snmp«-<br />

Paket enthalten. Bei Fedora findet sich der Agent in<br />

»net‐snmp«, die Tools im Paket »net‐snmp‐utils«.<br />

Wer auf Ubuntu- <strong>und</strong> Debian-Systemen nach der<br />

Installation einen Test <strong>mit</strong> »snmpwalk«, »snmpget«<br />

oder »snmptable« durchführt, wird im Normalfall <strong>mit</strong><br />

einer Fehlermeldung konfrontiert, weil die MIBs noch<br />

nicht heruntergeladen sind. Dies lässt sich durch die<br />

Installation des Pakets »snmp‐mibs‐downloader«<br />

nachholen.<br />

Ein erfolgreicher Test <strong>mit</strong> »snmptable ‐v1 ‐Os ‐Cb ‐c<br />

public localhost HOST‐RESOURCES‐MIB::hrFSTable«<br />

sieht so aus wie in Abbildung 1. Die Option »‐Os«<br />

sorgt da<strong>für</strong>, dass nur das letzte Element der OID ausgegeben<br />

wird, »‐Cb« sorgt <strong>für</strong> abgekürzte Feldnamen.<br />

Wichtig ist auch, <strong>mit</strong> »‐v1« die Version 1 von SNMP<br />

festzulegen, denn sonst erhält man ebenfalls eine<br />

Fehlermeldung, wenn man nicht SNMPv4 richtig<br />

konfiguriert hat. Der Parameter »‐c public« authentifiziert<br />

den Aufruf <strong>mit</strong> der SNMP-„Community“ »public«,<br />

die entsprechend in der Konfigurationsdatei<br />

des Agents festgelegt sein muss (meist »/etc/snmp/<br />

snmpd.conf«) – mehr dazu im Abschnitt „<strong>Sicher</strong>heit“<br />

dieses Artikels. Eine weitere Fehlerquelle respektive<br />

voreingestellte <strong>Sicher</strong>heitsmaßnahme ist, dass auf<br />

vielen Distributionen der SNMP-Agent nur auf der<br />

Localhost-Adresse lauscht.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


28<br />

Netzwerk<br />

SNMP & Co.<br />

WBEM<br />

WBEM Protocols & Bindings<br />

(CIM-XML, WS-Management, SM CLP)<br />

WBEM Infrastructure<br />

(Operations, Events, Query Language, Registry Definitions, ...)<br />

Other Schema<br />

(Registries)<br />

CIM<br />

Alternativen, Ergänzungen<br />

SNMP ist weit verbreitet <strong>und</strong> das dominante<br />

Protokoll beim Netzwerk- <strong>und</strong><br />

System-Management. Trotzdem gibt es<br />

einige Kritikpunkte. So erlaubt es die<br />

MIB-Spezifikation nicht, Beziehungen<br />

<strong>und</strong> Abhängigkeiten zwischen Objekten<br />

untereinander auszudrücken. Auch ist<br />

das Management (im Gegensatz zur<br />

reinen Überwachung) etwas unzuverlässig,<br />

denn es bietet beim Einstellen<br />

komplexer Konfigurationen keine<br />

Transaktionen. Also kann leicht ein<br />

Management Profiles<br />

(Systems, Devices, Software,<br />

Indications, ...)<br />

CIM Schema<br />

(Models, Classes, Properties, Methods)<br />

CIM Infrastructure<br />

(Meta Schema, Rules, MOF, ...)<br />

Abbildung 2: Das Management-Framework der DTMF spezifiziert die gemanageten Objekte in CIM<br />

<strong>und</strong> überträgt die Daten über die WBEM-Protokolle.<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/30857<br />

Abbildung 3: In Windows Server 2012 R2 muss der Administrator den<br />

SNMP-Dienst als Feature eigens installieren.<br />

inkonsistenter Zustand eintreten, wenn<br />

Teile der Konfigurationsanfragen umgesetzt<br />

werden <strong>und</strong> andere nicht.<br />

Und natürlich gibt es auch mehr als<br />

genug Industriekonsortien, die immer<br />

neue Standards ins Leben rufen. In diesem<br />

Fall ist es die Distributed Management<br />

Task Force (DMTF), die aus den<br />

großen Namen der Industrie wie AMD,<br />

Cisco, EMC, Intel, Microsoft, Oracle <strong>und</strong><br />

VMware besteht. Ihr jüngstes Produkt<br />

ist das <strong>Cloud</strong> Infrastructure Management<br />

Interface (CIMI), das ein standardisiertes<br />

Modell <strong>für</strong> das Management<br />

von <strong>Cloud</strong>s werden soll. Darum soll<br />

es aber jetzt nicht gehen, sondern um<br />

ein älteres Produkt der DMTF-Standardisierung,<br />

nämlich das Common<br />

Information Model (CIM, [3]) <strong>und</strong> das<br />

Web-Based Enterprise Management<br />

(WBEM, [4]), die zusammen eine ähnliche<br />

Funktion erfüllen wie SNMP (siehe<br />

Abbildung 2).<br />

Das CIM übernimmt<br />

dabei die Funktion der<br />

SNMP-MIB <strong>und</strong> definiert<br />

die gemanageten<br />

Objekte einer<br />

IT-Umgebung. CIM<br />

orientiert sich dabei<br />

an der Unified Modeling<br />

Language (UML)<br />

<strong>und</strong> erlaubt es, auch<br />

Klassen <strong>und</strong> Vererbung<br />

zu repräsentieren.<br />

Protokolle zur Übertragung<br />

übers Netz (etwa<br />

HTTP), Abfragesprache,<br />

Discovery <strong>und</strong> Ähnliches<br />

übernimmt das<br />

WBEM. In Dateien sind die CIM-Daten<br />

wiederum im MOF-Format abgelegt<br />

(Managed Object Format). Auch an die<br />

<strong>Sicher</strong>heit wurde bei der Spezifikation<br />

von WBEM gedacht: Der Zugriff lässt<br />

sich rollenbasiert oder über ACLs (Access<br />

Control Lists) regeln.<br />

Wie bereits erwähnt, setzen die Windows-Server-Produkte<br />

seit Server 2012<br />

statt auf SNMP von Haus aus auf CIM<br />

(beziehungsweise ihre spezielle Variante<br />

WMI). Tatsächlich hat Microsoft<br />

sogar einen „CIM/​WBEM Manageability<br />

Services Broker“ geschrieben <strong>und</strong> unter<br />

einer freien Lizenz verfügbar gemacht,<br />

der auf Linux- <strong>und</strong> Unix-Systemen<br />

läuft <strong>und</strong> jetzt bei der Opengroup sein<br />

Zuhause hat [5]. Er findet allerdings in<br />

Linux-Distributionen keinen Einsatz.<br />

Aber natürlich müssen Linux-Admins<br />

auf die standardisierten Management-<br />

Protokolle nicht verzichten. Ubuntu<br />

setzt wie Red Hat Enterprise Linux <strong>und</strong><br />

Suse Linux Enterprise Server auf den<br />

Small Footprint CIM Broker »sfcb« des<br />

SBLIM-Projekts, das WBEM <strong>für</strong> Linux<br />

implementiert [6]. In älteren Versionen<br />

der Enterprise-Distributionen fanden<br />

noch die Alternativen OpenWBEM<br />

(SLES 10) <strong>und</strong> OpenPegasus (RHEL 5)<br />

Verwendung, von denen letzter immer<br />

noch in Fedora zu finden ist. Über einen<br />

Kommandozeilen-Client lassen sich die<br />

WBEM-/​CIM-Informationen dann beispielsweise<br />

nach folgendem Schema<br />

abrufen: »wbemcli ecn https://root@<br />

localhost/root/cimv2«. Dieser Befehl<br />

zeigt – bei erfolgreicher Authentifizierung<br />

– alle CIM-Klassen an.<br />

Komplexe Sache<br />

Um Router, Switche <strong>und</strong> Server standardgemäß<br />

zu managen, gibt es einige<br />

Möglichkeiten, getreu dem Motto<br />

„many standards to choose from“.<br />

Bewährt hat sich seit langem SNMP,<br />

<strong>und</strong> es wird vermutlich noch eine<br />

Weile erhalten bleiben, auch wenn sich<br />

Windows offiziell davon verabschiedet<br />

hat. Die Alternativen sind komplexe<br />

Standards wie CIM <strong>und</strong> WBEM der<br />

DMTF, <strong>für</strong> die es auch unter Linux diverse<br />

Implementierungen gibt. Über<br />

die DMTF-Standards lassen sich alle<br />

Geräte auch in Enterprise-Lösungen <strong>für</strong><br />

IT-Management integrieren. n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


izoon, 123RF<br />

Das neue Feature Deduplizierung in SEP sesam<br />

Datenpresse<br />

Irgendwann landen die exponentiell wachsenden Datenberge schließlich im<br />

<strong>Backup</strong>. Dann stellt sich auch hier die Frage, wie man am effektivsten <strong>mit</strong><br />

ihnen umgeht. Eine Möglichkeit, sie zu verkleinern, die seit kurzem auch SEP<br />

sesam beherscht, heißt Deduplizierung. Jens-Christoph Brendel<br />

Die Deduplizierung kennt eine ganze<br />

Reihe verschiedener Ausprägungen<br />

<strong>und</strong> Spielarten, aber einen zentralen<br />

Gedanke haben alle gemeinsam: Immer<br />

geht es darum, in einer Menge gespeicherter<br />

Dateien oder in einem Datenstrom,<br />

Teilstücke zu erkennen, die<br />

genauso zuvor bereits vorgekommen<br />

sind. Sie werden dann nur ein einziges<br />

Mal gespeichert – alle anderen Vorkommen<br />

dieses Datenstücks werden<br />

durch Verweise auf das erste Muster<br />

ersetzt. Da die Verweise viel kürzer als<br />

die Daten sind, auf die sie zeigen, ergeben<br />

sich handfeste Platzeinsparungen.<br />

Das ist gerade <strong>für</strong> <strong>Backup</strong>-Software ein<br />

essenzieller Gewinn.<br />

Beim Restore werden die Zeiger automatisch<br />

durch die Blöcke ersetzt, auf<br />

die sie verweisen. Das ist einer der Un-<br />

terschiede zu ebenfalls platzsparenden<br />

inkrementellen oder differenziellen<br />

<strong>Backup</strong>s, bei denen beim Restore immer<br />

eine Serie vorausgegangener <strong>Sicher</strong>ungen<br />

nötig ist, die nacheinander<br />

einzuspielen sind.<br />

Wie hoch die Einsparungen durch das<br />

Deduplizieren wirklich sind, ist nicht<br />

zuletzt eine Frage des Rechenverfahrens<br />

– einen Standard hier<strong>für</strong> gibt es<br />

nicht. Berücksichtigt man, wieviel Platz<br />

man <strong>mit</strong> konventionellen Vollbackups<br />

gebraucht hätte, um eine bestimmte<br />

Datenmenge zu sichern, kann sich ein<br />

Verhältnis von 15:1, 25:1 oder auch<br />

50:1 ergeben. In die Rechnung gehen<br />

die Änderungsrate der Daten, die<br />

Aufbewahrungsfristen, die Anzahl der<br />

Quellen oder die Art <strong>und</strong> Häufigkeit der<br />

<strong>Sicher</strong>ungen ein. Auch die Struktur der<br />

Daten hat einen sehr großen Einfluss.<br />

Sehr dankbar sind beispielsweise Images<br />

virtueller Maschinen <strong>mit</strong> gleichen<br />

Betriebssystemen.<br />

Je länger die Haltefrist <strong>und</strong> je kleiner<br />

die Änderungsrate, je größer der Effekt.<br />

Oder andersrum: Wenn man seine<br />

<strong>Backup</strong>s aus Platzmangel nur eine<br />

Woche aufheben kann, dann profitiert<br />

man auch weniger vom Deduplizieren,<br />

weil jede weitere <strong>Sicher</strong>ung derselben<br />

Daten den Gewinn erhöhte.<br />

Die Angaben zu Dedup-Rate sind allerdings<br />

oft Marketingzahlen. Die Unterschiede<br />

der Raten klingen größer als sie<br />

tatsächlich sind. So würde man von 100<br />

GByte bei einer Deduplizierungsrate<br />

von 10:1 nur 10 GByte sichern, also 90<br />

Prozent sparen. Könnte man eine Rate<br />

von 50:1 erreichen, immerhin fünfmal<br />

so viel, bräuchte man nur noch 2 GByte<br />

abzulegen <strong>und</strong> würde 98 Prozent sparen<br />

– das sind allerdings gerade einmal<br />

8 Prozent mehr als bei 10:1.<br />

Geschichte<br />

An Deduplikationsverfahren wurde<br />

verstärkt um die Jahrtausendwende<br />

herum entwickelt. Noch vor Ablauf<br />

des ersten Jahrzehnts hatten kleinere,<br />

spezialisierte Firmen entsprechende<br />

Produkte auf dem Markt, die sich große<br />

Storage- <strong>und</strong> <strong>Backup</strong>-Hersteller in der<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


<strong>Backup</strong><br />

Deduplizierung<br />

31<br />

Folge reihenweise einverleibten. So<br />

erwarb EMC den Deduplikationsspezialisten<br />

Avamar bereits 2006 <strong>für</strong> 165<br />

Millionen Dollar. IBM kaufte im ersten<br />

Quartal 2008 das Startup Diligent Technologies,<br />

um dessen In-Line-Deduplikation<br />

in eigene Produkte zu integrieren.<br />

NetApp legte 2009 aus demselben<br />

Gr<strong>und</strong> <strong>für</strong> Data Domain ungefähr 1,5<br />

Milliarden Dollar auf den Tisch <strong>und</strong><br />

Dell schnappte sich 2010, drei Jahre<br />

nach dessen Gründung, den Storage-<br />

Optimierer Ocarina Networks. Auch<br />

<strong>Backup</strong>-Software-Hersteller beteiligten<br />

sich an der Shoppingtour: So kaufte<br />

Arkeia 2009 die Deduplikationsfirma<br />

Kadena samt ihrer Patente.<br />

Mittelständische Anbieter von <strong>Backup</strong>-<br />

Lösungen wie SEP, deren Kriegskasse<br />

sich <strong>mit</strong> der von IBM oder EMC nicht<br />

messen kann, hatten zunächst das<br />

Nachsehen. Inzwischen haben sie aber<br />

aufgeholt, Deduplikation ist zu einem<br />

Standard-Feature von <strong>Backup</strong>-Anwendungen<br />

geworden <strong>und</strong> auch unter<br />

Open-Source-Flagge wurden Deduplikationslösungen<br />

entwickelt [1]. SEP<br />

sesam nutzt Deduplikation seit diesem<br />

Sommer.<br />

Spielarten<br />

Deduplikation lässt sich auf verschiedene<br />

Art <strong>und</strong> Weise bewerkstelligen.<br />

Zunächst kann man nach dem Ort, an<br />

dem dedupliziert wird, unterscheiden.<br />

Findet die Deduplikation beim <strong>Backup</strong><br />

bereits auf dem Client statt, hat das<br />

den Vorteil, dass sich schon die via<br />

Netzwerk zum <strong>Backup</strong>-Server zu übertragende<br />

Datenmenge verringert. Der<br />

Datentransfer benötigt weniger Bandbreite<br />

<strong>und</strong> geht schneller vonstatten.<br />

Gleichzeitig wird die Rechenkapazität<br />

des Servers entlastet.<br />

Da<strong>für</strong> wird entweder der Hashwert<br />

auf dem Client berechnet <strong>und</strong> an den<br />

Server gesendet, der nachsieht, ob er<br />

einen solchen Block bereits gespeichert<br />

hat. Oder die zu versendenden Daten<br />

werden gecachet <strong>und</strong> der Client prüft<br />

vor dem Senden eines Datenteilstücks,<br />

ob diese Daten früher bereits einmal<br />

gesendet wurden, was weitere Versandoperationen<br />

ebenfalls spart.<br />

SEP sesam kann derzeit nicht <strong>mit</strong><br />

Client-seitiger Deduplikation aufwar-<br />

Abbildung 1: Die Konfiguration eines passenden Store Types beim Einrichten eines Data Store ist<br />

schon fast alles, was <strong>für</strong> die Deduplikation konfiguriert werden muss.<br />

ten, ein solches Feature steht allerdings<br />

auf der Roadmap <strong>und</strong> soll im zweiten<br />

Quartal 2014 nachgerüstet werden. Was<br />

SEP sesam derzeit beherrscht, ist die<br />

Server-seitige Deduplikation, die den<br />

ankommenden Datenstrom <strong>mit</strong> den<br />

bereits gesicherten Daten vergleicht<br />

<strong>und</strong> nicht noch einmal sichert, was sich<br />

bereits in einem <strong>Backup</strong> befindet (egal<br />

von welchem Client es stammt).<br />

Hier gibt es wieder zwei Varianten, wie<br />

Duplikate erkannt werden. Zum einen<br />

ist das auf Dateiebene möglich, indem<br />

beispielsweise ein Hashwert pro Datei<br />

berechnet wird. Falls erforderlich<br />

können übereinstimmende Hashwerte<br />

dann immer noch durch einen bitweisen<br />

Vergleich verifiziert werden, um<br />

sogenannte Hash-Kollisionen zu vermeiden,<br />

bei denen in extrem seltenen<br />

Fällen unterschiedliche Dateien gleiche<br />

Hashes erzeugen können. Bitweise<br />

Vergleiche sind genauer, kosten aber<br />

Performance.<br />

Eines im Prinzip gleichen Verfahrens<br />

wie der dateibasierten Deduplikation<br />

bedient sich auch der sogenannte Single<br />

Instance Storage (SIS), der zuweilen<br />

in Dateisystemen oder bei Mail- oder<br />

Groupware-Servern realisiert wird<br />

(zum Beispiel bei Novell Groupwise).<br />

Daneben gibt es eine ganze Reihe von<br />

<strong>Backup</strong>-Lösungen, die gleiche Files<br />

durch Hardlinks ersetzen (etwa<br />

rsnapshot).<br />

Das dateibasierte Verfahren schöpft<br />

allerdings nicht alle Möglichkeiten<br />

aus, weil auch nach minimalen Änderungen<br />

immer ganze Files erneut<br />

gesichert werden. Diesen Nachteil hat<br />

die blockweise Deduplikation nicht, bei<br />

der unterhalb der File-Ebene gleiche<br />

Datenteilstücke nur einmal verwendet<br />

werden. Die feinere Granularität ermöglicht<br />

größere Einsparungen, kostet<br />

aber mehr Rechenkapazität.<br />

Eine weitere Unterscheidung ergibt<br />

sich danach, wann die Deduplikation<br />

stattfindet: Entweder un<strong>mit</strong>telbar<br />

während der Datenübertragung (Inline)<br />

oder nachdem die Daten übertragen<br />

wurden – in bestimmten Intervallen auf<br />

der Gr<strong>und</strong>lage einer Zeitsteuerung. Im<br />

letzteren Fall können Zeiten geringer<br />

Auslastung <strong>für</strong> die Deduplikation genutzt<br />

werden, da<strong>für</strong> wird Platz <strong>für</strong> eine<br />

komplette temporäre Kopie auf den<br />

Speichermedien zusätzlich gebraucht.<br />

SEP sesam beherrscht sowohl das<br />

Inline-Deduplizieren, das in diesem Fall<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


32<br />

<strong>Backup</strong><br />

Deduplizierung<br />

recht gut steuerbar, weil jeder <strong>Backup</strong>stream<br />

(also jeder <strong>Sicher</strong>ungsauftrag)<br />

von einem CPU-Core bedient wird<br />

(solange es genügend Cores gibt).<br />

Abbildung 2: Die Statusübersicht verrät unter anderem auch die Saveset-ID dieser <strong>Sicher</strong>ung.<br />

n Listing 1: Erstes <strong>Backup</strong><br />

01 backupserver#: sm_dedup_interface ‐d dedupstore1_2 list<br />

02 <br />

03 INFO Successfully initialized i2dedup library version v2.0.0‐beta5‐wip5<br />

04 Filename (Total MiB / MiB After DeDupe) (DeDupe Ratio):<br />

Si3 heißt <strong>und</strong> um das es im Folgenden<br />

hauptsächlich gehen wird, als auch das<br />

zeitversetzte Deduplizieren, hier SEP<br />

FDS VA genannt, das auf einer Lösung<br />

von FalconStore basiert.<br />

Schaut man noch genauer hin, stößt<br />

man schließlich auf Unterschiede<br />

der verwendeten Algorithmen. Ein<br />

Knackpunkt ist hier beispielsweise das<br />

Zerlegen des Datenstroms in Teilstücke<br />

(Chunking). Hier kann man entweder<br />

<strong>mit</strong> variablen oder <strong>mit</strong> festen Blockgrößen<br />

arbeiten. Zu kleine Blocks sind<br />

ungünstig, weil der Overhead <strong>für</strong> ihre<br />

Verwaltung dann den Nutzen übersteigen<br />

kann. Genauso ungünstig sind aber<br />

auch zu große Blocks, bei denen es<br />

immer unwahrscheinlicher wird, Blöcke<br />

zu finden, die vollkommen identisch<br />

sind. Variable Blockgrößen kommen<br />

dem Optimum näher, kosten da<strong>für</strong> aber<br />

mehr Rechenzeit. SEP Si3 benutzt variable<br />

Blockgrößen zwischen 8 <strong>und</strong> 64<br />

KByte. Die CPU-Belastung ist dennoch<br />

05 ‐‐SC20131107155413674@Y2zqsDWksIx.data 104886144 : 104886144 ( 0.00%)<br />

06 ...<br />

n Listing 2: Alles dedupliziert<br />

01 backupserver#: sm_dedup_interface ‐d dedupstore1_2 list<br />

02 <br />

03 INFO Successfully initialized i2dedup library version v2.0.0‐beta5‐wip5<br />

04 Filename (Total MiB / MiB After DeDupe) (DeDupe Ratio):<br />

05 <br />

06 ‐‐SC20131107163703729@5kAEYseAiWR.data 104886144 : 0 (100.00%)<br />

n Listing 3: Hohe Dedup-Rate<br />

01 backupserver#: sm_dedup_interface ‐d dedupstore1_2 list<br />

02 <br />

03 INFO Successfully initialized i2dedup library version v2.0.0‐beta5‐wip5<br />

04 ‐‐SC20131107164321295@7AB‐QQ0VG‐U.data 104886144 : 15797 ( 99.98%)<br />

Konfiguration<br />

Will man die Deduplizierung <strong>mit</strong> einem<br />

SEP-sesam-Server benutzen, überzeugt<br />

man sich zuerst davon, dass Hard- <strong>und</strong><br />

Software die Voraussetzungen erfüllen.<br />

Si3 braucht mindestens 16 GByte RAM<br />

<strong>und</strong> wenigstens 4 Rechenkerne sowie<br />

1 TByte freien Plattenplatz. Für Testumgebungen<br />

reichen notfalls auch 8<br />

GByte RAM <strong>und</strong> 2 Kerne. Software-seitig<br />

werden die Linux-Paketformate Deb<br />

<strong>und</strong> RPM <strong>für</strong> Suse-, Debian- <strong>und</strong> Red-<br />

Hat-Distributionen untertützt, dazu<br />

Windows 2003/​2008/​Win 7, Mac OSX,<br />

Solaris (Sparc <strong>und</strong> x86), Netware <strong>und</strong><br />

einige weitere Unix-Derivate (darunter<br />

AIX, FreeBSD <strong>und</strong> HP-UX).<br />

Die Deduplikation ist plattformübergreifend<br />

als Java-Applikation gestaltet.<br />

Sie integriert sich sehr gut in die bestehende<br />

SEP-Infrastruktur. Die komplette<br />

Logik der Aufträge <strong>und</strong> Zeitpläne bleibt<br />

bestehen, das Migrieren <strong>und</strong> Restaurieren<br />

von <strong>Sicher</strong>ungen <strong>und</strong> das Monitoring<br />

funktionieren genauso wie bei<br />

herkömmlichen <strong>Backup</strong>s.<br />

Beim Einrichten ist tatsächlich nur an<br />

einer einzigen Stelle die Deduplikation<br />

einzustellen: Beim Einrichten eines sogenannten<br />

Data Stores muss als »Store<br />

Type« der Wert »SEP Si3 Deduplication<br />

Store« gewählt werden (Abbildung 1).<br />

Hernach werden in diesem Data Store<br />

mehrfach vorkommende Blöcke <strong>mit</strong><br />

gleichem Inhalt durch Zeiger auf das<br />

erste Vorkommen ersetzt.<br />

Vom Erfolg der Konfiguration kann man<br />

sich <strong>mit</strong> einem kleinen Test überzeugen.<br />

Dazu haben wir zehn 10-MByte-<br />

Files <strong>mit</strong> Zufallsdaten erzeugt, die<br />

anschließend auf den Dedup-Store<br />

gesichert wurden. Aus den über die GUI<br />

zugänglichen Protokollen (»Monitoring<br />

| letzter <strong>Backup</strong>‐Status«) kann man<br />

die entsprechende Saveset-ID ersehen<br />

(Abbildung 2). Diese ID findet sich in der<br />

Ausgabe des Befehls »sm_dedup_interface«<br />

auf der Kommandozeile im<br />

Filenamen wieder (Listing 1).<br />

Im ersten Schritt konnte erwartungsgemäß<br />

nichts dedupliziert werden, da<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


<strong>Backup</strong><br />

Deduplizierung<br />

33<br />

schließlich nichts da war, <strong>mit</strong> dem die<br />

anfallenden Daten hätten verglichen<br />

werden können. Die vollen 100 MByte<br />

gelangten auf die Platte <strong>und</strong> die Dedup-Rate<br />

betrug null Prozent.<br />

Wer nun <strong>ohne</strong> die Daten zu ändern<br />

un<strong>mit</strong>elbar einen zweiten Lauf folgen<br />

lässt, erhält die ebenfalls zu erwartende<br />

h<strong>und</strong>ertprozentige Deduplikation<br />

(Listing 2): Jeder einzelne Block<br />

war bereits vorhanden. Dieselbe h<strong>und</strong>ertprozentige<br />

Deduplikation wäre<br />

auch erreicht worden, wenn ein anderer<br />

Client dieselben Daten gesichert<br />

hätte.<br />

Vor einem dritten Durchgang haben<br />

wir nur ein einziges Byte geändert. Bei<br />

einer dateibasierten inkrementellen<br />

<strong>Sicher</strong>ung hätte das zur Folge, dass die<br />

betroffene Datei – <strong>und</strong> da<strong>mit</strong> 10 MByte<br />

an Daten – neu geschrieben werden<br />

müssten. Mit Deduplizierung ist der<br />

Aufwand viel geringer (Listing 3): Nur<br />

r<strong>und</strong> 15 KByte werden neu geschrieben.<br />

Wird auch fortan nur wenig geändert,<br />

dann bleibt die Deduplizierungssrate<br />

über die gesamte Haltezeit des <strong>Backup</strong>s<br />

auf diesem Niveau.<br />

Fazit<br />

Deduplikation ist kein Allheil<strong>mit</strong>tel, sie<br />

hat Vor- <strong>und</strong> Nachteile. Wo es etwa auf<br />

absolute Authentizität der Daten ankommt,<br />

wird man sie nicht zerpflücken<br />

<strong>und</strong> wieder zusammensetzen können.<br />

Wo die Performance das oberste Kriterium<br />

ist, sollte man bedenken, dass<br />

Deduplikation Zeit kostet. Und auch<br />

<strong>mit</strong> Blick auf die Datensicherheit kann<br />

man überlegen, dass ein Datenverlust<br />

durch Hardware-Ausfall – das ist unter<br />

ungünstigen Bedingungen trotz RAID<br />

möglich – wesentlich mehr Daten betrifft,<br />

wenn das deduplizierte Volume<br />

die zwanzigfache Menge fasst. Hat die<br />

<strong>Sicher</strong>heit höchste Priorität, muss man<br />

daran denken, dass verschlüsselte Daten<br />

schlecht deduplizierbar sind.<br />

Will man aber in erster Linie Platz <strong>und</strong><br />

da<strong>mit</strong> auch Kosten sparen, dann hat<br />

man <strong>mit</strong> der Deduplikation ein sehr<br />

effektives Werkzeug an der Hand. Wenn<br />

es noch dazu wie bei SEP sesam gut in<br />

die <strong>Backup</strong>-Applikation integriert ist,<br />

dann fällt auch die Bedienung leicht<br />

<strong>und</strong> verursacht kein zusätzliches Kopfzerbrechen.<br />

Stimmt das Verhältnis von<br />

Rechenleistung zu parallel zu verarbeitenden<br />

<strong>Sicher</strong>ungsaufträgen, fallen die<br />

Performance-Einbußen nicht groß ins<br />

Gewicht. Unter dem Strich bleibt dann<br />

vor allem eine geldwerte Platzersparnis,<br />

die man in diesem Umfang anders<br />

nicht erreichen könnte. n<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31292


Windows Azure <strong>Backup</strong> nutzen<br />

Überwiegend heiter<br />

Oleksiy Mark, 123RF<br />

Mit Windows Azure <strong>Backup</strong> bietet Microsoft einen Dienst an, <strong>mit</strong> dem sich Server-Daten in der <strong>Cloud</strong><br />

sichern lassen. Da<strong>mit</strong> fällt die eigene Infrastruktur weg. Datenschutzbedenken begegnet der Dienst <strong>mit</strong><br />

durchgängiger Verschlüsselung. Thomas Joos<br />

Immer mehr Funktionen bietet Microsoft<br />

nicht nur als Software zum Selberinstallieren<br />

(„On premise“) an, sondern<br />

auch als reine Dienste, die heutzutage<br />

in der Azure-<strong>Cloud</strong> laufen. Ein aktuelles<br />

Beispiel da<strong>für</strong> ist das jüngst gestartete<br />

Azure <strong>Backup</strong> [1], das die Datensicherung<br />

in der <strong>Cloud</strong> erlaubt. Der Dienst<br />

bindet sich in die interne Datensicherung<br />

von Windows Server 2012/​2012<br />

R2 ein <strong>und</strong> erlaubt es, einen eigenen<br />

Zeitplan <strong>für</strong> die Datensicherung in die<br />

<strong>Cloud</strong> zu erstellen. Windows Azure<br />

<strong>Backup</strong> lässt sich parallel zu bestehenden<br />

Datensicherungen betreiben<br />

oder als komplette Datensicherung.<br />

Die Daten sind in der <strong>Cloud</strong> <strong>und</strong> selbstverständlich<br />

während der Übertragung<br />

verschlüsselt <strong>und</strong> daher <strong>für</strong> Fremde<br />

nicht einsehbar.<br />

<strong>Backup</strong> in der <strong>Cloud</strong><br />

Mit Windows Azure <strong>Backup</strong> lassen sich<br />

sogar komplette virtuelle Server, inklusive<br />

deren Konfiguration, in die <strong>Cloud</strong><br />

sichern. Kompatibel ist der Dienst zum<br />

neuen Windows Server 2012 R2, selbst<br />

in der Essentials-Edition, sowie zu den<br />

älteren Produkten Windows Server<br />

2008 R2 <strong>und</strong> 2012. Die Preise von Win-<br />

dows Azure <strong>Backup</strong> belaufen sich auf<br />

0,38 Euro pro GByte. Die Abrechnung<br />

erfolgt auf Basis der komprimierten Dateien,<br />

die während des Abrechnungszeitraums<br />

von einem Monat in der<br />

<strong>Cloud</strong> gespeichert sind.<br />

Azure im Überblick<br />

Um Windows Azure <strong>Backup</strong> nutzen<br />

oder testen zu können, benötigen Sie<br />

ein kostenloses Windows-Azure-Konto.<br />

Windows Azure <strong>Backup</strong> ist nach der<br />

Installation der Client-Software in die<br />

Windows-Datensicherung integriert<br />

<strong>und</strong> lässt sich getrennt von einer lokalen<br />

<strong>Sicher</strong>ung aktivieren <strong>und</strong> einstellen.<br />

Im Gegensatz zu SkyDrive <strong>und</strong> Co dient<br />

Windows Azure <strong>Backup</strong> der Datensicherung<br />

<strong>und</strong> nicht dem Datenaustausch.<br />

Darüber hinaus benötigen Sie einen<br />

Agenten, der die Daten online in Windows<br />

Azure speichern kann <strong>und</strong> im<br />

Azure-Portal [2] zu finden ist. Zur <strong>Sicher</strong>ung<br />

<strong>und</strong> Wiederherstellung dient die<br />

gewohnte Oberfläche der Windows-<br />

Datensicherung. Auch eine Steuerung<br />

in der Windows-Powershell ist möglich,<br />

<strong>für</strong> die es ein eigenes Modul gibt.<br />

Windows Azure <strong>Backup</strong> unterstützt<br />

auch inkrementelle <strong>Sicher</strong>ungen <strong>und</strong><br />

überträgt in diesem Fall nur geänderte<br />

Blöcke. Die Daten werden durch den<br />

Agenten verschlüsselt übertragen <strong>und</strong><br />

werden auch verschlüsselt in Windows<br />

Azure gespeichert. Nach der <strong>Sicher</strong>ung<br />

überprüft Windows Azure <strong>Backup</strong><br />

automatisch die Integrität der Daten.<br />

Außerdem können Sie über Richtlinien<br />

<strong>für</strong> ältere <strong>Sicher</strong>ungen einen automatischen<br />

Verfall festlegen.<br />

Richtig sinnvoll ist der Dienst vor allem<br />

beim Einsatz von Windows Server<br />

2012 R2 Essentials oder der Essentials-<br />

Umgebung-Serverrolle in den anderen<br />

Editionen von Windows Server 2012<br />

R2. Zur Einrichtung <strong>und</strong> Verwendung<br />

des Dienstes stehen im Dashboard von<br />

Windows Server 2012 R2 Essentials entsprechende<br />

Assistenten zur Verfügung.<br />

Die <strong>Sicher</strong>ung in Azure <strong>Backup</strong> lässt<br />

sich aber auch <strong>mit</strong> dem System Center<br />

Data Protection Manager verwalten.<br />

Unternehmen können da<strong>mit</strong> Daten teilweise<br />

lokal sichern <strong>und</strong> teilweise in der<br />

<strong>Cloud</strong>. Der Agent ist Proxy-fähig, was<br />

die Anbindung an das Internet deutlich<br />

vereinfachen kann.<br />

Um die Datensicherung auf einem<br />

Server einzurichten, installieren<br />

Sie zunächst die Windows-Server-<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


<strong>Backup</strong><br />

Azure<br />

35<br />

<strong>Sicher</strong>ung. Diese müssen Sie über den<br />

Server-Manager <strong>mit</strong> »Verwalten\Rollen<br />

<strong>und</strong> Funktionen hinzufügen«. Installieren<br />

Sie dazu das Feature »Windows<br />

Server‐<strong>Sicher</strong>ung«. In Windows Server<br />

2012 R2 Essentials ist diese Funktion<br />

bereits automatisch installiert.<br />

Konfiguration im Dashboard<br />

Beim Einsatz von Windows Server 2012<br />

R2 Essentials melden Sie sich über das<br />

Dashboard an Windows Azure <strong>Backup</strong><br />

an. Klicken Sie dazu auf der »Startseite«<br />

des Dashboards auf »Add‐Ins« <strong>und</strong><br />

dann auf »In Windows Azure <strong>Backup</strong><br />

integrieren«. Auf der rechten Seite<br />

melden Sie sich zunächst an Windows<br />

Azure <strong>Backup</strong> an. Sie können sich über<br />

diesen Weg oder auch auf der Standardseite<br />

von Windows Azure <strong>Backup</strong><br />

<strong>für</strong> eine Testversion registrieren. Haben<br />

Sie ein Konto erstellt, dürfen Sie im<br />

Dashboard den Client <strong>für</strong> die Integration<br />

von Windows Azure <strong>Backup</strong> herunterladen.<br />

Für die Integration in DPM<br />

<strong>und</strong> in die Windows-Server-<strong>Sicher</strong>ung<br />

stehen jeweils eigene Agenten zur Verfügung.<br />

Wollen Sie Windows Azure <strong>Backup</strong> in<br />

anderen Editionen von Windows Server<br />

2008 R2/​2012 oder Windows Server<br />

2012 R2 einrichten, müssen Sie im<br />

Windows-Azure-Portal zunächst über<br />

die Auswahl des Pluszeichens unten im<br />

Bildschirm <strong>und</strong> danach von »Neu\Datendienste\Wiederherstellungsdienste\<br />

<strong>Sicher</strong>ungstresor« einen Speicher<br />

(Tresor) einrichten, in dem Windows<br />

Azure <strong>Backup</strong> seine Daten speichern<br />

kann (Abbildung 1). Die Daten in diesem<br />

Speicher werden verschlüsselt<br />

abgelegt.<br />

Ist der Tresor vorhanden, finden Sie<br />

im Verwaltungsportal von Windows<br />

Azure den neuen Link »Wiederherstellungsdienste«,<br />

wo Ihr Tresor zu finden<br />

ist. Klicken Sie ihn an, können Sie ein<br />

Zertifikat <strong>für</strong> die <strong>Sicher</strong>ung verwalten,<br />

Informationen <strong>für</strong> die Einrichtung abrufen<br />

<strong>und</strong> den Agenten <strong>für</strong> die Anbindung<br />

lokaler Server herunterladen. Die Authentifizierung<br />

zwischen Agenten <strong>und</strong><br />

Windows Azure <strong>Backup</strong> erfolgt über ein<br />

Zertifikat.<br />

Dieses exportieren Sie auf dem Server,<br />

der Daten in Windows Azure sichern<br />

Abbildung 1: Für die Verwendung von Windows Azure <strong>Backup</strong> benötigen Sie einen <strong>Sicher</strong>ungstresor.<br />

soll, als Cer-Datei. Rufen Sie dazu <strong>mit</strong><br />

»certlm.msc« die lokale Zertifikateverwaltung<br />

auf dem Server auf <strong>und</strong> klicken<br />

Sie das Zertifikat nach der Installation<br />

<strong>mit</strong> der rechten Maustaste an. Über<br />

»Alle Aufgaben\Exportieren« können<br />

Sie das Zertifikat in eine Cer-Datei<br />

exportieren. Den privaten Schlüssel<br />

müssen Sie nicht <strong>mit</strong>exportieren. Diese<br />

Datei importieren Sie dann wiederum<br />

im Tresor über das Dashboard. Sobald<br />

sich der entsprechende Server <strong>mit</strong><br />

Windows Azure <strong>Backup</strong> verbindet, wird<br />

das Zertifikat erkannt <strong>und</strong> der Server<br />

angeb<strong>und</strong>en. Das heißt, Windows Azure<br />

<strong>Backup</strong> <strong>und</strong> die Server, die Sie sichern,<br />

benötigen das gleiche Zertifikat, unabhängig<br />

davon, ob Sie sich ein Zertifikat<br />

kaufen oder ein internes Zertifikat verwenden.<br />

Für Testzwecke können Sie auch ein<br />

selbstsigniertes Zertifikat erstellen.<br />

Dazu verwenden Sie das Tool »makecert.exe«<br />

aus dem Windows 8/​8.1<br />

SDK [3]. Sie finden<br />

»makecert.exe« im Verzeichnis<br />

»C:\Program<br />

Files (x86)\Windows<br />

Kits\8.0\bin\x64«. Ein<br />

Zertifikat erstellen Sie<br />

so:<br />

makecert.exe ‐r ‐pe ‐nU<br />

CN=Servername ‐ssU<br />

my ‐sr localmachine U<br />

‐eku 1.3.6.1.5.5.7.U<br />

3.2 ‐len 2048 ‐e U<br />

01/01/2016 Zertifikat<br />

Das erstellte Zertifikat<br />

installieren Sie auf<br />

dem Server, exportieren es <strong>und</strong> laden<br />

die exportierte Cer-Datei in Windows<br />

Azure <strong>Backup</strong> hoch – genau wie bei einem<br />

normalen Zertifikat (Abbildung 2).<br />

Agenten <strong>für</strong> die <strong>Sicher</strong>ung<br />

Die Server, <strong>mit</strong> denen Sie Daten in die<br />

<strong>Cloud</strong> sichern wollen, benötigen einen<br />

Agenten, den Sie im Verwaltungsportal<br />

von Windows Azure finden. Zur Installation<br />

des Agenten auf dem Server, den<br />

Sie sichern wollen, müssen Sie keine<br />

weiteren Daten eingeben. Der Assistent<br />

unterstützt Windows Server 2008 R2<br />

SP1 <strong>und</strong> Windows Server 2012/​2012 R2.<br />

Auch Windows Server 2012 R2 Essentials<br />

<strong>und</strong> System Center Data Protection<br />

Manager 2012 SP1/​2012 R2 werden<br />

unterstützt. Für Windows Server 2012/​<br />

2012 R2 Essentials gibt es einen eigenen<br />

Agenten. Die Einrichtung erfolgt<br />

nach der Installation des Agenten über<br />

die Windows-Server-<strong>Sicher</strong>ung oder<br />

eine eigene Verknüpfung. Sie können<br />

Abbildung 2: Die erste Einrichtung von Windows Azure <strong>Backup</strong> erfolgt<br />

in der Weboberfläche von Windows Azure.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


36<br />

<strong>Backup</strong><br />

Azure<br />

Abbildung 4: Während der Einrichtung des Agenten binden Sie diesen<br />

über ein Zertifikat an den Tresor in Windows Azure an.<br />

Abbildung 3: Anzeigen der verfügbaren Befehle <strong>für</strong> Microsoft Online<br />

<strong>Backup</strong> in der Powershell.<br />

die Installation des Agenten aber auch<br />

in der Befehlszeile <strong>mit</strong> verschiedenen<br />

Optionen skripten:<br />

n »/q« – Installieren <strong>ohne</strong> Rückmeldung<br />

n »/l« – Installationsverzeichnis, zum<br />

Beispiel »/l:"D:\Online‐Agent"«<br />

n »/d« – Deinstallieren<br />

Nach dem Start der Windows-Server-<br />

<strong>Sicher</strong>ung müssen Sie zunächst den<br />

Server in Windows Azure als <strong>Backup</strong>-<br />

Quelle registrieren. In den nächsten<br />

Abschnitten erfahren Sie, wie das<br />

geht. Registrierte Server können Sie im<br />

Azure-Verwaltungsportal wieder aus<br />

Azure <strong>Backup</strong> entfernen. Das hat den<br />

Vorteil, dass Sie die entsprechende<br />

Lizenz dann <strong>für</strong> einen anderen Server<br />

nutzen können.<br />

Für eine <strong>Sicher</strong>ungs-ID können Sie auch<br />

mehrere Server registrieren <strong>und</strong> lizenzieren.<br />

Alle Server können Sie zentral<br />

verwalten, um zum Beispiel Daten von<br />

verschiedenen Servern an unterschiedlichen<br />

Stellen wiederherzustellen. Die<br />

Wiederherstellung erfolgt ebenfalls in<br />

n Listing 1: Komplexe Einstellungen<br />

der grafischen Oberfläche<br />

über einen Assistenten.<br />

Haben Sie die Windows-Server-<strong>Sicher</strong>ung<br />

<strong>und</strong> den Agenten<br />

installiert, finden Sie<br />

auf der Startseite von<br />

Windows Server 2012/​2012 R2 zwei<br />

neue Icons zur grafischen Oberfläche<br />

<strong>und</strong> direkt zur »Windows Azure <strong>Backup</strong><br />

Shell«, dem Powershell-Modul der<br />

Online-<strong>Sicher</strong>ung. Sie finden die grafische<br />

Oberfläche auch in der normalen<br />

Verwaltungsoberfläche der Datensicherung<br />

von Windows Server 2012/​2012 R2<br />

(»wbadmin.msc«). Die Befehle <strong>für</strong> die<br />

Online-<strong>Sicher</strong>ung können Sie ebenso<br />

in einer normalen Powershell-Sitzung<br />

eingeben.<br />

In der Powershell lassen Sie sich<br />

die verfügbaren Commandlets <strong>mit</strong><br />

»get‐command *ob*« anzeigen. Alternativ<br />

verwenden Sie den Befehl<br />

»get‐command ‐module MSOnline-<br />

<strong>Backup</strong>« (Abbildung 3). Sie müssen<br />

dazu keine Module mehr laden, denn<br />

die Powershell in Windows Server 2012<br />

<strong>und</strong> 2012 R2 lädt Module automatisch<br />

beim Aufruf eines Commandlets.<br />

01 $mon = [System.DayOfWeek]::Monday<br />

02 $tue = [System.DayOfWeek]::Tuesday<br />

03 Set‐OBMachineSetting ‐WorkDay "Mo", "Tu" ‐StartWorkHour "9:00:00" ‐EndWorkHour "18:00:00"<br />

‐WorkHourBandwidth (512*1024) ‐NonWorkHourBandwidth (2048*1024)<br />

Mit der GUI registrieren<br />

Um die Verwaltung der Datensicherung<br />

zu starten, öffnen Sie im Startbildschirm<br />

am besten <strong>mit</strong> »wbadmin.msc«<br />

die Verwaltungskonsole. Sie finden<br />

eine entsprechende Verknüpfung auch<br />

auf der Startseite, wenn Sie nach „Windows<br />

Azure <strong>Backup</strong>“ suchen. Klicken<br />

Sie als Nächstes auf den Menüpunkt<br />

»<strong>Backup</strong>«, der sich unterhalb von »Lokale<br />

<strong>Sicher</strong>ung« im <strong>Sicher</strong>ungsverwaltungsprogramm<br />

von Windows Server<br />

2012/​2012 R2 befindet. Die Konsole<br />

überprüft den installierten Agenten.<br />

Zunächst klicken Sie auf »Server registrieren«.<br />

Active Directory optional<br />

Im Assistenten wählen Sie das Zertifikat<br />

aus, <strong>mit</strong> dem sich der Agent in Windows<br />

Azure anmelden kann. Sie können hier<br />

auch <strong>mit</strong> Zertifikaten aus den Active-<br />

Directory-Zertifikatsdiensten arbeiten.<br />

Wählen Sie während der Einrichtung<br />

des Servers das Zertifikat aus, überprüft<br />

der Assistent, ob er das Pendant<br />

des Zertifikats in Windows Azure findet.<br />

Danach ist eine Anbindung an den<br />

zuvor erstellten Tresor möglich (Abbildung<br />

4).<br />

Als Nächstes geben Sie zur Verschlüsselung<br />

der Daten die Passphrase ein,<br />

die Sie am besten notieren <strong>und</strong> an<br />

einem sicheren Ort aufbewahren. Geht<br />

sie verloren, haben Sie keinen Zugang<br />

mehr zur Datensicherung. Im letzten<br />

Schritt schließen Sie den Vorgang zum<br />

Registrieren ab. Erst danach können<br />

Sie die Datensicherung einrichten. Sie<br />

sehen den registrierten Server nach der<br />

Einrichtung auch im Windows-Azure-<br />

Portal. Klicken Sie dazu auf »Wiederherstellungsdienste«<br />

<strong>und</strong> wählen Sie<br />

Ihren Tresor aus. Alle verb<strong>und</strong>enen<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


<strong>Backup</strong><br />

Azure<br />

37<br />

Server finden Sie über den Menüpunkt<br />

»Server«. In diesem Fenster können Sie<br />

die Verbindung auch wieder lösen.<br />

Zeitplan<br />

Haben Sie den Server registriert, können<br />

Sie in der Verwaltungsoberfläche<br />

(»wbadmin.msc«) einen Zeitplan <strong>für</strong> die<br />

<strong>Sicher</strong>ung festlegen. Oder Sie führen,<br />

wie <strong>mit</strong> der lokalen <strong>Sicher</strong>ung auch,<br />

eine Sofortsicherung durch. Dazu<br />

klicken Sie auf »<strong>Backup</strong>\<strong>Sicher</strong>ung planen«<br />

<strong>und</strong> legen fest, welche Dateien Sie<br />

in die <strong>Sicher</strong>ung einbeziehen wollen.<br />

Haben Sie die Daten festgelegt, legen<br />

Sie die Zeiten der <strong>Sicher</strong>ung fest. Hier<br />

unterscheidet sich die Einrichtung<br />

nicht von der normalen Verwendung<br />

der Datensicherung. Als Nächstes legen<br />

Sie fest, wie lange die <strong>Sicher</strong>ung<br />

aufbewahrt werden soll. Ältere <strong>Sicher</strong>ungen<br />

ersetzt der Assistent <strong>mit</strong> neuen<br />

<strong>Sicher</strong>ungen, sobald der Zeitraum<br />

abgelaufen ist. Die <strong>Sicher</strong>ungen bleiben<br />

so lange erhalten, bis eine neuere<br />

<strong>Sicher</strong>ung den Platz benötigt.<br />

Sie können immer nur einen <strong>Cloud</strong>-<br />

<strong>Sicher</strong>ungsjob anlegen, aber parallel je<br />

einen Zeitplan <strong>für</strong> eine lokale <strong>Sicher</strong>ung<br />

<strong>und</strong> eine <strong>Cloud</strong>-<strong>Sicher</strong>ung. So können<br />

Sie beispielweise <strong>mit</strong> der lokalen <strong>Sicher</strong>ung<br />

alle Daten sichern <strong>und</strong> <strong>mit</strong> der<br />

<strong>Cloud</strong>-<strong>Sicher</strong>ung nur wichtige Daten.<br />

Sie können aber problemlos den <strong>Cloud</strong>-<br />

<strong>Sicher</strong>ungsjob mehrfach täglich zu unterschiedlichen<br />

Zeiten starten lassen.<br />

Den <strong>Sicher</strong>ungsjob können Sie in der<br />

Powershell konfigurieren. Für den<br />

ganzen Vorgang gibt es eine Reihe von<br />

Commandlets. Zunächst erstellen Sie<br />

<strong>mit</strong> »New-OBPolicy« eine neue Richtlinie<br />

<strong>für</strong> die <strong>Sicher</strong>ung <strong>und</strong> speichern<br />

sie in einer Variablen:<br />

$policy = New‐OBPolicy<br />

Danach legen Sie das Verzeichnis fest,<br />

das Sie <strong>mit</strong> der <strong>Sicher</strong>ung berücksichtigen<br />

wollen. Auch hier verwenden Sie<br />

wieder eine Variable:<br />

$files = New‐OBFileSpec ‐FileSpec U<br />

C:\daten<br />

Danach legen Sie den Zeitplan fest,<br />

zudem Sie die <strong>Sicher</strong>ung ausführen<br />

wollen. Auch diesen speichern Sie in<br />

einer Variablen:<br />

$sched = New‐OBSchedule ‐DaysofWeek U<br />

Wednesday ‐TimesofDay 19:30<br />

Anschließend legen Sie noch eine<br />

Richtlinie fest, die steuert, wann die<br />

<strong>Sicher</strong>ung ablaufen soll:<br />

$ret = New‐OBRetentionPolicy<br />

Wollen Sie die Einstellung vom Standardwert<br />

(7 Tage) auf den Maximalwert<br />

(30 Tage) setzen, verwenden Sie den<br />

Befehl:<br />

$ret = New‐OBRetentionPolicy U<br />

‐RetentionDays 30<br />

Sie können die Richtlinie auch folgendermaßen<br />

erstellen, um die <strong>Sicher</strong>ung<br />

zum nächsten festgelegten Zeitpunkt<br />

zu starten:<br />

Add‐OBFileSpec U<br />

‐Policy $policy U<br />

‐FileSpec $files<br />

Anschließend verbinden<br />

Sie die Richtlinie<br />

<strong>mit</strong> dem erstellten<br />

Zeitplan:<br />

Set‐OBSchedule U<br />

‐policy $policy U<br />

‐schedule $sched<br />

Set‐OBRetentionPolicy U<br />

‐policy $policy U<br />

‐retentionpolicy $ret<br />

Handelt es sich um<br />

die erste <strong>Sicher</strong>ung<br />

nach der Registrierung<br />

des Servers,<br />

müssen Sie noch sicherstellen,<br />

dass die<br />

Passphrase <strong>für</strong> die<br />

<strong>Sicher</strong>ung gesetzt ist:<br />

$passphrase = U<br />

ConvertTo‐U<br />

SecureString U<br />

Passphrase U<br />

‐asplaintext ‐Force<br />

Set‐OBMachineSetting<br />

‐EncryptionPassphraseU<br />

$passphrase<br />

Speichern Sie dann die Online-<strong>Backup</strong>-<br />

<strong>Sicher</strong>ungsrichtlinie:<br />

Set‐OBPolicy ‐policy $policy<br />

Sie können eine erstellte <strong>Sicher</strong>ung<br />

auch in der Powershell starten. Dazu<br />

verwenden Sie das Commandlet<br />

»Get‐OBPolicy | Start‐OB<strong>Backup</strong>«.<br />

Überwachen <strong>und</strong> Fehler<br />

beheben<br />

Sie können die Einstellungen der <strong>Sicher</strong>ung<br />

natürlich jederzeit anpassen. Außerdem<br />

können Sie über »Eigenschaften<br />

ändern\Bandbreiteneingrenzung«<br />

die Bandbreite begrenzen, welche der<br />

Online-<strong>Sicher</strong>ung zur Verfügung steht.<br />

Sie können hier Daten von 256 Kbps bis<br />

1 Gbps eintragen <strong>und</strong> auch Zeitpunkte<br />

festlegen, wann diese Werte gültig sein<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


38<br />

<strong>Backup</strong><br />

Azure<br />

Abbildung 5: Daten aus Windows Azure <strong>Backup</strong> stellen Sie über die<br />

Verwaltungsoberfläche von Windows Azure <strong>Backup</strong> oder <strong>mit</strong> der<br />

Powershell wieder her.<br />

n Info<br />

sollen. Sie haben auch die Möglichkeit,<br />

diese Einstellungen in der Powershell<br />

vorzunehmen. Ein Beispiele da<strong>für</strong> ist in<br />

Listing 1 zu sehen.<br />

Schlüssel <strong>und</strong> Proxy<br />

Auf der Registerkarte »Verschlüsselung«<br />

ändern Sie das Kennwort <strong>für</strong> die<br />

Verschlüsselung, auf der Registerkarte<br />

»Proxykonfiguration« tragen Sie die Daten<br />

des Proxy-Servers ein.<br />

Sie sehen den Zeitplan der Online-<br />

<strong>Sicher</strong>ung auch in der Aufgabenverwaltung<br />

von Windows Server 2012 im<br />

Bereich »Microsoft\Online<strong>Backup</strong>«.<br />

Auch hier können Sie Änderungen vornehmen.<br />

In der Verwaltungskonsole<br />

von Azure <strong>Backup</strong> finden Sie auch die<br />

Registerkarte »Warnungen«. Hier sehen<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31225<br />

n Listing 2: Wiederherstellung <strong>mit</strong> der Powershell<br />

Sie Meldungen des<br />

Dienstes. Das können<br />

zum Beispiel Meldungen<br />

bezüglich des<br />

Speicherplatzes sein<br />

oder wenn eine neue<br />

Version des Agenten<br />

zur Verfügung steht.<br />

Klicken Sie auf eine<br />

Meldung, erhalten Sie<br />

meistens noch einen<br />

Hinweis oder einen<br />

Link zu einer Webseite,<br />

die bei der Lösung des<br />

Problems weiterhelfen<br />

kann.<br />

Um sich einen Überblick<br />

zum konfigurierten<br />

<strong>Sicher</strong>ungsjob<br />

anzeigen zu lassen,<br />

verwenden Sie den<br />

Powershell-Befehl »Get‐OBJob«. Fehler<br />

hält der Agent, neben der Ereignisanzeige,<br />

auch in Log-Dateien fest. Diese<br />

finden Sie zum Beispiel im Verzeichnis<br />

»C:\Program Files\Windows Azure<br />

<strong>Backup</strong> Agent\Temp«. In der Ereignisanzeige<br />

finden Sie genauere Meldungen<br />

unter »Anwendungs‐ <strong>und</strong> Dienstprotokolle\<strong>Cloud</strong><strong>Backup</strong>«.<br />

Die <strong>Sicher</strong>ung<br />

wird durch den Systemdienst Windows<br />

Azure <strong>Backup</strong> Agent bereitgestellt.<br />

Diesen können Sie zur Fehlerbehebung<br />

neu starten lassen oder beenden. In der<br />

Befehlszeile verwenden Sie dazu »NET<br />

START OBENGINE« oder »NET STOP<br />

OBENGINE«.<br />

Daten wiederherstellen<br />

Daten stellen Sie <strong>mit</strong> Azure <strong>Backup</strong> genauso<br />

wieder her wie bei einer lokalen<br />

<strong>Sicher</strong>ung: Sie klicken <strong>mit</strong> der rechten<br />

Maustaste auf »<strong>Backup</strong>« <strong>und</strong> wählen<br />

die Wiederherstellung von Daten. Im<br />

Assistenten wählen Sie zunächst aus,<br />

von welchem Datenträger Sie die Daten<br />

wiederherstellen wollen <strong>und</strong> zu welchem<br />

Zeitpunkt. Auch den Speicherort<br />

01 $source = Get‐OBRecoverableSource<br />

02 $item = Get‐OBRecoverableItem ‐Source $source[0]<br />

03 $FinalItem = Get‐OBRecoverableItem ‐ParentItem $item[0]<br />

04 $recover_option = New‐OBRecoveryOption<br />

05 Start‐OBRecovery ‐RecoverableItem $FinalItem ‐RecoveryOption $recover_option<br />

der wiederhergestellten Daten legen<br />

Sie im Fenster fest.<br />

Sie können beim Starten der Wiederherstellung<br />

auch einen Server<br />

auswählen, von dem Sie Daten wiederherstellen<br />

wollen (Abbildung 5). Der Assistent<br />

zeigt dazu alle Server an, die Sie<br />

registriert haben. Statt der grafischen<br />

Oberfläche können Sie auch hier<strong>für</strong><br />

die Powershell verwenden. Sie legen<br />

dazu die entsprechenden Daten wieder<br />

in Variablen fest <strong>und</strong> starten dann die<br />

Wiederherstellung (Listing 2).<br />

Im Webportal verwalten<br />

Zentral verwalten Sie die Datensicherung<br />

von Windows Azure direkt im<br />

Azure-Portal. Klicken Sie dazu auf »Wiederherstellungsdienste«<br />

<strong>und</strong> wählen<br />

Sie danach den Tresor aus, in dem sich<br />

die Server <strong>und</strong> Daten befinden, die Sie<br />

verwalten wollen. Über »Dashboard«<br />

sehen Sie die Datenmenge im Tresor,<br />

die <strong>für</strong> die Abrechnung wichtig ist. Außerdem<br />

sind hier die bereits registrierten<br />

Server zu finden.<br />

Über »Geschützte Elemente« sind die<br />

gesicherten Daten zugänglich. Sie<br />

können hier nicht auf einzelne Daten<br />

zugreifen oder Daten wiederherstellen,<br />

aber erkennen, wann Daten gesichert<br />

wurden <strong>und</strong> von welchen Servern <strong>und</strong><br />

Laufwerken sie stammen. Informationen<br />

zu den einzelnen Servern finden<br />

Sie über den Menüpunkt »Server«. Hier<br />

sehen Sie alle registrierten Server in<br />

Ihrem Portal.<br />

Fazit<br />

Windows Azure <strong>Backup</strong> kann <strong>für</strong> Unternehmen<br />

eine wertvolle Ergänzung oder<br />

sogar ein kompletter Ersatz <strong>für</strong> eine<br />

vorhandene Datensicherung sein. In<br />

kleineren Unternehmen <strong>mit</strong> Windows<br />

Server 2012 R2 Essentials kann die<br />

<strong>Cloud</strong>-Lösung eine lokale Datensicherung<br />

vollständig ersetzen.<br />

Auch <strong>für</strong> kleine Niederlassungen oder<br />

<strong>mit</strong>telständische Unternehmen ist<br />

Windows Azure <strong>Backup</strong> eine durchaus<br />

interessante Ergänzung oder sogar<br />

vollständige <strong>Backup</strong>-Lösung. Da die<br />

gesicherten Daten verschlüsselt in der<br />

Microsoft-<strong>Cloud</strong> gespeichert werden,<br />

sind diese vor fremden Zugriff soweit<br />

möglich geschützt. (ofr) n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


40<br />

<strong>Backup</strong><br />

Areca<br />

bowie15, 123RF<br />

Datensicherung einzelner Hosts <strong>mit</strong> Areca<br />

Für Solisten<br />

Modulare <strong>und</strong> verteilte Installation, Ansteuerung großer RAIDs <strong>und</strong> Tape-Libraries, Verwaltung H<strong>und</strong>erter<br />

Clients – nicht immer sind das die Anforderungen an ein <strong>Backup</strong>. Manchmal gilt es einfach nur ein paar<br />

Verzeichnisse von einem Rechner zu sichern. Auch da<strong>für</strong> gibt es gute Tools. Jens-Christoph Brendel<br />

Für ein Desktop-<strong>Backup</strong> oder die<br />

einfache <strong>Sicher</strong>ung weniger Verzeichnisse<br />

gelten andere Gesetze als <strong>für</strong> das<br />

<strong>Backup</strong> in einem Rechenzentrum. Hier<br />

kommt es vor allem auf einfache Bedienung<br />

an, <strong>ohne</strong> komplizierte Konfigurationsfiles<br />

oder tief verschachtelte Menüs.<br />

Die üblichen platzsparenden Techniken<br />

wie inkrementelle <strong>Sicher</strong>ungen<br />

sollen anwendbar sein. Mit Pre- <strong>und</strong><br />

Post-<strong>Backup</strong>-Skripts sollten Applikationen<br />

wie etwa Datenbanken während<br />

des <strong>Backup</strong>s angehalten werden können.<br />

Mehrere zurückliegende Versionen<br />

müssen archiviert werden. Auch Verschlüsselung<br />

<strong>und</strong> Kompression wären<br />

nicht schlecht. Das <strong>Backup</strong> soll sich auf<br />

anderer Hardware wiederherstellen<br />

lassen, dabei ist es der Einfachheit halber<br />

gut, wenn die Daten nicht in einem<br />

proprietären Format abgelegt werden,<br />

was im Desaster-Fall zuerst die erneute<br />

Installation von Betriebssystem <strong>und</strong><br />

<strong>Backup</strong>-Software nötig machen würde.<br />

LVM- oder RAID-Konfigurationen dürfen<br />

kein Hindernis sein. Die Rechte an den<br />

Dateien müssen erhalten bleiben <strong>und</strong><br />

die <strong>Sicher</strong>ung sollte unter Linux nicht<br />

über Links oder Named Pipes stolpern.<br />

Schließlich sollte man auch leicht<br />

kontrollieren können, ob alles wie gewünscht<br />

gelaufen ist.<br />

Abbildung 1: Das leere Hauptfenster nach dem ersten Start. Neue Ziele definiert mandurch Rechtsklick<br />

in die obere Hälfte des linken Panels.<br />

Schmankerl<br />

Eine Open-Source-Software, die all<br />

diese Ansprüche gut erfüllt, ist Areca<br />

[1]. Über die schon aufgezählten Features<br />

hinaus, hat Areca noch ein paar<br />

Schmankerl zu bieten. So lassen sich<br />

Quelldateien vom <strong>Backup</strong> aus- oder<br />

einschließen, die man nach diversen<br />

Kriterien filtern kann. Dabei sind auch<br />

Konstrukte <strong>mit</strong> AND, OR <strong>und</strong> NOT er-<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


<strong>Backup</strong><br />

Areca<br />

41<br />

laubt. <strong>Backup</strong>s können simuliert werden, sodass man vorher<br />

abschätzen kann, was <strong>und</strong> wieviel <strong>mit</strong> den gegebenen Einstellungen<br />

auf die Platte gelangen würde.<br />

Areca kann auf Netzlaufwerke via (S)FTP sichern <strong>und</strong> von dort<br />

auch Daten wiederherstellen. Neben inkrementellen <strong>und</strong> differenziellen<br />

<strong>Sicher</strong>ungen gibt es auch ein Delta-<strong>Backup</strong>, das nur<br />

geänderte Teile von Dateien speichert. Um noch mehr Platz<br />

zu sparen, lassen sich <strong>Backup</strong>s komprimieren <strong>und</strong> diverse Archive<br />

zu einem Archiv vereinigen. Dateien sind in dem Zustand<br />

zurücksicherbar, den sie zu einem bestimmten Datum hatten.<br />

Alle kritischen Prozesse werden als Transaktionen behandelt,<br />

können da<strong>mit</strong> an definierten Aufsetzpunkten nach einer Unterbrechung<br />

wieder aufgenommen werden. Alle Benutzeraktionen<br />

lassen sich dank einer History-Funktion jederzeit rekapitulieren.<br />

Auf Wunsch werden Reports erzeugt <strong>und</strong> per E-Mail verschickt.<br />

Erstes <strong>Backup</strong><br />

Das Installieren beschränkt sich im Wesentlichen auf das Entpacken.<br />

Hat man die Java-Applikation via Shell-Skript »areca.<br />

sh« gestartet (Abbildung 1), ist zunächst ein <strong>Backup</strong>-Ziel zu konfigurieren.<br />

Der Begriff Ziel (Target) ist dabei insofern vielleicht<br />

etwas irreführend, als das hier nicht nur definiert wird, wohin<br />

gesichert werden soll, sondern auch was (also die Quelle) <strong>und</strong><br />

wie. Derartige Ziele können auf Wunsch gruppiert werden – beispielsweise<br />

um inhaltlich verwandte <strong>Backup</strong>s aus verschiedenen<br />

Quellen (Verzeichnissen) logisch zusammenzufassen. Will<br />

man davon Gebrauch machen, legt man zuerst eine Gruppe<br />

durch Rechtsklick in das linke obere Panel des Hauptfensters<br />

<strong>und</strong> Auswahl aus dem Kontextmenü fest. Im selben Kontextmenü<br />

findet sich dann auch der Punkt »Neues Ziel ...«.<br />

In dem Dialog zum Einrichten eines Ziels (Abbildung 2) legt man<br />

zuerst ein Verzeichnis fest, in dem das <strong>Backup</strong> landen soll. Mit<br />

Bändern kann Areca nicht umgehen. Der Anwender gibt dem<br />

Ziel einen Namen <strong>und</strong> entscheidet sich, ob ein konventionelles,<br />

File-basiertes <strong>Backup</strong> entstehen soll (Standard), ob nur die<br />

Änderungen innerhalb von Dateien zu sichern sind (Delta) oder<br />

ob eine einzige große Archivdatei anzulegen ist, die <strong>mit</strong> jedem<br />

<strong>Backup</strong> aktualisiert wird (Image). Zusätzlich lassen sich alle einzelnen<br />

Files eines <strong>Backup</strong>s oder die <strong>Sicher</strong>ung als Ganzes in einem<br />

File komprimieren. In letzterem Fall können abgebrochene<br />

<strong>Backup</strong>s allerdings nicht wiederaufgenommen werden.<br />

Als nächstes müssen die Verzeichnisse bestimmt werden, die<br />

gesichert werden sollen. Das gelingt auf Wunsch auch, indem<br />

einfach die Quellordner per Drag&Drop über das Dialogfenster<br />

bewegt werden. Der nächste Punkt erlaubt es, gegebenenfalls<br />

eine Datenkompression einzurichten. Sollen Unterordner einbezogen<br />

werden? Sollen Links verfolgt werden? Das kann man<br />

unter dem Punkt »Erweitert« bestimmen.<br />

Unter »Filter« lassen sich Ausdrücke hinterlegen, die bestimmte<br />

Files vom <strong>Backup</strong> ausschließen. Die Gr<strong>und</strong>lage können Dateiendungen<br />

sein, Datum oder Größe von Dateien, es lassen sich<br />

gesperrte Dateien ausnehmen oder spezielle Typen (wie Pipes,<br />

Sockets <strong>und</strong> so weiter) oder man gibt reguläre Ausdrücke als<br />

Ausschlusskriterium an, die auf Datei- <strong>und</strong>/​oder Ordnernamen<br />

angewendet werden. Beliebige Filter sind kombinierbar, sodass<br />

man ziemlich genau regulieren kann, was gesichert werden soll.<br />

Abbildung 2: Der Dialog zum Einrichten eines <strong>Backup</strong>-Ziels in Areca.<br />

Die folgenden beiden Punkte erlauben die Konfiguration<br />

von Vor- <strong>und</strong> Nachlauf-Skripten, die beispielsweise vor einer<br />

<strong>Sicher</strong>ung Applikationen anhalten <strong>und</strong> danach wieder<br />

starten können.<br />

Anschließend ist es möglich, eine Datenmenge anzugeben,<br />

nach der jeweils der Zustand des <strong>Backup</strong>s derart<br />

gespeichert wird, dass es nach einem Abbruch an dieser<br />

Stelle wieder aufgenommen werden kann. Schließlich<br />

kann man jeder <strong>Sicher</strong>ung eine Beschreibung <strong>mit</strong>geben.<br />

www.admin-magazin.de


42<br />

<strong>Backup</strong><br />

Areca<br />

Abbildung 3: Das Ergebnis der Simulation eines differenziellen <strong>Backup</strong>s<br />

in Areca.<br />

Abbildung 4: Zum Schluss wählt man in diesem Dialog<br />

die Art der <strong>Sicher</strong>ung aus.<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31072<br />

Nachdem man das Ziel<br />

im rechten Panel markiert<br />

hat, kann man<br />

das <strong>Backup</strong> über das<br />

Icon »Platte <strong>mit</strong> Plus«<br />

in der Navigationsleiste<br />

darüber starten.<br />

Alternativ geht das<br />

auch über das Menü<br />

»Ausführen«. Hier ist<br />

es auch möglich, ein<br />

<strong>Backup</strong> zunächst zu simulieren.<br />

Im Ergebnis<br />

(Abbildung 3) erhält<br />

man eine Übersicht,<br />

wieviele Dateien in die<br />

<strong>Sicher</strong>ung einbezogen würden, welches<br />

Datenvolumen insgesamt erreicht<br />

würde <strong>und</strong> wieviel davon auf jedes zu<br />

sichernde File entfiele.<br />

Zum Schluss kann der Admin im<br />

<strong>Backup</strong>-Startdialog wählen, ob er eine<br />

inkrementelle, differenzielle oder eine<br />

Vollsicherung haben möchte (Abbildung<br />

4), ob das <strong>Backup</strong> zum Schluss<br />

verifiziert werden soll <strong>und</strong> ob Informationen<br />

über die gesicherten Dateien<br />

anzufügen sind (Manifest).<br />

Ein Protokoll führt jeden Schritt der <strong>Sicher</strong>ung<br />

auf <strong>und</strong> erlaubt es dem Admin,<br />

sich im Nachhinein davon zu überzeugen,<br />

dass die <strong>Sicher</strong>ung problemlos auf<br />

der Festplatte gelandet ist oder worin<br />

gegebenenfalls der Fehler bestand.<br />

Kommando zurück<br />

Das <strong>Backup</strong> beweist sich beim Restore,<br />

ist eine vielzitierte Binsenweisheit. Ein<br />

erster Vorteil von Areca ist dabei schon<br />

einmal, dass die Applikation <strong>für</strong> das<br />

Restore prinzipiell verzichtbar wäre:<br />

Abbildung 5: Auch das Rücksichern ist über zahlreiche Versionen auf die eigenen Bedürfnisse<br />

einstellbar.<br />

Die Files liegen – gegebenenfalls komprimiert<br />

– als 1:1-Kopien im <strong>Backup</strong>verzeichnis<br />

<strong>und</strong> könnten durch einfaches<br />

zurückkopieren restauriert werden. Das<br />

ist besonders nach einem Ausfall hilfreich,<br />

der auch die Areca-Installation<br />

selbst getroffen hat. In diesem Fall<br />

müsste nicht zuerst die <strong>Backup</strong>-Software<br />

neu installiert werden, um an die<br />

<strong>Sicher</strong>ung heranzukommen.<br />

Wer keine kompletten Archive zurücksichern<br />

will, sondern einzelne Files, was<br />

sicherlich häufiger vorkommt, der kann<br />

in Areca nach den fraglichen Dateien<br />

suchen (Abbildung 4). Bei der Suche<br />

– entweder nur im aktuellen oder in<br />

allen Archiven – können auch reguläre<br />

Ausdrücke verwendet werden. Zu den<br />

F<strong>und</strong>stellen lassen sich Details einblenden,<br />

die beispielsweise darüber Auskunft<br />

geben, wieviel zurückgeschrieben<br />

würde.<br />

Auch beim Restore stehen wieder etliche<br />

Optionen zur Verfügung (Abbildung<br />

5). So kann man bereits existierende<br />

Dateien immer überspringen oder nur<br />

dann, wenn die gesicherte Version älter<br />

wäre. Genauso gut kann man sie immer<br />

überschreiben oder in jedem Fall<br />

nachfragen lassen. Auch ob gelöschte<br />

Dateien wiederhergestellt werden<br />

sollen, ist wählbar. Schließlich kann<br />

man alle Files nach der Rücksicherung<br />

überprüfen.<br />

Fazit<br />

Areca bringt alles <strong>mit</strong>, was man <strong>für</strong><br />

die unkomplizierte <strong>Sicher</strong>ung einzelner<br />

Rechner auf Festplatten braucht.<br />

<strong>Backup</strong> <strong>und</strong> Restore sind über zahlreiche<br />

Optionen vielfältig anpassbar. Eine<br />

intuitiv bedienbare GUI erleichtert den<br />

Umgang <strong>mit</strong> dem <strong>Backup</strong>-Programm.<br />

Via Kommandozeile (oder in Skripts) ist<br />

es aber genauso steuerbar. Auf diese<br />

Weise wäre Areca auch cron-gesteuert<br />

startbar, denn über eine eigene Logik<br />

<strong>für</strong> Zeitpläne verfügt es nicht. Genausowenig<br />

kann es <strong>mit</strong> Tapes umgehen oder<br />

als Server <strong>für</strong> <strong>Backup</strong>-Clients dienen.<br />

Überall da aber, wo eine ausgewachsene<br />

Profi-Datensicherung überdimensioniert<br />

wäre, weil nur ein einzelner<br />

Rechner zu sichern ist, bietet sich Areca<br />

als vielseitiges <strong>und</strong> zuverlässiges Werkzeug<br />

an. n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


End-to-End-Monitoring <strong>mit</strong> Benutzersimulation <strong>für</strong> GUIs<br />

Perspektivwechsel<br />

Al’exa ist ein Open-Source-Python-Modul, <strong>mit</strong> dessen Hilfe sich grafische<br />

User Interfaces (GUIs) durch Simulation von Benutzereingaben<br />

testen <strong>und</strong> überwachen lassen. Alan Pipitone<br />

mihtiander, 123RF<br />

Über die letzten 15 Jahre hat sich die<br />

IT rasant weiterentwickelt <strong>und</strong> ist immer<br />

komplexer geworden, weil immer<br />

mehr Abhängigkeiten zwischen verschiedenen<br />

Komponenten entstanden<br />

sind. Hardware <strong>und</strong> Betriebssysteme,<br />

Applikationen <strong>und</strong> Middleware, Hypervisoren,<br />

Infrastrukturkomponenten,<br />

Storage-Systeme, Netzwerktechnik,<br />

Serverdienste – all das greift heute<br />

ineinander <strong>und</strong> baut aufeinander auf.<br />

Daraus folgt, dass all das auch zu überwachen<br />

ist, um im Fehlerfall schnell<br />

reagieren zu können.<br />

Entsprechend wuchs über die Jahre<br />

die Anzahl von Monitoring-Systemen<br />

im proprietären, aber auch im Open-<br />

Source-Bereich. Systeme wie Nagios,<br />

Zabbix, OpenSNMP, Icinga <strong>und</strong> Shinken<br />

haben sich dabei längst etabliert. Alle<br />

diese Lösungen versuchen Ausfälle zu<br />

erkennen, die Verfügbarkeit zu messen<br />

<strong>und</strong> anhand von Modellen die gr<strong>und</strong>legende<br />

Ursache von Folgefehlern zu<br />

trennen (Root Cause Analysis). Nicht<br />

immer reicht dies jedoch aus, denn<br />

das herkömmliche Rechenzentrums-<br />

Monitoring misst zwar die Performance<br />

der einzelnen IT-Komponenten, berücksichtigt<br />

aber nicht die Performance<br />

<strong>und</strong> Verfügbarkeit der IT-Services aus<br />

dem Blickwinkel des End Users oder<br />

K<strong>und</strong>en.<br />

Das traditionelle Monitoring fokussiert<br />

sich so<strong>mit</strong> auf eine horizontale Sichtweise.<br />

Ihr Vorteil ist, dass der Ausfall einer<br />

Komponente da<strong>mit</strong> sofort erkannt<br />

wird. Der Nachteil: Haben einzelne<br />

Anwender ein Problem, beispielsweise<br />

<strong>mit</strong> der Performance, ist nicht sofort<br />

ersichtlich, wer wann <strong>und</strong> in welchem<br />

Maß davon betroffen ist. Solche Informationen<br />

liefert dagegen ein Endto-End-Monitoring.<br />

Dabei wird die zu<br />

überwachende Applikation aus dem<br />

Blickwinkel der User auf Verfügbarkeit<br />

<strong>und</strong> Performance hin getestet – <strong>und</strong><br />

nicht mehr nur aus dem Blickwinkel<br />

des Rechenzentrums.<br />

Was tun <strong>mit</strong> Terminal-<br />

Servern?<br />

Im Bereich Webapplikationen gibt es<br />

bereits unterschiedliche Lösungen<br />

im Open-Source-Bereich, die einen<br />

solchen Ansatz verfolgen. Als Beispiel<br />

sei SeleniumHQ [1] genannt. Solche<br />

Lösungen haben ihren Ursprung dabei<br />

oftmals im Bereich Quality Assurance,<br />

um bei der Software-Entwicklung von<br />

Produkten Regressionstests durchführen<br />

zu können. Vielfach eignen sich<br />

diese Tools auch <strong>für</strong> das operative Mo-<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Know-how<br />

Al’exa<br />

45<br />

nitoring von Anwendungen (wie auch<br />

SeleniumHQ, das unter anderem auch<br />

Web-Automations-Tests beherrscht).<br />

Offen bleibt in diesem Zusammenhang<br />

jedoch, was passiert, wenn die zu überwachende<br />

Applikation keine Webapplikation<br />

ist, oder diese über einen Terminal-Server<br />

beziehungsweise über Citrix<br />

zur Verfügung gestellt wird.<br />

Ein weiterer, oftmals nicht berücksichtigter<br />

Aspekt ist das Monitoring von<br />

nativen Applikationen auf Windows<br />

oder von Legacy-Applikationen, die<br />

auf Mainframes laufen, <strong>und</strong> über<br />

Terminal-Emulatoren von den Anwender<br />

bedient werden. Häufig sind genau<br />

diese Anwendungen Business-kritisch.<br />

Bei komplexen ERP-Umgebungen besteht<br />

zudem die Herausforderung, die<br />

Performance <strong>und</strong> Verfügbarkeit <strong>für</strong> die<br />

Anwender an mehreren weltweit verteilten<br />

Standorten sicherzustellen.<br />

Das Al’exa-Projekt<br />

Es waren dies die wesentlichen Überlegungen,<br />

die dazu führten, das Projekt<br />

Al’exa ins Leben zu rufen. Entwickelt<br />

wurde dabei eine Engine, die in der<br />

Lage ist, exakt wie ein User <strong>mit</strong> unterschiedlichen<br />

Anwendungen zu interagieren<br />

– über die Tastatur, die Maus<br />

oder die Erkennung von Texten, Bildern<br />

<strong>und</strong> Menüelementen. Die Al’exa-Engine<br />

simuliert dabei die Interaktion <strong>mit</strong><br />

Anwendungen wie ein Anwender <strong>und</strong><br />

zeichnet die Zeiten <strong>für</strong> jede Handlung<br />

auf. Da<strong>mit</strong> wird eine Überwachung<br />

jeder einzelnen Aktion ermöglicht.<br />

genauso wird aber auch die Summe<br />

aller einzelnen Zeiten eines gesamten<br />

Testszenarios ausgewertet.<br />

Die Engine ist außerdem so konzipiert,<br />

dass Änderungen in der Anwendung<br />

nicht zwangsläufig eine Neuentwicklung<br />

des Test-Cases erfordern. Stattdessen<br />

findet die Engine die Elemente<br />

auch an anderen Positionen wieder.<br />

Da<strong>für</strong> sucht Al’exa die Objekte auf dem<br />

Bildschirm <strong>und</strong> merkt sich ihre neue<br />

Position automatisch.<br />

Die Simulation bezieht alle Komponenten<br />

ein, <strong>mit</strong> denen die User umgehen.<br />

Die Verfügbarkeit wird so<strong>mit</strong> nicht aus<br />

dem Headquarter gemessen, sondern<br />

die Al’exa-Engine stellt sicher, dass<br />

alle Core-Business-Anwendungen,<br />

Abbildung 1: Eine intelligente User-Simulation, die exakt dort angesiedelt ist, wo die Anwender<br />

auch wirklich agieren.<br />

unabhängig von der Technologie ihrer<br />

Bereitstellung, nach dem Modell des<br />

End-User-Monitorings berücksichtigt<br />

werden (Abbildung 1).<br />

Al’exa verhält sich so<strong>mit</strong> genau so<br />

wie ein intelligenter User <strong>und</strong> ist auch<br />

genau dort aktiv, wo die Anwender<br />

im wirklichen Leben wirklich agieren.<br />

Die Engine misst die Performance<br />

ausschließlich aus dem Anwenderblickwinkel.<br />

In dieser Simulation sind so<strong>mit</strong><br />

Latenzzeiten des Netzwerkes sowie der<br />

Anwendung wie auch Verzögerungen<br />

eines möglichen Terminal-Servers<br />

enthalten. Al’exa kann die Anwendungen<br />

in Intervallen prüfen <strong>und</strong> erkennt,<br />

sobald bestimmte Schwellwertüberschreitungen<br />

bei einzelnen Aktionen<br />

zu verzeichnen sind. Die werden dem<br />

zentralen Monitoring-System als Status<br />

»warning« oder auch »critical« <strong>mit</strong><br />

sämtlichen Details zu den zugr<strong>und</strong>e<br />

liegenden Performance-Messungen<br />

<strong>mit</strong>geteilt (Abbildung 2).<br />

Abbildung 2: Sämtliche Performance-Daten werden an das zentrale Monitoring-System weitergegeben.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


46<br />

Know-how<br />

Al’exa<br />

Abbildung 3: Die Al’exa-Architektur.<br />

Die Entwicklung<br />

Die Entwicklung von Al’exa startete im<br />

Oktober 2012. Erst dank der Vielfalt<br />

existierender Open-Source-Technologien<br />

im Bereich visueller Erkennung<br />

(OpenCV) sowie dank des OCR-<br />

Scanners Tesseract war es überhaupt<br />

möglich, in dieser kurzen Zeit eine erste<br />

Version zu entwickeln. Dabei war von<br />

Anfang an klar, dass Al’exa selbst unter<br />

einer Open-Source-Lizenz stehen wird,<br />

sodass sich eine entsprechende Community<br />

bilden kann. Eine enge Zusammenarbeit<br />

<strong>mit</strong> dem Team des freien<br />

Überwachungssystem von NetEye war<br />

dabei ein wichtiger Schritt, um das Projekt<br />

rasch voranzubringen.<br />

n Listing 1: Output eines Test-Cases<br />

Die Architektur<br />

Die Architektur von<br />

Al’exa ist um OpenCV,<br />

Tesseract-OCR <strong>und</strong><br />

um Python herum<br />

aufgebaut. OpenCV<br />

übernimmt sozusagen<br />

die Aufgabe<br />

eines Auges, nämlich<br />

des Erkennens der<br />

visuellen Objekte am<br />

Bildschirm. Die Integration<br />

von OpenCV<br />

in Python ermöglicht<br />

es dabei, Bildschirmschirmelemente<br />

wie Labels, Buttons,<br />

Wörter <strong>und</strong> Textfelder<br />

zu erkennen <strong>und</strong><br />

diese dann dank der<br />

Windows-Events auch wie ein gewöhnlicher<br />

Anwender anzusteuern.<br />

Tesseract-OCR übernimmt in Al’exa die<br />

Aufgabe, Bildelemente als Textbausteine<br />

zu erkennen, sodass sie umgehend<br />

als Input <strong>für</strong> reguläre Ausdrücke<br />

in Python genutzt werden können.<br />

Python als Skriptsprache eignet sich<br />

in diesem Zusammenhang sehr gut<br />

als Bindeglied zwischen den Technologien<br />

OpenCV <strong>und</strong> Tesseract-OCR.<br />

Python verfügt über sehr viele, bereits<br />

vorhandene Bibliotheken, sodass einfache<br />

Test-Cases sehr schnell erstellt<br />

werden können. Darüber hinaus besteht<br />

auch die Möglichkeit, Test-Cases<br />

dynamisch zu erweitern <strong>und</strong> so<strong>mit</strong> bei<br />

01 Running: C:\alexa2\TestCases\wuerth‐phoenix\NetEye_Blog.py (Wed Nov 20 16:14:46 2013)<br />

02 <br />

03 CRITICAL: one or more steps are in critical state<br />

04 <br />

05 IE_window=11.4179999828s;8;10;; inputbox_search_rendering=0.608999967575s;8;10;; contact_<br />

form=1.21700000763s;8;10;;<br />

06 company_page=1.21300005913s;7;12;;<br />

07 <br />

08 CRITICAL: IE_window time is 11.4179999828 sec.<br />

09 OK: inputbox_search_rendering time is 0.608999967575 sec.<br />

10 OK: contact_form time is 1.21700000763 sec.<br />

11 OK: company_page time is 1.21300005913 sec.<br />

12 <br />

13 Erklärung Aufbau:<br />

14 [Name Aktion]; Verwendete Zeit <strong>für</strong> die Aktion; Schwellenwert <strong>für</strong> Warning; Schwellenwert <strong>für</strong><br />

Critical<br />

15 IE_window=11.4179999828s;8;10;;<br />

Datenbankanwendungen zum Beispiel<br />

unterschiedliche Daten zu erfassen <strong>und</strong><br />

abzufragen. Diese erweiterte Intelligenz<br />

ermöglicht Al’exa, das tatsächliche<br />

Anwenderverhalten noch besser zu<br />

simulieren.<br />

Erweiterungsmöglichkeiten auf Basis<br />

bisheriger Simulationsdurchläufe<br />

werden zudem laufend im Bereich<br />

Test-Cases, aber auch in der Engine<br />

archiviert <strong>und</strong> <strong>für</strong> zukünftige Szenarien<br />

als Erfahrungswerte genutzt. Kontinuierliche<br />

Verbesserungen sind vor allem<br />

in diesem Zusammenhang durch den<br />

Community-Beitrag möglich, um auch<br />

sehr komplexe Anwendungsszenarien<br />

abzudecken <strong>und</strong> zum Beispiel auch<br />

über das operative Monitoring den Weg<br />

in Richtung QA/​Regressionstest oder<br />

auch Skalierbarkeitstests zu gehen.<br />

Integration in den<br />

klassischen Monitoring-<br />

Prozess<br />

Die Integration in gängige Open-<br />

Source-Monitoring-Systeme erfolgt<br />

über den NSclient++, der die erstellten<br />

Test-Cases in Al’exa ausführt <strong>und</strong> die<br />

Performance-Daten sowie den Status<br />

(»ok«, »warning«, »critical«) an die<br />

Monitoring-Systeme über<strong>mit</strong>telt.<br />

Der Output eines einfachen Al’exa-Test-<br />

Cases sieht so aus wie in Listing 1.<br />

Die IDE<br />

Um die Erstellung der Test-Cases selbst<br />

zu erleichtern, ist Al’exa um eine IDE<br />

erweitert worden. Die Al’exa-IDE ermöglicht<br />

die Erstellung der Test-Cases<br />

über geführte Wizards. Das heißt, <strong>für</strong><br />

einfache Fälle ist kein tiefergehendes<br />

Python-Know-how nötig. Der Python-<br />

Sourcecode wird durch die Al’exa-IDE<br />

generiert.<br />

Auch an dieser Stelle zeigen sich die<br />

Vorteile der Open-Source-Technologie.<br />

Es wäre im Rahmen des Projektes <strong>und</strong><br />

der zur Verfügung stehenden Zeit- <strong>und</strong><br />

Manpower-Ressourcen nicht machbar<br />

gewesen, eine IDE von Gr<strong>und</strong> auf neu<br />

zu entwickeln. In der Open-Source-<br />

Community von Python gibt es Ninja<br />

als voll funktionsfähige IDE, die auch<br />

eine Plugin-Architektur anbietet. Die<br />

Kombination aus IDE <strong>und</strong> der Plugin-<br />

Architektur ermöglichte es, Ninja als<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Know-how<br />

Al’exa<br />

47<br />

Basis-IDE <strong>für</strong> Al’exa zu nutzen <strong>und</strong><br />

so<strong>mit</strong> die Erweiterungen <strong>für</strong> die Erstellung<br />

von Test-Cases als Plugin in Ninja<br />

zu entwickeln.<br />

Weitere Funktionen sind bereits in Arbeit,<br />

darunter:<br />

n Verbesserungen beim Handling von<br />

Applikationsfehlermeldungen,<br />

n bessere Erkennungsmöglichkeiten<br />

<strong>für</strong> Al’exa,<br />

n Aufzeichnung von Test-Cases durch<br />

User <strong>mit</strong> einem Recorder,<br />

n Caching-Mechanismen, die die Ausführung<br />

der Test-Cases beschleunigen.<br />

Ausblick<br />

Al’exa ist noch ein sehr junges Projekt.<br />

Schon die ersten umgesetzten Projekte<br />

zum Monitoring von Applikationen wie<br />

etwa SAP- oder Java-Applikationen<br />

über Citrix-Terminal-Server lassen das<br />

Potenzial von Al’exa erkennen. Pro<br />

Test-Case <strong>mit</strong>tlerer Komplexität ist bei<br />

Anwenderunternehmen erfahrungsgemäß<br />

<strong>mit</strong> einem Aufwand von maximal<br />

ein bis zwei Manntagen zu rechnen.<br />

Komplexe Test-Cases können auch fünf<br />

Arbeitstage in Anspruch nehmen.<br />

Die Test-Cases können dann 24x7 über<br />

ein ganzes Jahr kontinuierlich ausgeführt<br />

werden <strong>und</strong> lassen die IT-Abteilung<br />

umgehend erkennen, wenn Applikationen<br />

nicht mehr die Performance<br />

liefern, die benötigt wird.<br />

Interessant kann<br />

der Einsatz von<br />

Al’exa auch in <strong>Cloud</strong>-<br />

Umgebunen oder<br />

bei Outsourcing-<br />

Projekten sein, in<br />

denen Performance-<br />

SLAs eingehalten<br />

werden müssen. Außerdem<br />

kann Al’exa<br />

schließlich auch dazu<br />

genutzt werden, um<br />

festzustellen, ob der<br />

Outsourcing-Partner die SLAs bei der<br />

Performance der Applikationen etwa<br />

über Citrix einhält.<br />

Hinsichtlich Citrix wurde im Rahmen<br />

eines Anwendungsprojektes auch die<br />

Idee geboren, dass Al’exa eigenständig<br />

erkennen sollte, welche Applikationen<br />

dem Anwender zur Verfügung stehen.<br />

Sie könnten dann automatisiert gestartet<br />

werden. Dadurch hätte die<br />

IT-Abteilung die <strong>Sicher</strong>heit, dass die<br />

Anwendungen über Citrix aktiviert<br />

werden können <strong>und</strong> der Test-Case nicht<br />

mehr erstellt werden muss. Die besten<br />

Ideen sind bis dato stets bei konkreten<br />

Einsätzen entstanden. Es bleibt zu hoffen,<br />

dass sich r<strong>und</strong> um Al’exa über die<br />

Zeit eine große <strong>und</strong> noch lebendigere<br />

Community entwickelt, die Anwendungsbeispiele<br />

<strong>und</strong> Entwicklungsideen<br />

<strong>für</strong> die Erweiterung des Projektes einbringt.<br />

(jcb) n<br />

Abbildung 4: Integration in den klassischen Monitoring-Prozess.<br />

n Info<br />

n Autor<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31059<br />

Alan Pipitone ist Projektleiter <strong>und</strong> Chefentwickler<br />

von Al’exa. Interessierte Entwickler können direkt <strong>mit</strong><br />

dem Projektleiter oder <strong>mit</strong> dem NetEye-Team von<br />

Würth Phoenix, das die Initiative bereits umfassend<br />

unterstützt, in Kontakt treten [2].


48<br />

Know-how<br />

Landscape<br />

Das Canonical-Werkzeug Landscape wartet Ubuntu-Umgebungen<br />

Landschaftspflege<br />

Kitsadakron Pongha, 123RF<br />

Große IT-Infrastrukturen manuell zu pflegen, führt fast zwangsläufig zu Fehlern. Canonical bietet <strong>mit</strong><br />

Landscape ein kostenpflichtiges Werkzeug an, das per Weboberfläche <strong>und</strong> API Informationen sammelt,<br />

grafisch aufbereitet <strong>und</strong> Wartungsarbeiten erledigt. Carsten Schnober<br />

Monitoring <strong>und</strong> Wartung bleibt ein<br />

wichtiges Thema <strong>für</strong> alle, die mehrere<br />

Rechner administrieren. Für Ubuntu-<br />

Landschaften bietet Canonical <strong>mit</strong><br />

Landscape ([1], siehe Abbildung 1) einen<br />

nützlichen Dienst an.<br />

Landscape verwaltet eine beliebige<br />

Anzahl von Clients – vorausgesetzt,<br />

dass die Lizenzen genügen. Es ist dabei<br />

stets der Client, der den ersten Schritt<br />

macht: Er meldet sich beim Server an<br />

<strong>und</strong> versorgt diesen aktiv <strong>mit</strong> Informationen.<br />

Der Server verwertet, was er bekommt,<br />

<strong>und</strong> legt die Kommandos der<br />

Administratoren in Warteschlangen, wo<br />

sie die Clients wiederum abrufen.<br />

Einberufung<br />

Um einen Ubuntu-Rechner in den eigenen<br />

Landscape-Account einzubinden,<br />

ist als Erstes die Installation des Pakets<br />

»landscape‐client« vonnöten. Es ent‐<br />

hält unter anderem das Kommandozeilenprogramm<br />

»landscape‐config«, <strong>mit</strong><br />

dem die Landscape-Einrichtung erfolgt.<br />

Die Eingabe des Rechnernamens sowie<br />

der Landscape-Kontoinformationen<br />

genügen.<br />

Die Landscape-Konfiguration stellt darüber<br />

hinaus die Frage, ob das System<br />

Landscape die Ausführung beliebiger<br />

Shell-Skripte erlauben soll (»Enable<br />

Script execution?«). Es folgt gegebenenfalls<br />

die Angabe der User-Accounts,<br />

<strong>mit</strong> deren Berechtigungen solche Programme<br />

laufen dürfen; standardmäßig<br />

sind das »nobody« <strong>und</strong> »landscape«.<br />

Mit solchen Skripten führt ein Administrator<br />

via Landscape aus der Ferne<br />

Abfragen durch.<br />

Zum Abschluss der Konfiguration<br />

schickt der Client eine Registrierungsanfrage<br />

an den angegebenen Landscape-Account.<br />

Im Web-Interface erfolgt<br />

die Freigabe darauf per Mausklick.<br />

Danach sammelt der neue Client lokal<br />

alle relevanten Systeminformationen<br />

wie die Hardware-Konfiguration <strong>und</strong><br />

die installierten Pakete <strong>und</strong> sendet<br />

diese an Landscape. Hierbei ist allerdings<br />

ein wenig Geduld gefragt, denn<br />

es dauert bis zu anderthalb St<strong>und</strong>en,<br />

bis alle Angaben übertragen sind.<br />

Kernfunktionen<br />

Von nun an informieren die Landscape-<br />

Clients den Server regelmäßig über ihr<br />

Wohlergehen. Das Web-Interface stellt<br />

dem Admin – oder auch mehreren Admins,<br />

optional in verschiedenen Rollen<br />

<strong>mit</strong> unterschiedlichen Berechtigungen<br />

– diese Informationen in unterschiedlichen<br />

Darreichungsformen zur Verfügung.<br />

Über den Zustand der überwachten<br />

Rechner geben zusammenfassend die<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Know-how<br />

Landscape<br />

49<br />

Reports Auskunft (Abbildung 2). Sie<br />

visualisieren den Gesamtzustand aller<br />

oder einzelner überwachter Rechner,<br />

die zugr<strong>und</strong>e liegenden Daten stehen<br />

auch zum Download zur Verfügung.<br />

Auf Wunsch lassen sich die Computer<br />

<strong>mit</strong>tels Tags in Gruppen organisieren,<br />

sodass sich alle Überwachungsfunktionen<br />

auf beliebige Untermengen<br />

anwenden lassen. Auf die gleiche Weise<br />

erstellt der Admin gruppenspezifische<br />

Profile, <strong>mit</strong> denen Server verschiedene<br />

Pakete <strong>und</strong> Updates erhalten oder<br />

eben nicht.<br />

Die Paketverwaltung stellt eine der<br />

wichtigsten Annehmlichkeiten des<br />

Landscape-Dienstes dar. Neu- <strong>und</strong><br />

Deinstallationen erfolgen ebenso per<br />

Mausklick <strong>und</strong> <strong>für</strong> ganze Gruppen wie<br />

Updates. Diese lassen sich wiederum<br />

einzeln auswählen, wobei Landscape<br />

<strong>Sicher</strong>heits-Updates separat anzeigt<br />

<strong>und</strong> installiert. Auf Wunsch erfolgt die<br />

Auswahl aber auch auf der Ebene einzelner<br />

Pakete (Abbildung 3). Auch Upgrades<br />

auf neue Ubuntu-Versionen unterstützt<br />

Landscape. Es lässt allerdings<br />

die Möglichkeit zur manuellen Konfiguration<br />

der Paketquellen vermissen.<br />

Die Monitoring-Funktion gibt einen<br />

Überblick über die Auslastung der<br />

Landscape-Clients, wiederum nach<br />

Bedarf gruppiert. Hier stellt Landscape<br />

standardmäßig Graphen über den<br />

durchschnittlichen Arbeitsspeicherverbrauch,<br />

die Festplattenauslastung <strong>und</strong><br />

die Netzwerklast bereit (Abbildung 4).<br />

Mit eigenen Shell-Skripten fügt man<br />

hier beliebige Auswertungen hinzu, vorausgesetzt<br />

man hat bei der Client-Konfiguration<br />

die Ausführung von Skripten<br />

zugelassen.<br />

Die Hauptforderung an ein eigenes<br />

Skript ist, dass es bei jeder Ausführung<br />

eine Zahl ausgibt, die Landscape<br />

daraufhin sammelt <strong>und</strong> grafisch wiedergibt.<br />

Hierbei sind negative ebenso<br />

wie Dezimalzahlen erlaubt; die Zahl<br />

muss aber auf die Standardausgabe geschrieben<br />

werden. Landscape beachtet<br />

den Exit-Code des Skripts: Ist er nicht 0,<br />

meldet es einen Fehler. Das Gleiche gilt<br />

im Übrigen <strong>für</strong> Kurzprogramme <strong>mit</strong> zu<br />

langer Laufzeit: Nach zehn Sek<strong>und</strong>en<br />

bricht Landscape die Ausführung ebenfalls<br />

<strong>mit</strong> einer Fehlermeldung ab.<br />

Abbildung 1: Landscape verwaltet Ubuntu-Rechner per Web-Interface.<br />

Weiterhin gibt Landscape Auskunft<br />

über die auf den Clients laufenden Prozesse<br />

sowie vorhandene User-Accounts<br />

<strong>und</strong> führt Protokoll über abgeschlossene<br />

Aktivitäten.<br />

Mit all diesen Basisfunktionen stellt Canonical<br />

<strong>mit</strong> Landscape ein praktisches<br />

Tool bereit, <strong>mit</strong> dem Admins ortsunabhängig<br />

die meisten alltäglichen<br />

Wartungsarbeiten durchführen können.<br />

Sie benötigen lediglich einen Internet-<br />

Zugang. Admins, die gehofft – oder<br />

ge<strong>für</strong>chtet – hatten, schon auf dem Weg<br />

zur Arbeit die ersten Arbeitsschritte<br />

zu tun, werden allerdings enttäuscht,<br />

denn eine Smartphone-optimierte<br />

Seite bietet die Landscape-Weboberfläche<br />

nicht.<br />

Verbindungen<br />

Da<strong>mit</strong> Landscape keine größeren Lücken<br />

in die <strong>Sicher</strong>heitsvorkehrungen<br />

der eigenen Infrastruktur reißt, initiieren<br />

ausschließlich Clients die Kommunikation<br />

<strong>mit</strong> dem Landscape-Server.<br />

Dabei verwenden sie die typischen<br />

Abbildung 2: Die Landscape-Reports geben einen Gesamtüberblick über den Zustand der überwachten<br />

Rechner.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


50<br />

Know-how<br />

Landscape<br />

api«, außer wenn man auf das Canonical-Angebot<br />

einer lokalen Landscape-<br />

Installation (on-site) zurückgreift. Die<br />

Dokumentation empfiehlt, diese Variablen<br />

in der Datei »~/.landscape‐api.rc«<br />

zu speichern <strong>und</strong> vor dem Aufruf von<br />

»landscape‐api« einzulesen <strong>mit</strong>:<br />

source ~/.landscape‐api.rc<br />

Eine vollständige Liste der verfügbaren<br />

Befehle gibt es <strong>mit</strong>:<br />

landscape‐api help<br />

Abbildung 3: Landscape installiert <strong>und</strong> aktualisiert Pakete einzeln oder in Gruppen.<br />

n Info<br />

HTTP- beziehungsweise HTTPS-Ports<br />

80 <strong>und</strong> 443, die in den meisten Netzwerken<br />

<strong>und</strong> Firewalls <strong>ohne</strong>hin <strong>für</strong> ausgehende<br />

Verbindungen offenstehen.<br />

Alle 30 Sek<strong>und</strong>en schickt der Landscape-Client<br />

einen unverschlüsselten<br />

HTTP-Request an den Server. Da<strong>mit</strong><br />

bek<strong>und</strong>et er einerseits, dass der Rechner<br />

noch läuft <strong>und</strong> gibt andererseits<br />

dem Server Gelegenheit, ein Ereignis<br />

auszulösen. Liegt irgendeine Nachricht<br />

vom Server vor, folgt eine diesbezügliche<br />

Anfrage über den verschlüsselten<br />

HTTPS-Port.<br />

Abgesehen von diesen Kommunikationsvorgängen<br />

<strong>mit</strong> dem Landscape-Server<br />

schicken Landscape-Clients lediglich<br />

Abfragen an die Paket-Repositories.<br />

Da<strong>mit</strong> halten sie ihre Quellen auf dem<br />

neuesten Stand <strong>und</strong> liefern auf dieser<br />

Gr<strong>und</strong>lage dem Server Informationen<br />

über aktualisierbare Pakete. Landscape<br />

lädt <strong>und</strong> installiert diese auf Aufforderung;<br />

anderen Tools oder Benutzern,<br />

die das Paketverwaltungswerkzeug<br />

»apt‐get« direkt aufrufen, kommt es<br />

dabei nicht in die Quere.<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31334<br />

Programmierbare<br />

Schnittstelle<br />

Landscape stellt nicht nur eine bequeme<br />

Weboberfläche <strong>für</strong> die Administration<br />

von Rechnern bereit. Über eine<br />

API greift der Admin auch <strong>mit</strong> eigenen<br />

Programmen <strong>und</strong> Skripten direkt auf<br />

die durch Landscape angebotenen Informationen<br />

<strong>und</strong> Funktionen zu. Da<strong>für</strong><br />

stellt Ubuntu im Landscape-Repository<br />

das Ubuntu-Paket »landscape‐api« zur<br />

Verfügung. Der folgende Befehl fügt das<br />

Repository hinzu:<br />

sudo add‐apt‐repository ppa:landscape/ U<br />

landscape‐api<br />

Anschließend installiert man das Paket<br />

»landscape‐api«, das einen gleichnamigen<br />

Kommandozeilen-Client sowie<br />

eine Python-Bibliothek <strong>für</strong> den direkten<br />

Landscape-Zugriff enthält.<br />

Das Kommandozeilenprogramm greift<br />

<strong>für</strong> die Authentifizerung auf die Variablen<br />

»LANDSCAPE_API_KEY«, »LAND‐<br />

SCAPE_API_SECRET« <strong>und</strong> »LAND‐<br />

SCAPE_API_URI« zu, die man vor dem<br />

Aufruf von »landscape‐api« in der Shell<br />

exportiert. Die ersteren beiden sind<br />

User-spezifisch <strong>und</strong> lassen sich in der<br />

Weboberfläche in den Benutzereinstellungen<br />

im Feld »API access« nachschlagen<br />

beziehungsweise generieren. Die<br />

Landscape-URI lautet im Allgemeinen<br />

»https://landscape.canonical.com/<br />

Größtenteils entsprechen die durch<br />

die API zur Verfügung gestellten Funktionen<br />

denen der Webschnittstelle.<br />

Allerdings schließt sie eine Lücke in der<br />

Paketverwaltung, denn die API erlaubt<br />

auch das Hinzufügen <strong>und</strong> Löschen von<br />

Paketquellen, auch auf Basis von Rechnergruppen.<br />

Die zum API-Paket gehörige Python-<br />

Bibliothek liefert die gleiche Funktionalität.<br />

Nach dem Import von »landscape_api«<br />

erzeugt dieser Befehl im<br />

Python-Interpreter ein API-Objekt:<br />

api = new landscape_api.base.API(uri, U<br />

key, secret)<br />

Die Werte der Variablen »uri«, »key«<br />

<strong>und</strong> »secret« entsprechen denen der<br />

gleichnamigen Bash-Variablen. Das<br />

neue Objekt »api« erledigt wiederum<br />

die gleichen Abfragen wie das Shell-<br />

Pendant, beispielsweise <strong>mit</strong> »api.<br />

get_computers()«.<br />

Alternativ erfolgt der Zugriff direkt über<br />

die HTTP-Schnittstelle per »GET« <strong>und</strong><br />

»POST«. Der Parameter »action« enthält<br />

hier die Funktion, also etwa »GetComputers«.<br />

Die Anleitung unter [2] beschreibt,<br />

wie man eine gültige Signatur<br />

<strong>für</strong> die Authentifizierung erzeugt.<br />

Preise<br />

Landscape eignet sich zur Verwaltung<br />

von Servern <strong>und</strong> Desktop-Systemen<br />

gleichermaßen. Gerade bei letzteren ist<br />

es von Vorteil, dass vom Admin angeordnete<br />

Aufgaben wie Paket-Updates<br />

zunächst in einer Warteschlange landen,<br />

die die Clients bei nächster Gelegenheit<br />

abarbeiten. Es gibt also, auch<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Know-how<br />

Landscape<br />

51<br />

wenn Desktop-Rechner gerade ausgeschaltet<br />

sind, kein Problem.<br />

Allerdings bietet Canonical Landscape<br />

lediglich als eine Komponente im Rahmen<br />

seiner Ubuntu-Advantage-Pakete<br />

an. Dazu gehören in allen verfügbaren<br />

Varianten außerdem ein umfassender<br />

Support sowie eine Rechtsgarantie,<br />

die Ubuntu-Nutzer vor Patentklagen<br />

schützen soll. Optional erfolgt die<br />

Landscape-Installation auf einem<br />

eigenen Server (on-site), sodass die<br />

Kommunikation zwischen Clients <strong>und</strong><br />

Server vollständig im eigenen Intranet<br />

stattfinden kann.<br />

Ubuntu Advantage <strong>für</strong> den Desktop<br />

gibt es in zwei Varianten: Standard <strong>und</strong><br />

Advanced. Sie kosten im Fünferpack<br />

473 beziehungsweise 1014 Euro <strong>für</strong> ein<br />

Jahr. Für Server bietet Canonical neben<br />

Standard <strong>und</strong> Advanced eine Essential-<br />

Version an; die drei Varianten kosten<br />

pro Server <strong>und</strong> Jahr 248, 542 <strong>und</strong> 930<br />

Euro. Rabatte gibt es in allen Fällen <strong>für</strong><br />

drei- <strong>und</strong> fünfjährige Verträge. Immerhin:<br />

Wer sich <strong>mit</strong> Landscape erstmal<br />

vertraut machen möchte, kann dies 30<br />

Tage lang kostenlos tun – <strong>mit</strong> bis zu 50<br />

Rechnern <strong>und</strong> 5 Administratoren.<br />

Homogen<br />

Der offensichtliche Haken des<br />

Landscape-Dienstes besteht in seiner<br />

Beschränkung auf Ubuntu-Rechner.<br />

Zwar verwenden auch andere Debian-<br />

Abbildung 4: Die Monitoring-Funktion zeigt die Auslastung von Rechnern <strong>und</strong> Netzwerk.<br />

Derivate das gleiche Paketverwaltungssystem<br />

<strong>und</strong> arbeiten so ebenfalls <strong>mit</strong><br />

Landscape zusammenarbeiten, aber<br />

offizielle Unterstützung durch Canonical<br />

fehlt, was <strong>für</strong> einen bezahlten<br />

Dienst kaum akzeptabel ist. Andere<br />

Distributionen wie Red Hat <strong>und</strong> Suse<br />

fallen komplett aus, sodass ein Vendor<br />

Lock droht: Ein Wechsel auf ein anderes<br />

Betriebssystem – auch nur bei einem<br />

Teil der eigenen Rechner – macht Landscape<br />

wertlos.<br />

Des Weiteren lohnt sich der Kauf eines<br />

Ubuntu-Advantage-Pakets nur <strong>für</strong> die<br />

Landscape-Funktionalität kaum, zumal<br />

es freie Software gibt, die zumindest<br />

die Funktionalität teilweise ebenfalls<br />

abdecken, etwa Puppet <strong>und</strong> Foreman<br />

[3] oder Chef [4]. Für Red-Hat-basierte<br />

Distributionen gibt es das freie Werkzeug<br />

Spacewalk [5], auf dem auch das<br />

kostenpflichtige Satellite [6] basiert.<br />

So bleibt Landscape leider nur <strong>für</strong><br />

diejenigen empfehlenswert, die auch<br />

die anderen Leistungen von Ubuntu<br />

Advantage nutzen möchten; schade,<br />

dass Canonical hier eine so restriktive<br />

Lizenzierung praktiziert. n


Security<br />

52 FreeIPA<br />

Gordon Sa<strong>und</strong>ers, 123RF<br />

Active Directory <strong>mit</strong> freier Software<br />

Zusammengeschweißt<br />

Im Gegensatz zu OpenLDAP hat das noch junge FreeIPA das Zeug, sich <strong>mit</strong> einer Technologie wie Active<br />

Directory zu messen. Der Beitrag erklärt, warum das so ist <strong>und</strong> wie man FreeIPA in der Praxis einsetzt.<br />

Thomas Drilling<br />

Der Begriff Alternative bedeutet in<br />

diesem Zusammenhang nicht, dass<br />

FreeIPA ein Active Directory ersetzen<br />

kann, sondern im Unix-Umfeld eine<br />

Technologie zur Verfügung stellt, die<br />

konzeptionell <strong>mit</strong> Microsofts <strong>mit</strong> Windows<br />

2000 eingeführtem Domänen-<br />

Konzept vergleichbar ist. Um beurteilen<br />

zu können, was FreeIPA leistet, ist es<br />

hilfreich, sich ein paar Gr<strong>und</strong>lagen in<br />

Erinnerung zu rufen. In der IT steht der<br />

Begriff Verzeichnis <strong>für</strong> eine Ansammlung<br />

von Objekten <strong>und</strong> Informationen,<br />

die in einer bestimmten Ordnung oder<br />

Reihenfolge gespeichert sind.<br />

Der Verzeichnisdienst verschafft Zugriff<br />

auf die gespeicherten Informationen<br />

<strong>und</strong> Objekte, etwa zum Suchen, Erstellen,<br />

Abfragen, Ändern, Hinzufügen <strong>und</strong><br />

Löschen. Bekannte Implementierungen<br />

von Verzeichnisdiensten sind beispielsweise<br />

DNS, X.500 <strong>und</strong> LDAP. Insbeson-<br />

dere Letzterer gilt streng genommen<br />

als Urvater all der Produkte, die heute<br />

unter der Bezeichnung Verzeichnisdienst<br />

firmieren, obwohl der im Jahr<br />

1993 initiierte Standard eigentlich nur<br />

das Protokoll LDAP meint, eine vereinfachte<br />

Variante des Directory Access<br />

Protocol (DAP), das als Teil des X.500-<br />

Standards spezifiziert ist.<br />

Im Gegensatz zum X.500-Standard,<br />

der einen vollständigen ISO/​OSI-Stack<br />

voraussetzt, benötzigt LDAP nur einen<br />

TCP/​IP-Stack <strong>und</strong> implementiert nur<br />

eine Untermenge der im DAP definierten<br />

Funktionen <strong>und</strong> Datentypen. Während<br />

LDAP im ursprüngliche Sinne sozusagen<br />

als Proxy zwischen X.500 <strong>und</strong><br />

dem DAP ver<strong>mit</strong>telte, bildet es heute<br />

das F<strong>und</strong>ament aller modernen Verzeichnisdienste,<br />

die Informationen in<br />

einer hierarchischen Struktur ablegen.<br />

Für das Abfragen der Daten kommt wie<br />

schon beim X.500-Standard ein objektorientiertes<br />

Datenmodell zum Einsatz,<br />

das <strong>mit</strong> Objekten <strong>und</strong> Klassen Anleihen<br />

bei der objektorientierten Programmierung<br />

einschließlich Mechanismen wie<br />

Vererbung <strong>und</strong> Polymorphie nimmt.<br />

Aufgaben eines<br />

Verzeichnisdienstes<br />

Moderne Verzeichnisdienste dienen<br />

meist dazu, Netzwerk-Ressourcen wie<br />

Benutzer, Gruppen, Dienste, Server,<br />

Workstations, Freigaben <strong>und</strong> Geräte<br />

zentral zu verwalten. Oft aber dienen<br />

sie auch der zentralen Authentifizierung<br />

der Benutzer. In diesem Beitrag<br />

geht es insbesondere um das Identity-<br />

Management, das häufig <strong>mit</strong> einer<br />

LDAP-Datenbank implementiert ist.<br />

Verzeichnisdienste sind <strong>für</strong> das Abbilden<br />

der Objekte im LDAP-Verzeichnisbaum<br />

(DIT: Directory Information Tree)<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Security<br />

FreeIPA<br />

53<br />

zuständig <strong>und</strong> bieten zahlreiche Möglichkeiten,<br />

die Objekte <strong>mit</strong>einander in<br />

Beziehung zu setzen.<br />

Dabei repräsentiert jedes Objekt im<br />

LDAP-Verzeichnisbaum einen sogenannten<br />

Verzeichniseintrag <strong>mit</strong> einem<br />

eindeutigen Namen (DN) im DIT. Im<br />

LDAP gibt es die Objekttypen „Organisational<br />

Unit“ (OU) zum Aufbau der<br />

Baumstruktur <strong>und</strong> Blatt-Objekte zum<br />

Verwalten der Ressourcen im DIT, wie<br />

zum Beispiel User ID (UID) oder der<br />

Common Name (CN). Microsofts Active<br />

Directory erweitert die oberste Verwaltungsstruktur<br />

Tree zu einem Wald<br />

(Forest). Die Bezeichnungen leiten sich<br />

aus vorgegebenen Objektklassen <strong>und</strong><br />

Schemas ab.<br />

Ein Objekt ist eine im DIT zu verwaltende<br />

Ressource, wobei LDAP unterschiedliche<br />

Typen von Ressourcen<br />

kennt, etwa Container, Benutzer <strong>und</strong><br />

Gruppen <strong>mit</strong> jeweils speziellen Attributen,<br />

welche die Eigenschaften von<br />

Objekten beschreiben. Ferner gibt es<br />

in allen Verzeichnisdiensten Schemas,<br />

die Objektklassen in Gruppen zusammenfassen.<br />

LDAP kennt eine Reihe von<br />

Standard-Schemas, etwa zum Verwalten<br />

von Benutzern, allerdings lässt<br />

sich LDAP beliebig um eigene Schemas<br />

erweitern.<br />

Import von LDAP-Daten<br />

Für das Einfügen von Objekten in<br />

den DIT kommen ASCII-lesbare LDIF-<br />

Dateien zum Einsatz, in denen der<br />

LDAP-Admin Objektklassen <strong>und</strong> Attribute<br />

<strong>mit</strong> den jeweiligen Werten <strong>für</strong><br />

das zu erstellende Objekt einträgt. Das<br />

Einspielen von LDAP-Dateien in den DIT<br />

erfolgt <strong>mit</strong> »ldapadd«. Insofern können<br />

Software-Hersteller oder System-Integratoren<br />

LDAP beziehungsweise die freie<br />

Variante OpenLDAP im Prinzip nach<br />

Belieben an die eigene Bedürfnisse<br />

anpassen.<br />

Nahezu alle auf Linux basierenden Server-Distributionen<br />

nutzen OpenLDAP<br />

beispielsweise zum Speichern von<br />

Benutzer- <strong>und</strong> Gruppen-Informationen<br />

oder <strong>für</strong> Posix- <strong>und</strong> Samba-Konten<br />

beziehungsweise zum Speichern von<br />

Mail-Aliases <strong>für</strong> Postfix. Die eigentliche<br />

Authentifizierung, also das Identity-<br />

Management, ist aber nicht Aufgabe<br />

IPA Server<br />

Kerberos KDC<br />

Web−GUI<br />

DNS<br />

Abbildung 1: Die Architektur von FreeIPA.<br />

von LDAP, auch wenn LDAP zusammen<br />

<strong>mit</strong> Erweiterungen wie Kerberos häufig<br />

zum Authentifizieren von Benutzern<br />

verwendet wird, etwa <strong>für</strong> einen IMAP-<br />

Server oder <strong>für</strong> geschützte Bereiche<br />

eines Webserver. Enterprise-Linux-Distributionen<br />

wie Univentions Corporate<br />

Server nutzen LDAP zudem zum Speichern<br />

der nahezu gesamten Konfiguration<br />

<strong>und</strong> <strong>für</strong> das Client-Management.<br />

Komponenten eines<br />

Verzeichnisdienstes<br />

Während LDAP <strong>für</strong> alle möglichen<br />

Zwecke zum Einsatz kommen kann,<br />

haben Microsofts Active Directory <strong>und</strong><br />

Novells eDirectory einen klar umrissenen<br />

Zweck. Active Directory erlaubt<br />

es beispielsweise, die gesamte Unternehmensstruktur,<br />

seine Hierarchie <strong>und</strong><br />

die räumliche Verteilung im Netzwerk<br />

abzubilden, wozu zum Beispiel Benutzer,<br />

Gruppen, Computer, Dienste, Server,<br />

Freigaben, Drucker oder Scanner<br />

samt deren Eigenschaften in Form von<br />

LDAP-Objekten in einer sogenannten<br />

Domäne erfasst werden.<br />

Die Domäne ist die zentrale organisatorische<br />

Verwaltungseinheit in Windows-<br />

Netzen <strong>und</strong> nicht identisch <strong>mit</strong> einer<br />

DNS-Domain. Dabei kommt dem<br />

sogenannten Domain Controller (DC)<br />

die Rolle der zentralen Authentifizierung<br />

<strong>und</strong> Autorisierung von Benutzern,<br />

Gruppen <strong>und</strong> Computern im Netz zu.<br />

Der Domain-Controller ist in der Regel<br />

auf einem dedizierten Server beheimatet<br />

<strong>und</strong> hält die gesamte Verzeichnishierarchie<br />

des AD vor.<br />

Directory Server<br />

Management Interface<br />

NTP<br />

PKI (Dogtag)<br />

Commandline Tools<br />

Die gr<strong>und</strong>legenden Strukturmerkmale<br />

von LDAP finden sich in allen heute relevanten<br />

LDAP-Implementationen der<br />

führenden IT-Hersteller wie Microsofts<br />

Active Directory, Novells eDirectory<br />

(einschließlich des Vorgängers Novell<br />

Directory Services), IBMs Tivoli Directory<br />

Server, Apples Open Directory oder<br />

dem 389 Directory Server, den zum Beispiel<br />

Red Hat unterstützt (siehe Kasten<br />

„389“). Darüber hinaus erlauben moderne<br />

Verzeichnisdienste einschließlich<br />

LDAP das Replizieren der Daten<br />

zwischen mehreren Verzeichnissen <strong>und</strong><br />

bieten ein zentrales Identity-Management,<br />

das häufig <strong>mit</strong>hilfe von Kerberos<br />

realisiert ist. Auch bei Active Directory<br />

ist Kerberos neben DNS <strong>und</strong> LDAP eine<br />

der drei zentralen Komponenten des<br />

Verzeichnisdienstes <strong>und</strong> unter anderem<br />

in der Lage, den Clients einer Domäne<br />

einen zentralen Single-Sign-On-Service<br />

zur Verfügung zu stellen.<br />

Was OpenLDAP nicht kann<br />

Zwar lässt sich auch im Linux-Umfeld<br />

eine <strong>mit</strong> Active Directory vergleichbare<br />

Funktionalität zur zentralen Netz-<br />

n 389<br />

Der 389 Directory Server hieß vorher Fedora Directory<br />

Server, ist eine Weiterentwicklung des einstigen<br />

„Netscape Directory Servers“ der Firma Netscape<br />

Communications <strong>und</strong> wurde im Jahr 2004 von Red<br />

Hat gekauft. Der 389 Directory Server ist vollständig<br />

freie Software unter der GNU General Public License<br />

<strong>und</strong> wird seit seiner „Geburt“ an der Universität<br />

Michigan im Jahr 1996 stetig weiterentwickelt.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


54<br />

Security<br />

FreeIPA<br />

Abbildung 2: Der Firefox-Browser lässt sich <strong>für</strong> ein Login <strong>mit</strong> Kerberos-<br />

Authentifizierung einrichten.<br />

Abbildung 3: Die Einrichtung von Kerberos im Browser erfordert das<br />

Herunterladen eines Zertifikats.<br />

werkverwaltung <strong>und</strong> <strong>für</strong> das Identity-<br />

Management realisieren, allerdings<br />

müssen Hersteller oder System-Integratoren<br />

dazu OpenLDAP, Kerberos [1]<br />

[2], DNS, NTP <strong>und</strong>/​oder NIS zu einem<br />

harmonischen Ganzen verschmelzen,<br />

was alles andere als trivial ist. Die<br />

Bremer Univention GmbH beispielsweise<br />

gehört <strong>mit</strong> ihrem Univention<br />

Corporate Server zu den Vorreitern auf<br />

diesem Gebiet. Der UCS ist einer der<br />

wenigen auf Linux basierenden Server-<br />

Plattformen, die Out-of-the-Box ein<br />

durchgehend implementiertes Identity-<br />

Management bieten (siehe [3]).<br />

Ein OpenLDAP-Server kann zwar<br />

Account-Informationen speichern, aber<br />

da die eigentliche Authentifizierung ein<br />

zusätzlicher Dienst wie Kerberos übernimmt,<br />

muss der System-Integrator<br />

oder Administrator zwei Systeme<br />

installieren <strong>und</strong> administrieren. Fertigprodukte<br />

wie ein Univention Corporate<br />

Server verstecken solche Vorgänge<br />

hinter einer einfachen Administrations-<br />

Oberfläche.<br />

FreeIPA-Komponenten<br />

Das quelloffene FreeIPA [4] ist ein noch<br />

relativ junges, derzeit vorwiegend von<br />

Red Hat <strong>und</strong> Fedora unterstütztes Projekt,<br />

das auf Basis des 389 Directory<br />

Server [5] ein einfach verwaltbares<br />

Identity-Policy-and-Audit-System (IPA)<br />

zur Verfügung stellt. FreeIPA bietet<br />

eine ähnliche Funktionalität wie Active<br />

Directory, basiert aber vollständig<br />

auf Open-Source-Projekten, die es zu<br />

einem zentral via Web-Interface verwalteten<br />

Framework zusammenführt.<br />

Neben der LDAP-Implementation 389<br />

Directory Server nutzt FreeIPA die<br />

MIT-Implementation [2] von Kerberos<br />

zur Authentifizierung. Ferner sind wie<br />

bei Active Directory ein <strong>mit</strong>tels BIND<br />

realisierter Domain Name Server <strong>und</strong><br />

eine Zertifikatsverwaltung in Form des<br />

Dogtag Certificate System [6] Teil der<br />

Architektur. Dogtag liefert anfragenden<br />

Clients passende X.509-Zertifikate<br />

<strong>für</strong> die von FreeIPA angebotenen<br />

Domänen-Dienste. Außerdem kann<br />

der FreeIPA-Server als NTP-Server in<br />

der von ihm zur Verfügung gestellten<br />

beziehungsweise kontrollierten Domäne<br />

fungieren, obwohl sich auch<br />

andere NTP-Server einbinden lassen.<br />

Ein NTP-Service ist <strong>für</strong> jeden Domänen-<br />

Controller Pflicht, denn nur <strong>mit</strong> einer<br />

Domänen-weit synchronen Systemzeit<br />

funktioniert die Kerberos-Authentifizierung<br />

korrekt (Abbildung 1).<br />

FreeIPA stellt eine Reihe von Funktionen<br />

zur Implementation eines Linuxbasierten<br />

Domänen-Controllers zur<br />

Verfügung, der sämtliche Identity- <strong>und</strong><br />

Policy-Daten an zentraler Stelle verwaltet.<br />

Ferner erzeugt FreeIPA analog<br />

zu einer Domäne im Active Directory<br />

eine (Kerberos-)Domäne <strong>für</strong> Linux-<br />

Clients. Darüber hinaus versteht sich<br />

FreeIPA auch in gewisser Hinsicht <strong>mit</strong><br />

einem bestehenden Active Directory.<br />

So ist es <strong>mit</strong> FreeIPA möglich, eine Vertrauensstellung<br />

zu einer bestehenden<br />

Windows-Domäne aufzubauen <strong>und</strong><br />

Accounts aus einem Active Directory<br />

zu replizieren, sodass sich diese dann<br />

ebenfalls in einer FreeIPA-Domäne<br />

nutzen lassen. Im ersten Fall lassen sich<br />

die AD-Konten auch <strong>ohne</strong> Replikation<br />

in der FreeIPA-Domäne verwenden.<br />

Um die Ausfallsicherheit zu erhöhen<br />

<strong>und</strong> die Skalierbarkeit zu verbessern,<br />

lassen sich wie im AD mehrere FreeIPA-<br />

Domänen-Controller betreiben, die sich<br />

dann untereinander replizieren. Diese<br />

<strong>Backup</strong>-Domänen-Controller heißen im<br />

FreeIPA-Kontext Replica.<br />

FreeIPA-Clients<br />

Mit Fertigstellung der Installation von<br />

FreeIPA auf einem FreeIPA-Domänen-<br />

Controller stellt dieser den Clients<br />

innerhalb der FreeIPA-Domäne zwei<br />

elementare native Client-Anwendungen<br />

SSSD [7] <strong>und</strong> Certmonger zur Verfügung.<br />

Der System Security Services<br />

Daemon kümmert sich um die Kommunikation<br />

<strong>mit</strong> einem der im Backend<br />

verfügbaren Identity- <strong>und</strong> Authentifizierungssysteme.<br />

Das ist per Default<br />

Free IPA, allerdings ist der SSS-Daemon<br />

auch in der Lage, <strong>mit</strong> Active Directory,<br />

LDAP oder direkt <strong>mit</strong> Kerberos zu<br />

kommunizieren. Auf Frontend-Seite ist<br />

der SSSD durch je eine PAM- <strong>und</strong> eine<br />

NSS-Schnittstelle präsent. Ein Cache<br />

hält die aktuellen Policy- <strong>und</strong> Identity-<br />

Informationen im Speicher, um Authentifizierungsvorgänge<br />

zu beschleunigen.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Security<br />

FreeIPA<br />

55<br />

Da<strong>mit</strong> kann sich ein Client auch dann<br />

erfolgreich anmelden, wenn das Frontend<br />

über keine aktive Verbindung zum<br />

Backend verfügt.<br />

Die zweite von FreeIPA nativ zur Verfügung<br />

gestellte Anwendung ist Certmonger,<br />

ein schlanker Daemon, der <strong>für</strong> ein<br />

Erneuern der auf dem Client verwendeten<br />

Zertifikate zuständig ist. Dieser<br />

automatische Prozess erfordert kein<br />

manuelles Eingreifen <strong>und</strong> kann verhindern,<br />

dass Zertifikate unbeabsichtigt<br />

ablaufen. Dieses <strong>und</strong> viele weitere<br />

Details zu einem FreeIPA-Setup finden<br />

sich in der Dokumentation im Fedora-<br />

Wiki [8]. Dieser Artikel beschreibt im<br />

Folgenden, wie man einen FreeIPA-Server<br />

installiert <strong>und</strong> sich via Kerberos am<br />

komfortablen Web-Interface anmeldet.<br />

Abbildung 4: Manuelle Firefox-Konfiguration <strong>für</strong> Kerberos.<br />

FreeIPA ausprobieren<br />

FreeIPA liegt aktuell in der Version 3.3.3<br />

vor <strong>und</strong> lässt sich am einfachsten <strong>mit</strong><br />

Fedora ausprobieren. Die Version 3.2<br />

ist beispielsweise in den Paketquellen<br />

von Fedara 19 enthalten – nach dem<br />

Aktivieren des Repository »fedora‐updates‐testing«<br />

auch in der aktuellen<br />

Version 3.3.3. Optional gibt es den<br />

Quellcode unter [9].<br />

Zum Aufsetzen des FreeIPA-Servers<br />

genügt es, das Paket »freeipa‐server«<br />

zu installieren, was unter Fedora 19 das<br />

Auflösen einer stattlichen Anzahl von<br />

Abhängigkeiten nach sich zieht: r<strong>und</strong><br />

70 Pakete einschließlich »krb5«, »nsstools«,<br />

»389‐ds‐base«, »certmonger«<br />

<strong>und</strong> so weiter. Ein eigener DNS-Server<br />

ist nicht zwingend erforderlich, weil<br />

FreeIPA auch das Einbinden eines existierenden<br />

DNS erlaubt. Will man selber<br />

den Namensdienst betreiben, muss<br />

man außerdem das LDAP-Backend-<br />

Plugin <strong>für</strong> BIND in Form des Paketes<br />

»bind‐dyndb‐ldap« installieren.<br />

Zur Gr<strong>und</strong>konfiguration des FreeIPA-<br />

Domänen-Controllers dient das Skript<br />

»ipa‐server‐install«, das entweder interaktiv<br />

eine Anzahl von Parametern abfragt<br />

oder die Argumente als Parameter<br />

erwartet, wie zum Beispiel »‐n« (Domain-Name)<br />

, »‐r« (Realm-Name), »‐p«<br />

(Master-Passwort) oder »‐a« (Admin-<br />

Passwort). Ferner wird <strong>mit</strong> »‐setup‐dns«<br />

bei Bedarf eine DNS-Zone generiert <strong>und</strong><br />

ein DNS-Server konfiguriert, was allerdings<br />

erfordert, <strong>mit</strong> »‐forwarder« einen<br />

externen DNS-Forwarder anzugeben<br />

oder die Option »‐no‐forwarders« zu<br />

verwenden.<br />

Mit »‐U« (unmaintained) lässt sich auch<br />

jede Nutzer-Interaktion unterdrücken,<br />

was voraussetzt, alle benötigten Parameter<br />

beim Aufruf zu übergeben. Das<br />

Setup eines DNS kann allerdings auch<br />

später <strong>mit</strong> »ipa‐dns‐install« erfolgen.<br />

Ein Vorteil des eigenen DNS besteht<br />

darin, dass dieser sowohl A- <strong>und</strong><br />

PTR-Records <strong>für</strong> sämtliche Domänen-<br />

Mitglieder als auch Service-Records zur<br />

Verfügung stellt. Clients haben dann<br />

die Möglichkeit, den richtigen Kerberos-<br />

beziehungsweise LDAP-Server über<br />

ein DNS-Recovery zu er<strong>mit</strong>teln.<br />

Im Beispiel kommt die interaktive Variante<br />

zum Einsatz, bei der per Default<br />

keine DNS-Konfiguration stattfindet.<br />

Das Skript erzeugt <strong>und</strong> konfiguriert<br />

eine Instanz des 389-DS, erzeugt<br />

<strong>und</strong> konfiguriert ein KDC, richtet den<br />

Apache-Webserver <strong>für</strong> den Zugriff auf<br />

das Web-Interface ein, konfiguriert<br />

den NTP-Daemon <strong>und</strong> eine Standalone-CA<br />

<strong>für</strong> das Dogtag-Certificate-<br />

Management-System. Im Anschluss an<br />

die Frage, ob das System einen DNS<br />

konfigurieren soll oder nicht, ist der<br />

vollständige FQDN des FreeIPA-Servers<br />

anzugeben. Gleiches gilt anschließend<br />

<strong>für</strong> den Domain-Namen (<strong>ohne</strong> Host-<br />

Teil) <strong>und</strong> den Kerberos-Realm, bei dem<br />

sich ebenfalls in der Regel der Default-<br />

Vorschlag übernehmen lässt.<br />

Service-Vielfalt<br />

Nach erfolgreicher Installation zeigt<br />

das Skript eine Zusammenfassung<br />

der konfigurierten Ports <strong>für</strong> das Web-<br />

Interface (HTTP 80, HTTPS 443), 389-DS<br />

(LDAP 389, LDAPS 636) <strong>und</strong> Kerberos<br />

(88, 464) sowie der benötigten <strong>und</strong> konfigurierten<br />

UDP-Ports an.<br />

FreeIPA lässt sich wahlweise vollständig<br />

über das Kommandozeilenwerkzeug<br />

»ipa« oder über das Web-Interface<br />

administrieren.<br />

Das FreeIPA-Web-Interface<br />

Nach dem Abschließen des Installationsskriptes<br />

sollte sich die Login-Seite<br />

des Web-Interfaces zeigen <strong>und</strong> ein<br />

Login <strong>mit</strong> dem IPA-Admin-Namen<br />

nebst gewählten Passworts von jedem<br />

beliebigen Client aus prinzipiell möglich<br />

sein. Allerdings ist die Username-/​<br />

Passwort-Methode nur <strong>für</strong> Testzwecke<br />

sinnvoll, weil sie lediglich via Basic<br />

Authentication von außerhalb des Kerberos-Realm<br />

erfolgt. Das ist auch als<br />

Fallback-Lösung tauglich, etwa wenn<br />

sich der FreeIPA-Admin zum Beispiel<br />

von einem Client anmeldet, der nicht<br />

zur FreeIPA-Domäne gehört. Für ein<br />

Kerberos-Login muss sich der Admin<br />

zunächst ein Kerberos-Ticket besorgen,<br />

was am schnellsten <strong>mit</strong> »kinit admin«<br />

funktioniert: Die benötigten Informationen<br />

zum Konfigurieren des Kerberos-<br />

Realm in Firefox liefert der Link »configured«,<br />

der <strong>mit</strong> einem weiteren Klick<br />

auf »Use Firefox Configuration Page«<br />

die benötigten Konfigurations-Optionen<br />

zeigt (Abbildung 2). Hier importiert<br />

der Admin zunächst das benötigte<br />

Zertifikat (Abbildung 3) <strong>und</strong> installiert<br />

dann die Firefox-Kerberos-Extension.<br />

Mit einem Klick auf »Configure Browser«<br />

sollte es dann gelingen, Firefox<br />

automatisch <strong>für</strong> Kerberos zu konfigurieren.<br />

Das funktioniert auch manuell.<br />

Hierzu muss der Admin in der Firefox-<br />

Konfiguration (»about:config«) den<br />

Domain-Namen bei »network.negotiate‐auth.trusted‐uris«<br />

<strong>und</strong> »network.<br />

negotiate‐auth.delegation‐uris« eintragen<br />

sowie »network.negotiate‐auth.<br />

using‐native‐gsslib« auf „true“ setzen<br />

(Abbildung 4).<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


56<br />

Security<br />

FreeIPA<br />

Abbildung 5: Erste Schritte im komfortablen Web-Interface.<br />

Abbildung 6: FreeIPA beherrscht nicht nur LDAP <strong>und</strong> DNS.<br />

Ab jetzt kann die weitere Konfiguration<br />

im Web-Interface erfolgen. Ein Klick auf<br />

den »admin«-Nutzer zeigt zum Beispiel<br />

die Account-Details (Abbildung 5).<br />

Danach lässt sich im Reiter »Identity«<br />

im Menü »Users« <strong>mit</strong> »Add« ein neuer<br />

Benutzer anlegen. Auf der Kommandozeile<br />

geht das <strong>mit</strong> »ipa user‐add tdrilling<br />

‐‐first Thomas ‐last Drilling«.<br />

Neue Hosts legt man <strong>mit</strong> dem Link<br />

»Add« im Menü »Identity / Hosts« an.<br />

Ferner lassen sich neben LDAP, DNS<br />

<strong>und</strong> HTTPD unter »Identity / Services«<br />

innerhalb der FreeIPA-Domäne <strong>mit</strong><br />

»Add« weitere Services unter die Kontrolle<br />

von FreeIPA bringen <strong>und</strong> <strong>mit</strong> einer<br />

Kerberos-Authentifizierung verknüpfen<br />

(Abbildung 6).<br />

Abbildung 7: FreeIPA verfügt über eine rollenbasierte Berechtigungssteuerung.<br />

Wie es weiter geht<br />

Fedora-Clients dazu zu bewegen, sich<br />

an einer Kerberos-Domäne anzumelden,<br />

zusätzlich noch PAM auf den<br />

Clients zu konfigurieren <strong>und</strong> die Home-<br />

Verzeichnisse automatisch einzubinden,<br />

ist nicht weniger aufwendig als<br />

das Aufsetzen des FreeIPA-Servers <strong>und</strong><br />

deshalb einem künftigen Artikel vorbehalten.<br />

Das gilt auch <strong>für</strong> die Zusammenarbeit<br />

<strong>mit</strong> einem Active Directory.<br />

Es sei aber darauf hingewiesen, dass<br />

das FreeIPA-Projekt auch eine Client-<br />

Software beinhaltet, die durch Installieren<br />

des Paketes »freeipa‐client« auf den<br />

gewünschten Linux/​Fedora/​Red Hatoder<br />

CentOS-Arbeitsplatz gelangt <strong>und</strong><br />

analog zum Server <strong>mit</strong> dem CLI-Tool<br />

»ipa‐client‐install« installiert wird. Die<br />

da<strong>mit</strong> einhergehende Konfiguration erstreckt<br />

sich auf das Anpassen der NSS<strong>und</strong><br />

PAM-Subsysteme auf dem Client<br />

<strong>und</strong> der dortigen SSSD-, SSH- <strong>und</strong><br />

NTP-Konfiguration. Außerdem wird der<br />

zuständige Kerberos-Host-Eintrag in<br />

der »/etc/krb5« gesetzt<br />

<strong>und</strong> das CA-Zertifikat<br />

des FreeIPA-Servers<br />

übertragen.<br />

Weitere CLI-Tools<br />

Die oben gezeigte<br />

Basis-Installation geht<br />

stillschweigend davon<br />

aus, dass FreeIPA <strong>mit</strong><br />

einer neu eingerichteten<br />

<strong>und</strong> eigenständigen<br />

Root-CA arbeitet.<br />

Es ist im Zuge der<br />

Installation aber <strong>mit</strong> der Option »‐external‐ca«<br />

auch möglich, eine Third-<br />

Party-CA einzubinden. Zum Installieren<br />

von Replicas steht das Kommando<br />

»ipa‐replica‐install« zur Verfügung. Das<br />

erwartet allerdings das Übergeben<br />

eines verschlüsselten Konfigurations-<br />

Archives, das zuvor auf dem Master<br />

erzeugt wird, wobei die Adresse <strong>und</strong> die<br />

FQDN des Replica-Servers anzugeben<br />

ist. Das auf dem Master einzugebende<br />

Kommando lautet »ipa‐replica‐prepare<br />

‐‐ip‐adress<br />


Security<br />

FreeIPA<br />

57<br />

onsdateien wieder in den Urzustand<br />

versetzt.<br />

Fazit<br />

FreeIPA ist weit mehr als die Summe<br />

der Teile 389-DS (LDAP), Kerberos <strong>und</strong><br />

BIND. In Linux- <strong>und</strong> Unix-Umgebungen<br />

bietet es eine vollständig Domänenbasierte<br />

Netzwerkverwaltung einschließlich<br />

Identity-Management nach<br />

dem Vorbild eines Active Directory oder<br />

Novell eDirectory. Mit Vertrauensstellungen<br />

zum Active Directory lassen sich<br />

auch heterogene Strukturen verwalten,<br />

wobei alle Bausteine wie ein Räderwerk<br />

zusammenarbeiten. Derartige<br />

Szenarien sind zwar auch im Unix-<br />

Umfeld nicht unbedingt revolutionär<br />

(Stichwort NIS) <strong>und</strong> LDAP lässt sich theoretisch<br />

sogar <strong>ohne</strong> Kerberos <strong>für</strong> eine<br />

Authentifizierung verwenden. FreeIPA<br />

funktioniert aber als Framework aufeinander<br />

abgestimmter Komponenten.<br />

Das erlaubt den Aufbau eines umfassenden<br />

Identity- <strong>und</strong> Infrastruktur-Management-Systems,<br />

das einen zentral<br />

verwalteten Betrieb sämtlicher Rechner<br />

<strong>und</strong> Dienste in einer FreeIPA-Domäne<br />

über eine webbasierte Administrationsoberfläche<br />

ermöglicht.<br />

FreeIPA ist allerdings derzeit vorrangig<br />

<strong>für</strong> den Betrieb im Red-Hat-Umfeld ausgelegt.<br />

So enthält ein FreeIPA-Benutzerkonto<br />

beispielsweise unter anderem<br />

auch Informationen über die SELinux-<br />

Rolle, die der betreffende Nutzer beim<br />

Zugriff auf eine bestimmte Ressource<br />

erhält – eine Möglichkeit, die ein manuell<br />

konfiguriertes LDAP-basiertes<br />

Login nicht bieten könnte. Es lohnt<br />

sich daher, sich intensiver <strong>mit</strong> FreeIPA<br />

auseinanderzusetzen, denn das freie<br />

Identity-Policy-and-Audit-System wird<br />

eine zentrale Rolle in der kommenden<br />

Version von Red Hat Enterprise Linux 7<br />

spielen <strong>und</strong> da<strong>mit</strong> Vertrauensstellungen<br />

zu einem Active Directory erlauben.<br />

(ofr) n<br />

n Info<br />

n Autor<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31309<br />

Thomas Drilling ist seit mehr als zehn Jahren hauptberuflich<br />

als freier Journalist <strong>und</strong> Redakteur <strong>für</strong> Wissenschafts-<br />

<strong>und</strong> IT-<strong>Magazin</strong>e tätig. Er selbst <strong>und</strong> das<br />

Team seines Redaktionsbüros verfassen regelmässig<br />

Beiträge zu den Themen Open Source, Linux, Server,<br />

IT-Administration <strong>und</strong> Mac OS X. Außerdem arbeitet<br />

Thomas Drilling als Buchautor <strong>und</strong> Verleger, berät<br />

als IT-Consultant kleine <strong>und</strong> <strong>mit</strong>tlere Unternehmen<br />

<strong>und</strong> hält Vorträge zu Linux, Open Source <strong>und</strong> IT-<br />

<strong>Sicher</strong>heit.


58<br />

Security<br />

Crypto-Dateisysteme<br />

alex<strong>mit</strong>, 123RF<br />

Verschlüsselung von Block-Devices<br />

In den Safe<br />

Verschlüsselung ist nach wie vor das wirksamste Mittel gegen fremde Blicke auf eigene Daten. Um den<br />

kompletten Datenträger kryptografisch zu schützen, gibt es <strong>mit</strong> Linux einige Möglichkeiten. Jeff Layton<br />

Für die Verschlüsselung von Daten<br />

gibt es prinzipiell zwei Möglichkeiten:<br />

Hardware-basiert oder rein in Software.<br />

Beide Lösungen lassen sich auch kombinieren,<br />

aber das wäre wohl zuviel des<br />

Guten – angesichts des aktuellen Zeitgeists<br />

vielleicht aber auch nicht.<br />

Hardware-basierte Verschlüsselung<br />

erfordert spezielle Hardware, etwa<br />

eine Self Encrypting Disk (SED). Die<br />

Idee dahinter ist einfach: Der Hersteller<br />

nimmt ein normales Laufwerk, versieht<br />

es <strong>mit</strong> einem Crypto-Prozessor sowie<br />

Authentifizierungsmechanismen in der<br />

Firmware, <strong>und</strong> fertig ist das SED.<br />

Das bringt dem Anwender einige Vorteile:<br />

So ist die Verschlüsselung immer<br />

eingeschaltet, es werden also stets<br />

nur verschlüsselte Daten gespeichert.<br />

Die Authentifizierung ist unabhängig<br />

vom Betriebssystem. Man muss sich<br />

nicht um die Verwaltung der Schlüssel<br />

kümmern, die gleichzeitig nie die<br />

Hardware verlassen. Schließlich ist<br />

auch die Performance sehr gut, da die<br />

Verschlüsselung <strong>und</strong> Entschlüsselung<br />

in Hardware ablaufen. Typischerweise<br />

wird <strong>für</strong> solche Lösungen AES (Advanced<br />

Encryption Standard) <strong>mit</strong> 128 oder<br />

256 Bit verwendet, von dem zumindest<br />

Letzteres ziemlich guten Schutz bietet.<br />

Im praktischen Einsatz sind SEDs oft<br />

ein bisschen umständlich, weil man<br />

sich zum Beispiel erst authentifizieren<br />

muss, bevor das Betriebssystem von<br />

der Platte booten kann. Wenn man also<br />

in einem Netzwerk auf Servern SEDs<br />

einsetzt, können Reboots ziemlich umständlich<br />

werden. Auch SED-Lösungen<br />

sind nicht völlig immun gegen Angriffe,<br />

die meisten erfordern aber physischen<br />

Zugriff auf die Hardware.<br />

Dateien verschlüsselt<br />

Bei Software-Ansätzen gibt es drei<br />

Optionen, Daten zu verschlüsseln:<br />

einzelne Dateien, Verzeichnisse <strong>und</strong><br />

Dateisysteme oder komplette physische<br />

Datenträger. Dateiverschlüsselung<br />

ist ziemlich einfach <strong>und</strong> <strong>mit</strong> diversen<br />

Tools zu bewerkstelligen, etwa Bcrypt,<br />

Ncrypt <strong>und</strong> 7-Zip, die Dateien komprimieren<br />

<strong>und</strong> auf Wunsch <strong>mit</strong> AES-256<br />

verschlüsseln. Das am weitesten verbreitete<br />

Tool ist vermutlich GnuPG, das<br />

Teil jeder Linux-Distribution ist.<br />

Verzeichnisse beziehungsweise Dateisysteme<br />

werden meist über sogenannte<br />

Stacked Filesystems verschlüsselt.<br />

Ansätze wie EncFS <strong>und</strong> eCryptFS<br />

implementieren einen zusätzlichen<br />

Layer über die eigentlich verschüsselten<br />

Daten, der dem Anwender eine unverschlüsselte<br />

Sicht der Dinge bietet.<br />

Verschlüsselung auf Datei- oder Dateisystemebene<br />

bietet die größte Flexibilität,<br />

aber eine Festplatte komplett zu<br />

verschlüsseln, besitzt ebenso Vorteile.<br />

Die dabei eingesetzte Block-Verschlüsselung<br />

macht aus den Daten eine<br />

einzige verschlüsselte Einheit. Ist die<br />

Verschlüsselung aktiviert, verwendet<br />

man das Block-Device wie üblich <strong>und</strong><br />

legt etwa ein Dateisystem darauf an.<br />

Da<strong>mit</strong> ist das Dateisystem automatisch<br />

auch verschlüsselt.<br />

Der große Vorteil dieses Ansatzes liegt<br />

darin, dass die Verschlüsselung alle Da-<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Security<br />

Crypto-Dateisysteme<br />

59<br />

Passphrase ein. Man<br />

sollte sich dazu etwas<br />

Gutes ausdenken, was<br />

man gleichzeitig im<br />

Kopf behalten kann,<br />

aber <strong>für</strong> Angreifer<br />

schwer zu erraten ist,<br />

also am besten keine<br />

bekannten Zitate oder<br />

Ähnliches.<br />

Der nächste Schritt<br />

besteht darin, das<br />

Mapping <strong>für</strong> das Volume<br />

einzurichten <strong>und</strong><br />

sich <strong>mit</strong> dem Deviceten<br />

auf dem Device betrifft. Als Administrator<br />

muss man sie also nur einmal<br />

konfigurieren, da<strong>mit</strong> sie allen Benutzern<br />

zugutekommt. Block-Verschlüsselung<br />

bedeutet, dass nicht nur der Datei-<br />

Inhalt verschlüsselt wird, sondern auch<br />

Datei- <strong>und</strong> Verzeichnisnamen, freier<br />

Speicherplatz <strong>und</strong> Metadaten.<br />

Im weiteren Verlauf dieses Artikels geht<br />

es darum, <strong>mit</strong> Linux-Tools Block-Verschlüsselung<br />

<strong>für</strong> Devices zu implementieren.<br />

Wer das <strong>mit</strong> den eigenen Daten<br />

nachvollziehen möchte, sollte aber daran<br />

denken: Wer seinen Schlüssel oder<br />

die Passphrase vergisst, kann Abschied<br />

von allen auf der verschlüsselten Platte<br />

gespeicherten Daten nehmen!<br />

DMCrypt<br />

Der Device-Mapper ist eine der wichtigsten<br />

Schaltstellen im Linux-Kernel,<br />

der es zum Beispiel ermöglicht, ein<br />

Block-Device auf ein anderes abzubilden.<br />

DMCrypt [1] ist Teil dieses<br />

Frameworks <strong>und</strong> verwendet die<br />

kryptografischen Funktionen der<br />

Crypto-API im Linux-Kernel [2]. Es ist<br />

ein sogenanntes Device-Target, das<br />

sich auf andere Transformationen des<br />

Device-Mappers packen lässt. Dank der<br />

Flexibilität des Device-Mappers ist es<br />

möglich, DMCrypt sozusagen unterhalb<br />

wie auch oberhalb von LVM-Devices<br />

zu nutzen. Da<strong>mit</strong> können komplette<br />

Disks, einzelne Partitionen, aber auch<br />

Software-RAIDs <strong>mit</strong> dieser Technologie<br />

verschlüsselt werden.<br />

Administratoren können das Tool »dmsetup«<br />

verwenden, um das gewünschte<br />

Device-Mapping einzurichten. Ein Beispiel<br />

da<strong>für</strong> ist auf der Konfigurationsseite<br />

der DMCrypt-Homepage zu sehen.<br />

Allerdings ist der Einsatz des Tools<br />

relativ komplex <strong>und</strong> erfordert einiges<br />

an Wissen zum Device-Mapper. Als Alternative<br />

verwenden deshalb viele Administratoren<br />

das Programm »cryptsetup«,<br />

das DMCrypt zusammen <strong>mit</strong> LUKS<br />

(Linux Unified Key Setup) verwendet.<br />

LUKS [3] ist der Standard <strong>für</strong> die Festplattenverschlüsselung<br />

unter Linux <strong>und</strong><br />

bietet ein Standardformat da<strong>für</strong>, das<br />

das Schlüssel-Management erheblich<br />

vereinfacht: Alle nötigen Informationen<br />

stecken im Partitions-Header.<br />

Zum Test haben wir eine Intel X25-E<br />

SLC SSD (64 GByte) <strong>mit</strong> einer einzigen<br />

Partition versehen, die »/dev/sdb1«<br />

heißt. Die Konfiguration findet <strong>mit</strong><br />

»cryptsetup« statt. Der erste Schritt<br />

konfiguriert die LUKS-Partition (Listing<br />

1). Dieser Befehl initialisiert die Volumes<br />

<strong>und</strong> liest die<br />

n Listing 1: LUKS-Partition konfigurieren<br />

Mapper vertraut zu machen (Listing 2).<br />

Für das Mapping muss man bereits die<br />

Passphrase eingeben. Im Beispiel heißt<br />

der Mapper »data«, aber es ist natürlich<br />

auch jeder andere Name möglich. Der<br />

zweite Befehl zeigt das Mapping, das im<br />

Beispiel »dm-0« heißt. Der dritte Aufruf<br />

gibt den Status des gemappten Volumes<br />

aus, einschließlich des Volumes,<br />

des Verschlüsselungsalgorithmus, der<br />

Schlüssellänge, der Anzahl Sektoren<br />

<strong>und</strong> des Mode. Auf Wunsch gibt der<br />

n Listing 2: Volume-Mapping<br />

[root@test8 ~]# cryptsetup ‐y ‐v luksFormat /dev/<br />

sdb1<br />

WARNING!<br />

========<br />

This will overwrite data on /dev/sdb1 irrevocably.<br />

Are you sure? (Type uppercase yes): YES<br />

Enter LUKS passphrase:<br />

Verify passphrase:<br />

Command successful.<br />

[root@test8 ~]# cryptsetup luksOpen /dev/sdb1 data<br />

Enter passphrase for /dev/sdb1:<br />

[root@test8 ~]# ls ‐l /dev/mapper/data<br />

lrwxrwxrwx. 1 root root 7 Sep 28 13:17 /dev/mapper/data ‐> ../dm‐0<br />

[root@test8 ~]# cryptsetup ‐v status data<br />

/dev/mapper/data is active.<br />

type: LUKS1<br />

cipher: aes‐cbc‐essiv:sha256<br />

keysize: 256 bits<br />

device: /dev/sdb1<br />

offset: 4096 sectors<br />

size: 125029736 sectors<br />

mode: read/write<br />

Command successful.<br />

n Listing 3: Dump des LUKS-Header<br />

[root@test8 ~]# cryptsetup luksDump /dev/sdb1<br />

LUKS header information for /dev/sdb1<br />

Version: 1<br />

Cipher name: aes<br />

Cipher mode: cbc‐essiv:sha256<br />

Hash spec: sha1<br />

Payload offset: 4096<br />

MK bits: 256<br />

MK digest: 40 18 71 8f 97 00 9b 83 4f 9b 32 79 31 8d da 74 c8 35<br />

53 f5<br />

MK salt: 84 12 5d dc b8 02 73 fd f3 e0 65 bf 17 ba 40 cb<br />

92 2d e6 7a 50 6f 97 07 33 12 76 92 53 a7 a1 a2<br />

MK iterations: 35750<br />

UUID:<br />

648accb3‐19ce‐4da7‐8fc6‐43ed1dd4a908<br />

Key Slot 0: ENABLED<br />

Iterations: 143012<br />

Salt:<br />

4a 03 0c dd 17 b9 2c fd 3d 39 1e d9<br />

1b 3f c5 33<br />

c7 07 95 bc 46 d9 76 c9 a6 ed a6 fd<br />

19 a1 63 ad<br />

Key material offset: 8<br />

AF stripes: 4000<br />

Key Slot 1: DISABLED<br />

Key Slot 2: DISABLED<br />

Key Slot 3: DISABLED<br />

Key Slot 4: DISABLED<br />

Key Slot 5: DISABLED<br />

Key Slot 6: DISABLED<br />

Key Slot 7: DISABLED<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


60<br />

Security<br />

Crypto-Dateisysteme<br />

n Listing 4: Volume initialisieren<br />

[root@test8 ~]# dd if=/dev/zero of=/dev/mapper/data<br />

dd: writing to `/dev/mapper/data': No space left on<br />

device<br />

125029737+0 records in<br />

125029736+0 records out<br />

64015224832 bytes (64 GB) copied, 2761.06 s, 23.2 MB/s<br />

n Listing 5: Dateisystem anlegen<br />

[root@test8 ~]# mkfs.ext4 /dev/mapper/data<br />

mke2fs 1.41.12 (17‐May‐2010)<br />

Filesystem label=<br />

OS type: Linux<br />

Block size=4096 (log=2)<br />

Fragment size=4096 (log=2)<br />

Stride=0 blocks, Stripe width=0 blocks<br />

3907584 inodes, 15628717 blocks<br />

781435 blocks (5.00%) reserved for the super user<br />

....<br />

n Listing 6: Mounten des Dateisystems<br />

[root@test8 ~]# mkdir /data<br />

[root@test8 ~]# mount /dev/mapper/data /data<br />

[root@test8 ~]# df ‐h<br />

Filesystem<br />

Size Used Avail Use% Mounted on<br />

/dev/sda3 97G 4.8G 87G 6% /<br />

tmpfs 3.6G 512K 3.6G 1% /dev/shm<br />

/dev/sda1 485M 30M 430M 7% /boot<br />

/dev/sda5 355G 24G 313G 7% /home<br />

/dev/mapper/data 59G 180M 56G 1% /data<br />

n Listing 7: Mapping <strong>und</strong> Volume<br />

[root@test8 src]# /usr/bin/truecrypt<br />

‐‐volume‐type=normal ‐c /dev/sdb1<br />

Encryption algorithm:<br />

1) AES<br />

2) Serpent<br />

3) Twofish<br />

4) AES‐Twofish<br />

5) AES‐Twofish‐Serpent<br />

6) Serpent‐AES<br />

7) Serpent‐Twofish‐AES<br />

8) Twofish‐Serpent<br />

Select [1]: 1<br />

Hash algorithm:<br />

1) RIPEMD‐160<br />

2) SHA‐512<br />

3) Whirlpool<br />

Select [1]: 1<br />

Filesystem:<br />

1) None<br />

2) FAT<br />

Befehl »cryptsetup« einen kompletten<br />

Dump des LUKS-Header aus (Listing 3).<br />

Jetzt ist im Prinzip fast alles vorbereitet,<br />

um das Dateisystem anzulegen,<br />

aber erst wird noch das Volume initialisiert,<br />

indem man es <strong>mit</strong> Nullen füllt<br />

(Listing 4). Weil wegen der Verschlüsselung<br />

alle Daten transformiert werden,<br />

landen im Endeffekt zufällige Werte auf<br />

der Festplatte. Jetzt legt ein Befehl wie<br />

in Listing 5 das Dateisystem an.<br />

Nach dem Mounten (Listing 6) können<br />

Anwender das Dateisystem wie gewohnt<br />

verwenden. Alle Dateien werden<br />

automatisch verschlüsselt. Beim Aushängen<br />

des Filesystems gibt es allerdings<br />

einen zusätzlichen Schritt:<br />

# umount /data<br />

# cryptsetup luksClose data<br />

Ohne den letzten Befehl ist es weiterhin<br />

möglich, das Dateisystem <strong>ohne</strong> die Eingabe<br />

der Passphrase zu mounten. Nach<br />

einem »luksClose« führt ein Mount-<br />

Versuch dagegen – wie gewünscht – zu<br />

einer Fehlermeldung: Das Dateisystem<br />

kann nicht gef<strong>und</strong>en werden.<br />

Truecrypt<br />

Bei Truecrypt [4] handelt es sich um<br />

ein sehr beliebtes Tool, das unter<br />

Linux, Windows <strong>und</strong> OS X komplette<br />

Block-Devices verschlüsselt. Die Daten<br />

3) Linux Ext2<br />

4) Linux Ext3<br />

5) Linux Ext4<br />

Select [2]: 5<br />

Enter password:<br />

Re‐enter password:<br />

Enter keyfile path [none]: none<br />

Please type at least 320 randomly chosen<br />

characters and then press Enter:<br />

Characters remaining: 290<br />

Characters remaining: 290<br />

Characters remaining: 181<br />

Characters remaining: 139<br />

Characters remaining: 83<br />

Characters remaining: 47<br />

Characters remaining: 24<br />

Done: 100.000% Speed: 193 MB/s Left: 0 s<br />

The TrueCrypt volume has been successfully<br />

created.<br />

werden dabei ebenfalls verschlüsselt,<br />

bevor sie auf die Festplatte gelangen.<br />

Das Programm bietet eine ganze<br />

Reihe interessanter Features, darunter<br />

Support <strong>für</strong> Hardware-beschleunigte<br />

Verschlüsselung <strong>mit</strong> Intel-AES-NI<br />

<strong>und</strong> Beschleunigung durch die Nutzung<br />

mehrerer Prozessorkerne. Eine<br />

Reihe weiterer Optimierungen wie<br />

Read-​Write-Pipelining sorgen <strong>für</strong> gute<br />

Performance des Systems. Selbst die<br />

Boot-Partition eines Systems kann <strong>mit</strong><br />

Truecrypt verschlüsselt werden. Das<br />

Ganze bekommt man sogar kostenlos<br />

<strong>mit</strong> einer Open-Source-Lizenz.<br />

GUI optional<br />

Truecrypt gibt es <strong>mit</strong> grafischem<br />

Frontend (Abbildung 1) oder als Kommandozeilenprogramm,<br />

wobei selbst<br />

Letzteres sehr einfach zu benutzen<br />

ist. Nach der Installation steht auf der<br />

Kommandozeile das Tool »truecrypt«<br />

zur Verfügung, <strong>mit</strong> dem man zuerst das<br />

Mapping <strong>und</strong> das Volume vorbereitet.<br />

Das umfasst einige Schritte, die in Listing<br />

7 zu sehen sind: Auswahl der Verschlüsselungs-<br />

<strong>und</strong> Hash-Algorithmen,<br />

des eingesetzten Dateisystems, der<br />

Passphrase <strong>und</strong> des Keyfiles [5].<br />

Das Keyfile ist optional, aber es verhilft<br />

beispielsweise zu besserem Schutz<br />

gegen Brute-Force-Attacken. Außerdem<br />

können da<strong>mit</strong> mehrere Benutzer <strong>mit</strong><br />

unterschiedlichen Passwörter ein Volume<br />

mounten. Unabhängig davon verlangt<br />

das Truecrypt-Setup die Eingabe<br />

von 320 zufälligen Buchstaben. Dann<br />

legt es das Dateisystem an, das sich <strong>mit</strong><br />

»truecrypt« mounten lässt.<br />

Truecrypt wickelt das Mapping <strong>und</strong> das<br />

Mounten im Gegensatz zu DMCrypt in<br />

einem Schritt ab. Das ist kein großer<br />

Unterschied, aber trotzdem macht es<br />

die Benutzung von Truecrypt etwas einfacher.<br />

Auch <strong>für</strong> das Unmounten genügt<br />

der »truecrypt«-Befehl.<br />

Faustregeln<br />

DMCrypt <strong>und</strong> TrueCrypt funktionieren<br />

auf die gleiche Weise: Sie verschlüsseln<br />

alle Daten auf einem verschlüsselten<br />

Dateisystem, beispielsweise »/home«,<br />

automatisch. Solange es eingehängt<br />

<strong>und</strong> entschlüsselt ist, haben alle Benutzer<br />

darauf Zugriff. Erst wenn das<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Security<br />

Crypto-Dateisysteme<br />

61<br />

Abbildung 1: Truecrypt gibt es <strong>für</strong> Linux, Windows <strong>und</strong><br />

OS X als Kommandozeilenprogramm oder <strong>mit</strong> GUI.<br />

Dateisystem ausgehängt wird, beispielsweise<br />

beim Systemneustart, ist<br />

das Passwort wieder vonnöten.<br />

Andere Wartungsarbeiten funktionieren<br />

bei den verschlüsselten Dateisystemen<br />

genauso wie bei unverschlüsselten,<br />

beispielsweise der Dateisystem-Check<br />

<strong>mit</strong> »fsck«<br />

<strong>und</strong> Snapshot-<strong>Backup</strong>s.<br />

Die <strong>Sicher</strong>heitskopie bleibt<br />

ebenfalls verschlüsselt,<br />

sodass die Wiederherstellung<br />

dasselbe Entschlüsselungsverfahren<br />

voraussetzt.<br />

Abschließend stellt sich<br />

die Frage, an welcher<br />

Stelle die Verschlüsselung<br />

der eigenen Daten am<br />

besten stattfindet: Bei der<br />

Hardware – wie bei selbstverschlüsselnden<br />

Geräten<br />

(SEDs) –, direkt auf der<br />

Ebene des Dateisystems<br />

oder <strong>für</strong> einzelne Verzeichnisse oder<br />

Dateien?<br />

SEDs <strong>und</strong> Dateisystemverschlüsselung<br />

auf Geräteebene <strong>mit</strong> DMCrypt oder<br />

Truecrypt bieten sich an, wenn ein großer<br />

Teil der Daten verschlüsselt werden<br />

soll. In der Handhabung unterscheiden<br />

sich die beiden Techniken kaum; sie<br />

erfordern beim Einhängen die Eingabe<br />

eines Passworts zur Entschlüsselung<br />

<strong>und</strong> sind anschließend transparent<br />

benutzbar.<br />

Genügt hingegen die Verschlüsselung<br />

einer oder mehrerer einzelner Dateien,<br />

bietet sich die Verwendung eines passwortgeschützten<br />

ZIP-Archivs oder von<br />

GnuPG an. Für ganze Verzeichnisbäume<br />

hingegen empfehlen sich verschlüsselte<br />

Userspace-Dateisysteme wie EncFS [6]<br />

oder eCryptFS [7], das beispielsweise<br />

Ubuntu <strong>für</strong> verschlüsselte Benutzerverzeichnisse<br />

einsetzt. (csc/​ofr) n<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/30808


Peter Bernik, 123RF<br />

OpenStack einfach deployen <strong>mit</strong> Puppet <strong>und</strong> Kickstack<br />

Startvorteil<br />

OpenStack haftet der Ruf an, ein komplexes Konstrukt zu sein, <strong>für</strong> dessen Installation eine Unmenge an<br />

Zeit draufgeht. Das muss nicht sein: Kickstack automatisiert die OpenStack-Installation <strong>und</strong> erleichtert<br />

auch die Wartung. Martin Loschwitz<br />

Regelmäßige <strong>ADMIN</strong>-<strong>Magazin</strong>-Leser<br />

fanden vor einigen Monaten einen<br />

Artikel, der sich ausführlich <strong>mit</strong> der<br />

Frage beschäftigt hat, wie die Installation<br />

von OpenStack funktioniert.<br />

Eine Tatsache hat eben jener Artikel<br />

unter Beweis gestellt: Die OpenStack-<br />

Installation ist keine Kleinigkeit, wenn<br />

man sie manuell absolvieren möchte.<br />

Verschiedene Dienste sind dazu auf<br />

eigene Server zu verteilen, falls kein Allin-One-Setup<br />

gewünscht ist. Verschärft<br />

wird das Problem dadurch, dass viele<br />

Befehle im Rahmen eines Setups von<br />

OpenStack wenig intuitiv sind <strong>und</strong> im<br />

ersten Augenblick auch nur begrenzt<br />

einleuchten. Wer <strong>mit</strong> Technologien<br />

wie Open vSwitch noch nicht gearbeitet<br />

hat, wird viele der Befehle bei der<br />

Installation von OpenStack Neutron<br />

überhaupt nur schwer nachvollziehen<br />

können.<br />

Manuelles Installieren war<br />

gestern<br />

Wer sich schon mal an einer manuellen<br />

OpenStack-Installation versucht hat,<br />

wird festgestellt haben, dass einige<br />

Konfigurationsschritte über die Grenzen<br />

der einzelnen OpenStack-Komponenten<br />

hinweg identisch sind; man<br />

führt also den gleichen Arbeitsschritt<br />

mehrere Male aus. Wer jetzt an Automatisierung<br />

denkt, liegt da<strong>mit</strong> genauso<br />

richtig wie die Admins, die sich die<br />

manuelle Wartung einer kompletten<br />

OpenStack-Installation so oder so nicht<br />

antun wollen.<br />

Genau das ist im Jahre 2013 angesichts<br />

verschiedener Automatisierungswerkzeuge<br />

auch ein legitimer Wunsch. Denn<br />

gerade <strong>Cloud</strong>-Computing-Installationen<br />

müssen ja massiv in die Breite<br />

skalieren können – der perfekte Anwendungsfall<br />

<strong>für</strong> die klassische System-<br />

Automatisierung.<br />

Kickstack ist ein Ansatz zur Lösung<br />

dieses Problems: Es ermöglicht auf<br />

Puppet-Gr<strong>und</strong>lage die sinnvolle <strong>und</strong> effiziente<br />

Administration von OpenStack-<br />

<strong>Cloud</strong>s. Wer innerhalb von 20 Minuten<br />

eine eigene OpenStack-<strong>Cloud</strong> aufsetzen<br />

will, ist hier genau an der richtigen<br />

Stelle.<br />

OpenStack-Automatisierung<br />

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

Kickstack ist im Gr<strong>und</strong>e eine Zusatzschicht,<br />

die sich zwischen den Admin<br />

<strong>und</strong> OpenStack legt. Es nutzt die Puppet-Module,<br />

die bereits seit einiger Zeit<br />

<strong>für</strong> sämtliche Core-Komponenten von<br />

OpenStack existieren. Die Aufgabe, die<br />

Kickstack übernimmt, ist die eigentliche<br />

Automatisierung: Mit den normalen<br />

Puppet-Modulen ließen sich die Dienste<br />

zwar auch automatisiert installieren,<br />

doch wäre dann wieder eine mühsame<br />

Konfiguration verschiedener Parameter<br />

in Puppet notwendig, sodass sich kaum<br />

ein zeitlicher Vorteil ergäbe, besonders<br />

nicht im direkten Vergleich <strong>mit</strong> der Installation<br />

zu Fuß.<br />

Kickstack räumt da<strong>mit</strong> radikal auf: Es<br />

kümmert sich um das Anlegen von<br />

Daten wie Keystone-Benutzern automatisch,<br />

sorgt da<strong>für</strong>, dass sämtliche<br />

Dienste der OpenStack-Umgebung<br />

passwortgesichert <strong>mit</strong> ihrer Datenbank<br />

kommunizieren <strong>und</strong> stellt auch sicher,<br />

dass die OpenStack-Dienste auf den<br />

ihnen vom Admin zuvor zugewiesenen<br />

Hosts laufen. Aus einer Vielzahl von Parametern,<br />

aus denen der Admin bei den<br />

Puppet-Modulen wählen kann, filtert<br />

Kickstack die wichtigsten Parameter<br />

heraus <strong>und</strong> erledigt den Rest automatisch.<br />

Dabei bedient es sich eines eigens eingeführten<br />

Rollensystems, das verschiedenen<br />

Maschinen einer OpenStack-Installation<br />

eine eigene Rolle zuweist<br />

– um die Motivation hinter diesem<br />

Umstand zu verstehen, ist ein kleiner<br />

Ausflug in die Ideen notwendig, die<br />

OpenStack ausmachen.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Basics<br />

Kickstack<br />

63<br />

Rollen <strong>und</strong> Dienste in<br />

OpenStack<br />

Wer in den letzten Monaten regelmäßig<br />

die Berichterstattung dieser Zeitschrift<br />

zum Thema OpenStack verfolgt hat,<br />

der weiß: OpenStack ist nicht ein großes<br />

Programm sondern eine Sammlung,<br />

die aus verschiedenen Komponenten<br />

besteht. Dieser Umstand ist von<br />

elementarer Bedeutung, um die Funktionsweise<br />

von Kickstack oder Packstack<br />

zu verstehen. Denn um OpenStack<br />

sinnvoll zu deployen, ist es notwendig,<br />

in Rollen zu denken <strong>und</strong> nicht in einzelnen<br />

Komponenten.<br />

Die folgende Gegenüberstellung macht<br />

das deutlich – aktuell setzt sich Open-<br />

Stack aus neun Kernkomponenten<br />

zusammen:<br />

n Keystone, der Autentifizierungsdienst,<br />

der die Benutzeranmeldung<br />

<strong>und</strong> auch die Anmeldung der<br />

Dienste untereinander ermöglicht.<br />

n Horizon, das Dashboard, das erst in<br />

Kombination <strong>mit</strong> einem Webserver<br />

sinnvoll nutzbar ist.<br />

n Nova , die Computing-Komponente,<br />

die sich um das Starten, Stoppen<br />

<strong>und</strong> das Steuern virtueller Maschinen<br />

kümmert.<br />

n Cinder, der Block-Storage-Dienst,<br />

der virtuelle Maschinen innerhalb<br />

von OpenStack <strong>mit</strong> virtuellem, persistenten<br />

Block-Speicher versorgt.<br />

n Glance, der Image-Dienst, der Abbilder<br />

von Betriebssystemen sowohl<br />

verwaltet als auch je nach Bedarf<br />

an die Hypervisor-Knoten ausliefern<br />

kann.<br />

n Neutron, der Netzwerkdienst, der<br />

sämtliche Aufgaben r<strong>und</strong> um Software<br />

Defined Networking (SDN) in<br />

OpenStack erledigt.<br />

n Ceilometer, die Metering-Komponente,<br />

die <strong>mit</strong> dem Release Havana<br />

Einzug gef<strong>und</strong>en hat <strong>und</strong> das detaillierte<br />

Aufzeichnen von Verkehrsdaten<br />

ermöglicht.<br />

n Heat, das <strong>für</strong> Orchestrierung innerhalb<br />

einer OpenStack-<strong>Cloud</strong> sehr<br />

nützlich ist <strong>und</strong> Admins viel Arbeit<br />

abnimmt.<br />

n Swift, die Object-Store-Komponente,<br />

die in OpenStack-<strong>Cloud</strong>s<br />

einen <strong>mit</strong> Amazon S3 vergleichbaren<br />

Speicher-Dienst anbietet.<br />

Der Haken an der Sache ist, dass selbst<br />

die genannten Komponenten keine einzelnen<br />

Programme sind, sondern sich<br />

wiederum in mehrere Module aufteilen.<br />

Praktisch jeder Dienst in OpenStack<br />

hat eine eigene API-Komponente, die<br />

eine Restful-API exponiert <strong>und</strong> so da<strong>für</strong><br />

sorgt, dass der Dienst überhaupt erst<br />

per HTTP-Protokoll steuerbar wird. Aus<br />

technischer Sicht kann es durchaus<br />

sinnvoll sein, diese APIs auch in das<br />

Internet zu exponieren. So macht es<br />

beispielsweise Rackspace <strong>mit</strong> der eigenen<br />

OpenStack-<strong>Cloud</strong>. Dann kommt es<br />

allerdings zu einem Setup, bei dem die<br />

einzelnen Module der Komponenten<br />

auf verschiedene Systeme aufgeteilt<br />

sind. Denn dort, wo die API-Komponenten<br />

laufen, laufen nicht zwangsläufig<br />

oder sinnvollerweise auch die anderen<br />

Komponenten.<br />

Eine weitere Fraktionierung findet statt,<br />

wenn einzelne Teile einer OpenStack-<br />

Komponente zwangsläufig auf mehrere<br />

Systeme aufzuteilen sind. Der Dienst<br />

»cinder‐volume« beispielsweise ist die<br />

Schnittstelle, die VMs auf Hypervisor-<br />

Systemen <strong>mit</strong> dem zugewiesenen<br />

persistenten Speicher verbindet. Der<br />

Dienst wird also auf den Hosts laufen,<br />

wo der Platz auf den Platten zur Verfügung<br />

steht. »cinder‐scheduler« wird<br />

meist auf einem anderen Host laufen<br />

– die Komponente koordiniert den<br />

Zugriff auf mehrere Storage-Backends,<br />

wenn diese konfiguriert sind. Und<br />

dann gibt es noch die Dienste, die innerhalb<br />

einer OpenStack-Installation<br />

mehrere Male vorhanden sein müssen:<br />

»nova‐compute«, das im Auftrag von<br />

Nova virtuelle Maschinen startet, ist<br />

da<strong>für</strong> ein gutes Beispiel.<br />

Rollen statt Programme<br />

Offensichtlich wäre es nicht besonders<br />

sinnvoll, die Dienste, die zu OpenStack<br />

gehören, als einzelne Gruppen auf<br />

verschiedene Rechner zu verteilen.<br />

Kickstack nutzt deshalb einen anderen<br />

Ansatz <strong>und</strong> geht davon aus, dass sich<br />

innerhalb einer OpenStack-Installation<br />

quasi ab Werk eine Vielzahl verschiedener<br />

Rollen definieren lässt. Jede Rolle<br />

ist durch eine spezifische Kombination<br />

aus Diensten gekennzeichnet. Es<br />

empfiehlt sich, das Gruppenschema<br />

nachzuvollziehen, bevor die Arbeit <strong>mit</strong><br />

Kickstack losgeht, denn das Rollensystem<br />

ist in Kickstack zentral. Die folgenden<br />

Rollen kennt Kickstack ab Werk:<br />

n Infrastructure Node: Dieses System<br />

betreibt die Hilfsdienste <strong>für</strong> Open-<br />

Stack: RabbitMQ sowie MySQL.<br />

n API Node: Auf diesem Knoten laufen<br />

zentral die API-Dienste sämtlicher<br />

Komponenten.<br />

n Network Node: Der Netzwerkknoten<br />

betreibt die Neutron-Teile, die <strong>für</strong><br />

die DHCP- <strong>und</strong> L3-Verbindungen verantwortlich<br />

sind <strong>und</strong> VMs so den Zugriff<br />

auf die Außenwelt ermöglichen.<br />

n Auth Node: Dieser Knoten betreibt<br />

Keystone, den ID-Dienst, der quasi<br />

so etwas wie der Wurzel-Service in<br />

OpenStack ist – <strong>ohne</strong> ihn sind die<br />

anderen Komponenten nicht sinnvoll<br />

einzusetzen.<br />

n Compute Node: Enthält im Wesentlichen<br />

»nova‐api« <strong>und</strong> macht einen<br />

Host, dem diese Puppet-Rolle zugewiesen<br />

ist, zum Computing-Knoten,<br />

n Kickstack versus Packstack<br />

Kickstack ist nicht das einzige Werkzeug, das das<br />

automatische Deployment von OpenStack <strong>mit</strong>tels<br />

Puppet ermöglicht. Red Hat arbeitet beispielsweise<br />

zur gleichen Zeit an Packstack, das ganz ähnliche<br />

Ziele verfolgt. Warum gibt es <strong>für</strong> diese Aufgabe zwei<br />

unterschiedliche Tools?<br />

Die Antwort auf diese Frage ist die klassische Open-<br />

Source-Antwort: Es gibt mehr als einen Weg, etwas<br />

zu tun. Im Falle von Packstack <strong>und</strong> Kickstack ergeben<br />

sich obendrein merkliche Unterschiede hinsichtlich<br />

der Funktionen. Denn Packstack ist zumindest augenblicklich<br />

Red-Hat-spezifisch: Das Werkzeug steht<br />

in enger Verbindung zu Red Hats eigener OpenStack-<br />

Distribution namens RDO [1] <strong>und</strong> ist maßgeblich auf<br />

dieses zugeschnitten.<br />

Kickstack im Gegenzug setzt eher auf die klassische<br />

Ubuntu-Umgebung, die auf der Ubuntu-LTS-Version<br />

12.04 aufsetzt <strong>und</strong> jeweils aus dem Repository des<br />

Ubuntu-<strong>Cloud</strong>-Teams <strong>mit</strong> den neuesten OpenStack-<br />

Versionen versorgt wird. Ob <strong>und</strong> wenn ja wann eines<br />

der beiden Werkzeuge dahingehend erweitert wird,<br />

neben der angestammten Distribution auch andere<br />

Systeme zu unterstützen, steht derzeit in den Sternen;<br />

bis dahin tun Admins gut daran, das richtige<br />

Werkzeug <strong>für</strong> die richtige Aufgabe auszuwählen. Am<br />

Ende setzen Packstack <strong>und</strong> Kickstack ja eh auf die<br />

gleichen Puppet-Module, die von denselben Entwicklern<br />

gepflegt werden.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


64<br />

Basics<br />

Kickstack<br />

Kommandozeilen-Clients <strong>für</strong> die<br />

verschiedenen OpenStack-Dienste<br />

installiert, also die Binaries wie<br />

»glance« <strong>und</strong> »nova«. OpenStack<br />

selbst nutzt im Hintergr<strong>und</strong> <strong>ohne</strong>hin<br />

die Python-Bibliotheken. Die Client-<br />

Rolle lässt sich sinnvoll auf dem<br />

Knoten anwenden, der auch die API-<br />

Rolle inne hat.<br />

Abbildung 1: Ein Run des Puppet-Agents auf den eigentlichen Servern führt zur Anwendung der<br />

festgelegten Regeln.<br />

Abbildung 2: Die Modul-Liste vom Puppet-Master<br />

macht deutlich, dass Kickstack maßgeblich auf die<br />

OpenStack-Puppet-Module setzt.<br />

der virtuelle Maschinen betreiben<br />

kann.<br />

n Dashboard Node: Der Dashboard-<br />

Knoten betreibt einen Apache <strong>mit</strong><br />

Dashboard. Er ist von den API-Diensten<br />

getrennt.<br />

n Metering Node: Der Knoten betreibt<br />

jene Dienste, die direkt zur Metering-<br />

Applikation Cinder gehören (ausgenommen<br />

ist die API).<br />

n Orchestration Node: Die Rolle<br />

enthält alle benötigten Dienste <strong>für</strong><br />

OpenStack Heat <strong>mit</strong> Ausnahme der<br />

API.<br />

n Controller Node: Diese Rolle umfasst<br />

verschiedene Dienste <strong>für</strong> den<br />

internen OpenStack-Gebrauch, die<br />

sich aus Teilen verschiedener Services<br />

zusammensetzen; sie ist üblicherweise<br />

auf dem gleichen Host<br />

beheimatet, wie die Infrastructure-<br />

Rolle.<br />

n Storage Node: Enthält die Komponenten,<br />

die notwendig sind, da<strong>mit</strong><br />

ein Host seinen lokalen Speicher <strong>für</strong><br />

Cinder zur Verfügung stellen kann,<br />

im Wesentlichen also »cinder‐volume«.<br />

n Client Node: Die Besonderheit<br />

dieser Rolle ist, dass sie sämtliche<br />

Freies Kombinieren<br />

Aus den bezeichneten Node-Rollen<br />

lässt sich in Kickstack eine Mixtur verschiedener<br />

Knoten erstellen, wobei<br />

sich alle Rollen beliebig kombinieren<br />

lassen. Auch sogenannte All-in-One-Installationen<br />

sind dabei durchaus möglich;<br />

dabei würden einem einzelnen<br />

Knoten sämtliche Rollen auf einmal<br />

zugewiesen. Sehr praxisbezogen wäre<br />

das allerdings nicht, denn der Trend<br />

geht durchaus dorthin, in OpenStack<br />

verschiedene Knoten-Typen zu definieren,<br />

die anschließend spezifische<br />

Aufgaben wahrnehmen.<br />

Und noch ein Hinweis: Verschiedene<br />

Rollen lassen sich natürlich auch mehreren<br />

Knoten gleichzeitig zuweisen; es<br />

wäre unsinnig, wäre nur ein Hypervisor-<br />

Knoten möglich. Die »Compute«-Rolle<br />

lässt sich deshalb einer beliebigen Zahl<br />

von Knoten zuweisen.<br />

Kickstack-Installation<br />

Die gr<strong>und</strong>sätzliche Funktionsweise von<br />

Kickstack basiert elementar auf diesen<br />

definierten Rollen. Im Web-Interface<br />

des Puppet-Masters fügt der Admin die<br />

Knoten, die Kickstack verwalten soll,<br />

der passenden Gruppe hinzu <strong>und</strong> weist<br />

den einzelnen Knoten anschließend die<br />

gewünschten Rollen auch per Web-Interface<br />

zu. Auf dem Knoten selbst fehlt<br />

dann bloß noch der Agent <strong>für</strong> Puppet,<br />

der die definierte Knoten-Konfiguration<br />

umsetzt (Abbildung 1). Da<strong>mit</strong> dieser<br />

Ablauf funktionieren kann, braucht<br />

es aber erstmal eine funktionierende<br />

Kickstack-Installation, <strong>und</strong> die wiederum<br />

braucht zwangsläufig Puppet.<br />

Eine passende<br />

Laborumgebung<br />

Wer das in diesem Artikel beschriebene<br />

Beispiel-Setup nachbauen möchte,<br />

braucht da<strong>für</strong> keine Unmengen an<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Basics<br />

Kickstack<br />

65<br />

Hardware: Die vorgestellte Installation<br />

passt problemlos in vier virtuelle Maschinen<br />

auf Gr<strong>und</strong>lage von Ubuntu in<br />

der LTS-Version 12.04. Eine Maschine<br />

stellt dabei den Puppet-Master, sie<br />

heißt im Beispiel einfach »puppet«.<br />

Die drei anderen Rechner, die auf die<br />

Namen Alice, Bob <strong>und</strong> Charlie hören,<br />

betreiben die eigentliche OpenStack-Installation.<br />

Konkret nutzt dieses Beispiel<br />

VMs, die per VirtualBox zur Verfügung<br />

gestellt werden; weniger als ein Gigabyte<br />

RAM sollte keiner der Maschinen<br />

zur Verfügung stehen – natürlich gilt: Je<br />

mehr RAM, desto besser.<br />

Wer Blech zur Verfügung hat, kann ein<br />

Setup dieser Art freilich auch auf echter<br />

Hardware nachbauen <strong>und</strong> dann realitätsnah<br />

OpenStack testen. Die einzige<br />

Einschränkung dabei ist, dass Charlie in<br />

einem solchen Szenario drei Netzwerkanschlüsse<br />

haben sollte, Bob mindestens<br />

zwei sowie Alice einen (diese Anforderung<br />

hängt <strong>mit</strong> dem OpenStack-<br />

Netzwerkdienst Neutron zusammen<br />

<strong>und</strong> ist nicht Kickstack-spezifisch).<br />

Abbildung 3: Das Puppet-Dashboard zeigt eine Übersicht über die Kickstack-Gruppe sowie deren<br />

wichtigste Konfigurationsparameter <strong>und</strong> die beteiligten Knoten.<br />

Schritt 1: Puppet-Master <strong>und</strong><br />

Puppet-Nodes<br />

Um eine Kickstack-Installation wie im<br />

Beispiel zu betreiben, sollte am Anfang<br />

das Setup der Puppet-Infrastruktur<br />

stehen. Das Beispiel setzt auf eine klassische<br />

Puppet-Architektur aus einem<br />

Master-Server <strong>und</strong> Clients auf, die von<br />

eben jenem Master ihre Konfiguration<br />

erhalten. Der Admin stellt <strong>für</strong> solch ein<br />

Setup zunächst sicher, dass die Hosts<br />

sich untereinander per funktionierendem<br />

DNS erreichen <strong>und</strong> dass die Hostnamen<br />

der Maschinen auch korrekt im<br />

DNS eingetragen sind. Nach der Installation<br />

empfiehlt es sich, die bei Ubuntu<br />

nach der Puppet-Installation vorhandene<br />

»/etc/puppet/puppet.conf« zu bearbeiten.<br />

Dabei sollten Puppet-Reports<br />

aktiviert <strong>und</strong> das Speichern der Puppet-Informationen<br />

in eine Datenbank<br />

aktiviert werden. Wichtig im Kickstack-<br />

Kontext ist auch, »Exported Resources«<br />

explizit einzuschalten. Der benötigte<br />

Konfigurationsparameter da<strong>für</strong> lautet<br />

»storeconfigs=true«, allerdings weisen<br />

die Puppet-Entwickler darauf hin, dass<br />

neue Nutzer besser PuppetDB nutzen<br />

sollten, die den gleichen Effekt produziert<br />

<strong>und</strong> ebenfalls »Exported Resources«<br />

unterstützt.<br />

Ist der Puppet-Master hergerichtet,<br />

folgen die eigentlichen Nodes; sie<br />

benötigen ebenfalls eine »puppet.<br />

conf«, die sie anweist, sich <strong>mit</strong> dem<br />

Puppet-Master zu verbinden. Dann fehlen<br />

noch die <strong>für</strong> Kickstack benötigten<br />

OpenStack-Module: Diese finden sich<br />

fast durchgehend auf PuppetForge, von<br />

wo aus sie un<strong>mit</strong>telbar zu installieren<br />

sind (Abbildung 2). Ausnahmen bilden<br />

die Module <strong>für</strong> Neutron [2] <strong>und</strong> Open<br />

vSwitch [3]. Ebenfalls ist das Modul <strong>für</strong><br />

Glance per Hand zu installieren, weil<br />

die zu Redaktionsschluss auf Puppet-<br />

Forge zur Verfügung stehende Version<br />

einen lästigen Bug hatte. Das neue Modul<br />

gibt es unter [4].<br />

Schritt 2 <strong>und</strong> 3: Kickstack<br />

Die jeweils aktuelle Version von<br />

Kickstack finden Admins direkt auf<br />

GitHub unter [5] oder in PuppetForge.<br />

Sobald das Modul samt Abhängigkeiten<br />

installiert ist, kann es losgehen.<br />

Die vormals beschriebenen Node-<br />

Rollen sind sinnvoll auf die Knoten,<br />

die zur Verfügung stehen, zu verteilen.<br />

Das Beispiel folgt einer eher konservativen<br />

Aufteilung: Während Charlie der<br />

Netzwerk-Knoten wird, der alle Teile<br />

von Neutron außer der Neutron-API<br />

betreibt, stellt Bob den Computing-<br />

Knoten dar, der die entsprechende<br />

Rolle hat. Alle anderen Rollen landen<br />

auf Alice, die den Löwenanteil der Arbeit<br />

verrichtet.<br />

Das folgende Beispiel geht davon aus,<br />

dass die einzelnen Knoten nach der<br />

Installation von Kickstack auf dem<br />

Puppet-Master bereits vom Admin zum<br />

Teil der Puppet-Installation gemacht<br />

worden sind. In diesem Falle tauchen<br />

sie nach dem Admin-Login in Puppet-<br />

Dashboard unter<br />

»Nodes« auf.<br />

Ein Klick auf<br />

»Groups« oben<br />

führt zur einzigen<br />

angelegten Gruppe<br />

<strong>mit</strong> dem Namen<br />

»kickstack« – Knoten,<br />

die im Rahmen<br />

von Kickstack<br />

Aufgaben in der<br />

<strong>Cloud</strong> übernehmen,<br />

sollten Mitglied<br />

dieser Gruppe<br />

sein (Abbildung<br />

3). Ein Klick auf<br />

»kickstack« gefolgt<br />

Abbildung 4: Sind alle<br />

Node-Rollen zugewiesen,<br />

ist das über die Klassenübersicht<br />

links im Puppet-<br />

Dashboard erkenntlich.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


66<br />

Basics<br />

Kickstack<br />

von einem weiteren Klick auf »Edit« bieten<br />

die Möglichkeit, Knoten zur Gruppe<br />

hinzuzufügen. Das Editier-Fenster <strong>für</strong><br />

die Gruppe bietet zudem Zugriff auf die<br />

wichtigsten Einstellungen bezüglich<br />

der OpenStack-<strong>Cloud</strong>: Soll beispielsweise<br />

innerhalb von OpenStack vollvirtualisiert<br />

werden (also nur <strong>mit</strong> Qemu,<br />

aber <strong>ohne</strong> KVM), so ist der Eintrag im<br />

Feld » kickstack_nova_compute_libvirt_type«<br />

der richtige Ansatzpunkt<br />

hier<strong>für</strong>. Von großer Bedeutung sind<br />

auch die Einträge <strong>für</strong> »kickstack_nic_<br />

external«, » kickstack_nic_management«<br />

<strong>und</strong> »kickstack_nic_data«: Sie<br />

legen fest, auf welchen Netzwerk-Interfaces<br />

welche Netzwerk-Typen liegen.<br />

OpenStack kennt<br />

n das Management-Netzwerk, das die<br />

einzelnen Dienste auf den Knoten<br />

direkt <strong>mit</strong>einander verbindet,<br />

n das Data-Netzwerk, über das der<br />

Traffic zwischen VMs wandert, die in<br />

der <strong>Cloud</strong> laufen sowie<br />

n das externe Netzwerk, das eine Verbindung<br />

<strong>für</strong> die virtuellen Maschinen<br />

<strong>mit</strong> der Außenwelt herstellt.<br />

Wer Kickstack <strong>und</strong> OpenStack in virtuellen<br />

Maschinen ausprobiert, legt die<br />

Netzwerk-Interfaces der VMs sinnvollerweise<br />

gleich so an, dass sie diesem<br />

Schema entsprechen; bei Blech sind die<br />

Abbildung 5: Nach der Installation von OpenStack per Kickstack ist es nötig, <strong>für</strong> den<br />

»admin«-Tenant ein Netzwerk anzulegen.<br />

Abbildung 6: Gut zu erkennen sind die OpenStack-Dienste, deren Konfiguration von Kickstack<br />

stammt.<br />

Parameter der Kickstack-Gruppe unter<br />

Umständen anzupassen. Falls sich die<br />

Werte nicht einheitlich <strong>für</strong> alle Knoten<br />

anpassen lassen, weil zum Beispiel der<br />

Netzwerkknoten eine andere NIC <strong>für</strong><br />

das Management-Netzwerk als der API-<br />

Knoten nutzt, lassen sich die Parameter<br />

im nächsten Schritt übrigens auch pro<br />

Knoten anpassen. Besonders wichtig<br />

dabei ist der Parameter »kickstack_cinder_lvm_pv«<br />

<strong>für</strong> den Knoten, auf dem<br />

die »Storage«-Rolle landet – im Beispiel<br />

also Alice: Kickstack macht aus dem<br />

dort angegebenen Device automatisch<br />

ein Logical Volume in LVM, um es danach<br />

<strong>für</strong> Cinder zu nutzen. Passt die<br />

Konfiguration der Kickstack-Gruppe,<br />

geht es weiter <strong>mit</strong> den Rollen.<br />

Schritt 4: Rollen zuweisen<br />

Ein Klick auf »Nodes« im Puppet-Dashboard<br />

führt direkt zu den einzelnen Einträgen<br />

der Knoten, die Puppet kennt.<br />

Ein Klick auf einen Knotennamen sowie<br />

ein anschließender Klick auf »Edit« führen<br />

zum Konfigurationsdialog dieses<br />

Knotens.<br />

Die vorletzte Checkbox unten markiert<br />

die Klassen, zu der ein Knoten sich<br />

zugehörig fühlt: Per Auto-Completion<br />

lassen sich hier die entsprechenden<br />

Rollen zuweisen. Für Charlie ist das<br />

»kickstack::node::network« <strong>und</strong> <strong>für</strong><br />

Bob »kickstack::node::compute«; alle<br />

anderen Rollen landen bei Alice. Am<br />

Ende steht eine Reihe von Aufrufen des<br />

Puppet-Agents auf Alice, Bob sowie<br />

Charlie an. Falls die Puppet-Agents dort<br />

nicht <strong>ohne</strong>hin im Daemon-Modus <strong>und</strong><br />

dauerhaft laufen, müssen gegebenenfalls<br />

mehrere Puppet-Runs hintereinander<br />

folgen, um alle Rollen sinnvoll<br />

anzuwenden (zur Erinnerung: Puppet<br />

versteht Abhängigkeiten, führt also pro<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Basics<br />

Kickstack<br />

67<br />

Puppet-Run nur die Aufgaben aus, die<br />

nicht von einer unerfüllten Abhängigkeit<br />

betroffen sind).<br />

Das war’s: Nach den abschließenden<br />

Puppet-Runs findet sich im Dashboard<br />

auf der linken Seite einerseits die Information,<br />

dass nun jede Rolle innerhalb<br />

der Kickstack-Klasse einmal vergeben<br />

ist (Abbildung 4). Und OpenStack selbst<br />

läuft bereits: Das OpenStack-Dashboard<br />

ist unter »http://IP-des-Dashboard‐Knotens/<br />

horizon« zu finden, im<br />

konkreten Beispiel von Alice also unter<br />

»http:// 192. 168. 122. 111/ horizon«. Die<br />

<strong>für</strong> den Login benötigten Zugangsdaten<br />

finden sich im File »openstackrc«, das<br />

auf dem Knoten <strong>mit</strong> der Auth-Rolle<br />

in »/root« liegt. Eine Aufgabe nimmt<br />

Kickstack dem Admin allerdings nicht<br />

ab: Das Anlegen von Netzwerken in<br />

Neutron – das lässt sich entweder per<br />

Skript oder per Dashboard im Nachhinein<br />

manuell erledigen. Gleiches gilt<br />

<strong>für</strong> das Einspielen eines Images – zum<br />

Testen empfiehlt sich CirrOS [6].<br />

Fazit<br />

Kickstack ist eine willkommene Abwechslung<br />

<strong>für</strong> alle, die OpenStack<br />

gerne ausprobieren möchten, aber die<br />

aufwendige <strong>und</strong> sehr komplexe Installation<br />

scheuen. Denn die weicht bei<br />

Kickstack der Installation von Puppet<br />

sowie der benötigten Kickstack-Module.<br />

Tatsächlich lässt sich ein gr<strong>und</strong>legendes<br />

Puppet-Setup bestehend<br />

aus einem Master sowie mehreren<br />

Puppet-Clients verhältnismäßig schnell<br />

aufziehen. Obendrein ist die Konfiguration<br />

der einzelnen Knoten zu Open-<br />

Stack-Maschinen über das in Puppet<br />

integrierte Dashboard deutlich komfortabler<br />

als das manuelle Einrichten der<br />

Dienste. Und wer seine OpenStack-Installation<br />

später um zusätzliche Rechner<br />

erweitern möchte, tut das ebenfalls im<br />

GUI per Mausklick (Abbildung 6).<br />

Wer OpenStack übrigens unter Nutzung<br />

von Kickstack ausprobieren <strong>und</strong><br />

testen möchte, kann das auch auf<br />

Gr<strong>und</strong>lage fertiger VM-Abbilder tun, die<br />

<strong>für</strong> VirtualBox unter [8] zur Verfügung<br />

stehen. In diesen ist die Puppet-Master-<br />

Client-Installation bereits fertig, sodass<br />

direkt nach dem Starten der VMs alle<br />

Kickstack-Funktionen zur Verfügung<br />

stehen. Vom Importieren der Abbilder<br />

bis zur fertigen kleinen OpenStack-<br />

<strong>Cloud</strong> sind es auf aktuellen Rechnern<br />

so gerade ein paar Minuten.<br />

Allerdings ist <strong>für</strong> Kickstack das Ende der<br />

Fahnenstange noch nicht erreicht, was<br />

wünschenswerte Features angeht: Insbesondere<br />

das Thema Hochverfügbarkeit<br />

kommt bei der Lösung derzeit noch<br />

zu kurz; das ist einerseits dem Umstand<br />

geschuldet, dass das OpenStack-Projekt<br />

selbst erst eine Vorstellung entwickeln<br />

musste, wie es Hochverfügbarkeit<br />

denn umsetzen wollte, <strong>und</strong> andererseits<br />

auch dadurch zu erklären, dass<br />

die typischen HA-Werkzeuge wie Pacemaker<br />

derzeit eher schlecht als recht in<br />

Puppet integriert sind. (jcb) n<br />

n Info<br />

n Autor<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31280<br />

Martin Gerhard Loschwitz arbeitet als Principal<br />

Consultant bei hastexo. Er beschäftigt sich dort intensiv<br />

<strong>mit</strong> den Themen HA, Distributed Storage <strong>und</strong><br />

OpenStack. In seiner Freizeit pflegt er Pacemaker <strong>für</strong><br />

Debian.<br />

n Design-Entscheidung: Puppet oder Chef?<br />

Die Frage, ob Setups lieber auf Puppet oder auf Chef setzen sollten, hat<br />

<strong>mit</strong>tlerweile die Qualität eines Glaubenskrieges erreicht. Ãhnlich hitzige<br />

Debatten sind sonst nur <strong>mit</strong> den Ur-Admin-Themen zu erreichen – also<br />

Vi versus Emacs, Ubuntu versus Debian <strong>und</strong> Java oder kein Java. Im<br />

Falle von Kickstack hat Florian Haas Puppet gewählt. Auch Packstack,<br />

das Red-Hat-Gegenstück zu Kickstack, setzt auf Puppet. Warum setzen<br />

die OpenStack-Entwickler <strong>und</strong> <strong>mit</strong> OpenStack arbeitende Firmen offensichtlich<br />

auf Puppet <strong>und</strong> vernachlässigen Chef?<br />

Am gr<strong>und</strong>sätzlichen Design beider Lösungen kann es kaum liegen, denn<br />

zwar arbeiten Chef <strong>und</strong> Puppet unter der Haube anders, erreichen aber<br />

letztlich das gleiche Ziel. Beide Systeme setzen auf eine Architektur aus<br />

Servern <strong>und</strong> Clients, beide setzen auf eine eigene Syntax, wenn es darum<br />

geht, Befehle zu definieren.<br />

Die Arbeitsabläufe unter der Haube unterscheiden sich freilich dahingehend,<br />

dass Puppet sich selbst um die Abhängigkeiten einzelner Arbeitsschritte<br />

kümmern kann, während Chef diese Funktion nicht beherrscht.<br />

Bei Puppet ist es also möglich, durch einen entsprechenden Eintrag<br />

im Manifest festzulegen, dass Schritt A vor Schritt B zu erfolgen hat – in<br />

Chef müssen Schritt A <strong>und</strong> Schritt B in der richtigen Reihenfolge im<br />

Cookbook stehen, sonst steigt Chef aus.<br />

Dieses System der »Eventual Consistency« hat Be<strong>für</strong>worter sowie erbitterte<br />

Gegner – im OpenStack-Kontext fallen die Unterschiede aber kaum<br />

auf, können also nicht der ausschlaggebende Punkt da<strong>für</strong> sein, dass<br />

Auto-Deployment-Umgebungen <strong>für</strong> OpenStack derzeit nur in Form von<br />

Puppet-Lösungen bestehen. Der Gr<strong>und</strong> ist letztlich viel banaler: Puppet<br />

ist insgesamt deutlich besser an OpenStack gekoppelt, als Chef es ist.<br />

Ein Blick auf die <strong>für</strong> Puppet zur Verfügung stehenden Module macht<br />

das sehr deutlich: Für alle Core-Komponenten finden sich im Internet<br />

Module auf dem neuesten Stand, die regelmäßig gepflegt werden <strong>und</strong><br />

so letztlich den größten Teil der benötigten Funktionen bereits selbst<br />

umfassen.<br />

Chef ist im Vergleich dazu deutlich im Hintertreffen, denn zwar sind<br />

Module <strong>für</strong> einige der Kernkomponenten vorhanden, aber offiziell ist<br />

von diesem Code nichts, außerdem fehlen Module <strong>für</strong> wichtige Teile wie<br />

den Netzwerkdienst Neutron. Dass Erweiterungen wie Packstack <strong>und</strong><br />

Kickstack auf Puppet setzen, hat also maßgeblich da<strong>mit</strong> zu tun, dass<br />

hier einfach deutlich mehr Vorarbeit bereits geschehen ist, als bei Chef.<br />

Aber keine Panik: Wer sich <strong>mit</strong> Puppet partout nicht anfre<strong>und</strong>en möchte<br />

<strong>und</strong> eher auf Chef setzt, dürfte in absehbarer Zeit Abhilfe durch Suse<br />

erhalten.<br />

Denn zusammen <strong>mit</strong> einigen Entwicklern von Dell arbeitet Suse gerade<br />

massiv an Crowbar, das auf Chef aufbaut <strong>und</strong> ebenfalls eine Lösung<br />

werden soll, die automatische OpenStack-Deployments ermöglicht. Im<br />

Vergleich zu Kickstack <strong>und</strong> Packstack kommt Crowbar sogar <strong>mit</strong> einigen<br />

Zusatzteilen wie einem vorkonfigurierten Nagios daher. Nähere Details<br />

zu Crowbar finden sich auf [7].<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


norebbo, 123RF<br />

Benutzer- <strong>und</strong> Log-Daten unter Linux verwalten<br />

Zu Protokoll<br />

Verschiedene Werkzeuge <strong>für</strong> die Verwaltung von Log-Dateien <strong>und</strong> Usern behalten die Rahmendaten <strong>und</strong><br />

<strong>Sicher</strong>heitsaspekte eines Linux-System im Blick. Bruce Byfield<br />

Unix <strong>und</strong> Linux wurden von Beginn an<br />

als Mehrbenutzersysteme entwickelt.<br />

Das erklärt die Vielzahl von Kommandos,<br />

die sich <strong>mit</strong> Protokollen <strong>und</strong><br />

Benutzerinformationen befassen <strong>und</strong><br />

häufig erste Hinweise auf Einbruchsversuche<br />

geben. In einer größeren Umgebung<br />

finden sie außerdem heraus,<br />

Abbildung 1: »adduser« fügt <strong>mit</strong> einem Kommandozeilenassistenten<br />

Benutzerkonten hinzu.<br />

welche Ressourcen in Benutzung sind<br />

<strong>und</strong> ob alle User das tun, was sie tun<br />

sollten.<br />

User hinzufügen<br />

Die meisten Linux-Administratoren<br />

kennen den Befehl »adduser« (Abbildung<br />

1). Er stellt einen Assistenten zur<br />

Verfügung, der ein<br />

neues Benutzerkonto<br />

anlegt. Er kümmert<br />

sich auch um Aufgaben<br />

wie die Vergabe einer<br />

User ID (UID), obwohl<br />

beispielsweise die<br />

Optionen wie »‐‐gid<br />

ID« <strong>und</strong> »‐‐shell SHELL«<br />

eigene Gruppen-IDs<br />

<strong>und</strong> Benutzer-Shells<br />

definieren.<br />

Alternativ kommt das<br />

etwas weniger komfortable<br />

Kommando<br />

»useradd« zum Einsatz.<br />

Im Gegensatz zu<br />

»adduser« fehlt ihm<br />

der Assistent, da<strong>für</strong><br />

ändert es aber die Informationen eines<br />

bereits existierenden Benutzers. Beide<br />

Befehle haben außerdem Gegenstücke<br />

zum Löschen von Benutzerkonten: »deluser«<br />

<strong>und</strong> »userdel«. Sie ähneln sich<br />

in puncto Funktionalität, nehmen aber<br />

unterschiedliche Optionen entgegen.<br />

»userdel« kennt anders als »deluser«<br />

beispielsweise die Option »‐f«<br />

oder »‐‐force«, um <strong>ohne</strong> Nachfrage<br />

zu löschen. Es verwendet außerdem<br />

»‐r« oder »‐‐remove«, um <strong>mit</strong> einem<br />

Benutzerkonto auch dessen Home-<br />

Verzeichnis <strong>und</strong> Druckerwarteschlangen<br />

zu löschen; bei »deluser« erzielt<br />

»‐‐remove‐home« diesen Effekt.<br />

Benutzerinformationen im<br />

Protokoll<br />

Linux protokolliert zahlreiche Informationen<br />

über jeden Aspekt des Systems;<br />

dazu zählen auch die Benutzer. Viele<br />

Log-Dateien liegen im reinen Textformat<br />

vor <strong>und</strong> lassen sich so <strong>mit</strong> den<br />

Befehlen »less« <strong>und</strong> »cat« ansehen. Wer<br />

deren Entwicklung verfolgen möchte,<br />

behält neu hinzukommende Einträge<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Basics<br />

Logging-Tools<br />

69<br />

»faillog«<br />

Die Datenbank in »/var/​log/​faillog«<br />

speichert die fehlgeschlagenen Login-<br />

Versuche aller Benutzer. Das zugehörige<br />

Kommando »faillog« hat zwei Ausgabemodi.<br />

Zunächst gibt es die Fehl<strong>mit</strong><br />

dem Befehl »tail ‐f« dauerhaft im<br />

Auge.<br />

Andere Protokolle werden als binäre<br />

Datenbanken gespeichert. Sie verfügen<br />

meist über spezielle Programme zum<br />

Betrachten, die auf denselben Namen<br />

wie die jeweiligen Protokolldateien<br />

selbst hören.<br />

»lastlog«<br />

Die Datei »/var/​log/​lastlog« speichert<br />

die Login-Aktionen. Der zugehörige<br />

Befehl »lastlog« gibt eine vollständige<br />

Liste aller im System vorhandenen Benutzer<br />

aus. Das schließt solche Konten<br />

ein, die nur von speziellen Daemons<br />

verwendet werden, beispielsweise<br />

»syslog«; gelöschte Benutzer erscheinen<br />

nicht mehr.<br />

Für jeden Benutzer gibt »lastlog« die<br />

verwendete Schnittstelle an, also etwa<br />

»tty« <strong>für</strong> ein lokales Terminal oder<br />

»pty« <strong>für</strong> ein Pseudo-Terminal wie beim<br />

SSH-Login übers Netzwerk. Dahinter<br />

erscheint das Datum des letzten Logins<br />

oder »Noch nie angemeldet«, falls sich<br />

ein User mindestens seit der letzten<br />

Passwortänderung nicht eingeloggt<br />

hat.<br />

Der Parameter »‐u« oder »‐‐user« beschränkt<br />

die Ausgabeliste auf einen<br />

bestimmten Benutzer. Das Argument<br />

nimmt statt eines Benutzernamens<br />

auch einen Bereich von Benutzer-IDs<br />

entgegen:<br />

root@nanday:~# lastlog ‐u1000‐1005<br />

Benutzername Port Von Letzter<br />

bruce<br />

**Noch nie U<br />

angemeldet**<br />

bb tty2 Mo Nov 18 16:51:33U<br />

+0100 2013<br />

Die Ergebnisse lassen sich auch <strong>mit</strong><br />

»‐b« oder »‐‐before« anpassen. Da<strong>mit</strong><br />

gibt »lastlog« nur Einträge aus, die mindestens<br />

eine bestimmte Anzahl von Tagen<br />

zurückliegen. Als Gegenstück dazu<br />

dient »‐t« oder »‐‐time«, woraufhin nur<br />

Einträge auftauchen, die weniger als<br />

die angegebene Anzahl von Tagen zurückliegen.<br />

versuche <strong>mit</strong> Anzahl <strong>und</strong> letzten Datum<br />

aus, <strong>mit</strong> »‐a« <strong>für</strong> alle <strong>und</strong> <strong>mit</strong> »‐u« <strong>für</strong><br />

einen bestimmten Benutzer. Diese Statistiken<br />

weisen den Administrator etwa<br />

auf Einbruchsversuche hin oder zeigen<br />

ihm an, dass er automatisch gesperrte<br />

Benutzerkonten gegebenenfalls reaktivieren<br />

muss.<br />

root@nanday:~# faillog ‐u bruce<br />

Login Fehlver. Maximum Letzter<br />

Auf<br />

bruce 0 0 01/01/70<br />

01:00:00 +0100<br />

Falls es <strong>für</strong> einen Benutzer noch keinen<br />

gescheiterten Login-Versuch gab,<br />

erscheint als Datum die früheste dem<br />

System bekannte Zeit, normalerweise<br />

»01/​01/​70 01:00:00 +0100«.<br />

Eine automatische Sperrung ordnet<br />

man <strong>mit</strong> »faillog ‐m« <strong>und</strong> einer Zahl an.<br />

Abbildung 2: Die Datei »auth.log« speichert Login- <strong>und</strong> Logout-Vorgänge.<br />

Abbildung 3: Je nach Distribution enthält »/var/​log/​user.log« systemweite <strong>Sicher</strong>heitshinweise.


70<br />

Basics<br />

Logging-Tools<br />

Abbildung 4: Der Befehl »who« sammelt nicht nur Informationen über eingeloggte Benutzer, sondern<br />

auch über das System.<br />

Abbildung 5: »id« zeigt reale <strong>und</strong> effektive Benutzer- <strong>und</strong> Gruppen-IDs.<br />

Erreicht die Zahl der fehlgeschlagenen<br />

Login-Versuche <strong>für</strong> einen Account diese<br />

Anzahl, sperrt das System den Account.<br />

Diese Zahl stellen die meisten Distributionen<br />

auf 0 <strong>und</strong> da<strong>mit</strong> die automatische<br />

Sperrung ab. Die Option »‐r«<br />

oder »‐‐reset« setzt die Hürde <strong>für</strong> ein<br />

bestimmtes Benutzerkonto auf 0.<br />

»auth.log« <strong>und</strong> »user.log«<br />

Die Datei »/var/​log/​auth.log« speichert<br />

alle Arten von Authorisierungsvorgängen.<br />

Das umfasst Logins <strong>und</strong> Logouts<br />

seit dem letzten Start des Systems<br />

(Abbildung 2) <strong>und</strong> dient zur Analyse<br />

typischer Verhaltensmuster sowie verdächtiger<br />

Abweichungen.<br />

Je nach Distribution landen neben<br />

den An- <strong>und</strong> Abmeldungen auch Warnungen<br />

in der Datei »auth.log«, die auf<br />

mögliche <strong>Sicher</strong>heitsprobleme hinweisen.<br />

Manche Linux-Varianten speichern<br />

diese in der separaten Datei »/var/​log/​<br />

user.log« (Abbildung 3).<br />

Benutzer zu Befehl<br />

Die meisten Linux-Kommandos zur<br />

Benutzerverwaltung stammen noch<br />

aus der Vor-Linux-Ära <strong>und</strong> sind zu Unix-<br />

Frühzeiten entstanden. Ihr historisches<br />

Alter macht sich im Alltag nur noch<br />

oberflächlich bemerkbar, etwa daran,<br />

dass sie häufig nicht über Argumente<br />

im GNU-Standard <strong>mit</strong> zwei Bindestrichen<br />

verfügen, sondern ausschließlich<br />

über die Unix-typischen <strong>mit</strong> einem Bindestrich<br />

<strong>und</strong> einem Buchstaben.<br />

Zwar steht der Benutzernamen bei den<br />

meisten Distributionen im Kommandozeilenprompt,<br />

aber gerade bei Kontowechseln<br />

etwa <strong>mit</strong> »su ‐« kann der<br />

Überblick verloren gehen. In diesem<br />

Fall gibt der Befehl »whoami« wieder<br />

Orientierung.<br />

»who«<br />

Der Befehl »who« führt <strong>ohne</strong> weitere<br />

Optionen alle Benutzer außer »root«<br />

auf, die momentan im System eingeloggt<br />

sind, sowie Zeit <strong>und</strong> Datum<br />

ihres Logins. Wenn Benutzer mehrere<br />

Terminals gleichzeitig verwenden,<br />

erscheinen sie in der Liste mehrfach.<br />

Die Option »‐q« oder »‐‐count« fasst die<br />

Anzahl der User-Logins zusammen. Die<br />

in Tabelle 1 gezeigten Optionen lassen<br />

sich kombinieren (Abbildung 4).<br />

»id«<br />

Der reale Linux-Benutzername entspricht<br />

dem beim Login verwendeten.<br />

Der Wechsel zwischen den Identitäten<br />

etwa <strong>mit</strong> »sudo« oder »su ‐« kann allerdings<br />

zu einem davon abweichenden<br />

effektiven Benutzernamen führen. Das<br />

Kommando »id« gibt beide preis (Abbildung<br />

5).<br />

Ohne weitere Optionen gibt »id« die<br />

reale Benutzer-ID <strong>für</strong> den eingeloggten<br />

n Tabelle 1: Optionen <strong>für</strong> den »who«-Befehl<br />

n Info Kurzoption Lange Option Beschreibung<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31568<br />

-d --dead Tote Prozesse<br />

Account aus <strong>und</strong> dazu die Gruppen, zu<br />

denen dieser gehört. Die Option »‐a«<br />

hingegen führt zur effektiven ID, die<br />

auch von »whoami« ausgegeben wird.<br />

Der Unterschied zwischen realer <strong>und</strong><br />

effektiver ID zeigt sich allerdings in allen<br />

Fällen nur, wenn der Benutzer auch<br />

über verschiedene Logins verfügt.<br />

In ähnlicher Weise zeigt das Argument<br />

»‐g« oder »‐‐group« die ID der benutzereigenen<br />

Gruppe an, während »‐G« oder<br />

»‐‐groups« die IDs aller Gruppen wiedergibt,<br />

denen der Benutzer angehört.<br />

»groups«<br />

Wie der Name bereits andeutet, liest<br />

»groups« die Datei »/etc/​group« aus<br />

<strong>und</strong> zeigt darin enthaltene Informationen<br />

an. Ohne Zusatzoptionen führt das<br />

Programm Informationen zum aktiven<br />

Benutzer an, allerdings lässt sich ein<br />

anderer Account abfragen, indem man<br />

»groups« dessen Namen als Argument<br />

übergibt.<br />

»finger«<br />

Viele Distributionen erfordern die Installation<br />

des Pakets »finger«, bevor der<br />

gleichnamige Befehl »finger« zur Verfügung<br />

steht. Dann gibt »finger« gefolgt<br />

von einem Benutzernamen Auskunft<br />

über dessen Konto <strong>mit</strong> Informationen<br />

wie letztem Login, Home-Verzeichnis,<br />

<strong>und</strong> Standard-Shell. Ohne Angabe<br />

eines speziellen Accounts gibt das Programm<br />

<strong>für</strong> alle Benutzer des Systems<br />

eine einzeilige Zusammenfassung aus.<br />

»w«<br />

Das wohl einfachste Kommando zum<br />

Einholen von Benutzerinformationen<br />

hat nur einen Buchstaben: »w«. Es zeigt<br />

die angemeldeten Benutzer <strong>und</strong> den<br />

von ihnen aktuell gestarteten Prozess.<br />

Ein zusätzlich angegebener Benutzername<br />

schränkt die Ausgabe auf dessen<br />

Konto ein. (csc) n<br />

-b --boot Zeit des letzten Systemstarts<br />

-p --process Alle aktiven Prozesse<br />

-r --runlevel Aktueller Runlevel<br />

-t --time Zeit der letzten Änderung der Systemzeit<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


72<br />

Basics<br />

<strong>ADMIN</strong>-Tipps<br />

Die Tipps des Monats<br />

<strong>ADMIN</strong>-Tipps<br />

Pavel Ignatov, 123RF<br />

Hier finden Sie eine Auswahl der im wöchentlichen <strong>ADMIN</strong>-Newsletter erscheinenden Praxistipps.<br />

n Vom Ubuntu-Desktop zum Server<br />

Ubuntu Linux erscheint in verschiedenen Varianten. Für den Admin<br />

genügt in der Regel die Server-Ausgabe. Sie unterscheidet<br />

sich in wichtigen Details, dennoch ist <strong>für</strong> einen nachträglichen<br />

Wechsel eine Neuinstallation überflüssig. Wer eine Maschine <strong>mit</strong><br />

installiertem Desktop zum Server umrüsten möchte, deinstalliert<br />

zunächst das Paket »ubuntu-desktop« sowie alle davon abhängigen<br />

Pakete. Diese lassen sich <strong>mit</strong> einer Verkettung von grep <strong>und</strong><br />

sed automatisch auslesen. Der vollständige Befehl lautet so:<br />

$ sudo apt‐get remove ubuntu‐desktop $(apt‐cache show ubuntu‐desktop<br />

| grep "^Depends:" | sed "s/^Depends: //" | sed "s/,//g")<br />

Als Argument <strong>für</strong> »apt-get remove«<br />

folgt neben »ubuntudesktop«<br />

das Ergebnis von<br />

»apt-cache show ubuntudesktop«,<br />

aus dem »grep«<br />

<strong>und</strong> »sed« die Abhängigkeiten<br />

extrahieren <strong>und</strong> ins<br />

richtige Format bringen. Als<br />

Resultat entfernt »apt-get«<br />

Grafikbibliotheken, Oberflächen,<br />

Login-Manager,<br />

Xorg <strong>und</strong> alle verwandten<br />

Pakete.<br />

Danach folgt die Installation<br />

der Server-typischen<br />

Pakete. Anders als bei der Desktop-Edition erfolgt die Auswahl<br />

über das Programm »tasksel«, das man <strong>mit</strong><br />

$ sudo apt‐get install tasksel<br />

installiert <strong>und</strong> <strong>mit</strong> dem Befehl<br />

sudo tasksel<br />

aufruft. In der Eingabemaske erfolgt die Installation des Tasks<br />

»Basic Ubuntu Server« sowie darüber hinaus benötigte Server-<br />

Pakete wie »OpenSSH Server«, »LAMP Server«, »Tomcat Server«<br />

<strong>und</strong> so weiter. Vor Version 12.04 verwendete die Server-Version<br />

außerdem einen anderen Kernel, doch inzwischen setzt Ubuntu<br />

auf dem Desktop <strong>und</strong> dem Server denselben ein.<br />

Mit dem Basic Ubuntu Server erreicht unter anderem das Paket<br />

»unattended-upgrades« das System, das auf Wunsch Aktualisierungen<br />

automatisch einspielt. Einerseits sollte man dabei<br />

Vorsicht walten lassen, denn ein unbeaufsichtigtes Update legt<br />

im schlimmsten Fall einen Produktivserver lahm. Andererseits<br />

ist es auch ein effektiver Weg, um das System auf dem aktuellen<br />

Stand zu halten <strong>und</strong> <strong>Sicher</strong>heitslücken schnell zu schließen. In<br />

der Voreinstellung installiert »unattended-upgrades« deshalb<br />

nur sicherheitsrelevante Updates automatisch. Die anderen Kategorien<br />

»updates«, »proposed« <strong>und</strong> »backports« aktiviert man,<br />

indem man in »/etc/​apt/​apt.conf.d/​50unattended-upgrades« die<br />

Kommentarzeichen vor den entsprechenden Zeilen entfernt.<br />

neue Tipps im Newsletter<br />

Jede Woche erscheint in unserem Newsletter ein neuer <strong>ADMIN</strong>-Tipp. Eine Sammlung aller Tipps<br />

finden Sie im Archiv der <strong>ADMIN</strong>-Tipps unter [http:// www. admin‐magazin. de/ News/ Tipps/].<br />

Den Newsletter können Sie unter [http:// www. admin‐magazin. de/ newsletter] abonnieren.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Test<br />

OpenSuse 13.1<br />

73<br />

Das neue OpenSuse 13.1<br />

Grün ist<br />

die Hoffnung<br />

marigranula, 123RF<br />

Nach längerer Zeit gibt es jetzt wieder ein OpenSuse-Release <strong>mit</strong><br />

mehreren Jahren Support. Den leistet aber nicht Suse selbst, sondern<br />

ein Community-Projekt. Oliver Frommel<br />

Die Firma Suse hat eine bewegte<br />

Vergangenheit hinter sich. Als Linux-<br />

Pionier in Deutschland angetreten,<br />

wurde Suse im Jahr 2004 von Novell<br />

aufgekauft, was nicht unbedingt zur<br />

allseitigen Zufriedenheit verlaufen ist.<br />

Seit Novell 2011 von Attachmate gekauft<br />

wurde, ist Suse wieder eigenständig<br />

<strong>und</strong> agiert <strong>mit</strong> alter Frische auf dem<br />

Enterprise-Linux-Markt [1]. Parallel<br />

dazu produziert die Firma regelmäßig<br />

die Community-Distribution OpenSuse,<br />

die unter einer komplett freien Lizenz<br />

verfügbar ist.<br />

Mitte November ist nun OpenSuse 13.1<br />

erschienen, das <strong>für</strong> Linux-Fans eine<br />

Anzahl an Neuerungen bereithält <strong>und</strong><br />

dieser <strong>ADMIN</strong>-Ausgabe beiliegt. Aktualisiert<br />

wurde der Linux-Kernel auf Version<br />

3.11.6, der zum Beispiel effektiver<br />

<strong>mit</strong> Speicher umgeht als ältere Versionen.<br />

Der Mechanismus, um verwendete<br />

Speicherseiten wieder neu zu nutzen,<br />

wurde optimiert. Das soll da<strong>für</strong> sorgen,<br />

dass das System bei I/​O-intensiven Anwendungen<br />

besser reagiert.<br />

Dateisysteme<br />

Ebenfalls <strong>für</strong> bessere Performance<br />

sorgt eine neue Einrichtung namens<br />

Zswap [2], die Speicherseiten komprimiert,<br />

die auf die Festplatte ausgelagert<br />

werden sollen (Swap). Der Kernel<br />

legt sie im Hauptspeicher ab, bevor er<br />

sie selektiv auf den Plattenspeicher<br />

swappt. Dies soll die Zahl der aufwendigen<br />

I/​O-Operationen reduzieren.<br />

Weitere Verbesserungen im I/​O-Bereich<br />

sind in diverse Dateisysteme wie Btrfs<br />

eingeflossen. Ext4 kann kleine Dateien<br />

nun direkt in den Inodes speichern,<br />

während es <strong>für</strong> XFS Checksummen auf<br />

Metadaten <strong>und</strong> das Journal gibt. Mit<br />

F2FS (Flash-Friendly File System) ist sogar<br />

ein komplett neues Dateisystem <strong>für</strong><br />

Flash-Speicher enthalten [3]. Das von<br />

Suse eingesetzte Init-System Systemd<br />

arbeitet nun <strong>mit</strong> Udev zusammen, was<br />

da<strong>für</strong> sorgt, dass Ethernet-Karten über<br />

Reboots hinweg einheitliche Namen<br />

erhalten.<br />

Natürlich kommt auch OpenSuse nicht<br />

an Virtualisierung <strong>und</strong> <strong>Cloud</strong> Computing<br />

vorbei. Die Entwickler haben die<br />

Pakete r<strong>und</strong> um den KVM-Hypervisor<br />

umstrukturiert, dessen Userspace-<br />

Tools nun in den Qemu-Paketen enthalten<br />

sind. Alternativ bietet OpenSuse<br />

auch noch den Hypervisor Xen in Version<br />

4.1, der jetzt per Default <strong>mit</strong> dem<br />

LibXL-Layer <strong>und</strong> dem Management-Tool<br />

XL zusammenarbeitet [4]. Vom <strong>Cloud</strong>-<br />

Computing-Framework OpenStack ist<br />

das neueste Release „Havana“ enthalten,<br />

das ein Artikel im letzten <strong>ADMIN</strong>-<br />

Heft näher beleuchtet [5].<br />

OpenSuse 13.1 bringt eine Version der<br />

MySQL-Datenbank <strong>mit</strong>, die stärkere<br />

Verschlüsselung <strong>und</strong> Performance-<br />

Verbesserungen der InnoDB-Storage-<br />

Engine enthält. Alternativ gibt es als<br />

Datenbanken noch den MySQL-Fork<br />

MariaDB <strong>und</strong> PostgreSQL. Auch der<br />

Apache-Webserver liegt nun in der<br />

aktuellen Version 2.4 bei. Das Logging<br />

verschiedener Prozesse wurde etwas<br />

vereinheitlicht, zum Beispiel finden<br />

sich die Meldungen des Java-Application-Servers<br />

Tomcat nun im Syslog.<br />

Nicht alles klappt<br />

Zur Integration in Windows-Netzwerke<br />

enthält OpenSuse die Version 4.1 des<br />

Samba-Servers. Allerdings funktioniert<br />

es <strong>mit</strong> dieser Version nicht, einen Domain<br />

Controller in der Art von Active<br />

Directory zu betreiben, weil die Integration<br />

<strong>mit</strong> dem da<strong>für</strong> nötigen Kerberos-Paket<br />

fehlt. Deshalb ist die Domain-<br />

Controller-Funktion deaktiviert.<br />

Wer neue Features wie die aktuelle<br />

KVM-Version, Xen, OpenStack oder<br />

einen neuen Kernel ausprobieren<br />

möchte, sollte einen Blick auf Open-<br />

Suse 13.1 werfen. Allerdings sollte man<br />

sich im Klaren darüber sein, dass bei<br />

dem aktuellen Release noch nicht alles<br />

perfekt r<strong>und</strong> läuft. Auf der anderen<br />

Seite hat die Evergreen-Community<br />

angekündigt, noch über die normale<br />

Laufzeit hinaus Support <strong>für</strong> die neue<br />

Distribution zu leisten, der sich da<strong>mit</strong><br />

auf insgesamt drei Jahre erstreckt. n<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31579<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


Konstantin Sutyagin, 123RF<br />

Enterprise-SSDs im Vergleich<br />

Besonders belastbar<br />

Die Datenmenge wächst explosionsartig. Daraus folgt direkt, dass die Geschwindigkeit im Umgang <strong>mit</strong><br />

diesen Daten ebenfalls zunehmen muss. Ein Weg dahin sind SSDs anstelle von Festplatten. Wir haben<br />

Modelle getestet, die sich <strong>für</strong> den harten Rechenzentrumseinsatz eignen sollen. Jens-Christoph Brendel<br />

n Info<br />

Eine Schwierigkeit, auf die wir bei<br />

unserem SSD-Test stießen, sei vorweggenommen:<br />

„Enterprise“ ist ein Begriff,<br />

dessen Dehnbarkeit sich das Marketing<br />

durchaus zunutze macht. Wir hatten<br />

uns vorgenommen, Flash-Speicher <strong>für</strong><br />

den Unternehmenseinsatz zu testen,<br />

die sich bewusst von Consumer-Modellen<br />

abgrenzen (siehe auch Kasten<br />

„Enterprise-SSDs – was ist das?“).<br />

Allerdings differieren die Abstände<br />

der diversen PRO- oder Business-SSDs<br />

von den Ausgaben <strong>für</strong> Endverbraucher<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31376<br />

immer noch in beträchtlichem Maß. Sie<br />

reichen beispielsweise von einer Widerstandsfähigkeit<br />

gegenüber Schreiboperationen<br />

von etlichen Tausend Terabyte<br />

(wie bei OCZ Deneva 2) bis zum völligen<br />

Fehlen einer solchen Angabe in der<br />

Spezifikation (wie bei Samsung 840<br />

PRO).<br />

Dabei ist genau diese Beständigkeit<br />

einer der Knackpunkte. Im Unterscheid<br />

dazu bewegt sich beispielsweise die<br />

Performance aller Modelle in einem<br />

überschaubaren Korridor: Das beweisen<br />

sowohl die Herstellerangaben wie<br />

auch unsere eigenen Messergebnisse.<br />

Sollen die SSDs aber nicht in einem<br />

Notebook, sondern beispielsweise in<br />

einem Storage Array eingesetzt werden,<br />

das r<strong>und</strong> um die Uhr Schreiboperationen<br />

zu verkraften hat, dann wird<br />

die Fähigkeit, diese Last <strong>mit</strong> geringem<br />

Verschleiß zu bewältigen, wichtiger als<br />

eine Handvoll MByte mehr oder weniger<br />

bei der Leseleistung pro Sek<strong>und</strong>e.<br />

Dazu kommt: Selbst wenn Messwerte<br />

angegeben werden, sind es nicht<br />

immer dieselben <strong>und</strong> stimmt die Methodik<br />

ihrer Erhebung nicht immer<br />

überein. So geben die einen einen Wert<br />

<strong>für</strong> die Datenmenge vor, die maximal<br />

auf den Speicher geschrieben werden<br />

kann, bevor er seine Funktion verliert<br />

– TBW, Total Bytes Written –, wogegen<br />

andere lieber die Anzahl Program-​<br />

Erase-Zyklen melden, die das Laufwerk<br />

verkraftet. Bei den Performance-<br />

Werten werden <strong>für</strong> das wahlfreie Lesen<br />

<strong>und</strong> Schreiben meistens 4K-, manchmal<br />

aber auch 8K-Blöcke verwendet,<br />

manchmal wird die Größe einer vorgeschalteten<br />

Queue (Queue Depth) angegeben,<br />

manchmal nicht <strong>und</strong> so weiter.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Test<br />

Enterprise-SSDs<br />

75<br />

Immerhin streben alle hier getesteten Modelle eine besondere<br />

Beständigkeit, hohe Performance <strong>und</strong> überdurchschnittliche Datensicherheit<br />

an <strong>und</strong> wollen sich da<strong>mit</strong> dem Geschäftsk<strong>und</strong>en im<br />

weitesten Sinn empfehlen.<br />

OCZ Deneva 2 R Series<br />

Das Deneva-2-Modell von OCZ, das uns zum Test zur Verfügung gestellt<br />

wurde, fasst 400 GByte. Diese eMLC-SSD orientiert sich klar<br />

am Enterprise-Einsatz: Der Hersteller gibt die Schreib-Endurance<br />

<strong>mit</strong> sagenhaften 76 PByte an, das sind über einen Zeitraum von<br />

fünf Jahren mehr als 40 TByte pro Tag <strong>und</strong> zehnmal so viel wie bei<br />

der MLC-Variante desselben Modells. Da<strong>mit</strong> ist dieser Wert <strong>für</strong> die<br />

Beständigkeit gegenüber Schreibvorgängen auch der <strong>mit</strong> Abstand<br />

höchste im gesamten hier getesteten Feld.<br />

Überhaupt sollen sich hier Zuverlässigkeit <strong>und</strong> Performance, <strong>Sicher</strong>heit<br />

<strong>und</strong> ökonomische Kriterien treffen. Auf Wunsch lassen<br />

sich die Daten auf der SSD <strong>mit</strong> AES verschlüsseln, wenn auch nur<br />

<strong>mit</strong> 128 Bit. Das Medium arbeitet <strong>mit</strong> einer DataWrite-Assurance-<br />

Technologie, die garantiert, dass im Zugriff befindliche Daten auch<br />

bei einem Stromausfall noch gespeichert werden können. Ein<br />

ausgeklügelter Fehlerkorrektur-Mechanismus repariert bis zu 55 Bit<br />

pro 512-Byte-Sektor.<br />

Die Rate nicht korrigierbarer Lesefehler (Read Unrecoverable Bit<br />

Error Rate (UBER)) liegt bei 10-17, das heißt, das komplette Drive<br />

kann durchschnittlich mehr als 290mal komplett gelesen werden,<br />

bis es einmal zu einem solchen Fehler kommt. Die Mean Time Between<br />

Failure (MTBF) beläuft sich auf 2 Millionen St<strong>und</strong>en, ein im<br />

Vergleich hoher Wert.<br />

In unserem Benchmark lag die Deneva 2 im vorderen Feld der Probanden<br />

(Abbildung 1), wo sie sich <strong>mit</strong> steigender Last den Silberrang<br />

erkämpfte. Wie bei allen Testteilnehmern deuten die Herstellerangaben<br />

zur Performance (Tabelle 1) darauf hin, dass man unter<br />

optimalen Bedingungen auch noch höhere Werte erreichen kann,<br />

als wir diesmal <strong>ohne</strong> spezielle Anpassung unserer Testumgebung<br />

messen konnten.<br />

Intel DC 3500 Series<br />

Die SSD von Intel bietet neben hoher Performance <strong>und</strong> geringen<br />

Latenzen (typischerweise 50 Mikrosek<strong>und</strong>en) auch besondere<br />

Vorkehrungen gegen Fehler <strong>und</strong> die Verfälschung von Daten<br />

im NAND-Speicher wie auch im zugehörigen SRAM- <strong>und</strong> DRAM-<br />

Memory. Dazu zählen zyklische Red<strong>und</strong>anz-Checks (CRC), Parity-<br />

Checks <strong>und</strong> die LBA-Tag-Validation. Erkannte Fehler werden un<strong>mit</strong>telbar<br />

korrigiert. Wie die meisten Drives ist zudem auch dieses<br />

gegen plötzlichen Stromausfall gesichert – es kann in diesem Fall<br />

Schreiboperationen noch abschließen.<br />

Die hier verbauten MLC-NANDs in aktueller 20-nm-Technology verbrauchen<br />

nicht mehr als 1,3 Watt Strom (im Leerlauf nur 650 mW).<br />

Dabei sollen sie nach Herstellerangaben lesend bis zu 500 MByte<br />

Daten pro Sek<strong>und</strong>e transferieren können. Das ist zwar kein Spitzenwert,<br />

doch sind die Unterschiede in dieser Disziplin auch nicht sehr<br />

groß. Da<strong>für</strong> sind 2 Millionen St<strong>und</strong>en MTBF ein guter Wert <strong>und</strong> auch<br />

der Preis kann sich sehen lassen, wenn man bedenkt, dass das<br />

Laufwerk ausdrücklich <strong>für</strong> den 24/​7-Betrieb zertifiziert ist.<br />

Auf der <strong>Cloud</strong> Expo 13 hat Intel ein Software-basiertes SAN auf<br />

Basis des 800-GByte-Modells der 3500-Series-SSD vorgestellt. Bei<br />

Abbildung 1: Die Benchmark-Resultate der einzelnen SSDs im Test.<br />

einer Kapazität von 17 TByte lieferte es 250 000 IOPS.<br />

Mit herkömmlichen Festplatten hätte man da<strong>für</strong> 1250<br />

Disks <strong>mit</strong> 15 000 U/​min gebraucht, die zusammen 18,75<br />

KW Strom verbraucht hätten. Die SSDs waren <strong>mit</strong> insgesamt<br />

650 Watt zufrieden.<br />

Kingston SSDnow E100<br />

Die SSD von Kingston eignet sich ebenfalls <strong>für</strong> den<br />

24/7-Betrieb: Der Hersteller garantiert 30 000 P/​E-<br />

Zyklen <strong>und</strong> da<strong>mit</strong> etwa die zehnfache Lebensdauer<br />

einer typischen Consumer-SSD. Ein Wert <strong>für</strong> die maximal<br />

schreibbare Datenmenge wird nicht angegeben.<br />

Trotzdem dürfte sich die Schreib-Endurance in der Größenordnung<br />

einpegeln, die auch OCZ garantiert. Das<br />

schlägt sich in einem ähnlichen Gigabyte-Preis nieder.<br />

n Die Benchmarks<br />

Wir haben alle SSDs in einem kleinen Server <strong>mit</strong> einem SATA-III-<br />

Controller von Asus (U3S6) unter Windows getestet. Einerseits hat<br />

dieses Setup den Nachteil, dass man da<strong>mit</strong> nicht die absolut höchsten<br />

Transferraten erreicht, weil das Zusammenspiel von SSD-Controller,<br />

SATA-Controller <strong>und</strong> Southbridge des Mainboard-Chipsatzes nur in<br />

ausgewählten Fällen optimal funktioniert. Besser wäre dann unter<br />

Umständen der direkte Anschluss der SSD an einen in das Mainboard<br />

integrierten SATA-Controller. Andererseits ist ein nicht vollkommen<br />

optimiertes Setup wahrscheinlich praxisnäher <strong>und</strong> die Benchmark-<br />

Ergebnisse spiegeln eher die Leistungswerte wider, die man außerhalb<br />

von Laboren im realen Leben erreicht. In Tabelle 1 geben wir dennoch<br />

zusätzlich die maximalen Leistungswerte an, die wir in den Datenblättern<br />

der Hersteller gef<strong>und</strong>en haben.<br />

Fair waren die Bedingungen allemal: Jeder Proband absolvierte die<br />

Benchmarks unter identischen Bedingungen. Gemessen haben wir<br />

hauptsächlich <strong>mit</strong> Iometer. Dabei steigerten wir die Last in dreiminütigen<br />

Läufen (<strong>mit</strong> 30 Sek<strong>und</strong>en Einschwingzeit) schrittweise von einem<br />

bis zu 30 Worker-Prozessen. Jeder Worker war auf diese Zugriffs-Charakteristik<br />

eingestellt: 100 Prozent sequenzielles Lesen, ausgerichtet an<br />

4K-Grenzen, <strong>mit</strong> 64 KByte Blockgröße (Abbildung 1).<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


76<br />

Test<br />

Enterprise-SSDs<br />

Auch in diesem Fall ist ein Schutz<br />

gegen Stromausfall eingebaut. Die<br />

SSD bedient sich dabei spezieller<br />

Tantal-Kondensatoren, da<strong>mit</strong> laufende<br />

Schreibvorgänge bei Stromausfall zur<br />

Vermeidung von Datenverlusten abgeschlossen<br />

werden können. Diese Kondensatoren<br />

können ihre Aufladung im<br />

Unterschied zu ähnlichen Technologien<br />

der Konkurrenz auch bei besonders hoher<br />

Umgebungstemperatur (bis zu 85<br />

Grad) halten.<br />

Extra optimiert wurden auch die<br />

Algorithmen zur Verteilung der<br />

Schreibzugriffe (DuraWrite) <strong>und</strong> zur<br />

Fehlerkorrektur (RAISE). Unter unseren<br />

Testbedingungen lieferte das Drive von<br />

Kingston die beste Performance aller<br />

Kandidaten.<br />

Seagate SSD 600 Pro<br />

Die 600-Pro-Serie ist ein Pendant der<br />

600er-Modellreihe, das speziell <strong>für</strong> den<br />

Enterprise-Einsatz optimiert wurde.<br />

So liegt die Write Endurance knapp 30<br />

Prozent höher als bei den Modellen<br />

<strong>ohne</strong> Pro im Namen. Allerdings rangiert<br />

die Pro-Serie bei Seagate nicht<br />

an der Spitze der Modellpalette, denn<br />

dort werden inzwischen <strong>mit</strong> der Reihe<br />

Seagate 1200 SSDs <strong>für</strong> die 12-Gb-SAS-<br />

Schnittstelle angeboten. Die Kapazitäten<br />

bewegen sich zwischen 200 <strong>und</strong> 800<br />

GByte. Diese SSDs sollen nach Herstellerangaben<br />

Befehlsraten bei sequenziellen<br />

Lese-/​Schreibvorgängen von 800<br />

<strong>und</strong> 640 MByte/​s erreichen. Die hier<br />

getestete 600 Pro bringt es dagegen nur<br />

auf 520 beziehungsweise 450 MByte/​s<br />

unter optimalen Bedingungen.<br />

Beim unserem Modell wird zusätzlicher<br />

Flash-Speicher <strong>für</strong> das Wear-Levelling<br />

<strong>und</strong> Overprovisioning abgezwackt,<br />

sodass nur r<strong>und</strong> 5/​6 des Speichers der<br />

normalen Modelle <strong>für</strong> den Anwender<br />

nutzbar sind. Der reservierte Speicher<br />

hilft, die Langzeitfunktionalität <strong>mit</strong><br />

hoher Performance sicherzustellen.<br />

Seagate gewährt auf die Pro-Modelle<br />

eine verlängerte Garantie von fünf<br />

(statt drei) Jahren, die allerdings davon<br />

abhängt, dass eine bestimmte vorgegebene<br />

Schreibleistung nicht überschritten<br />

wird. Ähnliche Klauseln gibt es<br />

auch bei anderen Herstellern.<br />

Samsung 840 PRO<br />

Die SSDs der Samsung-Modellreihe<br />

840 PRO tragen zwar das Professional-<br />

Kürzel im Namen, sind aber eigentlich<br />

eher Consumer-SSDs <strong>für</strong> den Einsatz in<br />

Desktop- oder Laptop-Rechnern. Entsprechend<br />

gibt der Hersteller hier erst<br />

gar keine Werte <strong>für</strong> Fehlerraten oder<br />

Write Endurance an – wahrscheinlich<br />

ist das einfach nicht die Schokoladenseite<br />

dieser ansonsten schnellen <strong>und</strong><br />

noch dazu <strong>mit</strong> Abstand preisgünstigsten<br />

SSD.<br />

In unserem eigenen Performance-<br />

Vergleich belegte das Samsung-Modell<br />

einen guten Bronzerang, wobei aber<br />

die beiden besser Platzierten pro Gigabyte<br />

mehr als dreimal so viel kosten.<br />

Insofern empfiehlt sich diese SSD <strong>für</strong><br />

den Arbeitsplatzrechner – auch gern<br />

den professionell genutzten – eher als<br />

<strong>für</strong> das Storage-Array. Hier kann sie<br />

<strong>mit</strong> guter Performance, TRIM-Support,<br />

S.M.A.R.T-Unterstützung, Garbage<br />

Collection <strong>und</strong> starker Verschlüsselung<br />

überzeugen.<br />

PNY Prevail 5K<br />

Auch das Modell von PNY passt nicht<br />

ganz in das Enterprise-Schema. Zwar<br />

hat es <strong>mit</strong> 5000 Program-​Erase-Zyklen<br />

(daher das Kürzel 5K in der Modellbezeichnung)<br />

eine deutlich höhere<br />

Schreibbelastbarkeit als die normalen<br />

Modelle, die nur 3000 P/​E-Zyklen vertragen<br />

(<strong>und</strong> sich dennoch selbst etwas<br />

vollm<strong>und</strong>ig als „High Endurance SSD“<br />

bezeichnen). Zu den 30 000 Zyklen<br />

einer Kingston SSDnow E100 oder OCZ<br />

Deneva 2 ist der Abstand aber dennoch<br />

n Tabelle 1: Technische Kennzahlen<br />

Model DC 3500 Deneva 2 SSDnow E100 840 PRO 600 PRO Prevail 5K<br />

Hersteller Intel OCZ Kingston Samsung Seagate PNY<br />

Kapazität (GByte) 480 400 200 512 400 120<br />

Sustained Sequential Read 500 530 535 540 520 550<br />

(MByte/​s)<br />

Sustained Sequential Write 410 510 500 520 450 520<br />

(MByte/​s)<br />

Random Read Operartions 75 000 59 000 76 000 100 000 85 000 85 000<br />

4 KByte (IOPS)<br />

Random Write Operations 11 500 49 000 59 000 90 000 30 000 85 000<br />

4 KByte (IOPS)<br />

Verschlüsselung AES 256 Bit AES 128 Bit AES 128 Bit AES 256 Bit k.A. AES 128 Bit<br />

MTBF (Mio. St<strong>und</strong>en) 2 2 1 1,5 k.A. 1,2<br />

Unrecoverable Bit Error Rate 10-17 10-17 k.A. k.A. 10-16 k.A.<br />

(UBER)<br />

Write Endurance (max. Total 450 7600 857 k.A. 1080 k.A.<br />

Bytes Written, TBW, in TByte)<br />

Garantie (Jahre) 5 3 3 5 5 3<br />

Preis (Euro) ab 500 ab 1300 ab 630 ab 400 ab 450 ab 150<br />

Preis pro GByte (Euro) 1,04 3,25 3,15 0,79 1,12 1,25<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Test<br />

Enterprise-SSDs<br />

77<br />

sehr groß, selbst bei den Modellen der<br />

ebenfalls erhältlichen 10K-Serie von<br />

PNY.<br />

Subsumiert man unter dem Oberbegriff<br />

„Enterprise“ aber auch professionelle<br />

Büroarbeitsplätze, Videoschnittplätze<br />

oder beispielsweise CAD-/​CAM-<br />

Workstations, dann hat die Prevail 5K<br />

<strong>mit</strong> einer <strong>für</strong> diese Verhältnisse guten<br />

Belastbarkeit <strong>und</strong> Performance sicher<br />

eine unbezweifelbare Daseinsberechtigung.<br />

n<br />

n Enterprise-SSDs – was ist das?<br />

SSD ist nicht gleich SSD, das hat sich herumgesprochen – aber wo<strong>für</strong><br />

genau eignet sich welche Technologie? Das <strong>ADMIN</strong>-<strong>Magazin</strong> hat die<br />

wichtigsten Fakten zusammengetragen.<br />

Die NAND-Speicher in den SSDs unterscheiden sich in erster Linie in der<br />

Art <strong>und</strong> Weise, wie sie Daten speichern. Die kompletten Produkte differenzieren<br />

sich aber auch bei Faktoren wie Service <strong>und</strong> Support. Hinsichtlich<br />

der Speichertechnik unterscheidet man heute Single-Level-Cell-<br />

NAND-Speicher (SLC), Multi-Level-Cell-NANDs (MLC) in diversen Spielarten<br />

<strong>und</strong> Triple-Level-Cell-NANDs (TLC). Um daraus eine komplette SSD<br />

zu bauen, bedarf es im Wesentlichen noch Firmware <strong>und</strong> Controller, die<br />

großen Einfluss auf Performance <strong>und</strong> Lebensdauer haben.<br />

Single Level Cell: Bei einer SLC-SSD speichert jede Speicherzelle genau<br />

ein Bit (zwei Zustände: Spannung oder keine Spannung). Das ist verglichen<br />

<strong>mit</strong> den weiter unten beschriebenen Verfahren eine sehr schnelle,<br />

stromsparende <strong>und</strong> zugleich robuste Methode, die andererseits aber<br />

leider auch recht teuer ist, weil viel Chipfläche <strong>für</strong> relativ kleine Kapazitäten<br />

benötigt wird.<br />

Bei allen SSDs vermindert jede Schreiboperation prinzipbedingt ein<br />

klein wenig die Lebensdauer des Speichers. In welchem Ausmaß das<br />

passiert, ist aber sehr verschieden. So garantiert beispielsweise Intel<br />

<strong>für</strong> seine SLC-SSD X25-E Schreibvorgänge in einer Größenordnung von<br />

bis zu einem Petabyte. Andere Hersteller stehen heute sogar <strong>für</strong> Dutzende<br />

Petabyte gerade. Umgerechnet könnte man auf die erwähnte<br />

Intel-SSD über einen Zeitraum von fünf Jahren jeden Tag knapp 548<br />

GByte schreiben, bevor die Fähigkeit der SLC-Zellen erlischt, elektrische<br />

Ladungszustände zu speichern. Seinen MLC-Modellen X25-M gewährt<br />

Intel im gleichen Zeitraum nur etwa 20 GByte wahlfreie Schreibvorgänge<br />

pro Tag.<br />

Weil der Flash-Speicher eine Zelle prinzipiell immer zuerst löschen<br />

muss, bevor er sie erneut beschreiben kann, spricht man hier von Program-Erase-Zyklen<br />

(P/​E-Zyklen). Auch OCZ gibt <strong>für</strong> seine MLC-SSDs eine<br />

Lebensdauer von etwa 3000 bis 10 000 P/​E-Zyklen an, <strong>für</strong> eMLC-SSDs<br />

aber 20 000 bis 30 000 <strong>und</strong> <strong>für</strong> SSDs <strong>mit</strong> SLC sogar bis zu 100 000 P/​E-<br />

Zyklen. Die Widerstandsfähigkeit (Endurance) einer Enterprise-SSD ist<br />

also verglichen <strong>mit</strong> einem billigeren Consumer-Produkt wenigstens<br />

zehnmal so hoch. Gleichzeitig bieten SLC-SSDs eine hohe Performance<br />

aufgr<strong>und</strong> der einfacheren Lese- <strong>und</strong> Schreibvorgänge.<br />

SLC-SSDs eignen sich aus diesem Gr<strong>und</strong> primär <strong>für</strong> den Einsatz in Servern<br />

<strong>und</strong> Storage-Arrays, wo sie auch bei hoher Schreiblast ihre Zuverlässigkeit<br />

<strong>und</strong> Performance ausspielen können <strong>und</strong> wo ein angemessener<br />

Preis bezahlt werden kann.<br />

Multi Level Cell: Multi-Level-Cell-NAND-Speicher können zwei oder<br />

mehr Bits pro Speicherzelle ablegen, indem sie nicht nur die zwei Zustände<br />

„Spannung“ oder „keine Spannung“ unterscheiden, sondern<br />

verschieden hohe Spannungen erkennen. Der Vorteil dieses Verfahrens<br />

ist die um ein Vielfaches höhere Speicherdichte – man spart bei gleicher<br />

Kapazität Chipfläche <strong>und</strong> da<strong>mit</strong> Kosten. MLC-SSDs können daher deutlich<br />

preisgünstiger sein als solche <strong>mit</strong> SLC-Technik. Tatsächlich nähert<br />

sich bei der MLC-Technik das Preisniveau pro Gigabyte bereits dem von<br />

besseren Festplatten an <strong>und</strong> könnte es in naher Zukunft erreichen.<br />

Nachteilig ist, dass das Verfahren im Gegenzug aber auch fehleranfälliger<br />

ist als die SLC-Technik <strong>und</strong> viel weniger P/​E-Zyklen verträgt. Es sind<br />

aufwendige Korrekturverfahren nötig, die Performance sinkt <strong>und</strong> die<br />

Lebensdauer ist begrenzt.<br />

MLC-SSDs eignen sich hervorragend <strong>für</strong> Notebooks oder Desktop-Rechner,<br />

die keine 24 St<strong>und</strong>en an sieben Tagen laufen <strong>und</strong> wo die Speicher<br />

selbst während der Betriebsszeit nur sporadisch beansprucht werden.<br />

Hier hat man auch <strong>mit</strong> einem Schreib-Li<strong>mit</strong> von vielleicht 20 GByte pro<br />

Tag noch ausreichend <strong>Sicher</strong>heitsabstand <strong>und</strong> bekommt <strong>für</strong> vergleichsweise<br />

kleines Geld relativ hohe Kapazitäten <strong>und</strong> eine Performance, die<br />

immer noch weit über der von normalen Festplatten liegt.<br />

Triple Level Cell: Solche NAND-Speicher sind die neueste Spielart <strong>und</strong><br />

noch selten, sie können – wie der Name bereits andeutet – drei Bit pro<br />

Speicherzelle ablegen, indem sie acht diskrete Ladungsniveaus des<br />

Floating-Gates im Transistor unterscheiden. Zugleich ist hier aber das<br />

Problem <strong>mit</strong> fehlerhaft abgelesenen Zuständen noch viel kritischer als<br />

bei der MLC-Technik, sodass eine noch aufwendigere Fehlerkorrektur<br />

nötig wird. Außerdem bleiben die gespeicherten Daten bei TLC nur r<strong>und</strong><br />

6 Monate erhalten, wohingegen Daten in der SLC-Technologie bis zu 10<br />

Jahre <strong>und</strong> in der MLC-Technologie bis zu einem Jahr gespeichert werden<br />

können. Auf der Habenseite steht da<strong>für</strong> eine nochmal doppelt so<br />

hohe Speicherdichte wie bei MLC.<br />

TLC-NANDs eignen sich besonders <strong>für</strong> preissensitive Anwendungen, die<br />

gleichzeitig keine High-End-Ansprüche an Performance <strong>und</strong> Langlebigkeit<br />

haben, beispielsweise <strong>für</strong> den Einsatz in mobilen Geräten.<br />

eMLC: Enterprise-MLC (eMLC, bei Intel auch HET <strong>für</strong> High Endurance<br />

Technology) ist der Versuch einer Kompromisslösung zwischen SLC <strong>und</strong><br />

MLC. Verwendet werden verbesserte MLC-NANDs <strong>mit</strong> zwei Bit pro Zelle,<br />

denen zusätzlich <strong>mit</strong> ausgeklügelter Software zu mehr Endurance verholfen<br />

wird. So verteilen die Controller die zu schreibenden Daten besser<br />

auf alle Zellen (Wear Leveling), verbesserte Algorithmen senken die<br />

Unrecoverable Bit Error Rate (UBER). Oft wird auch <strong>mit</strong> Overprovisioning<br />

gearbeitet, zusätzlichem Speicher, der nur der SSD intern zur Verfügung<br />

steht <strong>und</strong> <strong>für</strong> den Host nicht erreichbar ist. Dieser Speicher bildet<br />

eine sogenannte Spare Area, die wiederum beim Wear Leveling nützlich<br />

ist. Im Ergebnis halten eMLC-Speicher mindestens zwei- bis dreimal so<br />

viele P/​E-Zyklen aus wie gewöhnliche MLC-Chips. Auch preislich liegen<br />

sie zwischen SLC <strong>und</strong> MLC.<br />

eMLC gehören <strong>mit</strong> SLC-NANDs in die Klasse der Enterprise-Speicher,<br />

die noch eine Reihe weiterer Vorteile haben. So durchlaufen sie beim<br />

Hersteller strengere Qualitätskontrollen <strong>und</strong> können auf Wunsch von<br />

Support-Ingenieuren des Herstellers installiert werden. Bei manchen<br />

Produkten etwa von OCZ kann der K<strong>und</strong>e sogar genau festlegen, welche<br />

SSD-Bauteile <strong>für</strong> seine Charge verwendet werden.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


owie15, 123RF<br />

Zabbix Release 2.2<br />

Genauer betrachtet<br />

Während viele nur von Nagios reden, ist Zabbix zumindest unter <strong>ADMIN</strong>-Lesern die beliebteste Monitoring-Lösung.<br />

Es ist ebenfalls freie Software, kann zu überwachende Hosts direkt im Web-Interface konfigurieren<br />

<strong>und</strong> überwacht in der Version 2.2 auch VMware-Maschinen. Thomas Drilling<br />

Netzwerk-Überwachung wird auch <strong>für</strong><br />

kleine Unternehmen <strong>und</strong> im SOHO-Bereich<br />

zunehmend wichtiger. Probleme<br />

frühzeitig zu erkennen, erhöht die Verfügbarkeit<br />

<strong>und</strong> spart da<strong>mit</strong> vorbeugend<br />

Kosten, unabhängig von vorhandenen<br />

<strong>Backup</strong>-, Desaster-Recovery- <strong>und</strong> Hochverfügbarkeitsstrategien.<br />

Zabbix<br />

Die Monitoring-Lösung Zabbix [1] wird<br />

bereits seit 2001 entwickelt <strong>und</strong> weist<br />

eine Reihe von Gemeinsamkeiten <strong>mit</strong><br />

der wohl bekanntesten Monitoring-Lösung<br />

Nagios auf. So wird die Weiterentwicklung<br />

der unter der GPL lizenzierten<br />

Software bis heute maßgeblich vom<br />

Zabbix-Erfinder Alexei Vladishev gesteuert.<br />

Er ist der CEO, Eigentümer <strong>und</strong><br />

Product Manager der von ihm gegründeten<br />

Firma Zabbix SIA, die kommerzielle<br />

Dienstleistungen r<strong>und</strong> um Zabbix<br />

anbietet.<br />

Wie andere Monitoring-Tools der Gattung<br />

nutzt Zabbix <strong>für</strong> die Überwachung<br />

wahlweise Simple Checks, <strong>mit</strong> denen<br />

sich <strong>ohne</strong> das Installieren zusätzlicher<br />

Software auf den zu überwachenden<br />

Hosts von außen zugängliche Standarddienste<br />

wie SMTP, SSH <strong>und</strong> HTTP<br />

zur Überwachung ansteuern lassen.<br />

Alternativ sind auf der Download-Seite<br />

eine stattliche Anzahl von Agenten <strong>für</strong><br />

alle wichtigen Betriebssysteme wie<br />

Linux, BSD, AIX, Solaris <strong>und</strong> Windows<br />

zu finden.<br />

Als dritte Möglichkeit kann Zabbix die<br />

benötigten Überwachungsinformationen<br />

auch <strong>mit</strong>hilfe der in sämtlichen<br />

modernen Betriebssystemen eingebauten<br />

Netzwerk-Management-Protokolle<br />

SNMP oder IPMI beziehen. Der wichtigste<br />

Unterschied zu Nagios besteht<br />

darin, dass das Zabbix-Web-Interface<br />

nicht nur zum Visualisieren der zusammengetragenen<br />

Informationen dient,<br />

sondern auch die Konfiguration der zu<br />

überwachenden Hosts im Webbrowser<br />

erlaubt.<br />

Wie andere Monitoring-Lösungen<br />

auch versendet Zabbix im Ereignisfall<br />

E-Mail-, SMS- oder IM-Sofortnachrichten.<br />

Als Speicher-Backend <strong>für</strong> die<br />

gesammelten Informationen sowie <strong>für</strong><br />

die Konfigurationsdaten der zu überwachenden<br />

Hosts dient wahlweise<br />

eine MySQL-, PostgreSQL-, IBM-DB2-,<br />

Oracle- oder SQLite-Datenbank. In<br />

den Handhabung zeichnet sich Zabbix<br />

besonders durch die komfortable Kombinierbarkeit<br />

von Hosts, Actions, Items<br />

<strong>und</strong> Triggern sowie durch die komfortable<br />

Verwaltung von Graphs, Screens<br />

<strong>und</strong> Maps aus, wobei die Darstellung<br />

der Hosts auf verschiedenen Typen von<br />

Maps sehr elegant gelöst ist.<br />

Ferner lässt sich eine Zabbix-Installation<br />

<strong>mit</strong>hilfe von Zabbix-Proxies <strong>und</strong><br />

Zabbix-Nodes auf mehrere Standorte<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Test<br />

Zabbix 2.2<br />

79<br />

verteilen, wobei sich beide regelmäßig<br />

<strong>mit</strong> dem Zabbix-Server synchronisieren.<br />

Zabbix-Proxies führen die Überwachung<br />

quasi stellvertretend <strong>für</strong> den<br />

Zabbix-Server durch, was zum Beispiel<br />

einen Zabbix-Server entlastet. Zabbix-<br />

Nodes sind eine Art Unter-Server,<br />

bieten aber den gleichen Funktionsumfang<br />

wie ein Zabbix-Server.<br />

In der Version 2.2 wartet Zabbix <strong>mit</strong><br />

weit über 100 Neuerungen gegenüber<br />

der Version 2.0.9 auf. So gibt es jetzt<br />

zum Beispiel einen Werte-Cache, der<br />

<strong>für</strong> ein noch schnelleres Verarbeiten<br />

von Triggern sorgt. Weitere Geschwindigkeitsverbesserungen<br />

ergeben sich<br />

dadurch, dass die Entwickler den eigentlichen<br />

Datensendeprozess sowie<br />

die Caches <strong>für</strong> Historien <strong>und</strong> Konfigurationen<br />

überarbeitet haben. Außerdem<br />

verarbeitet der Zabbix-Server zeitbasierte<br />

Funktionen jetzt parallel.<br />

Noch interessanter macht sich Zabbix<br />

<strong>für</strong> potenzielle Nagios-Umsteiger dadurch,<br />

dass die Software jetzt auch VMwares<br />

vCenter- <strong>und</strong> vSphere-Plattformen<br />

überwachen kann. Zabbix erkennt<br />

virtuelle Maschinen automatisch <strong>und</strong><br />

schließt die Auslastung <strong>und</strong> Verfügbarkeit<br />

der VMs <strong>und</strong> Hypervisoren in die<br />

Überwachung ein. Wer Zabbix bereits<br />

kennt, sollte wissen, dass die Software<br />

in der Version 2.2 keine unbekannten<br />

Ereignisse mehr kennt.<br />

Ferner ermöglicht die neue Applikationsvererbungslogik,<br />

mehrere Templates<br />

<strong>mit</strong> der gleichen Anwendung zu verbinden.<br />

Beim Web-Monitoring lassen<br />

sich jetzt auch vorlagenbasierte Szenarien<br />

auswählen <strong>und</strong> reguläre Ausdrücke<br />

verwenden. Um die Verfügbarkeit eines<br />

Dienstes abzufragen, kann der Admin<br />

in Zabbix 2.2 außerdem die Anzahl der<br />

Wiederholungen festlegen. Für Entwickler<br />

nicht uninteressant ist, dass<br />

die Zabbix-Macher auch die Zabbix-API<br />

überarbeitet haben.<br />

Zabbix installieren<br />

Zabbix steht auf der Download-Seite<br />

wahlweise im Quellcode oder in Form<br />

von Binärpaketen <strong>für</strong> RHEL, Debian <strong>und</strong><br />

Ubuntu zur Verfügung. Darüber hinaus<br />

ist Zabbix in den Paketquellen vieler<br />

Distributionen enthalten, zum Testzeitpunkt<br />

aber bestenfalls in Version 2.0.9.<br />

Außerdem stellt das<br />

Zabbix-Team virtuelle<br />

Zabbix-Appliances auf<br />

Basis von OpenSuse<br />

12.3 <strong>für</strong> VMware, VirtualBox,<br />

KVM, Microsoft<br />

(VHD) <strong>und</strong> im Open-<br />

Virtualization-Format<br />

zur Verfügung, zum<br />

Testzeitpunkt allerdings<br />

ebenfalls nur in<br />

der Version 2.0.9. Für<br />

einzelne Distributionen<br />

wie Ubuntu 12.04 bietet<br />

Zabbix ein eigenes<br />

Repository <strong>für</strong> die Installation<br />

der aktuellen<br />

Version 2.2 an.<br />

Auch die Installation aus den Sourcen<br />

gelingt leicht, wenn die Installationsvoraussetzungen<br />

erfüllt sind, also die<br />

benötigten PHP-Module, darunter »gd«,<br />

»mysqli«, »libxml« <strong>und</strong> »ctype« installiert<br />

sind. Zudem ist <strong>für</strong> den Zabbix-<br />

Daemon ein unprivilegierter Benutzer<br />

»zabbix« erforderlich.<br />

Sollen Server <strong>und</strong> Agent auf der gleichen<br />

Maschine laufen, um etwa den<br />

Server selbst in die Überwachung<br />

einzubeziehen, braucht es einen separaten<br />

Benutzer <strong>für</strong> den Agenten. Für<br />

das Anlegen der Datenbanken <strong>für</strong> einen<br />

Zabbix-Server oder -Proxy stehen auf<br />

der Projektseite passende Skripte <strong>für</strong><br />

MySQL, PostgreSQL, Oracle, IBM DB2<br />

<strong>und</strong> SQLite zur Verfügung [2]. Zum Konfigurieren<br />

der Sourcen unter Verwendung<br />

von MySQL genügt dann ein:<br />

./configure ‐‐enable‐server U<br />

‐‐with‐mysql ‐‐with‐net‐snmp<br />

Zum Konfigurieren der Quellen <strong>für</strong><br />

einen Linux-Agent verwendet man dagegen:<br />

./configure ‐‐enable‐agent<br />

Das Übersetzen <strong>mit</strong> »make install«<br />

sollte in beiden Fällen problemlos<br />

über die Bühne gehen. Den Zabbix-<br />

Server-Daemon startet das Kommando<br />

»zabbix_server«, den Agenten<br />

auf dem zu überwachenden System<br />

»zabbix_agentd«. Solange das Web-<br />

Interface noch nicht installiert ist,<br />

Abbildung 1: Zabbix stellt einen webbasierten Installationsassistenten<br />

zur Verfügung.<br />

muss man die Agenten manuell in der<br />

jeweiligen Konfigurationsdatei »/usr/<br />

local/etc/zabbix_agentd.conf« auf dem<br />

zu überwachenden Host einrichten. In<br />

der muss mindestens die IP-Adresse<br />

des Zabbix-Servers eingetragen sein<br />

<strong>und</strong> außerdem der Port, auf dem der<br />

Agent auf Anfragen des Servers horcht<br />

(»ListenPort=10050«). Ob der Agent als<br />

Daemon startet, legt die Konfigurationsdatei<br />

»/etc/zabbix/zabbix_agentd.<br />

conf« fest.<br />

Konfiguration<br />

Die weitere Konfiguration des Servers<br />

erfolgt in der Datei » /usr/local/etc/<br />

zabbix_server.conf« <strong>und</strong> muss mindestens<br />

den Namen der Datenbank<br />

(»DBName=zabbix«) sowie den administrativen<br />

Datenbank-User (»DBUser«)<br />

nebst Passwort (»DBPassword«) <strong>und</strong><br />

außerdem den Standard-Port <strong>für</strong> den<br />

Zabbix-Daemon (»ListenPort=10051«)<br />

enthalten. Ferner muss der Admin<br />

eine gegebenenfalls aktive Firewall-<br />

Konfiguration auf dem Server oder dem<br />

Agenten anpassen (Ports 10050, 10051),<br />

da<strong>mit</strong> diese <strong>mit</strong>einander kommunizieren<br />

können.<br />

Auch das Aufsetzen des Web-Interfaces<br />

ist nicht weiter schwierig. Da das Frontend<br />

in PHP geschrieben ist, muss der<br />

Admin lediglich die PHP-Dateien in<br />

das Document-Root des jeweiligen<br />

Webservers kopieren, etwa »/var/www/<br />

html« (Fedora, RHEL, CentOS), »/var/<br />

www« (Debian, Ubuntu) oder »/srv/<br />

www/htdocs« (SLES, OpenSuse). Läuft<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


80<br />

Test<br />

Zabbix 2.2<br />

dem Überwachungstyp im Feld »Key«<br />

<strong>mit</strong> »select« eine Reihe interner Zabbix-<br />

Keys auswählen, die die Details der<br />

Überwachung genauer spezifizieren.<br />

Für einen schnellen Agenten-losen Test<br />

könnte der Admin beispielsweise <strong>mit</strong><br />

dem Typ »Simple Check« im Key-Feld<br />

den Zabbix-Schlüssel »icmpping« auswählen.<br />

Mit einem Klick auf »Select«<br />

steht eine entsprechende Auswahlliste<br />

zur Verfügung, die alle Schlüssel <strong>für</strong><br />

»Simple Check« auf einen Blick zeigt.<br />

Diese einfache Überwachung anhand<br />

von Pings taucht <strong>mit</strong> einem Klick auf<br />

»Save« zunächst noch <strong>ohne</strong> konfigurierte<br />

Trigger in der Item-Liste <strong>mit</strong> dem<br />

Status »Enabled« auf.<br />

Abbildung 2: Das Konfigurieren der zu überwachenden Hosts erfolgt im Web-Interface.<br />

der Webserver, lässt sich die weitere<br />

Installation des Web-Interfaces unter<br />

der URL »http://Server‐IP/zabbix« <strong>mit</strong><br />

einem Installationsassistenten <strong>für</strong> das<br />

Frontend grafisch fortsetzen (siehe Abbildung<br />

1).<br />

Bei den Appliances sowie den vorkompilierten<br />

Versionen können die geschilderten<br />

Schritte einschließlich der Installation<br />

des Web-Frontends entfallen.<br />

Per Default meldet sich der Admin <strong>mit</strong><br />

dem Nutzernamen »Admin« <strong>und</strong> den<br />

Passwort »zabbix« am Web-Interface<br />

an. Ferner gibt es noch die Accounts<br />

»root/zabbix« <strong>für</strong> die Konsole <strong>und</strong><br />

»root/zabbix« sowie »zabbix/zabbix« <strong>für</strong><br />

die Datenbank.<br />

Konfigurieren von Hosts<br />

Das Web-Interface verteilt alle Funktionen<br />

auf die Reiter »Monitoring«, »Inventory«,<br />

»Reports«, »Configuration« <strong>und</strong><br />

»Administration«. Zum Überwachen<br />

eines Hosts <strong>mit</strong> Zabbix dient das Menü<br />

»Configuration | Hosts«. Die angebotene<br />

Host-Liste enthält in der Appliance<br />

auch den Zabbix-Server selbst, der<br />

sich ebenfalls <strong>mit</strong> Zabbix überwachen<br />

lässt. Für einen neuen Host wählt man<br />

im Menü »Group« den Eintrag »all« <strong>und</strong><br />

klickt auf »Create Host«, was zur Dialogseite<br />

der Konfiguration des Hosts führt.<br />

Das muss nicht notwendigerweise<br />

ein PC sein. Ein Host ist in der Zabbix-<br />

Nomenklatur jedes Netzwerkgerät, das<br />

über eine IP-Ardesse verfügt.<br />

Neben einem frei wählbaren »Host‐Namen«<br />

nebst einem gegebenenfalls<br />

etwas ausführlicheren »Visible Name«<br />

<strong>für</strong> den zu überwachenden Host muss<br />

der Admin eine passende Host-Gruppe<br />

auswählen, wobei die vorkonfigurierten<br />

Gruppen lediglich beispielhaft sind,<br />

<strong>und</strong> dann die obligatorischen technischen<br />

Parameter wie den DNS-Namen,<br />

die IP-Adresse <strong>und</strong> den gewünschten<br />

Port (per Default steht hier die Zabbix-<br />

Portnummer 10050) <strong>für</strong> die Überwachung<br />

angeben (Abbildung 2).<br />

Daten sammeln<br />

Wurde ein erster Host zur Überwachung<br />

angelegt, kann Zabbix von ihm<br />

Daten einsammeln, wozu der Admin<br />

unter »Configuration | Hosts« in der<br />

Spalte »Items« der Host-Liste auf den<br />

betreffenden Link »Items (0)« klickt<br />

<strong>und</strong> <strong>mit</strong> »Create Item« rechts oben den<br />

Dialog »Item Hostname« zum Konfigurieren<br />

einer Überwachung aufruft. Die<br />

verfügbaren Überwachungstypen finden<br />

sich im Listenauswahlfeld »Type«.<br />

Neben dem Default-Eintrag »Zabbix<br />

Agent« stehen unter anderem verschiedene<br />

SNMP-Agents, ein IPMI-Agent,<br />

ein SSH-Agent, ein Database-Monitor,<br />

Simple Check oder External Checks zur<br />

Verfügung. Ferner lassen sich neben<br />

Trigger<br />

Danach kann man sich um das Konfigurieren<br />

von Triggern kümmern. Hier<br />

klickt der Admin wieder ausgehend<br />

vom Menü »Configuration | Hosts« in<br />

der Spalte »Triggers« auf den zugehörigen<br />

Link. Das Anlegen eines neuen<br />

Triggers erfolgt <strong>mit</strong> »Create Trigger«.<br />

Der Dialog erwartet zunächst wieder<br />

einen aussagekräftigen Namen. Mit der<br />

Schaltfläche »Add« lässt sich dann die<br />

zugehörige »Expression« formulieren,<br />

ein Ausdruck also, der beschreibt,<br />

wann der Trigger den Status wahr oder<br />

falsch annimmt. Mit einem Klick auf<br />

»Select« wählt der Admin zunächst<br />

das Item aus der Items-Liste in einem<br />

Popup-Fenster aus. Der Eintrag bei<br />

»Function« steht per Default auf »Last<br />

(most recent) T value = N«, was man<br />

unverändert übernehmen kann.<br />

Das bedeutet, dass der Trigger den<br />

Status »wahr« annimmt, wenn der<br />

letzte er<strong>mit</strong>telte Wert des Items<br />

»xxxxx:icmpping« »N (Null)« ist. Mit<br />

einem Klick auf »Insert« ist die Expression<br />

definiert <strong>und</strong> der Admin landet<br />

wieder im Trigger-Dialog, in dem sich<br />

dann noch die Dringlichkeit des Triggers<br />

<strong>mit</strong>hilfe des Listenauswahlfeldes<br />

»Severity« klassifizieren lässt, etwa<br />

»Information« oder »Warning«. Mit<br />

dem Link »Expression constructor«<br />

lassen sich aber auch individuelle<br />

Trigger formulieren <strong>und</strong> gegebenenfalls<br />

Makros einfügen. Mit »Save« geht<br />

es zurück in die Trigger-Liste, die den<br />

eben definierten Trigger in der Spalte<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Test<br />

Zabbix 2.2<br />

81<br />

Abbildung 3: Den Status jedes Triggers zeigt Zabbix im Monitor-Menü an.<br />

»Status« <strong>mit</strong> »Enabled« aufführt. Der<br />

Status des Triggers ist anschließend<br />

jederzeit unter »Monitoring | Triggers«<br />

einsehbar, wobei der Admin <strong>mit</strong>hilfe<br />

der Listenauswahlfelder »Host« <strong>und</strong>/<br />

oder »Group« die richtigen Filter setzen<br />

muss, um den betreffenden Trigger zu<br />

finden (Abbildung 3).<br />

Aktionismus<br />

Beim Eintreten eines Triggers muss<br />

eine Monitoring-Lösung wie Zabbix<br />

eine Aktion auslösen, zum Beispiel eine<br />

E-Mail an den zuständigen Admin versenden.<br />

Da<strong>für</strong> muss man zunächst im<br />

Menü »Administration | Media types«<br />

einen SMTP-Server einrichten. In der<br />

Spalte »Description« sind per Default<br />

die Typen »Email«, »Jabber« <strong>und</strong> »SMS«<br />

verfügbar. Soll beim Auslösen eines<br />

Triggers eine E-Mail versendet werden,<br />

klickt man auf den Link »Email« <strong>und</strong><br />

trägt bei »SMTP server« »SMTP helo«<br />

<strong>und</strong> »SMTP email« die gewünschten<br />

Werte ein, wobei »SMTP email« die<br />

Absender-Adresse ist, <strong>mit</strong> der Zabbix<br />

die E-Mail verschickt.<br />

Klickt der Admin dann im Benutzerdialog<br />

des betreffenden Nutzers auf den<br />

Reiter »Media«, kann er <strong>mit</strong> »Add« ein<br />

neues Medium vom Typ »Email« hinzufügen<br />

<strong>und</strong> dabei im Feld »Send to« die<br />

gewünschte Ziel-E-Mail-Adresse eintragen.<br />

Mit den Optionsfeldern darunter<br />

stellt man die Dringlichkeitsstufe ein.<br />

Das Einrichten einer Aktion passiert<br />

im Menü »Configuration | Actions«. Mit<br />

dem Listenfeld-Eintrag »Triggers« bei<br />

»Event Source« <strong>und</strong> einem anschließenden<br />

Klick auf »Create Action« öffnet<br />

sich der Dialog zum Konfigurieren einer<br />

Aktion. Im Reiter »Action« lässt sich<br />

neben einem frei wählbaren Namen<br />

<strong>für</strong> die Aktion eine Default-Nachricht<br />

formulieren. Hier ist es – wie am Beispieleintrag<br />

zu sehen – möglich <strong>und</strong><br />

sinnvoll <strong>mit</strong> »{TRIGGER.NAME}« oder<br />

»{TRIGGER.STATUS}« auf Variablen zuzugreifen.<br />

Danach lässt sich im Reiter<br />

»Conditions« die jeweilige Bedingung<br />

formulieren <strong>und</strong> im Reiter »Operations«<br />

<strong>mit</strong> einem Klick auf »New« eine Operation<br />

definieren. Hier bietet das Listenauswahlfeld<br />

»Operations type« unter<br />

anderem die Option »Send message«.<br />

Mit »Add« bei »Send to User« oder<br />

»Add« bei »Send to user groups« werden<br />

dann die Adressaten bestimmt.<br />

Besser <strong>mit</strong> Agenten<br />

Im professionellen Einsatz wird man<br />

statt agentenloser Überwachung<br />

meist eher die Variante <strong>mit</strong> Agenten<br />

vorziehen, alternativ vielleicht noch<br />

eine SNMP- oder IPMI-basierte Überwachung.<br />

Die hervorragenden Visualisierungsfunktionen<br />

unter »Monitoring<br />

| Graphs«, »Monitoring | Screens« <strong>und</strong><br />

»Monitoring | Map« sollte man sich<br />

ebenfalls unbedingt ansehen. Ferner<br />

bietet Zabbix im Menü »Iventory« auch<br />

Inventarisierungsfunktionen an, die<br />

andere Hersteller als eigenständiges<br />

Produkt verkaufen würden.<br />

Fazit<br />

Im Vergleich <strong>mit</strong> Nagios gefällt an<br />

Zabbix vor allem das Web-Interface,<br />

das die Konfiguration von Host, Items<br />

<strong>und</strong> Triggern erlaubt <strong>und</strong> nicht nur<br />

der Monitoring-Darstellung dient. Mit<br />

vielen verfügbaren Addons <strong>und</strong> Third-<br />

Party-Tools einschließlich der in Version<br />

2.2 hinzugekommenen Loadable-<br />

Module-Architektur operiert Zabbix<br />

mindestens auf Augenhöhe <strong>mit</strong> dem<br />

Nagios-Ökosystem. Die umfangreichen<br />

Visualisierungsfunktionen von Zabbix<br />

<strong>und</strong> die Verwendbarkeit von Templates<br />

als Gr<strong>und</strong>lage <strong>für</strong> „Anwendungen“ sprechen<br />

ebenfalls <strong>für</strong> das leistungsfähige<br />

Tool. Trotz des riesigen Funktionsumfangs<br />

findet man sich im klar strukturierten<br />

<strong>und</strong> bei der Detailfülle immer<br />

noch übersichtlichen Web-Interface<br />

schnell zurecht. (ofr) n<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31532<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


Dan Kosmayer, 123RF<br />

<strong>Cloud</strong> Orchestration <strong>mit</strong> <strong>Cloud</strong>ify<br />

Auf Kommando<br />

<strong>Cloud</strong> Computing zwingt Admins dazu, sich über Automatisierung neue Gedanken zu machen, denn<br />

klassische Werkzeuge wie Puppet sind nur bedingt <strong>für</strong> den Einsatz in <strong>Cloud</strong>-VMs geeignet. <strong>Cloud</strong>ify bietet<br />

sich an, das Problem in den Griff zu kriegen. Martin Loschwitz<br />

Admins befinden sich momentan ja<br />

quasi im Dauerfeuer des <strong>Cloud</strong>-Marketing:<br />

Die <strong>Cloud</strong> ist allgegenwärtig. Vor<br />

lauter Wolken verschwimmt dabei oft<br />

genug die Sicht auf die Ideen, die <strong>Cloud</strong><br />

Computing eigentlich zugr<strong>und</strong>e liegen.<br />

Zwei Faktoren sind von großer Bedeutung:<br />

Einerseits geht es darum, die<br />

Hardware von einer einzigen Funktion<br />

zu entkoppeln, die ihr traditionellerweise<br />

oft zugedacht war, zum anderen<br />

geht es um Automatisierung.<br />

Entkopplung in der <strong>Cloud</strong><br />

Das Stichwort Entkopplung leuchtet<br />

jedem ein, auch wenn es eigentlich<br />

schon da war, bevor die <strong>Cloud</strong> ein<br />

Thema wurde: Ein spezifisches Stück<br />

Hardware kann heute in der Regel mehr<br />

leisten als eine darauf laufende Anwendung<br />

benötigt. Virtualisierung löst<br />

das Problem, indem sie einen Rechner<br />

als Host benutzt <strong>und</strong> verschiedene<br />

virtuelle Systeme gleichzeitig auf ihm<br />

laufen lässt. Im Rahmen der <strong>Cloud</strong> ist<br />

das von großer Bedeutung, denn anders<br />

als in klassischen Setups ist in der<br />

<strong>Cloud</strong> die Fluktuation von Systemen<br />

Alltag: Virtuelle Maschinen sind darauf<br />

ausgelegt, gegebenenfalls einfach zu<br />

verschwinden. Was bei physischen Maschinen<br />

völlig <strong>und</strong>enkbar wäre, ist bei<br />

virtuellen Systemen in <strong>Cloud</strong>s an der<br />

Tagesordnung.<br />

Aus diesem Umstand ergeben sich Konsequenzen<br />

<strong>für</strong> den Alltag des Admins.<br />

Der Admin wird sich um ein einzelnes<br />

virtuelles System nicht länger kümmern<br />

wie um sein krankes Kätzchen<br />

– nämlich liebevoll auf das Individuum<br />

bezogen –, sondern eher wie um ein<br />

Stück Vieh in der Herde, bei der es<br />

letztlich nur um den durchschnittlichen<br />

Fleischzuwachs geht. Virtuelle Systeme<br />

in Massenhaltung können jederzeit im<br />

Interesse eines übergeordneten Zwecks<br />

starten <strong>und</strong> stoppen, umziehen oder<br />

gelöscht werden.<br />

Wenn der Plan etwa ist, eine virtuelle<br />

Webserver-Architektur in der <strong>Cloud</strong> aufzubauen,<br />

dann würde das <strong>für</strong> den Admin<br />

viel Klickarbeit bedeuten. Deshalb<br />

kommt hier der zweite wichtige Faktor<br />

bei <strong>Cloud</strong>s hinzu: Automatisierung.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Virtualisierung<br />

<strong>Cloud</strong>ify<br />

83<br />

Automatisierung drinnen<br />

<strong>und</strong> draußen<br />

Was das eigentliche Blech angeht, auf<br />

dem <strong>Cloud</strong>-Umgebungen laufen, ist das<br />

Thema Automatisierung <strong>mit</strong>tlerweile<br />

weit gediehen: Mittels Chef oder Puppet<br />

ist es <strong>ohne</strong> Weiteres möglich, ganze<br />

<strong>Cloud</strong>-Umgebungen <strong>mit</strong> wenigen Mausklicks<br />

aus dem Boden zu stampfen,<br />

sodass aus einem bloßen Server in Sek<strong>und</strong>enschnelle<br />

ein Hypervisor-Knoten<br />

wird. Um die Automatisierung in der<br />

<strong>Cloud</strong> kümmert sich die <strong>Cloud</strong>-Plattform<br />

weitestgehend selbst, lediglich<br />

starten <strong>und</strong> stoppen muss der Benutzer<br />

seine VMs noch.<br />

Das mag nach sehr wenig Arbeit klingen,<br />

wächst sich aber schnell aus, gerade<br />

dann, wenn K<strong>und</strong>en die Features<br />

einer <strong>Cloud</strong> optimal nutzen wollen: Die<br />

zuvor bereits beschriebene Umgebung<br />

<strong>für</strong> Webserver manuell zusammenzuzimmern,<br />

würde bedeuten, die einzelnen<br />

VMs aus den vorgesehenen Images<br />

zu starten, sie entsprechend zu konfigurieren<br />

<strong>und</strong> so am Ende eine funktionierende<br />

Plattform zu erhalten. Würde<br />

man eine solche Umgebung anschließend<br />

abschalten <strong>und</strong> ein Jahr später<br />

erneut benötigen, ginge die Arbeit von<br />

vorne los. Das Problem: Bis dato gab<br />

es keine Werkzeuge, die sich um die<br />

Automatisierung der VM-Konfiguration<br />

in <strong>Cloud</strong>s ordentlich kümmerten. Chef<br />

<strong>und</strong> Puppet funktionieren nur bedingt,<br />

denn sie sind eher auf starre Setups<br />

gemünzt, bei denen im Vorfeld klar ist,<br />

wie das Setup am Ende aussehen soll.<br />

Außerdem sind Chef, Puppet <strong>und</strong> nahezu<br />

alle anderen Automatisierer maßgeblich<br />

auf eine Sicht zugeschnitten,<br />

die eher von ganzen Systemen ausgeht<br />

– IaaS anstatt PaaS, um im <strong>Cloud</strong>-Kontext<br />

zu bleiben.<br />

Genau an dieser Stelle schlägt die<br />

St<strong>und</strong>e der Orchestration-Tools. Unter<br />

dem Oberbegriff der Orchestrierung<br />

läuft bei den meisten <strong>Cloud</strong>-Umgebungen<br />

im Augenblick alles, was irgendwie<br />

<strong>mit</strong> der Konfiguration virtueller Maschinen<br />

in Verbindung steht. <strong>Cloud</strong>ify ist<br />

eine solche Orchestrierungslösung <strong>und</strong><br />

tritt <strong>mit</strong> dem Versprechen an, K<strong>und</strong>en<br />

das Nutzen von Diensten in der <strong>Cloud</strong><br />

einfach <strong>und</strong> unkompliziert zu ermöglichen.<br />

Dabei unterstützt es verschie-<br />

dene Arten von Public<br />

<strong>Cloud</strong>s, ist Open-<br />

Source-Software <strong>und</strong><br />

wird von Seiten des<br />

Herstellers Gigaspaces<br />

aktiv weiterentwickelt.<br />

Gr<strong>und</strong> genug also, sich<br />

das Werkzeug einmal<br />

etwas genauer anzusehen.<br />

Start als PaaS<br />

Gigaspaces, die Firma<br />

hinter <strong>Cloud</strong>ify, hat<br />

<strong>mit</strong> der Entwicklung<br />

des Tools im Jahre<br />

2012 begonnen. Ursprünglich<br />

konzipiert war <strong>Cloud</strong>ify als<br />

Hilfs<strong>mit</strong>tel <strong>für</strong> Platform-as-a-Service-<br />

Anwendungen (die Grenzen zu SaaS<br />

sind dabei fließend). Die Gr<strong>und</strong>idee<br />

war, dass es Anwendern schnell <strong>und</strong><br />

unkompliziert möglich sein sollte, spezifische<br />

Programme oder auch Dienste<br />

innerhalb einer <strong>Cloud</strong>-Computing-<br />

Umgebung zu starten.<br />

Genau das ist ja im Gr<strong>und</strong>e Platformas-a-Service:<br />

Anders als bei IaaS-Diensten<br />

erhält der K<strong>und</strong>e bei PaaS nicht nur<br />

eine virtuelle Maschine, sondern darin<br />

vorinstalliert auch die Software, die er<br />

<strong>für</strong> seinen spezifischen Anwendungsfall<br />

benötigt. Das kann Java sein, das kann<br />

eine Datenbank sein, ein Webserver –<br />

Angebote, die Systeme im fertigen<br />

Zustand an ihre K<strong>und</strong>en übergeben,<br />

kommen <strong>mit</strong>tlerweile <strong>mit</strong> zahllosen<br />

Diensten daher, die als PaaS-Angebot<br />

funktionieren.<br />

Seinen Ursprung als PaaS-Lösung sieht<br />

man <strong>Cloud</strong>ify bis heute noch an. Auch<br />

der Slogan des Herstellers „Real apps.<br />

On the <strong>Cloud</strong>. One Click“ lässt wenig<br />

Spielraum <strong>für</strong> andere Interpretationen.<br />

Gegenwärtig richtet sich <strong>Cloud</strong>ify<br />

an K<strong>und</strong>en, die fertige Appliances in<br />

<strong>Cloud</strong>-Umgebungen starten <strong>und</strong> darin<br />

dann schnell eigene Dienste betreiben<br />

wollen, <strong>ohne</strong> sich <strong>mit</strong> dem gesamten<br />

technischen Unterbau in größerem<br />

Umfang zu beschäftigen. Der Hersteller<br />

bietet dazu fertige Templates <strong>und</strong> Images<br />

an, die sich in <strong>Cloud</strong>ify aktivieren<br />

lassen <strong>und</strong> die danach in einer <strong>Cloud</strong><br />

die in ihnen hinterlegten Befehle ausführen.<br />

Abbildung 1: Über die <strong>Cloud</strong>ify-Shell lässt sich in Windeseile eine „lokale<br />

<strong>Cloud</strong>“ starten, die aber eher als Anschauungs- <strong>und</strong> Testobjekt<br />

gedacht ist.<br />

Unter der Haube: Der erste<br />

Start<br />

Was genau dürfen sich Admins aber unter<br />

<strong>Cloud</strong>ify vorstellen? Wie verrichtet<br />

das Werkzeug seine Arbeit? Es ist relativ<br />

leicht, sich davon ein eigenes Bild zu<br />

machen, sollte man Windows oder Linux<br />

auf dem eigenen System betreiben.<br />

Dann gibt es auf der <strong>Cloud</strong>ify-Website<br />

nämlich die Möglichkeit, <strong>Cloud</strong>ify auf<br />

die lokale Festplatte herunterzuladen<br />

<strong>und</strong> dort als »Local Setup« zu betreiben<br />

(Abbildung 1).<br />

Zum besseren Verständnis ist die Information<br />

wichtig, dass <strong>Cloud</strong>ify selbst als<br />

Orchestration-Werkzeug stets <strong>mit</strong> einer<br />

eigenen Instanz innerhalb einer <strong>Cloud</strong><br />

vertreten ist. Ganz gleich, wie ein von<br />

<strong>Cloud</strong>ify gesteuertes Setup konstruiert<br />

ist, die Master-VM gibt es immer. Im<br />

Falle eines »Local Setups« läuft diese<br />

auf dem lokalen Rechner. <strong>Cloud</strong>ify<br />

übernimmt das komplette Bootstrapping<br />

einer eigenen lokalen <strong>Cloud</strong>, die<br />

<strong>ohne</strong> einen Zugang zu einem öffentlichen<br />

<strong>Cloud</strong>-Anbieter <strong>und</strong> so<strong>mit</strong> <strong>mit</strong><br />

wenigen Voraussetzungen auskommt.<br />

Der <strong>Cloud</strong>ify-Tarball ist an die 160 Megabyte<br />

groß, doch wirklich Kontakt hat<br />

der Anwender anfangs nur <strong>mit</strong> genau<br />

einer Komponente: Der <strong>Cloud</strong>ify-Shell.<br />

Dabei handelt es sich um eine spezielle<br />

Shell <strong>für</strong> <strong>Cloud</strong>ify; sie ähnelt den<br />

Spezial-Shells, die andere Programme<br />

wie Libvirt <strong>mit</strong>bringen <strong>und</strong> ermöglicht<br />

es, an <strong>Cloud</strong>ify spezifische Befehle zu<br />

senden. Die <strong>Cloud</strong>ify-Shell ist insofern<br />

wichtig, als dass <strong>Cloud</strong>ify selbst seine<br />

Befehle über eine ReSTful-API entge-<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


84<br />

Virtualisierung<br />

<strong>Cloud</strong>ify<br />

Abbildung 2: Basierend auf der Einteilung in Applikationen zeigt das<br />

Dashboard von <strong>Cloud</strong>ify an, wie es den Zustand einer solchen Applikation<br />

einschätzt.<br />

Abbildung 3: Ebenso kann die <strong>Cloud</strong>ify-Shell eine echte Appliance im<br />

Rahmen einer Public <strong>Cloud</strong> deployen; die entsprechenden Treiber<br />

machen das möglich.<br />

gen nimmt. Die Shell übersetzt quasi<br />

Befehle von Anwendern in das JSON-<br />

Format <strong>und</strong> ermöglicht so die effektive<br />

Nutzung von <strong>Cloud</strong>ify. <strong>Cloud</strong>ify selbst<br />

besteht im Übrigen aus Java <strong>und</strong> benötigt<br />

deshalb ein aktuelles JDK (ein<br />

Java-Runtime-Environment reicht ausdrücklich<br />

nicht aus, wie die <strong>Cloud</strong>ify-<br />

Entwickler in der Dokumentation des<br />

Werkzeugs erklären).<br />

Hat das Bootstrapping der ersten <strong>Cloud</strong><br />

funktioniert, egal ob als Test auf dem<br />

lokalen System oder als echtes Deployment<br />

in einer Public <strong>Cloud</strong>, steht im<br />

Anschluss das <strong>Cloud</strong>ify-Web-Frontend<br />

zur Verfügung (Abbildung 2). Das kann<br />

mehr, als man auf den ersten Blick<br />

glauben würde: Neben der Möglichkeit,<br />

PaaS-Deployments zu starten, lassen<br />

sich hier auch Performance-Werte des<br />

aktuellen Deployments <strong>und</strong> Monitoring-Informationen<br />

herausfinden.<br />

Das Web-<br />

Interface läuft dabei<br />

stets in der Management-VM;<br />

die meisten<br />

Admins dürften es der<br />

<strong>Cloud</strong>ify-Shell vorziehen,<br />

weil es in jedem<br />

Webbrowser funktioniert.<br />

Modularer<br />

Aufbau<br />

De facto besteht <strong>Cloud</strong>ify<br />

also aus mehreren<br />

Teilen, <strong>und</strong> die Modularität<br />

der Lösung setzt sich wiederum<br />

auch bei den einzelnen Teilen fort, die<br />

gleichfalls aus mehreren Komponenten<br />

bestehen. Die Haupt-Engine ist zum<br />

Beispiel in der Lage, die Kommunikation<br />

<strong>mit</strong> einer spezifischen Public <strong>Cloud</strong><br />

abzuwickeln, indem sie da<strong>für</strong> einen eigenen<br />

„<strong>Cloud</strong>-Treiber“ verwendet (Abbildung<br />

3). Das richtet sich besonders<br />

an diejenigen Anwender, die <strong>Cloud</strong>ify<br />

tatsächlich nutzen möchten, um da<strong>mit</strong><br />

die Orchestrierung von VMs in Public<br />

<strong>Cloud</strong>s durchzuführen – vermutlich die<br />

große Mehrheit der <strong>Cloud</strong>ify-Anwender.<br />

Die Zahl der unterstützten <strong>Cloud</strong>s deckt<br />

dabei alle wichtigen Player ab: Amazon,<br />

Rackspace, Microsoft Azure, alles,<br />

was <strong>mit</strong> OpenStack kompatibel ist, HPs<br />

<strong>Cloud</strong>. Mit der gleichen Instanz von<br />

<strong>Cloud</strong>ify ist es übrigens auch möglich,<br />

mehrere Public-<strong>Cloud</strong>-Zugänge zeitgleich<br />

zu verwalten,<br />

sogar Multi-Tier-<strong>Cloud</strong>s<br />

sind möglich, also<br />

Installationen, die<br />

mehrere Public <strong>Cloud</strong>s<br />

überspannen.<br />

In der <strong>Cloud</strong>ify-Engine<br />

verborgen existiert allerdings<br />

noch deutlich<br />

mehr Logik, welche die<br />

Benutzung des Werkzeugs<br />

sehr angenehm<br />

macht. Da wäre unter<br />

anderem die Tatsache,<br />

dass sich <strong>für</strong> einzelne<br />

PaaS-Anwendungen<br />

Lastgrenzen definieren<br />

lassen. Im laufenden<br />

Betrieb findet die Master-Instanz<br />

von <strong>Cloud</strong>ify über eine eigene<br />

Logik heraus, welche Last auf den<br />

VMs <strong>mit</strong> der PaaS-Anwendung gerade<br />

anliegt. Übersteigt die vorhandene Last<br />

vom Admin festgesetzte Li<strong>mit</strong>s, kümmert<br />

sich <strong>Cloud</strong>ify automatisch darum,<br />

dass mehr Instanzen der Applikation<br />

gestartet werden. So bleibt die Ladezeit<br />

<strong>für</strong> Benutzer der App auf einem erträglichen<br />

<strong>und</strong> akzeptablen Level, <strong>und</strong><br />

dennoch ist das System automatisiert,<br />

erfordert also seitens des Admins kein<br />

Eingreifen.<br />

Recipes<br />

Technisch ist da<strong>mit</strong> klar, wie eine<br />

<strong>Cloud</strong>ify-Installation auszusehen hat,<br />

doch eine Frage ist unbeantwortet: Wie<br />

definiert der Admin die Eigenschaften<br />

einer PaaS-Plattform, sodass er darin<br />

nach dem Start seine Anwendung auch<br />

sicher betreiben kann? An dieser Stelle<br />

kommen bei <strong>Cloud</strong>ify die Recipes ins<br />

Spiel, denn die legen genau jene Parameter<br />

fest.<br />

Intern unterscheiden die <strong>Cloud</strong>ify-<br />

Recipes zwischen mehreren Typen. Auf<br />

der einen Seite gibt es die Application-<br />

Recipes; eine Application in <strong>Cloud</strong>ify ist<br />

quasi der Oberbegriff <strong>für</strong> alle Dienste,<br />

die zum Betrieb der Applikation notwendig<br />

sind. Soll beispielsweise eine<br />

Webplattform betrieben werden, die<br />

phpBB enthält, so könnte die Applikation<br />

»phpBB« heißen.<br />

Ein Application-Recipe besteht aus<br />

den Definitionen mehrerer Services.<br />

Ein Service in <strong>Cloud</strong>ify ist ein konkreter<br />

Dienst, beispielsweise »MySQL«, das<br />

im Beispiel notwendig sein könnte, um<br />

»phpBB« sinnvoll zu nutzen. Da<strong>mit</strong> ein<br />

Dienst in <strong>Cloud</strong>ify im Rahmen von PaaS<br />

verwaltbar ist, bedarf es also eines entsprechenden<br />

Service-Recipes, ein Füllhorn<br />

an Recipes <strong>für</strong> die meisten alltäglichen<br />

Anwendungen findet sich unter<br />

[1] (Abbildung 4). Wer seinen K<strong>und</strong>en<br />

die Möglichkeit bieten möchte, einen<br />

Webserver zum Beispiel <strong>für</strong> das eigene<br />

Blog zu betreiben, wird <strong>mit</strong> diesen fertigen<br />

Recipes bereits glücklich werden<br />

– sollen allerdings spezifische Dienste<br />

in der <strong>Cloud</strong> ebenfalls automatisiert zu<br />

deployen sein, dann ist an dieser Stelle<br />

die Entwicklung eines Service-Recipes<br />

angesagt.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Virtualisierung<br />

<strong>Cloud</strong>ify<br />

85<br />

Service-Recipes haben eine verhältnismäßig<br />

komplexe Anatomie, so<br />

unterstützen sie sogenannte Lifecycle-<br />

Events, die wichtiger sind, als sie im<br />

ersten Augenblick wirken. Letztlich<br />

erledigen Lifecycle-Events das, was <strong>für</strong><br />

das Deployment einer PaaS-Anwendung<br />

elementar ist: Sie sorgen da<strong>für</strong>,<br />

dass – ausgehend von bestimmten<br />

Events (zum Beispiel Start/Stopp) einer<br />

Applikation – deren Service-Recipes die<br />

entsprechenden Befehle befolgen. Ein<br />

Recipe müsste also zum Beispiel beim<br />

Lifecycle-Event „Start“ da<strong>für</strong> sorgen,<br />

dass das Programm installiert ist <strong>und</strong><br />

gestartet wird.<br />

Auch auf die Begrifflichkeiten kommt<br />

es an: Die <strong>Cloud</strong>ify-Entwickler trennen<br />

im Application-Kontext zwischen<br />

„Services“ <strong>und</strong> „Service Instances“.<br />

Letzeres ist eine konkrete Inkarnation<br />

eines Dienstes, während der Begriff<br />

„Service“ die clusterweit verfügbaren<br />

Instanzen desselben Dienstes bezeichnet.<br />

„MySQL“ als Service bezieht sich<br />

also auf alle Instanzen von MySQL, die<br />

zu einer <strong>Cloud</strong>ify-Applikation gehören;<br />

eine „Service-Instanz“ hingegen würde<br />

sich auf eine spezifische Instanz des<br />

Dienstes beziehen, die eindeutig identifizierbar<br />

ist.<br />

Insgesamt ist das Prinzip der Recipes<br />

in <strong>Cloud</strong>ify sehr umfassend <strong>und</strong> am<br />

Anfang zweifellos auch komplex; hilfreich<br />

zur Seite steht dann allerdings<br />

die <strong>Cloud</strong>ify-Dokumentation [2], die<br />

neben ausführlichen Erklärungen auch<br />

konkrete Beispiele <strong>für</strong> die wichtigsten<br />

Themen enthält. Detailliert beschreibt<br />

Gigaspaces darin beispielsweise, wie<br />

sich über Recipes ein Tomcat- oder<br />

auch ein MongoDB-System als PaaS<br />

etablieren lässt.<br />

Die Integration <strong>mit</strong> externen<br />

Werkzeugen<br />

Obgleich Chef sich eher um Hosts denn<br />

um konkrete Applikationen kümmert,<br />

ist den <strong>Cloud</strong>ify-Entwicklern eine Anbindung<br />

ihrer Software an das zentrale<br />

Management-Werkzeug durchaus<br />

wichtig; seit <strong>Cloud</strong>ify 2.2 ist es deshalb<br />

auch möglich, Chef zu benutzen,<br />

um innerhalb virtueller Maschinen<br />

Applikationen zu deployen. Die Gigaspaces-Entwickler<br />

wollen die Funktion<br />

ausdrücklich als eine<br />

verstanden wissen,<br />

die komplementär zu<br />

den <strong>Cloud</strong>ify-eigenen<br />

Recipes ist; de facto<br />

lässt sich über die Anbindung<br />

an Chef aber<br />

das meiste, was in den<br />

Recipes von <strong>Cloud</strong>ify<br />

zu finden ist, über<br />

Cookbooks anbinden,<br />

insofern diese in hinreichender<br />

Qualität <strong>für</strong><br />

Chef vorhanden sind.<br />

Blick in die<br />

Zukunft: <strong>Cloud</strong>ify 3.0<br />

Die aktuelle <strong>Cloud</strong>ify-Version 2.6 hat<br />

bereits einige Zeit auf dem Buckel.<br />

Gigaspaces arbeitet <strong>mit</strong> Hochdruck an<br />

einer neuen Version, die bei Erscheinen<br />

die Versionsnummer 3.0 tragen wird.<br />

Wobei es an dieser Stelle möglicherweise<br />

untertrieben ist, nur von einer<br />

„neuen Version“ zu sprechen, denn <strong>für</strong><br />

<strong>Cloud</strong>ify 3.0 drehen die Entwickler die<br />

Lösung quasi einmal auf links <strong>und</strong><br />

schreiben weite Teile neu. Das ist<br />

zum Teil auch <strong>mit</strong> einer strategischen<br />

Neuausrichtung verb<strong>und</strong>en, die un<strong>mit</strong>telbar<br />

<strong>mit</strong> dem OpenStack-Projekt<br />

zusammenhängt.<br />

Ausgehend vom riesigen Hype, der das<br />

OpenStack-Projekt sowie die zu ihm gehörende<br />

<strong>Cloud</strong>-Computing-Umgebung<br />

erfasst hat, muss sich ein Produkt wie<br />

<strong>Cloud</strong>ify natürlich auch <strong>mit</strong> OpenStack<br />

genauer befassen. Bis dato war die<br />

OpenStack-Unterstützung in <strong>Cloud</strong>ify<br />

eher ausbaufähig, was zum großen Teil<br />

daran lag, dass es seitens OpenStack<br />

keine klaren Vorgaben gab, was die<br />

Orchestrierung angeht. Das Problem<br />

ist übrigens keineswegs spezifisch im<br />

Hinblick auf das Thema Orchestration,<br />

denn auch die Hersteller anderer<br />

Programme, die <strong>mit</strong> OpenStack zusammenarbeiten,<br />

tun sich bisweilen<br />

schwer. Der Netzwerk-Stack Neutron<br />

ist ein klassisches Beispiel <strong>für</strong> eine<br />

Komponente, die immer wieder eher<br />

massive Veränderungen durchläuft <strong>und</strong><br />

es so <strong>für</strong> Drittanbieter schwierig macht,<br />

strategische Entscheidungen zu fällen.<br />

In Sachen Orchestration hielt sich<br />

OpenStack bis dato sehr bedeckt.<br />

Abbildung 4: Über das Web-Interface lassen sich Recipes auswählen,<br />

die sich dann un<strong>mit</strong>telbar als Applikation starten lassen.<br />

Zwar tauchte das Thema immer wieder<br />

mal auf verschiedenen Agenden<br />

auf, konkrete technische Ansätze zur<br />

Implementierung fehlten allerdings.<br />

In OpenStack Havana hat sich das<br />

geändert, in Form von Heat steht jetzt<br />

eine Komponente <strong>für</strong> OpenStack zur<br />

Verfügung, die Orchestrierung nach<br />

mehreren unterschiedlichen Formaten<br />

ermöglicht. Heat ist im Gr<strong>und</strong>e eine<br />

Template-Processing-Engine, die Umgebungsbeschreibungen<br />

auf der einen<br />

Seite liest <strong>und</strong> dann auf der <strong>Cloud</strong>-Seite<br />

entsprechend umsetzt. Ähnlich wie bei<br />

<strong>Cloud</strong>ify könnte ein Heat-Template also<br />

durchaus die Anweisung haben: „Starte<br />

fünf Webserver <strong>und</strong> einen Loadbalancer<br />

<strong>mit</strong> automatischer Skalierung“.<br />

Hausinterne Konkurrenz?<br />

Heat basiert im Wesentlichen auf den<br />

Erfahrungen, die Amazon schon <strong>mit</strong> seinem<br />

<strong>Cloud</strong>Formation-Produkt gesammelt<br />

hat. Erstaunlicherweise ist Heat<br />

als OpenStack-Komponente jüngeren<br />

Datums: Erst im Oktober 2013 wurde<br />

die Lösung Core-Komponente, also<br />

offizieller OpenStack-Bestandteil. Was<br />

bedeutet das <strong>für</strong> <strong>Cloud</strong>ify? Denn im<br />

Gr<strong>und</strong>e existiert in OpenStack ja nun<br />

eine Komponente, die genau das tut,<br />

was <strong>Cloud</strong>ify zuvor ebenfalls tat, <strong>und</strong><br />

zwar in sehr ähnlicher Weise. Lohnt<br />

es sich da überhaupt noch, Zeit sowie<br />

Arbeit in die Adaption von <strong>Cloud</strong>ify <strong>für</strong><br />

OpenStack zu stecken?<br />

Durchaus, denken jedenfalls die Entwickler:<br />

<strong>Cloud</strong>ify 3.0 driftet sehr deutlich<br />

in Richtung OpenStack, die von<br />

Gigaspace zur Verfügung gestellten<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


86<br />

Virtualisierung<br />

<strong>Cloud</strong>ify<br />

Abbildung 5: Auch <strong>für</strong> Fre<strong>und</strong>e der Statistik hält <strong>Cloud</strong>ify Infos bereit:<br />

Über die Last-Anzeige ist ersichtlich, welche Ressourcen einzelne Applikationen<br />

gerade in Anspruch nehmen.<br />

n Info<br />

Informationen geben davon Zeugnis.<br />

Selbstverständlich wird <strong>Cloud</strong>ify 3.0<br />

auch weiterhin andere <strong>Cloud</strong>-Systeme<br />

unterstützen, die Lösung wird also<br />

nicht zur „OpenStack-Only“-Software.<br />

Und doch wird <strong>Cloud</strong>ify 3.0 eng <strong>mit</strong><br />

OpenStack verzahnt sein – dazu gehört<br />

die Unterstützung sämtlicher APIs<br />

in OpenStack, sodass <strong>Cloud</strong>ify nativ<br />

<strong>mit</strong> ihnen kommunizieren kann. Und<br />

natürlich wird <strong>Cloud</strong>ify 3.0 nicht die<br />

Funktionen nachbauen, die in Heat<br />

bereits vorhanden sind; entsprechende<br />

Arbeitsschritte leitet <strong>Cloud</strong>ify in Zukunft<br />

einfach an Heat weiter, was von<br />

einer nahtlosen Integration der beiden<br />

Tools zeugt.<br />

Außerdem bohren die Gigaspaces-<br />

Entwickler die Policy-Engine von <strong>Cloud</strong>ify<br />

auf: Jene ist in <strong>Cloud</strong>ify 2 da<strong>für</strong><br />

verantwortlich, die Skalierbarkeit in<br />

die Breite zu gewährleisten. Wenn also<br />

in einer bestehenden Plattform neue<br />

VMs gestartet werden, um eine bessere<br />

Lastverteilung zu erreichen, dann<br />

steckt die Policy-Engine dahinter. In<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31279<br />

<strong>Cloud</strong>ify 3.0 wird die<br />

Engine sehr viel mehr<br />

können. Die Gr<strong>und</strong>idee<br />

besteht darin, definierbare<br />

Workflows zu gestalten,<br />

die ausgehend<br />

von spezifischen Ereignissen<br />

– also eventbasiert<br />

– bestimmte<br />

Aktionen durchführen,<br />

<strong>und</strong> zwar deutlich<br />

umfangreicher, als<br />

es in den aktuellen<br />

Versionen der Fall ist.<br />

Letztlich soll <strong>Cloud</strong>ify<br />

for OpenStack das werden,<br />

was Amazon bei<br />

sich als AWS OpsWorks<br />

tituliert: Automatisierung,<br />

die sich weniger<br />

auf virtuelle Systeme<br />

denn auf spezifische<br />

Applikationen in den VMs bezieht. Gigaspaces<br />

realisiert das <strong>mit</strong>tels des Template-Formats<br />

»TOSCA« [3], das besser<br />

auf die spezifischen Anforderungen<br />

von Apps abgestimmt ist als die von<br />

Heat genutzten Formate. Da<strong>mit</strong> einher<br />

geht erneut die Integration <strong>mit</strong> Chef,<br />

wobei später definitiv auch andere<br />

Konfigurations-Management-Systeme<br />

funktionieren sollen.<br />

Ein weiterer großer Schritt in <strong>Cloud</strong>ify<br />

3 ist die Tatsache, dass das Tool einen<br />

Rewrite in Python durchlaufen hat, was<br />

ebenfalls auf die gewünschte, engere<br />

Anbindung an OpenStack zurückzuführen<br />

sein dürfte.<br />

Fazit<br />

<strong>Cloud</strong>ify in Version 2 ist ein überaus<br />

praktisches Werkzeug, <strong>mit</strong> dem sich<br />

Orchestrierung über die Grenzen verschiedener<br />

<strong>Cloud</strong>s hinweg praktisch<br />

<strong>und</strong> effektiv umsetzen lässt. Gerade die<br />

Möglichkeit der Multi-Tier-<strong>Cloud</strong>s sorgt<br />

<strong>für</strong> Freude, weil sie sogar das Verwalten<br />

von VMs über die Grenzen einzelner<br />

<strong>Cloud</strong>-Anbieter hinweg problemlos<br />

ermöglicht. Möglichkeiten wie automatisches<br />

Skalieren in die Breite bei<br />

Anwendungen innerhalb der <strong>Cloud</strong> sind<br />

nützlich <strong>und</strong> sorgen gegebenenfalls<br />

da<strong>für</strong>, dass Applikationen sogar dann<br />

online bleiben, wenn gerade viel Last<br />

anliegt (Abbildung 5).<br />

Zugute kommt der Lösung dabei, dass<br />

Gigaspaces tatsächlich konsequent<br />

einzelne Applikationen auch als solche<br />

betrachtet <strong>und</strong> da<strong>mit</strong> dem Motto der<br />

Platform-as-a-Service treu bleibt; alles,<br />

was in <strong>Cloud</strong>ify passiert, passiert auf<br />

Gr<strong>und</strong>lage konkreter Apps <strong>und</strong> nicht<br />

auf Gr<strong>und</strong>lage der VMs, in denen die<br />

Apps laufen.<br />

Nicht gar so heftige Begeisterungsstürme<br />

lösen hingegen einige der<br />

Design-Konzepte aus, die in <strong>Cloud</strong>ify<br />

2 umgesetzt sind. Die Tatsache, dass<br />

der Dienst vollständig auf Java basiert,<br />

dürfte manchem Admin böse aufstoßen.<br />

Hinzu kommt, dass es in den meisten<br />

Fällen wahrscheinlich eine Weile<br />

dauern wird, bis sich ein Admin in das<br />

System der Recipes in <strong>Cloud</strong>ify hineingedacht<br />

hat. Dass Chef alternativ zum<br />

Einsatz kommen kann, ist gut, auch<br />

wenn Puppet zumindest hierzulande<br />

die augenblicklich weiter verbreitete<br />

Lösung zu sein scheint.<br />

<strong>Cloud</strong>ify 3.0 verspricht viel Freude,<br />

auch wenn zu Redaktionsschluss von<br />

dem Werkzeug noch nicht viel mehr<br />

öffentlich verfügbar war als eine kleine<br />

Demo: <strong>Cloud</strong>ify 3 hat das Potenzial<br />

dazu, eine wichtige Komponente gerade<br />

<strong>für</strong> OpenStack-Setups werden zu<br />

können.<br />

Die taktische Neuausrichtung ist dabei<br />

nicht zu übersehen: Gigaspaces sieht<br />

die Zukunft des Werkzeugs offenbar im<br />

OpenStack-Kontext, verspricht allerdings,<br />

die Features <strong>für</strong> andere <strong>Cloud</strong>s<br />

beizubehalten <strong>und</strong> auch diese weiterhin<br />

zu unterstützen. Ob das Versprechen<br />

<strong>für</strong> die Ewigkeit gilt, dürfte aber<br />

wie immer davon abhängen, wie rege<br />

sich die Nachfrage nach diesen Funktionen<br />

gestaltet.<br />

Fest steht: Wer ein nützliches Werkzeug<br />

sucht, um im Rahmen einer Public<br />

<strong>Cloud</strong> PaaS-Komponenten zu pflegen,<br />

der sollte sich <strong>Cloud</strong>ify auf jeden<br />

Fall einmal anschauen. Eingedenk<br />

der Tatsache, dass es sich um Open-<br />

Source-Software handelt, die kostenlos<br />

erhältlich ist, <strong>und</strong> dank des leichten<br />

<strong>und</strong> sehr gut dokumentierten Setups ist<br />

ein Testlauf recht schnell gestartet. Ob<br />

das auch <strong>für</strong> <strong>Cloud</strong>ify 3.0 gelten wird,<br />

muss sich leider erst noch herausstellen.<br />

(jcb) n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


James Thew, 123RF<br />

Virtuelle IDE- <strong>und</strong> SCSI-Controller <strong>mit</strong> Hyper-V einsetzen<br />

Virtuelle Kontrolle<br />

Hardware-Zugriffe nehmen bei der Virtualisierung eine Sonderrolle ein. Das gilt auch <strong>für</strong> Festplatten-<br />

Controller; Hyper-V kommt sowohl <strong>mit</strong> IDE als auch <strong>mit</strong> SCSI zurecht, allerdings je nach Version in unterschiedlicher<br />

Weise. Thomas Joos<br />

Windows Server 2012 hat <strong>mit</strong> der einhergehenden<br />

Hyper-V-Version einige<br />

neue Möglichkeiten virtualisierter Festplatten-Controller<br />

eingeführt. Bei der<br />

neueren Version Windows Server 2012<br />

R2 hat Hersteller Microsoft hier nochmals<br />

nachgerüstet. Auch bei den Pro<strong>und</strong><br />

Enterprise-Varianten von Windows<br />

8 <strong>und</strong> 8.1 stehen diese zur Verfügung.<br />

Die Unterschiede zwischen Server 2012<br />

<strong>und</strong> 2012 R2 beziehungsweise Windows<br />

8 <strong>und</strong> 8.1 betreffen vor allem die Einsatzmöglichkeiten<br />

von IDE- <strong>und</strong> SCSI-<br />

Controllern, wie dieser Artikel zeigt.<br />

Gr<strong>und</strong>lagen<br />

In einer virtuellen Umgebung sind IDE-<br />

Controller zwar nicht langsamer als<br />

ihre SCSI-Pendants, da<strong>für</strong> aber in den<br />

Möglichkeiten deutlich begrenzt. Das<br />

unterscheidet sie von den physischen<br />

Controllern, wo SCSI sich gegenüber<br />

IDE auch durch höhere Geschwindigkeit<br />

auszeichnet.<br />

Der Funktionsumfang ist jedoch bei virtuellen<br />

IDE-Controllern gleichermaßen<br />

begrenzt. Die Hintergründe zu verstehen,<br />

hilft, den passenden Controller<br />

zu finden. In Windows Server 2012 <strong>und</strong><br />

in den virtuellen Maschinen der ersten<br />

Generation von Windows Server 2012<br />

R2 müssen virtuelle Server immer über<br />

einen IDE-Controller verfügen, an den<br />

das Bootlaufwerk angeschlossen ist,<br />

denn virtuelle Server booten erst ab<br />

der zweiten Generation <strong>mit</strong> Windows<br />

Server 2012 R2 von SCSI-Controllern.<br />

Weder virtuelle IDE- noch SCSI-Controller<br />

stehen in direkter Verbindung zum<br />

physischen Controller. Sie stehen also<br />

ausschließlich der virtuellen Maschine<br />

zur Verfügung. Bei einem neuen virtuellen<br />

Server bindet Hyper-V automatisch<br />

zwei IDE- <strong>und</strong> einen SCSI-Controller<br />

ein; nur bei Gästen der zweiten Generation<br />

fehlen die virtuellen IDE-Controller.<br />

Wie physische erlauben auch virtuelle<br />

IDE-Controller höchstens zwei angeschlossene<br />

Festplatten. Des Weiteren<br />

bietet ein virtueller Server <strong>mit</strong> Hyper-V<br />

Platz <strong>für</strong> maximal zwei IDE-Controller,<br />

während darin bis zu vier virtuelle SCSI-<br />

Controller unterkommen. Letztere bieten,<br />

wiederum sowohl in physischer als<br />

auch in virtueller Umsetzung, mehrere<br />

Kanäle <strong>mit</strong> zahlreichen Anschlussmöglichkeiten.<br />

Ein SCSI-Controller steuert<br />

bis zu 16 Festplatten, bei vier Controllern<br />

summiert sich die maximale<br />

Anzahl angeschlossener Geräte also auf<br />

64 (siehe Abbildung 1).<br />

Beim Booten greift ein virtueller Server<br />

der ersten Generation auf den IDE-Controller<br />

in der gleichen Weise wie auf ein<br />

physisches Gerät zu, reagiert also nicht<br />

gesondert auf die virtuelle Umgebung.<br />

Hyper-V schreibt die Befehle an den virtuellen<br />

IDE-Controller so um, dass die<br />

Zugriffe funktionieren. IDE-Festplatten<br />

stehen also auch dann zur Verfügung,<br />

wenn auf dem virtuellen Server die Integrationsdienste<br />

noch nicht gestartet<br />

sind. Sind diese dann geladen, stehen<br />

der virtuellen Maschine auch die speziellen<br />

Treiber <strong>für</strong> virtuelle IDE- <strong>und</strong> SCSI-<br />

Controller zur Verfügung.<br />

Das ist bei den virtuellen Maschinen der<br />

zweiten Generation anders. Hier weiß<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Virtualisierung<br />

Virtuelle Controller<br />

89<br />

Abbildung 1: SCSI- <strong>und</strong> IDE-Controller im Hardware-Assistenten.<br />

Abbildung 2: Virtuelle Platten können an mehreren Servern hängen.<br />

chermaßen begrenzen,<br />

allerdings ebenfalls<br />

erst ab der Windowsdas<br />

Betriebssystem bereits beim Start,<br />

dass es sich in einer virtuellen Umgebung<br />

befindet. Solche Gastsysteme<br />

unterstützen allerdings keinerlei emulierte<br />

Hardware, auch keine virtuellen<br />

IDE-Controller beim Booten. Sie fahren<br />

über das UEFI-System von virtuellen<br />

SCSI-Controllern hoch. Diese werden<br />

nicht emuliert, sondern sind als Treiber<br />

direkt in den Hypervisor integriert<br />

<strong>und</strong> dadurch schon beim Booten <strong>für</strong><br />

den Gast direkt zugänglich. Sobald ein<br />

virtueller Server gestartet ist <strong>und</strong> die Integrationsdienste<br />

geladen sind, greifen<br />

die virtuellen Maschinen ebenfalls über<br />

Treiber <strong>mit</strong> dem Hypervisor auf den<br />

Controller zu. Ab diesem Moment gibt<br />

es keine Geschwindigkeitsunterschiede<br />

mehr zwischen virtuellen IDE- <strong>und</strong><br />

SCSI-Controller, da beide über die gleiche<br />

Technik angeb<strong>und</strong>en sind.<br />

Virtuelle Maschinen der zweiten Generation<br />

setzen als Gast-Betriebssystem<br />

allerdings mindestens Windows Server<br />

2012 oder Windows 8 voraus, da ältere<br />

Betriebssysteme den neuen Standard<br />

nicht unterstützen.<br />

An virtuelle SCSI-Controller angeschlossene<br />

Festplatten lassen sich<br />

auch im laufenden Betrieb vom Server<br />

an- oder aushängen (Abbildung 2). Das<br />

funktioniert sowohl <strong>mit</strong> virtuellen Festplatten<br />

als auch <strong>mit</strong> physischen, die<br />

über virtuelle SCSI-Controller angeb<strong>und</strong>en<br />

sind. Bei virtuellen IDE-Controllern<br />

funktioniert dies nicht; darüber angeschlossene<br />

Festplatten lassen sich nur<br />

an- oder aushängen, wenn die virtuelle<br />

Maschine ausgeschaltet ist.<br />

Seit Windows Server 2012 R2 <strong>und</strong><br />

Windows 8.1 bietet Hyper-V zudem die<br />

Möglichkeit, auch die Größe virtueller<br />

Festplatten im laufenden Betrieb zu<br />

ändern. Dazu müssen die Festplatten<br />

jedoch an einem virtuellen SCSI-Controller<br />

angeschlossen sein.<br />

Die beiden aktuellen Windows-<br />

Versionen weisen optional außerdem<br />

virtuelle Festplatten, die an virtuellen<br />

SCSI-Controllern angeschlossen sind,<br />

mehreren virtuellen Servern zu (Shared<br />

VHDX). Das ist vor allem <strong>für</strong> virtuelle<br />

Cluster auf Hyper-V-Hosts sinnvoll.<br />

Diese Einstellung<br />

findet sich in den erweiterten<br />

Features bei<br />

den Festplatten des<br />

virtuellen Servers.<br />

Bei virtuellen IDE- <strong>und</strong><br />

SCSI-Controllern lassen<br />

sich Dienstqualität<br />

<strong>und</strong> Bandbreite virtueller<br />

Festplatten glei-<br />

Server-Version 2012 R2 oder Windows<br />

8.1 als Hyper-V-Host. Eine Kombination<br />

<strong>mit</strong> Shared-VHDX-Festplatten erlaubt<br />

diese Konfiguration bislang aber nicht.<br />

Virtuelle SCSI-Controller<br />

Egal, ob eine virtuelle Maschine läuft<br />

– im Fall eines SCSI-Controllers – oder<br />

nicht, eine neue Festplatte fügt die<br />

Hyper-V-Manager im grafischen Frontend<br />

nach einem Rechtsklick auf den<br />

gewünschten virtuellen Server im<br />

»Einstellungen«-Menü hinzu. In der<br />

Folge wählt man dort den passenden<br />

Controller <strong>und</strong> »Festplatte | Hinzufügen«<br />

(Abbildung 3).<br />

Anschließend wird eine neue Festplatte<br />

über »Virtuelle Festplatte | Neu« angelegt.<br />

Es folgt die Auswahl des Formats:<br />

Zur Verfügung stehen hierbei VHD <strong>und</strong><br />

Abbildung 3: Virtuelle Festplatten emuliert Hyper-V sowohl <strong>für</strong> IDE- als<br />

auch <strong>für</strong> SCSI-Controller.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


90<br />

Virtualisierung<br />

Virtuelle Controller<br />

Abbildung 4: Physische Festplatten in virtueller Umgebung.<br />

n Info<br />

VHDX, die sich in ihrer Maximalgröße<br />

von zwei beziehungsweise 64 TByte<br />

deutlich unterscheiden. Die Option<br />

»Dynamische Größe« statt »Feste<br />

Größe« ermöglicht dem virtuellen Laufwerk,<br />

erst bei zunehmender Auslastung<br />

<strong>mit</strong>zuwachsen.<br />

»Differenzierung« erzeugt die neue<br />

Platte auf Basis einer bereits vorhandenen.<br />

Auf diese Weise lässt sich eine<br />

Festplatte – empfohlenerweise <strong>mit</strong> eingeschaltetem<br />

Schreibschutz – als Basisinstallation<br />

<strong>für</strong> mehrere Gastsysteme<br />

verwenden. Die Differenzplatte enthält<br />

nur die im Gastsystem vorgenommenen<br />

Änderungen, indem alle Schreibzugriffe<br />

auf die Differenzplatte umgeleitet<br />

werden. Bei Lesezugriffen kombiniert<br />

der Hypervisor den Inhalt der Differenzfestplatte<br />

<strong>und</strong> den Inhalt der zugr<strong>und</strong>e<br />

liegenden virtuellen Festplatte, <strong>ohne</strong><br />

dass der Gast etwas davon bemerkt.<br />

Die zugr<strong>und</strong>e liegende Festplatte wird<br />

nicht mehr verändert, <strong>und</strong> die Differenzfestplatte<br />

bleibt relativ klein, da<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31226<br />

sie nur Änderungen<br />

enthält. So spart diese<br />

Methode viel Zeit <strong>und</strong><br />

Platz im Vergleich zu<br />

mehreren Klonen derselben<br />

Maschine.<br />

All diese Festplattenvarianten<br />

stehen übrigens<br />

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

– egal ob IDE oder<br />

SCSI – zur Wahl.<br />

Alternativ zum grafischen<br />

Frontend im<br />

Hyper-V-Manager steht<br />

auch die Powershell<br />

zur Änderung der Festplattenkonfiguration<br />

von virtuellen Maschinen<br />

zur Verfügung.<br />

Zunächst zeigt der<br />

folgende Befehl die<br />

bereits vorhandenen<br />

SCSI-Controller an:<br />

Get‐VMScsiController ‐VMname U<br />

<br />

Um eine neue Festplatte hinzuzufügen,<br />

geben Sie folgenden Befehl ein:<br />

Add‐VMHardDiskDrive ‐VMname ‐Path U<br />

‐ControllerType SCSI ‐ControllerNumber U<br />

<br />

Das Kommando »CMDlet Add‐VMScsi-<br />

Controller« fügt anschließend einem<br />

virtuellen Server einen SCSI-Controller<br />

hinzu.<br />

Windows Server 2012 R2 hat auch die<br />

Möglichkeit eingeführt, den physischen<br />

Speicherort virtueller Festplatten auf<br />

einem Hyper-V-Host sogar im laufenden<br />

Betrieb zu ändern. Das ist zum<br />

Beispiel sinnvoll, um einen Datenträger<br />

zu vergrößern oder virtuelle Datenträger<br />

auf ein NAS oder SAN auszulagern.<br />

Auch diese Option steht <strong>für</strong> beide<br />

Controller-Varianten, IDE <strong>und</strong> SCSI, zur<br />

Verfügung.<br />

Im Hyper-V-Manager genügt da<strong>für</strong> ein<br />

Klick <strong>mit</strong> der rechten Maustaste auf<br />

einen virtuellen Server, die Wahl von<br />

»Verschieben« <strong>und</strong> im folgenden Assistenten<br />

»Speicher des virtuellen Computers<br />

verschieben«. Bei Bedarf landen<br />

Konfiguration, Snapshots, virtuelle<br />

Festplatten <strong>und</strong> Smart-Paging-Dateien<br />

in verschiedenen Zielordnern.<br />

Smart Paging kommt zum Einsatz, um<br />

virtuellen Maschinen beim Start die<br />

Nutzung der Host-Festplatte als Arbeitsspeicher<br />

zu erlauben, falls andere<br />

Maschinen bei dynamischer Speicherverteilung<br />

(Dynamic Memory) den vorhandenen<br />

Speicher bereits vollständig<br />

verwenden. Nach dem erfolgreichen<br />

Start wird der Festplattenplatz wieder<br />

freigegeben <strong>und</strong> der virtuelle Server<br />

erhält seinen Speicher.<br />

USB-Festplatten <strong>und</strong> Hyper-V<br />

Leider unterstützt Hyper-V auch in<br />

der neuen Version von Windows Server<br />

2012 R2 keine direkte Anbindung<br />

von USB-Geräten. Es besteht aber die<br />

Möglichkeit, externe Festplatten, die<br />

am Hyper-V-Host angeschlossen sind,<br />

virtuellen Servern zur Verfügung zu<br />

stellen.<br />

Um eine USB-Festplatte <strong>mit</strong> einem<br />

virtuellen Server zu verbinden, schließt<br />

man diese direkt an den Hyper-V-Host<br />

an, da<strong>mit</strong> sie im System verfügbar<br />

ist. Auf der Befehlszeile gibt das<br />

Kommando »diskpart« Zugriff auf<br />

die angeschlossenen Laufwerke. »list<br />

disk« verrät die Nummer der externen<br />

Festplatte, die anschließend als<br />

Argument <strong>für</strong> das Kommando »select<br />

« dient. Nun schaltet<br />

»offline disk« die ausgewählte Platte<br />

vorerst ab. Sie sollte nun auch <strong>mit</strong> »list<br />

disk« im »diskpart«-Interface <strong>und</strong> in der<br />

Datenträgerverwaltung des Hyper-V-<br />

Hosts über »diskmgmt.msc« <strong>mit</strong> dem<br />

Vermerk offline erscheinen.<br />

Anschließend lässt sich diese Festplatte<br />

im Hyper-V-Manager einem Controller<br />

eines virtuellen Servers zuweisen. Die<br />

Vorgehensweise unterscheidet sich<br />

von der bei virtuellen Platten lediglich<br />

darin, dass man »Physische Festplatte«<br />

aktiviert <strong>und</strong> die gewünschte USB-<br />

Platte in der entsprechenden Auswahlliste<br />

markiert (Abbildung 4).<br />

Nun kommt die Festplattenverwaltung<br />

auf dem virtuellen Server zum Einsatz,<br />

ebenfalls <strong>mit</strong> »diskmgmt.msc«. Hier<br />

lässt sich die Platte per Kontextmenü<br />

online schalten <strong>und</strong> <strong>mit</strong> einem Laufwerksbuchstaben<br />

versehen. (csc) n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


chuyu, 123RF<br />

Virt-Builder erzeugt VM-Images im Nu<br />

Wie der Blitz<br />

Mit dem Virt-Builder-Tool lassen sich in wenigen Sek<strong>und</strong>en neue virtuelle Maschinen anlegen.<br />

Das <strong>ADMIN</strong>-<strong>Magazin</strong> hat einen ersten Blick auf das brandneue Tool geworfen. Oliver Frommel<br />

Im Bereich Virtualisierung schreitet<br />

die Linux-Welt rasant voran. Erst gab<br />

es nur VMware, dann war Xen eine Zeit<br />

lang sehr beliebt, <strong>mit</strong>tlerweile ist KVM<br />

(Kernel Virtual Machine) das dominierende<br />

Hypervisor-System, auf dem beispielsweise<br />

auch die Enterprise-Virtualisierungslösung<br />

von Red Hat basiert.<br />

Der „weltweit führende Anbieter von<br />

Open-Source-Lösungen“, wie er sich<br />

gerne selbst bezeichnet, möchte <strong>mit</strong><br />

der Weiterentwicklung der RHEV (Red<br />

Hat Enterprise Virtualization) gerne<br />

VMware Marktanteile abnehmen, aber<br />

das ist angesichts der <strong>mit</strong> dem gleichen<br />

Plan antretenden Konkurrenz durch Mi-<br />

n Listing 1: »localconfigure«<br />

01 . localenv<br />

02 ./autogen.sh \<br />

03 ‐‐prefix /usr \<br />

04 ‐‐libdir /usr/lib \<br />

05 ‐‐disable‐static \<br />

06 ‐‐enable‐gtk‐doc \<br />

07 ‐C \<br />

08 "$@"<br />

n Listing 2: »localenv«<br />

01 export SKIP_TEST_PARALLEL_MOUNT_LOCAL=1<br />

02 export SKIP_TEST_FILE_ARCHITECTURE_11=1<br />

crosofts Hyper-V ein ehrgeiziges Ziel.<br />

Jedenfalls investiert Red Hat eine<br />

ganze Menge in die Entwicklung des<br />

Linux-Kernels, des Hypervisors <strong>und</strong><br />

der ganzen Infrastruktur drumherum.<br />

Ein Beispiel da<strong>für</strong> ist die Libguestfs,<br />

die den Zugriff auf <strong>und</strong> das Arbeiten<br />

<strong>mit</strong> virtuellen Disk-Images ermöglicht.<br />

Sie wurde in <strong>ADMIN</strong> 02/​2011 vom Red-<br />

Hat-Entwickler Richard W.M. Jones<br />

vorgestellt [1], der jetzt ein neues Tool<br />

der Sammlung hinzugefügt hat. Schon<br />

länger hat er <strong>mit</strong> den von ihm so benannten<br />

Supermin-Appliances experimentiert:<br />

Extrem kleinen Images (um<br />

100 KByte), die in Sek<strong>und</strong>enschnelle<br />

booten. Darauf basierend hat er nun<br />

das Tool Virt-Builder entwickelt [2],<br />

das die Installation neuer VM-Images<br />

stark beschleunigt. Sonst ist dies ein<br />

eher langwieriger Prozess, der eine<br />

gewöhnliche Installation einer Linux-<br />

Distribution umfasst.<br />

VMs blitzschnell<br />

Mit Virt-Builder geht das alles etwas<br />

schneller, denn ein neues VM-Image<br />

wird da<strong>mit</strong> basierend auf abgespeckten<br />

Templates erstellt, die nur die<br />

nötigsten Komponenten beinhalten:<br />

im Wesentlichen einen Linux-Kernel,<br />

die Basis-Daemons <strong>und</strong> Systemd (siehe<br />

dazu die Admin-Story in diesem Heft).<br />

Zurückgreifend auf weitere Tools aus<br />

dem Libguestfs-Paket passt Virt-Builder<br />

das Template an die Wünsche des<br />

Administrators an, setzt etwa das Root-<br />

Passwort, konfiguriert das Netzwerk<br />

<strong>und</strong> so weiter.<br />

Enthalten ist Virt-Builder in Libguestfs-<br />

Paketen ab der Version 1.24, die noch<br />

keiner aktuellen Linux-Distribution beiliegt.<br />

Deshalb bleibt demjenigen, der<br />

Virt-Builder schon jetzt ausprobieren<br />

will, nur die Installation aus dem Quellcode,<br />

den man als Tar-Paket oder direkt<br />

aus dem Github-Repository herunterladen<br />

kann. Für Fedora 20 bietet Jones<br />

schon fertige RPMs von Libguestfs<br />

1.24 an, aber die Distribution befindet<br />

sich derzeit noch im Beta-Stadium.<br />

Praktischerweise muss die Libguestfs<br />

nicht systemweit installiert werden, um<br />

die neuen Tools auszuprobieren. Mit<br />

speziellen Run-Skripts lassen sich die<br />

Programme auch direkt im Quellcodebaum<br />

starten.<br />

Die Abhängigkeiten <strong>für</strong> die Libguestfs<br />

lassen sich auf Debian/​Ubuntu praktischerweise<br />

leicht <strong>mit</strong> dem Befehl<br />

»apt‐get builddep libguestfs« auflösen.<br />

Darüber hinaus werden noch die Pa-<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Virtualisierung<br />

Virt-Builder<br />

93<br />

kete »flex«, »bison«, »curl« <strong>und</strong> »gnupg«<br />

benötigt. Weil die Tools außerdem<br />

Dateien aus dem Host-Dateisystem<br />

verwenden, muss es unbedingt auf<br />

dem Laufenden sein (»apt‐get update«<br />

<strong>und</strong> »apt‐get dist‐upgrade« bei Debian/​<br />

Ubuntu). Ist das alles erledigt, konfiguriert<br />

»./configure« den Quellcode <strong>und</strong><br />

»make« übersetzt ihn – auf Multicore-<br />

Systemen lässt sich das <strong>mit</strong> »make<br />

‐jAnzahl‐Cores« beschleunigen. Um die<br />

Libguestfs aus dem Github-Repository<br />

zu übersetzen, empfehlen die Entwickler<br />

das Skript aus Listing 1, das auf<br />

Listing 2 zurückgreift.<br />

Normalerweise braucht Virt-Builder <strong>für</strong><br />

das Erzeugen eines Images keine Root-<br />

Rechte. Allerdings muss es auf das<br />

Kernel-Image <strong>und</strong> die initiale Ramdisk<br />

des Hosts zugreifen, die dummerweise<br />

unter Ubuntu <strong>für</strong> normale Anwender<br />

nicht zugänglich sind. Also muss man<br />

entweder Virt-Builder <strong>mit</strong> »sudo« ausführen<br />

oder die Zugriffsrechte im Verzeichnis<br />

»/boot« entsprechend anpassen.<br />

Einen Test der übersetzten Tools<br />

startet »make quickcheck«. Hat alles<br />

geklappt, kann es <strong>mit</strong> dem Virt-Builder<br />

losgehen.<br />

Eine Übersicht über die zur Verfügung<br />

stehenden Systeme gibt »virt‐builder<br />

‐‐list«. Wie erwähnt, muss das Tool im<br />

Quellcode-Baum <strong>mit</strong> einem Run-Skript<br />

ausgeführt werden:<br />

./run builder/virt‐builder ‐‐list<br />

Die Ausgabe ist in Abbildung 1 zu sehen.<br />

Leider funktioniert aber der Bau<br />

eines Images an dieser Stelle noch<br />

nicht, denn es fehlen noch die passenden<br />

Templates <strong>für</strong> diese Systeme, die<br />

normalerweise im Verzeichnis »builder/<br />

website/« liegen. Zu finden sind sie<br />

unter der Adresse [3]. Um dort zum Beispiel<br />

ein Image <strong>für</strong> eine Installation von<br />

Fedora 19 herunterzuladen, wechselt<br />

man ins Verzeichnis »builder/website«<br />

<strong>und</strong> gibt dort den folgenden Befehl ein:<br />

wget http://libguestfs.org/U<br />

download/builder/fedora‐19.xz<br />

Das Image ist nur 164 MByte groß, der<br />

Download ist also recht schnell erledigt.<br />

Jetzt lässt sich, wieder zurück<br />

im Hauptverzeichnis der<br />

Libguestfs-Distribution,<br />

<strong>mit</strong> einem Aufruf ein neues<br />

Fedora-Image erzeugen:<br />

./run builder/virt‐builder U<br />

fedora‐19 ‐‐output fedora19U<br />

.img ‐‐hostname fedora19<br />

Da<strong>mit</strong> erzeugt das Tool ein<br />

zufälliges Root-Passwort <strong>für</strong><br />

das neue System. Wer das<br />

nicht will, kann ein neues<br />

Passwort auch auf der<br />

Kommandozeile angeben.<br />

Aus <strong>Sicher</strong>heitsgründen,<br />

da<strong>mit</strong> das Passwort nicht in<br />

der Prozessliste auftaucht,<br />

allerdings nicht als direkten<br />

Parameter, sondern über<br />

den Umweg einer Datei. Das<br />

Passwort steht im Klartext<br />

in der Datei <strong>und</strong> wird über die Option<br />

»‐‐root‐password file:Rootpass.txt« an<br />

das Tool übergeben.<br />

Die so entstehende Linux-Installation<br />

kann man auf alle erdenklichen Arten<br />

an die eigenen Wünsche anpassen.<br />

Zum Beispiel listet »virt‐builder ‐‐notes<br />

Template« die verwendeten Kickstart<strong>und</strong><br />

Installationsskripts auf, über die<br />

man die Installation anpassen kann<br />

(Abbildung 2).<br />

Im Fall von Fedora 19 ist alles nach<br />

45 Sek<strong>und</strong>en erledigt <strong>und</strong> ein neues<br />

Disk-Image liegt auf der Festplatte. Wer<br />

will, kann es sofort <strong>mit</strong> Qemu booten<br />

oder <strong>mit</strong> virt-install in eine Linux- <strong>und</strong><br />

Libvirt-basierte Virtualisierungsinfrastruktur<br />

importieren:<br />

sudo virt‐install ‐‐name fedora19 U<br />

‐‐import ‐‐ram 2048 ‐‐disk /var/lib/U<br />

libvirt/images/fedora19.img<br />

Das neue System braucht beim ersten<br />

Booten ein bisschen länger, weil es<br />

noch die Firstboot-Skripts ausführt,<br />

danach dauert es ungefähr zehn Sek<strong>und</strong>en,<br />

bis man den Login-Prompt zu<br />

sehen bekommt. Wer nach dem Login<br />

einen Blick auf das virtuelle Dateisystem<br />

wirft, bekommt einen Eindruck<br />

vom Ressourcenverbrauch: Das neu installierte<br />

Linux-System belegt nur etwa<br />

700 MByte.<br />

Abbildung 1: Virt-Builder zeigt eine Liste von Linux-Systemen,<br />

die es zur Installation anbietet.<br />

Abbildung 2: Über die Kickstart-Datei <strong>und</strong> das Installationsskript<br />

lässt sich ein Image individuell anpassen.<br />

Über die Installation hinaus kann<br />

Virt-Builder auch den Hostnamen der<br />

neuen VM setzen, Benutzer anlegen,<br />

Passwörter ändern, Pakete installieren<br />

<strong>und</strong> beliebige Dateien editieren. Weil<br />

sich die virtuellen Maschinen so schnell<br />

erzeugen lassen, eignen sie sich auch<br />

dazu, mal eben schnell was in einer anderen<br />

Linux-Distribution zu erledigen.<br />

Der Libguestfs-Entwickler Jones hat<br />

das in seinem Blog vorgeführt, wo er<br />

Virt-Builder verwendet, um Pakete <strong>für</strong><br />

andere Distributionen zu bauen [4]. Der<br />

Bau eines kompletten Libvirt-Pakets<br />

dauerte da<strong>mit</strong> etwa sechs Minuten,<br />

gegenüber den ungefähr zwei Minuten,<br />

die es auf einem nicht virtualisierten<br />

Host-System in Anspruch nahm.<br />

Als dieser Artikel entstand, gab es übrigens<br />

noch eine interessante Diskussion<br />

zum Thema Virt-Builder [5]: Jones<br />

musste sich da<strong>für</strong> rechtfertigen, dass er<br />

Virt-Builder in der vergleichsweise esoterischen<br />

Programmiersprache Ocaml<br />

geschrieben hat, die, wie es sein Kollege<br />

ausdrückte, „nur er versteht.“ n<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31310<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


yang chao, 123RF<br />

Pandas: Datenanalyse <strong>mit</strong> Python<br />

Daten-Panda<br />

Die Python-Bibliothek Pandas basiert auf der schnellen Mathematik-Library NumPy <strong>und</strong> macht die Analyse<br />

großer Datenmengen einfach <strong>und</strong> effizient. Carsten Schnober<br />

Big Data <strong>für</strong> den Heimbedarf: Ganze<br />

Gruppen von Entwicklern finden neue<br />

Möglichkeiten in ihren Daten – in Zeiten<br />

von Laptops, die nur wenige Jahre alte<br />

Hochleistungsserver in Ausstattung<br />

<strong>und</strong> Leistung übertreffen. Woran es<br />

Unternehmen <strong>ohne</strong> große Entwicklungsabteilung<br />

weiterhin mangelt, ist<br />

allerdings die Manpower, um eigene<br />

Software zu entwickeln <strong>und</strong> auf ihre<br />

eigenen Daten zuzuschneiden. Die<br />

Python-Bibliothek »Pandas« [1] liefert<br />

fertige Methoden <strong>für</strong> viele Anwendungsfälle.<br />

Analyse-Panda<br />

Pandas, ein Akronym <strong>für</strong> Python Data<br />

Analysis Library, zielt auf fünf typische<br />

Schritte bei der Verarbeitung <strong>und</strong> Analyse<br />

von Daten, egal aus welcher Quelle<br />

diese stammen. Der erste besteht darin,<br />

diese einzulesen: Gerade aufgr<strong>und</strong><br />

der Vielzahl existierender Formate <strong>und</strong><br />

Standards, sparen die von Pandas ge-<br />

lieferten Werkzeuge Zeit. Die Bibliothek<br />

liest Datensätze in den Formaten CSV<br />

(Komma-separierte Werte), Excel, das<br />

HDF-Format, SQL, JSON, HTML <strong>und</strong><br />

Stata ein, wobei Pandas Wert auf Flexibilität<br />

beispielsweise bei abweichenden<br />

Feldtrennern legt. Zusätzlich liest<br />

es direkt aus dem Zwischenspeicher<br />

oder auch vom Python-Modul Pickle<br />

in Dateien serialisierte Python-Objekte<br />

ein.<br />

Es folgt die Vorbereitung der eingelesenen<br />

Daten. Datensätze werden bei<br />

fehlerhaften Einträgen gelöscht oder<br />

<strong>mit</strong> Standardwerten versehen, normalisiert,<br />

gruppiert, sortiert, transformiert<br />

<strong>und</strong> anderweitig an die weitere<br />

Verarbeitung angepasst. Auch hier gilt<br />

wieder, dass es sich bei solchen Vorbereitungsarbeiten<br />

in der Praxis meist um<br />

arbeitsintensive, aber wenig effektive<br />

Tätigkeiten handelt, die zu standardisieren<br />

sich lohnt, um zur Auswertung<br />

der Inhalte zu kommen.<br />

Der interessante Teil im Big-Data-<br />

Geschäft beginnt nun erst <strong>mit</strong> der<br />

Berechnung beispielsweise statistischer<br />

Modelle anhand eingelesener<br />

Datensätze, die beispielsweise <strong>mit</strong>hilfe<br />

von Algorithmen aus dem Bereich des<br />

maschinellen Lernens Prognosen über<br />

künftige Eingaben zulassen.<br />

Solide Basis<br />

Als Hauptnachteil interpretierter Sprachen<br />

wie Python galt lange Zeit vor<br />

allem die mangelhafte Geschwindigkeit<br />

beim Umgang <strong>mit</strong> großen Datenmengen<br />

<strong>und</strong> aufwendigen mathematischen<br />

Operationen. Vor allem die Python-<br />

Bibliothek »NumPy« ([2], Numerical Python)<br />

nimmt diesem Vorwurf den Wind<br />

aus den Segeln. Sie legt ihre Daten effizient<br />

im Arbeitsspeicher ab <strong>und</strong> integriert<br />

C-Code, bei dem die Kompilierung<br />

vor der Laufzeit abgeschlossen ist.<br />

Als wichtigste Datenstruktur führt<br />

NumPy die multidimensionalen Arrays<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Prorammieren<br />

Python Pandas<br />

95<br />

»ndarrays« ein. Im eindimensionalen<br />

Fall repräsentieren sie Vektoren, ansonsten<br />

Matrizen <strong>mit</strong> beliebig vielen<br />

Spalten. Im Gegensatz zu Python-Listen<br />

ist die Größe von NumPy-Arrays unveränderlich<br />

<strong>und</strong> ihre Elemente von einem<br />

festen, bei der Initialisierung vorgegebenen<br />

Typ; standardmäßig Fließkommazahlen.<br />

Die interne Struktur der<br />

Arrays ermöglicht die Berechnung von<br />

Vektor- <strong>und</strong> Matrizenoperationen <strong>mit</strong><br />

teils erheblich höherer Geschwindigkeit<br />

als in einer nativen Python-Implementation.<br />

Am einfachsten erzeugt man NumPy-<br />

Arrays aus bestehenden Python-Listen:<br />

np.array([1, 2, 3])<br />

»np« steht hier <strong>für</strong> den Modulnamen<br />

von NumPy, das per Konvention –<br />

aber nicht zwangsläufig – <strong>mit</strong> »import<br />

numpy as np« importiert wird. Mehrdimensionale<br />

Matrizen entstehen auf<br />

ähnliche Weise, nämlich <strong>mit</strong> verschachtelten<br />

Listen:<br />

np.array([[1, 2, 3], [4, 5, 6]])<br />

Arrays generieren<br />

Sind die Inhalte beim Erstellen eines<br />

Arrays noch unbekannt, erzeugt »np.<br />

zeros()« eine <strong>mit</strong> Nullen gefüllte Struktur<br />

vorgegebener Größe. Als Argument<br />

kommt ein Integer-Tupel zum Einsatz,<br />

in dem jeder Eintrag das Ausmaß einer<br />

Dimension repräsentiert. Für eindimensionale<br />

Arrays genügt ein einfacher<br />

Integer-Wert:<br />

array2d = np.zeros((5,5))<br />

array1d = np.zeros(5)<br />

Wer den bei »np.zeros()« verwendeten<br />

Nullen als initiale Elemente Einsen vorzieht,<br />

erhält ein solches Array auf die<br />

gleiche Weise <strong>mit</strong> »np.ones()«.<br />

Geringfügig schneller funktioniert<br />

»np.empty()«, da es die resultierende<br />

Datenstruktur nicht <strong>mit</strong> Inhalten initialisiert.<br />

Das Ergebnis enthält deshalb<br />

willkürliche Werte, die bereits an den<br />

verwendeten Speicherstellen stehen.<br />

Als echte Zufallszahlen taugen diese<br />

allerdings nicht.<br />

Die Syntax von »np.empty()«<br />

ist dieselbe wie<br />

bei »np.zeros()« <strong>und</strong><br />

»np.ones()«. Alle drei<br />

Funktionen kennen<br />

außerdem ein Pendant<br />

<strong>mit</strong> dem Suffix »_like«,<br />

also beispielsweise<br />

»np.zeros_like()«. Diese<br />

Methoden kopieren<br />

die Form eines bereits<br />

vorhandenen Arrays,<br />

das als Argument<br />

übergeben wird, <strong>und</strong><br />

erzeugen anhand dessen<br />

eine neue, gleich<br />

dimensionierte Datenstruktur <strong>mit</strong> den<br />

gewünschten Initialwerten.<br />

Des Weiteren nehmen die genannten<br />

Methoden das optionale Argument<br />

»dtype« entgegen. Es erwartet als Wert<br />

einen NumPy-Datentyp, beispielsweise,<br />

»np.int32«, »np.string_« oder<br />

»np.bool«, den es dem erzeugten Array<br />

statt des Standards Fließkommazahl<br />

zuweist. Im Fall von »np.empty()« ergeben<br />

sich daraus wieder willkürliche<br />

Inhalte.<br />

Die NumPy-Methode »arange()«<br />

schließlich funktioniert analog zum Python-Befehl<br />

»range()«: Bei Angabe eines<br />

Integer-Arguments erzeugt es ein Array<br />

jener Länge, wobei es die Werte <strong>mit</strong> einer<br />

schrittweisen Folge initialisiert:<br />

In: np.arange(3)<br />

Out: array([0, 1, 2])<br />

Optional nimmt »arange()« ebenfalls<br />

wie das Python-Pendant »range()« ein<br />

oder zwei weitere Argumente entgegen.<br />

Das zweite definiert einen Endwert,<br />

wodurch das erste zum Startwert der<br />

Folge wird. Das dritte Argument ändert<br />

optional die Schrittgröße. Dieses Beispiel<br />

erzeugt also eine Folge von 3 bis<br />

10 <strong>mit</strong> der Schrittgröße 2:<br />

In: np.arange(3, 10, 2)<br />

Out: array([3, 5, 7, 9])<br />

Gr<strong>und</strong>rechenarten<br />

NumPy erlaubt viele Operationen über<br />

alle Elemente eines Arrays, <strong>ohne</strong> dabei<br />

in Python-Manier Schleifen zu durchlaufen.<br />

Dabei kommen die bekannten<br />

Abbildung 1: Mit IPython <strong>und</strong> Pandas zur interaktiven Datenanalyse.<br />

mathematischen Operatoren zum Einsatz,<br />

beispielsweise »+« <strong>für</strong> die einfache<br />

Addition. Als Gr<strong>und</strong>regel gilt, dass sich<br />

der Operator bei zwei gleichförmigen<br />

Arrays auf die in beiden Arrays an der<br />

gleichen Position stehenden Elemente<br />

auswirkt. Addiert man hingegen ein<br />

Skalar, also eine Zahl, zu einem Array,<br />

fügt NumPy jedem Array-Element jene<br />

Zahl hinzu:<br />

In: np.array([1,2,3]) +<br />

np.array([3,2,1])<br />

Out: array([4, 4, 4])<br />

In: np.array([1,2,3]) + 1<br />

Out: array([2, 3, 4])<br />

Auf die gleiche Weise funktionieren<br />

Multiplikation, Division, Subtraktion<br />

<strong>und</strong> auch Potenzrechnung <strong>mit</strong> »**«.<br />

Darüber hinaus stellt NumPy einige<br />

universelle Funktionen <strong>für</strong> weitere<br />

Berechnungen zur Verfügung, etwa<br />

»sqrt()« <strong>und</strong> »square()«, die von jedem<br />

Inhaltselement eines Arrays die Quadratwurzel<br />

ziehen beziehungsweise sie<br />

<strong>mit</strong> zwei potenzieren.<br />

List- <strong>und</strong> Dictionary-<br />

Methoden<br />

Auch der Zugriff auf Elemente eines<br />

NumPy-Arrays funktioniert in der<br />

von Python bekannten Weise <strong>mit</strong> Indizes<br />

<strong>und</strong> Slices. Das erste Element<br />

liefert »array[0]«, die ersten beiden<br />

»array[:2]«. Bei mehrdimensionalen<br />

Arrays steuert eine durch Kommas getrennte<br />

Argumentliste die einzelnen Dimensionen<br />

an, etwa »array[0,2]«. Auch<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


96<br />

Programmieren<br />

Python Pandas<br />

hier ermöglichen Slices die Extraktion<br />

von Bereichen.<br />

Neben den Listenfunktionen hält sich<br />

NumPy auch <strong>für</strong> Mengenoperationen<br />

bereit. Die Methode »unique()« gibt nur<br />

die unterschiedlichen Elemente eines<br />

Arrays aus <strong>und</strong> erstellt da<strong>mit</strong> faktisch<br />

ein Set (Menge). Daneben bildet es<br />

Schnittmengen <strong>und</strong> Vereinigungsmengen<br />

aus eindimensionalen Arrays <strong>mit</strong><br />

»intersect1d()« <strong>und</strong> »union1d()«.<br />

Pandas in Serie<br />

Auf Basis der NumPy-Arrays führt Pandas<br />

weitere Datenstrukturen ein, die<br />

die Effizienz von NumPy <strong>mit</strong> einfacher<br />

Handbarkeit kombinieren. An erster<br />

Stelle steht hier das »Series«-Objekt. Es<br />

handelt sich dabei um ein eindimensionales<br />

NumPy-Array, ist jedoch <strong>mit</strong><br />

zusätzlichen Methoden <strong>und</strong> Attributen<br />

ausgestattet. Entsprechend gleicht das<br />

Erzeugen eines Series-Objekts dem eines<br />

NumPy-Arrays:<br />

s = pd.Series([1, 2, 3])<br />

Abbildung 2: Pandas liest <strong>und</strong> schreibt Daten aus Dateien<br />

<strong>und</strong> stellt sie übersichtlich dar.<br />

Eine der Erweiterungen verglichen <strong>mit</strong><br />

NumPy-Arrays besteht in den Indizes,<br />

die jedes Series-Objekt bereithält. Werden<br />

diese nicht explizit definiert, bestehen<br />

sie wie bei einer Liste aus fortlaufenden<br />

Nummern. Die Indizes dürfen<br />

aber auch beispielsweise Strings sein:<br />

Series([1, 2, 3], index=['a', 'b', 'c'])<br />

Nun lassen sich die Elemente ähnlich<br />

wie bei einem Python-Dictionary<br />

abrufen, etwa über »s['a']«. Diesem<br />

Umstand kommt Pandas entgegen <strong>und</strong><br />

erlaubt die Initialisierung eines Series-<br />

Objekts auch direkt aus einem Python-<br />

Dictionary:<br />

Series({'a': 1, 'b': 2, 'c': 3})<br />

Auch in diesem Anwendungsfall lässt<br />

sich separat eine Liste als »index«-Argument<br />

übergeben. Das führt dazu, das<br />

aus dem Dictionary ausschließlich jene<br />

Elemente im resultierenden Series-Objekt<br />

landen, die auch im Index vorkommen.<br />

Umgekehrt initialisiert Pandas<br />

die Werte <strong>für</strong> Indizes, die im Dictionary<br />

fehlen, als nicht vorhanden (»NaN«). Im<br />

folgenden Fall fällt beispielsweise der<br />

Eintrag <strong>für</strong> »'d'« im Ergebnis weg, während<br />

»'c'« <strong>ohne</strong> Wert initialisiert wird.<br />

In: Series({'a': 1, 'b': 2, 'd': 4},<br />

index=['a', 'b', 'c'])<br />

Out:<br />

a 1<br />

b 2<br />

c NaN<br />

dtype: float64<br />

Auch mehrere Indizes sind erlaubt.<br />

Dazu übergibt man dem »index«-<br />

Argument statt einer einfachen Liste<br />

eine Liste von Tupel, deren Elemente<br />

wiederum die Indizes darstellen. Solche<br />

Strukturen dienen in der Praxis vor<br />

allem dazu, Datensätze anhand eines<br />

ersten Index zu gruppieren, wobei der<br />

zweite Index dann die Elemente innerhalb<br />

einer solchen Gruppe eindeutig<br />

identifiziert.<br />

Bei den Indizes handelt es sich um<br />

eigene Pandas-Datenobjekte, die generell<br />

unveränderbar sind. Allerdings<br />

lassen sie sich <strong>mit</strong> der Methode<br />

»reindex()« austauschen. Sie akzeptiert<br />

als Argument eine Liste, ebenso wie<br />

das »index«-Argument bei der Series-<br />

Initialisierung. Auch hier füllt Pandas<br />

nicht vorhandene Werte <strong>mit</strong> »NaN«<br />

auf <strong>und</strong> entfernt solche Werte, die im<br />

neuen Index nicht mehr vorkommen.<br />

Anstelle von »NaN« lassen sich <strong>mit</strong> dem<br />

Argument »fill_value« andere Standardwerte<br />

festlegen, sodass leere Zeilen<br />

beispielsweise <strong>mit</strong> 0 gefüllt werden:<br />

s.reindex(['d', 'e', 'f'], fill_value=0)<br />

»s« steht hierbei <strong>für</strong> ein zuvor erzeugtes<br />

Series‐Objekt.<br />

Alles im Rahmen<br />

Zweidimensionale Strukturen implementiert<br />

Pandas <strong>mit</strong>tels der »Data-<br />

Frame«-Klasse. Die Initialisierung eines<br />

DataFrame-Objekts erfolgt wiederum<br />

auf die gleiche Weise wie bei Series. Die<br />

Spalten definiert man ebenfalls über<br />

ein Dictionary, in dem jeder Schlüssel<br />

als Wert eine Liste aus Elementen enthält:<br />

DataFrame({'a': [1, 2], 'b': [3, 4]})<br />

Eine optionale »index«-Liste legt wie<br />

bei Series die Indizes fest. Zusätzlich<br />

nimmt der DataFrame-Konstruktor das<br />

optionale Argument »columns« entgegen,<br />

das wie »index« funktioniert, aber<br />

statt der Zeilen die Spaltenbezeichnungen<br />

definiert:<br />

In: DataFrame({'a': [1, 2], 'b': [3,<br />

4]}, columns=['a', 'c'], index=['top',<br />

'bottom'])<br />

Out:<br />

a c<br />

top 1 NaN<br />

bottom 2 NaN<br />

Auch hier fallen Spalten weg, die nicht<br />

in der »columns«-Liste stehen. Nicht<br />

definierte Spalten hingegen initialisiert<br />

Pandas wiederum <strong>mit</strong> »NaN«.<br />

Der Zugriff auf eine Spalte erfolgt bei<br />

Dataframes ebenfalls wie auf ein Dictionary<br />

durch »dataframe['a']«. Zusätzlich<br />

lassen sich die Spalten als Attribute<br />

eines DataFrame-Objekts ansteuern:<br />

»dataframe.a«. Möchte man stattdes-<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Prorammieren<br />

Python Pandas<br />

97<br />

sen eine Zeile adressieren, hilft das<br />

DataFrame-Attribut »ix«: »dataframe.<br />

ix['top']«.<br />

Wie Series kennt auch Dataframe die<br />

»reindex()«-Methode. Sie bezieht sich<br />

standardmäßig auf die Zeilenbeschriftungen,<br />

aber das Argument »columns«<br />

ersetzt auf die gleiche Weise die Spaltennamen.<br />

Sowohl bei Series- als auch bei DataFrame-Objekten<br />

dient die »drop()«-<br />

Methode dazu, einzelne oder mehrere<br />

Zeilen zu entfernen. Für den ersten Fall<br />

dient die Angabe des gewünschten<br />

Index als Argument. Um mehrere Zeilen<br />

zu löschen, kommt eine Liste zum<br />

Einsatz:<br />

s.drop(['b', 'c'])<br />

Dateien<br />

In der Big-Data-Realität kommen zu<br />

analysierende Daten meist nicht direkt<br />

aus der Anwendung, die sie schließlich<br />

analysiert. Pandas liefert deshalb einige<br />

Hilfsfunktionen <strong>mit</strong>, die gängige<br />

Dateiformate einlesen <strong>und</strong> deren Inhalte<br />

direkt in Pandas-Datenstrukturen<br />

überführen. Sie heißen »read_csv()«,<br />

»read_table()« <strong>und</strong> »read_fwf()«. Abbildung<br />

1 zeigt eine Beispielsitzung <strong>mit</strong><br />

der erweiterten Python-Shell IPython<br />

[3] <strong>und</strong> einem »read_csv()«-Aufruf, Abbildung<br />

2 die zusammengefasste Darstellung<br />

eines Datensatzes.<br />

Diese Methoden erwarten Datenquellen<br />

in tabellarischer Form, also <strong>mit</strong><br />

einem Datensatz pro Zeile <strong>und</strong> durch<br />

Kommas oder Tabulatoren separierte<br />

Zellen. Beliebige andere Feldtrenner<br />

lassen sich <strong>mit</strong> dem Argument »sep«<br />

in Form einfacher Strings oder regulärer<br />

Ausdrücke festlegen. Lediglich bei<br />

»read_fwf()« machen fest definierte<br />

Feldbreiten die Feldtrenner überflüssig,<br />

stattdessen übergibt man <strong>mit</strong> »widths«<br />

eine Liste der Feldbreiten in Zeichenanzahl<br />

oder <strong>mit</strong> »colspecs« die absoluten<br />

Start- <strong>und</strong> Endwerte jeder Spalte als<br />

Tupel. Als Datenquelle erwarten die<br />

Lesemethoden jeweils als erstes – oder<br />

als »path«-Argument – Dateinamen<br />

oder URLs.<br />

Standardmäßig interpretieren die<br />

Pandas-Lesemethoden die erste Zeile<br />

einer Datei als Header, der die Spaltennamen<br />

enthält. Setzt<br />

man beim Methodenaufruf<br />

das Argument<br />

»header=None«, wird<br />

die erste Zeile zum<br />

ersten Datensatz. In<br />

diesem Fall bietet<br />

sich die Übergabe der<br />

Spaltennamen als Liste<br />

<strong>mit</strong>hilfe des »names«-<br />

Arguments an.<br />

Um beim Verarbeiten<br />

sehr großer Dateien Arbeitsspeicher<br />

<strong>und</strong> Zeit<br />

zu sparen, dient bei<br />

allen Lesefunktionen<br />

außerdem das Argument<br />

»iterator=True«<br />

dazu, das Einlesen<br />

stückweise zu erledigen.<br />

Statt des kompletten Dateiinhaltes<br />

liefern die Lesefunktionen dann ein<br />

TextParser-Objekt zurück. Die Größe<br />

der eingelesenen Teilstücke spezifiziert<br />

das Argument »chunksize«. Wird dieses<br />

Argument angegeben, setzt Pandas<br />

»iterator« übrigens automatisch auf<br />

»True«. Über einen TextParser lässt sich<br />

nun in einer »for«-Schleife die Datei<br />

zeilenweise lesen <strong>und</strong> verarbeiten. Die<br />

»get_chunk()«-Methode liefert direkt<br />

den nächsten Abschnitt der Datei.<br />

Die Datenstrukturen Series <strong>und</strong> Data-<br />

Frame machen es ebenso leicht, ihre<br />

Inhalte in Dateien zu schreiben. Beide<br />

verfügen über eine »to_csv()«-Methode,<br />

die als Argument die Ausgabedatei<br />

erwartet; gibt man stattdessen »sys.<br />

stdout« an, leitet sie die Daten direkt<br />

an die Standardausgabe um. Als Feldseparator<br />

kommt standardmäßig ein<br />

Komma zum Zuge, eine Alternative deklariert<br />

das »sep«-Argument.<br />

Verschiedene Formate<br />

Selbst Excel-Dateien verarbeitet Pandas<br />

<strong>mit</strong>hilfe der Klasse »ExcelFile«. Ihr<br />

Konstruktor nimmt den Dateipfad entgegen;<br />

das resultierende »ExcelFile«-<br />

Objekt liefert über die Methode<br />

»parse()« DataFrame-Objekte aus den<br />

einzelnen Arbeitsblättern (Sheets) zurück:<br />

excelfile = pandas.ExcelFile('datei.U<br />

xls')<br />

Abbildung 3: Mithilfe von Matplotlib visualisiert Pandas Datensätze.<br />

dataframe = excelfile.parse('Sheet1')<br />

Pandas macht sich auf Wunsch auch<br />

das Modul Pickle zunutze, das Objekte<br />

im Binärformat auf der Festplatte speichert.<br />

Hier<strong>für</strong> bieten Series <strong>und</strong> Data-<br />

Frame, ebenso wie alle anderen Pandas-Objekte,<br />

die Hilfsmethode »save()«<br />

an. Sie erwartet nur die Ausgabedatei<br />

als Argument. Die Pandas-Methode<br />

»load()« liest diese wiederum ein <strong>und</strong><br />

gibt das entsprechende Objekt zurück.<br />

Daneben bringt die Daten-Bibliothek<br />

Unterstützung <strong>für</strong> das HDF5-Format<br />

(Hierarchical Data Format) <strong>mit</strong>, das unter<br />

anderem die Mathematik-Software<br />

Matlab verwendet. Es bietet den Vorteil,<br />

dass es sich selbst bei Verwendung<br />

von Kompression auch ausschnittsweise<br />

effizient lesen lässt <strong>und</strong> eignet<br />

sich so<strong>mit</strong> besonders <strong>für</strong> sehr große<br />

Datensätze.<br />

Eine HDF5-Datei liest Pandas über die<br />

Klasse »HDFStore« ein, deren Konstruktor<br />

den Dateinamen entgegennimmt.<br />

Das resultierende Objekt lässt sich ähnlich<br />

wie ein Dictionary auslesen:<br />

hdf = HDFStore('datei.h5')<br />

s1 = hdf['s1']<br />

Diese Aufrufe lesen die HDF-Datei »datei.h5«<br />

aus, deren Datentruktur ein Series-Objekt<br />

namens »s1« enthält. Dieses<br />

wird in der ebenfalls »s1« genannten<br />

Variable gespeichert.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


98<br />

Programmieren<br />

Python Pandas<br />

Objekten doppelte Einträge löscht.<br />

»replace()« hingegen durchsucht alle<br />

Einträge nach einem bestimmten Wert<br />

<strong>und</strong> ersetzt die Treffer durch einen anderen:<br />

series.replace('a', 'b')<br />

Allgemeiner arbeitet die »map()«-<br />

Methode. Sie nimmt eine Funktion oder<br />

ein Dictionary entgegen <strong>und</strong> ändert<br />

die Einträge eines Datenobjekts automatisch.<br />

Das folgende Beispiel etwa<br />

verwandelt <strong>mit</strong>tels der Funktion »str.<br />

lower()« alle Einträge einer Spalte in<br />

Kleinbuchstaben:<br />

dataframe['a'].map(str.lower)<br />

Abbildung 4: Die Pandas-Dokumentation führt alle Möglichkeiten der Bibliothek auf.<br />

n Info<br />

Daten!<br />

Die einmal eingelesenen Daten bringt<br />

Pandas nun <strong>mit</strong>tels zahlreicher Hilfsfunktionen<br />

in Form. Zunächst vereint<br />

etwa »merge()« zwei DataFrame-<br />

Objekte:<br />

pandas.merge(dataframe1, dataframe2)<br />

»merge()« vereint die Spalten der beiden<br />

Dataframes standardmäßig auf<br />

Gr<strong>und</strong>lage identischer Indizes. Soll es<br />

zur Identifikation zusammengehöriger<br />

Datensätze stattdessen andere Spalten<br />

verwenden, definiert das Argument<br />

»on« den betreffenden Spaltennamen.<br />

Das funktioniert selbstverständlich nur,<br />

wenn beide Dataframes eine Spalte<br />

dieses Namens enthalten.<br />

Statt Datensätze zweier Objekte zusammenzuführen,<br />

hängt »concat()«<br />

Series oder Dataframes aneinander.<br />

Im einfachsten Fall ergibt sich beispielsweise<br />

aus der Konkatenierung<br />

zweier Series-Objekte ein neues solches<br />

Objekt, das alle Einträge beider<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31287<br />

Quellobjekte nacheinander aufführt.<br />

Alternativ erzeugt<br />

concat([series1, series2, series3],<br />

axis=1)<br />

aus mehreren Series-Objekten ein<br />

Dataframe. In diesem Beispiel fügt<br />

die Funktion die Quellen statt zeilenweise<br />

(»axis=0«) anhand der Spalten<br />

(»axis=1«) zusammen.<br />

SQL-Datenbanknutzer kennen die<br />

»concat()«-Funktionalität als Joins.<br />

Standardmäßig kommt dabei die<br />

»inner«-Methode zum Zuge, die zu einer<br />

Schnittmenge der verwendeten Schlüssel<br />

führt. Alternativ stehen »outer«<br />

(Vereinigungsmenge) sowie »left« <strong>und</strong><br />

»right« zur Verfügung. Bei den letzteren<br />

beiden enthält das Ergebnis einer<br />

Zusammenführung ausschließlich die<br />

Schlüssel des linken beziehungsweise<br />

rechten Quellobjekts.<br />

Immer weiter<br />

Pandas spart nicht an weiteren Hilfsfunktionen<br />

zur Datenmanipulation.<br />

Die Dataframe-Methoden »stack()« <strong>und</strong><br />

»unstack()« etwa drehen ein Dataframe<br />

so, dass die Spalten zu Zeilen werden<br />

<strong>und</strong> umgekehrt.<br />

Zum Säubern vorhandener Daten bietet<br />

Pandas etwa »drop_duplicates()«<br />

an, dass aus Series- <strong>und</strong> Dataframe-<br />

Python-gemäß erlaubt Pandas hier<br />

auch die Übergabe einer anonymen<br />

Lambda-Funktion.<br />

An dieser Stelle zeigt sich auch die<br />

Stärke der durch NumPy ermöglichten<br />

Vektorisierung. Die Series-Klasse<br />

enthält unter anderem ein eigenes<br />

Attribute »str« <strong>für</strong> die Verarbeitung von<br />

Strings, die <strong>ohne</strong> zeilenweise Iteration<br />

auskommt. Beispielsweise findet dieser<br />

Befehl alle Einträge, die den String<br />

»<strong>ADMIN</strong>« enthalten:<br />

series.str.contains("<strong>ADMIN</strong>")<br />

Ausblick<br />

Pandas bietet zahlreiche weitere bislang<br />

nicht angesprochene Methoden<br />

<strong>für</strong> die Datenmanipulation, auch manches<br />

hier nicht erwähnte Argument<br />

macht manche Funktionen in mehr<br />

oder weniger alltäglichen Anwendungsfällen<br />

zu nützlichen Helfern. Des Weiteren<br />

bedient sich Pandas etwa über die<br />

»plot()«-Methode (Abbildung 3) der Bibliothek<br />

Matplotlib [4], um Dataframes<br />

<strong>und</strong> Series zu visualisieren. Die Pandas-<br />

Dokumentation enthält eine vollständige<br />

Referenz (Abbildung 4).<br />

Die Datenbibliothek Pandas zeigt,<br />

dass Python vor allem dank der<br />

NumPy-Gr<strong>und</strong>lage reif ist, um es <strong>mit</strong><br />

den kompilierten Sprachen in puncto<br />

Geschwindigkeit aufzunehmen, während<br />

es Vorteile wie eine intuitive Syntax<br />

<strong>und</strong> verschiedene interaktive Shells<br />

<strong>mit</strong>bringt. n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Nataliya-Velykanova, 123RF<br />

Die Skriptsprache Lua<br />

Mondsüchtig<br />

Als eingebaute Skriptsprache ist Lua <strong>mit</strong>tlerweile Teil einer Vielzahl von Programmen. Allein schon deshalb<br />

lohnt es sich, sie zu lernen. Dieser Artikel gibt einen Einblick in den Lua-Kosmos. Oliver Frommel<br />

Schon wieder eine neue Programmiersprache,<br />

die keiner braucht, wird<br />

sich vielleicht mancher denken, der<br />

noch nie von Lua [1] gehört hat. Lua<br />

ist jedoch keine neue Erfindung, sondern<br />

feiert dieses Jahr bereits den 20.<br />

Geburtstag. Ein Gr<strong>und</strong> da<strong>für</strong>, dass Lua<br />

einen geringeren Bekanntheitsgrad<br />

als etwa Python oder Perl besitzt, ist,<br />

dass Lua seltener als eigenständige<br />

Programmiersprache eingesetzt wird,<br />

sondern meistens als eingebettete<br />

Skripting-Sprache <strong>für</strong> einzelne Programme.<br />

Abbildung 1: Ein kleines Lua-Skript, das Gebrauch<br />

von der Libguestfs macht.<br />

Besonders bei Spielen <strong>und</strong> Game<br />

Engines ist Lua sehr weit verbreitet.<br />

Beinahe 150 Spiele <strong>mit</strong> Lua-Einsatz<br />

listet Wikipedia gar in einer eigenen Kategorie<br />

„Lua-scripted video games“ auf.<br />

Lua ist aber auch in einer Vielzahl von<br />

Netzwerk- <strong>und</strong> Systemprogrammen zu<br />

finden, etwa in dem Netzwerk-Analyzer<br />

Wireshark, dem Scanner Nmap [2],<br />

dem MySQL-Proxy [3], der Antispam-<br />

Lösung Rspamd, der VoIP-Software<br />

FreeSwitch, der Redis-NoSQL-Datenbank,<br />

dem Webserver Apache [4] <strong>und</strong><br />

Nginx (siehe den Artikel zu OpenResty<br />

in diesem Heft).<br />

Homegrown<br />

Entwickelt wurde Lua an der Katholischen<br />

Universität von Rio de Janeiro<br />

von Roberto Ierusalimschy, Luiz Henrique<br />

de Figueiredo <strong>und</strong> Waldemar<br />

Celes. Weil Brasilien bis 1992 starken<br />

Importbeschränkungen <strong>für</strong> Hard- <strong>und</strong><br />

Software unterlag, hatten die drei sich<br />

entschieden, <strong>für</strong> ihre Zwecke eine eigene<br />

Skriptsprache zu entwickeln, die<br />

schließlich in Lua (portugiesisch <strong>für</strong><br />

„Mond“) mündete. Ierusalimschy steuert<br />

noch heute die Entwicklung <strong>und</strong> hat<br />

das Standardwerk „Programming in<br />

Lua“ verfasst, das Anfang dieses Jahres<br />

in der dritten Auflage erschienen ist<br />

(auf deutsch bei Open Source Press<br />

erhältlich). Online ist die erste Auflage,<br />

die sich <strong>mit</strong> Lua 5.0 beschäfigt, unter<br />

[5] zu finden. Mittlerweile gibt es die<br />

Version 5.2, aber das Online-Buch ist<br />

noch zu großen Teilen aktuell.<br />

Wie angesprochen, ist Lua im Wesentlichen<br />

als Bibliothek konzipiert, die<br />

Anwendungsprogrammierer in ihre<br />

Software integrieren können, um sie<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Programmieren<br />

Lua<br />

101<br />

<strong>mit</strong> Skripting-Fähigkeiten auszustatten.<br />

Das bedeutet aber nicht, dass man<br />

Lua nicht <strong>ohne</strong> Zusatzsoftware nutzen<br />

könnte. Die Lua-Distribution, die es <strong>für</strong><br />

alle gängigen Betriebssysteme gibt,<br />

enthält einen Interpreter, der nur wenige<br />

h<strong>und</strong>ert Zeilen umfasst <strong>und</strong> sonst<br />

auf die vorhandenen Bibliotheksfunktionen<br />

zurückgreift. Gerade diese Kompaktheit<br />

(Abbildung 1), die die gesamte<br />

Lua-Distribution auszeichnet, zusammen<br />

<strong>mit</strong> einer recht hohen Ausführungsgeschwindigkeit,<br />

gehört zu den<br />

immer wieder gepriesenen Vorzügen<br />

von Lua. Dennoch bietet der Interpreter<br />

auch Features wie Garbage Collection,<br />

also die automatische Bereinigung<br />

nicht mehr verwendeter Datenstrukturen<br />

<strong>und</strong> da<strong>mit</strong> Freigabe von Speicher.<br />

Überschaubar<br />

Konzeptuell bietet Lua wenige aufregende<br />

Features. Die Syntax ist recht<br />

konventionell <strong>und</strong> markiert beispielsweise<br />

Blöcke statt <strong>mit</strong> geschweiften<br />

Klammern <strong>mit</strong> den Schlüsselwörtern<br />

»do« <strong>und</strong> »end«. Insgesamt bietet Lua<br />

nur etwa 20 reservierte Schlüsselwörter,<br />

die in Tabelle 1 zu finden sind, <strong>und</strong><br />

ist da<strong>mit</strong> recht schnell erlernbar.<br />

Lua ist eine dynamisch typisierte Sprache,<br />

die die Typen »nil«, »boolean«,<br />

»number«, »string«, »function«, »thread«,<br />

»table« <strong>und</strong> »userdata« kennt.<br />

Der Typ einer Variablen wird also bestimmt,<br />

wenn ein Skript abläuft, <strong>und</strong><br />

gegebenfalls auch in einen anderen Typ<br />

umgewandelt. Es ist also kein Problem,<br />

einer Variable beispielsweise eine Zahl<br />

zuzuweisen <strong>und</strong> später im Programm<br />

dann einen String. Beim Boolean-Typ,<br />

der Wahrheitswerte aufnimmt, verhält<br />

es sich so, dass »false« <strong>und</strong> »nil« <strong>für</strong><br />

falsch stehen, während ein leerer String<br />

oder 0 einen wahren Wert repräsentieren.<br />

Das ist eindeutig <strong>und</strong> anders<br />

als etwa in PHP, wo die Zuweisung<br />

beliebiger Typen zu Wahrheitswerten<br />

eher dem Chaos-Prinzip folgt als einer<br />

bestimmten Methode.<br />

Strings<br />

Zeichenketten lassen sich – wie von<br />

anderen Sprachen gewohnt – <strong>mit</strong><br />

einfachen oder doppelten Anführungszeichen<br />

definieren. Eine Besonderheit<br />

Abbildung 2: Für die Zerobrane-IDE dürfen Anwender soviel zahlen, wie sie möchten.<br />

sind allerdings Strings, die sich über<br />

mehrere Zeilen erstrecken. Hier verlangt<br />

Lua doppelte eckige Klammern,<br />

um einen solchen String einzuschließen.<br />

Ein HTML-String sieht da<strong>mit</strong> zum<br />

Beispiel so aus:<br />

html = [[<br />

<br />

<br />

...<br />

]]<br />

Um Strings zu verbinden, gibt es den<br />

speziellen Operator »..«. Wie in anderen<br />

Sprachen etwa »+« zu verwenden, funktioniert<br />

in Lua nicht. Dieser Operator<br />

bleibt Zahlen vorbehalten. Zur Formatierung<br />

gibt es ähnliche Formatstrings<br />

wie in der Programmiersprache C, die<br />

sich <strong>für</strong> Zahlen so verwenden lassen:<br />

string.format("%.7f", math.pi)<br />

Das String-Modul bietet außerdem<br />

eine Reihe von Funktionen, <strong>mit</strong> denen<br />

man zum Beispiel Zeichen in<br />

Strings suchen kann. So gibt »string.<br />

find(String, Suchstring)« zwei Zahlen<br />

aus, die <strong>für</strong> den Beginn <strong>und</strong> das Ende<br />

des gef<strong>und</strong>enen Strings stehen. »string.<br />

gmatch« gibt einen Iterator zurück,<br />

der <strong>mit</strong> einem Suchmuster versehen<br />

nacheinander alle F<strong>und</strong>stellen liefert.<br />

Weitere Funktionen geben die Länge<br />

eines Strings aus, wandeln Groß- <strong>und</strong><br />

Kleinbuchstaben um oder umgekehrt,<br />

drehen einen String um <strong>und</strong> so weiter.<br />

Im Prinzip lassen sich in Lua-Strings<br />

auch UTF-8-Zeichenketten speichern,<br />

denn sie verwenden acht Bits zur<br />

Repräsentation. Allerdings gibt es im<br />

Sprachkern keine darüber hinausgehenden<br />

Features zur Verarbeitung von<br />

UTF-8. Derzeit gibt es ein paar Module<br />

wie »slnunicode«, die das übernehmen.<br />

Im Lua-Sprachkern soll die Unterstützung<br />

von UTF-8 in einer kommenden<br />

Versionen folgen.<br />

Das Angebot an Zahlentypen ist überschaubar:<br />

Es gibt nur eine »number«,<br />

die als Fließkommazahl weitgehend<br />

dem Float in anderen Programmiersprachen<br />

entspricht. Insbesondere<br />

gibt es keine Ganzzahlen (Integer) als<br />

Variablentyp.<br />

n Tabelle 1: Lua-Schlüsselwörter<br />

and break do else elseif<br />

end false for function if<br />

in local nil not or<br />

repeat return then true until while<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


102<br />

Programmieren<br />

Lua<br />

Auch bei den angebotenen Datenstrukturen<br />

gibt sich Lua bescheiden.<br />

Es gibt nur die Tables, die Arrays <strong>und</strong><br />

Hashes anderer Programmiersprachen<br />

ersetzen. Dabei funktionieren Tabellen<br />

im Prinzip <strong>ohne</strong>hin wie Hashes oder<br />

Dictionaries: Eine Variable kann nicht<br />

nur einen einzelnen Wert aufnehmen,<br />

sondern über sogenannte Keys, die<br />

unterschiedlichen Typen angehören<br />

dürfen, eine Vielzahl von Werten. Dabei<br />

müssen in einer Table weder die Keys<br />

noch die Werte vom gleichen Typ sein.<br />

Eine neue Tabelle wird in Lua <strong>mit</strong> der<br />

Expression »{}« initialisiert:<br />

t = {}<br />

t['foo'] = 'bar'<br />

t['123'] = 'linux'<br />

Wie die Lua-Entwickler betonen, sind<br />

Tables eigentlich keine Variablen oder<br />

Typen, sondern dynamische Objekte,<br />

auf deren Werte man im eigenen Programm<br />

nur <strong>mit</strong>tels Referenzen Bezug<br />

nimmt. Das klingt komplizierter als<br />

es ist <strong>und</strong> ist bei der Programmierung<br />

n Tabelle 2: Luarocks<br />

Modul<br />

AesFileEncrypt<br />

Flu<br />

Inotify<br />

JSON4Lua<br />

lapis<br />

lbase64<br />

lposix<br />

lsocket<br />

lsqlite3<br />

lua-csnappy<br />

lua-ev<br />

lua-gnuplot<br />

lua-inih<br />

lua-websockets<br />

LuaCrypto<br />

luadaemon<br />

luadbi-mysql<br />

luadbi-postgresql<br />

luadns<br />

LuaFileSystem<br />

lualogging<br />

lzlib<br />

MD5<br />

Funktion<br />

AES-Verschlüsselung<br />

auch nicht weiter von Bedeutung, aber<br />

man sollte im Kopf behalten, dass Tabellen<br />

bei der Zuweisung nicht kopiert<br />

werden, sondern es sich immer weiter<br />

um dieselbe Tabelle handelt. Ein Beispiel:<br />

x = {}<br />

x['os'] = "linux"<br />

y = x<br />

print(y['os'])<br />

linux<br />

Jetzt ist auch der Inhalt von »y['os']«<br />

der String »linux«, wie die Ausgabe<br />

der Print-Anweisung zeigt. Um dem<br />

Programmierer Tipparbeit zu ersparen,<br />

bietet Lua auch eine Kurzschreibweise<br />

da<strong>für</strong>, den Key anzugeben:<br />

print(y.os)<br />

linux<br />

Mit Tables lassen sich auch Arrays<br />

realisieren. Dazu muss man sich bei<br />

der Verwendung eben nur auf durchgehende<br />

numerische Werte <strong>für</strong> die<br />

Modul <strong>für</strong> das »Filesystem in Userspace« (FUSE)<br />

API <strong>für</strong> Inotify<br />

JSON-Modul<br />

Web-Framework <strong>für</strong> MoonScript <strong>und</strong> Lua<br />

Base64-Modul<br />

POSIX-Bibliothek (inklusive Curses)<br />

Unix-Sockets<br />

Anbindung an SQLite-Datenbank<br />

Unterstützung <strong>für</strong> Googles Snappy-Komprimierung<br />

Modul <strong>für</strong> Linux-Libev<br />

Diagramme <strong>mit</strong> Gnuplot<br />

Parser <strong>für</strong> Ini-Dateien<br />

Websockets <strong>für</strong> Lua<br />

Lua-Frontend <strong>für</strong> OpenSSL<br />

Macht aus Lua-Programmen Unix-Daemons<br />

Datenbankabstraktion <strong>für</strong> MySQL<br />

Datenbankabstraktion <strong>für</strong> PostgreSQL<br />

DNS<br />

Module <strong>für</strong> Dateisystemzugriff<br />

Logging-API<br />

ZLib-Komprimierung (Gzip)<br />

MD5-Hashes<br />

Keys beschränken. Prinzipiell können<br />

die Arrays bei jedem Wert, also auch 0<br />

oder 1 beginnen. Nach Lua-Konvention<br />

starten sie allerdings bei 1. Zweidimensionale<br />

Datenstrukturen wie Matrizen<br />

entstehen, wenn man eine Table definiert,<br />

die Tables enthält.<br />

Ausprobieren lässt sich all dies, indem<br />

man den Lua-Interpreter »lua« aufruft,<br />

der in einem interaktiven Modus startet,<br />

in dem man Code eingeben kann.<br />

Alternativ führt er Lua-Skripts aus, die<br />

er als Parameter erwartet. Außerdem<br />

gibt es einen Lua-Compiler namens<br />

»luac«, der Programme vor der Ausführung<br />

in Lua-Bytecode übersetzt. Das<br />

spart ein bisschen Übersetzungszeit<br />

beim Ausführen ein, bringt aber ansonsten<br />

keinen Performance-Vorteil.<br />

Erste Klasse: Funktionen<br />

Zur Strukturierung der Programme<br />

bietet Lua Funktionen, die wie erwähnt<br />

eigene Typen darstellen. Man kann sie<br />

also zum Beispiel auch in Variablen<br />

speichern. Definiert werden Funktionen<br />

<strong>mit</strong> dem Schlüsselwort »function«,<br />

gefolgt von Klammern, in denen die<br />

Parameter stehen. Dann folgt der<br />

Funktionsrumpf (Body), der <strong>mit</strong> dem<br />

Schlüsselwort »end« abgeschlossen<br />

wird. Um eine variable Anzahl von Parametern<br />

zu definieren, bietet Lua das<br />

Konstrukt »...« an, das in Codebeispielen<br />

verwirrt, weil man meinen könnte,<br />

der Kürze wegen sei Code weggelassen<br />

worden. Über »select(x, ...)« lässt sich<br />

das x-te Elemente im Funktionsrumpf<br />

ansprechen. Die Anzahl der tatsächlich<br />

übergebenen Parameter liefert »select('#',<br />

...)«. Alternativ dazu packt die<br />

Anweisung »args = {...}« alle Argumente<br />

in die Table »args«.<br />

Der Lua-Interpreter beschwert sich<br />

auch nicht, wenn eine Funktion beispielsweise<br />

drei Parameter vorsieht,<br />

aber beim Aufruf nur zwei angegeben<br />

werden. Der fehlende Parameter ist<br />

dann einfach <strong>mit</strong> »nil« belegt. Ein gängiges<br />

Idiom, um Default-Werte <strong>für</strong> Parameter<br />

zu emulieren, die es in Lua nicht<br />

gibt, sieht so aus:<br />

function f(a, b, c)<br />

local a = a or 0<br />

...<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


Programmieren<br />

Lua<br />

103<br />

Die lokale Variable »a« erhält also den<br />

Wert der Parameter-Variablen »a«,<br />

wenn diese vorhanden ist, ansonsten<br />

den Wert 0. Weil man Funktionen in<br />

Variablen speichern <strong>und</strong> an andere<br />

Funktionen übergeben darf, lassen sich<br />

so auch Funktionen höherer Ordnung<br />

konstruieren. Deshalb eignet sich Lua<br />

auch dazu, im funktionalen Stil zu programmieren,<br />

der durch Sprachen wie<br />

Scala, Clojure <strong>und</strong> sogar Javascript (in<br />

Form von Node.js) zur Zeit wieder in<br />

Mode gekommen ist. Zur Parallelisierung<br />

von Programmen bietet Lua keine<br />

Threads, sondern Coroutinen, die weniger<br />

fehleranfällig sind.<br />

Schleifen<br />

Die Kontrollstrukturen in Lua sind im<br />

Wesentlichen die gleichen wie bei<br />

anderen gängigen Programmiersprachen.<br />

Es gibt If-Abfragen, die mehrere<br />

Elseif- <strong>und</strong> einen Else-Block enthalten<br />

können. Ein While-Statement prüft immer<br />

wieder zu Beginn eine Bedingung<br />

<strong>und</strong> arbeitet den Block ab, solange sie<br />

erfüllt ist. Ein Repeat-Block funktioniert<br />

umgekehrt <strong>und</strong> läuft solange, bis die<br />

Bedingung nicht mehr erfüllt ist, die am<br />

Ende des Blocks steht.<br />

For-Schleifen können sich über Zahlenbereiche<br />

erstrecken oder über eine Iterator-Funktion,<br />

die man beispielsweise<br />

aus einem Array erzeugt. Da<strong>für</strong> gibt es<br />

spezielle Funktionen wie »pairs« oder<br />

»ipairs«. Der folgende Code iteriert <strong>mit</strong><br />

einer For-Schleife über ein Array:<br />

tbl = {"a", "b", "c"}<br />

for key, value in ipairs(tbl) do<br />

print(key, value)<br />

end<br />

Eine numerische For-Schleife erstreckt<br />

sich über einen Zahlenbereich, wahlweise<br />

<strong>mit</strong> oder <strong>ohne</strong> Schrittweite: »for<br />

i = 1, 5« geht jede ganze Zahl zwischen<br />

1 <strong>und</strong> 5 durch, während »for i = 1, 10, 2«<br />

in Zweierschritten voranschreitet.<br />

Ein Break-Statement bricht den Ablauf<br />

der erwähnten Schleifen ab <strong>und</strong> fährt<br />

danach <strong>mit</strong> der Bearbeitung fort. Ein<br />

Continue-Statement, das es in anderen<br />

Programmiersprachen gibt <strong>und</strong> ans<br />

Ende einer Schleife springt, aber dann<br />

fortfährt, fehlt seltsamerweise. Man<br />

Abbildung 3: Codea ist eine Lua-Entwicklungsumgebung auf dem iPad.<br />

muss es etwas umständlich <strong>mit</strong> einem<br />

Goto simulieren:<br />

for i = 1, 10 do<br />

if i % 2 == 0 then goto continue end<br />

print(i)<br />

::continue::<br />

end<br />

Eine Goto-Sprungmarke wird, wie hier<br />

zu sehen, durch zwei doppelte Doppelpunkte<br />

eingeschlossen. Um die Continue-Anweisung<br />

zu simulieren, setzt<br />

man sie direkt vor das Schleifen ende.<br />

Rocks<br />

Da<strong>mit</strong> sind die wichtigsten Sprach-<br />

Features von Lua erklärt, <strong>mit</strong> denen es<br />

sich schon ganz gut leben lässt. Zum<br />

Weiterlesen <strong>und</strong> zum schnellen Nachschlagen<br />

von Syntax <strong>und</strong> Funktionen<br />

bietet sich die Sprachreferenz an [6].<br />

Weil eine Programmiersprache <strong>ohne</strong><br />

ein ges<strong>und</strong>es Ökosystem wenig wert<br />

ist, gibt es das Modul-Repository Luarocks<br />

[7]. Es ist im Handumdrehen aus<br />

dem Quellcode installiert, aber auch in<br />

den meisten Linux-Distributionen enthalten.<br />

Ein Aufruf von »luarocks search<br />

Begriff« sucht in den Paketquellen,<br />

»luarocks install Paket« installiert es<br />

lokal. Root-Rechte sind nötig, wenn der<br />

Speicherort <strong>für</strong> die Pakete nur <strong>für</strong> den<br />

Superuser beschreibbar ist. Tabelle 2<br />

zeigt eine Auswahl nützlicher Erweiterungen,<br />

die im Luarocks-Verzeichnis zu<br />

finden sind.<br />

Leider sind nicht alle Lua-Bibliotheken<br />

in Luarocks zu finden. So gibt es beispielsweise<br />

noch Module <strong>für</strong> LDAP <strong>und</strong><br />

so moderne Dinge wie die Libguestfs<br />

<strong>und</strong> die Konfigurations-API Augeas.<br />

Für Linux-Anwender empfiehlt sich auf<br />

jeden Fall, einmal das distributionseigene<br />

Repository nach dem Schlüsselwort<br />

»lua« zu durchsuchen.<br />

Dank der großen Verbreitung von Lua<br />

herrscht an Tools zur Programmierung<br />

kein Mangel. Wer zur Entwicklung andere<br />

Programme als Vi oder Emacs verwenden<br />

will, kann auf eine Reihe von<br />

grafischen Entwicklungsumgebungen<br />

zurückgreifen, zum Beispiel Zerobrane<br />

(Abbildung 2), das es <strong>für</strong> Linux, Windows<br />

<strong>und</strong> OS X gibt <strong>und</strong> soviel kostet,<br />

wie man zu zahlen bereit ist [8]. Auch<br />

<strong>für</strong> die großen Java-IDEs wie Eclipse,<br />

Netbeans <strong>und</strong> IntelliJ gibt es Lua-Plugins.<br />

Zerobrane ist auf jeden Fall einen<br />

Versuch wert. Die Website bietet zahlreiche<br />

Tutorials, beispielsweise zum<br />

Debuggen von Wireshark-Skripts [9].<br />

Als Blick über den Tellerrand hinaus ist<br />

die Codea-IDE [10] interessant, die eine<br />

Lua-Entwicklungsumgebung auf dem<br />

iPad implementiert (Abbildung 3).<br />

Sehenswert ist allemal das Video auf<br />

der Codea-Seite, das zeigt, wie eine<br />

Entwicklungsumgebung aussehen<br />

kann, die je nach Datentyp den Programmierer<br />

bei der Eingabe etwa <strong>mit</strong><br />

Farb- <strong>und</strong> Dateiauswahl unterstützt. n<br />

n Info<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31559<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


freeX<br />

Einführung<br />

105<br />

Sonderteil<br />

Auf der folgenden Seite startet der regelmäßige<br />

FreeX-Sonderteil des <strong>ADMIN</strong>-<strong>Magazin</strong>s. Hier finden<br />

Sie Know-how-Artikel <strong>und</strong> Workshops von erfahrenen<br />

Autoren aus der langen Tradition der FreeX.<br />

FreeBSD 10.....................................106<br />

FreeBSD liegt der Sony Playstation 4 <strong>und</strong> Mac OS<br />

zugr<strong>und</strong>e. Die neue Version 10 bringt neue Features<br />

<strong>und</strong> bessert einiges aus.<br />

ika747, 123RF<br />

www.admin-magazin.de Admin Ausgabe 01-2014


106<br />

freeX<br />

FreeBSD 10<br />

katisa, 123RF<br />

FreeBSD erscheint in Version 10<br />

Neues vom Teufel<br />

Das Unix-Derivat FreeBSD gilt als äußerst zuverlässig <strong>und</strong> liegt sowohl Mac OS X als auch der Sony Playstation<br />

4 zugr<strong>und</strong>e. Die neue Version 10 bringt neue Features <strong>und</strong> Performance-Gewinne. Jürgen Dankoweit<br />

Seit 20 Jahren besticht FreeBSD [1] als<br />

leistungsfähiges, sicheres <strong>und</strong> stabiles<br />

Open-Source-Betriebssystem. Nun ist<br />

es in Version 10 <strong>mit</strong> einigen Neuerungen<br />

erschienen.<br />

FreeBSD ist nicht nur auf Servern daheim,<br />

sondern auch auf Workstations<br />

<strong>und</strong> Embedded-Systemen. Die positiven<br />

Eigenschaften des Betriebssystem<br />

resultieren aus der Strategie, eine neue<br />

Version erst dann vorzustellen, wenn<br />

diese marktreif ist.<br />

Familienstreit<br />

FreeBSD gehört zur Unix-Familie, darf<br />

diesen Namen allerdings aus rechtlichen<br />

Gründen nicht tragen. Behörden<br />

<strong>und</strong> Unternehmen in den Bereichen<br />

Technologie <strong>und</strong> IT nutzen FreeBSD<br />

intern als Entwickler- <strong>und</strong> Serverplattform.<br />

Im Vergleich <strong>mit</strong> der Linux-typischen<br />

GPL erlaubt die BSD-Lizenz mehr<br />

Freiheiten <strong>für</strong> solche Unternehmen,<br />

weil sie die Möglichkeit bietet, proprietären<br />

eigenen Code <strong>mit</strong> dem FreeBSD-<br />

Code zu kombinieren, <strong>ohne</strong> den eigenen<br />

Quelltext offenlegen zu müssen.<br />

Obwohl FreeBSD anders als Linux nicht<br />

die massive Unterstützung so großer<br />

Firmen wie IBM <strong>und</strong> Hewlett-Packard<br />

genießt, hält es bei altmodischen Tugenden<br />

wie <strong>Sicher</strong>heit <strong>und</strong> Zuverlässigkeit<br />

<strong>mit</strong> Linux <strong>mit</strong>. Als jüngstes Beispiel<br />

<strong>für</strong> das in FreeBSD gesetzte Vertrauen<br />

dient Sony <strong>mit</strong> seiner Playstation 4,<br />

die auf FreeBSD 9 basiert. Ebenso setzt<br />

Juniper auf FreeBSD als robustes Betriebssystem<br />

<strong>für</strong> Netzwerk-Router. Auch<br />

Apple nutzt Teile von FreeBSD <strong>für</strong> ihr<br />

Betriebssystem Mac OS X.<br />

FreeBSD nimmt <strong>für</strong> sich in Anspruch,<br />

das ausgereifteste Unix-artige Betriebssystem<br />

<strong>für</strong> x86-Server zu sein. In den<br />

neunziger Jahren etablierte es sich <strong>mit</strong><br />

seiner Geschwindigkeit, Zuverlässigkeit<br />

<strong>und</strong> oftmals jahrelangen Uptimes als<br />

Betriebssystem <strong>für</strong> kleine wie große<br />

Web- <strong>und</strong> FTP-Server. Diese Tradition<br />

wurde Verpflichtung <strong>und</strong> erfuhr nur wenige<br />

Umbrüche.<br />

Da im Serverbereich immer öfter Mehrprozessor-<br />

<strong>und</strong> Mehrkern-Systeme<br />

in den Markt drängen, musste die<br />

Entwicklermannschaft um FreeBSD<br />

reagieren. Mit dem im Jahre 2004<br />

erschienenen FreeBSD 5 wurde der<br />

Kernel in einem lang andauernden Prozess<br />

komplett auf das symmetrische<br />

Multiprocessing umgebaut. Dies führte<br />

zu Problemen, die erst <strong>mit</strong> Version 7<br />

weitestgehend beseitigt waren.<br />

Der nächste, nicht ganz so radikale Umbruch<br />

erfolgte <strong>mit</strong> der Einführung von<br />

Virtualisierung <strong>und</strong> ZFS unter FreeBSD<br />

8 im Jahre 2009. Das von Sun Microsystems<br />

entwickelte Dateisystem <strong>mit</strong> integrierter<br />

Volumenverwaltung ist <strong>für</strong> sehr<br />

große Datenmengen bei gleichzeitig<br />

hoher Datensicherheit ausgelegt. Die<br />

Portierung zu FreeBSD erforderte einige<br />

Anpassungen im Kernel, die aber auch<br />

zur weiteren Stabilität <strong>und</strong> <strong>Sicher</strong>heit<br />

beitrugen. Auch das neue FreeBSD 10<br />

stellt in mancher Hinsicht einen Umbruch<br />

dar.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


freeX<br />

FreeBSD 10<br />

107<br />

GCC hat ausgedient<br />

Mit FreeBSD 10 kommt ein neuer<br />

Compiler zur Übersetzung der Kernel-<br />

Quellen <strong>und</strong> der zugehörigen Tools zum<br />

Einsatz: LLVM/​CLang [2, 3]. Ein Wechsel<br />

des GCC-Projekts auf die neue Lizenz<br />

GPL-Version 3 hat die Entwickler dazu<br />

bewogen, GCC aus dem FreeBSD-Basissystem<br />

herauszunehmen.<br />

LLVM, ursprünglich die Abkürzung <strong>für</strong><br />

Low Level Virtual Machine, enthält<br />

nicht nur einen Compiler, sondern eine<br />

ganze Reihe von Tools <strong>und</strong> Bibliotheken.<br />

Traditionelle Compiler-Systeme<br />

führen eine Reihe von Optimierungen<br />

beim Kompilieren des Sourcecodes<br />

durch. Anschließend verbinden sie<br />

die kompilierten Module <strong>mit</strong>einander,<br />

wobei sie die sich hierbei bietenden<br />

Optimierungsmöglichkeiten vernachlässigen.<br />

Das liegt daran, dass der<br />

Linker nur die einzelnen Module sieht<br />

<strong>und</strong> nicht das gesamte Programm<br />

überblickt.<br />

Dieser Problematik stellt sich LLVM,<br />

indem es zunächst einen virtuellen<br />

Bytecode erstellt, wie er auch in RISC-<br />

Befehlssätzen zu finden ist (siehe<br />

Abbildung 1). Dieser Bytecode lässt<br />

sich während des Link-Vorgangs noch<br />

einmal optimieren.<br />

Wie der Name LLVM nahelegt, basiert<br />

ein Teil der Architektur des Frameworks<br />

auf einer virtuellen Maschine, die einen<br />

Prozessor virtualisiert: entweder<br />

einen Hauptprozessor (CPU) oder<br />

auch einen Grafikprozessor (GPU). Die<br />

virtuelle Maschine übersetzt während<br />

der Ausführung die intern generierte<br />

Sprache (Intermediate Language) des<br />

Compilers (LLVM Assembly Language)<br />

in die des aktuellen Systems. Ihre Effizienz<br />

erlaubt auch eine Übersetzung auf<br />

Anforderung (Just-in-Time). Außerdem<br />

ermöglicht LLVM ein flexibles Backend-<br />

System <strong>und</strong> unterstützt eine Vielzahl<br />

unterschiedlicher Prozessorarchitekturen.<br />

Clang als sogenanntes Frontend der<br />

LLVM-Suite parst den C- oder C++-Code<br />

<strong>und</strong> übersetzt ihn in die LLVM-Zwischensprache<br />

LLVM Intermediate Representation<br />

(LLVM IR). Das LLVM-Backend<br />

erzeugt danach effizienten Maschinen-<br />

Code. An dieser Stelle kommt die<br />

virtuelle Maschine nicht zum Einsatz,<br />

da LLVM als Compiler-<br />

Backend <strong>für</strong> die<br />

jeweilige Architektur<br />

(x86, Power PC, IA64<br />

usw.) an ihre Stelle<br />

tritt. Neben C <strong>und</strong> C++<br />

gibt es unter anderem<br />

Frontends <strong>für</strong> Fortran,<br />

Haskell <strong>und</strong> Ruby, andere<br />

befinden sich in<br />

Entwicklung.<br />

Bedingt durch den<br />

Aufbau des LLVM-/​<br />

Clang-Systems verlängert<br />

sich das Kompilieren<br />

von FreeBSD<br />

<strong>mit</strong> »make buildkernel« <strong>und</strong> »make<br />

buildworld« um etwa zwanzig Prozent.<br />

Dieser zusätzliche Zeitbedarf bringt<br />

jedoch auch Nutzen, denn Clang prüft<br />

den C-Code des Kernels <strong>und</strong> der Tools<br />

genauer <strong>und</strong> hat so Fehler offenbart,<br />

die GCC nicht gef<strong>und</strong>en hatte.<br />

Das wirkt sich auch auf die portierte<br />

Software (Ports) im Portstree von<br />

FreeBSD aus. Die meisten Programme<br />

lassen sich <strong>ohne</strong> oder <strong>mit</strong> nur wenigen<br />

Code-Korrekturen auch <strong>mit</strong> LLVM/​Clang<br />

übersetzen. Andere Ports setzen allerdings<br />

die alte Compiler-Suite GCC voraus.<br />

Um auch diese zu nutzen, installiert<br />

man neben LLVM/​Clang auch GCC<br />

<strong>und</strong> verwendet es ausschließlich <strong>für</strong><br />

die Ports. Bis sich alle Ports <strong>mit</strong> Clang<br />

übersetzen lassen, muss man leider an<br />

den Port-Makefiles Hand anlegen <strong>und</strong><br />

dort GCC eintragen:<br />

CC=gcc47<br />

CXX=g++47<br />

CPP=cpp47<br />

Da unter FreeBSD bislang Backends nur<br />

<strong>für</strong> die Plattformen »amd64«, »arm«,<br />

»armv6« <strong>und</strong> »i386« existieren, beschränkt<br />

sich der Einsatz der Compiler-<br />

Suite auch auf diese Architekturen. Die<br />

anderen Zielplattformen setzen nach<br />

wie vor auf eine etwas ältere Version<br />

der GCC-Suite.<br />

Kernelwelt<br />

Der Austausch der Compiler-Suite<br />

bleibt nicht die einzige Umstellung in<br />

der neuen FreeBSD-Version, auch neue<br />

Features kommen hinzu. So erhält<br />

Abbildung 1: Aufbau der LLVM-Suite.<br />

FreeBSD 10 einen sogenannten Tickless<br />

Kernel [4]: Ein normaler Kernel, wie ihn<br />

die FreeBSD-Versionen bis einschließlich<br />

9.2 eingesetzt haben, hört auf sogenannte<br />

Events (Ereignisse). Sie lösen<br />

beispielsweise Lese- <strong>und</strong> Schreiboperationen<br />

auf die Festplatte aus. Um eine<br />

solche Unterbrechung zu handhaben,<br />

speichert das System den Zustand der<br />

CPU, um nach der Verarbeitung des<br />

Events an derselben Stelle weiterzuarbeiten.<br />

Dieselbe Prozedur findet allerdings<br />

auch <strong>ohne</strong> Lese- oder Schreiboperationen<br />

im Idle-Betrieb statt. Allerdings<br />

kostet die <strong>Sicher</strong>ung des CPU-Zustands<br />

Rechenleistung <strong>und</strong> da<strong>mit</strong> Zeit, Energie<br />

<strong>und</strong> da<strong>mit</strong> auf Notebooks auch Akkuladung,<br />

obwohl sie im Idle-Betrieb<br />

überflüssig ist. Der neue Kernel behebt<br />

diese Schwachstelle, indem er auf<br />

Events nicht mehr zu festen Zeitpunkten<br />

lauscht, sondern erst, wenn sie<br />

anfallen.<br />

Der Vorteil dieser Methode besteht<br />

nicht nur im <strong>für</strong> Notebooks wichtigen<br />

Stromspareffekt, sondern auch in einer<br />

Steigerung der Gesamt-Performance.<br />

Auf Servern <strong>mit</strong> hoher Last fällt die<br />

Energieersparnis allerdings geringer<br />

aus, weil normalerweise viele Events<br />

sowie Lese- <strong>und</strong> Schreiboperationen<br />

anfallen.<br />

Grafik<br />

Unter FreeBSD kümmert sich klassischerweise<br />

das X-Window-System Xorg<br />

um das Umschalten in den Grafikmodus.<br />

Ihn verwenden grafische Benutzeroberflächen,<br />

während die Grafikkarte<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


108<br />

freeX<br />

FreeBSD 10<br />

Abbildung 2: Der Aufbau des neuen FreeBSD-Hypervisors Bhyve.<br />

bis zu deren Start meist im Textmodus<br />

arbeitet. Das sogenannte Mode Setting<br />

findet <strong>mit</strong> dem Start eines X-Servers im<br />

User-Space statt, etwa durch das Kommando<br />

»startx« oder durch den Start<br />

eines Login-Managers. Allerdings führt<br />

dieser Moduswechsel zu unschönem<br />

Bildschirmflackern sowie zu <strong>Sicher</strong>heitsproblemen.<br />

Beim neu eingeführten Kernel Mode<br />

Setting (KMS) hingegen schaltet der Betriebssystemkern<br />

in den Grafikmodus<br />

um, wo<strong>mit</strong> die genannten Nachteile<br />

entfallen. Für den Umstieg übernimmt<br />

FreeBSD Linux-Code, da auch das <strong>für</strong><br />

die Grafik zuständige Xorg-Projekt auf<br />

KMS umgestiegen ist, sodass auch viele<br />

Xorg-Grafikkartentreiber nur noch <strong>mit</strong><br />

KMS funktionieren.<br />

Mit KMS nutzt FreeBSD nun auch den<br />

Treiber »xf86‐video‐ati« <strong>für</strong> AMD-Grafikprozessoren<br />

<strong>und</strong> stellt da<strong>mit</strong> die Unterstützung<br />

<strong>für</strong> die Chipsätze dieses Herstellers<br />

sicher. Die FreeBSD-Wiki-Seite<br />

[5] hat eine Tabelle zusammengestellt,<br />

n Listing 1: Virtio in »/boot/loader.conf«<br />

01 #Init VirtIO‐Paket<br />

02 virtio_load="YES"<br />

03 virtio_pci_load="YES"<br />

04 # Blockdevices<br />

05 virtio_blk_load="YES"<br />

06 # Netzwerkhardware<br />

07 if_vtnet_load="YES"<br />

08 # Memory‐Ballooning<br />

09 virtio_balloon_load="YES"<br />

10 # SCSI‐Support<br />

11 virtio_scsi_load="YES"<br />

WITH_NEW_XORG=YES<br />

die bereits <strong>mit</strong> dem<br />

neuen KMS-Treiber<br />

funktionierende AMD-<br />

Grafikkarten auflistet.<br />

Allerdings gibt es<br />

auch einen Wermutstropfen:<br />

Das besonders<br />

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

wichtige Suspend<br />

<strong>und</strong> Resume funktioniert<br />

<strong>mit</strong> KMS noch<br />

nicht. Wer Kernel<br />

Mode Setting dennoch<br />

nutzen möchte,<br />

ergänzt die Konfigurationsdatei<br />

»/etc/<br />

make.conf« um diesen<br />

Eintrag:<br />

Anschließend fällt eine Neukompilierung<br />

von Xorg an.<br />

Virtualisierung<br />

Mit der neuen Version des Betriebssystems<br />

bietet FreeBSD eine eigene<br />

Virtualisierungslösung an: Bhyve [6],<br />

eine Virtualisierungssoftware vom Typ<br />

2. Das bedeutet, es setzt auf einem vollwertigen<br />

Betriebssystem auf <strong>und</strong> nutzt<br />

dessen Gerätetreiber. Im Gegensatz<br />

dazu setzt ein Hypervisor vom Typ 1<br />

direkt auf der Hardware auf.<br />

Bei Bhyve (Abbildung 2) handelt es<br />

sich um eine Hardware Virtual Machine<br />

(HVM). Der Hypervisor verwendet bislang<br />

ausschließlich Intels VT-x-Technik,<br />

die Unterstützung <strong>für</strong> Secure Virtual<br />

Machine (SVM) von AMD steht noch aus.<br />

Bhyve nutzt die von Intel als Extended<br />

Page Tables bezeichnete Verwaltung<br />

von Speicheradressen virtueller Maschinen.<br />

Der FreeBSD-Hypervisor emuliert I/O-<br />

APIC (Advanced Programmable Interrupt<br />

Controllers) <strong>und</strong> unterstützt da<strong>mit</strong><br />

unter anderem APIC <strong>für</strong> Gastsysteme<br />

<strong>und</strong> eine momentan allerdings nur teilweise<br />

funktionierende AHCI-Emulation.<br />

Die Entwickler arbeiten derzeit vor<br />

allem an nicht gesperrten Schreib- <strong>und</strong><br />

Lesezugriffen <strong>und</strong> der Unterstützung<br />

<strong>für</strong> Suspend <strong>und</strong> Resume.<br />

Bhyve besteht aus dem Kernel-Modul<br />

»vmm.ko«, der Bibliothek »libvmmapi.so«<br />

sowie den Anwendungen<br />

»bhyve(8)«, »bhyveload(8)« <strong>und</strong> »byhvectrl(8)«.<br />

Die Komponenten kommen<br />

<strong>mit</strong> nur etwa 250 KByte Speicher zurecht.<br />

Das Tool »bhyveload(8)« lädt einen<br />

FreeBSD-Gast direkt in die virtuelle<br />

Maschine. Das ist <strong>mit</strong> einem einfachen<br />

Befehl schnell ausgeführt, der FreeBSD<br />

von einem ISO-Image startet:<br />

bhyveload ‐m 1024 ‐d \<br />

./freebsd.iso freebsd‐vm<br />

Die Performance von FreeBSD als Gast<br />

in virtualisierten Umgebungen verbessert<br />

das Treiberpaket Virtio, das in der<br />

neuen FreeBSD-Version von den Ports<br />

ins Basissystem übersiedelt. Das im<br />

Virtio-Paket enthaltene Kernel-Modul<br />

»virtio‐kmod« bietet einem virtualisierten<br />

FreeBSD durch paravirtualisierte<br />

APIs direkten Zugriff auf die Ressourcen<br />

des Host. Ohne »virtio‐kmod« müsste<br />

der Host dem Gastbetriebssystem<br />

Netzwerkkarte, Festplattencontroller<br />

<strong>und</strong> andere Hardware-Komponenten<br />

vorgaukeln. Die Emulation der Funktionalität<br />

<strong>und</strong> die Umsetzung <strong>für</strong> die Backends<br />

verbraucht Zeit <strong>und</strong> Ressourcen<br />

<strong>und</strong> drosselt so<strong>mit</strong> die Geschwindigkeit<br />

des Gastes.<br />

Daneben unterstützt Virtio das sogenannte<br />

Memory-Ballooning. Diese<br />

Technik stellt vom Gastsystem freigegebenen<br />

Arbeitsspeicher anderen Gäste<br />

zur Verfügung.<br />

Listing 1 zeigt die Einträge in der Datei<br />

»/boot/loader.conf«, die Virtio aktivieren.<br />

Danach ist zu beachten, dass<br />

sich die Bezeichnungen der virtuellen<br />

Festplatten <strong>und</strong> Netzwerkkarten, beispielsweise<br />

in »/dev/vtbd0« <strong>und</strong> »/dev/<br />

vtnet0« ändern, was Anpassungen in<br />

der Datei »/etc/fstab« nach sich zieht.<br />

Abbildung 3 zeigt die typischen Boot-<br />

Meldungen des Kernels.<br />

Auch VirtualBox funktioniert <strong>mit</strong> Virtio.<br />

Dazu aktiviert man im VirtualBox-Manager<br />

bei den erweiterten Einstellungen<br />

<strong>für</strong> Netzwerk als Adaptertyp »paravirtualisiertes<br />

Netzwerk (virtio‐net)«<br />

(Abbildung 4).<br />

FreeBSD 10 bringt auch bei der Verwaltung<br />

von Speichermedien Neuerungen.<br />

Neben Performance-Optimierungen<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


freeX<br />

FreeBSD 10<br />

109<br />

wandern nützliche Tools aus den Ports<br />

ins Basissystem.<br />

Dazu zählt das Kommando »growfs(8)«.<br />

Es erlaubt die Änderung der Größe eines<br />

UFS2-Dateisystems, dem Standard<br />

unter FreeBSD. Dieses Werkzeug ist<br />

besonders hilfreich, um ein <strong>Backup</strong> von<br />

einem kleineren Slice auf ein größeres<br />

zu überspielen. »growfs« bietet dann<br />

die Möglichkeit, das Dateisystem bis<br />

zur Slice-Grenze <strong>ohne</strong> Unmount zu<br />

vergrößern. Natürlich empfiehlt sich<br />

auch hier eine Datensicherung vor der<br />

Änderung.<br />

Auch das iSCSI-System (Internet Small<br />

Computer System Interface) hat den<br />

Weg ins Basissystem in Form eines<br />

Kernel-Moduls geschafft. Das System<br />

besteht aus iSCSI-Target <strong>und</strong> ‐Initiator.<br />

iSCSI transportiert SCSI-Daten über IP-<br />

Netze, verpackt in TCP/​IP-Pakete <strong>und</strong><br />

unter Verwendung der Ports 860 <strong>und</strong><br />

3260. iSCSI ermöglicht den Zugriff auf<br />

ein Speichernetz über eine virtuelle<br />

Punkt-zu-Punkt-Verbindung, <strong>ohne</strong> eigene<br />

Speichergeräte aufzustellen. Vorhandene<br />

Netzwerk-Switche lassen sich<br />

auch <strong>für</strong> iSCSI nutzen; iSCSI benötigt<br />

keine spezielle Hardware <strong>für</strong> die Knotenverbindungen.<br />

Der Zugriff auf die Festplatten erfolgt<br />

blockweise <strong>und</strong> ist daher auch <strong>für</strong> Datenbanken<br />

geeignet. Der Zugriff über<br />

iSCSI ist darüber hinaus transparent:<br />

Beispielsweise zeigen sich iSCSI-Geräte<br />

unter FreeBSD wie normale SCSI-Blockdevices<br />

(»/dev/da*«) <strong>und</strong> lassen sich<br />

wie lokale SCSI-Festplatten nutzen.<br />

Auch das den Ports entstammende<br />

Fuse (Filesystem in Userspace) migriert<br />

ins Basissystem. Dabei handelt es sich<br />

um ein Kernel-Modul, das Dateisystem-<br />

Treiber aus dem Kernel-Mode in den<br />

User-Mode verlagert. Das gestattet<br />

nicht-privilegierten Benutzern, eigene<br />

Dateisysteme zu mounten.<br />

Aufgr<strong>und</strong> der Verwendung des auch<br />

<strong>für</strong> normale Anwendungsprogramme<br />

üblichen User-Mode ist eine Vielzahl<br />

von Treibern entstanden. Einige dieser<br />

Dateisystem-Treiber bilden statt Festplatten<br />

<strong>und</strong> anderen Speichermedien<br />

ganz andere Datenstrukturen in Form<br />

eines Dateisystems ab.<br />

Fuse bindet unter FreeBSD unter anderem<br />

die folgenden Dateisysteme ein:<br />

Windows NTFS-3G: Dabei<br />

handelt es sich um<br />

eine Fuse-Implementierung<br />

des Windows-<br />

NTFS-Dateisystems,<br />

wie es unter anderem<br />

unter Windows XP <strong>und</strong><br />

Windows Server 2003<br />

zum Einsatz kommt.<br />

Der Fuse-Treiber unterstützt<br />

Lese- <strong>und</strong><br />

Schreib operationen<br />

sowie fast alle POSIX-<br />

Dateisystemfunktionen.<br />

Nur die Änderung<br />

von Dateizugriffsrechten<br />

<strong>und</strong> ‐besitzern ist<br />

nicht vorgesehen.<br />

Linux-Ext4: Auch das unter Linux<br />

verbreitete Dateisystem Ext4 steuert<br />

FreeBSD <strong>mit</strong> Fuse an, allerdings bietet<br />

das Modul bislang nur Lesezugriff.<br />

FUSEPod: Mit dieser Erweiterung lässt<br />

sich ein Apple iPod oder iPhone mounten<br />

<strong>und</strong> man erhält dadurch Zugriff auf<br />

alle Dateien des Geräts.<br />

ZFS<br />

ZFS als Dateisystem <strong>mit</strong> integrierter<br />

Volumenverwaltung gehört bereits seit<br />

Version 7 zu FreeBSD <strong>und</strong> eignet sich<br />

seit Längerem <strong>für</strong> den Produktiveinsatz<br />

[7]. Mit FreeBSD 10 hält die Funktion<br />

ZFS-NOP (No Write Operation) Einzug,<br />

die die Geschwindigkeit des Dateisystems<br />

deutlich erhöht.<br />

Der Performance-Gewinn ergibt sich<br />

durch eingesparte Schreiboperationen.<br />

Ohne NOP bildet ZFS beim Schreibvorgang<br />

<strong>für</strong> jeden Datenblock<br />

eine Prüfsumme,<br />

auch wenn der Inhalt<br />

des Datenblocks gleich<br />

bleibt. Mit NOP hingegen<br />

vergleicht das<br />

System die Prüfsumme<br />

des zu schreibenden<br />

Blocks <strong>mit</strong> dem auf<br />

der Festplatte existierenden<br />

Block. Sind die<br />

Prüfsummen identisch,<br />

schreibt es den Datenblock<br />

nicht. Hierbei<br />

kommen kryptografische<br />

Verfahren zur<br />

Prüfsummenbildung<br />

Abbildung 3: Boot-Meldungen des Kernels beim Einsatz von Virtio <strong>mit</strong><br />

einer Netzwerkkarte.<br />

zum Einsatz, um die Datensicherheit zu<br />

gewährleisten.<br />

Weiterhin haben die ZFS-Entwickler<br />

Datenkompression im Level-2-Cache<br />

eingebaut. Der Level-2-Cache (L2ARC)<br />

sorgt <strong>für</strong> schnelle Lese- <strong>und</strong> Schreibzugriffe.<br />

Um einen ZPool optimal abzudecken,<br />

unter ZFS eine Art virtuelle Zusammenfassung<br />

mehrerer Blockgeräte,<br />

wächst die Größe des L2ARC proportional<br />

zur ZPool-Größe. Das führt bei sehr<br />

großen Systemen allerdings schnell<br />

zu Engpässen bei der Speicherkapazität.<br />

Aus diesem Gr<strong>und</strong> komprimiert<br />

FreeBSD 10 die Daten im Cache <strong>und</strong><br />

reduziert so<strong>mit</strong> dessen Größe.<br />

Die gespeicherten Daten komprimiert<br />

ZFS bereits in früheren FreeBSD-<br />

Versionen auf Wunsch, bisher <strong>mit</strong> dem<br />

Lempel-Ziv-Jeff-Bonwick-Verfahren<br />

(LZJB). FreeBSD 10 setzt den schnelleren<br />

LZ4-Algorithmus ein, der deutliche<br />

Abbildung 4: Mit der Option »paravirtualisiertes Netzwerk« funktioniert<br />

Virtio auch in VirtualBox.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 01-2014


110<br />

freeX<br />

FreeBSD 10<br />

Performance-Steigerungen ermöglicht: Bei leicht komprimierbaren<br />

Daten ergibt sich eine um fünfzig Prozent höhere Kompressionsgeschwindigkeit,<br />

bei der Dekomprimierung zeigt sich<br />

eine achtzigprozentige Beschleunigung gegenüber LZJB. Bei<br />

der Verarbeitung nicht komprimierbarer Daten ist der neu implementierte<br />

Algorithmus immer noch etwa dreimal schneller.<br />

Gerade auf Systemen <strong>mit</strong> schwächerer CPU macht sich der Geschwindigkeitsgewinn<br />

deutlich bemerkbar.<br />

Das folgende Kommando aktiviert die Kompression nach dem<br />

neuen Standard <strong>für</strong> den ZPool namens users:<br />

# zfs set compression=lz4 pool/users<br />

Abbildung 5: Der Aufbau von WLAN-Meshes zeigt Ähnlichkeiten zu Mobilfunknetzen.<br />

Abbildung 6: Installation des Tools »portupgrade« <strong>mit</strong> seinen Abhängigkeiten.<br />

Besonders gut eignen sich die schnellen Solid State Disks (SSDs)<br />

<strong>für</strong>s Caching. Um diese Laufwerke optimal zu nutzen, implementiert<br />

ZFS die Unterstützung <strong>für</strong> das ATA-Kommando »Trim«.<br />

Da<strong>mit</strong> teilt ZFS einer Solid State Disk <strong>mit</strong>, dass gelöschte oder<br />

anderweitig freigewordene Blöcke nicht mehr benutzt werden.<br />

Ohne Trim vermerkt ZFS nur in den Verwaltungsstrukturen, dass<br />

die entsprechenden Bereiche wieder zur Verfügung stehen; der<br />

SSD-Controller erhält diese Informationen dann jedoch nicht.<br />

Das ATA-Kommando Trim teilt dem Laufwerk beim Löschen von<br />

Dateien <strong>mit</strong>, die betroffenen Blöcke als ungültig zu markieren<br />

<strong>und</strong> dass die enthaltenen Daten obsolet sind. Diese werden<br />

so<strong>mit</strong> nicht mehr geschrieben, was die Zugriffe auf die SSD verringert<br />

<strong>und</strong> da<strong>mit</strong> auch deren Abnutzungseffekte. Die markierten<br />

Blöcke werden dann beim nächsten Löschen endgültig freigegeben.<br />

Die ZFS-Unterstützung von Trim bringt folgende Konfigurationsoptionen<br />

(Sysctl-MIBs, Management Information Base) <strong>mit</strong>:<br />

»vfs.zfs.trim.enabled«: Steht dieser Sysctl-MIB auf Null, wird die<br />

Trim-Unterstützung deaktiviert. Standardmäßig ist sie aktiv.<br />

»vfs.zfs.trim.max_interval«: Dieser Sysctl-MIB definiert, wie viele<br />

Sek<strong>und</strong>en zwischen zwei Trim-Aufrufen vergehen dürfen.<br />

»vfs.zfs.trim.timeout«: Dieser Parameter setzt einen Verzögerungswert<br />

in Sek<strong>und</strong>en bis zur ersten Ausführung von Trim.<br />

»vfs.zfs.trim.txg_delay«: Gibt die Zeitspanne an, wie lange die<br />

Daten einer Transaction Group (TXG) höchstens im Speicher<br />

bleiben, bevor sie geschrieben werden. Das ist <strong>für</strong> ZFS ein wichtiger<br />

Wert, da das Dateisystem Schreiboperationen verzögert,<br />

bis genügend Daten bereitstehen. Anfangs war dieser Wert auf<br />

dreißig Sek<strong>und</strong>en voreingestellt, was allerdings auf langsamen<br />

Systemen <strong>mit</strong> nur einer Festplatten zu Problemen führte: Das<br />

Schreiben von Daten <strong>und</strong> das Abarbeiten der Trim-Kommandos<br />

fielen häufig zusammen <strong>und</strong> blockierten so das System.<br />

Netzwerk<br />

Dem Vormarsch der Mehrkern- <strong>und</strong> Mehrprozessorsysteme tragen<br />

auch die FreeBSD-Entwickler Rechnung, indem sie Kernel<br />

<strong>und</strong> Treiber anpassen. Um auch zukünftig das Leistungspotenzial<br />

auszunutzen, haben sie den Paketfilter »pf« überarbeitet.<br />

Dieses ursprünglich von OpenBSD portierte Tool wurde <strong>für</strong><br />

Single-CPU-Systeme entwickelt <strong>und</strong> hielt einen Datenstrom am<br />

Anfang des Filterprozesses kurz an. Es erfolgte die Anwendung<br />

der Filterregeln <strong>und</strong> am Ende des Prozesses die Freigabe des Datenstroms.<br />

Mit der SMP-fre<strong>und</strong>lichen Version ändert sich dieser<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


freeX<br />

FreeBSD 10<br />

111<br />

sequenzielle Ablauf: Jetzt verarbeiten<br />

mehrere parallel laufende Threads den<br />

Datenstrom. Das steigert die Verarbeitungsgeschwindigkeit<br />

erheblich <strong>und</strong><br />

reduziert die Systemlast.<br />

Im Bereich Wireless LAN beseitigt<br />

FreeBSD 10 nicht nur alte Probleme <strong>mit</strong><br />

dem Mehrprozessorbetrieb, sondern<br />

ergänzt die Treiber <strong>für</strong> Atheros-WLAN-<br />

Karten um neue Hardware-Komponenten.<br />

»ath(4)« unterstützt jetzt alle<br />

Atheros-PCI/​PCIe-Netzwerkkarten bis<br />

einschließlich des AR9287-Chipsatzes.<br />

Allerdings fehlt die Unterstützung <strong>für</strong><br />

Netzwerkkarten <strong>mit</strong> AR5513-MIMO-<br />

802.11abg-Chips, AR5523/​AR5212-<br />

Chips – die auf USB-WLAN-Sticks <strong>und</strong><br />

Steckkarten zum Einsatz kommen –<br />

sowie die AR7010- <strong>und</strong> AR9271-Serie,<br />

ebenfalls <strong>für</strong> USB-WLAN-Sticks.<br />

Darüber hinaus kommt eine Reihe von<br />

Verbesserungen <strong>für</strong> den IEEE802.11n-<br />

Standard hinzu, der neuesten Version<br />

des WLAN-Standards. Sie dienen<br />

auch als Gr<strong>und</strong>lage <strong>für</strong> sogenannte<br />

vermaschte WLANs (Wireless Mesh<br />

Networking). Dabei handelt es sich<br />

um ein Netz aus <strong>mit</strong>einander kommunizierenden<br />

WLAN-Knoten nach dem<br />

IEEE802.11s-Standard. Sie heißen auch<br />

Ad-hoc-Netzwerke.<br />

Ad-hoc-Netze verbinden mobile Endgeräte<br />

(Netzknoten) wie Mobiltelefone<br />

<strong>und</strong> Notebooks <strong>ohne</strong> Rückgriff auf<br />

eine feste Infrastruktur wie WLAN-<br />

Access-Points. Die Daten werden von<br />

Netzknoten zu Netzknoten weitergereicht,<br />

bis sie ihren Empfänger erreicht<br />

haben. So verteilt sich die Datenlast<br />

in solchen Netzen besser als in Netzen<br />

<strong>mit</strong> einem zentralen Knoten. Spezielle<br />

Routing-Verfahren verwirklichen dieses<br />

Prinzip, <strong>mit</strong> denen sich das Netz<br />

ständig anpasst, wenn sich Knoten<br />

bewegen, einklinken oder ausfallen<br />

(Abbildung 5).<br />

Dem praktischen Einsatz der Implementierung<br />

des IEEE802.11s steht in<br />

FreeBSD 10 nichts mehr im Wege, allerdings<br />

ist die Kompatibilität zu Linux<br />

noch nicht gegeben.<br />

Bei der Unterstützung des IEEE802.11s-<br />

Standards ergibt sich das folgende Bild:<br />

Die Treiber <strong>für</strong> WLAN-Karten <strong>mit</strong> Atheros-Chipsatz<br />

(»ath(4)«), Ralink-Chipsatz<br />

(»ral(4)«) <strong>und</strong> Chips der Firma Marvell<br />

(»mwl(4)«) bieten Support <strong>für</strong> WLAN-<br />

Meshes. Schlechter sieht es bei WLAN-<br />

Karten <strong>mit</strong> IntelPRO-Wireless-Chipsatz<br />

aus, weil sie viel Funktionalität in die<br />

Closed-Source-Firmware verlagern; das<br />

verhindert auch <strong>für</strong> die Zukunft Besserung.<br />

Dies betrifft die Treiber <strong>mit</strong> Intel-<br />

PRO-Wireless-Chipsätzen »ipw(4)«,<br />

»iwi(4)«, »iwn(4)« <strong>und</strong> »wi(4)«. An allen<br />

anderen WLAN-Treibern arbeiten die<br />

Entwickler fleißig, um sie <strong>für</strong> WLAN-<br />

Meshes fit zu machen.<br />

Das folgende Beispiel zeigt, <strong>mit</strong> wie<br />

wenigen Befehlen sich ein WLAN-<br />

Mesh aufbauen lässt. Die folgenden<br />

Kommandos, ausgeführt auf jedem


112<br />

freeX<br />

FreeBSD 10<br />

Abbildung 7: Der Installer bringt FreeBSD jetzt auch in ZFS-Pools unter, wenn auch noch experimentell.<br />

n Info<br />

Netzknoten, richten ein Mesh ein, das<br />

auf Kanal 36 läuft <strong>und</strong> die Bezeichnung<br />

admin-mag-mesh trägt:<br />

# ifconfig wlan0 create wlandev U<br />

ath0 wlanmode mesh U<br />

channel 36 U<br />

meshid admin‐mag‐mesh<br />

# ifconfig wlan0 <br />

Das folgende Kommando gibt eine<br />

Liste aller Knoten im Mesh aus:<br />

# ifconfig wlan0 list sta<br />

ADDR CHAN ... STATE RATE ...<br />

36 ... IDLE 0M ...<br />

36 ... ESTAB 6M ... WME U<br />

MESHCONF<br />

36 ... ESTAB 6M ... WME U<br />

MESHCONF<br />

36 ... ESTAB 6M ... WME U<br />

MESHCONF<br />

Die zweite Zeile zeigt den eigenen<br />

Mesh-Knoten, die weiteren Einträge<br />

listen die anderen Knoten auf.<br />

Weiterführende Links <strong>und</strong><br />

Informationen zu diesem<br />

Artikel finden Sie unter:<br />

www.admin-magazin.de/qr/31044<br />

Paketverwaltung<br />

FreeBSD 10 stellt zudem auf eine neue,<br />

zuvor optionale Paketverwaltung um<br />

[8]. Das Kommando »pkg« löst jetzt die<br />

bisher verwendeten Tools »pkg_add«,<br />

»pkg_info« <strong>und</strong> »pkg_delete« ab.<br />

Die neue Paketverwaltung verbessert<br />

vor allem die Auflösung von Abhängigkeiten,<br />

die entstehen, wenn eine<br />

Applikation weitere Programme, Bibliotheken<br />

oder Skripte benötigt. »pkg«<br />

verlegt die Verwaltung der Abhängigkeiten<br />

in eine SQLite-Datenbank <strong>und</strong><br />

verbessert da<strong>mit</strong> die Geschwindigkeit<br />

<strong>und</strong> Stabilität erheblich.<br />

Künftig soll »pkg« auch signierte Pakete<br />

verarbeiten <strong>und</strong> da<strong>mit</strong> auch ein <strong>Sicher</strong>heitsplus<br />

herbeiführen. Allerdings<br />

dient »pkg« nicht zur Verwaltung der<br />

Ports, dies bleibt den Tools »portmaster«<br />

<strong>und</strong> »portupgrade« vorbehalten,<br />

zu finden im Verzeichnis »/usr/ports/<br />

ports‐mgmt«. Um das Management von<br />

Ports <strong>und</strong> Paketen konsistent zu halten,<br />

trägt man in der Datei »/etc/make.conf«<br />

die folgende Zeile nach, sofern sie nicht<br />

schon existiert:<br />

WITH_PKGNG=yes<br />

Die Bedienung ist einfach <strong>und</strong> nach<br />

wie vor kommandozeilenorientiert.<br />

Abbildung 6 zeigt die Abhängigkeiten<br />

anhand des Tools »portupgrade«.<br />

Die neue Software zur Paketverwaltung<br />

installiert <strong>und</strong> deinstalliert nicht nur<br />

Applikationen, sondern kümmert sich<br />

auch um Upgrades. Dieser Befehl holt<br />

eine Liste aller Pakete ein:<br />

# pkg version<br />

Nun bringt das folgende Kommando<br />

veraltete Software inklusive aller Abhängigkeiten<br />

auf den neuesten Stand:<br />

# pkg upgrade<br />

»pkg« kümmert sich auch um die <strong>Sicher</strong>heit.<br />

Dieser Befehl zeigt alle Pakete<br />

<strong>mit</strong> <strong>Sicher</strong>heitslücken an:<br />

# pkg audit ‐F<br />

Installation<br />

Auch in der neuen Version läuft die<br />

FreeBSD-Installation über die Textoberfläche<br />

des Tools »bsdinstaller«, das den<br />

Benutzer führt. Die textbasierte Installation<br />

verhindert potenzielle Probleme<br />

<strong>mit</strong> der Erkennung der Grafik-Hardware<br />

durch Xorg.<br />

Die neue Version von »bsdinstaller« ermöglicht<br />

nun auch die Installation des<br />

Systems in einen ZFS-Pool (Abbildung<br />

7), was früher nur <strong>mit</strong> einigem Aufwand<br />

möglich war [7].<br />

Die FreeBSD-Standardinstallation läuft<br />

im Allgemeinen reibungslos, sowohl<br />

auf Notebooks als auch auf Servern.<br />

Schwachstellen bleiben allerdings die<br />

Unterstützung <strong>für</strong> ACPI <strong>und</strong> Grafik-<br />

Hardware: Auf einem Notebook sollte<br />

man unbedingt das »vesa«-Modul aus<br />

dem Kernel entfernen, ansonsten stürzt<br />

das Notebook beim nächsten Einschalten<br />

(Resume) ab.<br />

Des Weiteren sorgte die experimentelle<br />

Installation von FreeBSD in einen<br />

ZFS-Pool <strong>für</strong> Ärger. Eine <strong>mit</strong> VirtualBox<br />

erstellte virtuelle Maschine stürzte <strong>mit</strong><br />

dieser Konfiguration in unseren Tests<br />

regelmäßig ab oder reagierte nicht<br />

mehr.<br />

Generell bleibt FreeBSD auch in der<br />

neuen Version 10 ein stabiles <strong>und</strong><br />

sicheres Betriebssystem <strong>und</strong> bringt<br />

nützliche neue Features <strong>mit</strong>. Abgesehen<br />

von der Behebung der erwähnten<br />

Probleme würde man sich eine breitere<br />

Hardware-Unterstützung etwa im Bereich<br />

WLAN wünschen. Auf der anderen<br />

Seite empfiehlt sich FreeBSD durch die<br />

hohe Qualität bei der unterstützten<br />

Hardware. (csc) n<br />

Ausgabe 01-2014 Admin www.admin-magazin.de


114<br />

Service<br />

Impressum <strong>und</strong> <strong>Vorschau</strong><br />

n Impressum ISSN 2190-1066<br />

<strong>ADMIN</strong>-<strong>Magazin</strong> eine Publikation der Medialinx AG<br />

Redaktionsanschrift Putzbrunner Straße 71<br />

81739 München<br />

Tel.: 0 89 / 99 34 11-0<br />

Fax: 0 89 / 99 34 11-99 oder -96<br />

Internet<br />

www.admin-magazin.de<br />

E-Mail<br />

redaktion@admin-magazin.de<br />

Geschäftsleitung Brian Osborn (Vorstand), bosborn@medialinx-gruppe.de<br />

Hermann Plank (Vorstand), hplank@medialinx-gruppe.de<br />

Chefredakteure<br />

Oliver Frommel (V. i. S. d. P.),<br />

ofrommel@admin-magazin.de (ofr)<br />

Jens-Christoph Brendel<br />

jbrendel@admin-magazin.de (jcb)<br />

Redaktion<br />

News/Report<br />

Ulrich Bantle (Ltg.), ubantle@medialinx-gruppe.de (uba)<br />

Mathias Huber, mhuber@medialinx-gruppe.de (mhu)<br />

Software/Programmieren Carsten Schnober, cschnober@medialinx-gruppe.de (csc)<br />

Kristian Kißling, kkissling@medialinx-gruppe.de (kki)<br />

Security/Networking Markus Feilner, mfeilner@medialinx-gruppe.de (mfe)<br />

Thomas Leichtenstern, tleichtenstern@medialinx-gruppe.de (tle)<br />

Ständige Mitarbeiter David Göhler (Schlussredaktion), Tim Schürmann, Claudia Thalgott<br />

Produktionsleitung<br />

Grafik<br />

Abo-Infoseite<br />

Abonnenten-Service<br />

Christian Ullrich, cullrich@medialinx-gruppe.de<br />

Judith Erb (Design <strong>und</strong> Layout)<br />

Titel: Judith Erb, Ausgangsgrafik: lucadp, 123RF<br />

www.admin-magazin.de/abo<br />

Gudrun Blanz (Teamleitung)<br />

abo@admin-magazin.de<br />

Tel.: 07131/27 07 274, Fax: 07131/27 07 78 601<br />

Preise Print Deutschland Österreich Schweiz Ausland EU<br />

Einzelheft € 9,80 € 10,80 Sfr 19,60 (siehe Titel)<br />

Mini-Abo (3 Ausgaben) € 9,80 € 10,80 Sfr 19,60 (siehe Titel)<br />

Jahres-DVD (Einzelpreis) € 14,95 € 14,95 Sfr 18,90 € 14,95<br />

Jahres-DVD (zum Abo 1 ) € 6,70 € 6,70 Sfr 8,50 € 6,70<br />

Jahresabo € 99,90 € 109,90 Sfr 159,90 € 129,90<br />

Preise Digital Deutschland Österreich Schweiz Ausland EU<br />

Heft-PDF Einzelausgabe € 9,80 € 9,80 Sfr 10,71 € 9,80<br />

DigiSub (12 Ausgaben) € 89,90 € 89,90 Sfr 129,50 € 89,90<br />

DigiSub (zum Printabo) € 12,— € 12,— Sfr 12,— € 12,—<br />

HTML-Archiv (zum Abo 1 ) € 48,— € 48,— Sfr 48,— € 48,—<br />

Preise Kombiabos<br />

Profi-Abo 2 € 181,90 € 198,90 Sfr 235,90 € 219,90<br />

1<br />

nur erhältlich in Verbindung <strong>mit</strong> einem Jahresabo Print oder Digital<br />

2<br />

<strong>mit</strong> Linux-<strong>Magazin</strong>-Abo <strong>und</strong> beiden Jahres-DVDs<br />

Schüler- <strong>und</strong> Studenten-Ermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises oder einer<br />

aktuellen Immatrikulationsbescheinigung. Der aktuelle Nachweis ist bei Verlängerung neu zu erbringen.<br />

Andere Abo-Formen, Ermäßigungen im Ausland etc. auf Anfrage.<br />

Adressänderungen bitte umgehend <strong>mit</strong>teilen, da Nachsendeaufträge bei der Post nicht <strong>für</strong><br />

Zeitschriften gelten.<br />

Presse<strong>mit</strong>teilungen info@admin-magazin.de<br />

Anzeigen/Repräsentanz Es gilt die Anzeigenpreisliste vom 01.01.2013<br />

National<br />

Pressevertrieb<br />

Druck<br />

Petra Jaser<br />

Tel.: 089 / 99 34 11 24, Fax: 089 / 99 34 11 99<br />

E-Mail: pjaser@medialinx-gruppe.de<br />

Michael Seiter<br />

Tel.: 089 / 99 34 11 23, Fax: 089 / 99 34 11 99<br />

E-Mail: mseiter@medialinx-gruppe.de<br />

MZV, Moderner Zeitschriften Vertrieb GmbH<br />

Breslauer Straße 5, 85386 Eching<br />

Tel.: 089 / 31906-0, Fax: 089 / 31906-113<br />

Vogel Druck <strong>und</strong> Medienservice GmbH<br />

97204 Höchberg<br />

Der Begriff Unix wird in dieser Schreibweise als generelle Bezeichnung <strong>für</strong> die Unix-ähnlichen Betriebssysteme<br />

verschiedener Hersteller, zum Beispiel Eurix (Comfood), Ultrix (Digital Equipment), HP/UX (Hewlett-<br />

Packard) oder Sinix (Siemens) benutzt, nicht als die Bezeichnung <strong>für</strong> das Trademark von X/Open. Linux ist ein<br />

eingetragenes Marken zeichen von Linus Torvalds <strong>und</strong> wird in unserem Markennamen <strong>mit</strong> seiner Erlaubnis<br />

verwendet. Alle anderen Marken sind Eigentum der jeweiligen Inhaber. Eine Haftung <strong>für</strong> die Richtigkeit von<br />

Veröffentlichungen kann trotz sorgfältiger Prüfung durch die Redaktion vom Verlag nicht übernommen<br />

werden. Mit der Einsendung von Manu s kripten gibt der Verfasser seine Zustimmung zum Abdruck im <strong>ADMIN</strong>-<br />

<strong>Magazin</strong>. Für unverlangt ein gesandte Manuskripte kann keine Haftung übernommen werden. Die Redaktion<br />

behält sich vor, Artikel zu kürzen. Das Exklusiv- <strong>und</strong> Verfügungsrecht <strong>für</strong> angenommene Manuskripte liegt beim<br />

Verlag. Es darf kein Teil des Inhalts <strong>ohne</strong> ausdrückliche schriftliche Genehmigung des Verlags in irgendeiner<br />

Form vervielfältigt oder verbreitet werden. Copyright © 1994–2013 Medialinx AG<br />

n Autoren dieser Ausgabe<br />

Bruce Byfield Zu Protokoll 68<br />

Jürgen Dankoweit Neues vom Teufel 106<br />

Thomas Drilling Genauer betrachtet 78<br />

Thomas Drilling Zusammengeschweißt 52<br />

Rainer Grimm Vorgelesen 8<br />

Thomas Joos Virtuelle Kontrolle 88<br />

Thomas Joos Überwiegend heiter 34<br />

Jeff Layton In den Safe 58<br />

Martin Loschwitz Auf Kommando 82<br />

Martin Loschwitz Startvorteil 62<br />

Alan Pipitone Perspektivwechsel 44<br />

Thorsten Scherf Besser protokolliert 20<br />

n Inserentenverzeichnis<br />

<strong>ADMIN</strong> http://​www.admin-magazin.de 11, 41, 87, 91<br />

Android User GY http://​www.android-user.de 104<br />

ConSol Software GmbH http://​www.consol.de 37<br />

Deutsche Messe AG http://​www.cebit.de 99<br />

Galileo Press http://​www.galileo-press.de 15<br />

GIMP-<strong>Magazin</strong> http://​www.gimp-magazin.de 61<br />

Linux-Hotel http://​www.linuxhotel.de 17<br />

Linux-<strong>Magazin</strong> http://​www.linux-magazin.de 9, 51, 71<br />

LinuxUser http://​www.linuxuser.de 69<br />

Medialinx AG http://​www.medialinx-gruppe.de 39<br />

Medialinx IT-Academy http://​www.medialinx-academy.de 33, 111, 113<br />

outbox AG http://​www.outbox.de 2<br />

PlusServer AG http://​www.plusserver.de 7, 13, 19, 25, 29, 43<br />

Raspberry Pi Geek http://​www.raspberry-pi-geek.de 47, 115<br />

SEP Aktiengesellschaft http://​www.sep.de 116<br />

Ubuntu User http://​www.ubuntu-user.de 57<br />

Einem Teil dieser Ausgabe liegt eine Beilage der Firma ppedv (http://​www.visualstudio1.de ) bei. Wir bitten<br />

unsere Leser um fre<strong>und</strong>liche Beachtung.<br />

n <strong>Vorschau</strong>: <strong>ADMIN</strong> 02/2014 erscheint am 9. Januar 2014<br />

Youssouf Cader, 123RF<br />

WLAN-<strong>Sicher</strong>heit<br />

Drahtlose Netzwerke sind<br />

überall: Zu Hause, im Café <strong>und</strong><br />

in der Firma. Im Gegensatz<br />

zu Kabelnetzen verliert der<br />

Admin bei WLANs allerdings<br />

schnell die Kontrolle über die<br />

Clients. Wer darf ins Netz, was<br />

ist erlaubt <strong>und</strong> wie wehrt man<br />

Einbruchsversuche ab?<br />

Storage <strong>mit</strong> 10 GBit/s<br />

SSDs in Fileservern waren lange<br />

mehr oder weniger witzlos,<br />

weil ihre Performance nicht via<br />

Ethernet zu transportieren war.<br />

Mit 10 GBit/s-Ethernet ändert<br />

sich das. Und das Gute: Man<br />

kann sogar Kupferkabel weiterverwenden.<br />

Das <strong>ADMIN</strong>-<strong>Magazin</strong><br />

hat ein Setup getestet.<br />

Ausgabe 01-2014 Admin www.admin-magazin.de

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!