NFS-Root Mini-Howto

Andreas Kostyrka, andreas@ag.or.at, Vertaald door: Ellen Bokhorst, bokkie@nl.linux.org V8, 8 augustus 1997

In deze Mini-HOWTO zal worden geprobeerd een uitleg te geven hoe een Linux werkstation zonder harddisk in te stellen, welke zijn rootbestandssysteem via NFS mount. De nieuwste versie van deze Mini-Howto is altijd te

vinden in ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root of op een sunsite mirror in de

buurt.

Inhoudsopgave

1 Copyright 2 1.1 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Algemeen overzicht 2

3 Setup van de server 3 3.1 De kernels compileren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.2 Aanmaak van het rootbestandssysteem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3.2.1 Kopiëren van het bestandssysteem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.2.2 Wijzigingen aan het rootbestandssysteem . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.2.3 Exporteren van het bestandssysteem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2.4 RARP setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2.5 BOOTP setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2.6 Het hardware-adres achterhalen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4 Het werkstation booten 5 4.1 Gebruiken van een bootrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.2 Een raw kerneldisk gebruiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.3 Gebruik van een bootloader & RARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.4 Een bootloader met RARP gebruiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

5 Bekende problemen 6 5.1 /sbin/init start niet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5.2 /dev problemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

6 Andere onderwerpen 6

1 Copyright

(c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at of andreas@ag.or.at)

Tenzij anders aangegeven, vallen HOWTO-documenten onder het copyright van hun respectieve auteurs. Linux HOWTO documenten mogen geheel of gedeeltelijk worden gereproduceerd en gedistribueerd, via elk fysiek of elektronisch medium, zolang deze copyright-melding op alle kopieën behouden blijft. Commerciële herdistributie is toegestaan en wordt aangemoedigd; de auteur zou echter graag van dergelijk distributies op de hoogte worden gebracht.

Alle vertalingen, afgeleide werken, of verzamelde werken aangaande enige Linux HOWTO-documenten moeten zijn voorzien van deze copyright-melding. Dat wil zeggen dat je geen afgeleide werken van een HOWTO mag produceren en aanvullende beperkingen op de distributie ervan mag opleggen. Uitzonderingen op deze regels kunnen onder bepaalde voorwaarden worden toegestaan; neem alsjeblieft contact op met de Linux HOWTO coördinator via het hieronder aangegeven adres.

In ’t kort, we willen verspreiding van deze informatie via zoveel mogelijk kanalen bevorderen. We willen echter dat het copyright op de HOWTO-documenten behouden blijft, en zouden graag op de hoogte worden gesteld van alle plannen om de HOWTO’s te herdistribueren.

Als je vragen hebt, neem dan alsjeblieft contact op met Andreas Kostyrka <mailto:andreas@ag.or.at>, de auteur van deze mini-HOWTO, of Tim Bynum, de Linux HOWTO coördinator, via email

<mailto:linux-howto@sunsite.unc.edu>.

1.1 Contributors

• Avery Pennarun <apenwarr@foxnet.net> (hoe zonder LILO te booten)

• Ofer Maor <ofer@hadar.co.il> (een betere mini-howto over het instellen van een werkstation zonder disk geleverd).

• Christian Leutloff <leutloff@sundancer.tng.oche.de> (info over netboot geleverd).

2 Algemeen overzicht

Over het algemeen gesproken komen de volgende problemen bij een werkstation om de hoek kijken:

• Het moet achter zijn eigen IP-adres en zonodig ook de rest van de Ethernet configuratie zien te komen.

• Het moet bekend zijn met de NFS-server en het mount path naar het rootbestandssysteem.

De huidige implementatie van NFSROOT in de Linux kernel (op ’t moment 1.3.7x) geeft de volgende mogelijke “oplossingen”:

• Het IP-adres kan worden achterhaald met RARP, of de volledige ethernet-configuratie kan aan de kernel worden doorgegeven via kernelparameters in LILO of LOADLIN.

• Het te mounten NFS-path kan via kernelparameters worden doorgegeven. Als dit niet wordt gedaan, gaat de kernel zowel uit van een RARP-server als ook een NFS-server, en maakt het voor wat betreft het path gebruik van de meegecompileerde standaardwaarden. (huidige standaardwaarde in de kernel:

     /tftpboot/<IP-adres van de machine >).

• De client configuratie kan worden achterhaald met BOOTP.

Voor je begint met het instellen van een omgeving zonder disk, zal je een beslissing moeten nemen of je via LILO óf LOADLIN zal gaan booten. Het voordeel hiervan is flexibliteit, het nadeel is snelheid. Een Linux kernel zonder LILO booten is sneller. Dit kan wel of geen overweging zijn.

3 Setup van de server

3.1 De kernels compileren

RARP ondersteuning in de kernel van de server zal vermoedelijk wel een goed idee zijn. Je moet het hebben als je zonder kernelparameters wilt booten. Aan de andere kant helpt het je niet als de client zich niet op hetzelfde subnet bevindt als de server.

