Debian ha una modo tutto suo per compilare il kernel che si affianca al metodo standard valido per tutte le distribuzioni; questo metodo di compilazione del kernel viene solitamente indicato come Debian way. In questa pagina ho raccolto e riordinato gli appunti che mi sono tornati utili le prime volte che ho ricompilato un nuovo kernel (versione 2.6.x) sotto la mia Linux box.
Prima di iniziare la compilazione del kernel è bene assicurarsi di avere installato tutti i pacchetti fondamentali:
# apt-get install make gcc bin86 libc6-dev kernel-package module-init-tools fakeroot
I pacchetti sopra indicati permettono di compilare un kernel da console (tramite l’opzione menuconfig o oldconfig), ma è anche possibile utilizzare una più comoda interfaccia grafica sotto X. Se si utilizza KDE o si intendono utilizzare le librerie QT installare anche i seguenti pacchetti:
# apt-get install libqt3-dev
mentre se si utilizza Gnome o si vogliono utilizzare le librerie GTK:
# apt-get install libglade2-dev
E’ possibile utilizzare sia i sorgenti rilasciati direttamente da Debian, i quali includono già fix e patch specifiche di questa distribuzione, sia i sorgenti ufficiali rilasciati da kernel.org, solitamente indicati con il nome di “kernel vanilla” (ai quali sarebbe opportuno comunque applicare le patch ufficiali di Debian). Di seguito prenderò come esempio un kernel 2.6.11.
Per scaricare il kernel ufficiale Debian impartire il comando che segue:
# apt-get install kernel-source-2.6.11
l’archivio in formato tar.bz2 del kernel verrà automaticamente scaricato e salvato in /usr/src.
Spostiamoci nella directory contenente l’archivio appena scaricato:
# cd /usr/src
Decomprimiamo l’archivio contenente i sorgenti del kernel:
# tar xvjf kernel-source-2.6.11.tar.bz2
Ed in pochi secondi ci ritroveremo con una directory chiamata kernel-source-2.6.11 contenente i sorgenti e la documentazione del kernel. Ora dovremo creare un link simbolico 1)chiamato linux che punta a questa directory:
# ln -s kernel-source-2.6.11 linux
Da questo momento in poi sarà possibile riferirsi alla directory kernel-source-2.6.11 semplicemente tramite il link simolico linux. Spostiamoci quindi nella directory contenente i sorgenti del kernel:
# cd /usr/src/linux
E cancelliamo eventuali file temporanei residui di precedenti compilazioni del kernel (!!passaggio necessario per evitare eventuali conflitti in fase di compilazione del nuovo kernel!!):
# make-kpkg clean
Se abbiamo installato una versione precedente kernel (es: kernel 2.6.10) è possibile riutilizzarne il suo file di configurazione (e risparmiare così un po’ di tempo), avendo l’accortezza di copiarlo nella directory contenente i sorgenti del kernel attuale. Il file di configurazione del kernel in uso è presente in /boot e nel nostro esempio si chiamerà qualcosa tipo config-2.6.10 (è possibile che ci sia qualche tipo di suffisso quale -386 o altro). Per copiarlo nella directory contenente il kernel che stiamo per compilare eseguire il seguente comando:
# cp /boot/config-2.6.10 .config
Il comando precedente presuppone che si sia posizionati ancora all’interno della directory /usr/src/linux
A questo punto è possibile iniziare la configurazione del kernel. Se abbiamo optato per il riutilizzo del file .config di una versione precedente del kernel è preferibile impartire il seguente comando:
# make oldconfig
In questo modo il sistema aggiornerà il file .config precedentemente copiato con le opzioni del nuovo kernel. Aspettatevi un mucchio di richieste da parte del configuratore se state utilizzando un file di configurazione più vecchio di 1/2 release del kernel (sconsigliato). In caso di dubbio optate sempre per le opzioni di default suggerite dal sistema.
*oldconfig*
Dopo aver passato il file di configurazione per make oldconfig o se si sta configurando un nuovo kernel da zero è possibile utilizzare un’interfaccia più semplice per rivedere o completare la configurazione:
# make menuconfig
per utilizzare l’interfaccia ncurses (testuale, semigrafica) in una console o in un terminale,
# make xconfig
per usare le librerie QT,
# make gconfig
per usare le librerie GTK.
I metodi sopra menzionati proporranno una comoda interfaccia grafica (o testuale) molto semplice da utilizzare. Ora non resta altro che configurare a dovere il nuovo kernel. Questa è l’operazione più lunga e complicata dell’intera procedura di compilazione del kernel: le opzioni tra le quali scegliere sono molto numerose e spesso di non immediata comprensione. La prima volta non è raro impiegare qualche ora per decidere cosa inserire nel kernel e cosa compilare come modulo, i driver necessari per il nostro hardware etc. Le scelte da effettuare dipendono strettamente dall’architettura del computer in uso ed esulano da questa guida: in questo caso Google sarà il vostro migliore amico
Una volta completata la configurazione ricordatevi di salvare le modifiche apportate! Tutte le opzioni scelte verranno memorizzate nel file .config contenuto in /usr/src/linux.
Per compilare il kernel appena configurato è sufficiente impartire il comando che segue:
# fakeroot make-kpkg kernel_image
make-kpkg di compilare l’immagine del kernel e di creare il pacchetto Debian finale.Il tempo di compilazione del kernel può variare da una decina di minuti fino a qualche ora e dipende principalmente da due fattori: il numero delle opzioni che si sono scelte di compilare (sia come modulo che integrate nel kernel) e la potenza del computer in uso; il mio Athlon64@3500 con 1GB di Ram ha impiega circa 11 minuti per compilare una versione 2.6.11 di un kernel non eccessivamente ottimizzato; l’altro pc equipaggiato con PIII650 e 512MB di Ram impiega circa 1h buona...
Il kernel opportunamente compilato ed impacchettato in un comodo file .deb verrà salvato in /usr/src e prenderà un nome simile a kernel-image-2.6.11_10.00.Custom_i386.deb.
Per installarlo il kernel appena compilato spostarsi nella directory /usr/src
# cd /usr/src
diventare root
# su Password: inserire_password_di_root
ed impartire il seguente comando:
# dpkg -i kernel-image-2.6.11_10.00.Custom_i386.deb
dpkg effettuerà tutti i passaggi necessari per installare correttamente il nuovo kernel ed aggiorare il boot loader (almeno nel caso di Grub che è quello che utilizzo. Se invece preferite lilo dovrete probabilmente aggiornare manualmente il file lilo.conf).
Non resta che riavviare il sistema e provare il nuovo kernel