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.

  1. Ga naar de home-directory van de gebruiker pi:
cd /home/pi
  1. Kopieer de pieeprom met de jongste datum uit /lib/firmware/raspberrypi/bootloader/stable naar /home/pi, bijvoorbeeld:
cp /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-06-15.bin /home/pi/pieeprom.bin
  1. Haal de configuratie uit het bestand van de eprom:
rpi-eeprom-config pieeprom.bin > bootconf.txt
  1. Verander in bootconf.txt de tekst achter BOOT_ORDER= in 0x21
    De waarde 0x21 betekent dat de Raspberry Pi eerst van SD kaart probeert te booten en daarna via het netwerk.
  2. Maak nu een nieuwe pieeprom waarin de gewijzigde bootvolgorde opgenomen is:
rpi-eeprom-config --out netboot-pieeprom.bin --config bootconf.txt pieeprom.bin
  1. Schrijf de nieuwe bootloader weg op de eeprom:
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.

  1. Ga naar de /tmp directory: cd /tmp
  2. Neem listing 1 over of download het installatie- en configuratiescript (zie ook listing 1) via https://bit.ly/2OrdLaF
    Geef het script de naam netboot_rpi4_install.sh.
    3. Geef het script rechten om uit te voeren:

chmod u+x netboot_rpi4_install.sh

 

  1. Installeer het unzip programma: apt install unzip
  2. Download Raspberry Pi OS:
    wget https://downloads.raspberrypi.org/raspbian_latest
  3. Pak Raspberry Pi OS uit: unzip raspbian_latest
    Tijdens het uitpakken zie je onder welke bestandsnaam Raspberry Pi OS weggeschreven wordt.
  4. Start het installatiescript als onderstaand op waarbij je bij de parameters achter netboot_rpi4_install.sh aanpast aan de gegevens die voor jou van toepassing zijn. De eerste parameter is de naam van het Raspberry Pi OS, de tweede parameter is het serienummer van je Raspberry Pi en de derde parameter is het IP-adres van de PXE server.
./netboot_rpi4_install.sh 2020-02-13-raspbian-buster.img db03eb64 10.39.94.1
Bestandsnaam bij unzippen

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.

Raspberry Pi is opgestart via netwerk

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

Inhoud srv tftp directory

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.

Voorbeeld default bestand

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.

Memtest

Clonezilla live

Gparted

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.

Ubuntu 20.04 LTS

Keuzemenu voor raspberry pi of pc boot

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.

Keuzemenu PC boot

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.