Ricompilare il kernel su Debian ed Ubuntu

Indice

Introduzione

Questo howto tenta di spiegare in modo semplice come e perché si ricompila il kernel su un sistema Debian o Ubuntu.

Disclaimer

Se ti friggi il PC non ti sognare di farmi causa, qualsiasi cosa tu legga qui è senza garanzia alcuna.

Motivazione

Ok, ci saranno un altro milione di howto in giro per internet che spiegano esattamente le stesse cose spiegate qui. Quindi che male fa se ce n'è uno in più?

Note tecniche

Tutti i comandi elencati qui iniziano con un simbolo di '$' se sono da digitare come utente normale e con un simbolo di '#' se sono da digitare come utente root. Nessuno di questi due simboli deve essere digitato all'inizio del comando. Per esempio, se su questo howto trovate il seguente comando:

  $ make

voi dovete digitare solo

  make

come utente normale (non root). Se invece trovate:

  # make

dovete prima diventare utente root e poi digitare solamente

  make

Il modo di diventare root è di solito differente a seconda che usiate Debian oppure Ubuntu. Su Debian dovete digitare prima

  su

ed inserire la password di root. Poi dovete digitare il comando in questione. Su Ubuntu invece dovete anteporre la parola sudo al comando in questione, così:

  sudo make

e poi digitare la password del vostro utente (non quella di root), se vi viene richiesta.

Ogni comando deve essere inviato premendo il tasto Invio dopo aver digitato il comando. Per digitare i comandi dovete prima di tutto aprire un terminale (su Gnome cliccate su Applicazioni|Accessori|Terminale). Nel terminale la digitazione delle password non produce ALCUN EFFETTO VISIBILE, non aspettatevi di vedere nemmeno degli asterischi in corrispondenza delle lettere digitate. È normale, digitate la password come se nulla fosse e poi premete Invio.

Hands on

Per prima cosa, prepariamo il sistema per poter ricompilare il kernel.

  # apt-get install build-essential kernel-package libncurses5-dev fakeroot bzip2

Rispondiamo Sì o Yes ad eventuali domande. Poi scarichiamo i sorgenti dell'ultimo kernel dal sito ufficiale del kernel Linux. La versione stabile più recente è sempre la prima in alto (al momento della scrittura di questo articolo è la 2.6.26.6), ma non dobbiamo cliccare sul numero di versione: dobbiamo invece cliccare sulla lettera F maiuscola che sta a destra della data/ora di rilascio del numero di versione più recente. Inizierà lo scaricamento del file contenente i sorgenti, salviamolo nella cartella home del nostro utente (non sul desktop).

Quando lo scaricamento è completato, apriamo un terminale e scriviamo i seguenti comandi:

  $ tar xjf linux-*.bz2
$ cd linux-*
$ cp /boot/config-$(uname -r) .config
$ make oldconfig

A questo punto premiamo Invio a tutte le numerose domande che ci vengono poste (io normalmente tengo premuto Invio fino a quando non vedo che le domande non scorrono più a video). Bene, è ora di configurare le opzioni che vogliamo mettere nel kernel.

  $ make menuconfig

dopo qualche istante ci viene presentato un menù dove ogni voce apre un sottomenù e così via per diversi livelli. Queste sono tutte le opzioni che possiamo scegliere di mettere o non mettere nel nostro nuovo kernel. Normalmente vorremo aggiungere il supporto per una periferica che nel kernel predefinito della distribuzione Debian o Ubuntu non è supportata, oppure vorremo togliere il supporto per tutte le periferiche che non possediamo al fine di ottimizzare il kernel. Questo howto tuttavia non entra nel dettaglio di quali siano le opzioni da mettere o togliere, perché ci vorrebbe un'opera in 10 volumi per spiegarle tutte. Diamo per scontato che stiamo ricompilando il kernel, perché qualcun altro ci ha detto di farlo e quindi ci ha anche detto quali opzioni mettere/togliere rispetto a quelle normalmente presenti nella distribuzione, che troviamo già attivate.

Uscendo dal menù principale ci verrà quindi chiesto se salvare le modifiche. Rispondiamo Yes. È ora di compilare il kernel.

  $ fakeroot make-kpkg --initrd binary-arch

Andate a farvi un giro, ordinate una pizza o una cena al cinese e non tornate prima di un'ora o due (anche di più se il vostro computer non è particolarmente recente). Alla fine della compilazione, se usate Ubuntu, digitate:

  $ cd
$ sudo dpkg -i linux*.deb

ed inserite la password del vostro utente. Se invece usate Debian:

  $ cd
$ su
# dpkg -i linux*.deb

e dopo il comando su inserite la password dell'utente root.

A causa di un bug in make-kpkg, in alcune versioni di Ubuntu, ovvero tristemente la 10.4 che è una LTS, e forse anche in qualche versione prima e dopo di lei, è necessario, prima di riavviare il computer, generare a mano l'initrd (altrimenti il nuovo kernel non funzionerà e per riavviare il sistema dovrete scegliere un vecchio kernel funzionante nel menu iniziale di GRUB). Non so se sia necessario anche in qualche versione stabile di Debian o se i rilasci stabili di Debian siano immuni da questo problema. Ad ogni modo, rigenerare a mano l'initrd è una cosa semplice e che non fa danni, quindi se siete nel dubbio fatelo comunque. Su Ubuntu:

  $ sudo update-initramfs -c -k all && update-grub

mentre per Debian

  $ su
# update-initramfs -c -k all && update-grub

Notate che se sapete esattamente quale versione del kernel avete compilato, compresa eventuale stringa "Append-to-version" che magari avete specificato nella configurazione del kernel, potete usare quella versione invece di "all" dopo l'opzione -k, così il comando "update-initramfs" si occuperà solo del kernel appena compilato, invece che di tutti i kernel installati, e sarà più veloce.

Riavviate il computer e vi troverete nel menù iniziale (quello di GRUB che appare appena accendete il PC) le voci relative al nuovo kernel, oltre a quelle del vecchio che potete ancora usare nel caso in cui con il nuovo kernel il sistema non dovesse funzionare.