Der Büro-Bootserver: PXELINUX im Praxiseinsatz

Mit dem Umzug unseres büroweiten DHCP-Servers auf eine eigene Xen-Instanz haben wir die Gelegenheit genutzt, auch den Bootserver neu aufzusetzen: Für Distributionstests, Arbeiten an Kundenrechnern oder Backups — die leichter durchzuführen sind, wenn keine geöffneten Dateien vorliegen — leisten wir uns schon seit einer Weile eine Xen-Instanz, die PXE fähige Clients mit einer Auswahl verschiedener via Netzwerk gestarteter Systeme und Linux-Installer zu versorgen. Viel Aufwand ist das Aufsetzen eines Bootservers nicht: Es genügt ein richtig konfigurierter DHCP-Server und ein TFTP-Daemon. Hilfreich, aber keinesfalls zwingend erforderlich ist ein NFS-Server. Linux-Distributionen und BSDs, die einen NFS-Server benötigen, werde ich deshalb zu gegebener Zeit separat behandeln.

Erster Schritt: DHCP-Server

Erster Schritt bei der Konfiguration ist der DHCP-Server, ideal ist die weit verbreitete und extrem konfigurable Version des Internet Software-Consortiums, die bei debianesken Distributionen als dhcp3-server verfügbar ist. Sollte ein DHCP-Server im DSL-Router vorhanden sein, deaktivieren Sie diesen dauerhaft: Zwei DHCP-Server, von denen einer Boot-Informationen ausliefert und der andere nicht, können ganz schön Verwirrung stiften. Eine kompakte, aber für den Start per PXE ausreichende Konfigurationsdatei /etc/dhcp3/dhcpd.conf kann wie folgt aussehen:


authoritative;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
filename "pxelinux.0";


subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name-servers 192.168.1.252;
option routers 192.168.1.252;
option domain-name "meinnetz.test";
range 192.168.1.180 192.168.1.199;
option subnet-mask 255.255.255.0;
next-server 192.168.1.250;


host amd64-test {
hardware ethernet 00:13:d4:fd:eb:49;
fixed-address 192.168.1.50;
}
}

Die meisten Parameter sind selbsterklärend: Unser Server versorgt das Subnetz 192.168.1.0/24, wobei er den Bereich 192.168.1.180 bis 199 beliebig vergibt. Der Rest ist entweder durch statische Leases oder statische Adressen abgedeckt. 192.168.1.250 ist die IP-Adresse des DHCP-Servers, der auch den TFTP-Daemon beherbergt, 192.168.1.252 ist die Fritzbox, welche gleichzeitig Nameserver und Gateway ist. “amd64-test” ist ein Rechner mit statischer Lease, der garantiert immer unter der gleichen IP-Adresse erreichbar sein soll. “pxelinux.0″ ist die Bootdatei, die per TFTP ausgeliefert wird — auf sie gehen wir später ein.

Nach einem Restart des DHCP-Servers kann ein erster Test mit einem PXE fähigen Client erfolgen. Stellen Sie die Startreihenfolge so um, dass PXE oder MBA (“Managed Boot Agent”) oder einfach Network Boot ganz oben steht. Gelegentlich muss die Bootoption manuell beim Start ausgewählt werden. Ihr PC sollte beim Startversuch IP-Adresse, Gateway und “Next Server” vom DHCP anfordern und dann mit einem TFTP-Timeout abbrechen — schließlich ist der TFTP-Daemon noch nicht konfiguriert. Dieser Test ist auch mit VMware (sogar mit dem kostenlosen Player) möglich. VMware muss allerdings im Bridged-Modus konfiguriert sein, damit die DHCP-Requests überhaupt Ihren DHCP-Server erreichen.

Und nun der TFTP-Server

