ubuntuusers.de

PXE-Boot

Achtung!

Dieser Artikel wird aktuell in Baustelle/PXE-Boot überarbeitet. Daher kann es sein, dass diese Seite hier veraltete oder nicht (mehr) zutreffende Informationen enthält. Vergleiche beide Versionen und wende dich im Zweifelsfall mit deinem konkreten Anliegen an das Support-Forum. Änderungen am Artikel bitte nur in Baustelle/PXE-Boot!

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte hilf mit, indem du diesen Artikel testest. Wiki/FAQ - häufig gestellte Fragen (Abschnitt „Wikiartikel-testen“).

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

PXE steht für Preboot eXecution Environment - was soviel bedeutet wie "Umgebung zum Ausführen von XYZ vor dem eigentlichen Bootvorgang". PXE bezeichnet dabei den Vorgang, um mit Hilfe einer PXE-fähigen Netzwerkkarte via DHCP eine Netzwerkkonfiguration (IP-Adresse, Adresse eines TFTP-Servers, ...) zu erhalten, und anschließend vom TFTP-Server einen Bootloader zu laden und auszuführen.

Auf diese Weise kann ein Betriebssystem geladen werden, ohne dass ein Datenträger (Festplatte, Diskette, CD etc.) auf dem Rechner (Client) benötigt wird. Alternativ kann man beispielsweise eine "Rettungsdistribution" laden, um sein System wieder herzustellen.

Hinweis:

Die Grundkonfiguration ist in PXE-Installation beschrieben, dies ist nur eine Erweiterung auf andere Bootmedien!

Einrichten des NFS-Servers

Damit Ubuntu-Live-Images oder ganze Distributionen funktionieren, muss ein NFS-Server aufgesetzt werden. Ansonsten könnten Änderungen nicht gesichert werden.

  • nfs-kernel-server (main)

Paketliste zum Kopieren:

sudo apt-get install nfs-kernel-server 

Oder mit apturl installieren, Link: apt://nfs-kernel-server

Nach der Installation muss (für jede freizugebende Distribution) dann eine NFS-Freigabe erstellt werden.

sudo mkdir /var/lib/tftp/Freigabe_einer_Distribution 

In der Datei /etc/exports muss noch folgende Zeile angehängt werden. Diese gibt das Verzeichnis /var/lib/tftp/FREIGABE_EINER_DISTRIBUTION und seine Unterverzeichnisse für alle IP-Adressen von 192.168.178.0 bis 192.168.178.255 mit Lese- und Schreibzugriff frei.

/var/lib/tftp/FREIGABE_EINER_DISTRIBUTION 192.168.178.0/255.255.255.0(rw,no_root_squash,sync,no_subtree_check)

Mit dem folgenden Befehl[3][5] wird dann die /etc/exports neu eingelesen:

sudo service nfs-kernel-server reload 

Weitere Informationen über die Konfigurationsmöglichkeiten des NFS-Servers sind im NFS-Artikel zu finden.

Der TFTP-Server

Die Verzeichnisstruktur des TFTP-Servers

Nach der bisher beschriebenen Installation gibt es nun einige neue interessante Verzeichnisse:

  • /var/lib/tftp/ ist das Rootverzeichnis des tftp-Servers. Hier werden die Kernel bzw. die zu bootenden Daten hinterlegt. Des Weiteren muss dieses Verzeichnis das Konfigurationsverzeichnis pxelinux.cfg beinhalten, es wird nicht automatisch erstellt und muss manuell angelegt werden.

  • /var/lib/tftpboot/pxelinux.cfg/ ist das Konfigurationsverzeichnis. Darin muss die Datei default enthalten sein. Auch werden hier alle clientspezifischen Konfigurationen abgelegt. Die Datei default wird nicht automatisch erstellt, sondern muss manuell angelegt werden, zur Syntax siehe unter "Beispielkonfigurationen".

  • /var/lib/tftp/Freigabe_einer_Distribution/ - dieses Verzeichnis ist das Rootverzeichnis des Clients in der jeweiligen gebooteten Distribution.

