Linux Indítólemez HOGYAN: Gyökér állományrendszer készítése.

Következő Előző Tartalom

## 4. Gyökér állományrendszer készítése.

A gyökér állományrendszer készítéséhez ki kell választani a rendszer futásához szükséges állományokat. Ebben a fejezetben megmutatjuk, hogy hogyan kell tömörített gyökér állományrendszert készíteni. Kevésbé gyakori lehetőség amikor tömörítetlen állományrendszert készítünk olyan lemezre, ami közvetlenül gyökérként lesz beillesztve a rendszerbe; ezt az alternatívát a Nem-memórialemez gyökér állományrendszer fejezetben mutatjuk be.

## 4.1 Áttekintés.

A gyökér állományrendszernek mindent tartalmaznia kell, amire a teljes Linux rendszernek szüksége van. Ahhoz, hogy ezt megtehessük, a lemeznek tartalmaznia kell a Linux rendszer minimális szükségleteit:

- Az alap állományrendszer-struktúra,
- Minimális alkönyvtár-struktúra: `/dev, /proc, /bin, /etc, /lib, /usr, /tmp`,
- Alap eszközök: `sh, ls, cp, mv`, stb.,
- Minimálisan szükséges konfigurációs állományok: `rc, inittab, fstab`, stb.,
- Eszközök: `/dev/hd*, /dev/tty*, /dev/fd0`, stb.,
- Eszközök által használt alap függvényeket nyújtó futásidejű eljáráskönyvtárak.

Természetesen bármely rendszer akkor hasznos, ha tudsz rajta futtatni is valamit. A gyökérlemez általában csak akkor válik használhatóvá, ha valami ilyesmit megtehetsz vele:

- Másik meghajtón állományt ellenőrzöl, például azért, hogy leelenőrizd a merevlemezeden lévő gyökér állományrendszeredet, másik meghajtóról el kell, hogy tudd indítani a Linux rendszeredet, mint ahogy azt egy gyökér lemezről meg is teheted. Ezután lefuttathatod az `fsck`-t az eredeti gyökér meghajtódra, amíg nincs beillesztve.
- Visszaállíthatod az eredeti gyökér meghajtódat biztonsági mentésből olyan archiváló és tömörítő eszközök használatával, mint a `cpio, tar, gzip` és az `ftape`.

Megmutatjuk, hogy hogyan készíthetsz tömörített állományrendszert. Így hívják, mert a lemezen tömörítve tárolódik, majd indításkor pedig kitömörítődik a memórialemezre.

Tömörített állományrendszerrel sok állományt rázsúfolhatsz (körülbelül hat megabájtot) egy hagyományos 1440K-s lemezre. Mivel az állományrendszer lényegesen nagyobb a lemeznél, nem is lehet lemezen elkészíteni. Máshol kell elkészíteni, tömöríteni, majd rápakolni a lemezre.

## 4.2 Az állományrendszer elkészítése.

Ahhoz, hogy ilyen gyökér állományrendszert készíthess, olyan tároló eszközre lesz szükséged, ami elég nagy, hogy a tömörítés előtt elférjenek rajta az állományok. Egy körülbelül négy megabájt szabad hellyel rendelkező eszközre lesz szükséged. Több lehetőség áll rendelkezésedre:

- Használhatsz memórialemezt (ESZKÖZ = /dev/ram0). Ebben az esetben a memóriát használjuk a lemez szimulálására. A memórialemeznek elég nagynak kell lennie, hogy a megfelelő méretű állományrendszer elférjen rajta. Ha LILO-t használsz, nézd meg a konfigurációs állományát (/etc/lilo.conf), hogy szerepel-e benne a

              RAMDISK_SIZE = nnn

  sor, ami megadja, hogy mekkora RAM legyen maximálitan memórialemez számára lefoglalható. Az alapértelmezett érték 4096K, aminek elegendőnek kell lennie. Nem célszerű 8MB-nál kevesebb memóriával rendelkező gép esetén memórialemezt használni. Nézd meg, hogy vannak-e olyan eszközeid, mint a /dev/ram0, /dev/ram, vagy a /dev/ramdisk. Ha nincsenek, készítsd el a /dev/ram0-t az `mknod` (major 1, minor 0) paranccsal.
