PXE-Server: Unterschied zwischen den Versionen

Aus Computertruhe-Wiki
Zur Navigation springen Zur Suche springen
(Parted Magic aktualisiert)
(Linux MINT lauffähig)
Zeile 1: Zeile 1:
 
<blockquote>'''⚠ Work in Progress ⚠'''
 
<blockquote>'''⚠ Work in Progress ⚠'''
  
Missing/TODO: iPXE für (U)EFI, Linux MINT, Windows</blockquote>Diese Seite beschreibt die Installation eines PXE-Servers zum Booten über das Netzwerk. Dadurch kann man die USB-Sticks ersetzen, die immer mal wieder kompliziert zum Laufen zu bringen sind.
+
Missing/TODO: iPXE für (U)EFI, Windows</blockquote>Diese Seite beschreibt die Installation eines PXE-Servers zum Booten über das Netzwerk. Dadurch kann man die USB-Sticks ersetzen, die immer mal wieder kompliziert zum Laufen zu bringen sind.
  
 
Die Anleitung wurde mit Raspberry Pi OS (Raspbian 10) getestet, sollte aber auch mit Debian 10 "Buster" und Ubuntu 20.XX funktionieren. Die Inhalte sind wild aus dem Internet zusammenkopiert und teilweise angepasst<ref>[https://wiki.ubuntuusers.de/PXE-Installation/ ''Ubuntuusers-Wiki: PXE-Installation'']</ref><ref>[https://wiki.ubuntuusers.de/PXE-Boot/ ''Ubuntuusers-Wiki: PXE-Boot'']</ref>.
 
Die Anleitung wurde mit Raspberry Pi OS (Raspbian 10) getestet, sollte aber auch mit Debian 10 "Buster" und Ubuntu 20.XX funktionieren. Die Inhalte sind wild aus dem Internet zusammenkopiert und teilweise angepasst<ref>[https://wiki.ubuntuusers.de/PXE-Installation/ ''Ubuntuusers-Wiki: PXE-Installation'']</ref><ref>[https://wiki.ubuntuusers.de/PXE-Boot/ ''Ubuntuusers-Wiki: PXE-Boot'']</ref>.
Zeile 12: Zeile 12:
 
dhcp-boot=pxelinux.0,192.168.178.XX,192.168.178.0
 
dhcp-boot=pxelinux.0,192.168.178.XX,192.168.178.0
  
pxe-service=x86PC,\"Netzwerk Boot\",pxelinux
+
pxe-service=x86PC,\"Computertruhe Network Boot\",pxelinux
  
 
enable-tftp
 
enable-tftp
Zeile 22: Zeile 22:
 
sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.c32,linux.c32,libcom32.c32,libutil.c32,menu.c32,vesamenu.c32} /var/lib/tftpboot/
 
sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.c32,linux.c32,libcom32.c32,libutil.c32,menu.c32,vesamenu.c32} /var/lib/tftpboot/
 
</syntaxhighlight>Dann konfigurieren wir noch die NFS-Freigabe für die ISOs. Auch hier müsst ihr eventuell die IP-Range ''192.168.178.0'' anpassen, so dass sie zu eurem Netzwerk passt.<syntaxhighlight lang="bash">
 
</syntaxhighlight>Dann konfigurieren wir noch die NFS-Freigabe für die ISOs. Auch hier müsst ihr eventuell die IP-Range ''192.168.178.0'' anpassen, so dass sie zu eurem Netzwerk passt.<syntaxhighlight lang="bash">
echo "/var/lib/tftpboot 192.168.178.0/255.255.255.0(ro,sync,no_wdelay,insecure_locks,insecure,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports && sudo exportfs -a
+
echo "/var/lib/tftpboot 192.168.178.0/255.255.255.0(ro,async,no_subtree_checks)" | sudo tee -a /etc/exports && sudo exportfs -a
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Zeile 63: Zeile 63:
  
 
==== DBAN Autonuke ====
 
