PXE braucht nicht jeder, interessant ist es aber allemal: Statt von einer CD installieren Sie Linux via Server aus dem Netzwerk.
PXE sprechen einige Menschen wie “Pixie” aus, die Abkürzung steht für “Preboot Execution Environment”. Diese Spezifikation von Intel [1] stammt bereits aus den 1990er Jahren, die Technik an sich ist nicht also neu. Aber was lässt sich damit anstellen?
Angenommen, Sie haben einen Rechner, der zwar eine Netzwerkkarte mitbringt, aber kein CD-ROM- oder DVD-Laufwerk – etwa ein Laptop ohne Docking-Station oder einen Business-Desktop. In diesem Fall können Sie den Rechner von einem zweiten Rechner aus booten und ihm ein Netzwerk-Image zuschieben. Bei der Installation holt der Rechner dann sämtlich Pakete aus dem Internet. Im Business-Einsatz oder an Schulen kann ein PXE-Server dem fußschwachen Admin beim Installieren der zahlreichen Rechner lange Wege ersparen. Netzwerk anschließen, booten, installieren – gewiefte Bastler lassen gleich die ganze Installation automatisch ablaufen.
Andere sparen dank PXE die Festplatten für die lokalen Rechner und richten einen zentralen Fileserver mit einer großen Festplatte ein (etwa im LTSP, dem “Linux Terminal Server Project” [2]). Die lokalen und oft recht alten Rechner verwenden sie nur noch als “dumme” Terminals. Die holen dann ihre gesamten Daten über PXE vom zentralen Server. Auch der Einsatz von Live-CDs, die Sie per PXE booten, ist denkbar. Und das Beste: Mit Linux richten Sie so eine Konstellation in nur wenigen Schritten ein.
Ein Knecht …
Die erste Frage lautet: Wie erfährt der Client, von welchem Rechner er die Installationsdateien bekommt? Das Prinzip verdeutlichen zwei Rechner mit den bezeichnenden Namen “Ruprecht” und “Knecht”: “Ruprecht” soll seine Daten über das Netzwerk von “Knecht” beziehen. Für “Ruprecht” gibt es dabei für Sie nicht viel zu tun: Ändern Sie einfach die Boot-Reihenfolge im BIOS und rücken Sie den PXE-Boot an die erste Stelle. Das BIOS auf der Netzwerkkarte von “Ruprecht” hält dann nach dem Start Ausschau nach einem DHCP-Server mit PXE-Option (den in diesem Fall “Knecht” anbietet) und von dem er ein PXE-Boot-Image – auch NBP (“Network Bootstrap Program”) genannt – empfangen kann.
“Knecht” meldet sich in seiner Funktion als so genannter ProxyDHCP-Server und teilt “Ruprecht” mit, wo er das gesuchte Boot-Image findet. Das muss nicht unbedingt auf “Knechts” eigener Festplatte sein – er kann auch den Pfad zum NBP auf einem anderen Rechner nennen. “Ruprecht” holt das NBP vom angegebenen Ort und lädt es per TFTP in seinen Arbeitsspeicher. Vorher verpasst ihm “Knecht” aber noch eine gültige IP-Adresse, ohne die er keinen Zugriff auf das PXE-Boot-Image erhält.
Zwar stören andere DHCP-Server das PXE-Protokoll nicht, Sie sollten aber darauf achten, dass nicht beliebige Rechner im Netzwerk Ihr NBP laden. Sie können “Knecht” aber problemlos instruieren, das Image nur an Clients mit bestimmten MAC-Adressen auszuliefern.
… sie alle zu booten
Was brauchen Sie also, um einen würdigen “Knecht” zu schaffen? Einen DHCP-Server, einen TFTP-Daemon und die PXE-Images für den Netinstall. Unter Ubuntu “Feisty Fawn” installieren Sie über den Paketmanager die Pakete dhcp3-server, tftpd-hpa und netkit-inetd. OpenSuse-Anwender brauchen yast2-dhcp-server, dhcp-server, yast2-tftp-server sowie tftp.
Daneben benötigt “Knecht” noch eine feste IP-Adresse. Die legen Sie für OpenSuse über YaST und den Menüpunkt Netzwerkgeräte | Netzwerkkarte fest. Tragen Sie als IP-Adresse zum Beispiel 192.168.0.3 ein und als Subnetzmaske 255.255.255.0.
Unter Ubuntu weisen Sie der Karte über System | Administration | Netzwerk | Kabelgebundene Verbindung eine statische IP-Adresse (192.168.0.3) und eine Subnetzmaske (255.255.255.0) (Abbildung 1) zu, setzen nach einem Klick auf OK ein Häkchen bei Diese Verbindung aktivieren. Sie schließen den Dialog, geben auf einer Konsole sudo /etc/init.d/networking restart ein, und nun sollte der Befehl /sbin/ifconfig Ihre Netzwerkkarte samt eben eingetragener IP-Adresse anzeigen.