De kernel voor het werkstation heeft minimaal het volgende meegecompileerd nodig:

• NFS-bestandssysteem meegecompileerd. (Er hoeft geen ondersteuning voor ext2 mee te hoeven gecompileerd, een module volstaat).

• “Root on NFS” moet worden geactiveerd.

• De Ethernet driver voor de netwerkkaart van het werkstation moet mee worden gecompileerd.

• Afhankelijk van wat je nodig hebt, kun je ondersteuning voor RARP of BOOTBP voor NFS-Root insluiten. (Hiermee bedoel ik de vragen die worden gesteld na de vraag over NFS in make config).

Als het werkstation zonder kernelparameters zal worden geboot, moet je ook het rootdevice instellen op 0:255. Doe dit door het aanmaken van een dummy apparaatbestand met mknod /dev/nfsroot b 0 255. Nadat je een dergelijk apparaatbestand hebt aangemaakt, kun je het rootdevice van de kernel-image instellen

met rdev <kernel-image > /dev/nfsroot.

3.2 Aanmaak van het rootbestandssysteem

3.2.1 Kopiëren van het bestandssysteem

Waarschuwing: ondanks dat deze instructies voor je zouden kunnen werken, zijn ze in geen enkele betekenis zinvol in een produktie-omgeving. Zie de NSF-Root-Client mini-howto van Ofer Maor <ofer@hadar.co.il> voor een betere manier om een rootbestandssysteem voor de clients in te stellen.

Nadat je hebt besloten waar de root-structuur te plaatsen, maak je het aan met (b.v.) mkdir -p

<directory > en tar cClf / - | tar xpCf <directory > -.

Als je de kernel zonder LILO boot, dan moet de rootdir /tftpboot/<IP-adres > zijn. Als je dit niet prettig vindt, kun je het wijzigen in de Makefile in de kernel-sources, zoek naar een regel als: NFS_ROOT = -DNFS_ROOT="\/tftpboot/%s\ Als je dit wijzigt, moet je de kernel opnieuw compileren.

3.2.2 Wijzigingen aan het rootbestandssysteem

Trim nu de niet benodigde bestanden, en controleer de /etc/rc.d scripts. Een aantal belangrijke punten:

• Één van de belangrijke zaken is de eth0 setup. Het werkstation bereikt op z’n minst gedeeltelijk een eth0 setup. In instellen van het IP-adres van het werkstation naar het IP-adres van de server wordt niet als slim aangemerkt. (Aangezien het de auteur gebeurde bij één van zijn eerste pogingen).

• Een ander punt is /etc/fstab van het werkstation. Het zou moeten zijn ingesteld voor nfs bestandssystemen.

• WAARSCHUWING: Verwar het rootbestandssysteem van de server niet met het rootbestandssysteem van het werkstation. (Ik heb reeds eerder een rc.inet1 op de server slordig ingesteld en ik vroeg me af waarom het werkstation nog steeds niet werkte).

3.2.3 Exporteren van het bestandssysteem

Exporteer de rootdir naar het werkstation. Zie exports(5). Zeer waarschijnlijk moet je de nfsd/mountd na deze wijziging opnieuw starten. Onder RedHat kan dit eenvoudig worden bewerkstelligd door het typen van

/etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start .

3.2.4 RARP setup

Stel RARP ergens op het net in. Als je zonder nfsroot parameter boot, moet de RARP-server de NFS-server zijn. Gewoonlijk zal dit de NFS-server worden. Om dit te kunnen doen, moet je een kernel draaien met ondersteuning voor RARP.

Voer het uit (en installeer het ergens in /etc/rc.d op de server!):

/sbin/rarp -s <ip-addr > <hardware-addr >

hier is

ip-addr het IP-adres van het werkstation en

hardware-addr het Ethernet-adres van de netwerkkaart van het werkstation.

voorbeeld: /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12

Je kunt in plaats van het IP-adres ook een symbolische naam gebruiken, zolang de server maar achter het IP-adres kan komen. (/etc/hosts of DNS lookups)

3.2.5 BOOTP setup

Voor een BOOTP setup moet je /etc/bootptab wijzigen. Raadpleeg alsjeblieft de manpages van bootpd(8) en bootptab(5).

3.2.6 Het hardware-adres achterhalen

Ik weet het hardware-adres niet! Hoe kom ik daar achter?

• Boot de gemaakte kerneldisk, en kijk naar een regel waar de netwerkkaart wordt herkend. Het bevat gewoonlijk 6 hex bytes, dat het adres van de kaart zou moeten zijn.

• Boot het werkstation met een OS met waarbij TCP/IP networking is geactiveerd. Ping dan het werkstation vanaf de server. Kijk in de ARP-cache door het opstarten van: /sbin/arp -a

4 Het werkstation booten

4.1 Gebruiken van een bootrom

Aangezien ik iets dergelijks zelf nog niet hebt gebruikt, kan ik je slechts de volgende tips geven (Christian

Leutloff <leutloff@sundancer.tng.oche.de> was zo vriendelijk):