==== DBAN Autonuke ====
Alternativ können wir uns einen Eintrag basteln, der direkt den Befehl ''autonuke'' ausführt und daher auch nicht die komplette ISO-Datei braucht.<ref>''[https://www.nang.io/pxe-boot-dban/ Josh Gachnang: PXE Boot DBAN]''</ref>
+
Alternativ können wir uns einen Eintrag basteln, der direkt den Befehl ''autonuke'' ausführt, daher auch nicht die komplette ISO-Datei braucht und etwas schneller ist.<ref>''[https://www.nang.io/pxe-boot-dban/ Josh Gachnang: PXE Boot DBAN]''</ref>
  
 
Dazu laden wir wir die ISO, extrahieren die passende ausführbare Datei und legen sie in das passende Verzeichnis.<syntaxhighlight lang="bash" line="1">
 
Dazu laden wir wir die ISO, extrahieren die passende ausführbare Datei und legen sie in das passende Verzeichnis.<syntaxhighlight lang="bash" line="1">
 
wget https://downloads.sourceforge.net/project/dban/dban/dban-2.3.0/dban-2.3.0_i586.iso?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdban%2Ffiles%2Fdban%2Fdban-2.3.0%2Fdban-2.3.0_i586.iso%2Fdownload&ts=1608933465 -O /tmp/dban.iso
 
wget https://downloads.sourceforge.net/project/dban/dban/dban-2.3.0/dban-2.3.0_i586.iso?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdban%2Ffiles%2Fdban%2Fdban-2.3.0%2Fdban-2.3.0_i586.iso%2Fdownload&ts=1608933465 -O /tmp/dban.iso
 
mkdir /tmp/dban
 
mkdir /tmp/dban
mount -o loop /tmp/dban.iso /tmp/dban
+
sudo mount -o loop /tmp/dban.iso /tmp/dban
 
sudo mkdir -p /var/lib/tftpboot/dban
 
sudo mkdir -p /var/lib/tftpboot/dban
 
sudo cp /tmp/dban/dban.bzi /var/lib/tftpboot/dban/
 
sudo cp /tmp/dban/dban.bzi /var/lib/tftpboot/dban/
umount /tmp/dban
+
sudo umount /tmp/dban
 
</syntaxhighlight>Dann passen wir wieder das Boot-Menü an.<syntaxhighlight lang="bash">
 
</syntaxhighlight>Dann passen wir wieder das Boot-Menü an.<syntaxhighlight lang="bash">
 
echo "LABEL      dban-autonuke
 
echo "LABEL      dban-autonuke
Zeile 83: Zeile 83:
 
Parted Magic müssen wir erst entpacken und eine Datei generieren. Als erstes holen wir uns die ISO aus der Cloud, dazu empfehle ich euch, ein [https://cloud.computertruhe.de/settings/user/security App-Passwort anzulegen]. Dann entpacken wir die ISO, generieren die Datei ''files.cgz'' und kopieren alles in das entsprechende Unterverzeichnis. Falls ihr an die spezielle PXE-ISO kommt, ist ''files.cgz'' schon da und ihr müsst es nur aus dem gleichen Ordner wie die anderen Dateien kopieren.<ref>''[https://partedmagic.com/pxe/ Parted Magic: PXE]''</ref><syntaxhighlight lang="bash" line="1">
 
Parted Magic müssen wir erst entpacken und eine Datei generieren. Als erstes holen wir uns die ISO aus der Cloud, dazu empfehle ich euch, ein [https://cloud.computertruhe.de/settings/user/security App-Passwort anzulegen]. Dann entpacken wir die ISO, generieren die Datei ''files.cgz'' und kopieren alles in das entsprechende Unterverzeichnis. Falls ihr an die spezielle PXE-ISO kommt, ist ''files.cgz'' schon da und ihr müsst es nur aus dem gleichen Ordner wie die anderen Dateien kopieren.<ref>''[https://partedmagic.com/pxe/ Parted Magic: PXE]''</ref><syntaxhighlight lang="bash" line="1">
 
curl -u <USER>:<PASSWORD> -X GET https://cloud.computertruhe.de/remote.php/dav/files/<USER>/Allgemein/Software/Datenvernichtung/pmagic_2020_10_12.iso -o /tmp/pmagic.iso
 
curl -u <USER>:<PASSWORD> -X GET https://cloud.computertruhe.de/remote.php/dav/files/<USER>/Allgemein/Software/Datenvernichtung/pmagic_2020_10_12.iso -o /tmp/pmagic.iso
cd /tmp && mkdir cdrom
+
cd /tmp && mkdir pmagic
mount -o loop /tmp/pmagic.iso /tmp/cdrom
+
sudo mount -o loop /tmp/pmagic.iso /tmp/pmagic
sh /tmp/cdrom/boot/pxelinux/pm2pxe.sh
+
sh /tmp/pmagic/boot/pxelinux/pm2pxe.sh
sudo cp -v cdrom/pmagic/{bzImage,initrd.img,fu.img,m.img} /var/lib/tftpboot/pmagic/
+
sudo cp -v pmagic/pmagic/{bzImage,initrd.img,fu.img,m.img} /var/lib/tftpboot/pmagic/
 
sudo cp pm2exe/files.cgz /var/lib/tftpboot/pmagic/
 
sudo cp pm2exe/files.cgz /var/lib/tftpboot/pmagic/
umount /tmp/cdrom
+
sudo umount /tmp/pmagic
 
</syntaxhighlight>Dann legen wir noch den Eintrag im Boot-Menü an.<syntaxhighlight lang="bash">
 
</syntaxhighlight>Dann legen wir noch den Eintrag im Boot-Menü an.<syntaxhighlight lang="bash">
 
echo "LABEL      pmagic
 
echo "LABEL      pmagic
Zeile 95: Zeile 95:
 
INITRD    pmagic/initrd.img,pmagic/fu.img,pmagic/m.img,pmagic/files.cgz
 
INITRD    pmagic/initrd.img,pmagic/fu.img,pmagic/m.img,pmagic/files.cgz
 
APPEND    edd=on vga=normal
 
APPEND    edd=on vga=normal
 +
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default
 +
</syntaxhighlight>
 +
 +
=== Linux MINT (und andere Linux-Derivate)<ref>''[https://www.german-syslinux-blog.de/syslinux-6-04-ubtuntu-und-mint-live-systeme-starten/ Deutscher Syslinux Blog: Ubuntu 20.04 und Mint 19.3 Live-Systeme starten]''</ref> ===
 +
Hier brauchen wir jetzt den anfangs eingerichteten NFS-Server. Wir ziehen uns das aktuelle MINT-Image und kopieren es in den richtigen Ordner. Ganz ist hier, auch die versteckten Dateien zu kopieren, das hat mich einige Zeit gekostet.<syntaxhighlight lang="bash" line="1">
 +
curl http://ftp-stud.hs-esslingen.de/pub/Mirrors/linuxmint.com/stable/20/linuxmint-20-cinnamon-64bit.iso -o /tmp/mint.iso
 +
mkdir /tmp/mint
 +
sudo mount -o loop /tmp/mint.iso /tmp/mint
 +
sudo cp -rT /tmp/mint /var/lib/tftpboot/mint
 +
sudo umount /tmp/mint
 +
</syntaxhighlight>Jetzt fügen wir noch zwei Einträge hinzu, einmal für den Live-Modus, aus dem man dann auch die normale Installation starten kann, und einmal für die OEM-Installation. Hier müsst ihr ''192.168.178.XX'' durch die Adresse des NFS-Servers (also im Beispiel wieder des Raspberry Pis) ersetzen.<syntaxhighlight lang="bash">
 +
echo "LABEL      mint
 +
MENU LABEL ^Linux MINT 20 Cinnamon
 +
KERNEL    mint/casper/vmlinuz
 +
APPEND    boot=casper vga=normal ip=dhcp netboot=nfs nfsroot=192.168.178.XX:/var/lib/tftpboot/mint initrd=mint/casper/initrd.lz splash --
 +
 +
LABEL      mint-oem
 +
MENU LABEL ^Linux MINT 20 Cinnamon OEM
 +
KERNEL    mint/casper/vmlinuz
 +
APPEND    boot=casper vga=normal ip=dhcp netboot=nfs nfsroot=192.168.178.XX:/var/lib/tftpboot/mint initrd=mint/casper/initrd.lz locale=de_DE keyboard-configuration/layoutcode=de console-setup/layoutcode=de only-ubiquity oem-config/enable=true quiet splash --
 
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default
 
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default
 
</syntaxhighlight>
 
</syntaxhighlight>

Version vom 26. Dezember 2020, 20:36 Uhr

⚠ Work in Progress ⚠ Missing/TODO: iPXE für (U)EFI, Windows

Diese Seite beschreibt die Installation eines PXE-Servers zum Booten über das Netzwerk. Dadurch kann man die USB-Sticks ersetzen, die immer mal wieder kompliziert zum Laufen zu bringen sind.

Die Anleitung wurde mit Raspberry Pi OS (Raspbian 10) getestet, sollte aber auch mit Debian 10 "Buster" und Ubuntu 20.XX funktionieren. Die Inhalte sind wild aus dem Internet zusammenkopiert und teilweise angepasst[1][2].

Installation und Einrichtung der benötigten Dienste

Als erstes installieren wir mit dnsmasq einen DHCP-Server, der als Proxy (das heißt zusätzlich zum DHCP-Server im Router) funktioniert und einen TFTP-Server mitbringt, eine Sammlung von Binaries aus pxelinux und nfs-kernel-server, um auch ISO-Dateien laden zu können.

sudo apt install dnsmasq pxelinux nfs-kernel-server

Die Standard-Konfiguration von dnsmasq ersetzen wir, da wir keinen vollständigen DHCP-Server brauchen und dafür TFTP aktivieren wollen. Hier müsst ihr eventuell die IP-Range 192.168.178.0 anpassen, so dass sie zu eurem Netzwerk passt. Außerdem müsst ihr 192.168.178.XX durch die Adresse des PXE-Servers (also im Beispiel des Raspberry Pis) ersetzen.

echo "dhcp-range=192.168.178.0,proxy			
dhcp-boot=pxelinux.0,192.168.178.XX,192.168.178.0

pxe-service=x86PC,\"Computertruhe Network Boot\",pxelinux

enable-tftp
tftp-root=/var/lib/tftpboot" | sudo tee /etc/dnsmasq.conf

Als nächstes legen wir das gerade konfigurierte Verzeichnis an und kopieren ein paar benötigte Dateien rein.

1 sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
2 sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/ 
3 sudo cp /usr/lib/syslinux/memdisk /var/lib/tftpboot/ 
4 sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.c32,linux.c32,libcom32.c32,libutil.c32,menu.c32,vesamenu.c32} /var/lib/tftpboot/

Dann konfigurieren wir noch die NFS-Freigabe für die ISOs. Auch hier müsst ihr eventuell die IP-Range 192.168.178.0 anpassen, so dass sie zu eurem Netzwerk passt.

echo "/var/lib/tftpboot 192.168.178.0/255.255.255.0(ro,async,no_subtree_checks)" | sudo tee -a /etc/exports && sudo exportfs -a

Konfiguration des PXE-Servers und Installation von Images

Alle Konfigurationen finden in der Datei /var/lib/tftpboot/pxelinux.cfg/default statt. Außerdem legen wir später für jedes Image einen Unterordner in /var/lib/tftpboot/ an.

Als erstes konfigurieren wir ein Menü, worüber wir dann beim Booten unsere Images auswählen können.

echo "DEFAULT    menu.c32
MENU TITLE Server PXE Boot Menu
TIMEOUT    100
" | sudo tee /var/lib/tftpboot/pxelinux.cfg/default

Memtest86

Die erste und einfachste Übung ist memtest86+. Dazu laden wir erst die ausführbare Datei runter und verschieben sie in einen passenden Unterordner.

1 wget https://www.memtest.org/download/5.31b/memtest86+-5.31b.bin.gz -O /tmp/mt86plus.gz
2 gzip -d /tmp/mt86plus
3 sudo mkdir /var/lib/tftpboot/memtest
4 sudo mv /tmp/mt86plus /var/lib/tftpboot/memtest/

Dann fügen wir den passenden Eintrag im Boot-Menü ein.

echo "LABEL      memtest
MENU LABEL ^Memtest86+ v5.31b
KERNEL     memtest/mt86plus
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default

Darik's Boot and Nuke (DBAN)

Für DBAN bedienen wir uns des syslinux-Tools memdisk. Das kann ISOs unter bestimmten Voraussetzungen laden (funktioniert aber leider nicht ohne weiteres für Linux-Installations-Images).[3] Bei der Benutzung von memdisk muss die ganze ISO in den RAM geladen werden, was die Größe beschränkt und eine Weile dauert (die Minute war für mich allerdings im Vergleich zur Dauer des Wipen irrelevant).

Als erstes laden wir die ISO-Datei in den richtigen Unterordner.

sudo curl https://downloads.sourceforge.net/project/dban/dban/dban-2.3.0/dban-2.3.0_i586.iso?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdban%2Ffiles%2Fdban%2Fdban-2.3.0%2Fdban-2.3.0_i586.iso%2Fdownload&ts=1608933465 -o /var/lib/tftpboot/dban/dban.iso --create-dirs

Dann passen wir das Boot-Menü entsprechend an.

echo "LABEL      dban
MENU LABEL ^DBAN v2.3.0
LINUX      memdisk
INITRD     dban/dban.iso
APPEND     iso
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default

DBAN Autonuke

Alternativ können wir uns einen Eintrag basteln, der direkt den Befehl autonuke ausführt, daher auch nicht die komplette ISO-Datei braucht und etwas schneller ist.[4]

Dazu laden wir wir die ISO, extrahieren die passende ausführbare Datei und legen sie in das passende Verzeichnis.

1 wget https://downloads.sourceforge.net/project/dban/dban/dban-2.3.0/dban-2.3.0_i586.iso?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdban%2Ffiles%2Fdban%2Fdban-2.3.0%2Fdban-2.3.0_i586.iso%2Fdownload&ts=1608933465 -O /tmp/dban.iso
2 mkdir /tmp/dban
3 sudo mount -o loop /tmp/dban.iso /tmp/dban
4 sudo mkdir -p /var/lib/tftpboot/dban
5 sudo cp /tmp/dban/dban.bzi /var/lib/tftpboot/dban/
6 sudo umount /tmp/dban

Dann passen wir wieder das Boot-Menü an.

echo "LABEL      dban-autonuke
MENU LABEL ^DBAN Autonuke!
KERNEL     dban/dban.bzi
APPEND     nuke=\"dwipe --autonuke\" silent
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default

Parted Magic

Parted Magic müssen wir erst entpacken und eine Datei generieren. Als erstes holen wir uns die ISO aus der Cloud, dazu empfehle ich euch, ein App-Passwort anzulegen. Dann entpacken wir die ISO, generieren die Datei files.cgz und kopieren alles in das entsprechende Unterverzeichnis. Falls ihr an die spezielle PXE-ISO kommt, ist files.cgz schon da und ihr müsst es nur aus dem gleichen Ordner wie die anderen Dateien kopieren.[5]

1 curl -u <USER>:<PASSWORD> -X GET https://cloud.computertruhe.de/remote.php/dav/files/<USER>/Allgemein/Software/Datenvernichtung/pmagic_2020_10_12.iso -o /tmp/pmagic.iso
2 cd /tmp && mkdir pmagic
3 sudo mount -o loop /tmp/pmagic.iso /tmp/pmagic
4 sh /tmp/pmagic/boot/pxelinux/pm2pxe.sh
5 sudo cp -v pmagic/pmagic/{bzImage,initrd.img,fu.img,m.img} /var/lib/tftpboot/pmagic/
6 sudo cp pm2exe/files.cgz /var/lib/tftpboot/pmagic/
7 sudo umount /tmp/pmagic

Dann legen wir noch den Eintrag im Boot-Menü an.

echo "LABEL      pmagic
MENU LABEL ^Parted Magic 2020-10-12
LINUX      pmagic/bzImage
INITRD     pmagic/initrd.img,pmagic/fu.img,pmagic/m.img,pmagic/files.cgz
APPEND     edd=on vga=normal
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default

Linux MINT (und andere Linux-Derivate)[6]

Hier brauchen wir jetzt den anfangs eingerichteten NFS-Server. Wir ziehen uns das aktuelle MINT-Image und kopieren es in den richtigen Ordner. Ganz ist hier, auch die versteckten Dateien zu kopieren, das hat mich einige Zeit gekostet.

1 curl http://ftp-stud.hs-esslingen.de/pub/Mirrors/linuxmint.com/stable/20/linuxmint-20-cinnamon-64bit.iso -o /tmp/mint.iso
2 mkdir /tmp/mint
3 sudo mount -o loop /tmp/mint.iso /tmp/mint
4 sudo cp -rT /tmp/mint /var/lib/tftpboot/mint 
5 sudo umount /tmp/mint

Jetzt fügen wir noch zwei Einträge hinzu, einmal für den Live-Modus, aus dem man dann auch die normale Installation starten kann, und einmal für die OEM-Installation. Hier müsst ihr 192.168.178.XX durch die Adresse des NFS-Servers (also im Beispiel wieder des Raspberry Pis) ersetzen.

echo "LABEL      mint
MENU LABEL ^Linux MINT 20 Cinnamon
KERNEL     mint/casper/vmlinuz
APPEND     boot=casper vga=normal ip=dhcp netboot=nfs nfsroot=192.168.178.XX:/var/lib/tftpboot/mint initrd=mint/casper/initrd.lz splash --

LABEL      mint-oem
MENU LABEL ^Linux MINT 20 Cinnamon OEM
KERNEL     mint/casper/vmlinuz
APPEND     boot=casper vga=normal ip=dhcp netboot=nfs nfsroot=192.168.178.XX:/var/lib/tftpboot/mint initrd=mint/casper/initrd.lz locale=de_DE keyboard-configuration/layoutcode=de console-setup/layoutcode=de only-ubiquity oem-config/enable=true quiet splash --
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default

Neustart des Dienstes

Am Ende der Ersteinrichtung und nach jeder Änderung der Konfiguration sollten sicherheitshalber die Berechtigungen richtig gesetzt und dann der dnsmasq-Dienst neugestartet werden.

sudo chown -R nobody:nogroup /var/lib/tftpboot && sudo chmod -R 755 /var/lib/tftpboot/ && sudo systemctl restart dnsmasq

Quellen