<!doctype linuxdoc system>
<linuxdoc>
<article>

<!-- Title information -->
<titlepag>
<title>NFS-Root Mini-Howto</title>
<author><name>Andreas Kostyrka, andreas@ag.or.at,<newline>
Vertaald door: Ellen Bokhorst, bokkie@nl.linux.org</name></author>
<date>V8, 8 augustus 1997</date>
<abstract>
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
<tt>ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root</tt> of
op een sunsite mirror in de buurt.

</abstract>
</titlepag>

<toc>

<sect><heading>Copyright</heading>
<p>
(c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at of 
andreas@ag.or.at) </p>
<p>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&euml;n behouden blijft.
Commerci&euml;le herdistributie is toegestaan en wordt aangemoedigd; de
auteur zou echter graag van dergelijk distributies op de hoogte worden
gebracht.</p>

<p>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&ouml;rdinator via het hieronder aangegeven adres.</p>

<p>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.</p>

<p>Als je vragen hebt, neem dan alsjeblieft contact op met Andreas Kostyrka
&lt<tt/mailto:andreas@ag.or.at/&gt, de auteur van deze mini-HOWTO, of
Tim Bynum, de Linux HOWTO co&ouml;rdinator, via email 
&lt;<tt/mailto:linux-howto@sunsite.unc.edu/&gt;.</p>


<sect1><heading>Contributors</heading>
<p>
<itemize>
<item>
Avery Pennarun &lt<tt/apenwarr@foxnet.net/&gt (hoe zonder <bf>LILO</bf>
te booten)</item>
<item> 
Ofer Maor <tt/&lt;ofer@hadar.co.il&gt/ 
(een betere mini-howto over het instellen van een werkstation zonder disk
geleverd).</item>
<item>
Christian Leutloff <tt/&lt;leutloff@sundancer.tng.oche.de&gt/ 
(info over netboot geleverd).</item>
</itemize>
</p>
</sect1>
</sect>

<sect><heading>Algemeen overzicht</heading>
<p>
Over het algemeen gesproken komen de volgende problemen bij een
werkstation om de hoek kijken:
<itemize>
<item>Het moet achter zijn eigen IP-adres en zonodig ook
de rest van de Ethernet configuratie zien te komen.</item>
<item>
Het moet bekend zijn met de <em>NFS</em>-server en het mount path naar
het rootbestandssysteem.</item>
</itemize>
</p>
<p>De huidige implementatie van <em>NFSROOT</em> in de Linux kernel
(op 't moment 1.3.7x) geeft de volgende mogelijke ``oplossingen'':
<itemize>
<item>Het IP-adres kan worden achterhaald met <em/RARP/, of de volledige
ethernet-configuratie kan aan de kernel worden doorgegeven via kernelparameters
in <bf/LILO/ of <bf/LOADLIN/.</item>
<item>Het te mounten <em>NFS</em>-path kan via kernelparameters worden
doorgegeven.
Als dit niet wordt gedaan, gaat de kernel zowel uit van een
<em/RARP/-server als ook een <em/NFS/-server, en maakt het voor wat betreft
het path gebruik van de meegecompileerde standaardwaarden.
(huidige standaardwaarde in de kernel:
<tt>/tftpboot/&lt;<em>IP-adres van de machine</em>&gt;</tt>).</item>
<item>De client configuratie kan worden achterhaald met <em>BOOTP</em>.</item>
</itemize>
</p>

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


<sect>
<heading>Setup van de server</heading>
<sect1><heading>De kernels compileren</heading>
<p>
<em>RARP</em> 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.</p>
<p>
De kernel voor het werkstation heeft minimaal het volgende meegecompileerd
nodig:
<itemize>
<item> <em>NFS</em>-bestandssysteem meegecompileerd. (Er hoeft geen
ondersteuning voor <em>ext2</em> mee te hoeven gecompileerd, een module
volstaat).</item>
<item> ``Root on NFS'' moet worden geactiveerd.</item>
<item> De Ethernet driver voor de netwerkkaart van het werkstation
moet mee worden gecompileerd.</item>
<item> Afhankelijk van wat je nodig hebt, kun je ondersteuning voor
<em>RARP</em> of <em/BOOTBP/ voor NFS-Root insluiten. 
(Hiermee bedoel ik de vragen die worden gesteld na de vraag over NFS in 
make config).</item>
</itemize>
</p>

<p>
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 <tt>mknod /dev/nfsroot b 0 255</tt>. Nadat je
een dergelijk apparaatbestand hebt aangemaakt, kun je het rootdevice van de
kernel-image instellen met <tt>rdev &lt;<em/kernel-image/&gt; /dev/nfsroot</tt>.
</p>
</sect1>


<sect1>
<heading>Aanmaak van het rootbestandssysteem</heading>
<sect2>
<heading>Kopi&euml;ren van het bestandssysteem</heading>
<p>
<em>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
<tt>&lt;ofer@hadar.co.il&gt;</tt> 
voor een betere manier om een rootbestandssysteem voor de clients in te stellen.
</em></p>

<p>
Nadat je hebt besloten waar de root-structuur te plaatsen, maak je het aan
met (b.v.) <tt>mkdir -p &lt<em/directory/&gt</tt> en 
<tt>tar cClf / - | tar xpCf &lt;<em>directory</em>&gt; -</tt>.</p>
<p>
Als je de kernel zonder LILO boot, dan moet de rootdir
<tt>/tftpboot/&lt;<em/IP-adres/&gt;</tt> zijn. Als je dit niet prettig vindt,
kun je het wijzigen in de Makefile in de kernel-sources, zoek naar een
regel als:
<tt>NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\""</tt>
Als je dit wijzigt, moet je de kernel opnieuw compileren.
</p>
</sect2>

<sect2>
<heading>Wijzigingen aan het rootbestandssysteem</heading>
<p>
Trim nu de niet benodigde bestanden, en controleer de /etc/rc.d scripts. 
Een aantal belangrijke punten:
<itemize>

<item> &Eacute;&eacute;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 &eacute;&eacute;n van zijn eerste
pogingen).</item>

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

