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

Debian, fordítsunk kernelt

2014.04.11. 14:17 bagoj ur

Megpróbálok még egy kicsi tartalékot kisajtolni a Debianból, hogy felgyorsítsam a boot időt. A kernel fordítás sokak szemében nagyon bonyolult és "túl kocka" (értsd: túl kockázatos) megoldás, sokkal jobb a stock kernel stb. mások szerint a kernel fordítás kellemes szórakozás (sic!). Az én álláspontom az, hogy akinek elég a felhasználói térben mozogni, használjon stock kernelt, akit érdekel a kernel működése is, az nem tud úgysem meglenni fordítás nélkül. Én is öregszem egyébként, a 2.0-s és 2.2-es kernelhez még nagyon egyszerű modulokat is írtam, a 2.[4|6]-osat lefordítottam párszor, a 3-as szériához még nem nyúltam. Nade majd most.

Fontos megjegyzés, hogy olyan gépen nem érdemes játszani, amelyet bármely pillanatban használni kell. Fel kell készülni arra, hogy ilyen mély konfigurációs változások eredménye lehet az is, hogy nem tudunk bebootolni egy rövid ideig és boot médiáról kell helyreállítanunk a dolgokat. De az esetek 99,9%-ban nem lehet különösebb probléma, hiszen nem töröljük a régi, stabil kernelünket és azzal bármikor vissza lehet bootolni.

Másik fontos dolog, hogy mivel a jelenlegi célom a kernel fordítással az initrd kiküszöbölése, ezért ha USB médiáról bootolunk, nem érdemes nekiállni az egésznek, lent részletezem, hogy miért. Ez nem jelenti azt, hogy egy optimalizált kernel initrd-vel ne lenne hasznos, azonban ennek konfigurálása néhány apróságban eltér, ezeket lásd a végén.

1. Tegyük fel a fordításhoz szükséges csomagokat:

sudo apt-get install linux-source kernel-package fakeroot libncurses5-dev

Ez még egy nagy rakás csomagot fel fog rakni, ne ijedjünk meg tőle, de jegyezzük fel, a fordítás után el lehet távolítani őket és akkor nem foglalják a helyet. Azért kell ennyi minden, mert a Debian-féle megközelítést használjuk, tehát a végén lesz egy saját kernel .deb csomagunk, amelyet simán fel lehet telepíteni akár több gépre. Így nem kell vadászni a fájlokra, ha esetleg majd később törölni akarjuk ezt a kernelt vagy fordítunk újat, tehát mindenképpen praktikus megoldás.

