Die kommende Release 11 von Solaris kann mit Zones eine Linux-Serverumgebung emulieren. In dem freien Entwicklungszweig Open Solaris lässt sich die neue Technologie bereits ausprobieren. Dieser Workshop liefert einen Überblick und gibt Ihnen Tipps zur Installation.
Seit Sun Mitte letzten Jahres ihr Solaris-Betriebssystem unter eine freie Lizenz gestellt hat, tut sich was. Endlich erhält man Einblick in das Sun-Betriebssystemlabor und kann den Entwicklern bei der Arbeit zusehen – und sogar selbst mitmachen. Zum Ausprobieren gibt es mittlerweile neben Suns eigener Open-Solaris-Distribution Solaris Express noch die freien Schillix und Nexenta.
Für Furore sorgte das freie Sun-OS vor kurzem auf Weblogs und Mailinglisten, als der Solaris-Entwickler Adam Leventhal mit dem Solaris-Tool Dtrace die Performance des Linux-Binary »top« untersuchte. Dazu ließ er das Programm in einer unter Open Solaris emulierten Linux-Umgebung laufen, einer so genannten Branded Zone. Sun entwickelt auch diese Technologie im Rahmen der Open-Source-Initiative.
Wie bei den Solaris-Zones (siehe Artikel “Server in Potenz” in diesem Schwerpunkt) laufen emulierte Systeme unabhängig voneinander auf dem Gastsystem. Neu sind nun die Brands (englisch für Marken), die für eine Nicht-Solaris-Personality des emulierten Systems stehen. Zurzeit gibt es zwar nur eine solche Brand, doch die ist für Linux-Benutzer besonders interessant: Die LX-Brand bildet ein Linux-System mit Kernel 2.4 und der Glibc 2.3.2 nach.
Weil Linux, den Plänen von Linus Torvalds folgend, bis heute auf stabile Kernel-ABI und -API verzichtet, ist jede Linux-Emulation immer an eine bestimmte Kernelversion gebunden. Deshalb erfordert die Unterstützung des Kernels 2.6, aber auch aktueller Glibc-Versionen eine andere Brand.
Solaris, Marke Linux
Um mit dem emulierten Linux-System arbeiten zu können, muss in einer Branded Zone noch eine Distribution installiert werden. Das wirft eine Schwierigkeit auf, denn der Installer einer Linux-Distribution erwartet ja einen PC (ob emuliert oder echt) vorzufinden. Deshalb gilt es, andere Wege zur Installation zu finden, zum Beispiel spezielle Skripte.
Die bestehende Linux-Brand unterstützt zurzeit nur Red Hat Enterprise Linux 3 oder das aus freien Quellen kompilierte Gegenstück Centos. Im Brandz-Forum stehen aber Berichte über erfolgreiche Installationen anderer Distributionen. Eine Anpassung des Install-Skripts ist dabei stets erforderlich, auch die Kernel- und Glibc-Versionen müssen passen.
In den Branded Zones steckt viel Arbeit, schließlich sollen sie das komplette Zusammenspiel zwischen Glibc und Linux-Kernel emulieren. Das übernehmen im Wesentlichen ein Solaris-Kernelmodul und eine Userspace-Bibliothek. Der Open-Solaris-Kernel überprüft jeden Systemaufruf (Syscall), ob er zu einer Branded Zone gehört. Dann leitet er den Aufruf an das Brandz-Kernelmodul weiter, das wiederum den Syscall zurück an die Userspace-Emulationsbibliothek gibt (Abbildung 1).

