FreeBSD kézikönyv
Előző | Fejezet 31. Egyéb haladó hálózati témák | Következő

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

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

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.

> 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;
      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;
        filename "/data/misc/kernel.diskless";
        option root-path "192.168.4.4:/data/misc/diskless";
      }
      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";
      }
    }

  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é.
  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).
  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).
  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 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), é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.

Előző | Tartalom | Következő
Linkek összefűzése és hibatűrése | Fel | ISDN

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.