PXE-Server: Unterschied zwischen den Versionen

Aus Computertruhe-Wiki
Zur Navigation springen Zur Suche springen
K (Formatierung)
(DBAN hinzugefügt)
Zeile 1: Zeile 1:
 
<blockquote>'''⚠ Work in Progress ⚠'''</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.
 
<blockquote>'''⚠ Work in Progress ⚠'''</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><ref>''[https://www.nang.io/pxe-boot-dban/ Josh Gachnang: PXE Boot DBAN]''</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>.
  
 
== Installation und Einrichtung der benötigten Dienste ==
 
== Installation und Einrichtung der benötigten Dienste ==
Zeile 17: Zeile 17:
 
sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
 
sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
 
sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/  
 
sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/  
 +
sudo cp /usr/lib/syslinux/memdisk /var/lib/tftpboot/
 
sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.c32,libcom32.c32,libutil.c32,menu.c32,vesamenu.c32} /var/lib/tftpboot/
 
sudo cp -v /usr/lib/syslinux/modules/bios/{ldlinux.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" line="1">
+
</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
+
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
sudo exportfs -a
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Zeile 34: Zeile 34:
  
 
=== Memtest86 ===
 
=== Memtest86 ===
Die erste und einfachste Übung ist memtest86+. Dazu laden wir erst die ausführbare Datei runter und verschieben sie in einen passenden Unterordner.<syntaxhighlight lang="bash" line="1">
+
Die erste und einfachste Übung ist [https://www.memtest.org memtest86+]. Dazu laden wir erst die ausführbare Datei runter und verschieben sie in einen passenden Unterordner.<syntaxhighlight lang="bash" line="1">
 
wget https://www.memtest.org/download/5.31b/memtest86+-5.31b.bin.gz -O /tmp/mt86plus.gz
 
wget https://www.memtest.org/download/5.31b/memtest86+-5.31b.bin.gz -O /tmp/mt86plus.gz
 
gzip -d /tmp/mt86plus
 
gzip -d /tmp/mt86plus
Zeile 43: Zeile 43:
 
MENU LABEL ^Memtest86+ v5.31b
 
MENU LABEL ^Memtest86+ v5.31b
 
KERNEL    memtest/mt86plus
 
KERNEL    memtest/mt86plus
 +
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default
 +
</syntaxhighlight>
 +
 +
=== Darik's Boot and Nuke (DBAN) ===
 +
Für [https://dban.org/ DBAN] bedienen wir uns des syslinux-Tools [https://wiki.syslinux.org/wiki/index.php?title=MEMDISK memdisk]. Das kann ISOs unter bestimmten Voraussetzungen laden (funktioniert aber leider nicht ohne weiteres für Linux-Installations-Images).<ref>''[http://fabian-affolter.ch/blog/dban-und-pxe/ bits and pieces: DBAN und PXE]''</ref>
 +
 +
Als erstes laden wir die ISO-Datei in den richtigen Unterordner.<syntaxhighlight lang="bash">
 +
sudo mkdir -p /var/lib/tftpboot/dban && sudo 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 /var/lib/tftpboot/dban/dban.iso
 +
</syntaxhighlight>Dann passen wir das Boot-Menü entsprechend an.<syntaxhighlight lang="bash">
 +
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
 +
</syntaxhighlight>
 +
 +
==== 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>
 +
 +
Dazu laden wir wir die ISO, extrahieren die passende ausführbare Datei und legen sie in das passende Verzeichnis.<syntaxhighlight lang="bash" line="1">
 +
sudo mkdir -p /var/lib/tftpboot/dban
 +
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
 +
sudo mount -o loop /tmp/dban.iso /mnt
 +
sudo cp /mnt/dban.bzi /var/lib/tftpboot/dban/
 +
sudo umount /mnt
 +
</syntaxhighlight>Dann passen wir wieder das Boot-Menü an.<syntaxhighlight lang="bash">
 +
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
 
" | sudo tee -a /var/lib/tftpboot/pxelinux.cfg/default
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Neustart des Dienstes ==
 
== 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.<syntaxhighlight lang="bash" line="1">
+
Am Ende der Ersteinrichtung und nach jeder Änderung der Konfiguration sollten sicherheitshalber die Berechtigungen richtig gesetzt und dann der dnsmasq-Dienst neugestartet werden.<syntaxhighlight lang="bash">
sudo chown -R nobody:nogroup /var/lib/tftpboot
+
sudo chown -R nobody:nogroup /var/lib/tftpboot && sudo chmod -R 755 /var/lib/tftpboot/ && sudo systemctl restart dnsmasq
sudo chmod -R 755 /var/lib/tftpboot/
 
sudo systemctl restart dnsmasq
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Quellen ==
 
== Quellen ==
 
<references />
 
<references />

Version vom 25. Dezember 2020, 23:14 Uhr

⚠ Work in Progress ⚠

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,\"Netzwerk 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,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,sync,no_wdelay,insecure_locks,insecure,no_root_squash,no_subtree_check)" | 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]

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

sudo mkdir -p /var/lib/tftpboot/dban && sudo 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 /var/lib/tftpboot/dban/dban.iso

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 und daher auch nicht die komplette ISO-Datei braucht.[4]

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

1 sudo mkdir -p /var/lib/tftpboot/dban
2 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
3 sudo mount -o loop /tmp/dban.iso /mnt
4 sudo cp /mnt/dban.bzi /var/lib/tftpboot/dban/
5 sudo umount /mnt

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

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