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