<item><bf>WAARSCHUWING</bf>: 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).
</item>
</itemize>
</p>
</sect2>

<sect2>
<heading>Exporteren van het bestandssysteem</heading>
<p>
Exporteer de rootdir naar het werkstation. Zie <tt/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
<tt>/etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start </tt>.</p>
</sect2>

<sect2>
<heading>RARP setup</heading>
<p>
Stel <em/RARP/ ergens op het net in. Als je zonder nfsroot parameter boot,
moet de <em>RARP</em>-server de <em>NFS</em>-server zijn.
Gewoonlijk zal dit de <em/NFS/-server worden. Om dit te kunnen doen, moet
je een kernel draaien met ondersteuning voor <em>RARP</em>.</p>
<p>
Voer het uit (en installeer het ergens in <tt>/etc/rc.d</tt> op de
server!):</p>
<p>
<tt>/sbin/rarp -s &lt<em/ip-addr/&gt &lt<em/hardware-addr/&gt</tt></p>
<p>hier is

<descrip>
<tag>ip-addr</tag>
<p>het IP-adres van het werkstation en</p>
</descrip>

<descrip>
<tag>hardware-addr</tag>
<p>het Ethernet-adres van de netwerkkaart van het
werkstation.</p>
</descrip>
</p>
<p>
      voorbeeld: <tt>/sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12</tt>
</p>
<p>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 <em>DNS</em> lookups)</p>
</sect2>

<sect2>
<heading>BOOTP setup</heading>
<p>
Voor een <em/BOOTP/ setup moet je <tt>/etc/bootptab</tt> wijzigen. Raadpleeg
alsjeblieft de manpages van <em>bootpd(8)</em> en <em>bootptab(5)</em>.
</p>
</sect2>

<sect2>
<heading>Het hardware-adres achterhalen</heading>
<p>
Ik weet het hardware-adres niet! Hoe kom ik daar achter?
<itemize>
<item>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.</item>
<item>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:
<tt>/sbin/arp -a</tt></item>
</itemize>
</p>
</sect2>
</sect1>
</sect>