- Jó megoldás, ha van egy elég nagy (néhány megabájt) használaton kívüli merevlemez-partíciód.
- Használj loopback eszközt, amivel lemez állományt eszközként kezelhetsz. Loopback eszközzel elkészíthetsz egy 3 megabájtos állományt a merevlemezeden, és felépítheted benne az állományrendszert. A loopback eszközök használatának bővebb ismertetéséhez használd a `man losetup` parancsot. Ha nincs `losetup`-od, az ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/ címről letöltheted a `mount` és `unmount` programokkal kompatibilis `util-linux` csomagot, amiben megtalálod.

  Ha nincs a rendszereden (/dev/loop0, /dev/loop1, stb.) loop eszköz, készítened kell egyet az ```mknod /dev/loop0 b 7 0`'' paranccsal. Miután feltelepítetted ezeket a különleges `mount` és `umount` binárisokat, készíts egy elegendő kapacitással rendelkező ideiglenes állományt a merevlemezeden (pl. /tmp/fsfile). Használhatod a

              dd if=/dev/zero of=/tmp/fsfile bs=1k count=<it/nnn/

  parancsot a nnn-blokk méretű állomány készítéséhez.

  Ezt az állománynevet használd lejjebb az ESZKÖZ helyett. Ha a mount utasítást használod, a ```-o loop`'' kapcsolót is használnod kell, hogy megmond a mount-nak, hogy loopback eszközt használjon. Például a

              mount -o loop -t ext2 /tmp/fsfile /mnt

  parancs beilleszti a /tmp/fsfile-t (loopback eszközön keresztül) az `/mnt` illesztési pontba. Egy `df` parancs ezt meg is erősíti.

Miután kiválasztottad valamely opciót, készítsd el az ESZKÖZt a

            dd if=/dev/zero of=DEVICE bs=1k count=3000

utasítással. Ez a parancs lenullázza az eszközt. Ez a lépés azért fontos, mert később tömöríteni fogjuk az állományrendszert, így minden használaton kívüli területet nullával kell feltölteni, hogy maximális tömörítést érhessünk el.

Következik az állomáynrendszer elkészítése. A Linux kernel kétféle gyökér lemeztípust ismer, amit automatikusan memórialemezre másol. Az egyik a minix, a másik az ext2, ami a preferált állományrendszer. Ha ext2-t használsz, hasznosnak találhatod a `-i` kapcsolót, hogy az alapértelmezettnél több inode-t adhass meg; a `-i 2000` ajánlott legalább, hogy ne fogyhass ki inode-okból. Másfelől viszont meg is takaríthatsz inode-okat, ha letörlöd a sok felesleges eszközállományt a `/dev` alkönyvtárból. Az `mke2fs` parancs 360 inode-t készít alapértelmezés szerint egy 1.44Mb-s lemezen. Úgy találtam, hogy 120 inode bőven elegendő a helyreállító lemezemen, de ha a `/dev` alkönyvtár összes állományát szeretnéd csatolni, hamar ki fogsz fogyni a 360 inode-ból. A tömörített gyökér állományrendszer nagyobb állományrendszert enged meg, és így alapértelmezés szerint több inode-t, de még mindig szükség lehet rá, hogy egyrészről csökkentsd az állományok számát, vagy növeld az inode-k számát.

Így tehát az utasítás így néz ki:

            mke2fs -m 0 -i 2000 ESZKÖZ

(Ha loopback eszközt használsz, meg kell adnod hogy az ESZKÖZ hol található. Ebben az esetben az `mke2fs` meg fog kérdezni, hogy biztosan ezt szeretnéd-e, válaszolj igennel.)

Az `mke2fs` utasítás automatikusan megállapítja a szabad hely méretét, és annak megfelelően konfigurálja be magát. A `-m 0` paraméter megakadályozza, hogy a root számára helyet foglaljon le, így több használható hely lesz a lemezen.

