How-To 25: Compilare un kernel in RPM o DEB
Piccola premessa.
Prima di cominciare a smanettare, fatevi tre domande:
a) Perche' voglio ricompilarmi il kernel?
b) Cosa devo sapere prima di cominciare?
c) Come si fa?
La piu' importante e' ovviamente la prima.
I kernel inseriti nelle distribuzioni sono dei giganti da svariate decine di MiB e vi danno l'impressione quindi di appesantire il sistema. Tuttavia, sono estremamente modulari: questo significa che si, sul vostro HD c'e' molto spazio occupato da moduli che non vi servono, ma in realta' solo l'indispensabile viene caricato. Dunque, non aspettatevi miracoli.
Il vero motivo per cui uno dovrebbe ricompilarsi il kernel e' il supporto per hardware esotico o particolare: una periferica che avete non funziona col kernel stock ma siete sicuri ci sia il modulo o una patch? Allora e' il momento di lavorare sul kernel.
Riassumendo: poco spazio su disco o configurazioni particolari. Tutto il resto e' vanita'.
Il punto secondo e' gia' piu' semplice: in linea di principio dovete semplicemente sapere ogni piu' intimo segreto del vostro hardware. Marche, modelli, chipset, north- e south-bridges e compagnia bella.
Ma c'e' un ma: durante la configurazione vi accorgerete che il kernel e' composto da svariate centinaia di voci da attivare o disattivare con coscienza e molto probabilmente una buona meta' non vi dira' proprio nulla.
Siccome qui non vale il principio "se non sai cos'e' allora non ti serve", bisognera' procedere con un modus operandi prudente. Lo vedremo dopo.
Punto terzo: adesso ci arrivo, con calma.
Fine della premessa.
Se guardate un howto piu' sopra, noterete la procedura con cui si compila e installa un kernel, non solo per slackware ma per ogni distribuzione. E' il metodo standard, che funziona sempre.
Tuttavia, non e' di certo il piu' comodo, specie se vi capita di fare molte prove prima di imbroccare la configurazione giusta, in cui tutto funziona.
Esistono un paio di ottimi metodi per impacchettare un kernel nei due formati piu' diffusi (RPM e DEB): questo significa che potrete creare un pacchetto col *vostro* kernel, da installare e rimuovere a piacimento, che modifica automagicamente il bootloader e non lascia in giro rimasugli e schifezze. Bello eh?
[Tutti i comandi che seguono io li do come root. Lo so che non si dovrebbe, ma e' una mia questione di comodita'. Quando siete loggati come root RILEGGETE sempre il comando a cui state per dare invio. Non venite a piangere da me se spaccate tutto, ok?]
Parte prima: I sorgenti del kernel
Ci sono due modi per ottenerli: il primo e' andare a www.kernel.org e scaricare il file linux-X.X.XX.tar.bz2 (il cosiddetto kernel "vanilla"), altrimenti prendere i sorgenti distribuiti dalla vostra distro di elezione.
Questi ultimi contengono generalmente patch e ottimizzazioni specifiche, quindi io consiglio di utilizzare questi ultimi.
Solitamente si trovano in pacchetti di nome kernel-source-X.X.XX, occhio a Fedora Core 3 che include i sorgenti nel pacchetto kernel-X.X.XX.src.rpm, al contrario del passato.
Scompattate i sorgenti in /usr/src:
Codice:
# cd /usr/src
# tar -xjvf /path/al/nuovo/kernel/linux-X.X.XX.tar.bz2
o installate il pacchetto secondo quanto previsto dalla vostra distribuzione:
Codice:
[rpm] # rpm -ivh kernel-source-X.X.XX.rpm
[FC3] # rpm -ivh kernel-X.X.XX.src.rpm
[DEB] # apt-get install kernel-source-X.X.XX
Spostatevi nella cartella dove sono stati installati i sorgenti:
Codice:
# cd /usr/src/linux-X.X.XX
[FC3] # cd /usr/src/redhat/SOURCES/linux-X.X.XX
e passate alla prossima sezione.
Appendice: Patchare il kernel
Potreste avere bisogno di patchare il kernel, prima o poi. Questo accade specialmente se state testando delle features che uno sviluppatore (o voi stessi, perche' no) sottomettera' prima o poi al maintainer del kernel (che tanto per informazione e' Marcelo Tosatti per il 2.4, mentre il 2.6 e' mantenuto da Andrew Morton).
Le patch del kernel sono generalmente sottoforma di file .diff e si applicano in questo modo:
Codice:
# cd /usr/src/linux-X.X.XX
# patch -p1 < /path/alla/patch.diff
Se non vedete errori, la patch e' stata applicata in modo corretto, e potete continuare. Se ci sono stati errori o volete semplicemente rimuovere la patch:
Codice:
# patch -r /path/alla/patch.diff
Parte seconda: Configurazione
Prima di tutto bisogna configurare il kernel con le opzioni adatte, e per fare questo credo che la via migliore sia prendere una configurazione funzionante (ad esempio quella del kernel stock) e modificarla.
In /boot trovate un file che porta il nome config-X.X.XX. Bene, quello e' il file di configurazione del kernel che state usando in quel momento. Copiatelo nella directory di lavoro:
Codice:
# cp /boot/config-X.X.XX ./config-miokernel
Come vedete gli ho dato un nome riconoscibile.
Adesso entriamo nella schermata di configurazione del kernel. Io preferisco usare il menu ncurses, se preferite qualcosa da cliccare accomodatevi:
Codice:
[ncurses]# make menuconfig
[gtk]# make gconfig
[motif]# make xconfig
Bene, ora caricate il file di configurazione che avete salvato precedentemente. Scegliete la voce "Load An Alternate Configuration File" e premete invio.
A questo punto scegliete le opzioni che vi servono, cercando di lasciare intoccate quelle che non capite al 100%: presumibilmente se funzionavano prima, continueranno a funzionare dopo.
Quando siete contenti del vostro lavoro, tornate alla schermata principale e salvate la vostra configurazione con "Save Configuration To An Alternate File". Dategli un nome riconoscibile, ancora una volta.
Ora premete Esc e alla domanda "Do you wish to save your new kernel configuration" rispondete "Yes" (incredibile, eh?).
Mettete in un luogo sicuro la vostra nuova configurazione.
Siamo pronti per compilare.
Parte terza, RPM
Ora voi non dovete fare piu' nulla. Trovatevi un'occupazione per le ore successive (esagerato, una mezz'oretta dovrebbe bastare) e poi lanciate:
Godetevi la compilazione (col 2.4 era piu' divertente, scorreva tutto il testo, e come insegnano i Gentooiani si imparava un sacco!) e alla fine del processo, se non ci sono stati errori, nella cartella superiore troverete un rpm pronto all'uso. Installatelo, controllate che abbia modificato il vostro bootloader (se no, fatelo a manina) e riavviate!
Codice:
# rpm -ivh ../kernel-X.X.XX.rpm
# less /boot/grub/menu.lst
# shutdown -r now
Appendice: dare un nome al proprio kernel
Se leggete poco piu' sotto, vedrete che e' possibile appendere una stringa al nome del proprio kernel tramite gli strumenti Debian.
Con rpm l'unico modo di farlo e' quello di modificare la voce "EXTRAVERSION" in cima al Makefile. Fatelo solo se siete BEN SICURI. Non e' una cosa ovvia.
Parte quarta, DEB
Con Debian dovete fare una cosa in piu'. Decidere il nome del kernel!
Il comando che dovrete dare e':
Codice:
# make-kpkg --append-to-version=-miokernel kernel_image
Notate il trattino prima di "miokernel": non serve a niente, io lo metto perche' mi piace di piu'.
Grazie a questo artefatto, potete personalizzare ogni kernel che compilate con una stringa identificativa che lo rendera' unico e inconfondibile.
Anche qui, attendete che la compilazione vada a buon fine e installate il nuovo deb:
Codice:
# dpkg -i ../kernel-image-X.X.XX-miokernel_custom.10.00.deb
# less /boot/grub/menu.lst
# shutdown -h now
Fatto!
Appendice: The Debian Way (TM)
La Debian Way per compilare il kernel e' in realta' molto di piu' questo. Un ottimo documento per saperne di piu' e' questo:
http://newbiedoc.sourceforge.net/system/ kernel-pkg.html.en
Parte quinta, tutto ok?
A questo punto ci sono solo due possibilita': il vostro kernel funziona e siete riusciti a bootarlo correttamente. In tal caso, congratulazioni!
Aspettate qualche tempo prima di eliminare il vecchio kernel della distro, anzi, non fatelo in linea di massima.
Godetevi il frutto del vostro lavoro e assicuratevi che quello che avete cambiato non nasconde insidie per il vostro sistema. Ve ne accorgerete presto, state tranquilli.
Se invece il kernel non ha funzionato? Beh, succede. Spesso.
Per riprovare, e' sufficiente ritornare nella cartella dei sorgenti e fare pulizia:
Codice:
# cd /usr/src/linux-X.X.XX
# make mrproper
e ricominciare da capo: prendete il file di configurazione, modificatelo, rifate il pacchetto, installatelo, rebootate...
Parte sesta, saluti
Bene, direi che ho scritto tutto quello che mi e' venuto in mente.
Per favore, prendete il tempo di provare quello che ho scritto su varie distribuzioni e riportate (non qui) le vostre esperienze.
Per ogni correzione e insulto, sono qui. Ciao !