32.7. Schijfloos werken

Bijgewerkt door Jean-François Dockès. Gereorganiseerd en uitgebreid door Alex Dupre.

Een FreeBSD-machine kan over het netwerk opstarten en zonder een plaatselijke schijf werken, door gebruik te maken van bestandssystemen die van een NFS-server aangekoppeld worden. Er zijn geen systeemwijzigingen nodig anders dan de standaard instellingenbestanden. Dit soort systemen is relatief eenvoudig op te zetten omdat alle noodzakelijke elementen al aanwezig zijn:

Er zijn vele manieren om een schijfloos werkstation op te zetten. Hierbij zijn veel elementen betrokken, en vele kunnen aan de eigen smaak worden aangepast. Het volgende beschrijft variaties met betrekking tot het installeren van een compleet systeem, waarbij de nadruk ligt op de eenvoud en de compatibiliteit met de standaard opstartscripts van FreeBSD. Het beschreven systeem heeft de volgende eigenschappen:

Let opHet systeem zoals hierboven beschreven is onveilig. Het dient in een beschermd gebied van een netwerk te functioneren, en niet vertrouwd te worden door andere hosts.

Alle informatie in deze sectie is getest met FreeBSD 5.2.1-RELEASE.

32.7.1. Achtergrondinformatie

Het installeren van schijfloze werkstations is zowel vrij rechttoe-rechtaan als foutgevoelig. Deze fouten zijn soms moeilijk vast te stellen wegens een aantal redenen. Bijvoorbeeld:

Op dit gebied is het bezit van wat achtergrondkennis over de gebruikte mechanismen zeer nuttig om mogelijke problemen op te lossen.

Voor een succesvol opstarten dienen verschillende handelingen uitgevoerd te worden:

Zie ook de hulppagina diskless(8).

32.7.2. Installatie-instructies

32.7.2.1. Instellen met behulp van ISC DHCP

De ISC DHCP server kan zowel verzoeken voor BOOTP als DHCP beantwoorden.

ISC DHCP 4.2 maakt geen deel uit van het basissysteem. Eerst dient de poort net/isc-dhcp42-server of het corresponderende pakket geïnstalleerd te worden.

Wanneer ISC DHCP is geïnstalleerd, heeft het een instellingenbestand nodig om te draaien (normaliter /usr/local/etc/dhcpd.conf genoemd). Hieronder volgt een voorbeeld met commentaar, waarbij host margaux gebruik maakt van Etherboot en corbieres gebruik maakt van PXE:

default-lease-time 600;
max-lease-time 7200;
authoritative;

option domain-name "example.com";
option domain-name-servers 192.168.4.1;
option routers 192.168.4.1;