Ezután beillesztheted az eszközt:

            mount -t ext2 ESZKÖZ /mnt

(Létre kell hoznod a `/mnt` beillesztési pontot, ha még nem létezik.) A további fejezetekben minden alkönyvtárnevet az `/mnt`-hez képest relatív alkönyvtárnak tekintünk.

## 4.3 Az állományrendszer benépesítése.

Íme egy kellően lecsupaszított alkönyvtárcsoport a gyökér állományrendszered számára:

- `/dev` -- Eszközök, melyek a B/K műveletekhez szükségesek
- `/proc` -- Alkönyvtár-rendszer, amire a proc állományrendszernek van szüksége
- `/etc` -- Rendszerkonfigurációs állományok
- `/sbin` -- Kritikus rendszer-binárisok
- `/bin` -- A rendszer részét alkotó alap binárisok
- `/lib` -- Futásidejű támogatást nyújtó osztott eljáráskönyvtárak
- `/mnt` -- Más lemezek karbantartására szolgáló beillesztési pont
- `/usr` -- Egyéb eszközök és alkalmazások

(Az itt bemutatott alkönyvtár-struktúra csak a gyökér lemezre vonatkozik. A valódi Linux rendszerek sokkal összetettebb és sokkal fegyelmezettebb irányvonallal rendelkeznek. Állományrendszer Hierarchia Szabványnak hívják ezt a rendszert, és ez a szabvány határozza meg, hogy melyik állománynak hova kell kerülnie.)

A gyökér lemezen három alkönyvtár üresen marad, tehát csak az `mkdir` parancsra van szükség a létrehozásukhoz. A `/proc` alkönyvtár tulajdonképpen csak egy törzs, ahova a proc állományrendszer kerül. Az `/mnt` és az `/usr` alkönyvtárak pedig olyan beillesztési pontok, melyeket majd az indító/gyökér rendszer lefutása után használunk. Ezért tehát ezeket az alkönyvtárakat csak létre kell hozni.

A maradék négy alkönyvtár tartalmát a következő bekezdésekben részletezzük.

### /dev

A `/dev` alkönyvtár minden Linux rendszerben használatos eszköz számára egy-egy különleges állományt tartalmaz. A `/dev` alkönyvtár maga hagyományos alkönyvtár, és az `mkdir` paranccsal létre is hozható a már megismert módon. Az eszközök különleges állományok, így különleges módon kell létrehozni őket az `mknod` paranccsal.

Azonban létezik egy gyosabb módszer is -- másold le a már létező `/dev` alkönyvtárad tartalmát, majd töröld le azokat az eszközöket, amikre nincs szükséged. Az egyetlen szükséges teendő a `-R` kapcsoló használata a különleges eszköz állományok másolásakor. Ez úgy másolja át az alkönyvtárat, hogy nem próbálkozik az állományok belsejének másolásával. Figyelj nagyon, hogy nagybetűs R-t használj!. Ha kisbetűs `-r` kapcsolót használod, valószínűleg meg sem állsz a teljes merevlemez-tartalmad átmásolásáig, vagy legalábbis addig, amíg nem telítődik a lemezed. Ezért légy óvatos, és a következő utasítást használd:

            cp -dpR /dev /mnt

feltéve, hogy a lemezt a `/mnt` alkönyvtárba illesztetted. A `dp` kapcsoló gondoskodik a szimbolikus láncok láncokként való másolásáról, így nem a célállományt másolod át, valamint megőrzi az eredetleg használt attribútumokat, így a tulajdonos információkat is.

Ha a nehezebb utat szeretnéd járni, használd a `ls -l` parancsot a major és minor eszközszámok megjelenítéséhez a másolandó eszközökről, majd hozd létre őket az `mknod` paranccsal a lemezeden.

