Differenze tra le versioni di "Ricompilazione Kernel per Niubbi"

Da GolemWiki.
m (Aggiunta alla categoria "Howto")
(L'ultimo aggiornamento risaliva al... 2006!!!! Ben dieci anni fa.)
Riga 1: Riga 1:
'''consigli (per noobs) su come installare un nuovo kernel...'''
+
Linee guida (per niubbi) su come compilare e installare un nuovo kernel.
  
 +
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.
  
compilare e installare una nuova versione del kernel è abbastanza semplice, ma è bene ricordarsi alcuni trucchetti...
+
== Download ==
 +
[http://www.kernel.org/ 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.
  
prima di tutto, da dove scaricare le ultime versioni del kernel: [http://www.kernel.org/ The Linux Kernel Archives] è il posto giusto!! :-)
+
=== 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.
  
ok... questo era banale... passiamo alle cose serie: se volete compilare un kernel con le stesse impostazioni di quello che avete attualmente, è sufficente copiare il file .config (notare il punto davanti al nome del file!!) dalla cartella che contiene i sorgenti del kernel attualmente in uso. si possono presentare 2 casi:
+
La configurazione del kernel viene salvata in un file nascosto denominato ''.config'', che deve essere collocato nella directory dei sorgenti del kernel.
  
- avete appena installato la vostra distribuzione: in questo caso avrete un file config-<versione_del_kernel> nella cartella /boot. copiate questo file nella cartella che contiene i sorgenti del nuovo kernel e rinominatelo in .config.
+
=== 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.
  
- avete già compilato in precedenza un'altra versione del kernel (nel qual caso probablimente non avete bisogno di questa guida :-p): copiate il file .config dalla directory dei sorgenti del vecchio kernel
+
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:
  
quindi 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.
  
[user@host linux-2.6.15]$ make oldconfig
+
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.
  
molto probabilmente, in particolare 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, premente invio in risposta a tutte le domande che vi vengono fatte (serve a selezionare l'opzione di default).
+
=== 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.
  
una volta che il nuovo kernel è configurato, eseguite il comando
+
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
  
[user@host linux-2.6.15]$ make
+
''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 ''?''.
  
che serve a compilare i sorgenti, quindi diventate super-user
+
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.
  
[user@host linux-2.6.15]$ su
+
== 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
  
Password: <password_di_root>
+
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  
+
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
  
[root@host modules]# mkdir <versione_del_kernel>
+
Quindi tornate nella cartella dei sorgenti e lanciate i comandi:
 
+
# make install  
 
 
''esempio: se state installando il kernel 2.6.15 dovete creare una cartella di nome '2.6.15'
 
 
 
[root@host modules]# mkdir 2.6.15''
 
 
 
 
 
(secondo me questa cosa dovrebbe farla il make install, ma, non sò perché, non lo fà... :-/)
 
 
 
 
 
 
 
quindi tornate nella cartella dei sorgenti e lanciate i comandi  
 
 
 
 
 
[root@host linux-2.6.15]# make install  
 
 
 
 
e  
 
e  
 +
# make modules_install
  
[root@host linux-2.6.15]# make modules_install
+
Anche questo passaggio potrebbe richiedere diverso tempo.
 
 
 
 
il grosso è fatto, ma ancora non abbiamo finito. prima cosa, dovete riconfigurare il bootloader, in particolare se usate lilo, mentre se usate grub potete anche non fare niente, almeno per ora...
 
per riconfigurare lilo è sufficiente lanciare il comando
 
 
 
 
 
[root@host linux-2.6.15]# /sbin/lilo
 
 
 
 
 
visto che il make install del kernel aggiorna automaticamente il file /etc/lilo.conf
 
 
 
 
 
a questo punto parrebbe tutto a posto, solo che... alcune ditribuzioni non includono i driver dei filesystem nel kernel, ma li compilano come moduli!! se è il vostro caso (ad esempio red-hat e fedora) o non sapete dove guardare per accertarvene, dovete fare un'ultima cosa: creare un ram disk con initrd. come fare?? facile!!
 
 
 
cancellate (o rinominate) il file /boot/initrd-<versione_del_kernel>.img, quindi lanciate il comando
 
 
 
 
 
[root@host linux-2.6.15]# /sbin/mkinitrd /boot/initrd-<versione_del_kernel>.img <versione_del_kernel>
 
  
 +
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??
  
''esempio: per il kernel 2.6.15 il comando è
+
Rinominate il file /boot/initrd-<versione_del_kernel>.img, quindi lanciate il comando  
  
[root@host linux-2.6.15]# /sbin/mkinitrd /boot/initrd-2.6.15.img 2.6.15''
+
# /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.
  
a questo punto potete fare il reboot (e sperare).... :-p
+
Buona fortuna! :-)
  
 
[[Category: Howto]]
 
[[Category: Howto]]

Versione delle 15:11, 13 gen 2016

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

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.

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! :-)