Ubuntu Kerneli kompileerimine

Allikas: Pingviini viki

Kuigi Ubuntul on korralikud oma paki Kernelid olemas tekib alati mõnel kasutajal tahtmine ise endale uus Kernel valmis kompileerida. Põhjuseid võib olla mitmeid. Näiteks soov luua endale minimalistlik versioon Ubuntust, kus ka Kernelist on kõik mittevajalik eemaldatud. Või siis on tarvis lisada hoopis mõne sellise riistvara tugi, mida kohe kaasas pole. Või soovitakse kasutada uusimat olemasolevat Linuxi Kernelit, mida on võimalik tõmmata ainult otse netist ja ise valmis kompileerida.

Käesolev õpetus õpetabki, kuidas Ubuntus valmis kompileerida Vanilla Kernel, ehk siis Kernel www.kernel.org lehelt. Õpetus peaks toimima Ubuntu 6.10 ("Edgy Eft") ja Ubuntu 6.06 ("Dapper Drake") versioonidega.

alustuseks

Soovituslik on läbi viia kõik uue Kerneli kompileerimise ja valmistamise toimingud root kasutaja õigustes. Tänu sellele pole vaja pidevalt kasutada sudo käske. Selleks antke järgmine käsk:

sudo passwd root

Nüüd logige sisse root kasutaja õigustes

su

Juhul, kui te aga siiski ei ava root kasutaja kontot, siis ärge unustage alati ette sudo lisamast!

/bin/sh Ubuntu 6.10 ("Edgy Eft")

/bin/sh peaks olema Ubuntu 6.10 ("Edgy Eft") lingitud /bin/dash -ile. Kuid see võib põhjustada probleeme tarkvara kompileerimisel lähtekoodist. Seega teeme /bin/sh -st hoopis lingi /bin/bash-ile. Ehk kui kasutate Ubuntu 6.10-t siis sisestage järgnevad käsud:

rm -f /bin/sh
ln -s /bin/bash /bin/sh

Ubuntu 6.06 kasutajad selle üle muretsema ei pea.

Vajalike pakettide paigaldamine

Esmalt uuendame loomulikult oma süsteemi pakettide andmebaasi:

apt-get update

ja nüüd paigaldame vajalikud vahendid:

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Hangime Kerneli lähtekoodi

Nüüd on paras aeg hankida endale Kerneli lähtekood. Kõige õigem on ta tõmmata kataloogi /usr/src, seega esimesena liikuge sinna kataloogi:

cd /usr/src

Nüüd on paras aeg kindlaks teha, mis Kernelit soovite endale paigaldada. Kõik erinevad Linuxi 2.6 seeria Kernelid leiate http://www.kernel.org/pub/linux/kernel/v2.6/ valige endale sealt meelepärane välja. Näiteks otsustasite valida linux-2.6.18.1.tar.bz2 Kerneli. Siis selle saate alla tõmmata:

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2

Kui sobiv Kernel on alla tõmmatud, siis tuleb ta lahti pakkida ja luua link kataloogile /usr/src/linux. Edaspidistes käskudes jälgige, et sisestaksite ikka oma tõmmatud Kerneli numbri.

tar xjf linux-2.6.18.1.tar.bz2
ln -s linux-2.6.18.1 linux
cd /usr/src/linux

Lisame Kernelile mõned paigad (valikuline)

Vahest on vaja lisada Kernelile mõned paigad/täiustused. Näiteks riistvara tugi, mida pole ametlikult Kernelis. Või soovite lisada virtualiseerimise toe, mida vaikimisi Kernel veel ei toeta.

Näiteks tõmbasite endale Kernelile mõeldud paiga (path) - patch.bz2 kataloogi /usr/src kataloogi. Nüüd on aeg see path lisada Kerneli lähtekoodile (olete endiselt /usr/src/linux kataloogis)

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run

See käsk ainult testib, et kas saab antud pathi Kernelile lisada. Kui sellega Teil mingeid veateateid ei tule, siis võite alles käivitada teise käsu.

bzip2 -dc /usr/src/patch.bz2 | patch -p1

Selle käsuga siis lisasite soovitud pathi oma Kerneli lähtekoodile.

