HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Ubuntu boot folyamat, initramfs

2008.05.14. 19:31 bagoj ur

Először is nyugtassatok meg, hogy van ez a boot folyamat dolog annyira érdekes, hogy rászánhatom az időmet! Köszi... :-)

Ma végre volt kis időm, és megnézegettem, hogyan is dolgoznak a törpék az Ubuntu initramfs csodájában. Konklúzió: way fuckin' too much complicated, és itt még tudnék pár jelzőt írni. Főleg azok után, hogy szépen összehasonlítottam az Eee PC hasonló megoldásával. Talán ha ezeknek a mini fájlrendszereknek a méretét leírom, Ti is össze tudjátok gyorsan hasonlítani:

EeePC 1,2kbyte vs. Ubuntu 22,6 Mbyte (!), azaz 20x-os az Ubuntu túlsúlya.

Természetesen igazságtalan vagyok, hiszen az Eee hardvere minden esetben ugyanaz, ezért nem kell felkészülni mindenféle váratlan helyzetre, az Ubuntu pedig egy általános célú operációs rendszer. De nem csak sok drivert pakoltak az Ubuntuba, hanem lehetetlen módon el is bonyolították a dolgot! "Mint az közismert", az initramfs gyökerében lévő init szkript indul el először, és az futtat le mindenfélét.

Szokásos keretes írásom arról fog szólni, hogy hogyan lehet belekukkantani saját initrd-nk belsejébe. Keresgéljünk a /boot alatt! A grub menüjében (/boot/grub/menu.lst) benne van egy initrd=xxxxx sor is. Keressük meg azt a szekciót, amit jelenleg ki szoktunk választani a grub menüből (azaz a jelenleg futó kernelre vonatkozó paraméterek)! Ha nem szoktál semmit kiválasztani, akkor nagy valószínűséggel az első lesz az. :-) Szóval az a bizonyos xxxxx az initrd elérési útja és neve. Ha megvan, akkor másoljuk ki magunknak a fájlt egy kényelmes  helyre. Ez a fájl gzip-pel tömörítve van, de a gzip addig nem foglalkozik velünk, amíg nem .gz a kiterjesztés. A kapott fájl pedig egy ún. cpio archívum, amelyet ha kibontunk, megkapjuk az egész kis fájlrendszert; /bin, /lib, stb. könytárakkal. Éppen ezért nehogy véletlenül rossz helyen (könyvtárban) legyünk a kicsomagoláskor! Ha rácsomagolunk a /bin-re, az nem túl egészséges.

bagoj@aranyhal:~$ mv initrd.img-2.6.24-16-generic initrd.img-2.6.24-16-generic.gz
bagoj@aranyhal:~$ gunzip initrd.img-2.6.24-16-generic.gz
bagoj@aranyhal:~$ cpio -i < initrd.img-2.6.24-16-generic

Nincs elírás, a gunzip leszedi a .gz kiterjesztést, és az a kacsacsőr nagyon is fontos! Anélkül a cpio állni fog és várni az idők végezetéig...

Ezek után máris lehet nézegetni a nyalánkságokat. ;-)

Mi ez a mindenféle? Aki ért a bash szkripteléshez, maga is megnézheti, a többi, szerencsésebb sorsú ember számára:

1. Kell nekünk egy / fájlrendszer, amin dolgozunk. Ez most az initramfs lesz, azaz az a mini fájlrendszer, amit a keretesben kicsomagolunk.
2. Kell egy /proc, /sys és /dev, ami szükséges ahhoz, hogy az eszközöket, perifériákat, folyamatokat lássuk.
3. Fel kell dolgozni a parancssori paramétereket. Aki itt már elismerően hümmög és sejti, hogy ezek a paraméterek a grub-ban megadott boot paraméterek, az nyert egy kakasos nyalókát.
4. El kell végezni azt a bizonyos munkát a modulok betöltésével, hiszen az initrd-nek ez a legfőbb feladata.
5. Át kell mozgatni a felcsatolt partíciókat a /root alá (ahogyan az előző postban írtam), hogy az igazi init program, minden programok szülőanyja megtalálhassa.
6. Át kell adni a vezérlést az igazi initnek.