Habár az eszközöket lemásoltad, megéri leellenőrizni, hogy minden általad szükségesnek tartott különleges eszköz rákerült-e a biztonsági helyreállító lemezedre. Például, a szalagos eszközök az `ftape` állományt használják, így ha szalagos lemezmeghajtódhoz hozzá szeretnél férni az indítólemezről, minden ilyen állományt át kell másolnod.

Jegyezzük meg, hogy minden egyes különleges eszköz állományhoz egy-egy inode-ra van szükség, és az inode nagyon szűkös erőforrás, különösen lemezen lévő állományrendszereken. Ez szükségessé teszi, hogy minden szükségtelen eszköz specifikus állományt eltávolíts, csak azokat hagyd meg a `/dev` alkönyvtárban, amikre valóban szükséged lesz. Például ha nincsenek SCSI lemezeid, minden további nélkül eltávolíthatsz minden `sd`-vel kezdődő eszköz állományt. Hasonlóképpen, ha nem akarsz soros csatolót használni, minden `cua`-val kezdődő eszköz törölhető.

Bizonyosodj meg arról, hogy a következő állományokat csatolod ebből az alkönyvtárból: `console, kmem, mem, null, ram, tty1`.

### /etc

Ez az alkönyvtár számos konfigurációs állományt tartalmaz. A legtöbb állományrendszeren ezeket három csoportba sorolhatjuk:

1. Minden esetben szükségesek, pl. `rc, fstab, passwd`.
2. Lehet, hogy kellenek, de senki sem elég biztos benne.
3. Szükségtelen hulladék.

A lényegtelen állományokat a következő utasítással ismerheted fel:

> `

>             ls -ltru

> `

Ez a fordított sorrendben kilistázza a legutóbbi hozzáférés szerint rendezve az állományokat, tehát amelyik állományhoz nem volt hozzáférés, le lehet hagyni a gyökér lemezről.

Az én gyökér lemezemen 15 darab konfigurációs állomány található. Ez három csoportra szűkíti a kezelendő állományok halmazát:

1. Állományok, melyeket be kell konfigurálni az indító/gyökér rendszerhez.
   1. `rc.d/*` -- rendszerindító és futásszint váltó szkriptek
   2. `fstab` -- beillesztendő állományrendszerek listája
   3. `inittab` -- az `init` folyamat állományai, az indításkor elsőként elinduló folyamat.
2. Állományok, melyekről gondoskodni kell az indító/gyökér rendszerhez.
   1. `passwd` -- felhasználók listája, home könyvtárak, stb.
   2. `group` -- felhasználói csoportok
   3. `shadow` -- felhasználók jelszavai. Nem kötelező ezt használnod.
   4. `termcap` -- a terminál képesség-adatbázisa.
   Ha fontos a biztonság, a `passwd` és a `shadow` le kell csupaszítani, hogy megakadályozd a felhasználói jelszavak lemásolását a rendszerről, és így amikor lemezről indítod a rendszert, a nemkívánatos bejelentkezéseket visszautasítja a rendszer. Győződj meg arról, hogy a `passwd` legalább a `root`-ot tartalmazza. Ha szeretnél más felhasználót is beengedni, gondoskodj róla, hogy létezzen a home könyvtára, és a parancsértelmezője. `termcap`, a terminál adatbázis tipikusan több száz kbyte hosszú. Az indító/gyökér lemezeden lévő változatot célszerű úgy lecsupaszítani, hogy csak az általad használt terminál(ok) számára tartalmazzon leírást, ami általában a `linux-console` bejegyzés.
3. A maradék. Működnek ebben a pillanatban, így békén hagyom őket.

Ezután ténylegesen lét állományt kell konfigurálnom, és meglepően kevés dolgot fognak tartalmazni.

- `rc`-nek a következőket kellene tartalmaznia:

              #!/bin/sh
              /bin/mount -av
              /bin/hostname Kangaroo

  Bizonyosodj meg róla, hogy az alkönyvtárak helyesek. Nem kell a `hostname`-t futtatnod, egyszerűen csak jól néz ki, ha teszed.