subnet 192.168.4.0 netmask 255.255.255.0 {
  use-host-decl-names on; (1)
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.4.255;

  host margaux {
    hardware ethernet 01:23:45:67:89:ab;
    fixed-address margaux.example.com;
    next-server 192.168.4.4; (2)
    filename "/data/misc/kernel.diskless"; (3)
    option root-path "192.168.4.4:/data/misc/diskless"; (4)
  }
  host corbieres {
    hardware ethernet 00:02:b3:27:62:df;
    fixed-address corbieres.example.com;
    next-server 192.168.4.4;
    filename "pxeboot";
    option root-path "192.168.4.4:/data/misc/diskless";
  }
}
(1)
Deze optie vertelt dhcpd om de waarde die in de verklaringen voor host staan te versturen als de hostnaam voor de schijfloze host. Een andere mogelijkheid is om option host-name margaux binnen de verklaringen voor host op te nemen.
(2)
De aanwijzing next-server bepaalt de TFTP of NFS server die gebruikt moet worden voor het laden van het lader- of kernelbestand (standaard wordt dezelfde host als voor de DHCP-server gebruikt).
(3)
De aanwijzing filename bepaalt het bestand dat Etherboot of PXE gebruikt voor de volgende uitvoerstap. Het dient gespecificeerd te worden volgens de gebruikte verzendmethode. Voor Etherboot kan tijdens het compileren worden opgegeven of het NFS of TFTP moet gebruiken. De FreeBSD-poort stelt standaard NFS in. PXE gebruikt TFTP, vandaar dat hier een relatieve bestandsnaam wordt gebruikt (dit kan afhangen van de instellingen van de TFTP-server, maar het is de gewoonte). Verder geldt dat PXE pxeboot en niet de kernel laadt. Er zijn andere interessante mogelijkheden, zoals het laden van pxeboot vanuit de map /boot van een FreeBSD CD-ROM (aangezien pxeboot(8) de GENERIC kernel kan laden, bestaat de mogelijkheid om PXE te gebruiken om van een CDROM op afstand op te starten.
(4)
De optie root-path definieert het pad naar het root-bestandssysteem, in de gebruikelijke notatie van NFS. Indien PXE gebruikt wordt, is het mogelijk om het IP-adres van de host weg te laten zolang de kerneloptie BOOTP niet geactiveerd is. De NFS-server is dan dezelfde als die van TFTP.

32.7.2.2. Configuratie door gebruik van BOOTP

Hieronder staan de equivalente instellingen voor bootpd (gereduceerd tot één cliënt). Dit staat in /etc/bootptab.

Merk op dat Etherboot gecompileerd dient te worden met de afwijkende optie NO_DHCP_SUPPORT om BOOTP te gebruiken, en dat PXE DHCP nodig heeft. Het enige duidelijke voordeel van bootpd is dat het in het basissysteem zit.

.def100:\
  :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
  :sm=255.255.255.0:\
  :ds=192.168.4.1:\
  :gw=192.168.4.1:\
  :hd="/tftpboot":\
  :bf="/kernel.diskless":\
  :rp="192.168.4.4:/data/misc/diskless":

margaux:ha=0123456789ab:tc=.def100

32.7.2.3. Een opstartprogramma voorbereiden met Etherboot

De website van Etherboot bevat uitgebreide documentatie die over het algemeen is bedoeld voor Linux-systemen, maar die desalniettemin bruikbare informatie bevat. Het volgende geeft een samenvatting over hoe Etherboot op een FreeBSD-systeem te gebruiken.

Ten eerste dient het pakket of de poort net/etherboot geïnstalleerd te worden.

De instellingen van Etherboot (i.e., om TFTP in plaats van NFS te gebruiken) kunnen gewijzigd worden door het bestand Config in de bronmap van Etherboot te bewerken.

Hieronder zal een opstartdiskette gebruikt worden. Raadpleeg voor andere methoden (PROM, of een MS-DOS-programma) de documentatie van Etherboot.

Om een opstartdiskette te maken, dient er een diskette in het diskettestation van de machine aanwezig te zijn waarop Etherboot is geïnstalleerd, daarna dient er naar de map src in de mapboom van Etherboot gegaan te worden, en het volgende ingetypt te worden:

# gmake bin32/apparaatsoort.fd0

apparaatsoort hangt af van het soort Ethernetkaart dat in het schijfloze werkstation aanwezig is. Raadpleeg het bestand NIC in dezelfde map om het juiste apparaatsoort te bepalen.

32.7.2.4. Opstarten met PXE

Standaard laadt de lader pxeboot(8) de kernel via NFS. Het kan zodanig gecompileerd worden dat het TFTP gebruikt door de optie LOADER_TFTP_SUPPORT in /etc/make.conf te specificeren. Raadpleeg het commentaar in /usr/share/examples/etc/make.conf voor instructies.

Er zijn nog twee andere opties voor make.conf die nuttig kunnen zijn bij het opzetten van een schijfloze machine die als seriële console gebruikt wordt: BOOT_PXELDR_PROBE_KEYBOARD, en BOOT_PXELDR_ALWAYS_SERIAL.

Om PXE bij het opstarten van de machine te gebruiken, is het gewoonlijk nodig om de optie Boot from network in het BIOS te selecteren, of om een functietoets tijdens de initialisatie van de PC in te typen.

32.7.2.5. De TFTP en NFS servers instellen

Indien PXE of Etherboot gebruikt wordt, welke is ingesteld om TFTP te gebruiken, is het nodig om tftpd op de bestandsserver aan te zetten:

  1. Maak een map aan van waaruit tftpd de bestanden serveert, bijvoorbeeld /tftpboot.

  2. Voeg deze regel toe aan /etc/inetd.conf:

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

    Opmerking: Het schijnt dat sommige versies van PXE de TCP-versie van TFTP vereisen. In dit geval dient een tweede regel toegevoegd te worden, waarbij dgram udp door stream tcp vervangen wordt.

  3. inetd dient de instellingenbestanden opnieuw te lezen. De regel inetd_enable="YES" dient in het bestand /etc/rc.conf aanwezig te zijn voor de juiste werking van deze opdracht:

    # /etc/rc.d/inetd restart
    

De map tftpboot kan overal op de server geplaatst worden. De plaats dient zowel in inetd.conf als in dhcpd.conf ingesteld te worden.

In alle gevallen dient er ook voor gezorgd te worden dat NFS aanstaat en dat het juiste bestandssysteem op de NFS-server geëxporteerd wordt.

  1. Voeg het volgende toe aan /etc/rc.conf:

    nfs_server_enable="YES"
    
  2. Exporteer het bestandssysteem waar de schijfloze root-map zich bevindt door het volgende aan /etc/exports toe te voegen (pas het aankoppelpunt van het volume aan en vervang margaux corbieres door de namen van de schijfloze werkstations):

    /data/misc -alldirs -ro margaux corbieres
    
  3. mountd dient het instellingenbestand opnieuw te lezen. Indien het nodig was om NFS in /etc/rc.conf tijdens de eerste stap aan te zetten, is het waarschijnlijk gewenst om in plaats hiervan opnieuw op te starten.

    # /etc/rc.d/mountd restart
    

32.7.2.6. Een schijfloze kernel bouwen

Indien Etherboot gebruikt wordt, is het nodig om een kernelinstellingenbestand voor de schijfloze cliënt met de volgende opties (naast de gebruikelijke) aan te maken:

options	BOOTP		# Gebruik BOOTP om het IP-adres en de hostnaam te verkrijgen
options	BOOTP_NFSROOT	# NFS-mount het root-bestandssysteem door gebruik te maken van de informatie van BOOTP

Het kan ook gewenst zijn om BOOTP_NFSV3, BOOT_COMPAT, en BOOTP_WIRED_TO te gebruiken (raadpleeg hiervoor NOTES).

De namen van deze opties zijn historisch en enigszins misleidend aangezien ze eigenlijk onverschillig gebruik van DHCP en BOOTP in de kernel mogelijk maken (het is ook mogelijk om strikt gebruik van BOOTP of DHCP te forceren).

De kernel dient gebouwd te worden (zie Hoofdstuk 9) en gekopieerd te worden naar de plaats die in dhcpd.conf is aangegeven.

Opmerking: Indien PXE gebruikt wordt, is het bouwen van een kernel met bovenstaande opties niet strikt noodzakelijk (maar wel aangeraden). Door deze opties aan te zetten zullen er meer verzoeken voor DHCP tijdens het opstarten van de kernel verstuurd worden, met in sommige speciale gevallen een klein risico op inconsistentie tussen de nieuwe waarden en degenen die door pxeboot(8) zijn ontvangen. Het voordeel van het gebruik van deze opties is dat de hostnaam als een bijverschijnsel wordt ingesteld. In de andere gevallen dient de hostnaam op een andere manier ingesteld te worden, bijvoorbeeld in een cliënt-specifiek bestand rc.conf.

Opmerking: Om laadbaar te zijn met Etherboot, dienen de apparaataanwijzingen in de kernel gecompileerd te worden. Normaalgesproken wordt hiervoor de volgende optie in het instellingenbestand gebruikt (zie het instellingencommentaarbestand NOTES):

hints		"GENERIC.hints"

32.7.2.7. Het root-bestandssysteem voorbereiden

Er dient een root-bestandssysteem voor de schijfloze werkstations op de plaats die als root-path in dhcpd.conf staat aangegeven aangemaakt te worden.

32.7.2.7.1. make world gebruiken om het root-bestandssysteem te bevolken

Deze methode is snel en installeert een compleet maagdelijk systeem (niet alleen het root-bestandssysteem) in DESTDIR. Hiervoor dient slechts het volgende script uitgevoerd te worden:

#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make buildworld && make buildkernel
make installworld && make installkernel
cd /usr/src/etc; make distribution

Nadat dit gedaan is, kunnen /etc/rc.conf en /etc/fstab die in DESTDIR geplaatst zijn naar behoefte worden aangepast.

32.7.2.8. Swapruimte instellen

Indien nodig kan een wisselbestand dat zich op de server bevindt via NFS worden benaderd.

32.7.2.8.1. Swapruimte via NFS

De kernel biedt geen ondersteuning om swapruimte via NFS tijdens het opstarten aan te zetten. De swapruimte moet door de opstartscripts worden aangezet, door een beschrijfbaar bestandssysteem aan te koppelen en een wisselbestand aan te maken en aan te zetten. De volgende opdracht maakt een wisselbestand van de juiste grootte aan:

# dd if=/dev/zero of=/pad/naar/wisselbestand bs=1k count=1 oseek=100000

Om het aan te zetten dient de volgende regel aan /etc/rc.conf te worden toegevoegd:

swapfile=/pad/naar/wisselbestand

32.7.2.9. Diverse problemen

32.7.2.9.1. Draaien met een alleen-lezen /usr

Indien het schijfloze werkstation is ingesteld om X te draaien, is het nodig om het instellingenbestand van XDM te wijzigen, dat standaard het foutenlogboek in /usr plaatst.

32.7.2.9.2. Gebruik maken van een niet-FreeBSD-server

Indien de server voor het root-bestandssysteem geen FreeBSD draait, is het nodig om het root-bestandssysteem op een FreeBSD-machine aan te maken, en het daarna naar de bestemming te kopiëren, door gebruik te maken van tar of cpio.

In deze situatie zijn er af en toe problemen met de speciale bestanden in /dev, vanwege verschillen in de groottes van grote/kleine integers. Een oplossing voor dit probleem is om een map van de niet-FreeBSD-server te exporteren, deze map op een FreeBSD-machine aan te koppelen, en devfs(5) te gebruiken om de apparaatknooppunten transparant voor de gebruiker toe te wijzen.