Debian Wheezy PXE-Bootserver einrichten
Einleitung
Man kann verschiedene und immer wieder benötigte Systeme vorhalten, ohne sie auf den einzelnen Rechnern installieren zu müssen und ohne Installations-CDs o.ä. herauskramen oder neu brennen zu müssen.
Im Einzelnen:
Voraussetzungen
Es bietet sich für diese Aufgabe ein Rechner an, der ohnehin immer eingeschaltet ist. Das kann auch ein Gateway-Rechner sein, wenn genügend Festplattenplatz vorhanden ist. Es wird angenommen, daß der DHCP-Server aus dem Paketisc-dhcp-server
auf einem passenden Rechner
installiert ist. PXE-Booten ist auch mit dem kompakten dnsmasq
möglich. Darauf gehe ich aber hier nicht weiter ein.
Darüberhinaus wird der TFTP-Server aus dem Paket tftpd-hpa
auf einem Fileserver installiert. Für die Varianten,
welche auf NFS aufbauen, setze ich den Server aus dem Paket nfs-kernel-server
auf dem Fileserver ein.
Einzelne Schritte des Bootens mittels PXE
Das Booten mittels PXE läuft in mehreren Schritten ab:- Das PXE-System wird geladen. Meist ist das bereits ins BIOS eingebaut und braucht nur aktiviert zu werden. Oder es wird z.B. von Diskette ein gPXE gestartet.
- Das PXE-System fragt einen DHCP-Server mit Hilfe der MAC-Adresse seiner Netzwerkkarte nach der für sich zu verwendenden IP-Adresse, einem TFTP-Server und einem Dateinamen auf diesem Server, mit dem der nächste Schritt eingeleitet werden kann.
- Das PXE-System lädt die angegebene Datei vom TFTP-Server und führt sie aus. Hier wird eine Version von
pxelinux.0
verwendet. - Das
pxelinux.0
schaut mit Hilfe der MAC-Adresse seiner Netzwerkkarte nach einer speziellen Konfiguration für sich im Verzeichnis /pxelinux.cfg auf dem TFTP-Server oder nach einerdefault
-Datei, wenn keine spezifische Konfigurationsdatei existiert. Diese Datei sorgt für verschiedene Startoptionen und -parameter und ggf. ein entsprechendes Auswahlmenü. - Der Benutzer wählt einen Menüpunkt oder nach einer einstellbaren Wartezeit wird ein Standardpunkt automatisch gewählt.
- Die dem Menüpunkt zugeordnete Konfiguration sorgt dafür, dass der passende Kernel und eine zugehörige Initrd mit festgelegten Parametern geladen und ausgeführt wird.
- Das Linux läuft an und initialisiert sich so, wie es mit Hilfe der Initrd eingerichtet ist. Ab hier unterscheiden sich verschiedene Systeme:
- GParted lädt sein Dateisystem-Image von einem HTTP-Server
- Der Debian-Installer wird ausgeführt und lädt Komponenten von den Debian-Servern nach
- Debian Live bindet über NFS ein squashfs-Dateisystem-Image ein und arbeitet damit weiter (das ist eine von mehreren Möglichkeiten bei Debian Live)
- Ein für den Rechner angepaßtes System wird mit dem Root-Dateisystem auf einem NFS-Server direkt eingebunden und gestartet
- ...und sicherlich gibt es weitere Möglichkeiten...
Einrichten des DHCP-Servers
Als DHCP-Server kommt bei mir derisc-dhcp-server
zum Einsatz. In dessen Konfigurationsdatei /etc/dhcp/dhcpd.conf
wird
für jede Maschine, die über PXE booten soll, ein Eintrag wie folgender erzeugt:
host HOSTNAME { hardware ethernet xx:xx:xx:xx:xx:xx; # MAC-Adresse der Netzwerkkarte fixed-address HOSTNAME.datenautomat.de; # DNS-Adresse oder IP-Adresse der Maschine, die über PXE booten soll next-server 192.168.1.1; # IP-Adresse des TFTP-Servers filename "/pxelinux.0"; # Dateiname der Datei, die den weiteren Bootprozess steuert }Daneben sind hier noch folgende allgemeine Einstellungen in der
/etc/dhcp/dhcpd.conf
eingetragen:
ddns-update-style none; # Keine DNS-Aktualisierung durchführen option domain-name "datenautomat.de"; # Domänenname für gesamte Konfiguration option domain-name-servers ns.datenautomat.de; # Zu verwendender DNS-Server default-lease-time 7200; # Standardhaltezeit für Leases 2 Stunden max-lease-time 14400; # Höchsthaltezeit für Leases 4 Stunden authoritative; # Dies ist der offizielle DHCP-Server für dieses Netz allow bootp; # BOOTP erlauben subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.172 192.168.1.192; # Bereich zum automatischen Vergeben von IP-Adressen option routers 192.168.1.1; # Hauptrouter bekanntgeben }Mit /etc/init.d/isc-dhcp-server restart den DHCP-Server neu starten und im Log nachschauen, ob ihm die Änderungen auch passen. Der Server wird recht pingelig auf vergessene Klammern oder Semikolons reagieren...
Einrichten des TFTP-Servers
Danach geht es an die Konfiguration des TFTP-Servers. Ich nehme dafür das Pakettftpd-hpa
. Da ich für die NFS-Freigaben und
die für den PXE-Bootvorgang benötigten Dateien ein einziges Dateisystem unter /vol/nfs
verwenden möchte, konfiguriere
ich mir den TFTP-Server in /etc/default/tftpd-hpa
wie folgt:
TFTP_USERNAME="tftp" TFTP_DIRECTORY="/vol/nfs/.tftpboot" TFTP_ADDRESS="192.168.1.1:69" TFTP_OPTIONS="--secure"Wenn das Verzeichnis angelegt wurde, kann der Dienst mit /etc/init.d/tftpd-hpa restart neu gestartet werden.
Einrichten der Bootoption „Debian Wheezy Netinstall“
Im Anschluß hole ich den aktuellen Debian-Installerwget http://ftp.de.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/netboot.tar.gzDarin interessieren mich ein paar Dateien, die ich wie folgt anordne:
/vol/nfs/.tftpboot/pxelinux.0 /vol/nfs/.tftpboot/pxelinux.cfg/default /vol/nfs/.tftpboot/boot/debian/wheezy/initrd.gz /vol/nfs/.tftpboot/boot/debian/wheezy/linuxDie
default
-Datei wird dann so gefüllt:
DISPLAY boot/boot.txt PROMPT 1 TIMEOUT 100 DEFAULT wheezy LABEL wheezy KERNEL boot/debian/wheezy/linux APPEND initrd=boot/debian/wheezy/initrd.gz nouveau.modeset=0 nomodesetDie Parameter
nouveau.modeset=0 nomodeset
werden bei mir benötigt, um auf einigen Rechnern im Textmodus zu bleiben, da die
angeschlossenen Bildschirme nicht passend erkannt werden und eine zu hohe Auflösung gewählt würde. Mit besseren Monitoren wäre das
wohl nicht nötig...
Die Einträge in der pxelinux.cfg/default
-Datei gelten für alle Maschinen, für die keine speziellere Datei existiert. Um eine
Maschine anders als die anderen booten zu können, legt man eine Datei in pxelinux.cfg
an, die die MAC-Adresse der Maschine
im Dateinamen enthält in der Form 01-xx-xx-xx-xx-xx-xx, also mit Bindestrichen anstelle der sonst üblichen Doppelpunkte.
Der Inhalt entspricht dem der pxelinux.cfg/default
-Datei mit den gewünschten Abwandlungen, wie z.B. andere Bootparameter beim
APPEND
.
Die Datei /vol/nfs/.tftpboot/boot/boot.txt
lege ich an mit:
Default PXE boot options: wheezy Debian Wheezy NetinstallDiese wird während des Bootprozesses angezeigt, damit der Benutzer weiß, was er wählen kann. Hier und in der
pxelinux.cfg/default
-Datei
werden weitere Einträge angelegt, wenn weitere Bootmöglichkeiten dazukommen.
Einrichten der Bootoption „GParted Live“
GParted Live ist eine kleine Distribution rund um ein paar Programme zur Partitionsverwaltung von Datenträgern, vor allem GParted, nach dem es benannt ist. Damit ist es meistens möglich, bestehende Partitionen in der Größe und Position auf der Festplatte an neue Bedürfnisse anzupassen. Das System lädt sich während des Bootens das Root-Dateisystem von einem Webserver in eine RAM-Disk herunter und bindet es ein.
Um diese Distribution über PXE zu booten, besorgt man sich von der Download-Seite die aktuelle
Zip-Datei für die eigene Architektur, also z.B. http://sourceforge.net/projects/gparted/files/gparted-live-stable/0.18.0-1/gparted-live-0.18.0-1-i486.zip/download
.
Daraus werden nur drei Dateien aus dem Unterverzeichnis live/
benötigt: Die filesystem.squashfs
wird auf einen geeigneten
Webserver geladen und ggf. umbenannt. Diese Position wird später in der pxelinux.cfg/default
beim APPEND
bekanntgegeben.
Die Dateien vmlinuz
und initrd.img
werden in ein Verzeichnis /vol/nfs/.tftpboot/boot/gparted/
kopiert. Es folgt
der obligatorische Eintrag in der pxelinux.cfg/default
-Datei oder in einer der für die einzelne Maschine spezialisierten Datei:
LABEL gparted KERNEL boot/gparted/vmlinuz APPEND initrd=boot/gparted/initrd.img boot=live config union=aufs noswap noprompt vga=788 fetch=http://www.datenautomat.de/download/gparted.fs.squashfsNach dem Erweitern der zugehörigen
boot.txt
-Datei um die Zeile
gparted GParted Liveist das Einrichten dieser Bootoption bereits erledigt.
Einrichten der Bootoptionen „memtest“, „memtest+“ und „memtest-multiboot“
Um auf jedem Rechner im Netz ohne größeren Aufwand einen Speichertest durchführen zu können, bietet es sich an, die Programmememtest86
bzw. memtest86+
zu verwenden. Aus den gleichnamigen Debian-Paketen werden nur die unter /boot/
zu findenden Dateien benötigt.
Ich lege diese Dateien unter /vol/nfs/.tftpboot/boot/memtest/
ab. Da es bei einigen PXE-Systemen zu Problemen bei der Behandlung
von Dateien mit der Endung .bin
gibt, benenne ich sie um oder lege einen Symlink an:
memtest -> memtest86.bin memtest+ -> memtest86+.bin memtest-multiboot -> memtest86+_multiboot.binDann wird wieder die
pxelinux.cfg/default
-Datei erweitert:
LABEL memtest KERNEL boot/memtest/memtest LABEL memtest+ KERNEL boot/memtest/memtest+ LABEL memtest-multiboot KERNEL boot/memtest/memtest-multibootZum Abschluß wird auch die zugehörige
boot.txt
erweitert:
memtest Memtest86 memtest+ Memtest86+ memtest-multiboot Memtest86+ Multiboot
Einrichten der Bootoption „Debian Wheezy Live“
Das Debian Live-Projekt bietet mehrere unterschiedliche vorkonfigurierte Systeme an. Ich beschränke mich hier auf dierescue
-Variante, das Einrichten der übrigen Varianten geht analog genauso. Auf der Projektseite ist auch
beschrieben, wie sich das System an eigene Bedürfnisse anpassen läßt, indem die Root-Dateisystemdatei neu erstellt wird.
Das Root-Dateisystem liegt, wie bei GParted, in einer .squashfs
-Datei vor. Es ließe sich auch genau wie bei GParted von einem
Webserver herunterladen und einbinden. Nur ist diese Datei derartig groß, daß nach dem Herunterladen auf den meisten meiner Maschinen
nicht mehr genügend Arbeitsspeicher übrig ist. Daher wird diese Datei via NFS im Nur-Lesen-Modus freigegeben und auf diesem Weg zur
Verfügung gestellt.
Die benötigten Dateien werden von http://cdimage.debian.org/debian-cd/current-live/i386/webboot/
heruntergeladen. Ich verwende die Variante 1, welche für i486 anstelle für i686-pae erstellt wurde.
Die Dateien debian-live-7.4-i386-rescue.vmlinuz1
und debian-live-7.4-i386-rescue.initrd1.img
werden nach
/vol/nfs/.tftpboot/debian/
kopiert. Die Datei debian-live-7.4-i386-rescue.squashfs
wird nach
/vol/nfs/debian/debian-live-7.4-i386-rescue/live/
kopiert und in filesystem.squashfs
umbenannt. Dann wird das Verzeichnis
noch mit Hilfe der Datei /etc/exports
über NFS freigegeben:
/vol/nfs/debian 192.168.1.*(ro,nohide,no_root_squash,no_subtree_check,insecure)Anschließend wird der NFS-Server angewiesen die Konfigurationsdatei neu einzulesen: /etc/init.d/nfs-kernel-server reload. Dann wird die Datei
pxelinux.cfg/default
erweitert:
LABEL live KERNEL boot/debian/debian-live-7.4-i386-rescue.vmlinuz1 APPEND initrd=boot/debian/debian-live-7.4-i386-rescue.initrd1.img boot=lie config netboot=nfs nfsroot=192.168.1.1:/vol/nfs/debian/debian-live-7.4-i386-rescue quiet vga=normal nouveau.modeset=0 nomodesetund die zugehörige
boot.txt
erweitert:
live Debian Live RescueFertig.
Verweise
Weitere Webseiten rund um dieses Thema:- Wikipedia zu PXE
- gPXE ROM-o-matic zum erstellen von PXE-Bootmedien
- iPXE Download Page
- GParted Live on PXE Server
- Debian PXE Boot Install
- Debian Live current webboot files
- Debian-Installation über PXE, TFTP und Preseed mit Hilfe von
dnsmasq