Abbildung 1: Die Funktionsweise der Branded Zones im Überblick: Ein Kernelmodul und eine Bibliothek übernehmen die Emulation.
Übersetzungskunst
Die LX-Emulations-Library übersetzt jeden Linux-Syscall in sein Solaris-Pendant – so gut es geht. Die Entwickler unterscheiden drei Grade der Emulation: Pass-through (Durchreichen), Simple (Einfach) und Complex. Im Pass-through-Fall, etwa »close()«, existiert ein passender Solaris-Systemaufruf, bei dem eventuell noch die Umordnung von Parametern oder Fehlerwerten nötig ist.
Die Simple Emulation erfordert schon etwas aufwändigere Datenverarbeitung, etwa Typumwandlungen, das Füllen von Datenstrukturen oder Ähnliches. Der Rest bleibt beim komplexen Fall hängen, bei dem praktisch alles möglich ist. Um grobe Inkompatibilitäten zwischen Solaris und Linux auszubügeln, haben die Brandz-Entwickler sogar neue Solaris-Syscalls implementiert.
Auch beim Thread- und Prozesskonzept weichen Solaris und Linux stark voneinander ab. Während Solaris ein NxN-Modell von User- und Kernel-Threads verfolgt, ähneln Linux-Threads stark den gewohnten Prozessen, besitzen beispielsweise eigene Prozess-IDs. Die Brandz-Entwickler bilden Linux- auf Solaris-Threads ab und führen über die Thread-PIDs separat Buch, damit die Linux-Syscalls »getpid()« und »gettid()« die richtigen Ergebnisse liefern.
Schwierigkeiten bereitet außerdem das Device-Handling – oder Nicht-Handling, so beim Linux-Zugriff auf Netzwerkgeräte, der nicht über Gerätedateien läuft, sondern vor allem über Ioctls und das Proc-FS. Auch diese Funktionalität haben die Entwickler nachgebildet, sodass Netzwerk-Programme normalerweise ohne Probleme funktionieren. Eine Ausnahme ist Ping, das nach einem verschickten und empfangenen Paket hängen bleibt.
Installationsfallen
Wer die Linux-Brand einmal selbst ausprobieren will, muss sich zunächst bei Sun registrieren und dann vier CD-Images der Solaris-Express-Distribution herunterladen [1]. Bei den anderen freien Open-Solaris-Distributionen fehlt Brandz bislang, auch weil es für einige Tools keine Sourcen gibt. Zur Installation booten Sie die erste CD und folgen dann den Anweisungen. Der Installer partitioniert automatisch eine leere Platte mit dem für Linux-Benutzer ungewohnten komplizierten Schema von Disks und Slices. Als Locale wählen Sie am besten Posix, denn einige spätere Schritte funktionieren nicht mit anderen Spracheinstellungen. Alternativ setzen Sie beim Installieren von Brandz die Umgebungsvariable »LANG=C«.
Open Solaris verwendet als Bootloader Grub, so ist es auch ohne weiteres möglich, es auf der zweiten Platte zu installieren und vom Grub der ersten mit der Chainloader-Anweisung zu booten. Funktioniert das Open-Solaris-System, folgen Sie im Wesentlichen der Installationsanleitung von [2], die allerdings ein paar Lücken aufweist, die dieser Artikel schließt. Haben Sie die Pakete »SFWrpm« »SUNWpkgcmdsu« heruntergeladen und mit »bzip2« entpackt, installieren Sie sie mit folgenden Befehlen:
pkgadd -d SFWrpm.pkg pkgadd -d SUNWpkgcmdsu.pkg
Danach weist die Anleitung dazu an, Brandz entweder aus den Sourcen zu installieren oder mit dem BFU-Utility. Leider verschweigt sie, wie der zweite Weg genau zu gehen ist. Er setzt nämlich die Installation der ON-Tools (Operating System/Networking) voraus, die Sie unter [3] finden. Nach dem Entpacken installieren Sie das Paket mit »pkgadd -d onbld«.
Schnell aktualisiert
BFU (Blindingly Fast Upgrade) ist eine Technik, die Solaris-Betriebssystem-Updates beschleunigt, indem sie eine auf Cpio basierende Binär-Patch-Technik benutzt. Dieser Weg steht, wie bereits angedeutet, auch für Brandz offen, das ja ein Update von Kernel und Bibliotheken erfordert. Im Test hat der Autor den Distributions-Kernel von Solaris Express zuerst mit BFU auf eine neue Version von [4] aktualisiert, bevor ein zweites Update das System auf den Brandz-Stand brachte. Das bedeutet jeweils, das heruntergeladene Tar-Archiv zu entpacken und dann das BFU-Skript damit zu füttern, zum Beispiel:
./bfu.sh /home/oliver/brandz_release_2006-01-22
Es ist wichtig, den absoluten Pfad zum entpackten BFU-Archiv anzugeben. Normalerweise kommt es bei einem solchen Update zu Konflikten (vor allem Konfigurationsdateien betreffend), die sich aber meist automatisch lösen lassen. Dazu öffnet BFU nach dem Update eine Shell, in der Sie das Utility »acr« aufrufen (Automatic Conflict Resolution). Findet die Shell das Skript nicht, versuchen Sie es mit dem absoluten Pfad »/opt/onbld/bin/acr«. Findet BFU die ON-Tools nicht, geben Sie sie vor dem Ausführen von »bfu.sh« folgende Umgebungsvariablen an:
export FASTFS=/opt/onbld/bin/i386/fastfs export BFULD=/opt/onbld/bin/i386/bfuld export GZIPBIN=/usr/bin/gzip
Damit ist die Installation der Brand selbst abgeschlossen und es geht an die Einrichtung des Gastsystems. Die einfachste Variante ist, die Tar-Datei von Centos herunterzuladen, die Sun bereitstellt. Folgen Sie der Installationsanleitung zum Einrichten der Zone mit »zonecfg«, bevor Sie darin Centos installieren:
zoneadm -z centos install -d /export/brandz-nv31/centos_fs_image.tar
Der beim Anlegen der Zone gewählte Name lautet im Beispiel »centos«. Auch hier ist wieder der absolute Pfad obligatorisch, sonst reagiert Zoneadm mit einer wenig hilfreichen Fehlermeldung. Damit ist die Installation abgeschlossen und Sie können sich mit »zlogin Zonenname« in die Linux-Zone einloggen (Abbildung 2).

