Via PXE lassen sich auch Live-Systeme booten: Sie schalten einen plattenlosen Rechner einfach ein und er holt sein komplettes OS beim Server ab.
Vor zwei Ausgaben [1] beschrieben wir, wie Sie ein System auf einem Rechner installieren, der kein CD- oder DVD-Laufwerk besitzt. Die Client-Rechner müssen dazu lediglich in der Lage sein, über PXE zu booten. Das stellen Sie gewöhnlich im BIOS ein. Schalten Sie den Rechner ein, sucht er im Netzwerk nach dem PXE-Server und tankt dort sein System.
Auf dem Server läuft die eigentliche Show ab. Auf ihm richten Sie einen DHCP-Server ein, der IP-Adressen an die Clients verteilt. Zusätzlich installieren Sie einen TFTP-Server, der über ein spezielles Protokoll den Linux-Kernel (linux oder vmlinuz) und ein komprimiertes Dateisystem (die Initial Ramdisk initrd oder initrd.gz) an die Clients schickt. Diese laden den Kernel, der wiederum lädt die Initial Ramdisk. Im besagten Artikel installiert der Client-Rechner dann die komplette Distribution über das Internet per FTP oder HTTP.
Diesmal läuft das etwas anders: Die Clients sollen über das Netzwerk ein komplettes Live-System in den Arbeitsspeicher laden (Abbildung 1). Am Setting verändert sich im Vergleich zum letzten Mal – zumindest unter Ubuntu – nicht viel, bei OpenSuse sieht das schon anders aus. Wir gehen aber davon aus, dass sich die nötigen PXE-Dateien bereits im Verzeichnis /var/lib/tftpboot befinden. Um einen leichten Einstieg zu bieten, beschreiben wir zunächst, wie Sie Ubuntu 7.04 oder 7.10 fernbooten, dann soll es um Kiwi und OpenSuse gehen.

Abbildung 1: Schema des PXE-Boots eines Live-Systems: Der blaue Pfeil steht für das via NFS erreichbare Root-System.
Ubuntu Live-System booten
In beiden Fällen liefert ein aktuelles Ubuntu 7.10 die PXE-Images aus. Wollen Sie OpenSuse als PXE-Server einsetzen, müssen Sie auf Abweichungen in der Konfiguration achten, die der bereits erwähnte Artikel [1] ebenfalls anspricht.
Um Ubuntu auszuliefern, brauchen Sie zunächst eine Live-Distribution von Ubuntu 7.10 oder Ubuntu 7.04 (etwa unter [2]). Laden Sie sie über FTP oder Bittorrent herunter und speichern Sie das Image in Ihrem Home-Verzeichnis. Dann spielen Sie die Pakete dhcp3-server, tftpd-hpa sowie nfs-kernel-server ein und passen die Konfigurationsdateien /etc/default/tftpd-hpa und /etc/dhcp3/dhcpd.conf so an, wie im Artikel [1] erwähnt.
Im Unterschied zum letzten Artikel bietet der Server hier kein Netboot-Image an, sondern erlaubt via NFS den Zugriff auf die Dateien der Live-CD. Dafür muss der NFS-Server das Verzeichnis freigeben, in dem sich diese Dateien (die wir als Root-System bezeichnen) befinden. Im Beispiel hängen Sie die Live-CD in das Verzeichnis /var/lib/image ein. Angenommen, die Live-CD liegt nur in Form eines ISO-Images vor, “loopmounten” Sie das Image, um auf die darin enthaltenen Files zuzugreifen:
$ sudo mkdir /var/lib/image $ sudo mount -o loop /Pfad/zum/Image.iso /var/lib/image
Auf diesem Weg hängt Linux das heruntergeladene Image wie eine herkömmliche CD in das Verzeichnis ein. Ein ls /var/lib/image zeigt Ihnen die zuvor noch im ISO eingemauerten Inhalte an (Abbildung 2). Im nächsten Schritte öffnen Sie mit administrativen Rechten die Datei /etc/exports und ergänzen sie um folgenden Eintrag:
/var/lib/image/ *(rw,no_root_squash,sync)
Anschließend starten Sie den NFS-Server über sudo /etc/init.d/nfs-kernel-server force-reload neu. Er bietet nun das Verzeichnis /var/lib/image mitsamt der gemounteten Live-CD als neuen Exportartikel an.

