PXE - Boot
Grundlagen: Vorgehensweise der Musterlösung
Die Musterlösung sieht die Vergabe der IP vom ISC-DHCP-Server auf dem zentralen Server vor. In der Datei /etc/linuxmuster/workstations stehen Zeilen der Form
Raum;Rechnername;Imagegruppe;MAC;IP;Subnetzmaske;NB;NB;NB;NB;[0|22]
Steht am Ende eine 0, so wird der Rechner aufgenommen aber nicht mit einem Bootimage versehen (z.B. Laptops), bei 22 erhält er zusätzlich ein Linbo-Image. Ab sofort erhält der Host per DHCP Daten des paedml (DNS: paedml. Gateway: ipcop) und kann die Dienste des paedml verwenden, da er in der Firewall aufgenommen wurde.
Erweiterung am KG
Die dynamsiche Vergabe von IP-Leases haben wir ausgelagert in dnsmasq, da dieser einfacher zu konfigurieren ist (/etc/dnsmasq.d/paedml). Dieser ist in der Lage, PXE-Bootmenus auszugeben. Auf dem paedml wurden dafür der isc-dhcp durch den dnsmasq ersetzt. Dieser vergibt die in der Datei /etc/linuxmuster/clients/clients vorgesehen ist.
Boot-Menu mit dnsmasq
dnsmasq den Clients ein Bootmenu, nach 5 Sekunden wird der erste Eintrag gestartet:
pxe-prompt="Bitte waehlen ([F8] druecken):",5 pxe-service=x86PC,GRUB vom Netz (Grub2-i386pc),/boot/grub/i386-pc/core,10.32.1.1 pxe-service=x86PC,"Booten von Platte (wenn vorhanden)" pxe-service=x86PC,"Tools vom Netz",pxelinux,10.32.1.1
Weiterleitung an TFTBoot / pxelinux
Nach Auswahl der Bootoption wird der Client an den TFTP des ausgewählten Servers (letzter Eintrag) weitergeleitet. Dort wird die die Datei
- pxelinux.0 (SYSLINUX/PXELINUX) in /var/linbo/
Konfiguration unter /var/linbo/pxelinux.cfg/default - core.0 (Grub2) in /var/linbo/boot/grub/i386-pc/
Konfiguration unter /var/linbo/boot/grub/grub.cfg
gesucht, die in der Lage ist, einen Kernel zu booten. Es können spezielle Client-Konfiguration nach einem Schema gelesen werden:
- siehe http://www.syslinux.org/wiki/index.php/PXELINUX[[BR]]
- siehe https://docs.oracle.com/en/operating-systems/oracle-linux/7/install/ol7-install-pxe-boot-uefi.html
Die Musterlösung hinterlegt in /var/linbo/boot/grub/[Gruppenname].cfg Grub2-Konfigurationen, die dann ins Client-Image gepackt werden. Diese werden bei jedem import_workstations neu erzeugt, außer man entfernt die Config-Zeile am Anfang.
Scripte
Die Musterlösung sammelt alle Clients in der Datei /etc/linuxmuster/workstations (symlink /root/workstations)
- aufgenommene Clients, die nicht von LINBO bearbeitet werden [0]
- LinboClients [22]
Unser eigenes Script
50-kepler--dns-dhcp-config -> /usr/local/sbin/kepler--dns-dhcp-config
ist unter /etc/linuxmuster/import_workstations.d verlinkt, wird also jedesmal beim Workstationimport aufgerufen. Falls ein Client schon aufgenommen ist und z.B. getauscht wird, kann anstelle von import_workstations auch /usr/local/sbin/kepler--dns-dhcp-config aufgerufen werden.
Das Script /usr/local/sbin/kepler--dns-dhcp-config ruft /usr/local/sbin/kepler--dns-dhcp-config.php auf: und startet den dnsmasq auf dhcp und paedml neu:
ToDo: ergänzen
PXE-Boot eines Mini-Linux
Anleitung für Live-CD/DVD: http://www.gtkdb.de/index_7.html
Anleitung unter http://www.pcwelt.de/ratgeber/So_geht_s__Linux_ueber_das_Netzwerk_booten_-Anleitung-8199381.html
Auch interessant: https://www.plop.at/de/ploplinux/live/index.html
- Installiert sein müssen die Pakete
- syslinux
- nfs-kernel-server
- das Filesystem per NFS zur Verfügung stellen (/etc/exports)
/nfsexports/minilinux/ 10.32.0.0/255.240.0.0(rw,no_root_ squash,async,no_subtree_check)
- exportfs -rv
- service nfs-kernel-server restart
- Auf einem Client ein Betriebssystem installieren
- bei uns: Debian Jessie minimal
- nsf einrichten:
- aptitude install nfs-common
- ramdisk für boot vorbereiten
- WARUM SOLL DER KERNEL NACH ~ KOPIERT WERDEN ?
- /etc/initramfs-tools/initramfs.conf editieren: BOOT=nfs MODULES=netboot
- mkinitramfs -o ~/initrd.img-
uname -r
- Client-Installation auf Server kopieren
- /var/linbo/minilinux (bei uns liegt der TFTP-ROOT unter /var/linbo)
- /nfsexports/minilinux
- mkdir /mnt/nfs
- mount -t nfs -o nolock 10.32.1.1:/minilinux /mnt/nfs
- mkdir /mnt/nfs/
- cp -ax /. /mnt/nfs/. ( RSYNC benutzen? )
- cp -ax /dev/. /mnt/nfs/dev/. ( RSYNC benutzen? )
- PXE-Boot auf Server vorbereiten
- mkdir /var/lib/tftpboot/meinpc
- cp /nfsexports/minilinux/home/User/vmlinuz-Versiongeneric /var/linbo/minilinux/
- cp /nfsroot/meinpc/home/User/initrd.img-Versiongeneric /var/linbo/minilinux/
- Schritt 5 ist unklar, denn der Client soll doch eine DHCP-Adresse vom Server bekommen - oder?
- /nfsexport/minilinux/etc/fstab editieren Alle Filesysteme auskommentieren (wegen Netzboot)
- Menüeintrag für Boot des Minilinux vorbereiten (TODO)
PXE-Boot einer Live-CD/DVD
Sehr gut beschrieben unter http://www.gtkdb.de/index_7.html, es lassen sich diverse Live-Systeme per TFTP booten.
Detaillierte Anleitung c't-Desinfect: für http://www.heise.de/security/artikel/Desinfec-t-vom-Linux-Server-booten-1658049.html
- Live-CD/DVD-ISO-Image herunterladen
- mounten (mount -o loop ISO MountPoint]
- unter /MountPuint/boot/grub.cfg die Kernel-Appends nachsehen
- Kopieren einiger Dateien nach /var/lib/tftpboot/utils/[Verzeichnis]
- vmlinuz
- initrd.img
- filesystem.squasfs
- Eintragen der Bootoptionen in /var/lib/tftpboot/utils/pxelinux.cfg
Die Debian-Live-Packages können recht leicht eingebunden werden: https://kb.pocnet.net/wiki/Debian-Live_Netzbootsystem
http://cdimage.debian.org/debian-cd/current-live/amd64/webboot/
fehlende Firmware
Die fehlende Firmware kann in die initrd gepackt werden. Siehe http://www.grep.be/blog/en/computer/debian/nonfree_pxe/ Für die Live-Systeme am besten gleich in den Ordner /lib/firmware/ damit sie beim Booten geladen wird:
- zcat XXX.initrd.img | cpio -vi
entpackt in das aktuelle Verzeichnis - dort die Firmware hineinpacken
- find . | cpio -ov -H newc | gzip --best > ../XXX_initrd.img
packt das initrd wieder zusammen
PXE-Boot eines Debian-Installers
- Netboot-Installer-Package herunterladen und im Prinzip wie unter https://wiki.debian.org/PXEBootInstall beschrieben vorgehen.
- Einbindung kann mit den in txt.cfg angegebenen Parametern in die pxelinux.cfg/default eingetragen werden
- NON-FREE-Komponenten können in das initrd.gz wie unter https://wiki.debian.org/DebianInstaller/NetbootFirmware eingebunden werden, so dass kein USB-Stick zur Installation benötigt wird
Booten eines FREEDOS für BIOS-Updates
Unter /var/linbo/freedos liegt in FD13LITE.IMG ein vergrößertes Floppy-Image (63MB) in dem ein BIOS Update (z.B. D3401-29.ARC) und das Flash-Utility (EfiFlash.exe) Platz haben.
fdisk -l /var/linbo/freedos/FD13LITE.IMG
Platte /var/linbo/freedos/FD13LITE.IMG: 75 MByte, 75497472 Byte
16 Köpfe, 63 Sektoren/Spur, 146 Zylinder, zusammen 147456 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Festplattenidentifikation: 0x00093999
Gerät boot. Anfang Ende Blöcke Id System
/var/linbo/freedos/FD13LITE.IMG1 * 63 131039 65488+ 6 FAT16
Die Partition kann man nun nach /mnt mounten und somit verändern:
mount -t auto -o loop,offset=$((63*512)) /var/linbo/freedos/FD13LITE.IMG /mnt
Das Image kann mit SYSLINUX memdisk auf dem Client gebootet werden (/etc/dnsmasq.d/paedml.conf):
pxe-service=x86PC,"Tools vom Netz",pxelinux,10.32.1.1
/var/linbo/pxelinux.cfg/default
LABEL FREEDOS LINUX /memdisk INITRD /freedos/FD13LITE.IMG APPEND raw