FreeBSD handboek
Terug | Hoofdstuk 32. Geavanceerde netwerken | Volgende

# 32.8. Met PXE en een NFS-root-bestandssysteem opstarten

Geschreven door Craig Rodrigues.

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.

## 32.8.1. De `chroot`-omgeving voor het NFS-root-bestandssysteem instellen

1. 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}

2. Stel de NFS-server in door de instructies in Paragraaf 30.3.2 op te volgen.

3. Exporteer de map via NFS door het volgende aan `/etc/exports` toe te voegen:

       /b -ro -alldirs

4. Herstart de NFS-server:

       # /etc/rc.d/nfsd restart

5. Stel inetd(8) in door de stappen zoals in Paragraaf 30.2.2 beschreven op te volgen.

6. Voeg de volgende regel toe aan `/etc/inetd.conf`:

       tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot

7. Herstart inetd:

       # /etc/rc.d/inetd restart

8. Herbouw de kernel en userland van FreeBSD:

       # cd /usr/src
       # make buildworld
       # make buildkernel

9. Installeer FreeBSD in de map die over NFS is aangekoppeld:

       # make installworld DESTDIR=${NFSROOTDIR}
       # make installkernel DESTDIR=${NFSROOTDIR}
       # make distribution DESTDIR=${NFSROOTDIR}

10. 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

11. Voeg een regel aan `${NFSROOTDIR}/etc/fstab` toe om het root-bestandssysteem over NFS aan te koppelen:

        # Device                                            Mountpoint    FSType   Options  Dump Pass
        mijnhost.voorbeeld.com:/b/tftpboot/FreeBSD/install      /         nfs      ro        0    0

    Vervang `mijnhost.voorbeeld.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.

12. 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.

13. 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).

14. 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

## 32.8.2. Geheugenbestandssystemen die gebruikt worden door `/etc/rc.initdiskless` configureren

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.

## 32.8.3. Een DHCP-server prepareren

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.

1. 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.

2. 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 "voorbeeld.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/" ;
       }

## 32.8.4. De PXE-cliënt configureren en verbindingsproblemen opsporen

1. 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.

2. Gebruik de poort `net/wireshark` om netwerkverkeer van DHCP en TFTP te onderzoeken op eventuele problemen.

3. 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.

4. 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

5. 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`.

6. Lees pxeboot(8) en loader(8).

Terug | Begin | Volgende
Schijfloos werken | Omhoog | ISDN