/var/lib/image via Loopback mounten, erscheinen die Inhalte wie bei einer gewöhnlichen Live-CD.” width=”300″ height=”216″ />
Abbildung 2: Wenn Sie das ISO-Image der Ubuntu-Live-CD in das Verzeichnis/var/lib/image via Loopback mounten, erscheinen die Inhalte wie bei einer gewöhnlichen Live-CD. Meldet sich ein Client via PXE übers Netzwerk, liefert der Server bei Ubuntu ihm gewöhnlich die Dateien initrd.gz und vmlinuz aus. Damit das geht, kopieren Sie beide Dateien von der eben gemounteten ISO-Datei nach /var/lib/tftpboot.
$ sudo cp /var/lib/image/casper/initrd.gz /var/lib/tftpboot $ sudo cp /var/lib/image/casper/vmlinuz /var/lib/tftpboot
Die angemeldeten Clients suchen zuerst in der Datei /var/lib/tftpboot/pxelinux.cfg/default nach den beiden Dateien. Öffnen Sie diese also mit Root-Rechten und übertragen Sie die Zeilen aus Listing 1.
DEFAULT neu LABEL neu kernel vmlinuz append initrd=initrd.gz boot=casper netboot=nfs nfsroot=192.168.33.1:/var/lib/image – PROMPT 1 TIMEOUT 100
Die Datei können Sie beliebig anpassen, um etwa mehrere PXE-Systeme anzubieten. Hinter nfsroot tragen Sie die IP-Adresse des PXE-Servers ein, der dazu demgemäß eine feste IP-Adresse haben muss.
Nun steht die Konfiguration: Der DHCP-Server läuft, der NFS-Server exportiert fleißig – fehlt nur noch der TFTP-Server. Bearbeiten Sie die Datei /etc/default/tftpd-hpa wie im Artikel [1] beschrieben und starten Sie den Server über sudo /etc/init.d/tftpd-hpa start.Hängen Sie nun einen Client an das Netzwerk, sollte er ein Ubuntu-Live-System booten, wenn Sie die Boot-Reihenfolge ändern und beim Boot-Prompt neu eingeben (Abbildung 3).