Die Konfigurationsdateien

Es gibt zum einen die Datei mit dem Namen default. Diese Datei wird immer geladen, wenn keine client-spezifische Konfigurationsdatei gefunden werden kann. Die client-spezifischen Dateien sind auf identische Art und Weise zu erstellen [3] wie die default-Datei, haben jedoch einen anderen Dateinamen.

Diese Dateinamen können entweder die MAC-Adresse der clientseitigen Netzwerkkarte mit vorangestellter 01 sein (01-XX-XX-XX-XX-XX-XX) oder die IP des Clients in hexadezimaler Form. Beispielweise entspricht die IP-Adresse 192.0.2.91 dem hexadezimalem Wert/Dateiname C000025B. wobei dieser Dateiname auch am Ende gekürzt werden kann, um eine Konfiguration auch für mehrere Clients zu haben. Dies im Folgenden aufgezeigt, es wird die Reihenfolge der Konfigurationsdateiaufrufe angeführt. Wenn eine Konfigurationsdatei nicht vorhanden ist, dann wird die Nächste aufgerufen (in /var/log/syslog wird die Wahl auch vermerkt).

/var/lib/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/var/lib/tftpboot/pxelinux.cfg/C000025B
/var/lib/tftpboot/pxelinux.cfg/C000025
/var/lib/tftpboot/pxelinux.cfg/C00002
/var/lib/tftpboot/pxelinux.cfg/C0000
/var/lib/tftpboot/pxelinux.cfg/C000
/var/lib/tftpboot/pxelinux.cfg/C00
/var/lib/tftpboot/pxelinux.cfg/C0
/var/lib/tftpboot/pxelinux.cfg/C
/var/lib/tftpboot/pxelinux.cfg/default

Beispielkonfigurationen

An dieser Stelle ein paar Möglichkeiten, wie die Konfigurationsdateien unter verschiedenen Bedingungen aussehen könnten.

Minimalkonfiguration

Bei dieser Konfigurationsdatei wird als Defaultwert das Label memtest gewählt. Da keine weiteren Parameter wie PROMPT oder TIMEOUT angegeben sind, wird direkt memtest und damit der Kernel mt86plus im Verzeichnis memtest/ aufgerufen.

DEFAULT    memtest

LABEL      memtest
KERNEL     memtest/mt86plus

Ohne Menü

Bei dieser Konfiguration kommen zusätzlich noch die Parameter PROMPT und TIMEOUT hinzu. Wenn PROMPT auf 1 gesetzt, erscheint eine Eingabezeile beim Bootvorgang, in der dann das zu bootende Label eingegeben werden kann. Bei dem Parameter TIMEOUT handelt es sich um die Zeitangabe, wie lange auf eine Eingabe gewartet werden soll, bevor das mit DEFAULT gesetzte LABEL aufgerufen wird. Die Einheit für TIMEOUT ist 1/10 Sekunde.

Beispiel:

Würde man memtest in die Befehlszeile eintippen, dann würde sofort der Kernel mt86plus gestartet werden. Andernfalls würde die Ubuntu LiveDVD nach 10 Sekunden geladen werden.

Des Weiteren sieht man an dieser Stelle das erste Mal den Parameter APPEND. Mit diesem Parameter werden dem Kernel zusätzliche Informationen übergeben, beispielsweise, dass das Rootverzeichnis des Clients im Verzeichnis 192.168.178.2:/var/lib/tftp/ubuntu-1404 zu finden ist.

DEFAULT ubuntu-1404
PROMPT 1
TIMEOUT 100

LABEL      ubuntu-1404
KERNEL     ubuntu-1404/casper/vmlinuz.efi
APPEND     root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.178.2:/var/lib/tftp/ubuntu-1404 initrd=ubuntu-1404/initrd.lz

