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.
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).
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"; } }
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
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.
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.
Indien PXE of Etherboot gebruikt wordt, welke is ingesteld om TFTP te gebruiken, is het nodig om tftpd op de bestandsserver aan te zetten:
Maak een map aan van waaruit tftpd de bestanden serveert, bijvoorbeeld /tftpboot.
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.
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:
# service 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.
Voeg het volgende toe aan /etc/rc.conf:
nfs_server_enable="YES"
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
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.
# service mountd restart
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"
Er dient een root-bestandssysteem voor de schijfloze werkstations op de plaats die als root-path in dhcpd.conf staat aangegeven aangemaakt te worden.
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.
Indien nodig kan een wisselbestand dat zich op de server bevindt via NFS worden benaderd.
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
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.
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.