GNU/Linux

Linux Kernel 7.0.11: struttura, compilazione e installazione

Guida tecnica al funzionamento del kernel Linux

Linux Kernel 7.0.11 è una release stabile del ramo 7.0.x pubblicata tramite kernel.org. Come ogni versione stable, non va interpretata come una release orientata principalmente all’introduzione di nuove funzionalità, ma come un aggiornamento mirato a consolidare il ramo corrente attraverso correzioni, backport selezionati, miglioramenti di stabilità e interventi su sottosistemi specifici.

Le fonti ufficiali di riferimento sono il sito kernel.org e il changelog ufficiale pubblicato su cdn.kernel.org:

https://kernel.org
https://cdn.kernel.org/pub/linux/kernel/v7.x/ChangeLog-7.0.11

Principali ambiti di utilizzo

Linux Kernel 7.0.11 può essere utilizzato in diversi contesti. Su workstation e notebook può servire per migliorare il supporto a hardware recente, GPU, controller Wi-Fi, NVMe, USB4 o piattaforme laptop di nuova generazione. In ambito server può essere interessante per testare fix relativi a networking, storage, filesystem, virtualizzazione, container e sicurezza.

In ambienti di sviluppo, un kernel upstream consente di verificare se un bug presente nel kernel della distribuzione è già stato corretto nella serie stable. In ambienti embedded o appliance, invece, la compilazione personalizzata permette di ridurre il numero di moduli, limitare la superficie d’attacco, ridurre tempi di boot e includere solo i driver necessari.

È importante distinguere l’utilizzo di un kernel upstream da quello di un kernel fornito dalla distribuzione. Ubuntu, Fedora e openSUSE applicano patch, configurazioni, firme, integrazioni Secure Boot, policy di packaging e test specifici. Installare un kernel vanilla da kernel.org è utile per test, debug e ambienti controllati, ma non sempre è la scelta migliore per sistemi di produzione.

Novità e correzioni rilevanti in Linux 7.0.11

Il changelog di Linux 7.0.11 mostra una release di manutenzione ampia, con interventi distribuiti su sicurezza, storage, networking, driver e architetture. Tra i punti più interessanti emergono correzioni nella gestione RCU del sottosistema keyring, fix per use-after-free nel block layer, interventi su ksmbd, correzioni nello stack di rete GRO con pacchetti zerocopy e aggiustamenti su driver e piattaforme specifiche.

Alcune correzioni sono particolarmente rilevanti perché riguardano condizioni di race, lifetime errato di oggetti kernel, gestione della memoria e percorsi di errore. Questi aspetti sono fondamentali nel kernel: un errore di sincronizzazione o un riferimento a memoria già liberata può tradursi in crash, blocchi del sistema, perdita di dati o potenziali implicazioni di sicurezza.

Per chi compila il kernel manualmente, il changelog va sempre letto prima dell’aggiornamento, soprattutto su macchine che usano driver particolari, filesystem avanzati, SMB server kernel-space, storage zoned, io_uring, dispositivi di rete ad alte prestazioni o piattaforme non x86.

Prerequisiti generali per la compilazione

Prima di compilare Linux 7.0.11 è necessario installare toolchain, librerie di sviluppo, utility per la configurazione, strumenti per la generazione dei pacchetti e dipendenze opzionali. È inoltre consigliabile avere spazio libero sufficiente: una build completa può richiedere diversi gigabyte, soprattutto se si generano pacchetti, debug symbols o molte varianti di moduli.

Requisiti consigliati:
- CPU multi-core
- almeno 8 GB di RAM, meglio 16 GB o più
- 20-30 GB liberi per build e pacchetti
- GCC o Clang compatibile
- make, bc, flex, bison, perl, pahole
- librerie ncurses per menuconfig
- openssl e libelf per moduli, firme e BPF
- configurazione di partenza presa dal kernel attualmente in uso

Il sorgente ufficiale può essere scaricato da kernel.org:

wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.0.11.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.0.11.tar.sign
tar -xf linux-7.0.11.tar.xz
cd linux-7.0.11

Configurazione del kernel