LABEL      memtest
KERNEL     memtest/mt86plus

Man kann pxelinux auch dazu anweisen, eine Textdatei vor dem Prompt anzuzeigen. Die hierzu benötigte Direktive lautet DISPLAY, gefolgt von einem Leerzeichen und dem Namen der Textdatei. Ebenfalls lassen sich, wie von diversen Linux-Installations-CDs (z.B. Debian) bekannt, auch die Funktionstasten belegen. Hierzu nutzt man den Namen der Funktionstaste als Direktive, sprich F1 bis F10, ebenfalls gefolgt von einem Leerzeichen und einem Dateinamen.

Mit menu.c32

Wenn man es etwas komfortabler haben möchte, kann man mit Hilfe von menu.c32 auch ein einfaches Menü erstellen. Hier jedoch zuvor die Datei /usr/lib/syslinux/menu.c32 in das Rootverzeichnis des TFTP-Servers kopieren oder eine Verknüpfung erstellen, in diesem Falle nach: /var/lib/tftp/.

Das ^ markiert in dem Menü den "HotKey" zur Anwahl der entsprechenden Zeile. (Bei dem Tastaturlayout "Deutsch" ist diese Taste nicht belegt! Näheres siehe Spracheinstellungen (Abschnitt „Tastatur“).)

An dieser Stelle ist in der Beispielkonfiguration nur ein sehr einfaches Menü angelegt worden. Auf yslinux.zytor.com 🇬🇧 lassen sich die vielfältigen Einstellmöglichkeiten bezüglich des Menüs nachlesen.

DEFAULT menu.c32
ALLOWOPTIONS 0
PROMPT 0
TIMEOUT 0

MENU TITLE Server PXE Boot Menu

LABEL      ubuntu-1404
MENU LABEL Ubuntu ^14.04 Desktop Live
KERNEL     ubuntu-1404/casper/vmlinuz.efi
APPEND     root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.178.2:/var/lib/tftp/ubuntu-1404 initrd=ubuntu-1404/initrd.lz

LABEL      memtest
MENU LABEL ^Memtest86+ v2.11
KERNEL     memtest/mt86plus

Mit vesamenu.c32

Für die Variante mit vesamenu.c32 liegen noch keine praktischen Erfahrungen vor. Hierbei sollte es dann, wenn man alles richtig macht, in etwa so aussehen wie das Bootmenü einer beliebige LiveCD/DVD. Um es kurz zu sagen: das Vesamenü ist sehr mächtig, jedoch auch komplizierter.

Einrichtung der PXE Systeme

Die folgenden Konfigurationsbeispiele sind für menu.c32-Menüs gedacht.

Lokales System booten

Um über PXE vom lokalen System zu booten, gibt es die Anweisung LOCALBOOT 0. Hierfür sind die folgenden Zeilen in die Konfigurationsdatei einzufügen.

LABEL      localhdd1
MENU LABEL Local ^HDD
LOCALBOOT  0

Das Booten des lokalen Systems über PXE mag zwar auf den ersten Blick unsinnig erscheinen, ist jedoch sinnvoll, wenn der Client nicht die Möglichkeit hat, über einen Hotkey beim Booten über die Netzwerkkarte zu booten und man sich das Umstellen im BIOS ersparen will. Des Weiteren wäre es denkbar, dass man dem Benutzer nicht die Möglichkeit geben will, in das BIOS zu gelangen bzw. die Bootreihenfolge zu ändern.

Memtest86+

Memtest86+ ist ein Programm, mit dem man den Arbeitsspeicher eines PCs auf Fehler überprüfen kann. Es eignet sich hervorragend zum Testen der Einstellungen des DHCP- sowie des TFTP-Servers, da man keine großen Kopieraktionen oder andere Manipulationen an den PXE-Einstellungen vornehmen muss. Des Weiteren ist dieses Programm auf vielen Linux-CDs wie auch auf der Ubuntu-Desktop-CD zu finden.

