\section{Kořenový systém souborů přes NFS}

Mnozí používáme NFS (Network File Sharing protokol)
pro sdílení části diskového prostoru naší
LAN několika počítači zároveň. V~tomto odstavci bych rád upozornil na 
novinku, která přichází s~novým jádrem řady 2.0.x a to je, kromě úplného
přepracování a tedy zrychlení NFS, možnost
montování kořenového filesystému přes NFS.
Této nové možnosti zajisté rádi využijí všichni, kteří chtějí mít více než
jeden X-terminal a nemají dostatek diskového prostoru, či dokonce mají
bezdiskový počítač. V~dalším budeme uvažovat, že vytváříme X-terminál na
bezdiskové stanici IP-10.11.11.101, 
a že kořenový FS montujeme ze serveru IP-10.11.11.1.

\subsection{Jak na to?}


Nejprve je třeba na serveru vytvořit kořenový adresář stanice 
\verb|/bezdisk/stanice1/| a v~něm komletní strukturu
kořenového FS. Pozor, tento adresář se stanici bude jevit jako kořenový adresář
\verb|/|, proto veškeré symbolické linky budou vztahovány
k~tomuto adrsáři a nikoli k~původnímu \verb|/bezdisk/stanice1|;
například uděláme-li na serveru link \verb|/bezdisk/stanice1/usr -> /usr|
na stanici to bude znamenat zacyklený symbolický link \verb|/usr -> /usr|!
Adresář \verb|/usr| je dobré  přimontovat později 
během bootování pomocí NFS.

V~adresáři \verb|/bezdisk/stanice1/etc| je třeba upravit všechny 
konfigurační soubory tak, aby odpovídaly stavu na stanici;
rozhodně je třeba editovat \verb|HOSTNAME, fstab, inittab| a zejména
síťovou část |rc.d/rc.*|.
 
Jádro na serveru by mělo mít podporu NFS, případně  RARP 
({\small Reverse Address Resolution Protocol}) či BOOTP.
Pro další předpokládejme RARP.
 Do 
\verb|/etc/exports| na serveru je dobré přidat řádek
spřístupňující stanici její kořenový adresář a případně jiné potřebné
adresáře, například \verb|/usr, /bin, /lib, /var/X11R6|.
\begin{verbatim}
#  Soubor /etc/exports
#____________________________________________________________________
#                    |       jméno počítače tak jak je v /etc/hosts | 
#   adresář          |               + v závorce parametry pro NFS  |
#                    |                                              |
/bezdisk/stanice1                     stanice1(rw)
/usr                                  stanice1(rw) 
#____________________|______________________________________________|
#  Konec souboru /etc/exports
\end{verbatim}

A~poslední věc, kterou na serveru spustíme bude
\verb|rarp -s <IP-stanice> <HW-stanice>|, kde 
\verb|IP-stanice| je IP adresa stanice a \verb|HW-stanice| je
hardwarová adresa ethernet karty stanice --- tedy například,
\verb|rarp -s 10.11.11.101  00:00:c0:7b:5a:1c|.
Jak zjistit HW adresu vaší karty  by mělo být uvedeno
v~návodu ke kartě; adresu karty lze zjistit i při bootování
jádra linuxu s~podporou dané karty, v~bootovacích výpisech,
například instalační diskety Slackware~3.0.  
Výpis lze  prohlédnout pomocí příkazu \verb|dmesg(8)|;
důležitá část výpisu pro naši kartu NE2000 vypadá takto:
\begin{verbatim}
ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
NE*000 ethercard probe at 0x320: 00 00 c0 7b 5a 1c
eth0: NE2000 found at 0x320, using IRQ 10.
\end{verbatim} 

No a nyní vytvoříme jádro pro stanici, jádro je třeba 
kompilovat s~podporou NFS a NFSroot, tj. je třeba  vybrat v~nabídce
\verb|Filesystems| položku \verb|NFS filesystem support|, pozor, ne jako
modul,
ale jako pevnou součást jádra, a poté vybrat 
\verb|Root file system on NFS| a 
případně připojit i podpora protokolu, který nám umožní automatické
nakonfigurování síťového rozhranní, především IP adresy stanice, tedy
buď \verb|RARP| či \verb|BOOTP supprot| či dokonce oba zároveň.

Po kompilaci se rozhodneme jakou metodu bootování stanice použijeme.
Můžeme použít LiLo či loadlin. Existují ještě další dvě metody, ale o~těch
zde záměrně nehovořím, viz \verb|nfsroot.txt| v~dokumentaci k~jádru.
Řekněme, že na stanici normálně běhá DOS a X-terminal se používá jen 
zřídka. V~tom případě zvolme \verb|loadlin.exe|.
Na stanici v~adresáři, napřiklad, \verb|C:\loadlin| umístíme
vedle \verb|loadlin.exe| navíc námi skompilované jádro pro stanici.
Před použitím programu \verb|loadlin| si neopomeňte přečíst dokumentaci
dodávanou k~tomuto užitečnému programu.

