31.7. Lemez nélküli működés

Frissítette: Dock`es, Jean-François.
Átdolgozta és javította: Dupre, Alex.

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ő:

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:

Figyelem:

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.

31.7.1. Háttérinformáció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.

31.7.2. Beállítási útmutató

31.7.2.1. Beállítás a ISC DHCP használatával

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:

default-lease-time 600;
max-lease-time 7200;
authoritative;

option domain-name "minta.com";
option domain-name-servers 192.168.4.1;
option routers 192.168.4.1;

subnet 192.168.4.0 netmask 255.255.255.0 {
  use-host-decl-names on; 1
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.4.255;

  host margaux {
    hardware ethernet 01:23:45:67:89:ab;
    fixed-address margaux.minta.com;
    next-server 192.168.4.4; 2
    filename "/data/misc/kernel.diskless"; 3
    option root-path "192.168.4.4:/data/misc/diskless"; 4
  }
  host corbieres {
    hardware ethernet 00:02:b3:27:62:df;
    fixed-address corbieres.minta.com;
    next-server 192.168.4.4;
    filename "pxeboot";
    option root-path "192.168.4.4:/data/misc/diskless";
  }
}

1

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 host deklarációban megadott értéket küldje el. Ezt úgyis meg lehet csinálni, hogy felvesszünk egy option host-name margaux részt a host deklarációk közé.

2

A next-server direktíva a betöltő vagy a rendszermag betöltéséért felelős TFTP vagy NFS szervert jelöli ki (alapértelmezés szerint ez megegyezik a DHCP szerverrel).

3

A filename direktíva azt az állományt adja meg, amelyet az Etherboot vagy a PXE a következő végrehajtási lépésben betölt. Ezt a kiválasztott átviteli módnak megfelelően kell megadni. Az Etherboot lefordítható az NFS vagy a TFTP használatával is. A FreeBSD port alapból az NFS támogatását tartalmazza. A PXE a TFTP protokollt használja, ezért itt relatív állományneveket adunk meg (ez persze a TFTP szerver beállításaitól függ, de általában ez a jellemző). Sőt, a PXE a pxeboot állományt tölti be, nem is a rendszermagot. Léteznek további érdekes lehetőségek is, mint például a pxeboot állomány betöltése a FreeBSD CD-jén található /boot könyvtárból (mivel a pxeboot(8) a GENERIC rendszermagot képes betölteni, ezért a PXE használatával akár egy távoli CD-meghajtóról is indíthatjuk a rendszert).

4

A root-path opció a rendszer indításához használt gyökér állományrendszert nevezi meg, amelyet többnyire az NFS jelölési módszere szerint kell megadni. A PXE használata során el lehet hagyni a gép IP-címét egészen addig, amíg nem engedélyezzük a rendszermagban a BOOTP beállítást. Az NFS szerver ekkor megegyzik a TFTP szerverrel.

31.7.2.2. Beállítás a BOOTP használatával

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.

.def100:\
  :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
  :sm=255.255.255.0:\
  :ds=192.168.4.1:\
  :gw=192.168.4.1:\
  :hd="/tftpboot":\
  :bf="/kernel.diskless":\
  :rp="192.168.4.4:/data/misc/diskless":

margaux:ha=0123456789ab:tc=.def100

31.7.2.3. A rendszer előkészítése az Etherboot számára

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(R) 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.

31.7.2.4. A rendszer indítása PXE használatával

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.

31.7.2.5. A TFTP és NFS szerverek beállítása

Ha a PXE vagy az Etherboot a TFTP protokollt használja, akkor az állományszerveren a tftpd démont kell elindítani:

  1. Készítsünk egy könyvtárat, ahonnan majd a tftpd küldi az állományokat, például legyen ez a /tftpboot.

  2. Vegyük fel a következő sort az /etc/inetd.conf állományunkba:

    tftp	dgram	udp	wait	root	/usr/libexec/tftpd	tftpd -l -s /tftpboot

    Megjegyzés:

    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.

  3. 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.

  1. Az /etc/rc.conf állományba tegyük bele a következőt:

    nfs_server_enable="YES"
  2. 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
  3. 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

31.7.2.6. Lemez nélküli rendszermag fordítása

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):

options     BOOTP          # BOOTP-n keresztül kérünk IP-címet és hálózati nevet
options     BOOTP_NFSROOT  # a BOOTP-től kapott információk alapján csatoljuk a gyökeret NFS-en keresztül

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.

Megjegyzés:

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.

Megjegyzés:

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):

hints		"GENERIC.hints"

31.7.2.7. A rendszerindító állományrendszer előkészítése

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.

31.7.2.7.1. Az állományrendszer feltöltése a make world paranccsal

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:

#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make buildworld && make buildkernel
make installworld && make installkernel
cd /usr/src/etc; make distribution

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.

31.7.2.8. A lapozóterület beállítása

Amennyiben szükséges, a szerveren található lapozóállományt NFS-en keresztül el tudjuk érni.

31.7.2.8.1. Lapozás NFS-sel

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:

swapfile=/a/lapozóállomány/helye

31.7.2.9. Egyéb problémák

31.7.2.9.1. Írásvédett /usr használata

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.

31.7.2.9.2. Nem FreeBSD-s szerver használata

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