Zuerst erstellt man im Verzeichnis tftp das Unterverzeichnis memtest und kopiert anschließend die Datei mt86plus von der Ubuntu-CD/DVD dort hinein. Die Datei mt86plus ist auf der Ubuntu-CD im Verzeichnis /install zu finden.

sudo mkdir /var/lib/tftp/memtest && sudo cp /path-to-ubuntu-cd/install/mt86plus /var/lib/tftp/memtest/ 

Anschließend noch in der default Konfigurationsdatei unter /var/lib/tftp/pxelinux.cfg/ folgende Zeilen anzufügen

1
2
3
LABEL      memtest
MENU LABEL ^Memtest86+ v2.11
KERNEL     memtest/mt86plus
sudo service dnsmasq restart 

und nach einem Neustart von Dnsmasq kann es dann auch schon mit dem ersten PXE-Boot losgehen.

Ubuntu NetInstall

Für Ubuntu NetInstall wird auf den Artikel PXE-Installation (Abschnitt „Bootimage-vorbereiten“) verwiesen, da an dieser Stelle schon eine gute Anleitung speziell für diesen Fall vorhanden ist.

Ubuntu-Live-DVD

Eine Ubuntu-Live-DVD in Reichweite zu haben, ist immer gut, falls man mal keinen USB-Stick oder DVD zur Verfügung hat. Hier kann eine Live-DVD als PXE-Boot helfen.

Verwendet werden kann jede Live-DVD von Ubuntu und all seinen Derivaten. Dieses muss lediglich heruntergeladen werden und wird für die folgende Veranschaulichung in /home/Benutzer/Downloads abgelegt

Als nächstes muss dieses nun ausgelesen und in das TFTP-Server-Verzeichnis kopiert werden. Dies geschieht mit folgendem Befehl

sudo mount /home/Benutzer/Downloads/ubuntu.iso /mnt
sudo cp -R /mnt /var/lib/tftp/ubuntu-live 

Danach muss die /var/lib/tftp/pxelinux.cfg/default angepasst und folgende Zeilen hinzugefügt werden:

LABEL       ubuntu-live
MEMU LABEL  ^Ubuntu-Live-DVD 14.04          # Nur wenn menu.c32 benutzt wird!
KERNEL      ubuntu-live/casper/vmlinuz.efi
APPEND      root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.178.2:/var/lib/tftp/ubuntu-live/ initrd=ubuntu-live/casper/initrd.lz quiet splash --

Ubuntu Diskless

Hinweis:

Dieser Abschnitt der Anleitung ist der Seite Ubuntu.com 🇬🇧 entnommen und lediglich weitestgehend ins Deutsche übersetzt.

Es gibt diverse Möglichkeiten, eine komplette Ubuntuinstallation über das Netzwerk zu booten:

  • debootstrap (um direkt eine Installation über das Netzwerk aufzusetzen)

  • die Installation des Servers kopieren

  • [K/X]Ubuntu auf dem Client von CD installieren. Nachdem Alles installiert ist und läuft, das Netzlaufwerk /var/lib/tftp/NFS-Freigabe mounten und das komplette System dorthin kopieren.

Hier wird an dieser Stelle auf Letzteres näher eingangen.

Hinweis:

Die Installation kann selbstverständlich auch auf einem USB-Stick erfolgen, um das ursprüngliche System nicht zu beeinflussen oder zu beschädigen. Bei der Installation muss aber darauf geachtet werden, wo der Bootloader installiert wird, damit das ursprüngliche System nicht beeinträchtigt wird.

Die hier aufgeführten Befehle sind auf den Client-Rechner mit dem bereits installierten und funktionsfähigem System auszuführen, es sei denn, es ist explizit etwas Anderes erwähnt. Auf dem Client muss zusätzlich noch das Paket nfs-common installiert werden [1], damit später der Client seine Daten über das Netzwerk beziehen kann.