Abbildung 2: Nach dem Einloggen in die Branded Zone zeigt »uname« an, dass es sich um ein Linux-Betriebssystem handelt. Die in der Zone laufende Distribution ist der Red-Hat-Clone Centos.
Haben Sie auf Solaris-Ebene die Linux-Zone mit einer funktionierenden Netzwerkeinstellungen versehen, müssen Sie im laufenden Centos das Netz nur noch über »/etc/sysconfig/network« aktivieren und die Zone neu booten. Anschließend können Sie sich auch über SSH in die Linux-Zone einloggen. In Solaris erscheint das Linux-Netzwerkgerät als Interface-Alias. Um Dtrace, wie in Adam Leventhals Blog beschrieben, zum Tracen von Linux-Prozessen zu verwenden, brauchen Sie den Linux-Syscall-Provider für Dtrace. Die getestete Brandz-Release wies allerdings einen kleinen Bug auf, der das erfolgreiche Dtracen verhinderte. Die Entwickler rieten zu einem Symlink, der das Problem auch prompt beheben konnte:
ln -s /devices/pseudo/lx_systrace@0:lx_systrace /dev/dtrace/provider/lx_systrace
Wenn Sie Brandz mit einer neueren Release selbst ausprobieren, dürfte das Problem wohl bereits behoben sein. In jedem Fall empfiehlt sich aber ein Blick in das Brandz-Forum auf der Open-Solaris-Website. Hier lesen die Entwickler selbst mit und reagieren erfreulich schnell auf Anfragen.
Erfolg versprechend
Mit den noch in Entwicklung befindlichen Branded Zones haben die Solaris-Entwickler schon Erstaunliches geleistet. Davon kann sich jeder überzeugen, der auf Open Solaris die Linux-Brand installiert – sie deckt bereits jetzt den größten Teil der Funktionalität eines Linux-Systems ab, auch wenn sich die Emulation zurzeit noch auf Kernel 2.4 und Glibc 2.3.2 beschränkt.
Als Anwendungsfeld für die Linux-Zonen kommt wohl vor allem das Hosting von Linux-Servern in einer Solaris-Umgebung in Frage, grafische Anwendungen laufen aber auch. Für die fertige Linux-Brand im kommerziellen Solaris streben die Entwickler Performance-Einbußen von maximal fünf Prozent gegenüber dem nativen Linux an.
|
Infos |
|---|
|
[1] Solaris-Express: [http://www.sun.com/software/solaris/solaris-express] [2] Brandz-Installation: [http://www.opensolaris.org/os/community/brandz/install] [3] O/N-Tools: [http://javashoplm.sun.com/ECom/docs/Welcome.jsp?StoreId=7&PartDetailId=Open-Sol-1-EA-Sp-x86-G-B&TransactionId=noreg] [4] Open-Solaris-Updates: [http://dlc.sun.com/osol/on/downloads/20060118] |