Ezt az Eee PC-ben megoldották olyan 40 sorban, az Ubuntuban több száz sornyi kóddal. Azt mindenesetre kapisgálom, hogy mi volt eddig a probléma; és ennek megfelelően AZÉRT IS ki fogom gyökölni a unionfs szkriptemet, ugyanis egyre inkább meggyőződésem, hogy nagyon jó dologba tenyereltem bele. Hiszen mostanában nagyon terjednek a memóriakártyák és SSD merevlemezek, amelyek sok írást nem bírnak ki, ezért adódik hogy védjük őket. Nem utolsó sorban végre belemélyedtem az initramfs szépségeibe is, amiktől eddig a sors megóvott...

Most már hamarosan. Addig is írjatok, hogy mennyire érdekes a téma (de az az igazság, hogy rengeteg blogot látok, amelyik linkeket gyűjt, meg olyan is van, amelyik alkalmazásokkal foglalkozik. Viszont nehéz találni, főleg magyarul ilyesféle, rendszerközeli dolgokkal foglalkozó blogot. Ezért foglalkozom most ezzel a témával).

Mai napi bónusz annak, aki idáig még nem unja: A boot felgyorsításának az is remek módja (kernel újrafordítás nélkül!), hogy kigyököljük a kernel-fordítás post alapján, hogy milyen modulok kellenek nekünk; majd felrakjuk az initramfs-tools csomagot (ez kell az initrd újragenerálásához, ezt múltkor elfelejtettem írni), majd a /etc/initramfs-tools/initramfs.conf-ban megkeressük a MODULES=most sort, és átírjuk MODULES=list-re, majd ugyanebben a könyvtárban a modules fájlba felsoroljuk, hogy mi kell nekünk. Kevésbé bátrak válasszák a MODULES=dep opciót. A "most" ugye azt jelentené, hogy a legtöbb modult betölti, a "dep" kitalálja, mire van szükségünk, a "list" pedig csak azokat tölti be, amiket mi szeretnénk. Ne felejtsétek, hogy csak azok a modulok igazán szükségesek, amikre a boot-nak szüksége van! A többi modult be tudja tölteni a kernel később is, amikor szükség van rá.

Ezek után (rootként ám!):
root@aranyhal~# update-initramfs -u
Ha valami nem jött össze, ne szigyjatok nagyon, hanem írjatok és akkor kitérek arra, hogyan mentsük meg a rendszert félhalott állapotból. :-)

 

19 komment

Címkék: linux ubuntu boot eee konfigurálás

A bejegyzés trackback címe:

https://bagojur.blog.hu/api/trackback/id/tr16612287

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

birno 2008.05.14. 22:14:10

Szerintem érdekes a téma, mindenféleképp folytasd, ez a blog legalább nem csak arról szól, hogy az új Ubuntu-ra való frissítés épp milyen szívással járt emberünknek, hanem valami pluszt is ad.
Mondjuk ezt a témát én megoldottam egy 2,4Mb-os monolitikus kernellel, ha netán valamit változtatni kell 13 perc alatt lefordul egy Athon Xp 2500-ös gépen és szerintem gyorsabb is lett így a rendszer.
Bár egy korábbi írásodból rémlik, hogy neked mindenféleképp kell az initramfs, de most lusta vagyok előkeresni, hogy miért is. :)

szonik 2008.05.14. 23:11:59

Szia, szerintem is nyomassad! Az initramfs-t ma este kipróbálom és jövök vissza, ha valami nem jött össze.... xD

szonik 2008.05.14. 23:40:56

A kerneles post alapján lsmod-dal listázva betettem vagy 15 modult, de a boot nem lett gyorsabb. Nem tudom felsorolni mert a spam ellenőrzés kiakad.