• Je kunt geen gebruik maken van de “gewone” bootroms.

• Er is een netboot packet van Gero Kuhlmann, dat voorziet in bootroms voor Linux en verdere informatie. netboot is beschikbaar vanaf de lokale Linux mirror, of als het Debian package (netboot-0.4).

• Lees de documentatie die met je bootrom wordt geleverd zorgvuldig door.

• Je zal waarschijnlijk de tftpd op de server moeten activeren, maar dit is afhankelijk van de wijze waarop de bootrom de kernel laadt.

• Alle informatie over bootrom verkopers van deze Linux variëteit,hiervoor genoemd, aangezien niet iedereen toegang heeft tot een prom brander :( (vooral in Europa, alwaar ik me bevind) is welkom, ik zal het hieraan toevoegen.

4.2 Een raw kerneldisk gebruiken

Als je het rootbestandssysteem met de juiste naam gezien de standaard benaming hebt geëxporteerd en je NFS-server ook de RARP-server is, (wat impliceert dat de boxen zich op hetzelfde subnet bevinden), dan kun je de kernel gewoon booten door een cat naar een disk. (Je moet het rootdevice in de kernel op 0:255 instelen). Hierbij wordt verondersteld dat de rootdirectory op de server /tftpboot/IP-adres is (deze waarde kan bij het compileren van de kernel worden gewijzigd).

4.3 Gebruik van een bootloader & RARP

Geef de kernel bij het booten alle benodigde parameters en voeg toe nfsroot=<server-ip-addr >:</path/to/mount >; hier is server-ip-addr het IP-adres van je NFSserver, en /path/to/mount het path naar de rootdirectory.

Tips:

• Overweeg bij gebruik van LILO gebruik te maken van de “lock” feature: Tik gewoonweg éénmaal de juiste parameters in en voeg er “lock” aan toe. Laat de volgende keer bij het booten de tijd van LILO verstrijken.

• Bij het genereren van een bootdisk specifiek voor een werkstation kun je ook de append= feature in lilo.conf gebruiken.

4.4 Een bootloader met RARP gebruiken

Geef in aanvulling op nfsroot een nfsaddrs=<wst-IP >:<srv-IP >:<gw-IP >:<netm-IP >:<hostname >

commandoregelargument voor de kernel. De kernel zal eth0 met de opgegeven parameters instellen:

wst-IP IP-adres van de computer srv-IP

IP-adres van de NFS-server

gw-IP gateway

netm-IP netmask

hostname computernaam

5 Bekende problemen

5.1 /sbin/init start niet

Een bekend probleem met /sbin/init, dat bij (tenminste) een aantal huidige distributies wordt geleverd, is dat /sbin/init dynamisch is gelinkt. Dus je moet voor de client in een juiste /lib setup voorzien. Wat eenvoudig is te doen is /sbin/init (voor de client) proberen te vervangen door een statisch gelinkt “Hello World” programma. Op deze manier weet je of het iets fundamenteels is, of “gewoon” een probleem dat te maken heeft met het dynamische linken.

5.2 /dev problemen

Als je bij het booten een aantal onjuist weergegeven meldingen krijgt over tty’s, dan zou je vanaf de client in de /dev directory MAKEDEV uit kunnen voeren. Er gaan geruchten dat dit met bepaalde server os’sen die gebruik maken van 64-bit dev nummers niet werkt. Mocht dit je overkomen, mail me dan alsjeblieft met welk os je problemen ervaart. Een mogelijke oplossing is het aanmaken van een kleine /dev ramdisk aan het begin van het bootproces en het iedere keer herinstalleren van de device nodes.

6 Andere onderwerpen

   • Er is een BOOTP client: ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz Met

initrd (welk in Linux 2.0 is opgenomen), zou het mogelijk moeten zijn het voor stations zonder harddisk heel aardig werkend te krijgen. initrd is eigenlijk altijd een geavanceerde optie voor meer aangepaste setups.

• Voor gewone op bootpd gebaseerde boots is dit in feite waarschijnlijk niet nodig aangezien Linux 2.0 ook de optie bevat om BOOTP te gebruiken in plaats van RARP. (Wat nauwkeuriger, je kunt beiden in de kernel compileren, en de snellere response wint).

• In de directory Documentation van de kerelsource komt een bestand voor dat NFS-Root systemen bedocumenteert.

• Er is een patch in omloop, waarmee swappen via NFS mogelijk is. Het werd me toegezonden, maar ik kreeg het op één of andere manier voor elkaar de mail kwijt te raken. :( Je kunt er waarschijnlijk aan komen vanaf http://www.linuxhq.com/ in de onofficiële sectie met patches.

• Mijn PGP public key kan worden afgevangen door het commando finger te geven met als adres andreas@ag.or.at. De fingerprint is: F1 F7 43 D5 07 C4 6C 87 BF 6B 33 A2 2C EE 5A F9.