Ricompilare il kernel Linux: Debian-way
Introduzione
Come forse saprete il kernel, è il nucleo di un sistema operativo. In Linux è possibile creare una versione personalizzata del kernel aumentando in questo modo l’efficienza e la stabilità del nostro sistema. Infatti in molte distribuzioni sono attivi in modo predefinito la maggior parte dei moduli, per vari motivi (e.g. per fare in modo che il sistema sia compatibile con la maggior parte di configurazioni hardware), rimuovendo quelli non necessari il kernel sel nostro sistema sarà più snello, e quindi più veloce ed efficiente e meno soggetto a problemi.
In Debian la ricompilazione del kernel può essere effettuata in diversi modi, quella standard per tutte le distribuzioni, o alla debian-way, che permette di compilare il kernel e di creare un comodo pacchetto .deb per facilitare la sua installazione (ed eventualmente la disinstallazione).
In questo articolo verrà illustrato il secondo metodo. I passi che vedremo saranno la configurazione del kernel, la sua compilazione e l’installazione.
Preparazione
Prima di cominciare è necessario installare alcuni pacchetti necessari alla compilazione e alla pachetizzazione del kernel
# apt-get install build-essential kernel-package fakeroot
Dopo aver fatto questo è necessario ottenere i sorgenti del kernel senza i quali non potremmo fare niente
$ apt-cache search linux-source linux-source-2.6.24 - Linux kernel source for version 2.6.24 with Debian patches
I sorgenti del kernel presenti nei repository di Debian sono leggermente diversi da quelli del kernel Vanilla (rilasciati da Torvalds e dal suo staff), in quanto vengono leggermente modificati per meglio integrarli con il sistema. Per questo articolo prenderemo come esempio la versione 2.6.24, voi potete sostituirla con la versione che userete.
Ora non resta che installarli:
# apt-get install linux-source-2.6.24
L’archivio contenente tutti i file verrà posizionati in
/usr/src
Per evitare di compilare il kernel con i privilegi di root, è consigliato aggiungere l’utente che andrà a compilare, al gruppo “src”, i cui membri hanno diritto di scrittura nella cartella dei sorgenti
# adduser nome-utente src
Per rendere effettive le modifiche è necessario riloggarsi.
A questo punto possiamo spostarci nella cartella dei sorgenti
$ cd /usr/src
dove troveremo un archivio tar.bz2 contenente i sorgenti, da decomprimere
$ tar -jxvf linux-source-2.6.24.tar.bz2
Per facilitarci il lavoro creiamo un link simbolico alla cartella appena creata
$ ln -s linux-source-2.6.24 linux
E spostiamoci al suo interno
$ cd linux
Pulizia
Il prossimo passo da eseguire è la pulitura dei sorgenti. Questa operazione è necessaria per eliminare i file creati dalle precedenti compilazioni, se questa è la prima ricompilazione che eseguite non è necessaria.
$ make-kpkg clean
Configurazione
Passiamo ora alla configurazione, parte centrale dell’intera operazione. Per farlo si possono utilizzare differenti interfacce grafiche.
$ make config
Questa è l’interfaccia più semplice: presenta le varie opzioni una in seguito all’altra. Personalmente non mi piace molto, in quanto obbliga l’utente a definire qualsiasi tipo di impostazione, anche se non necessarie.
$ make menuconfig
Il metodo più comune: crea un comodo menu grazie alle librerie ncurses, in cui l’utente può facilmente navigare con la tastiera. Per questo metodo sono necessarie le librerie di sviluppo ncurses (ncurses-dev).
$ make xconfig
Simile al precedente metodo, con la differenza che il menu viene creato per X con le librerie qt.
$ make gconfig
Come sopra, ma con le librerie gtk.
Per questi due ultime modalità sono necessarie le librerie di sviluppo rispettivamente di qt e gtk.
A questo punto dovrete esplorare le varie opzioni del kernel, suddivise in diverse sezioni logiche. È possibile impostarle a off (ovvero non disponibile), modulo (compilato separatamente e caricato quando necessario) e on (compilato nel kernel).
In questo articolo non entrerò nel dettaglio delle varie opzioni, per avere maggiori dettagli potete consultare il Linux Kernel Configuration Archive, in cui non dovrete fare altro che selezionare la versione del kernel e l’architettura.
Una volta finito di configurare, e necessario salvare le impostazione selezionando l’apposita voce nel menu, che creerà un file di testo (in modo predefinito col nome “.config”) che potrà essere utilizzato anche in futuro per ulteriori compilazioni.
Ed ora la compilazione…
Compilazione
Per facilitare questa procedura useremo il tool make-kpkg, installato precedentemente
$ fakeroot make-kpkg --append-to-version custom --revision=1 kernel_image
È possibile anche creare pacchetti deb dai sorgenti di moduli (ad esempio alsa) posizionati in /usr/src/modules aggiungendo modules_image alla fine del comando, in modo che diventi
$ fakeroot make-kpkg --append-to-version custom --revision=1 kernel_image modules_image
Analizziamo brevemente questo comando:
–append-to-version custom – Serve ad aggiungere una stringa personalizzata (in questo caso “custom”) al nome del pacchetto, dopo il numero di versione, che verrà creato .
–revision=1 – Imposta un numero di revisione per il kernel, in modo che ad un successivo aggiornamento del kernel, quello personalizzato non venga rimosso in favore di quello ufficiale.
kernel_image – Indica che si vuole creare un pacchetto deb con il kernel compilato.
È possibile indicare altre opzioni, per una lista più approfondita vi rimando al manuale di make-kpkg
$ man make-kpkg
La compilazione richiederà un pò di tempo, al termine della quale verrà creato un file del tipo linux-image-<versione>-<nomepersonalizzato>-<architettura>.deb nella cartelle /usr/src.
Non ci resta altro da fare se non installarlo tramite dpkg.
# dpkg -i linux-image-2.6.24-custom-i386.deb
In seguito sarà possibile installare lo stesso kernel anche su altre macchine Debian senza dover eseguire un’altra volta tutta l’operazione.
Boot Loader
Ora che il nuovo kernel è installato potrebbe essere necessario aggiornare il boot loader.
Nel caso di grub questo non è necessario, in quanto dopo l’installazione di un nuovo kernel viene automaticamente eseguito un update-grub.
Nel caso di Lilo invece, è necessario modificare il file /etc/lilo.conf e aggiornare l’MBR.
A questo punto il nuovo kernel non è ancora in uso, per utilizzarlo è necessario riavviare la macchina e selezionarlo dal menu del boot loader.
Nel caso che qualcosa andasse storto, niente paura, riavviate il sistema con il vecchio kernel selezionandolo dal menu del boot loader.
E questo è tutto…
AlexBio's Blog

1 Comment