PXE Boot Installation

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.

Installation

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

PXELinux

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.

Menüs

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.

Linuxinstallation über PXE

Ü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.

Notfallkonsole

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:::

Links

 
linux/pxe.txt · Zuletzt geändert: 13.03.2009 16:27 von tangst