La configurazione è il passaggio più delicato. Il file .config stabilisce quali funzionalità verranno compilate nel kernel, quali saranno moduli e quali saranno escluse. Una scelta errata può produrre un kernel non avviabile, privo del supporto al filesystem root, senza driver storage o incompatibile con Secure Boot.

Una pratica comune consiste nel partire dalla configurazione del kernel attualmente in uso:

cp /boot/config-$(uname -r) .config
make olddefconfig

Il target olddefconfig mantiene le opzioni già presenti e assegna valori predefiniti alle nuove opzioni introdotte dalla versione del kernel. Per una configurazione interattiva si può usare menuconfig:

make menuconfig

Per generare una configurazione più aderente ai moduli effettivamente caricati sul sistema corrente, si può usare localmodconfig. Questo approccio riduce il numero di driver compilati, ma va usato con attenzione: se una periferica non è collegata o un modulo non è caricato al momento della generazione, il relativo supporto potrebbe essere escluso.

make localmodconfig

Parametri da monitorare in fase di compilazione

Durante la compilazione non bisogna limitarsi a verificare che il comando make termini senza errori. È opportuno monitorare risorse, warning, dimensione dei binari, moduli generati, compatibilità della configurazione e impatto sul sistema.

I parametri principali da controllare sono:

CPU:
- utilizzo percentuale durante la build
- temperatura dei core
- eventuale throttling termico
- carico medio del sistema

Memoria:
- RAM disponibile
- uso della swap
- eventuali OOM killer
- consumo nei passaggi di linking

Disco:
- spazio libero nella directory di build
- I/O wait
- velocità di scrittura durante generazione moduli e pacchetti
- spazio in /boot dopo l'installazione

Build:
- numero di job paralleli usati con make -j
- warning del compilatore
- errori trattati come fatali
- moduli non compilati
- dimensione di vmlinux, bzImage e initramfs

Configurazione:
- supporto al filesystem root
- driver storage necessari al boot
- supporto initramfs
- supporto EFI, ACPI e microcode
- opzioni di sicurezza
- compatibilità Secure Boot
- moduli DKMS esterni, ad esempio NVIDIA, VirtualBox, ZFS o driver vendor

Per monitorare il sistema durante la build si possono usare strumenti standard:

htop
watch -n 2 free -h
watch -n 2 df -h
iostat -xz 2
sensors
dmesg -w

Un comando di compilazione tipico utilizza tutti i core disponibili:

make -j$(nproc)

Su sistemi con poca RAM è preferibile ridurre il parallelismo:

make -j4

Per aumentare la verbosità della build o individuare warning aggiuntivi:

make V=1 -j$(nproc)
make W=1 -j$(nproc)

Opzioni di configurazione da valutare con attenzione

Alcune aree del file .config meritano particolare attenzione. Le opzioni relative a CPU, scheduler, filesystem, storage, networking e sicurezza possono modificare sensibilmente comportamento, prestazioni e compatibilità del sistema.

CONFIG_MODULES=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_EFI=y
CONFIG_EFI_STUB=y
CONFIG_EXT4_FS=y
CONFIG_BTRFS_FS=m
CONFIG_XFS_FS=m
CONFIG_OVERLAY_FS=m
CONFIG_NAMESPACES=y
CONFIG_CGROUPS=y
CONFIG_SECCOMP=y
CONFIG_SECURITY=y
CONFIG_BPF=y
CONFIG_DEBUG_INFO_NONE=y

Per workstation e server moderni è opportuno mantenere il supporto a cgroup, namespace, overlayfs, BPF e seccomp, poiché container, orchestratori, sandbox e strumenti di osservabilità dipendono spesso da queste funzionalità.

Compilazione generica da sorgente

La procedura generica, valida come base per tutte le distribuzioni, consiste nello scaricare il sorgente, importare la configurazione corrente, aggiornare le opzioni e compilare kernel e moduli.

wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.0.11.tar.xz
tar -xf linux-7.0.11.tar.xz
cd linux-7.0.11

cp /boot/config-$(uname -r) .config
make olddefconfig

make -j$(nproc)
sudo make modules_install
sudo make install

Dopo l’installazione è necessario rigenerare la configurazione del bootloader, se la distribuzione non lo fa automaticamente:

sudo update-grub

Oppure, su sistemi che usano grub2-mkconfig:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Al riavvio, la versione attiva può essere verificata con:

uname -r

Installazione su Ubuntu

Su Ubuntu è preferibile generare pacchetti .deb invece di usare direttamente make install. In questo modo il kernel risulta gestibile tramite dpkg e può essere rimosso più facilmente.

Installazione delle dipendenze:

sudo apt update
sudo apt install -y build-essential bc bison flex libssl-dev libelf-dev \
  libncurses-dev dwarves pahole wget xz-utils fakeroot rsync

Download e preparazione:

wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.0.11.tar.xz
tar -xf linux-7.0.11.tar.xz
cd linux-7.0.11

cp /boot/config-$(uname -r) .config
make olddefconfig

Creazione dei pacchetti Debian:

make -j$(nproc) bindeb-pkg LOCALVERSION=-mst

I pacchetti verranno creati nella directory superiore:

cd ..
ls -lh *.deb

Installazione:

sudo dpkg -i linux-image-*.deb linux-headers-*.deb

Aggiornamento di GRUB e riavvio:

sudo update-grub
sudo reboot

Verifica:

uname -r

In caso di problemi, dal menu di GRUB è possibile scegliere un kernel precedente. È consigliabile non rimuovere il kernel funzionante della distribuzione finché Linux 7.0.11 non è stato testato con storage, rete, grafica, sospensione, container e moduli DKMS.

Installazione su openSUSE

Su openSUSE è possibile compilare un kernel vanilla e generare pacchetti RPM. Anche in questo caso è preferibile produrre pacchetti gestibili dal package manager invece di installare manualmente file sparsi nel sistema.

Installazione delle dipendenze:

sudo zypper refresh
sudo zypper install -y gcc make bc bison flex libopenssl-devel libelf-devel \
  ncurses-devel dwarves rpm-build wget xz

Download e configurazione:

wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.0.11.tar.xz
tar -xf linux-7.0.11.tar.xz
cd linux-7.0.11

cp /boot/config-$(uname -r) .config
make olddefconfig

Creazione di pacchetti RPM generici:

make -j$(nproc) binrpm-pkg LOCALVERSION=-mst

I pacchetti generati si trovano normalmente sotto ~/rpmbuild/RPMS/:

find ~/rpmbuild/RPMS -name "*.rpm" -type f

Installazione con zypper:

sudo zypper install ~/rpmbuild/RPMS/x86_64/kernel-*.rpm

Aggiornamento del bootloader:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

Verifica:

uname -r

Su openSUSE con Secure Boot attivo, un kernel compilato manualmente potrebbe non essere avviabile senza firma corretta. In ambienti di test si può disabilitare temporaneamente Secure Boot dal firmware, mentre in ambienti controllati è preferibile firmare kernel e moduli secondo la policy aziendale.

Installazione su Fedora

Fedora aggiorna frequentemente il kernel e dispone di un’integrazione molto curata con RPM, dracut, grubby, Secure Boot e moduli. Per testare Linux 7.0.11 upstream si può comunque compilare il sorgente vanilla e generare pacchetti RPM.

Installazione delle dipendenze:

sudo dnf install -y gcc make bc bison flex openssl-devel elfutils-libelf-devel \
  ncurses-devel dwarves rpm-build wget xz perl

Download e configurazione:

wget https://cdn.kernel.org/pub/linux/kernel/v7.x/linux-7.0.11.tar.xz
tar -xf linux-7.0.11.tar.xz
cd linux-7.0.11

cp /boot/config-$(uname -r) .config
make olddefconfig

Compilazione in pacchetti RPM:

make -j$(nproc) binrpm-pkg LOCALVERSION=-mst

Installazione:

sudo dnf install ~/rpmbuild/RPMS/x86_64/kernel-*.rpm

Rigenerazione initramfs, se necessario:

sudo dracut --force

Verifica delle voci di boot:

sudo grubby --info=ALL | less

Riavvio e controllo della versione:

sudo reboot
uname -r

Su Fedora, Secure Boot e moduli esterni meritano attenzione. Driver proprietari o moduli DKMS potrebbero dover essere ricompilati per la nuova versione. Se il sistema usa NVIDIA, VirtualBox, VMware, ZFS o altri moduli fuori albero, è necessario verificare la compatibilità prima di usare il nuovo kernel come predefinito.