- `fstab`-nak legalább a következőket kell tartalmaznia:

              /dev/ram0       /               ext2    defaults
              /dev/fd0        /               ext2    defaults
              /proc           /proc           proc    defaults

  Lemásolhatod a már létező `fstab`-od bejegyzéseit, de nem célszerű automatikusan beillesztened a merevlemezed partícióit. Használd a `noauto` kulcsszót esetükben. A merevlemezed sérült, vagy halott is lehet, amikor az indító lemezt használod.

Az `inittab`-ot úgy kell megváltoztatnod, hogy a `sysinit` sora a `rc`-t futtassa, vagy valami alap indító szkriptet használjon. Emellett, ha biztos akarsz lenni benne, hogy soros portról se tudjanak felhasználók bejelentkezni, kommentezd ki az összes olyan `getty` bejegyzést, ami a sor végén `ttys` vagy `ttyS` eszközre hivatkozik, csak a `tty` portokat hagyd meg, így csak a konzolon tudsz bejelentkezni.

Egy minimális `inittab` állomány például így nézhet ki:

            id:2:initdefault:
            si::sysinit:/etc/rc
            1:2345:respawn:/sbin/getty 9600 tty1
            2:23:respawn:/sbin/getty 9600 tty2

Az `inittab` állomány mondja meg, hogy milyen rendszer fusson a különböző állapotokban, beleértve az indulást, a több-felhasználós üzemmódba váltást, stb. Bizonyosodj meg az `inittab`-ban hivatkozott állománynevek helyességéről. Ha az `init` nem találja valamely említett programot, az induló lemez futtatása meg fog állni, és még csak hibaüzenetet sem fogsz kapni.

Jegyezzük meg, hogy néhány programot nem lehet máshova mozgatni, mert más programok bedrótozva tartalmazzák a helyét. Például az én rendszeremen a /etc/shutdown a /etc/reboot-ba van bedrótozva. Ha `reboot`-ot átmozgatom /bin/reboot-ra, és kiadom a `shutdown` parancsot, az nem fog működni, mert nem találja a `reboot` állományt.

A többiről annyit, hogy az `/etc` alkönyvtáradban levő összes szöveges állományt egyszerűen csak másold át, és az összes olyan `/etc`-beli összes olyan futtatható állományt, amiről nem tudod biztosan, hogy nem lesz rá szükség. Támpontot adhat ebben a Sample rootdisk directory listings fejezet. Valószínűleg elegendő lesz csak ezokat az állományokat átmásolni, de sokmindenben különbözhetnek egymástól a Linux rendszerek, tehát nem lehetsz biztos benne, hogy a te rendszereden ugyanazon állományok halmaza pontosan egyezik a listában megadott állományokkal. Az egyetlen megbízható megoldás az, hogy az `inittab`-ból kiindulva megvizsgálod, hogy mire van szükség.

A legtöbb mai rendszer a /etc/rc.d/ alkönyvtárat tartalmazza a különböző futásszintek parancsértelmező szkriptjeinek tárolására. Az alkönyvtár állhat egyetlen `rc` szkriptből is, de talán egyszerűbb átmásolni az `inittab` és az /etc/rc.d alkönyvtárat a már működő rendszeredről, és kiszedni a `rc.d` alkönyvtár szkriptjeiből a lemezes rendszerkörnyezet számára nem fontos dolgokat.

### /bin és /sbin

A `/bin` alkönyvtár a megállapodás szerint az alap műveletek elvégzése szempontjából szükséges extra eszközök tárolóhelye, olyan eszközök találhatóak itt, mint az `ls`, `mv`, `cat` és a `dd`. A Sample rootdisk directory listings függelékben találsz egy példát a `/bin` alkönyvtár állományairól, illetve az `/sbin` alkönyvtár tartalmáról. Ez nem tartalmaz minden mentéshez és mentésből való visszaállításhoz szükséges eszközt, mint például a `cpio`, `tar` és `gzip` parancsok, mert az indító/gyökér lemezen való helytakarékosságból külön eszközlemezre tettem őket. Amikor az indító/gyökér lemez betöltődik, bemásolódik a memórialemezre, hogy felszabadítsa a lemez meghajtót másik lemez beillesztéséhez, ami esetünkben az eszköz lemez lesz. Általában én ezt az `/usr` alkönyvtárba illesztem be.

