Ricompilazione Kernel per Niubbi

Da GolemWiki.

Linee guida (per niubbi) su come compilare e installare un nuovo kernel.

Se non sei più tanto niubbo, vedi il prontuario veloce di $pooky.

Compilare e installare una particolare versione del kernel è più semplice di quanto si possa pensare, ma, le prime volte, è bene stare attenti e prestare attenzione.

Indice

Requisiti

  • Avere un po' di dimestichezza con la riga di comando
  • Avere installato le utility per la compilazione sulla propria distribuzione (gcc, make)
  • Avere qualche GB libero su disco

Download

www.kernel.org contiene l'archivio di tutte le versioni del kernel: scegliere l'ultima versione, oppure quella particolare che si ha bisogno di usare.

Fare pulito

Prima di cominciare, fare pulito di tutto il superfluo: se non si fa, non succede nulla, ma meglio essere sicuri che non ci siano file oggetto incompleti, configurazioni a metà, o altre diavolerie che potrebbero compromettere la compilazione. La prudenza non è mai troppa.

$ make clean
$ make mrproper

Configurazione

Ci sono due possibilità:

  • compilare un kernel con le stesse impostazioni di quello che avete attualmente, e che viene fornito con la vostra distribuzione;
  • configurare manualmente il kernel per le proprie esigenze.

La configurazione del kernel viene salvata in un file nascosto denominato .config, che deve essere collocato nella directory dei sorgenti del kernel.

Configurazione di default

Questo è sicuramente l'approccio più facile e che richiede meno tempo-utente: infatti è sufficente utilizzare il file .config fornito dalla vostra distribuzione.

Lo si può ottenere:

  • dalla cartella che contiene i sorgenti del kernel attualmente in uso: generalmente, vengono installati solamente i binari del kernel, perciò,per ottenere i pacchetti sorgente, bisogna installarli esplicitamente; fare riferimento alla documentazione della propria distribuzione (ad esempio, su Debian, cercare deb-src)
  • dal sito della vostra distribuzione.

Ottenuta la configurazione e collocato il file nella directory del sorgenti, eseguite il comando:

$ make oldconfig

Se il vecchio kernel era particolarmente vecchio (la ripetizione è voluta :-) ), vi verrà richiesto se includere o meno le nuove caratteristiche: se non sapete cosa fare, premete Invio in risposta a tutte le domande che vi vengono poste, in modo da selezionare l'opzione predefinita.

Una volta che il nuovo kernel è configurato, non resta che compilarlo.

La configurazione fornita da una distribuzione è molto generica, in maniera tale da potersi adattare a quante più macchine possibili. Questo implica che il binario di tale kernel contiene numerosissime funzionalità, che funzionerà quasi sicuramente, ma anche che è più peso e necessita di molto più tempo per essere compilato. E per molto, intendo molto (svariate ore, se non giorni). Se scegliete questa strada, assicuratevi di avere un computer recente, potente e tanto tempo per aspettare.

Configurazione personalizzata

Questo approccio consente di personalizzare il kernel scegliendo i singoli componenti da includere, permettendo così di arrivare anche ad una configurazione leggera e minima indispensabile per la propria macchina.

In questo modo, il binario che risulterà sarà molto più snello e compatto. Funzionerà solo sulla vostra configurazione hardware, ma, in compenso, impiegherete, al massimo, poche decine di minuti a compilarlo.

Per configurare il kernel in questo modo, dare:

$ make menuconfig

Questo comando genera una configurazione di massima basandosi sull'hardware che rileva: in questo modo, il binario risultante dovrebbe almeno permettere al vostro sistema di svolgere almeno le funzionalità di base. Dopodiché, si aprirà un'interfaccia curses, da terminale, per permettere di personalizzare manualmente la configurazione.

Leggere a fondo ogni voce e, per ognuna di esse, capire se la funzionalità in questione è necessaria per poter usare il vostro computer, facoltativa, oppure se siete sicuri che non la utilizzerete mai. In base a queste considerazioni, potete scegliere se:

  • includerla nel binario del kernel, selezionandola come * (asterisco);
  • includerla tra i moduli, selezionandola come M (modulo);
  • non includerla, non selezionandola

Nota: per muoversi nel menù usare i tasti freccia; per aprire i sottomenù usare Invio; per selezionare/deselezionare usare la Barra Spaziatrice; per tornare indietro, premere due volte Esc; per spostarsi tra i pulsanti di una finestra usare Tab

Per ricercare una funzionalità particolare, premere / (in stile vi). Invece, per avere informazioni sulla funzionalità corrente, premere ?.

Al termine della configurazione (non escludo che la prima volta si impieghi anche più di un'ora a leggere, documentarsi e capire tutto), salvare e proseguire con la compilazione.

Se non risucite proprio a capire a cosa serva una determinata funzionalità, includetela: ci vorrà qualche secondo in più a compilare e, nel migliore dei casi, non la userete mai. Meglio qualcosa di troppo che qualcosa che non funziona. :-) E poi, si può sempre affinare il binario togliendola in seguito.

Compilazione

Per compilare, usare il comando:

$ make -jx

che serve a compilare i sorgenti. x è un numero (arrotondato all'intero più vicino), ed è calcolato come n + 1 oppure n * 1.5, dove n è il numero di core del vostro processore. Per conoscere il numero di core del vostro processore, date il comando

$ nproc

Quindi, se restituisce 2, date:

$ make -j3

Inserire il corretto numero di core, velocizza enormemente il processo di compilazione.

Terminata la compilazione (potrebbero occorrere anche alcune ore), diventare super-user:

$ su

Spostatevi nella cartella /lib/modules e create la cartella che conterrà i moduli:

# mkdir <versione_del_kernel>

Ad esempio, se state installando il kernel 2.6.15 dovete creare una cartella di nome '2.6.15':

# mkdir 2.6.15

Quindi tornate nella cartella dei sorgenti e lanciate i comandi:

# make install 

e

# make modules_install

Anche questo passaggio potrebbe richiedere diverso tempo.

Alcune ditribuzioni non includono i driver dei filesystem nel kernel, ma li compilano come moduli. Se è il vostro caso (ad esempio RedHat e Fedora), o non sapete dove guardare per accertarvene, dovete fare un'ultima cosa: creare un ramdisk con initrd. Come fare??

Rinominate il file /boot/initrd-<versione_del_kernel>.img, quindi lanciate il comando

# /sbin/mkinitrd /boot/initrd-<versione_del_kernel>.img <versione_del_kernel>

oppure

# mkinitcpio -p <versione_del_kernel>

Il grosso è fatto. Adesso dovete solo riconfigurare il bootloader. Se usate GRUB (come nella grande maggioranza delle distribuzioni):

# grub-mkconfig -o /boot/grub/grub.cfg

oppure, se usate una distribuzione Debian-based, può bastare anche

# update-grub2

A questo punto fare il reboot, scegliere il kernel appena compilato e sperare... :-P

Nota: il processo di compilazione può essere interrotto (premendo CTRL + C) e riavviato, dando nuovamente il comando di make. make è uno strumento furbo che fa il minimo lavoro necessario: perciò, se si dovesse modificare solo parzialmente la configurazione, make ricompilerà solamente ciò che avete cambiato, e una seconda (terza, quarta...) compilazione saranno quindi notevolmente più veloci. Se rompete qualcosa e non funziona più nulla, potete sempre fare pulito e ricominciare daccapo, come spiegato all'inizio di questo prontuario.

Buona fortuna! :-)

Strumenti personali