Zuerst findet man mit uname heraus, welcher Kernel aktiv ist. Die dazugehörige initrd.img... wird dann in das /home-Verzeichnis kopiert:

ls -ltr /boot/initrd* 

-rw-r--r-- 1 root root 3,4M 2009-04-17 05:41 /boot/initrd.img-2.6.28-11-generic
-rw-r--r-- 1 root root 3,4M 2009-06-02 11:41 /boot/initrd.img-2.6.28-13-generic

sudo cp /boot/vmlinuz-2.6.28-13-generic /home/BENUTZERNAME
sudo cp /boot/initrd.img-2.6.28-13-generic /home/BENUTZERNAME 

Jetzt muss eine neue initrd.img-Datei erstellt werden. Dafür muss das Bootflag in der Datei initramfs.conf von local nach nfs geändert werden. Die Konfigurationsdatei befindet sich im Verzeichnis /etc/initramfs-tools/.

#
# BOOT: [ local | nfs ]
#
# local - Boot off of local media (harddrive, USB stick).
#
# nfs - Boot using an NFS drive as the root of the drive.
#

BOOT=nfs

Mit dem untenstehenden Befehl wird dann die neue initrd.img erzeugt:

mkinitramfs -o /home/BENUTZERNAME/initrd.img-2.6.28-13-generic 

Nun wird das /nfsroot Verzeichnis vom Server gemountet und das komplette System auf den Server kopiert:

mount -tnfs -onolock 192.168.2.2:/var/lib/tftp/NFS-Freigabe /mnt
cp -ax /. /mnt/ubuntu-diskless/.
cp -ax /dev/. /mnt/ubuntu-diskless/dev/. 

Wenn ein Computer per PXE ein System bootet, hat er bereits eine Adresse über den DHCP-Server bezogen. Da wäre es fatal, wenn während des Bootvorgangs die Netzwerkkarte vom Betriebssystem neu konfiguriert werden würde. Aus diesem Grund muss die Datei /nfsroot/ubuntu-diskless/etc/network/interfaces dahingehend modifiziert werden, dass die Neukonfiguration verhindert wird. Dafür muss die Netzwerkkarte auf manual und nicht auf dhcp oder auto konfiguriert werden.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface, commented out for NFS root
#auto eth0
#iface eth0 inet dhcp
iface eth0 inet manual

Die Datei /var/lib/tftp/NFS-Freigabe/ubuntu-diskless/etc/fstab beinhaltet, wo welches Laufwerk / Partition beim Systemstart gemountet werden soll. Die fstab sollte in etwa wie die unteren Beispiele aussehen, je nachdem, ob schon tmpfs-Dateisysteme eingebunden sind oder nicht.

Hinweis:

Zu beachten ist, dass es keine swap-Partition gibt!

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc     defaults        0       0
/dev/nfs        /               nfs      defaults        1       1
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/nfs        /               nfs     defaults        1       1
none            /tmp            tmpfs   defaults        0       0
none            /var/run        tmpfs   defaults        0       0
none            /var/lock       tmpfs   defaults        0       0
none            /var/tmp        tmpfs   defaults        0       0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto 0       0

Die dazugehörige Konfiguration in der /var/lib/tftp/pxelinux.cfg/default sieht dann wie folgt aus:

BENUTZERNAME
LABEL      ubuntu-904-diskless
MENU LABEL Ubuntu 9.04 ^Diskless gup159xp
KERNEL     ubuntu-diskless/vmlinuz-2.6.28-13-generic
APPEND     netboot=nfs nfsroot=192.168.2.2:/var/lib/tftp/NFS-Freigabe/ubuntu-diskless rw initrd=ubuntu-diskless/initrd.img-2.6.28-13-generic

