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.
Het 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"; } }
Deze optie vertelt dhcpd
om de waarde die in de verklaringen voor
| |
De aanwijzing | |
De aanwijzing | |
De optie |
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
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 -romargaux 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, De FreeBSD-kernel instellen) en gekopieerd te worden naar de
plaats die in dhcpd.conf
is
aangegeven.
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
.
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.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.