Booten vom Netzwerk
Artikel erschienen in Swiss IT Magazine 2008/11
Computer werden in der Regel ab Harddisk gebootet. Andere Methoden haben vor allem in aussergewöhnlichen Fällen ihren Auftritt, wenn beispielsweise ein Betriebssystem auf dem Rechner installiert werden soll. Dann kann beispielsweise zur Diskette, zur CD oder bei neueren Computern zu einem USB-Stick gegriffen werden. Oder man bootet übers Netzwerk.
Booten übers Netzwerk bietet gleich mehrere Vorteile: Es funktioniert auch, wenn kein CD-Laufwerk vorhanden ist und die anderen Methoden nicht zur Verfügung stehen. Und man braucht keine CDs für verschiedene Betriebssy-steme, Versionen und Administrationswerkzeuge wie memtest86 mit sich herumschleppen. Bei exotischer Hardware kann man die Installer beispielsweise mit zusätzlichen Treibern oder einer neuen Kernel-Version ausstatten, was bei CDs nicht immer einfach ist. Ebenfalls ist es möglich, ein übers Netzwerk gebootetes System als Recovery-Konsole zu verwenden, wenn ein Software-Update schiefgelaufen ist, die Konfiguration verbastelt oder das Root-Passwort verlegt wurde.
Einen Nachteil hat das Booten übers Netzwerk allerdings: Es muss zuerst einmal alles eingerichtet werden.
Das aktuelle Standardverfahren für netzwerkbasiertes Booten stammt von Intel und heisst PXE, was für Preboot eXecution Environment steht. Bei PXE wird der Bootvorgang von der Netzwerkkarte initiiert, indem zuerst per DHCP die IP-Konfiguration ausgeführt und die Adresse des Bootservers abgefragt wird. Von dort wird dann per TFTP (Trivial File Transfer Protocol) ein Network Bootstrap Program (eine Art Boot Loader) geladen, das das Nachladen des Betriebssystems und dessen Start übernimmt.
Damit die Netzwerkkarte den Bootvorgang übers Netzwerk initiieren kann, muss ihre Firmware PXE unterstützen. Dies tun unter anderem die Karten respektive OnBoard-Chips von Broadcom, Intel und 3com. Wer nur über eine Netzwerkkarte ohne PXE-Unterstützung verfügt, kann zu einer reinen Softwarelösung wie Etherboot (www.etherboot.org) zurückgreifen, bei der PXE über Diskette oder ein anderes Bootmedium geladen werden kann. Ausserdem beherrschen etliche Virtualisierungsprogramme wie Suns Virtualbox oder Vmware PXE, wodurch sie sich auch zum Einrichten und Testen einer PXE-Umgebung eignen.
Für jede der benötigten Funktionen existieren mehrere Open-Source-Programme. So bietet sich als DHCP-Server beispielsweise ISC DHCP oder, vor allem für kleinere Umgebungen, dnsmasq an. TFTP-Server existieren unter anderem in Form von tftpd, tftp-hpa (eine Portierung des TFTP-Servers von OpenBSD) oder atftpd. Für NFS ist es von Vorteil, den vom jeweiligen Betriebssystem bereitgestellten Service zu verwenden.
Nun wird noch ein Network Bootstrap Program benötigt. Eine gute Wahl ist pxelinux (syslinux.zytor.com/pxe.php), eine Ableitung von syslinux für das Netzwerk-basierte Booten. Pxelinux ist vielseitig konfigurierbar und erlaubt nicht nur, Linux über das Netzwerk zu booten, sondern kann auch mit anderen Betriebssystemen umgehen.
Das Vorgehen zum Aufsetzen eines Bootservers soll im Rahmen eines einfachen Beispiels demonstriert werden. Als Betriebssystem kommt dazu Debian GNU/Linux 4.0 sowie als DHCP- und TFTP-Server dnsmasq respektive atftpd zum Einsatz. DHCP-Server und TFTP-Server werden der Einfachheit halber auf derselben Maschine (IP-Adresse 192.168.33.1) betrieben. Selbstverständlich können sie auch getrennt werden.
Als Erstes gilt es, den DHCP-Server zu konfigurieren. Für dnsmasq befindet sich die Konfigurationsdatei in /etc/dnsmasq.conf und ist ausführlich kommentiert. So kann man alle Einstellungen an den eigenen Bedarf anpassen und beispielsweise bestimmte IP-Adressen je MAC-Adresse vergeben, die Namensauflösung konfigurieren oder den Service an ein bestimmtes Interface hängen. Für das Beispiel (Konfiguration siehe Kasten «/etc/dnsmasq.conf») reicht es, einen DHCP-Range für die zu vergebenden IP-Adressen zu definieren. Die entscheidende Einstellung, um Booten übers Netzwerk zu ermöglichen, lautet dhcp-boot. Sie erhält als Wert den Namen des Network Bootstrap Program. Optional kann sie noch um den Namen und die IP-Adresse des Bootservers ergänzt werden, falls DHCP- und Bootserver getrennt betrieben werden.
Der TFTP-Server wird über den inetd (respektive eines der Derivate wie xinetd) gestartet. Ein entsprechender Eintrag in die inetd.conf wird in der Regel vom Paketmanagement vorgenommen. Es muss aber der Pfad, wo der TFTP-Server die Bootprogramme abholen kann, auf /opt/netboot/pxe angepasst werden. Ob der TFTP-Server funktioniert, kann man testen, indem man eine beliebige Datei in /opt/netboot/pxe anlegt und diese mit dem Kommandozeilen-Client tftp herunterlädt.
Nun gilt es, pxelinux einzurichten. Es ist Bestandteil des syslinux-Pakets und kann von kernel.org heruntergeladen werden. Für den Netzwerkboot braucht man aus syslinux zwei Dateien: Einerseits das Network Bootstrap Program pxelinux.0 sowie die Datei menu.c32, die sich im Ordner com32/menu befindet. Sie wird zur Darstellung des Bootmenüs benötigt. Beide müssen in /opt/netboot/pxe abgelegt werden.
Das Bootmenü besteht aus einer Textdatei, die in einem Ordner namens pxelinux.cfg liegt und vergleichbar zu GRUB oder LILO die Kernel, Init-RAM-Images sowie die an beide zu übergebenden Argumente für den Betriebssy-stemstart definiert. Der Name der Textdatei heisst standardmässig default. Sie wird an jeden Client, der über PXE booten möchte, ausgeliefert.
Allerdings ist auch möglich, je nach Client respektive Client-Gruppe unterschiedliche Bootmenüs auszuliefern. Denn bevor der Client das Standard-Bootmenü abruft, wird nach Dateien gesucht, deren Name Teilen der hexadezimalen Repräsentation der IP-Adresse des Clients entspricht, beispielsweise C0A8210B für 192.168.33.11. Exi-stiert diese Datei nicht, wird der Versuch wiederholt, allerdings von rechts her jeweils eine Ziffer entfernt. Beim zweiten Versuch wird also nach einer Datei mit dem Namen C0A8210 gesucht. Erst wenn keine dieser Dateien gefunden wird, greift der Client auf default zurück. Auf diese Weise kann einem IP-Range ein bestimmtes Bootmenü ausgeliefert werden und einem anderen ein anderes. Servern kann beispielsweise 64-Bit-Software angeboten werden, während Clients Zugriff auf 32-Bit-Systeme bekommen.
Das Bootmenü (siehe Kasten «Bootmenü») teilt sich in mehrere Abschnitte auf. In den ersten vier Zeilen wird das Programm zur Darstellung des Bootmenüs definiert sowie einige weitere Einstellungen wie das Timeout. Die mit LABEL eingeleiteten Abschnitte definieren die zur Verfügung stehenden Betriebssysteme. Menüpunkt 1 ermöglicht das Booten ab Disk, Nummer 2 und 3 starten den Debian-Installer für x86 respektive die Live-Distribution GRML. Nummer 4 stellt das Speichertestprogramm memtest86+ bereit.
Bei Live-Systemen wie GRML, dem Debian-Installer oder memtest86+, die speziell aufs Booten über Netzwerk respektive Live-Konfiguration ausgelegt sind, ist die Bereitstellung für den Netzwerk-Boot eine einfache Sache. Für GRML muss man beispielsweise ein Image der Live-CD herunterladen, nach /opt/netboot/exports/grml montieren und in /etc/exports zum Exportieren per NFS freigeben. Zusätzlich braucht man das GRML Netboot Package, das von www.grml.org/terminalserver/ bezogen werden kann und Kernel sowie Init-RAM-Disk enthält. Diese braucht man nur nach /opt/netboot/pxe/grml zu kopieren und den Eintrag in das Bootmenü vergleichbar des Beispiels anlegen. Nun ist der Server bereit und man braucht nur noch den PXE-fähigen Client zu starten. Anleitungen für Installer und andere Live-Systeme kann man in der Regel der Online-Dokumentation entnehmen.
Selbstverständlich können auch herkömmliche Linux-Distributionen (und andere Betriebssysteme) übers Netzwerk bereitgestellt werden. Allerdings ist der Aufwand dafür ungleich höher, denn man kann nicht die gesamte Filesystem-Hierarchie per NFS an alle Clients exportieren. Dynamische Daten wie Konfigurationsdateien unterscheiden sich von Client zu Client und müssen daher separat gelagert oder per TEMPFS bereitgestellt werden. Dies sorgt für einen sehr hohen Aufwand, so dass sich die lokale Installation oder die Nutzung spezieller Thin-Client-Lösungen eher anbietet.
Bootmenü