Ubuntu/Linux: Ricompilare il Kernel – Parte 1 – La preparazione

Il kernel: il cuore del sistema operativo, nel senso più stretto della parola. Se il kernel è fatto bene state pur certi che il vostro sistema operativo vi ringrazierà, altrimenti… se il kernel non è fatto come si deve col cavolo che riuscirete anche soltanto ad avviare il sistema!
Voglio avvisarvi: quella di ricompilare il kernel è un’avventura lunga (chi non è pratico potrebbe impiegare anche più di due ore) e dall’esito molto dubbio specie agli inizi (si, è giusto che le cose non funzionino al primo colpo. Ma non preoccupatevi, nulla di irreversibile).
A questo punto mi aspetto che qualche lettore, inorridito, chiuda la pagina e pensi “Ma a me chi diavolo me lo fa fare?”. Ve lo spiego subito: un utente Linux che si rispetti deve almeno una volta, a prescindere dal fatto che vada bene o no, impegnarsi a tentare di ricompilarsi il kernel da solo. E voglio spiegarvi anche il perchè. Se poi non dovessero interessarvi le motivazioni e volesse andare dritto al sodo.. beh, clickate qui per volare direttamente giù! :)
Un pochettino di teoria: il kernel, o nucleo del sistema operativo, è la colonna portante del sistema stesso. In esso viene definito e specificato ciò che, a livello hardware, è presente nel nostro computer (e scoprirete che non parliamo semplicemente di scheda video, audio, processore e monitor) e come il nostro sistema debba comportarsi a seconda delle componenti hardware definite. Consideriamo, ad esempio, una scheda video. Le domande che voi dovrete porvi saranno del tipo:
- Che scheda video ho?
- La mia scheda video supporta la funzione XYZ?
- Se la funzione XYZ è supportata devo fare in modo che questa sia disponibile fin dall’avvio del sistema, o che possa io abilitarla soltanto all’occorrenza?
Tradotto in terminologia “ricompilazione del kernel” le tre domande che vi ho appena posto diventano:
- Il supporto a che driver devo abilitare?
- Posso abilitare la funzione XYZ relativamente alla mia scheda video?
- Devo abilitare la funzione XYZ come built-in (disponibile da subito) o come modulo (abilitabile all’occorrenza)?
L’obiettivo più “scontato” della ricompilazione del kernel è quello di renderlo più “specifico per il nostro sistema”, aumentando – anche se in alcuni casi di poco – le prestazioni della nostra macchina. Oltretutto, poi, esistono dei files particolari adatti al kernel - le patch – che sono dei files belli e fatti da sviluppatori di buona volontà in grado di aggiungere (o togliere) determinati parametri alla configurazione del nostro kernel così da renderlo più specifico per un compito piuttosto che per un altro (esistono le patch per migliorare le prestazioni delle macchine media-center, patch che migliorano le prestazioni delle macchine server, patch che migliorano la reattività delle macchine desktop e via discorrendo). Ma credo che il discorso patch sarà affrontato mooooooolto più in là.
Allora, volete buttarvi in questa nuova avventura? Bene, la prima parte di questa guida provvederà a creare l’ambiente di ricompilazione del nostro nuovo e (forse…) fiammante kernel. Le opzioni, poi, le analizzeremo pian pianino man mano che la guida andrà a completarsi.
Step 1: preparare la directory di lavoro che vi accompagnerà durante tutto il procedimento. Innanzitutto non fate il mio stesso errore: avrete sì bisogno di privilegi abbastanza elevati… ma lasciate stare il root. Utilizzeremo invece il gruppo src per guadagnare i privilegi dovuti. La nostra directory altri non è che /usr/src: andiamo a dire al sistema che il nuovo gruppo proprietario della directory è proprio src, e diciamoglielo con il comando
sudo chgrp src /usr/src
Diamo ora i permessi completi al gruppo src sulla cartella (e su tutte le sue future sottocartelle) con il comando
sudo chmod g+rwx /usr/src
sudo chmod -R g+rwx /usr/src/*
e, infine, aggiungiamo noi stessi al gruppo src (altrimenti non potremmo combinare un bel niente) con il comando
sudo adduser $USER src
E la directory di lavoro è bella e configurata! Ora andiamo allo…
Step 2: download e preparazione dei sorgenti del kernel.
Scegliamo il kernel che vogliamo sia “vittima” dei nostri esperimenti dal sito kernel.org (qui troverete quelli della serie 2.6.x e qui quelli della serie 3.0.x – momentaneamente in fase di testing). Solitamente, per il discorso del futuro patching (che potrebbe anche non riuscire), si tende a prendere le versioni del tipo X.Y.Z e non del tipo X.Y.Z.K (ossia bollino verde per 2.6.39 ma non per 2.6.39.1), anche se nessuno vi vieta d’altra parte di farlo.
Volendo potreste anche voler scaricare – anzi, spesso succede così - i sorgenti dello stesso kernel che avete attualmente installato: ciò vorrà dire che state ricompilando per migliorarlo. Ricordate che per visualizzare il kernel correntemente in uso basterà aprire un terminale e digitare
uname -r
A questo punto dovreste aver scaricato l’archivio contenente i sorgenti del kernel che avete scelto. Ricordatene il percorso ed il nome, ci servirà tra esattamente 20 secondi! Supponiamo di aver scaricato il kernel 2.6.39 all’interno della directory ~/Scaricati. Apriamo il nostro amico terminale e… iniziamo con il copiare l’archivio appena scaricato all’interno della nostra directory di lavoro (da questo momento in poi se siete su distribuzione debian-based vi toccherà anteporre “sudo” davanti ad ogni comando).
cd /usr/src
cp ~/Scaricati/linux-2.6.39.tar.bz2 .
Ci troviamo ora all’interno di /usr/src. Andiamo a decomprimere i nostri sorgenti (su cui successivamente lavoreremo) con il comando
tar xfjv linux-2.6.39.tar.bz2
Consiglio fortemente di non cancellare l’archivio: potremmo aver bisogno dei sorgenti qualora qualcosa non dovesse andare come previsto! In tutti i casi – lo si fa un po’ per convenzione, non c’è un motivo strettamente funzionale per cui farlo – creiamo un link simbolico (directory che chiameremo linux) alla directory contenente i sorgenti appena decompressi con il comando
ln -s linux-2.6.39 linux
Entriamo nella directory…
cd linux
e… ora la tastiera inizia veramente a scottare.
Potrete scegliere due strade: potrete buttarvi a capofitto nella ricompilazione da zero, o basare la vostra ricompilazione sul vostro kernel attuale (e quindi sicuramente funzionante), modificandone all’occorrenza i parametri desiderati.
Nel primo caso (ripartire da zero) non vi resterà che cancellare tutte le tracce di “vecchia configurazione” (non dovrebbero esservene ma facciamolo lo stesso) con il comando
make mrproper
Nel secondo caso, invece, andiamo a prelevare dalla directory /boot un file di configurazione già esistente (in particolare quello su cui si basa il vostro kernel attuale), copiamolo nella nostra directory ed effettuiamo una sorta di “copia di opzioni” con i comandi
cp /boot/config-`uname -r` .config
make oldconfig
Ora, a prescindere dalla vecchia o dalla nuova configurazione, siete pronti per entrare nel core della ricompilazione accedendo, finalmente, ai fantastici “menu” con le millemila opzioni! Scegliete se:
- fare tutto in maniera totalmente testuale (con un alto margine d’errore, a mio avviso) digitando da terminale il comando
make config - utilizzare un’interfaccia simil-grafica, sempre terminal-based (scritta con le ncurses, se non le avete installatele da qui o, se siete su debian-based, installate il pacchetto libncurses5-dev) digitando da terminale il comando
make menuconfig - 3. utilizzare una vera e propria interfaccia grafica piena di pulsanti e pulsantini, digitando
make gconfigse preferite lo stile GNOME oppure
make xconfigse preferite lo stile KDE!
La prima parte di questa guida finisce qui, la prossima fase analizzerà uno dei due punti fondamentali per il funzionamento vero e proprio del sistema: il sottomenu General Setup!
Se proprio non vorrete aspettare potrete sempre cercare di andare ad intuito.. occhio, però, è roba che scotta davvero… :)









Pingback: Ubuntu/Linux: Ricompilare il Kernel – Parte 1 – La preparazione | Live PC Blog
Pingback: Come ricompilare il Kernel Linux – Parte 2 - Chimera Revo
Pingback: Linux: come ricompilare il kernel – Parte I - The Silicon Jey
Pingback: Linux Blog on: Marco: Ubuntu/Linux: Ricompilare il Kernel – Parte 1 – La preparazione – Chimera Revo | MiloRiano: Computers news, tips, guides...
Pingback: Ubuntu/Linux: Ricompilare il Kernel – Parte 1 – La preparazione | Pupugnao.it