Birno: lehet, hogy én is kernelt fogok fordítani? Nem mintha nem tudnám kivárni amíg bebútol de kíváncsi vagyok

bagoj.ur 2008.05.15. 09:15:22

Köszi a hozzászólásokat! Jó tudni, hogy van akiket érdekel, amit csinálok (különben nem lenne értelme leírni).

@szonik: érdekes, én azt vártam, hogy gyorsabban eljut a boot képernyőig, de lassabban indul el azután (mivel a hald, dbus és kis barátai behúzzák a szükséges modulokat). De most így végiggondolva, a hald meg a dbus elindul boot közben... hmm, na mindegy.

birno 2008.05.15. 10:00:24

szonik: Szerintem megéri, a boot is gyorsabb valamivel, de olyan nagy időre ne számíts, pár másodperc max, viszont szerintem működés közben is mintha érezhető lenne a jótékony hatása, bár abban most nem vagyok biztos, hogy simán csak a kernel forgatásnak köszönhető vagy annak, hogy monolitikus.

Obor Oborovics (törölt) 2009.03.05. 11:41:44

Jajj! Ámbár elég régi a post. Nekem az a bajom azzal a fránya initramfs-el, hogy a régi laptopomnál valamiért nem töltődik be pl az idevezérlő modulja (pata_legacy). Az (initramfs) promtnál betöltöm kézzel, dmesg szerint felismeri az eszközöket majd exit, de továbbra is makacskodik. Most ezért mastereljek újra egy telepítőcdt?

bagoj ur 2009.03.05. 17:22:49

@Obor Oborovics: Szerencsére nem kell ezt tenned. Az initramfs-tools-t ha felrakod, akkor a /etc/initramfs-tools könyvtárban benne vannak azok a szkriptek, amik lefutnak a boot előtt. Ha ezek közül valamelyikbe belerakod, hogy húzza be a modulodat, akkor mennie _kell_, hiszen úgy veszem ki, a pata_legacy modul megvan már akkor is, amikor az initramfs fut. Szóval vizsgáld meg a szkripteket, rakj bele egy modprobe-ot (persze teljes elérési úttal), és aztán "update-initramfs -u", ez belegenerálja az initramfs-be a Te változtatásaidat

bagoj ur 2009.03.05. 17:23:47

@Obor Oborovics: De otthon megnézem majd, jó? Nem vagyok most biztos benne, fejből írtam csak a fentieket.

bagoj ur 2009.03.05. 17:36:40

@Obor Oborovics: Hopp na gyorsan utánanéztem a neten. Tehát a /etc/initramfs-tools/modules fájlba rakd bele a neked kellő modult, és a /etc/initramfs-tools/scripts/init-top könyvtárba tegyél egy fájlt, amiben a crashbangen kívül az van hogy /sbin/modprobe . (A crashbang a #!/bin/sh), tehát így:

#!/bin/sh
/sbin/modprobe

Ezután "update-initramfs -u", majd keresztbetett ujjak és reboot. :-) Garanciát nem vállalok, mivel én nem teszteltem le. De még nézd meg ezt is, talán segít:
bagojur.blog.hu/2008/05/29/bagoj_visszater

Obor Oborovics (törölt) 2009.03.06. 22:27:29

Köszönöm, hogy ilyen készségesen segítesz!

Itt egy boot cdről van szó, illetve többről. Egy régi pentium1-es laptopra akarok linuxot telepíteni. Ez esetben a következők jöttek szóba: Slackware, Ubuntu Mini Remix és Crunchbang Linux, ami szintén Ubu alapú.

Jelen tudásom szerint ez a két utóbbi Ubu, amely telepítőcédéjén az initrd tartalmazza a kérdéses modult.
A slaki és ubuntu kernelek között az a különbség, ezen probléma perspektívájából, hogy a slakiban mind az ide, mind a libata meghajtók bele vannak forgatva a kernelbe, ubi estén pedig modulként betölthetők.

