Compilare e installare il kernel su Mandriva

5 Compilare il kernel
Per compilare il kernel, esegui semplicemente questo comando:
make rpm
Sii paziente: la compilazione del kernel può richiedere diverse ore, a seconda della configurazione del kernel e della velocità del processore. Riduci i tempi usando più jobs con make (es.: make -j4) se il tuo sistema ha CPU multi-core.
Nota importante: assicurati di avere spazio disco sufficiente in /usr/src e in /boot prima di iniziare.
6 Installare il nuovo kernel
Dopo una build riuscita, vengono creati un src.rpm e uno o più pacchetti rpm binari. Il pacchetto src.rpm si trova in /usr/src/rpm/SRPMS/. Per vedere il nome del file esegui:
ls -l /usr/src/rpm/SRPMS/
Nel mio esempio si chiamava kernel-2.6.18.3default-1.src.rpm.
I pacchetti rpm binari si trovano in /usr/src/rpm/RPMS/
ls -l /usr/src/rpm/RPMS/i386/
Nel mio sistema il pacchetto si chiamava kernel-2.6.18.3default-1.i386.rpm.
Per installare il pacchetto kernel rpm:
cd /usr/src/rpm/RPMS/i386/
rpm -ivh kernel-2.6.18.3default-1.i386.rpm
Puoi trasferire lo stesso file RPM su altri sistemi Mandriva e installarlo senza ricompilarlo lì.
Successivamente crea un ramdisk per il nuovo kernel; altrimenti il sistema probabilmente non si avvierà con il nuovo kernel:
mkinitrd /boot/initrd-2.6.18.3-default.img 2.6.18.3-default
7 Configurare il boot loader LILO
Ora dobbiamo configurare il boot loader LILO in modo che il nuovo kernel venga avviato al riavvio.
Per trovare i nomi del kernel e del ramdisk:
ls -l /boot
Di solito il kernel ha prefisso vmlinuz (es. vmlinuz-2.6.18.3-default) e il ramdisk prefisso initrd (es. initrd-2.6.18.3-default.img).
Modifica /etc/lilo.conf. Prendi uno dei blocchi kernel funzionanti come esempio, sostituisci i campi kernel e initrd e aggiungi il nuovo blocco sopra gli altri. Specifica un’etichetta (label) unica e imposta la stessa etichetta come default se vuoi che sia il kernel predefinito all’avvio.
Per modificare il file:
vi /etc/lilo.conf
Esempio: lilo.conf prima dell’aggiunta del nuovo stanza:
# File generated by DrakX/drakboot
# WARNING: do not forget to run lilo after modifying this file
default="linux"
boot=/dev/sda
map=/boot/map
keytable=/boot/us.klt
menu-scheme=wb:bw:wb:bw
compact
prompt
nowarn
timeout=100
message=/boot/message
image=/boot/vmlinuz
label="linux"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux-nonfb"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5"
image=/boot/vmlinuz
label="failsafe"
root=/dev/sda6
initrd=/boot/initrd.img
append=" failsafe resume=/dev/sda5"
Esempio: lilo.conf dopo l’aggiunta (nota label e default modificati):
# File generated by DrakX/drakboot
# WARNING: do not forget to run lilo after modifying this file
default="linux-2.6.18.3-default"
boot=/dev/sda
map=/boot/map
keytable=/boot/us.klt
menu-scheme=wb:bw:wb:bw
compact
prompt
nowarn
timeout=100
message=/boot/message
image=/boot/vmlinuz-2.6.18.3-default
label="linux-2.6.18.3-default"
root=/dev/sda6
initrd=/boot/initrd-2.6.18.3-default.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux-nonfb"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5"
image=/boot/vmlinuz
label="failsafe"
root=/dev/sda6
initrd=/boot/initrd.img
append=" failsafe resume=/dev/sda5"
Dopo aver salvato /etc/lilo.conf, esegui:
lilo
Quindi riavvia il sistema:
shutdown -r now
Se tutto è andato a buon fine il sistema si avvierà con il nuovo kernel. Puoi verificare la versione corrente del kernel con:
uname -r
Dovrebbe mostrare una stringa come:
2.6.18.3-default
Se il sistema non si avvia, al prompt di LILO seleziona il kernel precedente e avvia il sistema. Dopo aver ripristinato il sistema, rimuovi la stanza del kernel non funzionante da /etc/lilo.conf e riesegui lilo.
Puoi ora riprovare a compilare un kernel funzionante. Non dimenticare di eseguire sempre:
lilo
dopo aver modificato /etc/lilo.conf.
8 Link utili
- Mandriva: http://www.mandriva.com
- The Linux Kernel Archives: http://www.kernel.org
Controlli rapidi e checklist per l’amministratore
- Verifica spazio disco: df -h /usr/src /boot
- Controlla dipendenze: gcc, make, rpm-build, kernel-headers
- Compila con più thread se possibile: make -jN
- Verifica presenza del pacchetto RPM generato in /usr/src/rpm/RPMS/
- Crea initrd con mkinitrd prima del riavvio
- Aggiorna /etc/lilo.conf e esegui lilo
- Se il sistema non si avvia, avvia il kernel precedente dal menu LILO e rimuovi la stanza difettosa
Quando questo processo può fallire (situazioni comuni)
- Spazio insufficiente in /boot o /usr/src: la build o mkinitrd possono fallire.
- Moduli richiesti mancanti: alcuni driver essenziali non vengono compilati.
- Errore nella configurazione di /etc/lilo.conf: LILO non trova il kernel o il ramdisk.
- Differenze di architettura: installare un RPM i386 su sistema x86_64 causerà errori.
Approcci alternativi
- Usare GRUB invece di LILO: GRUB è più flessibile e spesso più semplice da gestire su macchine moderne.
- Usare strumenti di packaging alternativi (per es. creare pacchetti .deb su distribuzioni Debian-based).
- Testare il kernel in una macchina virtuale prima di usarlo in produzione.
Mini runbook di rollback (passi rapidi se il nuovo kernel non avvia)
- Riavvia la macchina e al menu LILO seleziona il kernel precedente.
- Avvia il sistema e accedi come root.
- Rimuovi o commenta la stanza del kernel non funzionante in /etc/lilo.conf.
- Esegui lilo.
- Verifica che /boot non contenga file iniziali errati e libera spazio se necessario.
Cheat sheet comandi principali
- Compilare: make rpm
- Elencare SRPMS: ls -l /usr/src/rpm/SRPMS/
- Elencare RPM binari: ls -l /usr/src/rpm/RPMS/
/ - Installare RPM: rpm -ivh
- Creare initrd: mkinitrd /boot/initrd-
.img - Applicare LILO: lilo
- Controllare kernel attivo: uname -r
Glossario in una riga
- RPM: formato di pacchetto per la distribuzione; mkinitrd: genera un ramdisk iniziale; LILO: boot loader legacy per Linux.
Importante: non modificare il file /etc/lilo.conf senza creare un backup (cp /etc/lilo.conf /etc/lilo.conf.bak). Verifica sempre i nomi dei file in /boot prima di eseguire lilo.
Fine: se hai bisogno di una checklist personalizzata per il tuo ambiente (VM, server in produzione, architettura specifica), posso generarla su misura.