neu ein, um das Live-System von Ubuntu zu booten.” width=”300″ height=”167″ />
Abbildung 3: Nach dem Boot des PXE-Systems erscheint ein Boot-Prompt. Hier geben Sieneu ein, um das Live-System von Ubuntu zu booten.TIPP
Findet der Client beim Booten den TFTP-Server nicht, stoppen Sie diesen über sudo /etc/init.d/tftpd-hpa stop und geben ps aux | grep inet ein. Läuft dort ein Prozess, der inet im Namen trägt, killen Sie ihn über sudo kill PID und starten Sie den TFTP-Server neu.
OpenSuse 10.3
Etwas anders läuft es, wenn Sie ein Live-System von OpenSuse booten wollen. Dazu müssen Sie zunächst über ein System namens Kiwi die passenden Images erstellen, wozu Sie wiederum ein installiertes OpenSuse 10.3 benötigen. Hintergrundinformationen zu Kiwi finden Sie unter anderem in Ausgabe 01/08 von LinuxUser ([3],[4]).
Starten Sie YaST und binden das TOOLS-Repository von OpenSuse.org mit ein, indem Sie auf der Konsole folgenden Bandwurm eingeben:
# zypper sa http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_10.3/ Tools
Zuvor müssen Sie eventuell das Paket zypper einspielen. Dann installieren Sie die Pakete kiwi, kiwi-desc-netboot, kiwi-desc-misc und kiwi-desc-livesystem. Achten Sie darauf, genügend Platz auf der Festplatte zu haben: Kiwi baut nun die Initrd, den Kernel und das Root-System für das neue System. Desweiteren brauchen Sie auch eine OpenSuse-10.3-DVD oder ein DVD-ISO-Image. Im zweiten Fall hängen Sie das Image mit Root-Rechten per Loopmount ein, etwa über:
# mount -o loop /home/Benutzer/OpenSuse-10.3-DVD.iso /mnt
Im ersten Fall mountet OpenSuse die DVD ohnehin automatisch und hängt sie zum Beispiel unter /media/SU1030.001 ein. Geben Sie mount auf der Konsole ein, um den Mountpunkt zu erfahren. Von dieser DVD bedient sich Kiwi dann, um das neue Live-System zu bauen.
Als nächstes bearbeiten Sie eine XML-Datei, aus der Kiwi erfährt, welche Pakete und Treiber es in das Live-System einbauen soll. Dazu starten Sie als root einen Editor und öffnen die Datei /usr/share/kiwi/image/ctso-minimal-suse-10.3/config.xml, um ein minimales OpenSuse-System ohne grafische Oberfläche zu erzeugen. Wollen Sie ein System mit grafischer Oberfläche nutzen, wählen Sie die Config-Datei /usr/share/kiwi/image/ctso-suse-10.3/config.xml.
Suchen Sie die Zeile <packagemanager> und ersetzen Sie dort smart durch zypper, denn im Test machte der Paketmanager Smart Probleme. Dann müssen Sie Kiwi noch mitteilen, wo es seine Pakete suchen soll. Das ist dort, wo Sie die DVD eingehängt haben, zum Beispiel unter /mnt oder /media/SU1030.001. Tragen Sie den korrekten Pfad bei den Tags <repository type> ein oder ergänzen Sie alternativ ein Online-Repository wie es Listing 2 zeigt.
<repository type="yast2">
<source path="http://download.opensuse.org/distribution/10.3/repo/oss/"/>
</repository>
<repository type="yast2">
<source path="http://download.opensuse.org/distribution/10.3/repo/non-oss/"/>
</repository>
Im Abschnitt <preferences> sollte zudem folgende Zeile stehen:
<type filesystem="ext3" boot="netboot/suse-10.3">pxe</type>
Nun ist es an der Zeit, die zum Bauen nötigen Pakete einzusammeln. Speichern Sie die config.xml und geben Sie auf der Konsole mit Root-Rechten folgende Zeile ein:
# kiwi --prepare /usr/share/kiwi/image/ctso-minimal-suse-10.3 --root /tmp/kiwi_tmp --logfile terminal
Vorher legen Sie das Verzeichnis /tmp/kiwi_tmp an. Wollen Sie nicht das Minimalsystem, müssen Sie entsprechend das Image ctso-suse-10.3 angeben. Zusätzlich ergänzen Sie die Zeile um --add-profile KDE oder --add-profile GNOME, um den entsprechenden Desktop zu wählen. Kiwi sammelt nun die nötigen Pakete ein, überprüft die Abhängigkeiten und schließt mit der Meldung KIWI exited successfully. Das dauert eine Weile, dann folgt ein weiterer Schritt:
kiwi --create /tmp/kiwi_tmp --type pxe -d /tmp/kiwi_neu --logfile terminal
Kiwi baut mit Hilfe der eben gesammelten Dateien die nötigen Images inklusive der Initial Ramdisk und des Kernels – auch das braucht seine Zeit. Am Ende erhalten Sie mehrere Dateien, die Sie im Verzeichnis /tmp/kiwi_neu finden (Abbildung 4). Diese brennen Sie auf eine Daten-CD/DVD oder kopieren Sie via SSH auf den PXE-Server, also auf das Ubuntu-System.

