mkinitrd, con note per LILO e GRUB.
1. Prima di iniziare
- Lavora come
rootoppure usasudodove richiesto. - Mantieni almeno un kernel funzionante nel bootloader (non sostituire l'unico).
- Assicurati di avere spazio libero (alcuni GB in
/usr/srce/boot). - Annota il kernel attuale:
uname -r
uname -m
2. Pacchetti necessari
Installa gli strumenti di compilazione e le librerie base. I nomi pacchetto possono cambiare.
Pacchetti tipici
gcc,make,binutilsbc,bison,flexopenssl-devel/libssl-develfutils,pahole(per BTF)perl,python(alcuni target/scripts)ncurses-devel/libncurses-dev(permenuconfig)
Strumenti utili
wgetocurlper scaricare sorgentixz/tarper estrarre archivigitse compili da repository kernel.orgmkinitrd(Slackware) per creare l'initrd del kernel generic
3. Ottenere i sorgenti del kernel
Puoi usare i sorgenti della tua distro oppure scaricare il tarball ufficiale. Esempio con tarball:
cd /usr/src
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.x.y.tar.xz
tar -xf linux-6.x.y.tar.xz
ln -sfn linux-6.x.y linux
cd linux
Sostituisci 6.x.y con la versione che vuoi compilare.
4. Backup della configurazione attuale
Il modo piu' sicuro e partire dalla configurazione del kernel in uso.
zcat /proc/config.gz > .config
Se /proc/config.gz non esiste, prova con il file della distro:
cp /boot/config-$(uname -r) .config
cp .config .config.backup-$(date +%F)
5. Configurare il kernel
- Aggiorna la vecchia configurazione ai nuovi sorgenti:
make oldconfig
Se preferisci i default automatici per le nuove opzioni:
make olddefconfig
- Apri il configuratore testuale:
make menuconfig
Controlla soprattutto:
- Driver del disco / controller SATA-NVMe
- Filesystem del root (ext4, xfs, btrfs, ecc.)
- Supporto EFI/UEFI se usato
- Rete (scheda LAN/Wi-Fi)
- CPU microarchitecture (senza esagerare se vuoi compatibilita')
6. Compilazione del kernel e dei moduli
Pulisci (solo se parti da albero gia' usato) e compila:
make -j"$(nproc)"
Compila e installa i moduli in /lib/modules/<versione>:
make modules_install
7. Installazione del kernel
Installa kernel, System.map e config in /boot:
make install
Su alcune distro make install aggiorna anche automaticamente il bootloader; su altre no.
Verifica cosa e' stato creato:
ls -lh /boot
ls -lh /lib/modules | tail
8. Creazione initramfs (se necessario)
Su Slackware, se usi un kernel generic (consigliato), devi creare l'initrd per il nuovo kernel.
Slackware (mkinitrd)
mkinitrd -c -k <nuova-versione-kernel> -f ext4 -r /dev/sdXY -m ahci:ext4
Adatta filesystem, root device e moduli ai tuoi valori reali.
Per un comando piu' preciso e' consigliato usare anche:
/usr/share/mkinitrd/mkinitrd_command_generator.sh -r
9. Aggiornare il bootloader
Non rimuovere la voce del kernel precedente. Aggiungi o rigenera mantenendo almeno una entry di fallback.
GRUB
grub-mkconfig -o /boot/grub/grub.cfg
LILO (ancora comune su Slackware)
Modifica /etc/lilo.conf aggiungendo una nuova immagine e poi:
lilo -v
lilo dopo le modifiche, il sistema puo' continuare a puntare al vecchio kernel o non avviare la nuova entry.
10. Riavvio e verifica
- Riavvia il sistema.
- Seleziona il nuovo kernel dal bootloader.
- Dopo il login verifica:
uname -r
dmesg | less
lsmod | head
Controlla rete, audio, filesystem, driver video e servizi principali.
11. Procedura di rollback (se qualcosa non va)
- Riavvia.
- Seleziona il kernel precedente dal bootloader.
- Correggi la configurazione e ricompila, oppure rimuovi la nuova entry dal bootloader.
/boot.
12. Nota pratica per Slackware
Su Slackware spesso conviene:
- Partire dal config del kernel huge/generic installato.
- Usare kernel generic +
initrdper l'uso quotidiano. - Aggiornare con attenzione
/etc/lilo.conf(o GRUB se usato). - Tenere una voce "rescue" o il vecchio kernel.
Checklist finale
[ ] Sorgenti scaricati/estratti
[ ] .config copiato dal kernel attuale
[ ] make oldconfig / menuconfig completati
[ ] make && make modules_install && make install
[ ] initramfs creato (se richiesto)
[ ] bootloader aggiornato
[ ] vecchio kernel mantenuto come fallback
[ ] riavvio e test completati