In deze workshop gaan we aan de slag met de configuratie voor het opstarten van een Raspberry Pi en een PC via het netwerk. Naast praktische voorbeelden van configuraties komt er ook een korte relevante toelichting op de werking aan de orde.
André Fondse
Wellicht heb je wel eens van de mogelijkheid gehoord dat het mogelijk is je Raspberry Pi of computer op te starten via het netwerk. Er bestaat een kans dat je na een paar vluchtige pogingen gestopt bent om te proberen je computer op te starten via het netwerk. Het configureren van een computer die andere computers kan laten opstarten is moeilijker dan bijvoorbeeld het configureren van een webserver of Samba. Alle voorbeelden aan de PXE server zijde van deze workshop zijn gebaseerd op Debian Linux. De installatie en configuratie gaat het makkelijkst als je als root ingelogd bent.
Globale werking
Om via het netwerk te kunnen opstarten ga je een computer configureren die dit mogelijk maakt. De software die je hiervoor gebruikt wordt PXE server genoemd. Er zijn hiervoor verschillende soorten softwarepakketten. In de BIOS (inclusief UEFI bios en de firmware van de Raspberry Pi) van de computer die je via het netwerk wilt opstarten activeer je het opstarten via het netwerk. De PXE software zorgt ervoor dat de computer opgestart kan worden via het netwerk. Op de server staat namelijk alle software die de client computers anders vanaf het interne opslagmedium halen. Je kunt een computer alleen via het netwerk opstarten als je deze computer aangesloten hebt op het netwerk via een netwerkkabel.
Server- en softwarekeuze
Qua snelheid is een gigabit netwerkkaart aan te bevelen. Verder maakt het eigenlijk niet zoveel uit welke hardware je gebruikt. Zo kun je bijvoorbeeld de PXE software installeren op je laptop installeren, je NAS, je Raspberry Pi of een virtuele machine. Aan de laatste geef ik zelf de voorkeur, omdat deze makkelijk te kopiëren of te verplaatsen is tussen computers. In deze workshop heb ik gekozen voor Debian als server besturingssysteem, omdat de opdrachten dan ook geschikt zijn om een Raspberry Pi als PXE server in te richten. Voor de PXE server software heb ik gekozen voor dnsmasq.
Dnsmasq installatie en configuratie
Dnsmasq heeft verschillende toepassingsgebieden, namelijk: DNS server, DHCP server, router advertisement (configuratie IPV6) en netwerk boot. Voor het opzetten van een PXE server gebruik je de toepassingsgebieden netwerk boot en eventueel DHCP server.
Dnsmasq installeer je met het volgende commando:
apt install dnsmasq
Het configuratiebestand voor dnsmasq is: /etc/dnsmasq.conf In dit bestand neem je in ieder geval de volgende regels op:
enable-tftp
tftp-root=/srv/tftp
Met enabele-tftp activeer je het opstarten van het netwerk op de server. Bij tftp-root geef je aan op welke locatie de bootloaders op de server staan waarmee de client computer kunnen opstarten. In configuratiebestanden die gebruikt worden om PC’s via het netwerk op te starten zijn de opgegeven paden steeds relatief ten opzichte van deze tftp-root directory (dit geldt niet voor het opstarten van een Raspberry Pi via het netwerk). In de configuratie van dnsmasq geef je aan of je gebruik wilt maken van de DHCP server van je eigen interne netwerk (meestal je router) of dat dnsmasq dat moet gaan doen. Wil je met name in je interne netwerk gebruik maken van het opstarten via het netwerk, dan is de bestaande DHCP server het handigst. Als je de PXE server op je laptop installeert met name als doel om anderen te helpen met bijvoorbeeld een installatie van Linux, dan is het handiger om op de bekabelde ethernetaansluiting een DHCP server te draaien.
Als je gebruik maakt van de DHCP server van je interne netwerk, dan voeg je de volgende regel toe aan /etc/dnsmasq.conf
dhcp-range=192.168.2.255,proxy
In deze regel zie je het IP-nummer 192.168.2.255 staan. Dat is het broadcast adres van mijn interne netwerk. Een broadcast adres eindigt altijd met .255 Heeft jouw computer bijvoorbeeld IP-adres 192.168.1.189, dan vul je op deze regel als broadcastadres 192.168.1.255 in.
Als je gebruik wilt maken van de DHCP server van dnsmasq, dan betekent dit dat je de DHCP server van je interne netwerk moet uitzetten of je configureert een tweede netwerkkaart op je PXE server die je verder niet gebruikt. Je voegt de volgende regels toe aan /etc/dnsmasq.conf
interface=enp0s8 bind-interfaces dhcp-option=option:router,10.39.94.1 dhcp-option=option:dns-server,10.39.94.1 dhcp-range=enp0s8,10.39.94.201,10.39.94.250,1h
In regel 1 geef je hier de naam van de netwerkkaart aan die je wilt gebruiken voor de PXE server. Met het commando ip addr kun je zien welke namen de netwerkkaarten in je computer hebben. De namen van bedrade netwerkkaarten beginnen meestal met een e. De reeks van de IP adressen die de DHCP server uitgeeft staat vermeld in regel 5. Het IP-adres 10.39.94.1 (regels 3 en 4) is het vaste IP-adres dat ik aan de 2e netwerkkaart heb gegeven. Een vast IP-adres is onder andere te configureren in het bestand /etc/network/interfaces. Met als voorbeeld netwerkkaart enp0s8 en IP-adres 10.39.94.1 voeg je de volgende regels toe aan dit bestand (als dit nog niet ingesteld is):
auto enp0s8 iface enp0s8 inet static address 10.39.94.1 netmask 255.255.255.0 broadcast 10.39.94.255 network 10.39.94.0
Herlaad vervolgens de configuratie van je netwerkkaart met:
ifdown enp0s8 ifup enp0s8
De basis configuratie van dnsmasq is nu klaar. Herstart dnsmasq met:
systemctl reload dnsmasq
De configuratie van je PXE server is nu afgerond. De verdere configuratie betreft de specifieke operating systemen en utility’s die je via de PXE server wilt aanbieden. Als je aan de gang bent met de configuratie van deze systemen, is het handig om een scherm open te zetten waarin je het onderstaande commando uitvoert. De uitvoer van dit commando (zie afbeelding hieronder) geeft je veel informatie over eventuele configuratiefouten van de systemen die je via de PXE server wilt aanbieden.
journalctl -u dnsmasq.service -f
Raspberry Pi 4 vanaf netwerk starten
Als eerste wil ik melden de ondersteuning van het vanaf het netwerk starten van de Raspberry Pi nog experimenteel is. Dit betekent dat er een kans is dat nog niet alles helemaal goed gaat. Ik heb zelf meerdere websites met instructies bekeken voordat ik er een gevonden had die bij mij werkte, zie hier. Dit deel van deze workshop is gebaseerd op de opdrachten die bij deze beschrijving gegeven worden.
Voorbereiden Raspberry Pi voor netwerk boot
Een nieuwe Raspberry Pi is niet dusdanig geconfigureerd dat deze vanaf het netwerk kan starten. Dit betekent dat je de eprom waarop de bootloader staat moet aanpassen. Hiervoor voer je de volgende stappen uit.
cd /home/pi
cp /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-06-15.bin /home/pi/pieeprom.bin
rpi-eeprom-config pieeprom.bin > bootconf.txt
rpi-eeprom-config --out netboot-pieeprom.bin --config bootconf.txt pieeprom.bin
sudo rpi-eeprom-update -d -f ./netboot-pieeprom.bin
Voor de configuratie op de bootserver hebben we van de Raspberry Pi het serienummer nodig. Dit nummer lees je uit door middel van het uitvoeren van het volgende commando:
cat /proc/cpuinfo
Voor het opstarten vanaf het netwerk zijn van dit serienummer de laatste 8 posities nodig.
Configureren server
Je gaat nu de server installeren en configureren zodat de Raspberry Pi in het vervolg vanaf deze server kan opstarten. Om het geheel makkelijker te maken heb ik de commando’s die nodig zijn in een bash script gezet zodat je met een paar opdrachten het server deel van het voor van het netwerk opstarten van de Raspberry Pi kunt configureren.
chmod u+x netboot_rpi4_install.sh
./netboot_rpi4_install.sh 2020-02-13-raspbian-buster.img db03eb64 10.39.94.1
Toelichting script per relevante regel:
4: Maakt een directory aan voor de eerste Raspberry Pi (iedere Raspberry Pi heeft een eigen directory nodig).
5, 8 en 9: Met kpartx maak je virtuele opslagmedia aan die je weer vervolgens kunt mounten.
10: Kopieer de inhoud van het Raspberry Pi OS naar de directory waarin voor de eerste Raspberry Pi het besturingssysteem opgeslagen wordt.
11: Idem voor de boot bestanden.
13 en 14: De directory /tftpboot/serienummer verwijst naar de inhoud van /nfs/raspi1/boot
16: Dit maakt het inloggen via SSH mogelijk.
17: Verwijder alle harde schijf gerelateerde verwijzingen uit het bestand /etc/fstab voor de Raspberry Pi.
18: Geef de Raspberry Pi op welk IP-nummer ($3) en in welke directory het besturingssysteem voor de Raspberry Pi staat.
19: Maak een NFS share voor de bestanden die de Raspberry Pi gaat gebruiken.
22: Voeg aan /etc/dnsmasq.conf de service voor het via het netwerk opstarten van de Raspberry Pi toe.
Nu is het tijd om je Raspberry Pi zonder SD kaartje opnieuw op te starten. Als het goed is, start deze dan via het netwerk op.
PC (bios) vanaf netwerk starten
De configuratie om een PC vanaf het netwerk te starten verschilt met die van een Raspberry Pi. Om een PC te kunnen opstarten via het netwerk voeg je de onderstaande regel toe aan /etc/dnsmasq.conf zodat je met een conventionele bios via het netwerk kunt booten.
pxe-service=x86PC, "Bootmenu PC’s (bios mode) via netwerk",pxelinux
Als je ook een Raspberry Pi van het netwerk wilt booten, moet de bovenstaande regel onder pxe-service=0,”Raspberry Pi Boot” staan.
Om de bootloader via het netwerk ter beschikking te stellen installeer je nu het syslinux en pxelinux met:
apt install syslinux pxelinux
De opdrachten uit listing 2 zorgen ervoor dat de bestanden en programma’s die ervoor zorgen dat je via het netwerk kunt opstarten in de /srv/tftp directory komen te staan. In bovenstaande afbeelding zie je een schermafdruk van de directory /srv/tftp waarin nu alle benodigde bestanden voor het opstarten van een PC via het netwerk.
De laatste stap betreft nu het aanmaken van een configuratiebestand van de software die je via netwerk boot wilt aanbieden. Wil je dat alle computers hetzelfde configuratiebestand aangeboden krijgen, dan maak je het bestand /srv/tftp/pxelinux.cfg/default aan. Per computer een apart bestand aanbieden kan ook. Zie deze link onder configuration. Het default bestand is het laatste bestand dat geladen wordt om een configuratie op te halen. Bestaan er (computer) specifiekere bestanden, dan wordt zo’n bestand geladen. Een voorbeeld van een configuratiebestand is in onderstaande afbeelding opgenomen. Je ziet dat er verschillende mogelijkheden in dit configuratiebestand gebruikt worden.
De belangrijkste opties licht ik hieronder toe:
– default vesamenu.c32: bepaalt de weergave van het menu.
– timeout 300: Het aantal tienden seconden voordat zonder keuze een menu optie gestart wordt in geval van meerdere menu keuzes.
– label: Toelichting op de menu optie.
– menu: Een keuze optie om iets te booten.
– kernel: Het bestand dat geboot moet worden. Dit is bijvoorbeeld een Linux kernel, zoals bijvoorbeeld bij CloneZilla.
– append: Voegt één of meerdere opties toe voor het opstarten van de kernel.
– ^: Hiermee maak je een snel keuze voor het toetsenbord voor een menu optie.
In de vorige afbeelding valt tevens op dat bij Debian geen label staat. Dit komt omdat bij deze menu optie gebruik gemaakt wordt van de menu bestanden die Debian standaard aanlevert. Van de bestanden die in die directory staan, moet nog wel het pad aangepast worden.
De configuratie van de menu opties is in het begin best wel complex en het vergt soms ook het nodige uitzoekwerk. Alle bestanden en images van utility’s en Linux distributie(s) die nodig zijn voor de menu opties die jij wilt gaan gebruiken kopieer je naar een subdirectory van de directory /srv/tftp/systems/amd64. In de links hieronder staat de configuratie van een aantal utility’s en Linux distributies beschreven.
Debian: Onderaan : hoofdstuk 4.5.4. De netboot.tar.gz download je via deze link. Deze Debian netboot installer is een voorbeeld van een zeer klein image (36 Mb) dat verder alles van het internet haalt.
Na configuratie is het tijd je computer op te starten via het netwerk. Als het goed is krijg je nu op je scherm het bovenstaande (als je ook Raspberry Pi wilt laten booten van het netwerk) en het onderstaande te zien.
Snel en eenvoudig aan de slag
Configureren van een PXE server kost in het begin best wat tijd en is redelijk complex als je dit nog nooit eerder hebt gedaan. Daarom heb ik behorend bij deze workshop een VirtualBox image gemaakt waarin de Raspberry Pi boot en de in het menu opgenomen utility’s en Linux systemen zijn geïnstalleerd. Als je een computer hebt die wifi en een vaste netwerkaansluiting heeft, zou dit VirtualBox image zonder vrij veel problemen meteen moeten draaien. Voorwaarde hierbij is dat je de internet toegang voor deze computer dan via wifi doet en via de vaste netwerk aansluiting de computers aansluit die je via het netwerk wilt opstarten. Via https://bit.ly/2OrdLaF download je het Virtualboxbestand (12Gb). In deze link is toelichting op het gebruik daarvan opgenomen.
Tot slot
Ik hoop dat je aan de hand van deze workshop in staat bent je eigen PXE server in te richten. Er zijn veel meer mogelijkheden dan ik in deze workshop besproken heb. De ruimte ontbrak om in deze workshop in te gaan op PXE boot voor UEFI systemen. Laat het de redactie weten als hier interesse voor is voor een artikel hierover in een komend nummer van Linux Magazine.