Het Preboot eXecution Environment (PXE) van Intel® maakt het mogelijk om het besturingssysteem over het netwerk op te starten. Ondersteuning voor PXE wordt normaliter aangeboden in het BIOS van moderne moederborden, waar het kan worden aangezet in de instellingen van het BIOS wat opstarten over het netwerk mogelijk maakt. Een volledig werkende PXE-opstelling vereist ook correct geconfigureerde DHCP- en TFTP-servers.
Wanneer de gastheercomputer opstart, krijgt het informatie over DHCP over waar de intiële bootloader staat via TFTP. Nadat de gastheercomputer deze informatie heeft ontvangen, downloadt het de bootloader via TFTP en voert het vervolgens de bootloader uit. Dit is gedocumenteerd in sectie 2.2.1 van de Preboot Execution Environment (PXE) Specification. In FreeBSD is de bootloader die tijdens het PXE-proces wordt opgehaald /boot/pxeboot. Terwijl /boot/pxeboot wordt uitgevoerd, wordt de kernel van FreeBSD geladen en wordt er verder gegaan met de rest van de opstartprocedure van FreeBSD. Kijk voor meer informatie over het opstartproces van FreeBSD in Hoofdstuk 13.
Kies een map uit voor een installatie van FreeBSD die over NFS aangekoppeld kan worden. Bijvoorbeeld een map als /b/tftpboot/FreeBSD/install.
# export NFSROOTDIR=/b/tftpboot/FreeBSD/install # mkdir -p ${NFSROOTDIR}
Stel de NFS-server in door de instructies in Paragraaf 30.3.2 op te volgen.
Exporteer de map via NFS door het volgende aan /etc/exports toe te voegen:
/b -ro -alldirs
Herstart de NFS-server:
# /etc/rc.d/nfsd restart
Stel inetd(8) in door de stappen zoals in Paragraaf 30.2.2 beschreven op te volgen.
Voeg de volgende regel toe aan /etc/inetd.conf:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot
Herstart inetd:
# /etc/rc.d/inetd restart
Herbouw de kernel en userland van FreeBSD:
# cd /usr/src # make buildworld # make buildkernel
Installeer FreeBSD in de map die over NFS is aangekoppeld:
# make installworld DESTDIR=${NFSROOTDIR} # make installkernel DESTDIR=${NFSROOTDIR} # make distribution DESTDIR=${NFSROOTDIR}
Test dat de TFTP-server werkt en dat het de bootloader dat via PXE verkregen zal worden kan downloaden:
# tftp localhost tftp> get FreeBSD/install/boot/pxeboot Received 264951 bytes in 0.1 seconds
Voeg een regel aan ${NFSROOTDIR}/etc/fstab toe om het root-bestandssysteem over NFS aan te koppelen:
# Device Mountpoint FSType Options Dump Pass mijnhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0
Vervang mijnhost.example.com door de hostnaam of het IP-adres van uw NFS-server. In dit voorbeeld wordt het root-bestandssysteem als alleen-lezen aangekoppeld om te voorkomen dat NFS-cliënten per ongeluk de inhoud van het root-bestandssysteem wissen.
Stel het root-wachtwoord in voor de chroot(8)-omgeving.
# chroot ${NFSROOTDIR} # passwd
Dit stelt het root-wachtwoord in voor cliëntmachines die over PXE opstarten.
Maak root-logins over SSH mogelijk voor cliëntmachines die met PXE opstarten door ${NFSROOTDIR}/etc/ssh/sshd_config te bewerken en de optie PermitRootLogin aan te zetten. Dit is gedocumenteerd in sshd_config(5).
Pas andere wijzigingen toe aan de chroot(8)-omgeving in ${NFSROOTDIR}. Deze wijzigingen zouden het toevoegen van pakketten met pkg_add(1), het bewerken van het wachtwoordbestand met vipw(8) of het bewerken van amd.conf(5)-projecties voor automatisch aankoppelen kunnen zijn. Bijvoorbeeld:
# chroot ${NFSROOTDIR} # pkg_add -r bash
Als u vanaf een NFS-rootvolume opstart, detecteert /etc/rc dat u over NFS opstartte en draait het het script /etc/rc.initdiskless. Lees het commentaar in dit script om te begrijpen wat er gebeurt. Het is nodig om /etc en /var geheugen-backed te maken omdat deze mappen schrijfbaar moeten zijn, maar de NFS-rootmap is alleen-lezen.
# chroot ${NFSROOTDIR} # mkdir -p conf/base # tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc # tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var
Wanneer het systeem opstart, zullen er geheugen-bestandssystemen voor /etc en /var worden aangemaakt en aangekoppeld, en zal de inhoud van de cpio.gz-bestanden er naartoe worden gekopieerd.
PXE heeft een geprepareerde TFTP-server en DHCP-server nodig. De DHCP-server hoeft niet per së dezelfde machine te zijn als de TFTP-server, maar het dient bereikbaar te zijn in uw netwerk.
Installeer de DHCP-server door de instructies op te volgen zoals beschreven in Paragraaf 30.5.7. Zorg ervoor dat /etc/rc.conf en /usr/local/etc/dhcpd.conf correct zijn geconfigureerd.
Stel in /usr/local/etc/dhcpd.conf next-server, filename en option root-path in om het IP-adres van uw TFTP-server, het pad naar /boot/pxeboot en het pad naar het NFS-root-bestandssysteem op te geven. Hier is een voorbeeld van de instellingen voor dhcpd.conf:
subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.2 192.168.0.3 ; option subnet-mask 255.255.255.0 ; option routers 192.168.0.1 ; option broadcast-address 192.168.0.255 ; option domain-name-server 192.168.35.35, 192.168.35.36 ; option domain-name "example.com"; # IP-adres van TFTP server next-server 192.168.0.1 ; # pad van bootloader verkregen via TFTP filename "FreeBSD/install/boot/pxeboot" ; # pxeboot bootloader zal proberen om deze map te NFS-mounten voor root-FS option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/" ; }
Ga naar het BIOS-configuratiemenu wanneer de cliëntmachine opstart. Stel het BIOS zo in dat het van het netwerk opstart. Indien alle vorige configuratiestappen correct zijn, zou alles "gewoon" moeten werken.
Gebruik de poort net/wireshark om netwerkverkeer met betrekking tot het PXE-opstartproces te debuggen, wat geïllustreerd is in onderstaand diagram. In Paragraaf 32.8.3 is een voorbeeldconfiguratie gegeven waarbij de DHCP-, TFTP- en NFS-servers op dezelfde machine staan. Deze servers kunnen echter op verschillende machines staan.
Figuur 32-1. PXE-opstartproces met NFS-root-mount
Controleer dat het bestand pxeboot via TFTP kan worden verkregen. Kijk op uw TFTP-server in /var/log/xferlog om er zeker van de zijn dat het bestand pxeboot van de juiste locatie is opgehaald. Om de configuratie met bovenstaande dhcpd.conf te testen:
# tftp 192.168.0.1 tftp> get FreeBSD/install/boot/pxeboot Received 264951 bytes in 0.1 seconds
Lees tftpd(8) en tftp(1). De BUGS secties in deze pagina's documenteren enkele beperkingen van TFTP.
Controleer dat het root-bestandssysteem via NFS kan worden aangekoppeld. Om de configuratie met bovenstaande dhcpd.conf te testen:
# mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt
Lees de code in src/sys/boot/i386/libi386/pxe.c om te begrijpen hoe de pxeboot-lader variabelen als boot.nfsroot.server en boot.nfsroot.path instelt. Deze variabelen worden vervolgens gebruikt in de root-aankoppelcode voor diskvrij NFS in src/sys/nfsclient/nfs_diskless.c.
Lees pxeboot(8) en loader(8).