Abbildung 1: Die Netzwerkkonfiguration unter Ubuntu: Geben Sie dem Server, der das PXE-Image austeilen soll, manuell eine feste Netzwerkadresse.
DHCP läuft …
Richten Sie zunächst die jeweiligen DHCP-Server ein. Unter Ubuntu will der DHCP-Server sogleich starten, scheitert aber – ihm fehlt noch die richtige Konfiguration. Um die einzustellen, bearbeiten Sie die Datei /etc/dhcp3/dhcpd.conf mit Root-Rechten und einem Editor, bis Sie aussieht wie in Abbildung 2. Machen Sie zuvor eine Sicherheitskopie von der Original-Konfigurationsdatei. Anschließend starten Sie den DHCP-Server erneut über sudo /etc/init.d/dhcp3-server force-reload. Der Befehl netstat -tulpe verrät Ihnen, ob der DHCP-Server tatsächlich läuft – in der vorletzten Zeile von Abbildung 3 steht ein *.bootps.

dhcpd.conf ein. Dafür brauchen Sie Root-Rechte.” width=”300″ height=”181″ />
Abbildung 2: Tragen Sie diese Zeilen unter Ubuntu in die Dateidhcpd.conf ein. Dafür brauchen Sie Root-Rechte.
netstat -tulpe ein, zeigt Ihnen Linux, welche Dienste der Rechner im Netzwerk anbietet.” width=”300″ height=”100″ />
Abbildung 3: Geben Sie auf der Konsole den Befehlnetstat -tulpe ein, zeigt Ihnen Linux, welche Dienste der Rechner im Netzwerk anbietet. Was tut nun die Konfigurationsdatei in Abbildung 2? Die ersten beiden Zeilen übernehmen Sie aus der Original-DHCP-Datei, um ihre Bedeutung brauchen Sie sich nicht weiter zu kümmern. Relevanter ist der mit subnet beginnende Abschnitt: Die Parameter hinter subnet und netmask sorgen dafür, dass beliebige “Ruprechte” aus allen Bereichen im Netzwerk (0.0.0.0) auf den PXE-Server zugreifen dürfen. Der vergibt allerdings nur die drei IP-Adressen von 192.168.0.1 bis 192.168.0.3 (dank range 192.168.0.1 192.168.0.3;).
Über die Zeile filename teilt “Knecht” den “Ruprechten” mit, wie die Datei heißt, die sich als NBP nutzen lässt. Wer weniger Zugriffe erlauben will, dem hilft der Kasten “Weniger Kunden werben”. Dank dieser Konfiguration dürfen nur Rechner aus dem lokalen Netzwerk mit Präfix 192.168.0 auf den Server zugreifen. Der untere Abschnitt schränkt die Auswahl noch wesentlich weiter ein: Er lässt nur einen Rechner mit der passenden MAC-Adresse zu und gibt ihm eine feste IP-Adresse.
Weniger Kunden werben
ddns-update-style none;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.1 192.168.0.3;
}
host pxeinstall {
hardware ethernet 00:02:55:8C:01:1E;
fixed-address 192.168.0.3;
filename "pxelinux.0";
}
Unter OpenSuse gehen SIe ähnlich vor. Sie bearbeiten ebenfalls mit Root-Rechten die Datei /etc/dhcpd.conf, wie in Abbildung 4 gezeigt. Der Unterschied: Bei OpenSuse geben Sie über next-server IP-Adresse noch die IP-Adresse des Rechners “Knecht” an, auf dem der DHCP- und TFTP-Server laufen. Dann starten Sie den DHCP-Server als root über /etc/init.d/dhcpd force-reload. Wollen Sie auch hier nur bestimmte MAC-Adressen als Clients zulassen, ergänzen Sie die Zeile host pxeclient { hardware ethernet MAC-Adresse; } innerhalb der geschweiften Klammern.