Hogy felfrissítsem az emlékezetemet arról, hogy milyen hardver fut a gépben, egy lspci, egy lsusb (az eszközök típusa miatt) és egy mount (a fájlrendszer támogatás miatt) kimenetet el szoktam tenni magamnak egy text editorban. (Pl. ilyenkor szokott eszembe jutni, hogy ugyan az ISA busz már réges régen kiment a divatból, de az Intel procinak még mindig van valami ISA vezérlője, amihez nem baj ha belefordítom a támogatást.

A telepítés után a kernel forrás a /usr/src alatt lesz, nekem az a szokásom, hogy a saját home könyvtáram alá csomagolom ki:

cd
tar -xjvf /usr/src/linux-source-3.2.tar.bz2

Keletkezett egy linux-source-3.2 nevű könyvtár, amibe besétáltam és elkezdtem a kernel konfigurációját.

cd linux-source-3.2
make menuconfig

Itt egy karaktergrafikus menüs felületen kell kiválasztani, hogy mit fordítunk kernelbe, mit modulba és mire nincs szükségünk. A neten rengeteg leírás található a kernel fordításról (egyik rosszabb, mint a másik), én is írtam róla korábban, most nem akarom túlragozni a dolgot, csak pár gondolat:

  • Mivel épp az initramfs kiváltásán dolgozunk, kapcsoljuk is ki ("General setup -> Initial RAM filesystem and RAM disk support" ne legyen kiválasztva
  • A Device drivers-t érdemes végignyálazni, azokat a hardvereket, amikről életemben nem hallottam, ki szoktam kapcsolni mert nagyban felgyorsítja a fordítási időt (pl ATA/ATAPI driverek, Firewire, ISDN, telephony stb.) A merevlemez drivere viszont legyen mindenképpen kernelbe fordítva (nálam: Serial ATA and Paralell ATA drivers, illetve a menüben belül az Intel SCH, Generic ATA és Intel PATA MPIIX kernelbe van fordítva)
  • File sytems-nél a saját fájlrendszerünk és partíció támogatásunk mindenképpen legyen kernelbe fordítva
  • A többi maradhat alap beállításon, elég biztonságos

Jöhet a fordítás! Mint az eddigieket, ezt is normál felhasználóként, ne root-ként végezzük (ezért használjuk a fakeroot-ot). Ami fontos, az a revision szám és az append-to-version megadása. Ennek az a jelentősége, hogy a lefordított és becsomagolt kernelünk más nevű legyen, mint az aktuálisan futó, különben felülírhatjuk az aktuálisan futó kernelt és akkor ha hibát vétettünk a fordítás után, nem marad másik, amivel bootolni tudunk.

make-kpkg --append-to-version bagoj --revision 3.2.54-1 --rootcmd fakeroot kernel_image modules_image

Ez elmolyol egy darabig, majd keletkezik az eggyel kijjebb lévő könyvtárban a linux-image-3.2.54bagoj_3.2.54-1_i386.deb fájl. Ezt szépen fel tudjuk telepíteni:

sudo dpkg -i linux-image-3.2.54bagoj_3.2.54-1_i386.deb

Nagyon fontos! Mivel nem használunk initrd-t, ezért szükség van még egyéb beállításokra is:

  • Az update-grub-nak meg kell mondani, hogy ne próbáljon initrd-t generálni
  • A fájlrendszereket nem UUID alapján fogjuk ezután megtalálni, mert azt az initrd állítja be, ezért az fstab fájlban át kell írni eszköz hivatkozásra a felcsatolandó eszközök listáját. Emiatt ha olyan médiáról bootolunk, aminek a sorrendje változhat és emiatt fontos UUID alapján azonosítani (pl. USB média), ott nem feltétlenül jó ez a megoldás

A /etc/default/grub beállítófájlban vegyük ki ez elől a sor elől a kommentet:

GRUB_DISABLE_LINUX_UUID=true

 Illetve szerkesszük a /etc/fstab tartalmát, hogy ne UUID, hanem eszköznév legyen a bal oldalon. Ebben konkrét segítséget nem tudok adni, tudni kell hogy melyik partíciónk micsoda. A régi sorokat értelemszerűen hagyjuk benne, mert jól jönnek azok még később:

# UUID=xxxxxxxxxxxxxx /    ext4       errors=remount-ro 0 1
/dev/sda1             /    ext4       errors=remount-ro 0 1

stb.

Még egy sudo update-grub parancsot kell kiadnunk és végeztünk is.

Összegzés

Vajon hasznosan töltöttük-e ezt a kb. 2-2,5 órát? Érdemes volt-e rászánni az időnket? Szerintem amiatt mindenképp, mert ismét tanultunk valamit. Vajon a boot időben mennyire jelentkezik mindez?

Az eredmény, nos, 7 másodperc. Honnan is indultunk valaha? 18 másodpercről, ugye?

 bootchart.png

Bónusz: Mi van, ha kernelt akarunk fordítani, de initrd-vel? A feladatunk ebben az esetben még egyszerűbb:

A make-kpkg-s sor így módosul:

make-kpkg --append-to-version bagoj --revision 3.2.54-1 --initrd --rootcmd fakeroot kernel_image modules_image

Illetve a "Nagyon fontos" alatti részeket nem kell végrehajtanunk.

 

 

3 komment

Címkék: fordítás boot kernel gyorsítás konfigurálás initrd

A bejegyzés trackback címe:

http://bagojur.blog.hu/api/trackback/id/tr475996544

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.

Uhubian GNU/Linux (törölt) 2014.04.13. 21:16:14

"Bezzeg a régi szép időkben" amikor telepítés közben konfiguráltuk a kernelt és ha video vagy hangkártyát cseréltünk kernelt fordítottunk ma pedig ... Na de mit csináljon az aki disztribúciót készít, az hogyan fordítson kernelt? Legjobb, ha mindent beletesz amire szükség lehet. Jó cikk és hasznos! Érdemes foglalkozni a kernel optimalizálásával, hogy a lehető legjobban kihasználhassuk gépünk adottságait erőforrás pazarlás nélkül. Bár a mai hardver árak mellett ez nem tűnik lényegesnek talán csak a "kockák" számára :)

karamblo 2015.04.15. 00:35:45

Bagoj Úr, mi van Veled? Hiányzanak frappáns instrukcióid...És persze TE is. :-)

atomgape 2015.08.10. 20:51:08

Ja, én is benézek ide 1-2 havonta, de semmi. :-(