A FreeBSD képes hálózaton keresztül elindulni és helyi lemez nélkül egy NFS szerver által megosztott állományrendszer csatlakoztatásával működni. Ehhez a szabványos konfigurációs állományok módosításán kívül semmi másra nincs szükségünk. Egy ilyen rendszert viszonylag könnyű beállítani, mivel az összes hozzávaló szinte készen elérhető:
Rögtön adott legalább két módszer, ha a rendszermagot hálózaton keresztül akarjuk betölteni:
PXE: az Intel® által fejlesztett Preboot eXecution Environment („indítás előtti végrehajtási környezet”) nevű rendszer a hálózati kártyákba vagy alaplapokba épített ROM segítségével teszi lehetővé az intelligens rendszerindítást. A pxeboot(8) man oldalán olvashatunk erről részletesebben.
Az Etherboot port
(net/etherboot
) olyan
ROM-ba programozható kódot
készít, amellyel rendszermagokat tudunk
hálózaton keresztül betölteni. Ez
a kód egyaránt felhasználható
egy hálózati rendszerindító
PROM beégetéséhez, vagy
betölthető a helyi floppy (esetleg
merev)lemezről, illetve MS-DOS® rendszer
alól. Elég sok hálózati
kártya támogatja ezt a módot.
Egy mintaszkript
(/usr/share/examples/diskless/clone_root
)
is próbálja megkönnyíteni a
szerveren a munkaállomás
rendszerindító
állományrendszerének
létrehozását és
karbantartását. Ezt a szkriptet
valószínűleg némileg
módosítani kell, de így is sokat
segít az elindulásban.
Az /etc
könyvtárban
található szabványos
rendszerindításhoz használt
állományok, amelyekkel a lemez
nélküli indulást lehet detektálni
és segíteni.
A lapozás, amennyiben szükséges, NFS vagy helyi lemez segítségével oldható meg.
Számos módon állíthatunk be egy lemez nélküli munkaállomást. Rengeteg részből tevődik össze, és ezek legtöbbje remekül testreszabható az igényeinknek. A továbbiakban egy teljes rendszer összeállításának lehetséges variációit ismertetjük, különös hangsúlyt fektetünk arra, hogy egyszerűek és a hagyományos FreeBSD indítószkriptekkel kompatibilisek maradjanak. A bemutatandó rendszer a következő jellemzőkkel bír:
A lemez nélküli munkaállomások
megosztott /
és
/usr
állományrendszereket
használnak.
A rendszer indításához használt gyökér állományrendszer a szabvány FreeBSD-s gyökér (ez általában a szerveré), ahol néhány állományt felülírtunk a lemez nélküli működéshez vagy azért, mert egyszerűen az adott munkaállomáshoz tartozik.
A gyökér azon részeit, amelyeket írhatóvá kívánunk tenni, md(4) alapú állományrendszerekkel lapoljuk felül. Ilyenkor azonban bármilyen rajtuk ejtett változtatás a rendszer újraindításával elveszik.
A rendszermagot vagy az Etherboot vagy a PXE használatával küldessük át és töltsük be, mivel egyes helyzetekben ezekre szükség lesz.
A bemutatott rendszer nem biztonságos. Helyezzük a hálózatunk egy jól védett részére, és a többi gép ne tekintse megbízhatónak.
A szakaszban szereplő összes információt a FreeBSD 5.2.1-RELEASE változatával teszteltük.
A lemez nélküli munkaállomások beállítása egyszerre adja magát és könnyen is elvéthető. Az elkövetett hibákat olykor számos okból kifolyólag nehéz felismerni. Például:
A fordítási időben megadott beállítások mást eredményeznek futási időben.
A hibaüzenetek gyakran titokzatosak vagy esetleg teljesen el is maradnak.
Ezért ha valamennyire tisztában vagyunk a háttérben zajló folyamatokkal, akkor sokkal több eséllyel leszünk képesek megoldani a menet közben felmerülő problémákat.
A rendszernek a sikeres felkapaszkodáshoz több műveletet is végre kell hajtania:
A gépnek szüksége van olyan induló paraméterekhez, mint például az IP-cím, a végrehajtható állomány neve, a szerver neve, a gyökér elérési útja. Ezeket a DHCP vagy a BOOTP protokollok használatával adhatjuk meg. A DHCP a BOOTP kompatibilis kiterjesztése, ezért ugyanazokat a portokat és alapvető csomagformátumot alkalmazza.
A rendszerüket kizárólag BOOTP használatával is beállíthatjuk. A bootpd(8) szerver az alap FreeBSD rendszer része.
A DHCP azonban rengeteg előnnyel rendelkezik a BOOTP protokollal szemben (áttekinthetőbb konfigurációs állományok, a PXE használatának lehetősége, illetve sok minden más, ami nem csak a lemez nélküli működéshez kellhet), ezért itt alapvetően egy DHCP alapú konfigurációt mutatunk be, de ahol megoldható, megemlítjük a bootpd(8) esetén alkalmas példákat is. A mintaként szolgáló konfiguráció az ISC DHCP szoftvercsomagot használja (a tesztszerverre ennek a 3.0.1.r12 verzióját telepítetük fel).
A gépnek egy vagy több programot kell a saját memóriájába áttöltenie. Erre vagy a TFTP vagy pedig az NFS alkalmas. A TFTP és az NFS között sok helyen fordítási időben tudunk választani. Gyakori hibaforrás a protokollhoz rosszul megadott állománynevek használata: a TFTP általában az összes állományt a szerverről egyetlen könyvtárból tölti át, ezért arra számít, hogy a neveiket ehhez viszonyítva adjuk meg. Az NFS használata során azonban abszolút elérési utakat kell megadnunk.
A rendszer indítását lehetővé tevő közbenső programokat és a rendszermagot valahogy inicializálni kell és elindítani. Ezen a területen több fontos változat kapott helyet:
A PXE a pxeboot(8)
kódját fogja betölteni, ez
lényegében a FreeBSD betöltő
harmadik fokozatának egy módosított
változata. A loader(8) a
működéséhez
szükséges paramétereket a rendszer
indításakor kapja meg, majd a
vezérlés átadása előtt
ezeket a rendszermag környezetében hagyja.
Ebben az esetben akár a
GENERIC
rendszermag is
használható.
Az Etherboot kevesebb előkészítéssel közvetlenül magát a rendszermagot tölti be. Ehhez azonban egy saját rendszermagot kell építeni, külön beállításokkal.
A PXE és az Etherboot egyaránt jól használható. Mivel azonban a rendszermagok általában a loader(8) kódjára hagyják a munka legnagyobb részét, ezért ahol lehetséges, a PXE megoldását érdemes alkalmazni.
Tehát ha az alaplapi BIOS és a hálózati kártya is támogatja a PXE használatát, akkor válasszunk inkább azt.
Végezetül a gépnek valamilyen módon hozzá kell tudnia férnie az állományrendszerekhez. Erre többnyire az NFS jöhet szóba.
A további részleket lásd a diskless(8) man oldalon.
Az ISC DHCP szervere képes a BOOTP és DHCP kéréseket is megválaszolni.
Az ISC DHCP 3.0 nem az
alaprendszer része, ezért a
használatához először
telepítenünk kell a net/isc-dhcp30-server
portot vagy a
neki megfelelő csomagot.
Ahogy feltelepítettük, le kell futtatnunk az
ISC DHCP
konfigurációs állományát
(ezt általában
/usr/local/etc/dhcpd.conf
néven
találjuk meg). A most következő,
megjegyzésekkel kiegészített
példában egy margaux
nevű gép az
Etherboot, valamint egy
corbieres
nevű gép
PXE használatával akar
kapcsolódni:
Ez a beállítás arra
utasítja a dhcpd
démont, hogy a lemez nélküli
gép hálózati neveként a
| |
A | |
A | |
A |
Itt a bootpd (egyetlen
kliensre korlátozott)
beállítását láthatjuk.
Ezt az /etc/bootptab
állományba tegyük.
Ne feledjük, hogy a BOOTP
használatához az
Etherboot portot a
NO_DHCP_SUPPORT
beállítással kell fordítanunk,
miközben a PXE esetében kell
a DHCP. Egyébként a
bootpd egyedüli
nyilvánvaló előnye csupán annyi,
hogy az alaprendszer része.
Az Etherboot honlapján találhatunk egy minden részletre kiterjedő dokumentációt (angolul), amely elsősorban ugyan a Linux típusú rendszerek számára íródott, de ettől függetlenül még hasznos információkat tartalmaz. A továbbiakban csak annyit szeretnénk körvonalazni, hogy az Etherboot miként bírható működésre FreeBSD rendszerekkel.
Először telepítenünk kell a
net/etherboot
csomagot
vagy portot.
Az Etherboot
beállítását (vagyis a
TFTP használatának
megadását az NFS helyett) az
Etherboot forrását
tartalmazó könyvtárban
található Config
állomány megfelelő
átírásával tudjuk megtenni.
Itt most floppyról fogjuk indítani a rendszert. A többi módszerrel (PROM vagy MS-DOS® program) kapcsolatban olvassuk el az Etherboot dokumentációját.
A rendszerindító lemez
elkészítéséhez tegyünk egy
lemezt annak a gépnek a meghajtójába,
ahová az Etherboot
felkerült. Váltsunk az
Etherboot
könyvtárán belül az
src
alkönyvtárba és
gépeljük be:
#
gmake bin32/eszköztípus
.fd0
Az eszköztípus
a
lemez nélküli munkaállomás Ethernet
kártyájától függ. Az
ugyanebben a könyvtárban található
NIC
állományból
tudjuk kiolvasni, hogy az adott kártyához melyik
eszköztípus
tartozik.
Alapértelmezés szerint a pxeboot(8)
betöltő a rendszermagot NFS-en
keresztül tölti be. Ha az
/etc/make.conf
állományban
a LOADER_TFTP_SUPPORT
beállítást adjuk meg, akkor
TFTP támogatással is
lefordítható. Ezzel kapcsolatban a
/usr/share/examples/etc/make.conf
állományban található
megjegyzéseket érdemes elolvasnunk.
A make.conf
állományban
még további két másik hasznos
opciót is találhatunk a soros vonali konzollal
üzemelő lemez nélküli gépek
számára: az egyik a
BOOT_PXELDR_PROBE_KEYBOARD
, a másik
pedig a BOOT_PXELDR_ALWAYS_SERIAL
.
A gép indításakor úgy tudjuk
beüzemelni a PXE
használatát, ha a BIOS
beállításai között a
Boot from network
opciót
választjuk ki, vagy a gép bekapcsolása
után lenyomjuk hozzá a megfelelő
funkcióbillentyűt.
Ha a PXE vagy az Etherboot a TFTP protokollt használja, akkor az állományszerveren a tftpd démont kell elindítani:
Készítsünk egy
könyvtárat, ahonnan majd a
tftpd küldi az
állományokat, például legyen
ez a /tftpboot
.
Vegyük fel a következő sort az
/etc/inetd.conf
állományunkba:
A tapasztalat szerint egyes PXE
verziók a TFTP
TCP alapú
változatát használják.
Ebben az esetben vegyünk fel még egy
második sort is, ahol a dgram
udp
részt stream
tcp
-re cseréljük.
Mondjuk meg az inetd
démonnak, hogy olvassa újra a
konfigurációs
állományát. Az alábbi parancs
megfelelő működéséhez Az
inetd_enable="YES"
sornak szerepelnie
kell az /etc/rc.conf
állományban:
#
/etc/rc.d/inetd restart
A tftpboot
könyvtárat
bárhova rakhatjuk a szerveren. Viszont az
inetd.conf
és
dhcpd.conf
állományokban
ezt ne felejtsük fel megadni.
Minden esetben engedélyeznünk kell az NFS használatát és vele együtt exportálni az NFS szerverről elérni kívánt állományrendszereket.
Az /etc/rc.conf
állományba tegyük bele a
következőt:
Az /etc/exports
állományban a lemez nélküli
rendszereknek szánt
gyökérkönyvtárat tegyük
elérhetővé (a példában
írjuk át a kötet csatlakozási
pontját és a margaux
corbieres
helyére
állítsuk be a saját lemez
nélküli munkaállomásaink
neveit:
/data/misc
-alldirs -ro margaux corbieres
Kérjük meg a
mountd démont, hogy
olvassa újra a konfigurációs
állományát. Előfordulhat
azonban, hogy ehhez először az
NFS szolgáltatást kell
engedélyezni az /etc/rc.conf
állományból és
újraindítani a gépet.
#
/etc/rc.d/mountd restart
Ha az Etherboot használata mellett döntünk, akkor a lemez nélküli kliensek számára a rendszermagot a következő beállítások használatával kell újrafordítani (a megszokottak mellett):
Ezek mellett valószínűleg
szükségünk lesz a
BOOTP_NFSV3
, BOOT_COMPAT
és BOOTP_WIRED_TO
beállítások megadására is
(lásd a NOTES
állományt).
A beállítások nevei régről származnak és némileg félrevezetőek lehetnek, mivel valójában semmit sem változtatnak a rendszermagban levő DHCP vagy a BOOTP rutinok használatában (egyébként meg lehet adni vagy az egyik vagy a másik protokoll kizárólágos használatát is).
Fordítsuk le a rendszermagot (lásd 8. fejezet - A FreeBSD rendszermag testreszabása), és másoljuk a
dhcpd.conf
állományban
megadott helyre.
Amikor a PXE protokollt
használjuk, a rendszermagot nem fontos az
imént felsorolt paraméterekkel
fordítanunk (habár ajánlatos). Az
engedélyezésükkel több
DHCP kérés keletkezik a
rendszermag elindulása közben, ezért
kisebb a kockázata annak, hogy a pxeboot(8)
által bizonyos esetekben megszerzett és az
új értékek között valamilyen
ellentmondás jön létre. A
használatuk egyik előnye, hogy így
mellékhatásként a
hálózati nevünket is megkapjuk.
Ellenkező esetben erre is találnunk kellene
valamilyen módot, például fenntartani
egy-egy rc.conf
állományt
minden kliensen.
Az Etherboot csak akkor lesz
képes betölteni a rendszermagot, ha device
hinteket is beépítünk. Ezt a
következő beállítással tudjuk
megoldani (erről bővebben lásd a
NOTES
állomány
megjegyzéseit):
A dhcpd.conf
állomány
root-path
beállításának megfelelően
hozzunk létre a rendszer
indítására alkalmas gyökér
állományrendszert.
Ezzel a módszerrel a DESTDIR
könyvtárba pillanatok alatt telepíteni
tudunk egy teljes szűz rendszert (és nem csak a
rendszerindító
állományrendszert). Ehhez mindössze csak
annyit kell tenni, hogy lefuttatjuk a következő
szkriptet:
Miután végzett, már csak a
DESTDIR
könyvtárban
található /etc/rc.conf
és /etc/fstab
állományokat kell az igényeinkhez
igazítani.
Amennyiben szükséges, a szerveren található lapozóállományt NFS-en keresztül el tudjuk érni.
A rendszermag maga nem támogatja az NFS alapú lapozás engedélyezését a rendszer indításakor. A lapozóállományt ezért a rendszerindító szkripteken keresztül aktiváljuk, amelyekben csatlakoztatunk egy írható állományrendszert, ahol létrehozzuk és engedélyezzük a lapozóállományt. Tetszőleges méretű lapozóállományt például így tudunk készíteni:
#
dd if=/dev/zero of=/a/lapozóállomány/helye
bs=1k count=1 oseek=100000
Az engedélyezéséhez pedig a
következő sort kell felvenni az
rc.conf
állományba:
/a/lapozóállomány/helye
Ha a lemez nélküli
munkaállomáson X szervert akarunk futtatni,
akkor az XDM
konfigurációs állományait
kicsit módosítanunk kell, mert
alapértelmezés szerint a
/usr
könyvtárban hozza
létre a naplókat.
Amikor a rendszer indításához
használt állományrendszert nem egy FreeBSD
alapú számítógépen
tároljuk, akkor először ezt egy FreeBSD-s
gépen kell elkészíteni, majd a
tar
vagy cpio
segítségével átmásolni a
megfelelő helyre.
Ilyen helyzetekben gyakran gondok adódhatnak
olyan speciális állományokkal, mint
például amelyek a /dev
könyvtárban találhatóak, mivel a
fő- és aleszközazonosítók
tárolására szánt méret
különbözhet. Ezt úgy oldhatjuk meg,
ha exportálunk egy könyvtárat a nem FreeBSD
alapú szerveren, ezt csatlakoztatjuk a FreeBSD-s
gépen, majd a devfs(5)
segítségével a
eszközleírókat a
felhasználó számára
észrevétlen módon foglaljuk le.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.