Az eszköz lemez készítését ebben a fejezetben olvashatod a Building a utility disk bekezdésben. Minden bizonnyal célszerű eltenni egy biztonsági másolat készítése esetén az ehhez használt biztonsági mentő eszközöket, hogy ne kelljen időt pazarolnod olyan verziók telepítésére, amik esetleg nem is olvasság a biztonsági mentéseket tartalmazó szalagokat, lemezeket.

Győződj meg róla, hogy csatoltad-e a következő programokat: `init`, `getty` vagy ezzel egyenértékű program, `login`, `mount`, valamelyik az rc szkriptjeidet futtatni tudó parancsértelmező, az `sh`-ból a parancsértelmezőre mutató lánc.

### /lib

A `/lib` alkönyvtárban tárolhatod a szükséges osztott eljáráskönyvtárakat és a betöltőket. Ha a szükséges eljáráskönyvtárak nem találhatóak a `/lib` alkönyvtárban, akkor a rendszer nem fog tudni elindulni. Ha szerencséd van, láthatsz olyan hibaüzenete, ami utal arra, hogy miért is nem tudott elindulni a rendszered.

Majdnem minden programnak szüksége van legalább a `libc` eljáráskönyvtárra, `libc.so.N`, ahol az N az aktuális verziószám. Nézd meg a `/lib` alkönyvtárad. A `libc.so.N` valószínűleg csak egy szimbolikus lánc, ami egy teljes verziószámú állományra mutat:

> `

>     % ls -l /lib/libc*
>     -rwxr-xr-x   1 root     root      4016683 Apr 16 18:48 libc-2.1.1.so*
>     lrwxrwxrwx   1 root     root           13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*

> `