dhcpd.conf von OpenSuse müssen Sie noch die IP-Adresse des Servers "Knecht" angeben.” width=”300″ height=”164″ />
Abbildung 4: In derdhcpd.conf von OpenSuse müssen Sie noch die IP-Adresse des Servers “Knecht” angeben.…und TFTP
TFTP richten Sie unter OpenSuse über YaST ein: Wählen Sie Netzwerkdienste | TFTP-Server aus (das Symbol mit dem grünen Turnschuh), klicken Sie auf den Kreis neben Aktivieren und tragen Sie in der Zeile darunter den Pfad ein, unter dem Ihr PXE-Image liegt (Abbildung 5). Für OpenSuse lautet der Pfad /tftpboot. Ein Klick auf Beenden startet den Server und passt gegebenenfalls die Einstellungen für die Firewall an.
TIPP
Wenn “Knecht” auf OpenSuse seine Images anbietet, “Ruprecht” ihn aber nicht findet, liegt das womöglich daran, dass die Firewall von OpenSuse noch läuft. Über das Register Sicherheit und Benutzer passen Sie die Konfiguration an.
Unter Ubuntu bearbeiten Sie vor dem Start von TFTP zunächst die Konfigurationsdatei des TFTP-Servers. Geben Sie
# sudo pico /etc/default/tftpd-hpa
ein und ändern Sie RUN_DAEMON="no" zu RUN_DAEMON="yes". Die Zeile darunter zeigt übrigens, in welchem Verzeichnis TFTP das Image erwartet – gewöhnlich /var/lib/tftpboot. Nun starten Sie den Daemon neu über sudo /etc/init.d/tftpd-hpa force-reload. Netstat sollte nun anzeigen, dass sowohl der DHCP-Server als auch der TFTP-Daemon laufen. Was noch fehlt, sind die PXE-Images selbst, die “Knecht” nach einem erfolgreichen Aufbau der Verbindung an die Clients ausliefern soll.
PXE-Dateien holen
Die PXE-Dateien für OpenSuse 10.3 und Ubuntu 7.04 finden Sie auf unserer Heft-CD. Nutzen Sie Ubuntu als PXE-Server, kopieren Sie die Dateien in das Verzeichnis /var/lib/tftpboot, unter OpenSuse gehören Sie nach /tftpboot. Wollen Sie andere Distributionen booten, sollten Sie allerdings etwas genauer wissen, wie das Prozedere abläuft.
Zunächst laden Sie gewöhnlich die Dateien herunter. Ubuntu-Nutzer wechseln in ein Verzeichnis, für das sie Schreibrechte besitzen und geben folgenden Bandwurm ein:
$ wget -nH --cut-dirs=8 -r -R *index*,gif,html,jpg http://archive.ubuntu.com/ubuntu/dists/feisty/main/installer-i386/current/images/netboot/
Den Eintrag feisty ersetzen Sie gegebenenfalls durch die jeweils passende Version der Distribution, etwa dapper, edgy oder gutsy. Dann kopieren Sie die Dateien mit Root-Rechten in das Verzeichnis /var/lib/tftpboot.
Auch weitere OpenSuse-PXE-Images finden Sie im Netz. Das Vorgehen ist hier etwas umständlicher: Zunächst installieren Sie via YaST das Paket syslinux. Die nun folgenden Schritte führen Sie mit Root-Rechten auf der Konsole aus. Zunächst legen Sie auf “Knecht” über mkdir -p /tftpboot/pxelinux.cfg zwei Verzeichnisse an, in welche die Image-Dateien kommen. Dank der Syslinux-Installation befindet sich eine Datei namens pxelinux.0 bereits auf Ihrem Rechner, die Sie nun einfach ins neu erstellte Verzeichnis /tftpboot kopieren:
# cp -a /usr/share/syslinux/pxelinux.0 /tftpboot
Im nächsten Schritt legen Sie über vi /tftpboot/pxelinux.cfg/default eine Konfigurationsdatei namens default an, drücken [I] zum Einfügen von Text und geben die folgenden Zeilen ein:
default linux prompt 1 timeout 30 label linux kernel linux append initrd=initrd splash=silent showopts
Über [Esc] und die Eingabe von :wq speichern Sie die Einstellungen – noch immer mit Root-Rechten. Dann begeben Sie sich in das Verzeichnis /tftpboot und holen zwei relevante Dateien aus dem Netz (hier für die Installation von OpenSuse 10.3):
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/i386/loader/initrd # wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/i386/loader/linux
Wahlweise ersetzen Sie diese Dateien dann durch zwei Exemplare für OpenSuse 10.2 oder Suse Linux 10.1, die Sie auch auf den Servern finden.
Neuer Tag – neues System
Um mit der Installation zu beginnen, ändern Sie wie oben erwähnt die Boot-Reihenfolge des Client “Ruprecht” und schalten ihn ein. Eine Zeile zeigt an, dass der Client nach dem PXE-Server sucht (Abbildung 6). Bricht er ab, stimmt vermutlich etwas mit Ihrer dhcpd.conf nicht. Andernfalls erscheint das Bootmenü, und Sie drücken am Eingabeprompt [Eingabe] (sofern Sie OpenSuse booten) oder wählen bei Ubuntu aus dem Startmenü die passende Installation aus. Der Client lädt dann den Kernel und das Root-Dateisystem.
Zur Installation braucht er allerdings irgendwann Zugang zum Internet – Sie müssen ihn also an einen Router hängen. Dasselbe gilt für eine Installation von OpenSuse: Dort müssen Sie die HTTP- oder FTP-Quelle zum Installations-Repository per Hand eingeben. Es gibt aber auch die Möglichkeit, statt des Internets ein lokales Ubuntu- oder OpenSuse-Repository auf dem “Knecht” zu installieren, was gerade in kleinen Netzwerken Sinn ergibt. Wie das geht, zeigen wir im nächsten Heft.
Glossar
-
TFTP
-
Trivial File Transport Protocol (RFC 1350). Einfaches Dateiübertragungsprotokoll, das lediglich das Lesen oder Schreiben von Dateien unterstützt. Dagegen fehlen erweiterte Funktionen wie Rechtevergabe oder Benutzerauthentifizierung. Im Gegensatz zu FTP lässt sich TFTP auch über verbindungslose Protokolle wie UDP betreiben.
-
MAC-Adresse
-
Die Hardware-Adresse eines Netzwerkadapters, die zur eindeutigen Identifikation des Geräts im Netzwerk dient. Besteht aus sechs Bytes, wobei die ersten drei den Hersteller der Netzwerkschnittstelle identifizieren.
[1] Intels PXE-Spezifikation: http://www.pix.net/software/pxeboot/archive/pxespec.pdf
[2] Linux Terminal Server Projekt: http://www.ltsp.org







