
Forumul dedicat sistemului de operare Ubuntu în România
Forumul Ubuntu România
Forumul de discuții și asistență al comunității Ubuntu din România

Forumul dedicat sistemului de operare Ubuntu în România
Forumul de discuții și asistență al comunității Ubuntu din România
Neautentificat.
Fiecare distributie are unelte specifice pentru a compila un kernel din surse. Voi incerca sa descriu aici compilarea unui kernel in Ubuntu/Debian . Vom folosi sursele nemodificate de pe www.kernel.org, vom aplica diferite patch-uri si vom genera pachetele deb pe care le putem da prietenilor s.a.m.d.
NOTA : In tutorial voi folosi aptitude cand este nevoie de instalarea unor pachete. Intrucat acesta nu se mai gaseste implicit in Ubuntu 10.10 inlocuiti aptitude cu apt-get, sau mai simplu, instalati aptitude.
sudo apt-get install aptitude
Pentru inceput este nevoie de cateva unelte pentru procesul de compilare :
sudo aptitude install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
Apoi ne autentificam ca root si putem incepe:
sudo su - cd /usr/src
Compilarea kernelului Linux se face in /usr/src , de aceea am navigat catre acel folder dupa autentificarea ca root.
Sa presupunem ca dorim sa compilam kernelul 2.6.36.1. Ca patch vom folosi patchsetul CK creat de Con Kolivas. Acesta include printre altele si un alt scheduler, BFS.
Se descarca sursele kernelului de pe www.kernel.org :
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.1.tar.bz2
Se descarca si patchsetul CK :
wget -c http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.36/2.6.36-ck2/patch-2.6.36-ck2.bz2
NOTA : - cine doreste poate sa foloseasca patchul minune de 200 de linii. De asemenea se pot aplica si mai multe patchuri. Eu folosesc patchsetul CK in acest tutorial deoarece este mai simplu.
Avem sursele, avem patch-ul, deci sa incepem :
tar zxvf linux-2.6.36.1.tar.bz2 ln -s linux-2.6.36.1 linux cd /usr/src/linux
Am dezarhivat kernelul, am creat un symlink numit linux si am intrat in sursele kernelului. Acum sa aplicam patch-ul :
bzip2 -dc /usr/src/patch-2.6.36-ck2.bz2|patch -p1 --dry-run bzip2 -dc /usr/src/patch-2.6.36-ck2.bz2|patch -p1
Prima linie verifica daca patchul se poate aplica fara nicio eroare. Astfel nu riscati sa stricati sursele daca ati descarcat un patch gresit. Putin probabil, dar e bine sa fim precauti. A doua linie aplica patch-ul asupra surselor kernelului.
Acum vine partea cea mai dificila si anume configurarea noului kernel. Pentru inceput ar fi bine sa folositi configuratia kernelului pe care il rulati deja.
cp /boot/config-`uname -r` ./.config
Apoi rulam :
make menuconfig
Aceasta ne va aduce in fata meniul de configurare al noului kernel. Navigati pana la Load an Alternate Configuration File si alegeti .config . Dupa aceea puteti naviga prin optiuni si sa va costumizati kernelul dupa cum doriti. Puteti adauga suport pentru diferite componente, in caz ca kernelul cu care vine distributia le suporta, sau puteti elimina suportul pentru componentele pe care nu le aveti.
NOTADe asemenea puteti sa compilati un kernel super usor, care sa contina doar modulele pe care le folositi. Va rezulta un kernel cu 70-80 de module. Compilarea lui va dura extrem de putin si va fi foarte rapid. Se va instala mult mai repede decat un kernel obisnuit deoarece ramdiskul creat va contine putine module si va ocupa foarte putin spatiu pe disc.
In contrast kernelul cu care vine Ubuntu implicit contine cam 2600-2700 de module pe care probabil nu le veti folosi niciodata. Este un lucru bun insa, deoarece ei incearca sa acopere cat mai multe configuratii posibile folosind un singur kernel.
Dupa ce ati terminat de configurat kernelul, alegeti Exit si raspundeti cu Yes la intrebarea
Do you wish to save your new kernel configuration?
Apoi se poate incepe compilarea :
make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
Dupa --append-to-version puteti pune orice doriti pentru a identifica noul kernel, dar trebuie sa inceapa cu un minus (-) si sa nu contina spatii. Poate fi nickul de pe forum, etc. Veti avea kernel 2.6.36.1-nick .
Acum trebuie sa aveti rabdare, compilarea unui kernel poate dura cateva ore in functie de viteza procesorului si de configuratia aleasa. Dupa terminarea compilarii in /usr/src se vor gasi doua pachete deb. Unul va contine kernelul, iar celalalt va contine headerele necesare compilarii de module pentru kernel (gen vbox, nvidia).
Se instaleaza cele doua pachete :
sudo dpkg -i linux*deb
Grub ar trebui sa detecteze noul kernel si sa genereze grub.cfg in consecinta, dar pentru orice eventualitate rulati si un :
sudo update-grub
La reboot veti putea alege intre vechiul kernel, si noul kernel proaspat compilat. Daca totul este in regula puteti dezinstala vechiul kernel. Puteti chiar sa oferiti cele doua pachete deb si altor utilizatori sa beneficieze de munca voastra.
Cum fac eu, cand am timp si chef de compilari de ore intregi. Succes tuturor!
Editat ultima oară de V3n3RiX (02 Dec 2010 19:42:44)
chiar cautam un tutorial
Offline
V3n3RiX,
Ai ca intreci masura la compilari....
Sa stii ca recent cautam detalii despre asta. Astept...
Offline
*Bump*
Sa stie lumea ca e gata tutorialul :-P
E putin mai simplu decat celalalt tutorial cu "creearea de pachete .deb" la acela ma incurcam putin...
Multumim de tutorial!
Offline
pt cei ce vor sa compileze un kernel intr-un mod simplist si automatic:
http://linuxpoison.blogspot.com/2010/12 … +Poison%29
Offline
Intrebare?
Daca apare vreun update de kernel in Ubuntu imi va aparea la updates ?
Pentru ca de exemplu daca fac aceasta compilare si instalez kernelul meu, pentru ca mai apoi sa nu fiu atent si sa dau ceva de genul
sudo aptitude update && sudo aptitude upgrade -y
ma voi trezi cu un nou kernel ?
Ar trebui sa fiu atent la update-uri?
Offline
Nu...daca dezinstalezi versiunea din repo nu vei mai primi actualizari pentru kernel...ramai doar cu cel compilat de tine...
Imi da o eroare:
root@ubu:/usr/src# tar zxvf linux-2.6.36.1.tar.bz2 gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now root@ubu:/usr/src#
Am descarcat fisierul de doua ori, nu pare a fi eroare de download. Ce sa-i fac?
Edit 1
Am reusit sa dezarhivez folosind Gnome Commander, merg mai departe ...
Edit 2
Doua mici corectii:
1. Inainte de comanda de instalare, trebuie data comanda cd .. (pachetele deb sunt un nivel mai sus).
2. La comanda de instalare, din viteza ai scapat punctul intre * si deb.
In rest, compilarea si instalarea au mers fara probleme. Multumesc.
Edit 3
Buteaza, incarca SO-ul pana la un punct, dupa care se opreste, cica UUID-ul nu este corect, probabil cand face mount pentru partitiile de pe HDD. Hmmm, acum nu mai am timp sa sap, trebuie sa fug la servici.
Editat ultima oară de satwien (08 Dec 2010 08:31:37)
Offline
Intrebare din partea unui "lenes". Exista vre-un script care sa imi detecteze hardware-ul si sa imi genereze fisierul de configurare? Nu de alta dar cand ajung la partea cu
make menuconfig
ocupa prea mult timp sa tot scot din optiuni. Sau vre-un program in care sa trec manual ce hardware sa suporte si sa scoata restul.
Offline
Exista in kernel o functie care te ajuta sa il compilezi doar cu modulele care le ai incarcate. Adica care se limiteaza doar la hardware-ul tau. Insa trebuie sa incarci manual unele module care nu tin de hardware. Cum ar fi isofs pentru a putea citi CD-uri, vfat pentru a putea citi stickuri de memorie. De asemenea exista un script care tine minte toate modulele care le-ai folosit vreodata. Adica, tu pornesti cu kernelul implicit ubuntu, bagi cd-uri, stickuri, tot ce crezi tu ca ai putea folosi, iar el tine minte aceste module intr-o baza de date. Apoi daca doresti sa compilezi kernelul, poti citi modulele din acea baza de date si sa le activezi doar pe acelea.
Ti-am facut un deb cu scriptul, intrucat contine si un fisier de configurare si sa nu te chinui cu plasatul fisierelor.
http://dl.dropbox.com/u/6539285/Debian/ … l_i386.deb
Cum il folosesti?
Il instalezi, apoi din terminal rulezi :
sudo modprobed_db
Vei obtine ceva de genul :
No db present so making /var/log/modprobed.db The db currently contains this many records: 69
Apoi vei vedea ca in /var/log/modprobed.db se gaseste o lista cu modulele tale. Adaugi in continuare manual modulele care te intereseaza, apoi mai tastezi odata comanda.
Exemplu :
sudo modprobe isofs sudo modprobed_db
Rezultat :
The db currently contains this many records: 69 New modules detected. Updating db... The db now contains this many records: 70
Cand te hotarasti sa compilezi kernelul doar cu aceste 70 de module ai de facut urmatoarele :
Urmezi tutorialul meu pana la :
cp /boot/config-`uname -r` ./.config
Asta inseamna ca ai copiat configuratia kernelului pe care il rulezi deja si vrei sa o folosesti si in compilarea noului kernel. Ca sa elimini din ea toate celelalte module si ramai doar cu cele 70 faci asa :
cd /usr/src/linux chmod +x scripts/kconfig/streamline_config.pl ./scripts/kconfig/streamline_config.pl > config_strip cp config_strip .config
Apoi continui tutorialul meu incepand cu :
make menuconfig
Daca primesti o eroare de genul :
An error about ksource in line 118 .........
Sa nu te sperii, este ceva normal, deoarece nu gaseste si configuratia pentru eventualele module 3rd party, adica nvidia, vbox etc.
Succes! Sper ca am reusit sa ma fac inteles.
am inteles, mersi V3n3RiX
Offline
Exista si un inconvenient in asta totusi. Daca iti iei orice alta componenta, va fi nevoie sa recompilezi kernelul.
Oarecum OFF.
Întrebare : de ce nu-mi pornește "anticul" 2.6.34 pe Jolicloud 1.1 care se bazează pe 10.04 LTS ?
2.6.34 îmi merge mie cel mai bine la toate distribuțiile bazate pe Ubuntu 10.04 instalate : Ubuntu, MInt9, Pinguy, în sensul că-mi asigură cea mai mică încărcare medie a sistemului din toate versiunile de kernel încercate (implicite sau actualizate) pe laptopul meu (Intel 2 x T7250).
2.6.35.8-1-jolicloud cu care "a venit dotat" Jolicloud 1.1 se mișcă f. bine dar, pt. aceleași activități desfășurate, încarcă sistemul de 3-4 ori mai mult ajungând chiar la valori supraunitare de 2, 3, lucru cu care nu sunt obișnuit.
.
Editat ultima oară de Ăla micu' (08 Dec 2010 22:16:58)
Offline
Nu stiu d`astea. ![]()
Serios acum, 2.6.35 a avut unele mici probleme cu load-ul. Este la fel de performant, dar afiseaza intradevar load-uri mai mari. Eu am compilat kernelul 2.6.36, aplicand patch-ul minune de 200 de linii (o sa fac si un deb pentru doritori cand am timp si chef, deci nu imi sariti in cap), iar rezultatul e acelasi : performanta ridicata, load-uri mai mari...Cert e ca daca desktop-ul raspunde rapid si se misca cum trebuie pot sa am si load 1000. Nu imi pasa.
Scuze pentru OFF, da' mi s-a părut sugestivă comparația pentru-ncepători ca mine.
http://blog.scoutapp.com/articles/2009/ … d-averages
.
Editat ultima oară de Ăla micu' (08 Dec 2010 23:23:04)
Offline
kkady32 a scris:
pt cei ce vor sa compileze un kernel intr-un mod simplist si automatic:
http://linuxpoison.blogspot.com/2010/12 … +Poison%29
Completare cu un tutorial mai detaliat ![]()
http://www.webupd8.org/2010/12/how-to-c … -easy.html
Offline
Salut, am incercat si eu, mi-a iesit ceva dar: nu l-am putut face sa-mi recunoasca placa video, am dezinstalat-o si reinstalat-o de 2 ori , nu vroia sa activeze efectele compiz. La reboot imi apareazu pe Plymouth alea cu stoping bla bla , dezactivating swap. Dupa ce se incarca Bios-ul aparea geva gen: could not mount nush ce ext2 ffs , trecea peste . Cred ca am gresit pe undeva, mai exact
Navigati pana la Load an Alternate Configuration File si alegeti .config
dupa asta am trecut direct la compilare... Inca ceva: am pus patch-ul ala de 200 de linii pe 2.6.36.2 , am vazut ca nu vrea sa activeze efectele compiz l-am dezinstalat din Synaptic, a fost patchuit si 2.6.32-27 ? intreb asta fiindca vad cpu1 si cpu2 lucrand in tandem ( stiu ca pare o prostie dar nah intreb
) .
Am recompilat kernelul si merge tot. Se simte un puls de viteza.
Metoda cu compilatu din /usr/src nu este cam outdated?
Am citit ca se poate compila ca root din /usr/src dar cel mai curat si simplu ar putea fi din Home ca user simplu de asemenea uni sunt de parere ca /usr/src este cel mai ok si metoda preferabila voi ce parere aveti?
Offline
@Hex
Da, ai dreptate.
Compilarea KERNEL-ului se face din home-ul Userului ne fiind necesar in /usr/src/ nici macar nu ai nevoie de root pentru a compila Kernelul.
Doar la instalarea noului Kernel ai nevoie de root sau sudo.
Offline
Sa imi dati de stire cand o sa puteti sa aplicati patch-uri daca compilati in home ok? Pana atunci va urez succes la compilari din /usr/src , intrucat asta este metoda standard. Daca vreti puteti sa il compilati si out-of-tree in /opt , dar asta nu e problema mea.
Editat ultima oară de V3n3RiX (03 Jan 2011 10:15:42)
V3n3RiX a scris:
Sa imi dati de stire cand o sa puteti sa aplicati patch-uri daca compilati in home ok? Pana atunci va urez succes la compilari din /usr/src , intrucat asta este metoda standard. Daca vreti puteti sa il compilati si out-of-tree in /opt , dar asta nu e problema mea.
Ciudat ca eu nu mai compilez un kernel din /usr/src inca de la versiunea 2.4, iar legat de patch nu stiu ce probleme intampini deoarece eu nu am probleme.
EG:
zcat ../patch-2.x.x.x.blab_bla.gz | patch -p1
Cei care chiar nu se descurca pot foarte bine creea un symbolic link din locatia de unde face compilarea in /usr/src
Editat ultima oară de TARA24. (03 Jan 2011 15:18:23)
Offline
Eu, mai mult ca sigur am facut ceva gresit la compilarea unui nou Kernel. Cum procedez acum sa revin la kernelul vechi. Spun asta ptr ca in momentul in care-am vrut sa pornesc virtualbox mi-a dat mesajul asta
Pot oare sa repar ceva pe-aici, sau ma apuc de reinstalarea Ubuntu?
Offline
Nu e nimic gresit. Dai asa :
sudo /etc/init.d/vboxdrv setup
Asteapta un pic sa termine operatiunea, apoi incearca sa pornesti iar masina virtuala.