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.
Nejprve je třeba na serveru vytvořit kořenový adresář stanice
/bezdisk/stanice1/
a v něm komletní strukturu
kořenového FS. Pozor, tento adresář se stanici bude jevit jako kořenový adresář
/
, proto veškeré symbolické linky budou vztahovány
k tomuto adrsáři a nikoli k původnímu /bezdisk/stanice1
;
například uděláme-li na serveru link /bezdisk/stanice1/usr -> /usr
na stanici to bude znamenat zacyklený symbolický link /usr -> /usr
!
Adresář /usr
je dobré přimontovat později
během bootování pomocí NFS.
V adresáři /bezdisk/stanice1/etc
je třeba upravit všechny
konfigurační soubory tak, aby odpovídaly stavu na stanici;
rozhodně je třeba editovat 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
( Reverse Address Resolution Protocol) či BOOTP.
Pro další předpokládejme RARP.
Do
/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 /usr, /bin, /lib, /var/X11R6
.
# 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
A poslední věc, kterou na serveru spustíme bude
rarp -s <IP-stanice> <HW-stanice>
, kde
IP-stanice
je IP adresa stanice a HW-stanice
je
hardwarová adresa ethernet karty stanice --- tedy například,
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 dmesg(8)
;
důležitá část výpisu pro naši kartu NE2000 vypadá takto:
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.
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
Filesystems
položku NFS filesystem support
, pozor, ne jako
modul,
ale jako pevnou součást jádra, a poté vybrat
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ď RARP
či 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 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 loadlin.exe
.
Na stanici v adresáři, napřiklad, C:\loadlin
umístíme
vedle loadlin.exe
navíc námi skompilované jádro pro stanici.
Před použitím programu 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 root a nfsroot
.
Parametr root=/dev/nfs
předá jádru informaci o tom, že se
kořenový filesystém bude montovat přes síť pomocí NFS.
Parametr
nfsroot=<server-ip>:<root-dir>:<nfs-options>
předá jádru informace o tom, na kterém
počítači <server-ip>
má hledat kořenový systém souborů
<root-dir>
, přičemž existuje řada voleb, kterými lze způsob
připojení NFS blíže specifikovat <nfs-options>
.
Čili v našem případě bude příkazová řádka pro loadlin
vypadat takto:
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
10.11.11.1
odpovězeno, že adresa odpovídající její HW adrese je
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
nfsaddrs=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
,
kde:
<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
<autoconf>
.
<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 nfsroot
; viz víše. Je-li parametr
<server-ip>
vynechán je doplněn adresou serveru, jež odpoví na
RARP či BOOTP dotaz.
<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.
<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.
<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.
<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ý.
<autoconf>
--- metoda, která se užije k autokonfiguraci.
Na místě parametru se specifikuje protokol, který nakonfiguruje
síťové rozhranní na stanici, tj. buď bootp
či rarp
.
Je-li jako parametr zadáno 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 none
na tomto místě vypíná
automatickou konfiguraci a v tomto případě je třeba specifikovat
všechny předchozí parametry.
nfsroot
například
takto:nfsaddrs=10.11.11.101:10.11.11.1:::stanice1::none
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í 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ý
loadlin.exe
....
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.
Michal Kočer