<sect>
<heading>Het werkstation booten</heading>
<sect1>
<heading>Gebruiken van een bootrom</heading>
<p>
Aangezien ik iets dergelijks zelf nog niet hebt gebruikt, kan ik je
slechts de volgende tips geven
(Christian Leutloff <tt/&lt;leutloff@sundancer.tng.oche.de&gt/ was zo
vriendelijk): 
<itemize>
<item>Je kunt geen gebruik maken van de ``gewone'' bootroms.</item>
<item>Er is een <tt>netboot</tt> packet van Gero Kuhlmann, dat voorziet
in bootroms voor Linux en verdere informatie.
<tt/netboot/ is beschikbaar vanaf de lokale Linux mirror, of als het
Debian package (<tt/netboot-0.4/).</item>
<item>Lees de documentatie die met je bootrom wordt geleverd zorgvuldig door.
</item>
<item>Je zal waarschijnlijk de tftpd op de server moeten activeren, maar
dit is afhankelijk van de wijze waarop de bootrom de kernel laadt.</item>
<item><it>Alle informatie over bootrom verkopers van deze Linux vari&euml;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.</it>
</item> 
</itemize>
</p>
</sect1>

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

<sect1><heading>
Gebruik van een bootloader &amp <em>RARP</em></heading>
<p>
Geef de kernel bij het booten alle benodigde parameters en voeg toe
<tt>nfsroot=&lt<em/server-ip-addr/&gt:&lt<em>/path/to/mount</em>&gt</tt>;
hier is <em/server-ip-addr/ het IP-adres van je NFS-server, en
<em>/path/to/mount</em> het path naar de rootdirectory.

Tips:
<itemize>
<item> Overweeg bij gebruik van <bf/LILO/ gebruik te maken van de ``<tt/lock/''
feature: Tik gewoonweg &eacute;&eacute;nmaal de juiste parameters in en
voeg er ``<tt/lock/'' aan toe. Laat de volgende keer bij het booten de tijd
van LILO verstrijken.</item>
<item>Bij het genereren van een bootdisk specifiek voor een werkstation kun
je ook de <tt>append=</tt> feature in <tt>lilo.conf</tt> gebruiken.</item>
</itemize>
</p>
</sect1>

<sect1>
<heading>Een bootloader met <em/RARP/ gebruiken</heading>
<p>
Geef in aanvulling op <tt/nfsroot/ een 
<tt>nfsaddrs=&lt<em/wst-IP/&gt:&lt<em/srv-IP/&gt:&lt<em/gw-IP/&gt:&lt<em/netm-IP/&gt:&lt<em/hostname/&gt</tt>
commandoregelargument voor de kernel. De kernel zal <tt/eth0/
met de opgegeven parameters instellen:
<descrip>
<tag/wst-IP/
<p>IP-adres van de computer</p>
</descrip>
<descrip>
<tag/srv-IP/
<p>IP-adres van de NFS-server</p>
</descrip>
<descrip>
<tag/gw-IP/
<p>gateway</p>
</descrip>
<descrip>
<tag/netm-IP/
<p>netmask</p>
</descrip>
<descrip>
<tag/hostname/
<p>computernaam</p>
</descrip>
</p>
</sect1>
</sect>

<sect>
<heading>Bekende problemen</heading>

<sect1>
<heading>/sbin/init start niet</heading>
<p>
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.</p>
</sect1>

<sect1>
<heading>/dev problemen</heading>
<p>

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.
</p>
</sect1>
</sect>

<sect>
<heading>Andere onderwerpen</heading>
<p>
<itemize>
<item>Er is een BOOTP client:
<tt>ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz</tt>
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.
</item>

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

<item>In de directory Documentation van de kerelsource komt een bestand
voor dat NFS-Root systemen bedocumenteert.</item>

<item>Er is een patch in omloop, waarmee swappen via NFS mogelijk is.
Het werd me toegezonden<!-- (during a private high workload phase) -->, maar ik
kreeg het op &eacute;&eacute;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&euml;le sectie met patches.</item>

<item> 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.</item>
</itemize>
</p>
</sect>
</article>
</linuxdoc>