Klappt der DHCP-Test, können Sie sich dem TFTP-Server widmen. Wir verwenden hierfür den “atftpd”, der im Gegensatz zur Standardkonfiguration nicht via Meta-Daemon “inetd” gestartet wird. Unsere resultierende /etc/default/atftpd schaut wie folgt aus, beachten Sie den erforderlichen Multicast-Bereich:


USE_INETD=false
OPTIONS="--daemon --port 69 --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 192.168.1.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /tftpboot"

Als Bootverzeichnis dient in diesem Beispiel /tftpboot. Kopieren Sie in diesen Ordner die Datei pxelinux.0 aus dem Syslinux-Tarball und das Menü-Binary menu.c32. Erstellen Sie einen Unterordner /tftpboot/pxelinux.cfg, der zunächst eine einzige Datei default aufnimmt:


DEFAULT menu.c32
PROMPT 0
TIMEOUT 450
MENU TITLE PXE Boot Linux


LABEL local
MENU LABEL Von Festplatte starten
MENU DEFAULT
LOCALBOOT 0


LABEL memtest
MENU LABEL Speichertest
KERNEL memtest
APPEND foo

Kopieren Sie noch ein Memtest-Binary in den Ordner /tftpboot und rebooten Sie Ihren PXE fähigen Client. Der sollte jetzt das Bootmenü vom Server anfordern und — je nachdem, was sie auswählen — von Festplatte starten oder seinen Speicher testen. Das Schlüsselwort LOCALBOOT 0 ist übrigens ganz praktisch: So können Sie jeden Client per PXE zuerst mit dem Bootmenü versorgen. Wählt der Nutzer nichts aus, startet der Rechner normal.

Installationsserver für openSUSE und Ubuntu 

Nun ist Memtest nicht gerade spannend, Sie könnten deshalb als erstes versuchen, das 4MB-Minilinux aus dem Netz zu starten. Das geht, es liegt auch (für automatisierte Backups) auf unserem Bootserver. Vielleicht benötigen Sie auch die Netinstaller von OpenSUSE oder Ubuntu. OpenSUSE ist schnell konfiguriert, einmal für den Turnschuhadmin und einmal mit VNC. Kernel und Initrd können Sie von der Installations-CD klauen, bei uns hat sich die Benennung .bzi (Kernel) und .dsk (initrd) durchgesetzt:


LABEL osuse32
MENU LABEL openSUSE Netinstall 32 Bit (lokal)
KERNEL osuse32.bzi
APPEND initrd=osuse32.dsk splash=silent showopts vga=791 install=http://ftp.hosteurope.de/mirror/ftp.opensuse.org/distribution/10.2/repo/oss/


LABEL osu32vnc
MENU LABEL openSUSE Netinstall 32 Bit (VNC)
KERNEL osuse32.bzi
APPEND initrd=osuse32.dsk splash=silent showopts vga=normal vnc=1 vncpassword=geheim1234 install=http://ftp.hosteurope.de/mirror/ftp.opensuse.org/distribution/10.2/repo/oss/

Ubuntu erfordert geringfügig mehr Aufwand: Der komplette Ordner ubuntu-installer des Netboot-Images muss in das TFTP-Wurzelverzeichnis kopiert werden. Orientieren Sie sich beim Konfigurationseintrag an der pxelinux.cfg/default von Ubuntu:


LABEL ubu32
MENU LABEL Ubuntu 7.04 Netinstall 32 Bit
KERNEL ubuntu-installer/i386/linux
APPEND vga=normal initrd=ubuntu-installer/i386/initrd.gz

Sie können nun die Installation von openSUSE oder Ubuntu via Netzwerk starten. Was man mit Knoppix im Netz so anstellen kann, erklären wir bei Gelegenheit. Und falls Sie unser 4MB-Mini-Linux zur Datensicherung einsetzen: Nutzen Sie die Möglichkeit, in der Pxelinux-Konfiguration hostspezifische Konfigurationsdateien zu verwenden. Sie können diese auch per Cronjob in den Bootordner schieben oder aus diesem entfernen.