by admin — published on May 15th, 2005
Installare un kernel alla "debian way"
--------------------------------------
Ricompilare o aggiornare un kernel su una distribuzione Debian, contrariamente
a quanto si potrebbe pensare, e' piu' facile e piu' rapido che su molte altre
distribuzioni.
Debian mette a disposizione moltissimi kernel precompilati ottimizzati per le
varie architetture, quindi nella maggior parte dei casi troverete tra essi un
pacchetto contenente un kernel adatto alle vostre esigenze. In caso contrario,
Debian mette a disposizione dell'utente "make-kpkg", uno strumento che rende in
grado chiunque di creare un pacchetto .deb contenente un kernel personalizzato.
Scegliere il kernel precompilato giusto
---------------------------------------
Per sapere qualche versione del kernel state correntemente utilizzando
eseguite:
# uname -r
Al termine dell'installazione di Debian il vostro sistema gira con lo stesso kernel
utilizzato dal CDROM di installazione, ovvero il cosiddetto "bf24" (sta per
boot floppy ver. 2.4). Si tratta di un kernel il piu' generico possibile, privo
di ottimizzazioni particolari, non pensato per l'utilizzo in produzione, ma
semplicemente per far partire il sistema al primo boot. E' caldamente
consigliabile sostituirlo con uno piu' adatto al vostro sistema.
Supponendo di aver opportunamente configurato apt, eseguite:
# apt-cache search ^kernel-image
e avrete la lista dei kernel precompilati disponibili.
Prendete in considerazione i pacchetti che hanno un nome del seguente tipo:
"kernel-image-versione-release-architettura":
- "versione" indica quali sorgenti del kernel di Linux (quelli che trovate
su www.kernel.org tanto per intenderci) sono stati utilizzati.
- "release" e' un numero progressivo che indica quante volte e' stato aggiornato
il pacchetto: i maintainer dei pacchetti kernel-image infatti applicano al
kernel alcune patch contenenti i fix piu' importanti scoperti dalla data di
rilascio del kernel ufficiale. Ogni volta che si rende necessario aggiungere
delle patch e rilasciare dei nuovi pacchetti il numero di "release" viene
incrementato.
- "architettura" indica per quale architettura e' stato ottimizzato il kernel.
La scelta del kernel giusto dovrebbe essere a questo punto abbastanza ovvia.
Supponiamo di avere un sistema dual athlon: in tal caso si installera' il
pacchetto:
kernel-image-2.4.21-5-k7-smp
ovvero la versione 2.4.21 del kernel ufficiale (-2.4.21) con aggiunta la 5^ versione
della patch mantenuta dagli sviluppatori Debian (-5) e ottimizzato per sistemi
multiprocessore (-smp) che montano Athlon K7 (-k7).
Ovviamente se decideste di installare il pacchetto kernel-image-2.4.21-5-386,
il sistema partirebbe comunque, semplicemente non avreste delle prestazioni
ottimali.
Di cosa si compone un pacchetto kernel-image
--------------------------------------------
I pacchetti kernel-image si compongono generalmente delle seguenti parti:
- l'immagine del kernel
- i moduli che possono essere inseriti nel kernel
- un _eventuale_ ramdisk "initrd"
Il kernel viene posizionato in /boot/vmlinuz-x-y-z.
I moduli vengono installati nella directory /lib/modules/x.y.z/
L'initrd viene installato in /boot/initrd.img-x-y-z
initrd e' l'immagine compressa di un disco che puo' essere acceduta dal kernel
ancora prima che il sistema sia stato avviato. In essa vengono di solito
salvati tutti quei moduli che sono necessari per accedere al disco
e che allo stesso tempo non e' possibile compilare staticamente all'interno del
kernel per motivi di spazio.
Vengono inoltre creati i seguenti file:
- /boot/config-x.y.z: file di configurazione utilizzato per compilare il
kernel.
- /usr/share/doc/kernel-image-x.y.z: directory contenente varie informazioni
riguardo l'immagine del kernel, tra cui la ver. del compilatore e delle librerie
utilizzate in fase di compilazione (si veda il file buildinfo.gz)
- /lib/modules/x.y.z/build: symlink che punta alla directory contenente
i sorgenti del kernel o, nel caso mancassero, i soli header.
Cautela
-------
Per evitare che il sistema diventi non avviabile nel caso l'aggiornamento
del kernel fallisca, e' consigliabile per prima cosa creare un disco di avvio
di emergenza con il comando:
# mkboot /boot/vmlinuz-2.4.21-5-k7
E' possibile anche utilizzare il 1^ cdrom di installazione di Debian per
effettuare un boot di emergenza: e' sufficiente che quando appare il prompt
"boot:" scriviate:
rescbf24 root=/dev/XXXX
Prima di poter utilizzare questo metodo e' necessario conoscere quale sia la
vostra partizione di root, percio' prima di upgradare il kernel e riavviare,
eseguite il comando:
# rdev | cut -d ' ' -f 1
e segnatevi il suo output.
Prepararsi a sostituire il kernel
---------------------------------
Occorre modificare il file /etc/kernel-img.conf. Il mio
consiglio e' di inserire le seguenti opzioni di configurazione:
clobber_modules=yes
do_symlinks=no
do_bootfloppy=no
do_bootloader=no
relink_build_link=yes
Sostituire il kernel
--------------------
Supponiamo di stare utilizzando il kernel 2.4.21-5-k7 e di voler upgradare a
kernel-image-2.4.22-1-k7.
1) Si esegua:
# apt-get install kernel-image-2.4.22-1-k7
2) Si verifichi il contenuto del pacchetto con:
# dpkg -L kernel-image-2.4.22-1-k7 | more
2) Si aggiungano al file /etc/lilo.conf le seguenti righe:
image=/boot/vmlinuz-2.4.22-1-k7
label=2.4.22-1-k7
initrd=/boot/initrd.img-2.4.22-1-k7
read-only
optional
3) Si esegua:
# lilo -v -t
e si controlli di avere il seguente output:
Boot image: /boot/vmlinuz-2.4.22-1-k7
Mapping RAM disk /initrd.img -> boot/initrd.img-2.4.22-1-k7
Added 2.4.22-1-k7
Se appare una riga che comincia con "Fatal" allora avete
commesso un errore in una delle precedenti fasi e non potete continuare la
procedura.
4) Si esegua:
# lilo -v
# lilo -R 2.4.22-1-k7
# reboot
5) Nel caso il sistema riparta correttamente con il nuovo kernel (verificare
con uname -r) si imposti come default il nuovo kernel: nel file
/etc/lilo.conf si modifichi la seguente riga:
default=2.4.22-1-k7
e si esegua:
# lilo -v -t && lilo -v
Custom kernel
-------------
Supponiamo di stare utilizzando il kernel 2.4.22-1-k7.
Supponiamo inoltre che sia appena uscito il kernel 2.4.23 e che non esista
ancora un pacchetto .deb di tale kernel, oppure che si preferisca compilarlo
da soli eventualmente rimuovendo alcune parti che non ci interessano.
Supponiamo di voler inoltre avere l'ultima versione del supporto per ACPI,
non inclusa nel kernel ufficiale.
1) Scaricate il file ftp://ftp.it.kernel.org/pub/linux/kernel/v2.4/linux-2.4.23.tar.bz2
in /usr/src
1b) Scaricate il file
ftp://ftp.it.kernel.org/pub/linux/kernel/v2.4/linux-2.4.23.tar.bz2.sign
Verificate l'autenticita' dei sorgenti del kernel con:
# gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E
# gpg --verify linux-2.4.23.tar.bz2.sign linux-2.4.23.tar.bz2
2) Scaricate in /usr/src le patch di vostro interesse (nel nostro caso
http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release/2.4.23/acpi-20031203-2.4.23.diff.bz2)
3) Decomprimete il kernel:
# cd /usr/src/
# tar xvjf linux-2.4.23.tar.bz2
# mv linux linux.old
# ln -s linux-2.4.23 linux
4) Applicate le eventuali patch:
# cd /usr/src/linux
# bzip2 -dc ../acpi-20031203-2.4.23.diff.bz2 | patch -p1
NB: scegliete sempre la versione della patch adatta ai sorgenti del kernel
che state utilizzando.
NB2: se la patch ha estensione .gz anziche' .bz2 o .bz, usate gzip anziche'
bzip2.
5) Copiate il file di configurazione del kernel correntemente in uso:
# cp /boot/config-`uname -r` /usr/src/linux/.config
in modo da non dover riconfigurare il kernel da zero e poter riutilizzare
la configurazione attualmente in uso.
6) Eventualmente riconfigurate il kernel, togliendo quello che non vi
serve e aggiungendo quello che vi serve e non e' stato abilitato nel kernel
precompilato:
# cd /usr/src/linux-2.4.23
# make menuconfig
NB: per utilizzare menuconfig occorre installare il pacchetto libncurses5-dev
7) Ricompilate il kernel e i moduli:
# cd /usr/src/linux-2.4.23
# make-kpkg kernel_image
Il programma "make-kpkg" fa parte del pacchetto kernel-package.
8) Verra' creato un file in /usr/src con un nome del tipo:
kernel-image-2.4.23_10.00.Custom_i386.deb
Potete verificarne il contenuto con:
# dpkg -L /usr/src/kernel-image-2.4.23_10.00.Custom_i386.deb | more
9) Installate il kernel con:
# dpkg -i /usr/src/kernel-image-2.4.23_10.00.Custom_i386.deb
10) Aggiungete a /etc/lilo.conf la seguente sezione:
image=/boot/vmlinuz-2.4.23
label=2.4.23
read-only
optional
NB: nei kernel Custom difficilmente utilizzerete un initrd.
11) Eseguite:
# lilo -v -t
e controllate di avere il seguente output:
Boot image: /boot/vmlinuz-2.4.23
Added 2.4.23
Se appare una riga che comincia con "Fatal" allora significa che avete
commesso un errore in una delle precedenti fasi e non potete continuare la
procedura.
12) Eseguite:
# lilo -v
# lilo -R 2.4.23
# reboot
Moduli di terze parti
---------------------
Debian dispone di alcuni pacchetti contenenti moduli sviluppati da terze
parti che non possono essere inclusi nel kernel.
Esempi di questi moduli sono i driver per le schede NVidia
(nvidia-kernel-source) e i driver per i modem Smart Link (sl-modem-source);
altri esempi possono essere visualizzati con il comando:
# apt-cache search "-source$"
La compilazione di questi moduli richiede la presenza degli header del
kernel con il quale verranno utilizzati.
Supponiamo di voler installare i driver per i modem Smart Link.
Si possono presentare due situazioni.
- se state usando un kernel precompilato, ad es. 2.4.22-1-k7:
1) Installate i seguenti pacchetti:
# apt-get install kernel-headers-2.4.22-1-k7
# apt-get install module-assistant
# apt-get install sl-modem-source
2) Eseguite:
# module-assistant auto-install sl-modem-source
- se avete compilato un vostro kernel, ad es. 2.4.23
1) Eseguite:
# apt-get install sl-modem-source
# cd /usr/src
# tar xvjf sl-modem.tar.bz2
# cd /usr/src/linux-2.4.23
# make-kpkg kernel_image
2) Installate il pacchetto appena prodotto con:
# dpkg -i /usr/src/sl-modem-modules-2.4.23_2.9.1-1+2.4.23_i386.deb
This entry was posted
on Sunday, May 15th, 2005 at 23:12 and is filed under howto.
You can follow any responses to this entry through the RSS 2.0 feed.
You can skip to the end and leave a response. Pinging is currently not allowed.
.