Jaký server požádat o~NFS kořenový systém a jaký adresář
poté jako kořenový souborový systém použít se jádru předává pomocí
parametrů jádra \verb|root a nfsroot|.
Parametr \verb|root=/dev/nfs| předá jádru informaci o~tom, že se
kořenový filesystém bude montovat přes síť pomocí NFS.
Parametr \\
\verb|nfsroot=<server-ip>:<root-dir>:<nfs-options>|\\
předá jádru informace o~tom, na kterém
počítači \verb|<server-ip>| má hledat kořenový systém souborů
\verb|<root-dir>|, přičemž existuje řada voleb, kterými lze způsob
připojení NFS blíže specifikovat \verb|<nfs-options>|.
Čili v~našem případě bude příkazová řádka pro \verb|loadlin|
vypadat takto:\\
\verb|loadlin.exe zImage root=/dev/nfs nfsroot=10.11.11.1:/bezdisk/stanice1|

V~našem případě si stanice veškeré informace o~konfiguraci svého IP
rozhraní vyžádá přes protokol RARP.   
Pošle dotaz to sítě a bude jí serverem
\verb|10.11.11.1| odpovězeno, že adresa odpovídající její HW adrese je
\verb|10.11.11.101|. Teprve poté je možné užívat NFS.

V~principu je možené se obejít bez RARP či BOOTP protokolu a
 konfiguraci TCP/IP 
předat jádru jako parametr \\
\verb|nfsaddrs=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>|,
kde:
\begin{description}
\item\verb|<client-ip>| --- IP adresa stanice. Je-li toto pole prázdné, tak
adresa bude určena pomocí protokolu RARP či BOOTP. Který s~těchto protokolů
 se užije
závisí na om jaký byl vybrán při konfiguraci kernelu, popř. na parametru
\verb|<autoconf>|.
\item\verb|<server-ip>| --- IP adresa NFS serveru. Je-li k~určení adresy
stanice
užito protokolu RARP a tento porametr není prázdný odpověď na RARP dotaz
bude zpracovana pouze tímto serverem. Chceme-li užít rozdílných
serverů pro NFS a RARP zde vyplníme jméno RARP serveru, popř. tento
parametr necháme prázdný a IP adresu NFS serveru specifikujeme 
parametrem \verb|nfsroot|; viz víše. Je-li parametr
\verb|<server-ip>| vynechán je doplněn adresou serveru, jež odpoví na
RARP či BOOTP dotaz. 
\item\verb|<gw-ip>| --- IP adresa brány (gateway). Je nutné specifikovat 
v~případě, že je server na jiné síti. Je-li tento parametr vynechán,
 tak bude předpokládáno, že server se nalézá na lokální síti, nebude-li
odpovězeno na BOOTP dotaz jinak.  
\item\verb|<netmask>| --- netmask lokálního síťového rozhranní. Je-li
tento parametr prázdný, maska je odvozena od IP adresy stanice, nebude-li
odpovězeno na BOOTP dotaz jinak.
\item\verb|<hostname>| --- jméno stanice. Je-li tento parametr prázdný
užije se jako jmého ASCII reprezentace IP adresy případně hodnota navrácená
při BOOTP dotazu.
\item\verb|<device>| --- jméno užitého síťového rozhranní. Je-li tato
hodnota prázdná, užijí se všechna zařízení pro než byl zodpovězen
RARP dotaz a první ze zařízení, které odpoví na BOOTP dotaz. Pro NFS
bude užito toho zařízení pro nejž byl zotpovězen buď BOOTP či RARP dotaz.
Má-li stanice pouze jedno síťové rozhraní, můžeme bez obav 
zanechat tento parametr prázdný. 
\item\verb|<autoconf>| --- metoda, která se užije k~autokonfiguraci.
Na  místě parametru se specifikuje protokol, který nakonfiguruje
síťové rozhranní na stanici, tj. buď \verb|bootp| či \verb|rarp|.
Je-li jako parametr zadáno \verb|both| či nic, užijí se oba protokoly;
samozřejmě jen tehdy umožnili-li jsme užití obou protokolů během
konfigurace jádra stanice. Volba \verb|none| na tomto místě vypíná
automatickou konfiguraci a v~tomto případě je třeba specifikovat
všechny předchozí parametry.
\end{description}
Tedy v~našem případě doplníme parametr \verb|nfsroot| například
takto:\\
\verb|nfsaddrs=10.11.11.101:10.11.11.1:::stanice1::none|\\
V~tomto případě nejsme nuceni užívat RARP či BOOTP. 

Nám se osvěčilo užití RARP.  Konfigurace pomocí příkazové
řádky jádra ne vždy pracovala  jak má. Při použití \verb|loadlin.exe| jsme
narazily na omezení Diskového Operačního Systému; příkazový řádek může
mít v~DOSu pouze 128(!) znaků a to je dosti málo --- bylo nutné se omezit
na krátké cesty, přejmenovat obraz jádra i samotný 
\verb|loadlin.exe|\dots. 

Samozřejmě k~tomu, aby se nám rozběhl bezdiskový X-terminal je třeba
ještě dalších úprav. Je třeba nějaký swapovací prostor pro
stanici, nebo nejlépe stanici s~velmi velkou pamětí. Nám dostačovalo
8MB RAM + swap do souboru na DOSovské části disku. Ale to už je jiný 
příběh.



