FreeBSD handboek
Terug | Hoofdstuk 32. Geavanceerde netwerken | Volgende

# 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 minstens twee manieren om de kernel over het netwerk te laden:

  - PXE: De Intel® Preboot eXecution Environment is een vorm een smart boot ROM dat in sommige netwerkkaarten en moederborden is ingebouwd. Bekijk de hulppagina pxeboot(8) voor meer informatie.

  - De poort Etherboot (`net/etherboot`) maakt code aan dat naar een ROM geschreven kan worden en dat kernels over het netwerk opstart. De code kan òfwel naar een opstart-PROM op een netwerkkaart geflashed worden, òfwel van een floppy (of harde) schijf geladen worden, òfwel van een draaiend MS-DOS® systeem geladen worden. Vele netwerkkaarten worden ondersteund.

- Een voorbeeldscript (`/usr/share/examples/diskless/clone_root`) vergemakkelijkt het aanmaken en beheren van het root bestandssysteem van het werkstation op de server. Het kan nodig zijn dat het script wat aangepast moet worden, maar het zorgt voor een snelle start.

- Er bestaan standaardbestanden voor het opstarten van het systeem in `/etc` om een systeemstart zonder schijf te detecteren en te ondersteunen.

- Het gebruik van een wisselbestand, indien nodig, kan worden gedaan naar òfwel een NFS bestand òfwel naar een plaatselijke schijf.

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:

- De schijfloze werkstations gebruiken een gedeeld bestandssysteem voor `/`, dat alleen gelezen kan worden, en een gedeeld bestandssysteem voor `/usr`, dat eveneens alleen gelezen kan worden.

  Het root-bestandssysteem is een kopie van een standaard root-bestandssysteem voor FreeBSD (typisch van een server), waarbij enkele instellingenbestanden zijn overschreven door versies die specifiek zijn voor een schijfloos systeem of, mogelijk, door het werkstation horen waar ze bij horen.

  De delen van het root-bestandssysteem die beschrijfbaar moeten zijn, zijn overdekt met md(4) bestandssystemen. Alle veranderingen gaan verloren indien het systeem opnieuw wordt opgestart.

- De kernel is overgedragen en òfwel met Etherboot òfwel met PXE geladen, aangezien sommige situaties het gebruik van één van de methodes kan eisen.

> 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:

- Opties die tijdens het compileren zijn opgegeven kunnen verschillend gedrag tonen tijdens het draaien.

- Foutmeldingen zijn vaak cryptisch of geheel afwezig.

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:

- De machine moet een aantal initiële parameters zoals het IP-adres, de bestandsnaam van de executable, de naam van de server, en het root-pad verkrijgen. Dit wordt gedaan door gebruik te maken van de DHCP of BOOTP protocollen. DHCP is een compatible uitbreiding van BOOTP, het gebruikt dezelfde poorten en het pakketformaat heeft dezelfde basis.

  Het is mogelijk om een systeem in te stellen zodat het alleen BOOTP gebruikt. Het serverprogramma bootpd(8) wordt met het basissysteem van FreeBSD meegeleverd.

  DHCP biedt echter een aantal voordelen boven BOOTP (fijnere instellingenbestanden, mogelijkheid om PXE te gebruiken, en vele anderen die niet direct verband houden met schijfloos werken), er zal hoofdzakelijk een opstelling met DHCP worden beschreven, met analoge voorbeelden voor bootpd(8) indien mogelijk. De voorbeeldopstelling zal het softwarepakket van ISC DHCP gebruiken (versie 3.0.1.r12 was geïnstalleerd op de testserver).

- De machine moet één of meerdere programma's naar het plaatselijke geheugen versturen. Eén van TFTP of NFS wordt gebruikt. De keuze tussen TFTP en NFS is op verschillende plaatsen een optie tijdens het compileren. Een veelgemaakte fout is het opgeven van bestandsnamen voor het verkeerde protocol: TFTP verstuurd typisch alle bestanden vanuit één map op de server, en verwacht dat alle bestandsnamen relatief aan deze map zijn; NFS verwacht absolute bestandspaden.

- De mogelijke tussentijdse opstartprogramma's en de kernel dienen geïnitialiseerd en uitgevoerd te worden. Er zijn enkele belangrijke variaties op dit gebied:

  - PXE zal pxeboot(8) laden, wat een aangepaste versie is van de lader voor stage drie van FreeBSD. loader(8) zal de meeste parameters verkrijgen die noodzakelijk zijn om het systeem op te starten, en zal ze in de kernelomgeving laten staan voordat het de controle overdraagt. Het is in dit geval mogelijk om een `GENERIC` kernel te gebruiken.

  - Etherboot zal met minder voorbereiding direct de kernel laden. Hiervoor is het noodzakelijk om een kernel met specifieke opties te bouwen.

  PXE en Etherboot werken beide even goed; echter, omdat kernels normaalgesproken meer werk overlaten aan loader(8), is PXE de te verkiezen methode.

  Indien het BIOS en de netwerkkaarten PXE ondersteunen, dient dat waarschijnlijk gebruikt te worden.

- Tenslotte: de machine heeft toegang tot de bestandssystemen nodig. NFS wordt in alle gevallen gebruikt.

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;
      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;
        filename "/data/misc/kernel.diskless";
        option root-path "192.168.4.4:/data/misc/diskless";
      }
      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";
      }
    }

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

Terug | Begin | Volgende
Verbindingsaggregatie en failover | Omhoog | Met PXE en een NFS-root-bestandssysteem opstarten