Linux Indítólemez HOGYAN: Hibakeresés, avagy a Legyőzött Gyötrődése.

Következő Előző Tartalom

## 7. Hibakeresés, avagy a Legyőzött Gyötrődése.

Amikor indítólemezeket készítesz, az első néhány próba esetén valószínűleg nem fog indulni. A gyökér lemezt egy általános megközelítés szerint a már létező rendszered komponenseiből célszerű összeállítanod, és próbálj meg addig eljutni, hogy a lemez-alapú rendszered üzeneteket jelenít meg a konzolon. Ha már elkezd veled beszélgetni, a csatát félig megnyerted, mert már láthatod, hogy miről van szó, és kijavíthatod a felmerülő különálló problémákat, amíg a rendszer zökkenőmentesen nem működik. Ha a rendszer minden magyarázat nélkül áll meg, a hiba okát megtalálni elég nehéz. Ahhoz, hogy a rendszer addig eljusson, amikor már kommunikál veled, több fontos komponens jelenlétére, és helyes konfigurálásra van szükség. Amikor a rendszer nem beszél hozzád, a probléma kivizsgálásának ajánlott eljárása a következő:

- Ilyesmi üzenetet láthatsz:

      Kernel panic: VFS: Unable to mount root fs on XX:YY

  Ez gyakori probléma, és csak néhány oka lehet. Először, ellenőrizd az XX:YY eszközt az eszközök kódjának listájában, ez a helyes gyökér eszköz? Ha nem, valószínűleg nem futtattad az `rdev -R` parancsot, vagy rossz image-re alkalmaztad. Ha az eszközkód helyes, gondosan ellenőrizd a kernelbe fordított eszközmeghajtó szoftvereket. Győződj meg róla, hogy szerepel-e floppy lemez, memória meghajtó és ext2 állományrendszer.
- Nézd meg, hogy a gyökér lemez tényleg tartalmazza-e az alkönyvtárakat, amit tartalmaznia kellene. Könnyű véletlenül rossz szintre másolni őket, és ilyesmit kapsz végeredménynek: /rootdisk/bin, ehelyett: `/bin` a gyökér lemezeden.
- Nézd meg, hogy van-e /lib/libc.so állomány ugyanazzal a lánccal, mint amit a merevlemezed `/lib` alkönyvtárában láthatsz.
- Ellenőrizd, hogy a lézető rendszered `/dev` alkönyvtárában lévő szimbolikus láncok léteznek-e a gyökérlemez állományrendszereden, ahol a láncok olyan eszközre mutatnak, melyek léternek a gyökér lemezeden is. Néhány esetben a `/dev/console` láncok fontosak lehetnek.
- Ellenőrizd, hogy áttetted-e a `/dev/tty1, /dev/null, /dev/zero, /dev/mem, /dev/ram` és `/dev/kmem` állományokat.
- Ellenőrizd a kernel konfigurációdat -- minden a bejelentkezés pontjáig szükséges erőforrást bele kell fordítani, nem működik, ha modulba raktad. Tehát a memórialemez és az ext2 támogatást is bele kell fordítanod a kernelbe.
- Ellenőrizd, hogy a kernel gyökér eszköz és memórialemez beállításai helyesek-e.

Ha ezeket az általános dolgokat megvizsgáltad, íme néhány konkrétabb állomány, amit ellenőrizhetsz.

1. Győződj meg róla, hogy az `init`-et /sbin/init vagy /bin/init néven mellékelted. Ellenőrizd, hogy futtatható-e.
2. Futtasd a `ldd init`-et, hogy ellenőrizd az init eljáráskönyvtárait. Általában ez csak a `libc.so`, de azért csak ellenőrizd. Bizonyosodj meg róla, hogy mellékelted az összes eljáráskönyvtárat és a betöltőket.
3. Bizonyosodj meg róla, hogy a megfelelő betöltőket használod az eljáráskönyvtárakhoz -- `ld.so`-t az a.out-hoz, vagy `ld-linux.so`-t az ELF-hez.
4. Nézd meg az indítólemezed állományrendszerén az /etc/inittab állományban a `getty` (vagy valami `getty`-szerű program, mint a `agetty`, `mgetty` vagy `getty_ps`) programhívásokat. Kétszer is hasonlítsd össze ezeket a merevlemezeden lévő `inittab`-bal. Nézd meg az általad használt program manuálját, hogy egyáltalán értelmes dolgok vannak-e benne. Az `inittab` valószínűleg a legtrükkösebb rész, mert a szintakszis, és a tartalom az általad használt init programtól és a rendszer természetétől függ. Az egyetlen lehetőség, hogy megbirkózz vele, ha elolvasod az `init` és `inittab` programokra vonatkozó manuál oldalakat, valamint pontosan megvizsgálod, hogy mit is csinál a rendszered induláskor. Ellenőrizd, hogy az /etc/inittab-nak van-e inicializáló bejegyzése. Ennek a rendszer inicializáló szkript végrehajtására kell utasítást tartalmaznia, és a szkriptnek is léteznie kell.
5. Mint az `init`-nél, futtasd az `ldd`-t a `getty`-dre is, hogy lássad, mi szükséges hozzá, és hogy meggyőződhess róla, hogy a szükséges eljáráskönyvtár-állományokat és betöltőket elhelyezted a gyökér állományrendszereden.
6. Győződj meg róla, hogy csatoltál-e parancsértelmezőt (pl. `bash` vagy `ash`), mely képes futtatni az rc szkriptjeidet.
7. Ha van /etc/ld.so.cache állomány a mentő lemezeden, generáld újra.

Ha az `init` elindul, de a következő üzenetet kapod:

            Id xxx respawning too fast: disabled for 5 minutes

az az `init`-ből jön, általában azt jelzi, hogy a `getty` vagy `login` az elindulása után közvetlenül meg is hal. Ellenőrizd a `getty` és a `login` futtatható állományokat és az eljáráskönyvtárakat, amiktől függenek. Nézd meg, hogy a /etc/inittab állománybeli meghívásuk helyes-e. Ha szokatlan üzeneteket kapsz a `getty`-től, az jelentheti azt, hogy hibásan hívod a /etc/inittab-ból. A getty paraméterei változnak, még az `agetty` különböző verziói között is számos inkompatibilis hívásformát jeleztek.

Ha megkapod a bejelentkező promptot és érvényes felhasználói nevet adsz meg, de a rendszer azonnal egy újabb felhasználói név megadását kéri, a probléma valószínűleg a PAM-mal vagy az NSS-el lesz. Nézd meg a PAM and NSS fejezetet. A probléma származhat még abból is, hogy shadow jelszavakat használsz, de nem másoltad át az indítólemezedre a /etc/shadow állományt.

Ha megpróbálsz néhány futtatható állományt lefuttatni, mint például a `df` parancsot, ami megtalálható a mentő lemezeden, és ilyen üzenetet kapsz: `df: not found`(a df nem található), két dolgot nézz meg: (1) Győződj meg róla, hogy a binárist tartalmazó alkönyvtár szerepel a PATH elérési útvonalban, és (2) Győződj meg róla, hogy a program számára szükséges eljáráskönyvtárak (és betöltők) rendelkezésedre állnak-e.

Következő Előző Tartalom