Installationen über PXE
Diese Seite dient als Anleitung zur Einrichtung eines Servers sowohl für automatisierte Linux-Installationen als auch dem booten von Live-, Test- und Installations-Medien über das Netzwerk.
Benötigte Pakete
Zur Ergänzung einer standard Debian-Installation werden folgende Pakete (und deren Abhängigkeiten) nachinstalliert:
tftpd-hpa nfs-kernel-server syslinux memtest86+ linux-image-586
Konfiguration
IP des Installations-Servers (debian-jessie VM auf pingu): 192.168.10.15
Einrichten von NFS und TFTP
Sicherheit spielt beim Einbnden von NFS hier keine Rolle, da keine kritischen oder interessanten Daten auf dem Server gespeichert werden (sollten). Daher wird NFS mit den einfachstmöglichen, unsichersten Einstellungen konfiguriert.
/etc/exports
/pxeboot/nfsroot *(rw,no_root_squash,async,insecure,fsid=0,no_subtree_check)
Beim TFTP-Server muss der Pfad angepasst werden. Damit wir mehr Informationen vom TFTP-Server im Syslog erhalten, starten wir ihn standardmässig mit der Option "--verbose". Wenn der Server fertig konfiguriert ist, können wir diese Option wieder entfernen.
/etc/default/tftpd-hpa
TFTP_USERNAME="tftp" TFTP_DIRECTORY="/pxeboot/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--verbose --secure"
TFTPD und NFS müssen nun neu gestartet werden.
# exportfs -rav # systemctl restart nfs-kernel-server # systemctl restart tftpd-hpa
Einrichten von DHCP und PXE
Damit Rechner, die über das Netzwerk gestartet werden, auch wissen, woher sie den Bootloader (pxelinux) laden sollen, muss der DHCP-Server auf den TFTP-Server verweisen. In unserem Fall ist der DHCP-Server im pfSense-Router. In der DHCP-Konfiguration ist lediglich die IP-Addresse des TFTP-Servers (192.168.10.51) einzugeben, damit die Clients sich dort anmelden um den Bootvorgang fortzusetzen. Die Konfiguration von PXE und dem Bootmenü ist später im Artikel beschrieben.
Verzeichnisstruktur :
- /pxeboot
- Wurzelverzeichnis für die gesamte Struktur
- /pxeboot/tftpboot
- Unterverzeichnis für die ganzen Dateien, die per TFTP an den Client geschickt werden
- memtest86+.bin
- Kopiert aus /usr/lib/syslinux/modules/bios:
- cmenu.c32, ldlinux32.c32, libcom32.c32, libmenu.c32, libutil.c32, menu.c32, vesamenu.c32
- Hintergrundbild
- tux_button.png .. Sollte auf 640x400 oder 640x480 Pixel oder so hingeschnippelt werden
- /pxeboot/images
- ISOs, fertige Festplattenimages zur Installation bereitgestellt
- mini.iso (Lubuntu netinstall CD-Image) und weitere nach Belieben
Einrichtung der bootfähigen Images, NFS-Zeugs
Debian Stretch Livesystem
Cem, 2017-06-21
Analog zu Jessie (below).
/pxeboot/nfsroot/debian-stretch
Unter /pxeboot/nfsroot/
:
$ sudo debootstrap --arch=i386 stretch /pxeboot/nfsroot/debian-stretch $ sudo chroot debian-stretch/ # apt-get install linux-image-4.9.0-3-686 # exit
(root pw im chroot geändert)
/pxeboot/tftpboot/debian-stretch
Kernel und initrd kopieren von nfsroot:
/pxeboot/nfsroot/debian-stretch/boot$ sudo cp vmlinuz-4.9.0-3-686 initrd.img-4.9.0-3-686 /pxeboot/tftpboot/debian-stretch/
GrubSyslinux Anpassung analog zu Jessie.
Debian Stretch netinstall
Cem, 2017-06-21
Analog zu Jessie (below).
/pxeboot/tftpboot/stretch-installer-32bit
/pxeboot/tftpboot/stretch-installer-64bit
http://debian.ethz.ch/debian/dists/stretch/main/installer-i386/current/images/netboot/
In grub eingetragen.
Debian Jessie (vorinstalliert, über Netzwerk startfähig)
- /pxeboot/tftpboot/debian8
- initrd.img-3.16.0-4-586 (initial ramdisk), vmlinuz-3.16.0-4-586 (Kernel), kopiert aus /boot/ (Paket linux-image-586)
- Kernel (32-bit, ohne PAE für bestmögliche Kompatibilität mit den meisten Geräten, wichtig v.A. für Computer mit Pentium M Prozessoren) und initrd von mit deboostrap installiertem Changeroot.
- /pxeboot/nfsroot/debian8
- Debian Changeroot, erstellt mit folgendem Kommando:
# debootstrap --arch=i386 jessie /pxeboot/nfsroot/debian8
Später werden verschiedene Pakete im Changeroot nachinstalliert, die wir benötigen und, falls benötigt, neue Benutzerkonten angelegt.
Lubuntu 15.04 netinstall
- /pxeboot/tftpboot/lubuntu-15.04
- initrd.gz (initial ramdisk), linux (Kernel)
- /pxeboot/images/mini.iso
- ISO, die in /pxeboot/nfsroot/lubuntu-15.04 gemountet wird
# mount -o loop /pxeboot/images/mini.iso /pxeboot/nfsroot/lubuntu-15.04
- /pxeboot/nfsroot/lubuntu-15.04
- Mountpoint des CD-Images
Debian Jessie netinstall
- /pxeboot/tftpboot/debian-installer
- Entpacktes Netboot Image aus dem Debian Repository
Tiny Core
- Offizielle Anleitung: http://wiki.tinycorelinux.net/wiki:netbooting, insbesondere Abschnitt Absolute minimum method.
- /pxeboot/tftpboot/tinycore
- vmlinuz (Kernel) und core.gz (Initial Ramdisk) von der aktuellen CD (Verzeichnis boot) oder den angegebenen Adressen
- Optional: f2 f3 f4 von der CD
- /pxeboot/nfsroot/tinycore
- Backup für tinycore_mod.
- /pxeboot/nfsroot/tinycore_mod
- Dieses NFS-Verzeichnis wird in TinyCore auf /mount/nfs schreibbar eingehängt.
- Enthält im Unterverzeichnis tce/ das Paket-Repository (Unterverzeichnisse: optional; ondemand [leer]).
- Die Datei tce/onboot.lst gibt an, welche Pakete beim Booten geladen werden sollen.
- Werden neue Pakete mit
tce-load -wi pkgname
oder über das Menüsystemtce
installiert, landen sie in diesem Verzeichnis und werden beim nächsten Starten automatisch wieder geladen (Eintrag in tce/onboot.lst).- Im Unterschied zum Betrieb von CD (Bootparameter cde) ist es nicht möglich, die "live" dazuinstallierten Pakete in einem anderen Verzeichnis (Ramdisk) abzuspeichern. Wenn kein Schreibzugriff auf das tce-Repository vorhanden ist, können überhaupt keine neuen Pakete installiert werden!
- Die Datei tce/provides.db wird von der Paketverwaltung als Cache erzeugt. Sie ist für den Betrieb nicht nötig.
- Zu tun: Verzeichnis source mit Bauanleitung (wie auf der CD)
Syslinux Bootmenü
- /pxeboot/tftpboot/pxelinux.cfg
- Dateien zur Konfiguration des Boot-Menüs
- /pxeboot/tftpboot/pxelinux.cfg/default
MENU TITLE Boot Menu PROMPT 0 DEFAULT vesamenu.c32 TIMEOUT 100 MENU BACKGROUND tux_button.png LABEL BootLocal localboot 0 TEXT HELP Lokal installiertes System booten ENDTEXT LABEL Debian Jessie no PAE MENU LABEL Debian Jessie 32-bit non-PAE (login/pw: root/root) TEXT HELP ENDTEXT KERNEL debian8/vmlinuz-3.16.0-4-586 APPEND root=/dev/nfs initrd=debian8/initrd.img-3.16.0-4-586 init=/sbin/init ip=dhcp rw nfsroot=192.168.10.15:/pxeboot/nfsroot/debian8 LABEL Puppy Linux MENU LABEL Puppy Linux TEXT HELP Puppy Tahr (Ubuntu 14.04) ENDTEXT KERNEL puppytahr/vmlinuz APPEND initrd=puppytahr/initrd.gz LABEL memtest86 MENU LABEL Memtest86+ TEXT HELP Memtest86 ausführen ENDTEXT LINUX memtest86+.bin LABEL Lubuntu 15.04 netinstall MENU LABEL Lubuntu 15.04 netinstall TEXT HELP Lubuntu 15.04 Installieren ENDTEXT KERNEL lubuntu-15.04/linux APPEND root=/dev/nfs netboot=nfs nfsroot=192.168.10.15:/pxeboot/nfsroot/lubuntu-15.04 initrd=lubuntu-15.04/initrd.gz forcepae -- forcepae MENU BEGIN Debian Jessie amd64 Installer MENU TITLE Debian Jessie amd64 Installer LABEL Zurück MENU LABEL Zurück zum vorherigen Menü TEXT HELP Zurück zum vorherigen Menü ENDTEXT MENU EXIT MENU SEPARATOR MENU INCLUDE common/debian-installer.menu MENU END MENU BEGIN TinyCore MENU TITLE TinyCore * Revamped by Tibor F2 tinycore/f2 F3 tinycore/f3 F4 tinycore/f4 LABEL tc1024 MENU LABEL Starte TinyCore 1024x768 (Textkonsole) TEXT HELP Starte TinyCore mit Schweizer Tastaturbelegung, ssh, ddrescue etc. Verwende TAB, um Optionen anzupassen. F2-F4 zeigen die Hilfe zu den Boot-Optionen. ENDTEXT KERNEL tinycore/vmlinuz APPEND initrd=tinycore/core.gz nfsmount=192.168.10.15:/pxeboot/nfsroot/tinycore_mod quiet showapps tce=nfs/tce multivt noswap kmap=qwertz/sg-latin1 vga=773 LABEL tc1280 # dasselbe mit vga=775 in APPEND und verändertem MENU LABEL LABEL tc # dasselbe ohne vga in APPEND, mit verändertem MENU LABEL MENU END
Puppy Linux initrd: Siehe https://docs.google.com/document/d/1bkMJ-2wjAAC8HVZZTZBFxBELbojoGctLMg27KazqvRw/edit?hl=en&pli=1#
- /pxeboot/tftpboot/common/debian-installer.menu
PATH debian-installer/amd64/boot-screens/ INCLUDE debian-installer/amd64/boot-screens/menu.cfg DEFAULT debian-installer/amd64/boot-screens/vesamenu.c32 PATH debian-installer/i386/boot-screens/ INCLUDE debian-installer/i386/boot-screens/menu.cfg DEFAULT debian-installer/i386/boot-screens/vesamenu.c32
Ablauf
Zu beachten
Der über PXE zu bootende Client und der TFTP-Server sollten im gleichen Subnet sein. Falls dies nicht der Fall ist, wird ein TFTP-Proxy benötigt. Die Meinung des Autors ist, dass es einfacher ist, einen zusätzlichen TFTP-Server in das gleiche Subnet zu stellen, anstatt einen Proxy einzurichten. Jedoch wurde diese Meinung um ca. 4 Uhr an einem Sonntagmorgen gebildet.
NFS funktioniert glücklicherweise ohne Probleme über verschiedene Subnets hinaus.
Warum kann ich kein ext4? / Kernelsalat
Bei netinstall-Images ist es möglich, dass zusätzliche Kernelmodule, die während der Installation aus dem Internet gesogen werden, neuer als das PXE-boot Image und daher nicht mit dem bestehendem Kernel kompatibel sind. In diesem Fall sollte das Image neu heruntergeladen und die Menüs neu eingerichtet werden.
Nach einem Update des chroot müssen die neuen Kernel/initramfs-Dateien auch an den richtigen Ort in der TFTP-Server Verzeichnisstruktur kopiert werden.
Keine Netzwerkverbindung nach Installation
Linux Mint Installationen (wenigstens ab Linux Mint 18 "Sarah", auch Ubuntu 16.04 ist betroffen) ab dem Netzwerk schreiben eine komische Konfiguration in /etc/network/interfaces, mit welcher das installierte System keine IP-Adresse erhält. Nach der Installation sollte das Netzwerkinterface aus der Datei gelöscht werden, damit NetworkManager die Netzwerkeinstellungen verwaltet.
$ sudo nano /etc/network/interfaces auto eno4 (der Name des Netzwerkinterfaces könnte anders lauten, z.B. enp0s25, etc.) iface eno4 inet manual
Diese zwei Zeilen sollten mit einem Rautezeichen am Anfang der Zeilen auskommentiert oder ganz gelöscht werden. Nach einem Neustart des Computers (oder des Network-Manager Dienstes) wird das Netzwerk wieder von Network-Manager verwaltet und der Computer erhält seine Verbindungsinformationen über DHCP.
To Do
- Fertige Installations-Images
- Zusätzliche Distributionen (v.a. LTS-Versionen Xubuntu, Lubuntu, Kubuntu)
Referenzen
https://help.ubuntu.com/community/PXEInstallMultiDistro https://docs.google.com/document/d/1bkMJ-2wjAAC8HVZZTZBFxBELbojoGctLMg27KazqvRw/edit?hl=en&pli=1#