Booten vom Netzwerk

Mit etwas Open-Source-Software und ein wenig Zeit kann man Installer, Live-Systeme und Administrationswerkzeuge übers Netzwerk booten.

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 funktio­niert 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­-s­teme, Versionen und Administra­tionswerkzeuge 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.


PXE

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.



Auf der Seite des Servers benötigt man einen DHCP-Server,
der das PXE-Protokoll versteht, sowie einen TFTP-Server. Dazu kommen noch das Network Bootstrap Program und die zu laden-
den Betriebssysteme. Optional ist
ein Dateiserver, um zusätzliche Daten für den Bootvorgang bereitzustellen.


Verschiedene Software

Für jede der benötigten Funktio­nen 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.



Sämtliche Programme sollten sich problemlos in allen Varianten kombinieren lassen. Die Programmauswahl ist damit vor allem eine Frage des eigenen Geschmacks und der weiteren Anforderungen an die jeweilige Software.


Beispielkonfiguration

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.



Die beiden Server dnsmasq und atftpd lassen sich über die entsprechenden Debian-Pakete schnell und einfach installieren. Man kann sie natürlich auch direkt aus den Sourcen übersetzen. Dann benötigt man auch noch einen Platz auf der Festplatte, wo die Daten zum Netzwerk-Boot abgelegt werden. Je nach Art und Umfang der Programme, die übers Netzwerk gebootet werden sollen, braucht man ein paar hundert bis einige Gigabyte Speicherplatz, wenn beispielsweise ganze Linux-Distributionen übers Netz geladen werden sollen. Für das Beispiel reicht etwa ein Gigabyte. Die passende Ordnerstruktur wurde unter /opt/netboot erzeugt, wobei man in der Auswahl des Pfades frei ist. Unter /opt/netboot wurden ausserdem noch die Ordner exports (für Daten, die über NFS exportiert werden sollen) und pxe (für das Network Bootstrap Program) erzeugt (mkdir -p /opt/netboot/{exports,pxe}).


DHCP und TFTP

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.


pxelinux einrichten

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-s­temstart 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-s­tiert 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.


Betriebssystem vorbereiten

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ü




Artikel kommentieren
Kommentare werden vor der Freischaltung durch die Redaktion geprüft.

Anti-Spam-Frage: Vor wem mussten die sieben Geisslein aufpassen?
GOLD SPONSOREN
SPONSOREN & PARTNER