Illetve az ubunti kernelben a config_ide=n , ami a régi ide alrendszert kapcsolja ki, elviekben ez nem kellene, hogy gondot jelentsen, hiszen a slaki dmesg-je szerint is a pata_legacy drivert használja.

Az alaplapi chipkészlet amúgy egy OPTi 557/558M. Mellékesen a *BSD kernelek frankón, szinte minden eszközt felismernek (csak az OpenBSD kernelt kellene újrafordítani az audio felismerése miatt).,

Obor Oborovics (törölt) 2009.03.06. 22:32:24

A Slackware nem volna rossz dolog, de 1előre az Ubuntut próbálom erőltetni a frissítés és a csomagkezelés rugalmassága miatt, mivel Slaki alatt a hálózattal is gondok vannak, annak ellenére, hogy a driver adott (pcnet_cs).

Obor Oborovics (törölt) 2009.03.06. 22:34:17

Végül is a lényeg az lenne, hogy remasterelés nélkül tudjam telepíteni az Ubit cdről, most ez nem lehetséges, hiszen nem "látja" a telepítési célt, sem persze a cdrom-ot ahonnét telepíteni kellene. :)

Obor Oborovics (törölt) 2009.03.06. 22:56:55

Nézegettem a kernel driver adatbázist, hát mondjuk egyes OPTi Viper ide vezérlőket a 2.6.29-es verziótól fog támogatni a rendszermag. Azt is úgy látom, hogy (Experimental) jelzővel ellátva. Mire ez meglesz addig már leszesz OpenBSD 4.5 vagy NetBSD 5. Úgyhogy meggondolandó a viaskodás ezzel a problémával. :)

bagoj ur 2009.03.08. 11:06:28

@Obor Oborovics: Ha csak remasterelés után menne az Ubi, akkor javaslom a kisebb ellenállás felé haladást; a Crunchbang úgyis jobban illik egy Pentium I géphez, mivel a desktop része lájtosabb. Telepítés előtt elég nehéz farigcsálni az initrd-t szóval... szerintem Crunchbang vagy megvárod az OpenBSD-t... :)

bagoj ur 2009.03.08. 11:07:49

@Obor Oborovics: Firkáltam is pár sort a Crunchbangről, ha esetleg érdekel:

bagojur.blog.hu/2009/02/01/ubuntu_minimal_visszavag

Obor Oborovics (törölt) 2009.03.09. 09:34:59

Olvastam. Hanem: éjjeli álmatlanság okán ismét nekirugaszkodtam. Egyedül a cdromot nem tudja felcsatolni. Dmesg szerint felismeri "sr0" -ként, de a /dev alatt nem jön létre az eszköz, míg a merevlemez esetén sda1 sda2 létrejönnek. Be tudom kapcsolni a swapot stb. Játszogattam a boot paraméterekkel, sajnos mégis kézzel kell betölteni a modult, de annyi baj legyen - csak működne. Ha tudom, idebarvúrkodom a vonatkozó dmesg részeket.

Obor Oborovics (törölt) 2009.03.09. 10:26:17

Nos, meg is vagyok. Itt a dmesg összveszerkesztve a begépelt parancsokkal és a hibaüzenetekkel:
oboroborovics.pastebin.com/m5cb7038f

bagoj ur 2009.03.28. 14:47:20

@Obor Oborovics: Bocs, épp külföldre repültem meg egyébként se értem rá, csak most tudok válaszolni: Arra azért figyelj, hogy nem mindegy, hova mountolod fel a hda1-et, hda2-t. Az initram alatt a /root alatt keresi a root fájlrendszeredet, és később ezt remountolja /-ként. Próbáld meg azzal.

Obor Oborovics (törölt) 2009.06.11. 21:40:39

@bagoj ur: hmm, de tök vagyok. köszönöm! azóta ugye uj *buntu, új kernel is van. Meg fogom próbálni.