Gestione di initramfs e bootloader

L’initramfs contiene driver e strumenti necessari nelle prime fasi del boot. Se il driver del controller storage, del filesystem root o della cifratura disco non è integrato direttamente nel kernel, deve essere disponibile nell’initramfs. Un errore in questa fase può impedire il montaggio del filesystem root.

Su Ubuntu l’initramfs viene normalmente gestito da update-initramfs:

sudo update-initramfs -c -k 7.0.11-mst
sudo update-grub

Su Fedora e openSUSE è comune l’uso di dracut:

sudo dracut --force --kver 7.0.11-mst

Prima di riavviare è utile controllare che i file siano presenti in /boot:

ls -lh /boot | grep 7.0.11

Verifiche post-installazione

Dopo il primo avvio con Linux 7.0.11, è consigliabile eseguire una serie di controlli. L’obiettivo è verificare che il kernel sia effettivamente attivo, che i moduli siano caricati correttamente e che non emergano errori critici nei log.

uname -a
lsmod | head
dmesg -T | less
journalctl -k -b
systemctl --failed
df -h
ip a
lsblk
findmnt /

Per un sistema desktop vanno testati grafica, audio, Wi-Fi, Bluetooth, sospensione, ripresa dalla sospensione e periferiche USB. Per un server vanno verificati storage, rete, firewall, container, virtualizzazione, monitoraggio, backup e servizi critici.

Problemi comuni

Un kernel compilato manualmente può non avviarsi per assenza di driver storage, initramfs incompleto, configurazione EFI errata, moduli non installati, Secure Boot non compatibile o problemi con driver esterni. Per questo motivo è fondamentale mantenere installato almeno un kernel precedente funzionante.

Problema: kernel non compare in GRUB
Controllare:
- presenza di vmlinuz in /boot
- presenza di initramfs
- aggiornamento grub
- configurazione Boot Loader Specification su Fedora

Problema: kernel panic al boot
Controllare:
- driver del controller storage
- supporto filesystem root
- initramfs
- UUID del filesystem root
- command line del kernel

Problema: rete non funzionante
Controllare:
- modulo della scheda di rete
- firmware installato
- dmesg
- NetworkManager o systemd-networkd

Problema: driver NVIDIA o moduli DKMS non caricati
Controllare:
- headers installati
- compatibilità del driver
- ricompilazione DKMS
- firma dei moduli con Secure Boot

Rimozione del kernel compilato

Se il kernel è stato installato tramite pacchetti, la rimozione è più semplice e pulita.

Su Ubuntu:

dpkg -l | grep linux | grep 7.0.11
sudo apt remove 'linux-image-*7.0.11*' 'linux-headers-*7.0.11*'
sudo update-grub

Su Fedora:

rpm -qa | grep kernel | grep 7.0.11
sudo dnf remove 'kernel*7.0.11*'

Su openSUSE:

rpm -qa | grep kernel | grep 7.0.11
sudo zypper remove 'kernel*7.0.11*'
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Quando conviene usare Linux 7.0.11

Linux 7.0.11 è indicato quando si desidera testare l’ultimo ramo stable upstream, verificare bug corretti rispetto alla versione della distribuzione, validare hardware recente o preparare ambienti di sviluppo kernel. È anche utile per amministratori e sviluppatori che vogliono confrontare il comportamento di un sistema con il kernel vanilla rispetto al kernel patchato dal vendor.

Non è invece sempre consigliabile sostituire il kernel della distribuzione in produzione senza una fase di test. I kernel distribuiti da Ubuntu, Fedora e openSUSE includono integrazioni, patch e processi QA specifici. Un kernel upstream può risolvere un problema, ma può anche introdurre differenze operative rispetto al kernel ufficiale della distribuzione.

Admin | MST-Tutorial

Appassionato di elettronica, elettrotecnica e programmazione. Fondatore di MST-Tutorial, condivido con entusiasmo conoscenze, esperienze e progetti legati all’innovazione tecnologica, con l’obiettivo di rendere accessibili concetti tecnici complessi attraverso tutorial chiari e pratici.

Articoli Correlati

Pulsante per tornare all'inizio