/var/lib/tftpboot und /var/lib/image.” width=”300″ height=”229″ />
/var/lib/tftpboot und /var/lib/image.PXE-Server einrichten
Dort kopieren Sie die Dateien initrd-netboot-suse-10.3.i686-2.1.1.kernel.2.6.22.5-31-default und initrd-netboot-suse-10.3.i686-2.1.1.splash.gz nach /var/lib/tftpboot und benennen Sie in linux (für den Kernel) respektive initrd (für die Initial Ramdisk) um. Entsprechend passen Sie auch die Datei /var/lib/tftpboot/pxelinux.cfg/default an, bis Sie so aussieht wie in Listing 3. Bei der IP-Adresse handelt es sich um diejenige des PXE-Servers, der Pfad /var/lib/image verweist auf das eben mit Kiwi erstellte System-Image von OpenSuse 10.3. Um das in Position zu bringen, verfrachten Sie das ISO-Image ctso-minimal-suse-10.3.i686-1.1.2 auf den PXE-Server und mounten es über den Befehl:
$ sudo mount -o loop /Pfad/zu/ctso-minimal-suse-10.3.i686-1.1.2 /var/lib/image
Es ist das eigentliche Image, das die Clients später via NFSROOT einhängen. Dazu bringt das OpenSuse-System noch eine Eigenheit mit: Die Initrd erwartet eine bestimmte Config-Datei, um das System-Image aufzuspüren. Diese legen Sie mit folgenden Kommandos an:
$ sudo mkdir /var/lib/tftpboot/KIWI $ sudo touch /var/lib/tftpboot/KIWI/config.default
Damit auch der PXE-Client definitiv weiß, wo er das System-Image von OpenSuse 10.3 findet, öffnen Sie die neu angelegte Datei und geben folgende Zeile ein:
NFSROOT=192.168.33.1;/var/lib/image
Sie starten wieder den DHCP-Server, den TFTP-Server und den NFS-Kernel-Server und passen die Dateien /etc/default/tftpd-hpa, /etc/dhcp3-server/dhcpd.conf und /etc/exports wie oben gezeigt an. Booten Sie nun einen Client, schickt ihm der PXE-Server die Dateien initrd und linux. Anschließend wird das System-Image geladen und OpenSuse bootet. Zum Anmelden geben Sie am Login root und als Passwort linux ein (Abbildung 5).

root und als Passwort linux ein.” width=”300″ height=”167″ />
root und als Passwort linux ein.DEFAULT install
LABEL install
kernel linux
append initrd=initrd install=nfs://192.168.33.1:/var/lib/image –
PROMPT 1
TIMEOUT 0
Fazit
Möglicherweise wird es unter OpenSuse 11 leichter, eine bootbare Live-Version zu basteln – momentan macht das Ganze noch ein paar Umstände. Dafür können Sie über die Datei config.xml eigene Pakete für die Live-Distro aussuchen. Beide Varianten eignen sich aber für den Einsatz in kleinen Netzwerken. Aus Platzgründen konnten wir nur einen kleinen Ausschnitt der Möglichkeiten von PXE demonstrieren. So bieten Sie über eine entsprechend angepasste Datei /var/lib/tftpboot/pxelinux.cfg/default auch mehrere Systeme auf dem PXE-Server nebeneinander an.
Einen Nachteil hat der Vorgang: Das Booten dauert mitunter etwas. Befindet sich das System aber erst im Arbeitsspeicher, arbeiten Sie wie gewohnt damit. Ein Gigabyte RAM sollten die Client-Rechner allerdings schon mitbringen, eine Festplatte brauchen sie hingegen nicht. Die Ergebnisse der Arbeit speichern Sie zum Beispiel auf USB-Sticks. Da das System mit jedem Booten wieder in den Urzustand zurückkehrt, lässt sich damit auch kein Unheil anrichten – es sei denn, jemand stolpert über das Netzwerkkabel.
Glossar
-
TFTP
-
Trivial File Transfer Protocol (RFC 1350). Funktional stark abgespeckte FTP-Variante zum Lesen und Schreiben von Dateien via UDP.
-
NFS
-
Das Network File System ist ein Protokoll, das Zugriffe auf Daten über das Netzwerk erlaubt. So lassen sich etwa Verzeichnisse auf entfernten Servern lokal einbinden, um damit zu arbeiten, als läge das Verzeichnis auf dem eigenen Rechner.
[1] PXE-Boot-Artikel im LinuxUser: Kristian Kißling, Fernbooten, LinuxUser 12/2007, S. 84, http://www.linux-user.de/ausgabe/2007/12/084-pxe-boot/
[2] Ubuntu Live-CD: http://wiki.ubuntuusers.de/Downloads
[3] Kiwi erklärt: Marcel Hilzinger: Fruchtig und spritzig, LinuxUser 01/2008, S. 30, http://www.linux-user.de/ausgabe/2008/01/030/
[4] Kiwi im Detail: http://svn.berlios.de/wsvn/kiwi/kiwi-head/doc/kiwi.pdf?op=file&rev=0&sc=0