Näiteks soovite endale luua viimast 2.6.19-r4 Kernelit. Neid Kerneleid välja pole lastud vaid ongi just lisatud ainult vajaminevad paigad stabiilsele 2.6.18 Kernelile (just 2.6.18 Kernelile, mitte enam selle vigade parandustele 2.6.18.1 jne) Seega tuleb Teil alla tõmmata patch-2.6.19-rc4.bz2 ja 2.6.18 Kerneli lähtekood. Ehk siis sellisel juhul oleks kogu tegevus järgmine (algusest peale):

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
tar xjf linux-2.6.18.tar.bz2
ln -s linux-2.6.18 linux
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc4.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1

Kerneli seadistamine

Nüüd oleme jõudnud järgmise sammuni oma Kerneli kompileerimisel. Nimelt Kerneli seadistamiseni. Samas on igati kasulik hoida oma hetke Kerneli seadistus alles, et seda saaks uuesti kasutada ja muudatusi sisse viia. Kopeerime selle /boot partitsioonile (või kataloogi):

cp /boot/config-`uname -r` ./.config 

Nüüd on aeg siis käivitada Kerneli peamine seadistusprogramm - menuconfig

make menuconfig

See avab Teile Kerneli seadistuste menüü, sealt valige Load an Alternate Configuration File ja valige .config. Sellega laete oma praeguse töötava Kerneli seadistuste faili (eelnevalt tegite sellest koopia).


Ukmenu1.png

Ukmenu2.png


Nüüd pole siis muud, kui liikuda mööda Kerneli seadistuste menüüsid, lisada ja eemaldada endale sobivad lisad. Kui olete lõpetanud, siis valige Exit ja sealt küsitakse Do you wish to save your new kernel configuration? valige sealt Yes:


Ukmenu3.png

Kerneli valmistamine

Nüüd pole siis jäänud muud, kui Kenrnel valmis kompileerida. Seda saate teha järgmiste käskudega:

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers 

Peale --append-to-version= võite kirjutada oma Kernelit iseloomustava pealkirja. Kuid oluline on teada, et see peab algama - märgiga ja vahel ei tohi olla tühikut. Nüüd kompileeritakse Teie Kernelit. See võib võtta aega tunde. Sõltuvalt, mida oma Kernelisse lisasite ja kui kiire on Teie protsessor.

Uue Kerneli paigaldamine

Kui Kernel kompileeritud, siis on paras aeg ta ka paigaldada. Leiate oma /usr/src kataloogist nüüd kaks uut deb paketti. Seda saate näha:

cd /usr/src
ls -l

Meie esialgse näite kohaselt peaks nüüd olema järgmised deb paketid:

linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb ja linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb Need saame paigaldada järgmiste käskudega:

dpkg -i linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb

Te võite need deb pakettid viia ka mujale masinasse. Ehk Teil pole vaja neid kohapeal ise kompileerida.

Ongi kõik, te võite nüüd veel vaadata, kas on tekitatud ka vastavad kirjed /boot/grub/menu.lst faili:

nano /boot/grub/menu.lst

Seal peaksite leidma endale järgmised read:

title           Ubuntu, kernel 2.6.18.1-custom
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro quiet splash
initrd          /boot/initrd.img-2.6.18.1-custom
savedefault
boot

title           Ubuntu, kernel 2.6.18.1-custom (recovery mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro single
initrd          /boot/initrd.img-2.6.18.1-custom
boot

Nüüd pole muud, kui restartida süsteem:

shutdown -r now

Kui kõik läks hästi, siis peaksite buutima üles juba oma uue Kerneliga. Seda saate hiljem kontrollida käsuga:

uname -r

Mille tulemuseks peaks siis olema midagi sellist: 2.6.18.1-custom (või siis vastavalt Teie pandud nimele ja Kernelile)

Juhul, kui süsteem ei käivitu selle loodud Kerneliga, siis ärga muretsege. Käivitage uuesti arvuti ja Grubi juures vajutage Esc klahvi. Teile avaneb kõigi saadaolevate Kernelite nimekiri. Valige mõõni vanem ja käivitage arvuti sellega. Kuid kindlasti on mõistlik eelnevalt kirja kuskile panna, mis veateate Teie Kernel andis, et ta ei käivitanud. See on abiks vea otsingul.

Jõudu Kernelite kompileerimisel :) Õpetuse algallikas on HowtoForge. Tõlkis spott