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