Mit dem PXE Protokoll lassen sich PCs ohne Laufwerke über Netzwerk mit einem Betriebsystem hochfahren. Im einfachsten Fall für eine Rescueshell oder das Aufspielen eines OS ohne CD-ROM. Und im komplexeren Fall, ganze Firmen mit zentral verwalteten OS-Images, welche beim booten zentral verteilt werden. Also eine Thin-Client Architektur.
Wir benötigen lediglich den DNSMasq Daemon. Dieser ermöglicht gleichzeitig, DHCP, DNS-Proxy und TFTP.
apt-get install dnsmasq
Die Konfiguration im /etc/dnsmasq.conf gestaltet sich ziemlich einfach. Ich setze voraus, dass DNSMasq bereits läuft und beschreibe nur die zusätzlichen Zeilen.
enable-tftp tftp-root=/data/tftpboot dhcp-boot=/data/tftpboot/pxelinux.0
Die erste Zeile startet den TFDP Dienst. Die zweite Zeile weist das Datenverzeichnis zu und die letzte Zeile bestimmt den Minikernel welcher den Clients zum laden angeboten wird.
Falls bereits ein TFDP am laufen ist, können wir den DNSMasq mit einer Zeile so konfigurieren, dass den Clients mitgeteilt wird, wo der TFDP läuft und wie der Kernel heist.
dhcp-boot=/pxelinux.0,192.168.2.1
Der Minikernel welcher üblicherweise verwendet wird stammt vom PXELinux Projekt. Mit ihm wird die weitere Konfiguration vorgenommen. Es ist möglich für alle Clients eine Default-Konfiguration vorzugeben oder für einzelne Clients über die MAC-Adresse oder IP-Adresse spezielle Konfigurationen zu wählen. Es ist auch möglich ganze Menüstrukturen anzulegen.
Im obersten TFDP-Verzeichnis liegen folgenden Dateien:
menu.c32 pxelinux.0 <dir> pxelinux.cfg
Das Zusatzprogramm menu.c32 (es stammt aus PXELinux?) benötigen wir für eine angenehme Menüführung. Im Verzeichnis pxelinux.cfg werden die Konfigurationsdateien für die Clients gespeichert. Im Minimum benötigt man die Datei pxelinux.cfg/default. Diese Datei wird immer genommen, wenn es für den anfragenden Rechner keine spezifischere Konfigurationsdatei gibt.
Beispiel für ein PXE Menü:
PROMPT 1
TIMEOUT 50
MENU TITLE PXE Boot Linux
LABEL local
MENU DEFAULT
MENU LABEL Von Festplatte starten
LOCALBOOT 0
LABEL memtest
MENU LABEL Speichertest
KERNEL mt86plus
APPEND foo
Die erste Zeile veranlasst das Anzeigen des Bootprompts. Die zweite Zeile bestimmt 50 Zehntelsekunden zu warten, bis das Defaultmenü ausgeführt wird. Danach folgt noch ein optionaler Menütitel.
Die folgenden Abschnitte bestimmen 2 Menüpunkte. Der erste ist ein Spezialfall, er veranlasst den Client von seiner lokalen Festplatte zu starten. Im zweiten Fall laden wir als Kernel das Speicheranalysetool. Es befindet sich auf beinahe allen Linux CDs und kann einfach in das TFDP-Verzeichnis gelegt werden. Weitere Angaben über die Menükonfiguration kann unter der SYSLinux Homepage nachgelesen werden.
Über den PXE-Server kann auch ein Betriebsystem installiert werden. Hier als Beispiel die Installation von Ubuntu.
Dazu benötigen wir die Installations-CD oder eine ISO-Datei. Auf der CD finden wir das Verzeichnis install/netboot/ubuntu-installer/{i386|amd64} (je nach gewählter Architektur). Aus diesem Verzeichnis benötigen wir den Linuxkernel linux und die dazugehörige Initramdisk initrd.gz. Am besten legen wir im TFT-Verzeichnis ein Unterverzeichnis ubuntu für die beiden Dateien an, dann können wir später verschiedene Linuxsysteme für die Installation anbieten.
In der Datei pxelinux.cfg/default fügen wir folgende Zeilen hinzu:
LABEL desktop-intrepid
MENU LABEL Ubuntu 8.10 Desktop 32Bit
kernel ubuntu/linux
append vga=normal initrd=ubuntu/initrd.gz --
Bei der Installation wird irgendwann die Frage auftauchen, aus welchem Repository die Installation stattfinden soll. Wählt man eines aus, werden alle benötigten Pakete via Internet aus einem externen Repository geladen. Das dauert viel länger, als von einer CD-Rom. Darum kopieren wir die benötigten Dateien von der CD-ROM auf einen lokalen Webserver.
cp -a /cdrom/* /var/www/
Natürlich müssen die Verzeichnise entsprechend angepasst werden.
Während der Installation wählen wir jetzt nicht mehr eines der offiziellen Repositories, sondern geben von Hand den Namen oder IP unseres lokalen Webservers an. Der Eintrag für die manuelle Eingabe befindet sich ganz oben auf der Liste.
Ebenfalls nützlich ist es via PXE eine Notfallkonsole booten zu können, damit man lokale Fehler auf einem Rechner beheben kann, ohne diesen zu verändern. Als einfach zu installieren, hat sich Ploplinux herausgestellt. Distribution herunter laden und in ein eigenes Verzeichnis im TFDP Bereich kopieren. Danach benötigt man noch den entsprechenden Eintrag im pxelinux.cfg/default
LABEL linux
MENU LABEL Notfallkonsole
kernel ploplinux/bzimage
append initrd=ploplinux/initrfs.gz vga=1 nfsmount=192.168.2.1:/data/tftpboot/ploplinux
Im Unterverzeichnis ploplinux/myscripts befinden sich Scripts welche bei einem Neustart ausgeführt werden. Initial wird das Script runme.sh ausgeführt.
Ploplinux startet per Voreinstellung auch gleich einen SSH-Dienst. Um sich anmelden zu können, benötigt man ein Passwort, welches nicht in der Distro gespeichert ist. Mit einer einfachen Zeile im runme.sh kann man eine eigene Shadowdatei nach dem Starten vom Server her kopieren und erhält damit ein gültiges Passwort für den SSH-Zugriff.
cp /media/ploplinux/myscripts/shadow /etc/shadow
root2:*********:14295:0:99999:7::: sshd:!:12904:0:99999:7::: ftp:!:12904:0:99999:7::: nobody:!:13009:0:99999:7::: named:!:13009:0:99999:7::: bin:!:13009:0:99999:7::: clamav:!:13024:0:99999:7::: captive:!:13166:0:99999:7:::
USB Boot (ähnlich wie PXE)