[[Vorlage(Getestet, focal)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor benutzen] [:Shell: Umgang mit der Kommandozeile] [:sudo: Mit dem Systemverwaltermodus arbeiten (sudo)] [:NFS: Einrichten eines NFS-Servers] [:ISC-DHCPD: Konfiguration des ISC-DHCPD-Servers] }}} [[Inhaltsverzeichnis(2)]] [wikipedia:Preboot_Execution_Environment:PXE] steht für '''P'''reboot e'''X'''ecution '''E'''nvironment - 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. {{{#!vorlage Hinweis Die Grundkonfiguration ist in [:PXE-Installation:] beschrieben, dies ist nur eine Erweiterung auf andere Bootmedien! }}} = Installation der grundlegenden PXE-Bootdateien = Damit das Booten über PXE funktioniert, müssen die Pakete {{{#!vorlage Paketinstallation pxelinux syslinux }}} installiert sein[1]. = Einrichten des NFS-Servers = Damit Ubuntu-Live-Images oder ganze Distributionen funktionieren, muss ein NFS-Server aufgesetzt werden.[6] Ansonsten könnten Änderungen nicht gesichert werden. {{{#!vorlage Paketinstallation nfs-kernel-server, main }}} Nach der Installation muss (für jede freizugebende Distribution) dann eine NFS-Freigabe erstellt werden.[2][4][5] {{{#!vorlage Befehl 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/''' und seine Unterverzeichnisse für alle IP-Adressen von 192.168.178.0 bis 192.168.178.255 mit Lesezugriff frei. {{{ /var/lib/tftp 192.168.178.0/255.255.255.0(ro,sync,no_wdelay,insecure_locks,insecure,no_root_squash,no_subtree_check) }}} Mit dem folgenden Befehl[2][4][5] wird dann die '''/etc/exports''' neu eingelesen: {{{#!vorlage Befehl sudo exportfs -a }}} Weitere Informationen über die Konfigurationsmöglichkeiten des NFS-Servers sind [:NFS#ber-die-Konsole:im NFS-Artikel] zu finden. = Der DHCP-Server = In einer Netzwerkumgebung, die über einfache Konfigurationen hinausgeht, wird es sinnvoll sein, einen DHCP-Server passend einzurichten[7]. Für diese fortgeschrittenen Fälle wird auf folgenden Artikel verwiesen: [:ISC-DHCPD: Konfiguration des ISC-DHCPD-Servers] = 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 }}} == Grundlegende Dateien kopieren == Um das Booten über PXE zu ermöglichen, müssen aus den vorher installierten Pakete PXELINUX und SYSLINUX einige Dateien kopiert werden[2][4][5]: Aus dem Paket pxelinux: {{{#!vorlage Befehl sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/ }}} und aus dem Paket syslinux: {{{#!vorlage Befehl sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.c32,libcom32.c32,libutil.c32,vesamenu.c32} /var/lib/tftpboot/ }}} Alternativ können auch symbolische Links auf die o.a. Dateien im Verzeichnis '''/var/lib/tftp/''' angelegt werden[4]. == Beispielkonfigurationen == An dieser Stelle folgen 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''' aufgerufen.[3] {{{ DEFAULT memtest LABEL memtest KERNEL memtest/mt86plus }}} Damit die Freigabe bzw. der Kernel darin, also das erste zu startende Programm, über das Netzwerk geladen werden kann, müssen noch die Rechte des freizugebenden Ordners angepasst werden[5]: {{{#!vorlage Befehl sudo chmod 755 /var/lib/tftpboot/memtest }}} {{{#!vorlage Warnung Dies muss für ggf. weitere Freigaben wiederholt werden! Anstatt des Unterordners '''memtest''' wird dann der Name der neuen Freigabe dem Befehl übergeben. }}} === Einfaches Menü === Eine einfache Auswahlmöglichkeit besteht über die Nutzung von '''menu32''': Bei dieser Konfiguration kommen zusätzlich noch die Parameter `TIMEOUT` und `MENU DEFAULT` hinzu. Beim Parameter `TIMEOUT` handelt es sich um die Zeitangabe, wie lange auf eine Eingabe gewartet werden soll, bevor das mit `MENU DEFAULT` gesetzte `LABEL` aufgerufen wird. Die Einheit für `TIMEOUT` ist 1/10 Sekunde. Mit `MENU DEFAULT` wird angegeben, dass dieser Punkt standardmäßig ausgewählt ist. 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/Freigabe_Ubuntu_18.04''' zu finden ist.[3] {{{ DEFAULT menu.c32 MENU TITLE Server PXE Boot Menu TIMEOUT 100 LABEL memtest MENU LABEL Memtest86+ KERNEL memtest/mt86plus LABEL Ubuntu MENU LABEL ^Ubuntu 18.04 LTS Desktop MENU DEFAULT KERNEL Freigabe_Ubuntu_18.04/vmlinuz APPEND root=/dev/nfs netboot=nfs nfsroot=192.168.178.48:/var/lib/tftp/Freigabe_Ubuntu_18.04/ splash initrd=Freigabe_Ubuntu_18.04/initrd boot=casper toram --- }}} Sobald das Menü beim Booten über PXE angezeigt wird, kann mit der Tabulatortaste wie z.B. auch aus GRUB gewohnt die aktuelle Kommandozeile editiert werden. === Mit vesamenu.c32 === Mit der Variante mit '''vesamenu.c32''' wird ein etwas moderneres Menü erzeugt. 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.[3] {{{ 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+ == [:memtest: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.[2][4][5] {{{#!vorlage Befehl sudo mkdir /var/lib/tftp/memtest && sudo cp /path-to-ubuntu-cd/install/mt86plus /var/lib/tftp/memtest/ }}} Anschließend sind noch in der '''default''' Konfigurationsdatei unter '''/var/lib/tftp/pxelinux.cfg/''' folgende Zeilen anzufügen[3]: {{{#!code sh LABEL memtest MENU LABEL ^Memtest86+ v2.11 KERNEL memtest/mt86plus }}} {{{#!vorlage Befehl 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/#Bootimage-vorbereiten:] verwiesen, da an dieser Stelle schon eine gute Anleitung speziell für diesen Fall vorhanden ist. == Ubuntu Diskless == {{{#!vorlage Hinweis Dieser Abschnitt der Anleitung ist der Seite [https://help.ubuntu.com/community/DisklessUbuntuHowto Ubuntu.com] {en} 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. {{{#!vorlage Hinweis Die [:Installation_auf_externen_Speichermedien: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 [:Shell/uname:uname] heraus, welcher Kernel aktiv ist. Die dazugehörige '''initrd.img...''' wird dann in das '''/home'''-Verzeichnis kopiert[2][4][5]: {{{#!vorlage Befehl 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 }}} {{{#!vorlage Befehl 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/'''.[3] {{{ # # 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[2][4]: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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.[3] {{{ # 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.[3] {{{#!vorlage Hinweis Zu beachten ist, dass es keine swap-Partition gibt! }}} {{{ # proc /proc proc defaults 0 0 /dev/nfs / nfs defaults 1 1 }}} {{{ # /etc/fstab: static file system information. # # 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[3]: {{{ BENUTZERNAME LABEL ubuntu-1804-diskless MENU LABEL Ubuntu 18.04 ^Diskless KERNEL ubuntu-diskless/vvmlinuz-5.5.9-050509-generic APPEND netboot=nfs nfsroot=192.168.2.49:/var/lib/tftp/NFS-Freigabe/ubuntu-diskless rw initrd=ubuntu-diskless/initrd.img-5.5.9-050509-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 Die Konfigurationsdateien]. == Clonezilla == Folgende Schritte sind der Reihe nach auszuführen, um Clonezilla über PXE booten zu können. * Zuerst muss das [http://clonezilla.org/downloads.php Clonezilla Live zip-File] {dl} {en} heruntergeladen werden. Im u.a. Beispiel wird die auch für ältere Rechner funktionsfähige 32-Bit-Version verwendet[2][4]: {{{#!vorlage Befehl wget https://osdn.net/projects/clonezilla/downloads/72474/clonezilla-live-2.6.5-21-i686.zip }}} * Nun wird die Datei nach '''/nfsroot/clonezilla/''' entpackt[5]: {{{#!vorlage Befehl sudo unzip /PFAD/ZU/DATEI/clonezilla-live-2.6.5-21-i686.zip -d /var/lib/tftp/Freigabe_Clonezilla/ }}} === Eintrag in der default Konfigurationsdatei === In die `APPEND`-Zeile der Konfigurationsdatei muss noch der nfsroot-Parameter angefügt werden. 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".[3] {{{ BENUTZERNAME LABEL clonezilla MENU LABEL ^Clonezilla Live 2.6.5-21 32-Bit KERNEL Freigabe_Clonezilla/live/vmlinuz APPEND initrd=clonezilla/live/initrd.img boot=live noswap vga=788 fetch=tftp://192.168.178.49/clonezilla/live/filesystem.squashfs nfsroot=192.168.178.49:/var/lib/tftp/clonezilla toram --- }}} {{{#!vorlage Experten * 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 [https://clonezilla.org/fine-print-live-doc.php?path=./clonezilla-live/doc/99_Misc/00_live-boot-parameters.doc#00_live-boot-parameters.doc Parameter] {en} 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 [[Vorlage(Tasten, F12)]], bei HP [[Vorlage(Tasten, F9)]], bei ASUS [[Vorlage(Tasten, F8)]] und bei IBM Thinkpads ebenfalls [[Vorlage(Tasten, F12)]]. = Links = * Wikipedia: * [wikipedia:Dynamic_Host_Configuration_Protocol:Dynamic Host Configuration Protocol (DHCP)] * [wikipedia:Trivial_File_Transfer_Protocol:Trivial File Transfer Protocol (TFTP)] * [http://lars-schenk.com/pxe-netzwerk-boot-mit-ubuntu-client-und-debian-server/60 PXE Netzwerk-Boot mit Ubuntu Client & Debian Server] {de} - deutsche Anleitung von Lars Schenk, 09/2006 * SYSLinux / PXELinux: * [http://syslinux.zytor.com/wiki/index.php/Menu Anleitung zum Erstellen eines Bootmenüs] {en} * [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 Weiterführende Anleitung zum Erstellen eines Bootmenüs] {en} * [http://syslinux.zytor.com/wiki/index.php/PXELINUX Beschreibung zu PXELINUX im SYSLINUX-Wiki] {en} * [https://linuxhint.com/pxe_boot_ubuntu_server] {en} - Anleitung zu Ubuntu 18.04 von Shahriar Shovon, 05/2019 * Memtest: * [wikipedia:Memtest_86:] * [http://www.memtest86.com/ Memtest86] {en} * [http://www.memtest.org/ Memtest86+] {en} * [ubuntu_doc:community/DisklessUbuntuHowto:Diskless Ubuntu Howto] {en} * CloneZilla: * [wikipedia:Clonezilla:] * [http://clonezilla.org/ Clonezilla.org] {en} * [https://clonezilla.org/fine-print-live-doc.php?path=./clonezilla-live/doc/99_Misc/00_live-boot-parameters.doc#00_live-boot-parameters.doc Bootparameter für Clonezilla] {en} #tag: Netzwerk, System, Installation, Server