Amennyiben egy merevlemezt nem tartalmazó (diskless) rendszert kívánsz használni X-terminál gyanánt vagy nyomtató szerverként, a root fájlrendszeredet egy nem-lemez (non-disk) típusú eszközre kell helyezned. Ez lehet egy ramdiszk (lásd ugyanebben a könyvtárban az inird.txt fájl a további információkért), vagy egy NFS-en keresztül mountolt fájlrendszer. A következő szöveg leírja, hogy miként használjuk az NFS-t a root fájlrendszer számára. A szövegben a ,,kliens'' elnevezés jelöli a lemezegység nélküli rendszert, míg a ,,szerver'' jelenti az NFS szervert.
1.) Az nfsroot képesség engedélyezése
Az nfsroot használatához ki kell választanunk a kernel konfigurálása alatt az NFS támogatást. Jegyezzük meg, hogy ebben az esetben az NFS támogatás nem tölthető be modulként. A konfigurációs szkript ezután meg fogja kérdezni, hogy vajon akarjuk-e használni az nfsroot képességet, és ha igen, akkor miféle autokonfigurálási rendszert akarunk használni. Biztos ami biztos; válasszuk ki mind a BOOTP-t, mind pedig a RARP-ot.
2.) A kernel parancs sor
Amint a kernelt betölti egy bootbetöltő (bootloader), ami lehet a loadlin, LILO vagy éppen egy hálózati boot program (netboot); meg kell mondanunk neki, hogy milyen root fs eszközt fog használni, merre találja a szervert, valamint mi annak a szerveren lévő könyvtárnak a neve, amelyet root-ként fog mountolni. Mindezek megadhatók néhány kernel parancs sori paraméterként:
root=/dev/nfs
Ez szükséges az ál-NFS-eszköz engedélyezéséhez. Jegyezzük meg, hogy ez nem egy valós eszköz, hanem mindössze egy szinoníma arra, hogy közöljük a kernellel, hogy egy valódi eszköz helyett használja inkább az NFS-t.
nfsroot=[<
szerver-ip-címe
>:]<root-könyvtár
>[,<nfs-opciók
>]Amennyiben az nfsroot paraméter nincs megadva a parancssorban, az alapértelmezett "/tftpboot/%s" forma kerül használatra.
< szerver-ip-címe
>Meghatározza az NFS-szerver IP címét. Ha ez a mező nincs megadva, az alapértelmezett érték az lesz, amelyet az nfsaddrs
változó (lásd alább) használ. Kézenfekvő a használata ennek a paraméternek azokban az esetekben, ha eltérő RARP és NFS szerverek használatát kívánjuk engedélyezni. Általában üresen hagyhatjuk.< root-könyvtár
>A szerverről root-ként mountolt könyvtár neve. Ha itt egy ,,%s'' jel található a sztringben, akkor a jel a kliens ASCII értelmezésű IP címét fogja helyettesíteni. < nfs-opciók
>Szabványos NFS opció. Valamennyi opciót vesszőkkel kellelválasztani egymástól. Ha az opció mező nincs megadva, a következő alapértelmezett értékek kerülnek felhasználásra: port = amit a szerver portmap démonja ad meg rsize = 1024 wsize = 1024 timeo = 7 retrans = 3 acregmin = 3 acregmax = 60 acdirmin = 30 acdirmax = 60 flags = hard, nointr, noposix, cto, ac
nfsaddrs=<
kliens-ip-cím
>:<szerver-ip-cím
>:<gw-ip
>:<netmaszk
>:<gépnév
>:<eszközfájl
>:<autoconf
>Amennyiben hiányzik ez a paraméter a kernel parancssorából, valamennyi mező üresnek feltételezett, és az alább megemlített alapértelmezések kerülnek alkalmazásra. Általánosságban ez azt jeleni, hogy a kernel megpróbál mindent beállítani, felhasználva ehhez mind a RARP, mind a BOOTP protokollt. (Attól függően persze, hogy mit engedélyeztünk a kernel konfigurálása alatt, és ha mindkettőt engedélyeztük, akkor amelyik protokoll előszőr válaszol.)
< kliens-ip-cím
>A kliens IP címe. Ha értéke üres, akkor a címet vagy a RARP vagy a BOOTP határozza meg. Az, hogy melyik protokoll használt, függ attól, hogy melyiket engedélyeztük a kernel konfigurálása alatt, valamint függ az < autoconf
> paramétertől. Ha ez a paraméter nem üres, akkor sem a RARP, sem a BOOTP protokoll nem kerül használatra.< szerver-ip-cím
>Az NFS szerver IP címe. Ha a RARP használt a kliens címének meghatározására és ez a paraméter NEM üres, a válaszok csak egy kitüntetett szervertől elfogadottak. Ahhoz, hogy különböző RARP és NFS szervert használhass, add meg a RARP szerveredet ezen a helyen (vagy hagyd üresen), és add meg az NFS szerveredet az nfsroot
paraméterben (lásd feljebb). Amennyiben ez a bejegyzés üres, annak a szervernek a címe kerül felhasználásra, amelyet a RARP vagy a BOOTP kérés válasza tartalmaz.< gw-ip
>Az átjáró (gateway) IP címe, ha a szerver eltérő alhálózaton (subnet) található. Ha ez a bejegyzés üres, akkor átjáró nem lesz használatban és a szerver feltételezetten a helyi hálózaton található, hacsak nem érkezett egy érték a BOOTP protokollon keresztül. < netmaszk
>Hálózati maszk (netmask) a helyi hálózati csatólóegység (interface) számára. Ha értéke üres, a hálózati maszk értéke a kliens IP címéból kerül származtatásra, hacsak nem érkezik egy válasz a BOOTP protokollon keresztül. < gépnév
>A kliens neve. Ha üres, akkor a kliens IP címe használt az ASCII jelrendszer szerint, vagy a BOOTP protokollon keresztül kapott érték. < eszközfájl
>A használni kívánt hálózati eszközfájl neve. Ha üres, akkor valamennyi eszközfájl használt a RARP kérések számára, és az első megtalált a BOOTP részére. Az NFS számára az az eszközfájl kerül használatra, amelyiken a RARP vagy a BOOTP válaszok megérkeztek. Amennyiben csak egyetlen eszközfájlod (device) van, biztonságosabb, ha üresen hagyod. < autoconf
>Az autokonfiguráció használatára alkalmas eljárás. Ha értéke a ,,rarp'', vagy a ,,bootp'', akkor a meghatározott protokoll használt. Amennyiben a ,,both'' vagy üres érték van megadva, akkor - az első esetben - mindkét protokoll használatban lesz, persze ha ezeket a kernel konfugurálása alatt engedélyezted. A ,,none'' azt jelenti, hogy nincs autokonfiguráció. Ebben az esetben neked kell meghatároznod valamennyi szükséges, az imént ismertetett mezők értékét. Az <
autoconf
> paraméter egyedül is szerepelhet, mint az nfsaddrs paraméter értéke (minden nélkül, a ,,:'' karakterek elé), és ebben az esetben az autokonfiguráció lesz használatban. Viszont a ,,none'' érték ebben az esetben nem elérhető.
3.) A kernel betöltője
A kernel memóriába való bejuttatására többféle mód is használható. A megvalósítás a rendelkezésre álló adottságoktól függ:
3.1) A kernel írása floppy-ra, a dd parancs segítségével:
Ahogy mindíg, most is felírhatjuk a kernelt egy floppy-ra, használva a dd parancsot, ekkor egyáltalán nem lehetséges a kernel parancssorok használata. A ,,root='' paraméter helyettesítésére hozz létre egy báb eszközfájlt (dummy device) bármely linux rendszeren, a 0 főértékkel és a 255 mellékértékkel, használva az mknod parancsot:mknod /dev/boot255 c 0 255Ezután másold át a kernelt a floppy-ra, használva a dd parancsot:
dd if=/usr/src/linux/arch/i386/boot/zImage of=/dev/fd0És végül használd az rdev parancsot a root eszközfájl beállítására:
rdev /dev/fd0 /dev/boot255Ezután letörölheted a báb eszközfájlt (dummy device), hiszen nincs már számára elérhető, valódi eszközfájl.
A másik két kernel parancssori paraméter nem helyettesíthető az rdev paranccsal. Emiatt használatos az az eljárás, hogy a kernel alapértelmezésban használja a RARP és/vagy a BOOTP protokollt, és ha a RARP protokollon keresztül kap egy választ, akkor a /tftpboot/<kliens-ip-cím>/ könyvtárat fogja mountolni root -ként. Amennyiben a kernel egy BOOTP választ kapott, a válaszban lévő könyvtár nevét használja.
3.2) A LILO használata
Amikor LILO-t használsz, a LILO konfigurációs fájljában az ,,append='' paranccsal meg tudod adni valamennyi szükséges parancssori paramétert. Mindemellett a ,,root='' parancs használatához szükséges lehet beállítani egy báb eszközfájlt (dummy device), amelynek beállításáról az előbbi 3.1 -es részben olvashatsz bővebben. A LILO használatáról és az ,,append='' parancsról a LILO dokumentációjában találhatsz leírást.
3.3) A loadlin használata
Ha DOS parancspromptról akarsz Linux-ot bootolni és helyi merevlemez nélkül akarsz root fájlrendszert mountolni, akkor használatod a loadlin-t is. Azt modtam az imént, hogy működik, de valójában még soha sem próbáltam. Általában létrehozhatod a kernel parancssorokat itt is, hasonlóan, mint ahogy azt a LILO-nál meg tudod tenni. További információknak nézz utána a loadlin dokumentációjában.
3.4) Bootrom használata
Ez talán a lemez nélküli (diskless) kliensek bootolásának legelegánsabb módja. Bootrom használata esetén a kernel a TFTP protokollon keresztül töltődik be. Amennyire tudom, a nem kereskedelmi bootromok már támogatják a Linux bootolását nfs felett, de létezik két ingyenes bootrom a sunsite.unc.edu -n és ennek tükrein. Az egyik a ,,netboot-nfs'', míg a másik az ,,etherboot''. Mindkettő tartalmaz mindent, amire szükséged lehet a lemez nélküli (diskless) Linux kliensek bootolásához.4.) Jóváírás
Az nfsroot kódot a kernelben én, Gero Kuhlmann <gero@gkminix.han.de> írtam, a BOOTP kódjával együtt és Martin Mares <mj@k332.feld.cvut.cz> működött közre jónéhány hiba kijavításában. Az nfsroot legelső verziójának megírásakor kapott segítségért szeretnék köszönetet mondani Jens-Uwe Mager-nek <jum@anubis.han.de>.
Magyar változat: Murzsa Norbert email: kuksi@kuksi2.igyuk.hu