Ebben az esetben a `libc-2.1.1.so`-ra van szükséged. Ahhoz, hogy megtudd, melyik eljáráskönyvtárakra van még ezen kívül szükséged, meg kell nézned, hogy a csatolni kívánt binárisoknak mik a függőségeik. A függőségek ellenőrzését az `ldd` paranccsal tudod leellenőrizni. Például:

            % ldd /sbin/mke2fs
            libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)
            libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)
            libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)
            libc.so.6 => /lib/libc.so.6 (0x4002c000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Minden jobboldalon szereplő állományra szükség van. Az állomány lehet szimbolikus lánc is.

Jegyezzük meg, hogy néhány eljáráskönyvtár elég nagy, és nem könnyen fog ráférni a gyökér lemezedre. Például a fent is említett `libc.so` közel 4 mega. Valószínűleg meg kell nyírbálnod az eljáráskönyvtárakat, amikor a gyökér lemezre másolod őket. Nézd meg a Reducing root filesystem size fejezetet, hogy ezt hogyan teheted meg.

A `/lib` alkönyvtárban az eljáráskönyvtárak betöltőjét is csatolnod kell. A betöltő lehet egyrészt `ld.so` (a.out eljáráskönyvtárakhoz), vagy `ld-linux.so` (ELF eljáráskönyvtárakhoz). Az `ldd` újabb változatai pontosan meg is mondják, hogy melyik betöltőkre van szüksége az eljáráskönyvtárnak, mint a fenti példában is láthattad, de régebbi verziók esetleg nem adják ezt meg. Ha nem vagy biztos benne, hogy melyikre van szükséged, futtasd a `file` parancsot az eljáráskönyvtárra. Például:

            % file/lib/libc.so.4.7.2 /lib/libc.so.5.4.33 /lib/libc-2.1.1.so
            /lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped
            /lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 80386, version 1, stripped
            /lib/libc-2.1.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped

A `QMAGIC` jelzi, hogy a `4.7.2`-esek az a.out eljáráskönyvtáraké, az `ELF` jelzi, hogy a `5.4.33`-esek és a `2.1.1`-ek az ELF-eké.

Másold a szükséges betöltőkez az építendő gyökérállományrendszerre. Az eljáráskönyvtárakat és a betöltőket gondosan össze kell vetni a csatolt binárisokkal. Ha a kernel nem tudja betölteni a szükséges eljáráskönyvtárat, általában hibaüzenet nélkül azonnal megáll a futása.

## 4.4 PAM és NSS számára szolgáltatandók.

A rendszerednek olyan dinamikusan betöltendő eljáráskönyvtárakra is szüksége lehet, amiket a ldd nem mutat meg.

### PAM (Pluggable Authentication Modules: Beilleszthető Hitelesítő Modul).

Ha a rendszered PAM-ot (Pluggable Authentication Modules: Beilleszthető Hitelesítő Modul) használ, néhány külön intézkedést kell végezned az indítólemezeden ehhez, különben nem fogsz tudni bejelentkezni. A PAM röviden egy kifinomult, moduláris felépítésű módszer a felhasználók hitelesítésére és a szolgáltatásokhoz való hozzáférésük szabályozására. A legegyszerűbben úgy tudod kideríteni, hogy a rendszered használ-e PAM-ot, ha megnézed a merevlemezed /etc alkönyvtárát, hogy találsz-e benne pam.conf nevű állományt, vagy pam.d nevű alkönyvtárt. Ha bármelyik létezik, minimális PAM támogatásról gondoskodnod kell. (Másik lehetőség, ha lefuttatod az ldd-t a login állományodra. Ha a kimenet tartalmazza a libpam.so állományt, szükséged van a PAM-ra.)

Szerencsére a biztonság betöltő lemezek esetében nem kulcsfontosságú tényező, mivel bárki, akinek fizikai hozzáférése van a géphez gyakorlatilag úgyis bármit megtehetne. Ezért gyakorlatilag le is tilthatod a PAM-et egy egyszerű /etc/pam.conf állomány létrehozásával a gyökér lemezeden, ami így néz ki:

    OTHER   auth       optional     /lib/security/pam_permit.so
    OTHER   account    optional     /lib/security/pam_permit.so
    OTHER   password   optional     /lib/security/pam_permit.so
    OTHER   session    optional     /lib/security/pam_permit.so

Valamint másold le a `/lib/security/pam_permit.so` állományt a gyökér állományrendszeredre. Ez az eljáráskönyvtár körülbelül 8K, tehát minimális többletet jelent csak.

Jegyezzük meg, hogy ez a konfiguráció bárkinek teljes hozzáférést biztosít a gépeden levő összes állományhoz és szolgáltatáshoz. Ha valami miatt lényeges számodra az indítólemezed biztonsága, néhány, vagy az összes merevlemezeden lévő PAM beállítást a gyökér állományrendszeredre kell másolnod. Ehhez gondosan tanulmányozd át a PAM dokumentációját, és másolj át minden szükséges eljáráskönyvtárt a /lib/security alkönyvtárból a gyökér állományrendszeredre.

Az indítólemezedre rá kell tenned még a /lib/libpam.so állományt is, de már tudod, mivel futtattad a /bin/login-ra az ldd-t, hogy melyiket a megjelenített függőség alapján.

### NSS (Name Service Switch: Név Szolgáltatás Kapcsoló).

Ha glibc-t (azaz libc6) használsz, külön kell foglalkoznod a név szolgáltatásokkal, vagy nem fogsz tudni bejelentkezni. Az /etc/nsswitch.conf állomány szabályozza a különböző szolgáltatásokhoz szükséges adatbázis fellapozásokat. Ha nem tervezel más hálózatok szolgáltatásaihoz való hozzáférést (pl. DNS vagy NIS feloldás), csak egy egyszerű nsswitch.conf állományt kell előkészítened, ami így néz ki:

         passwd:     files
         shadow:     files
         group:      files
         hosts:      files
         services:   files
         networks:   files
         protocols:  files
         rpc:        files
         ethers:     files
         netmasks:   files
         bootparams: files
         automount:  files
         aliases:    files
         netgroup:   files
         publickey:  files

Ez azt mondja meg, hogy minden szolgáltatást csak helyi állományok biztosítanak. Csatolnod kell a `/lib/libnss_files.so.1` állományt is, ami dinamikusan fog betöltődni, hogy az állomány feloldásokat kezelje.

Ha hálózathoz való hozzáférést is tervezel az indítólemezedről, akkor gondosabban kidolgozott nsswitch.conf állományra lesz szükséged. Nézd meg az nsswitch manuál oldalt a részletekért. Tartsd észben, hogy minden szolgáltatáshoz, amit csatolsz, szükséged van a `/lib/libnss_`szolgáltatás`.so.1`-ra.

## 4.5 Modulok.

Ha moduláris kerneled van, össze kell szedned, hogy a lemezed rendszerindítás után mely modulokat szeretnéd betölteni. Esetleg szeretnéd mellékelni az `ftape` és `zftape` modulokat, ha mentő szalagos egységeid vannak, modulokat az SCSI eszközeid számára, ha vannak, és valószínűleg modulokat a PPP vagy SLIP támogatáshoz, ha szeretnél vészhelyzet esetén is hálózati hozzáférést.

Ezekez a modulokat a /lib/modules alkönyvtárban helyezheted el. Célszerű még az `insmod`, `rmmod` és az `lsmod` parancsokat is mellékelned. Ha automatikusan betöltődő modulokat szeretnél, mellékeld a `modprobe`, `depmod` és a `swapout` programokat is. Ha `kerneld`-t használsz, az /etc/conf.modules-el együtt kell a lemezre tenned.

Mégis, a modulok használatának legfőbb előnye abban van, hogy a nem kritikus modulokat átpakolhatod az eszközlemezre, és szükség esetén betöltheted, így kevesebb helyet használsz el a gyökér lemezen. Ha több eszközzel kell bajlódnod, jobb megoldásnak kínálkozik a modulok használata, mintha egy hatalmas kernelt készítenél az összes meghajtó szoftverrt belefordítva.

Jegyezzük meg, hogy ahhoz, hogy tömörített ext2 állományrendszerről rendszert indíthass, a memórialemezt és az ext2 támogatást bele kell fordítanod a kernelbe. Nem lehet őket modulként mellékelni.

## 4.6 Néhány utolsó simítás.

Néhány rendszerprogram, mint például a `login`, problémázik, ha nem létezik a /var/run/utmp állomány és a /var/log alkönyvtár. Így:

            mkdir -p /mnt/var/{log,run}
            touch /mnt/var/run/utmp

Végül, miután összeszedted az összes szükséges eljáráskönyvtárt, futtasd az `ldconfig` programot, hogy újrageneráld az /etc/ld.so.cache állományt a gyökér állományrendszeren. A cache megadja a betöltőnek, hogy hol találj az eljáráskönyvtárakat. Az `ld.so.cache` újragenerálásához a következő parancsot kell kiadnod:

            chdir /mnt; chroot /mnt /sbin/ldconfig

A `chroot` szükséges, mert az `ldconfig` mindig a gyökér állományrendszer számára generálja újra a cache-t.

## 4.7 Töltsük fel.

Ha végeztél a gyökér állományrendszer összeállításával, csatold le, másold át egy állományba, és tömörítsd be:

            umount /mnt
            dd if=ESZKÖZ bs=1k | gzip -v9 > rootfs.gz

Ha ezzel készen vagy, létrejön a `rootfs.gz` állomány, ami a tömörített gyökér állományrendszered. Ellenőrizd le a méretét, hogy biztosan ráfér-e egy lemezre. Ha nem, akkor vissza kell menned, és néhány állományt el kell távolítanod. A Reducing root filesystem size fejezet ad néhány támpontot arra, hogy hogyan tudod csökkenteni a gyökér állományrendszered méretét.

Következő Előző Tartalom