Sembra che Debian abbia una sua speciale maniera di fare per praticamente quasi tutto, inclusa la compilazione del kernel. Debian ha un sistema che vi permette di compilare il kernel e automaticamente costruirvi attorno un pacchetto Debian, consentendovi di installare poi un nuovo kernel cosi' come installate un qualsiasi altro pacchetto. Cio' significa anche che potete impacchettare un kernel su una macchina e poi installare il pacchetto sulle altre macchine senza dover ricompilare o registrare tutti i fallimenti - ottimo se avete bisogno di aggiornare un buon numero di macchine simili!
Potete scaricare i sorgenti del kernel direttamente da kernel.org o da un mirror se preferite, ma naturalmente ci sono perfino i pacchetti delle sorgenti del kernel. Un veloce apt-cache search kernel-source
vi restituira' una lista di pacchetti delle sorgenti del kernel tutti pronti da usare.
Prendendone uno ad esempio, potete semplicemente dare
#apt-get install kernel-source-2.6.8
per ottenere le sorgenti scaricate sul vostro sistema. Finirete con l'avere un archivio in
/usr/src
, che e' il posto in cui la maggior parte del lavoro del kernel viene svolto. Adesso potrete estrarre le sorgenti dall'archivio:#cd /usr/src #bunzip2 kernel-source-2.6.8.tar.bz2 #tar xf kernel-source-2.6.8.tar
Tutto cio' vi lascera' con una directory
/usr/src/kernel-source-2.6.8
, pronta per la configurazione. Prima create un link simbolico ad essa chiamato linux
, cosi':#ln -s kernel-source-2.6.8 linux
Se ci fosse gia' un tale link simbolico (che puntasse per esempio a delle vecchie sorgenti del kernel), dovrete prima cancellarlo.
Adesso potrete ottenere il vostro albero delle sorgenti del kernel semplicemente digitando:
#cd /usr/src/linux
Prima di configurare, compilare e impacchettare il vostro nuovo kernel vi dovrete assicurare di disporre di alcuni tools. Per installare i pacchetti principali:
#apt-get install kernel-package libncurses5-dev
Cio' fara' si' che vengano installati una serie di altri pacchetti di suppoero in base alle dipendenze trovate.
Ci sono parecchi modi di configurare un kernel prima di compilarlo, e tutti sono invocati come argomenti del comando make
. Assicuratevi di avere una shell aperta nella directory delle sorgenti del kernel (dovrebbe essere /usr/src/linux
se avete seguito le mie precedenti indicazioni) prima di provarne uno qualunque di questi. Andando in ordine crescente di complessita', tali metodi sono:
editing .config
La reale configurazione e' salvata nella directory dei sorgenti in un file di testo chiamato
.config
. Se veramente volete (o se steste cercando per nome un'opzione trovata in un 'readme', del tipo 'CONFIG_PACKET') potete editare il file direttamente con un editor di testo come Vi o Anjuta. Cio' dovrebbe essere veramente molto raro.
make config
L'approccio piu' basilare, vi fara' soltanto una sfilza di domande, una dopo l'altra. Personalmente odio fare in questo modo, perche' e' sequenziale e dovete addentrarvi in una marea di opzioni di cui probabilmente non ve ne potrebbe interessare di meno. Approdate a questo modo soltanto come ultima spiaggia, proprio se le altre opzioni, per un qualche motivo, non vi fossero disponibili.
make menuconfig
Questo e' il modo piu' comune per eseguire la configurazione. Mostra un gradevole menu, guidato da tastiera, attraverso il quale potrete navigare usando le frecce, invio e la barra spaziatrice. Comunque sia, un colpo che potrebbe mettervi fuori gioco potrebbe essere il trovarvi ad aver bisogno delle librerie di sviluppo per Ncurses, non delle sole Ncurses. E' per questo che vi ho fatto installare il pacchetto libncurses5-dev qualche paragrafo fa'

make xconfig
Il metodo preferito per le macchine con X, e' molto simile al metodo precedente soltanto che e' interamente realizzato con un'interfaccia 'punta-e-clicca' attraverso la navigazione col mouse. L'unica cosa di cui potreste aver bisogno per farlo funzionare e' tk8.3; se rilevaste errori che dicono di non trovare
wish
, lanciate:#apt-get install tk8.3
e tutto dovrebbe sistemarsi.
Qualunque metodo di configurazione scegliate, il passo successivo consta nell'esaminare le impostazioni per le differenti opzioni del kernel e fare le modifiche come richiesto.
C'e' un enorme numero di opzioni del kernel, quindi per aiutarvi a trovare meglio le cose, esse sono state raggruppate logicamente in differenti sezioni maggiori e minori. I diversi metodi di configurazione hanno ognuno il proprio modo di rappresentare questi raggruppamenti, ma dovrebbero essere tutti decentemente immediati da seguire.
Non entrero' qui nei dettagli della configurazione del kernel, perche' quello che vi puo' servire di configurare potrebbe variare enormemente da un caso all'altro e sulla Rete c'e' un'infinita di tutorial in proposito (incluso il Kernel How-To!) che spiegano cio' nel dettaglio. Essenzialmente, dovete esplorare i menu per trovare le opzioni e i moduli che vi serve di abilitare, e impostarli a off (non disponibile), on (compilato direttamente nel kernel) o modulo (compilato separatamente in modo da essere caricato quando necessaario).
Una volta conclusa la navigazione attraverso le opzioni, uscite salvando avendo cosi' memorizzato le vostre scelte in un file di configurazione che usato dal compilatore.
Da notare un trucco: i dettagli della reale configurazione sono immagazzinati in un file chiamato .config
nella directory sorgente del kernel. Una volta che abbiate finito di configurare il kernel a vostro piacimento, muovere verso un nuovo kernel potrebbe essere doloroso se avete iniziato dal nulla il processo di configurazione e quasi certamente vi stareste perdendo qualcosa di fondamentale - so che di solito mi capita! Per rendere le cose piu' facili, potete copiare il file .config
nella directory delle sorgenti del nuovo kernel avendo cosi' portato automaticamente tutte le opzioni salvate col vecchio kernel. Quindi vi bastera' eseguire la configurazione semplicemente controllando che tutto sia come vogliate, salvare e procedere come prima. A patto che non stiate passando ad un tipo di kernel totalmente nuovo, questo trucchetto puo' risparmiarvi un sacco di tempo. Attenzione che, se state passando da un kernel ad un altro totalmente differente, come potrebbe essere dal 2.4.xx al 2.5.xx, a causa del fatto che molte opzioni saranno totalmente diverse, cionostante il vecchio file config potrebbe ancora funzionare, potrebbe risultare che alcune opzioni non siano attivate nel nuovo kernel.
A questo punto il kernel viene effettivamente compilato e posto in un pacchetto. Normalmente ci sarebbe molto lavoro da fare, ma grazie ai tools forniti dal pacchetto kernel-package
questo e' uno dei passi piu' semplici.
Se avete letto un kernel How-To avrete probabilmente visto una sequenza di comandi come make dep && make clean && make bzImage
. Non dovrete fare niente di tutto cio', ma soltanto digitare:
#make-kpkg kernel-image
nella directory
/usr/src/linux
, ed esso si prendera' cura di tutto. Gli strumenti di impacchettamento del kernel prima compilano il kernel e i moduli come da file di configurazione generato, e poi costruiscono un pacchetto Debian chiamato kernel-image-<version>_<architecture>.deb
al di fuori della directory delle sorgenti (ad esempio, in /usr/src
).
Questa fase puo' durare un po' di tempo, dipendentemente dalla velocita' della vostra macchina e di quali moduli avete selezionato. Aspettatevi qualunque cosa, da 10 minuti a mezz'ora, tempo durante il quale vedrete un grande flusso di informazioni di debugging che probabilmente non vi interesseranno, a meno che qualcosa vada storto.
Ci siamo quasi! Quello che avete in mano adesso e' un kernel, compilato con le proprie opzioni personalizzate, e preparato come pacchetto Debian pronto da installare.
Installare il nuovo kernel e' adesso soltanto questione di usare dkpg
come root, per installare tale pacchetto come ogni altro pacchetto Debian:
#dpkg -i kernel-image-2.6.8_10.00.Custom_i386.deb
Potra' esservi chiesto di creare un floppy di avvio che utilizzi quell'immagine di kernel; le dozzine di macchine che gestisco non hanno un singolo drive per floppy, percio' sono abituato a rispondere 'no' a questa domanda, ma potete rispondere 'yes' se preferite crearvene uno.
Successivamente vi chiedera' se volete installare un blocco d'avvio usando l'esistente lilo.conf
: se usate lilo come bootloader (che e' quello di default per Woody) allora rispondete 'yes'.
Per adesso quello che e' effettivamente successo e' soltanto che dkpg
abbia copiato l'immagine del nuovo kernel in /boot
dove i kernel sono normalmente messi, creato un link simbolico da /vmlinuz
al nuovo kernel (potete verificarlo mediante ls -l /vmlinuz
), modificato il vostro /etc/lilo.conf in modo che Lilo possa trovare il nuovo kernel, spostato il precedente kernel in modo che sia disponibile come ripiego nel caso il nuovo si pianti, e rilanciare Lilo per rendere effettive le modifiche.
Notate che a questo punto non state eseguendo il nuovo kernel: e' solo pronto per essere usato la prossima volta che riavverete la macchina. Installare un nuovo kernel e' una delle veramente poche occasioni in cui sia proprio necessario riavviare un sistema Linux.
Teoricamente Grub dovrebbe essersi gia` autoconfigurato in automatico, ma puo` anche non succedere. Allora aprite il file /boot/grub/menu.lst
e aggiungete:
title Debian root (hd0,1) kernel /boot/vmlinuz-2.6.8 root=/dev/hda2 ro savedefault boot
E' ora della grande prova! Se state eseguendo X, uscite dalla sessione e riavviate. Quando Lilo si carichera', vi verra' presentata la lista di kernel disponibili, incluso il nuovo.
Selezionatelo e premete Invio.
Una volta avviato, potete controllare i messaggi di boot per vedere cosa ha caricato il nuovo kernel mediante i log di dmesg:
less /var/log/dmesg
Se tutto e' andato come ci si aspettava, congratulazioni! Avete appena compilato e installato un kernel personalizzato "alla maniera Debian".
Commenti
Inviato da eraclito il Mar, 15/02/2005 - 21:12.
che fino ha fatto initrd?
ciao
ho provato a seguire questa guida su ubuntu (kernel 2.6.9).
ho visto che (come nelle istruzioni) non mi ha creato un file initrd (che il kernel dafault aveva) e riavviando ho avuto un kernel panic.
sapete darmi qualche consiglio?
eraclito
Inviato da komplikazione il Ven, 30/09/2005 - 09:34.
Re: che fino ha fatto initrd?
make-kpkg --initrd
creai un kernel con initrd ... o meglio genera una script che richiama automaticamente mkinitrd al momento dell'installazione.
vedi anche
/etc/kernel-img.conf
/etc/kernel-pkg.conf
* mkinitrd :
Usage: /usr/sbin/mkinitrd [OPTION]... <-o outfile> [version]
puoi usare alcuni cmd che ti permettono di fare un po di cose interessanti ... ma a te credo basti:
mkinitrd -o /boot/initrd.img-`uname -r` `uname -r`
Inviato da -jko- il Sab, 19/03/2005 - 00:03.
mkinitrd
...cmq..si,senza l'initrd nn parte il sistema,io l'ho aggiunto col mkinitrd "linkandolo" dopo col tool BOOT fornido da questa meraviglia di distribuzione...ne ho provate un po di distro ma mi sono innamorato ormai di questa...è quello che cercavo...^_^.............
...nn c'è soluzione perchè nn c'è nessun problema...
Inviato da hunter il Mer, 27/04/2005 - 23:34.
Re: mkinitrd
Come hai creato l'initrd?
Questa si che è vita, mangio, dormo e :pint:

Inviato da Val3r10 il Gio, 19/05/2005 - 10:15.
Re: mkinitrd
mkinitrd -o /boot/initrd.... $(uname -r)
Dopo l'opzione -o (output) devi indicare il nome del ramdisk da creare, presumibilmente nella directory /root, e poi l'albero di /lib/modules del tuo kernel.
Ciao
Inviato da sardukar87 il Gio, 29/09/2005 - 21:35.
Re: mkinitrd
Penso che sia dovuto al initrd:
VFS: Cannot open root device "hda1" or unknow-block (0,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: unable to mount root fs on unknow block (0,0)
Ma come devo crearlo di preciso? (kernel 2.6.13.2)
Grazie mille
Inviato da COReE il Gio, 29/09/2005 - 22:45.
Re: mkinitrd
Wou can learn more than your solution doing a little RTFM (read the fuckin' manual)
man mkinitrd