Nach erfolgter Erstellung der Konfiguration kann das Bootmedium am Client entfernt werden und dieser dann über PXE das System Booten. Es ist darauf zu achten, dass nur der Client, auf dem das System installiert war, auch das System bootet. Hierfür eignet sich eine spezielle Konfigurationsdatei, die anhand der IP- oder der MAC-Adresse nur von diesem Client geladen werden kann (Siehe Abschnitt "Die Konfigurationsdateien.

Clonezilla

Folgende Schritte sind der Reihe nach auszuführen, um Clonezilla über PXE booten zu können.

  • Zuerst muss das Clonezilla Live zip-File ⮷ 🇬🇧 heruntergeladen werden. Dabei ist darauf zu achten, dass es sich um die Version 1.2.0-25 oder neuer handelt (je neuer desto besser):

Hinweis:

In neueren Versionen von Clonezilla wurden die Dateien vmlinuz1 und initrd1.img umbenannt in vmlinuz und initrd.img. Die unten genannten Pfade sind daher je nach Version ggf. anzupassen.

wget http://surfnet.dl.sourceforge.net/sourceforge/clonezilla/clonezilla-live-1.2.2-14.zip 
  • Nun wird die Datei nach /nfsroot/clonzilla/ entpackt:

sudo unzip /PFAD/ZU/DATEI/clonezilla-live-1.2.2-14.zip -d /var/lib/tftp/clonezilla/ 

Eintrag in der default Konfigurationsdatei

Zusätzlich zu der Anleitung 🇬🇧 auf Clonzilla.org muss man in die APPEND-Zeile noch den nfsroot-Parameter angefügt. Ohne diesen Parameter bleibt das System beim Aufstarten von Clonezilla an der Stelle "Begin tying nfsmount ...." stehen und gibt als Fehler aus: "Unable to find a live file system on the network".

BENUTZERNAME
LABEL      clonezilla
MENU LABEL ^Clonezilla Live 1.2.2-14
KERNEL     clonezilla/live/vmlinuz1
APPEND     initrd=clonezilla/live/initrd1.img boot=live union=aufs noswap noprompt vga=788 fetch=tftp://192.168.178.2/clonezilla/live/filesystem.squashfs nfsroot=192.168.178.2:/var/lib/tftp/clonezilla

Experten-Info:

  • Der fetch-Parameter unterstützt nicht nur tftp, sondern auch ftp und http. Wenn man ftp oder http verwenden möchte, dann muss tftp nach dem fetch-Parameter durch ftp oder http ersetzt werden und die Datei filesystem.squashfs in das entsprechende Verzeichnis des ftp- oder http-Servers kopiert oder verlinkt werden.

  • In der APPEND-Zeile können Clonezilla noch weitere Parameter 🇬🇧 zum Booten übergeben werden. Beispielsweise ocs_live_keymap=NONE ocs_lang=en_US.UTF-8, was dazu führt, dass automatisch das Standard-Tastaturlayout und Englisch als Sprache ausgewählt wird.

  • Mit dem Einfügen von ocs_live_keymap="/usr/share/keymaps/i386/qwertz/de-latin1-nodeadkeys.kmap.gz" in die APPEND-Zeile wird das deutsche Tastaturlayout gewählt.

PXE-Client einrichten

Am Client an sich muss eigentlich so gut wie nichts eingerichtet werden. Es muss lediglich im BIOS eingestellt werden, dass man per PXE booten möchte. Hierzu muss u.U. das BootRAM der Netzwerkkarte zuerst aktiviert werden, bevor man die Option "Network" als (erstes) Bootmedium wählen kann.

Viele Systeme besitzen eine weitere Taste, die nicht ins BIOS, sondern in ein Auswahlmenü für das Bootmedium führt. Bei dieser Variante wird nur für den jeweiligen Bootvorgang von dem entsprechenden Medium gebootet. Bei einem aktuellen Dell Notebook ist die Bootmenütaste F12 , bei HP F9 , bei ASUS F8 und bei IBM Thinkpads ebenfalls F12 .

Diese Revision wurde am 17. Januar 2020 22:22 von Beforge erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: ungetestet, System, Server, Netzwerk, Installation