Compiler son noyau

Quand on est impatient et qu’on veut un noyau plus récent sans attendre sa mise à disposition par Debian.

On peut le compiler assez facilement.

Environnement

PC sous Linux Debian 10 (Buster)

Installer les outils

Avec l’utilisateur administrateur root

Je mets la totale de ce qui a été nécessaire au fur et à mesure des versions de noyaux.

kernel-package (utilitaire de fabrication de noyau pour Debian) permets de s’assurer aussi que rien ne manquera.

apt install build-essential fakeroot libncurses5-dev dpkg-dev libssl-dev bc bison libelf-dev kernel-package

Les opérations suivantes se font en utilisateur ordinaire (pas besoin de droits d’administrateur).

Télécharger le noyau officiel

Télécharger le noyau qui vous convient depuis Kernel Org par exemple dans le dossier Téléchargements/linux

Décompresser l’archive

Exemple
tar xvf linux-4.9.95.tar.xz

Se positionner dans le dossier correspondant au noyau

Exemple
cd Téléchargements/linux/kernel/linux-4.9.95

Récupérer un fichier config depuis le dossier /boot

Mieux vaut ne pas mélanger les versions de noyaux, utiliser un .config récent.
cp /boot/config-4.9.0-6-amd64 .config

Mettre à jour le fichier config

make olddefconfig

Retirer les références aux clés

Cette étape ne me paraît pas indispensable.

Si on saute cette étape et que toutefois une erreur interrompt le process, c’est pas très grave car ça arrive au début et on peut recommencer rapidement en faisant cette étape.

./scripts/config -d CONFIG_MODULE_SIG_ALL -d CONFIG_MODULE_SIG_KEY -d CONFIG_SYSTEM_TRUSTED_KEYS

Retirer l’option pour ne pas avoir à compiler un noyau de debug

 ./scripts/config -d CONFIG_DEBUG_INFO

Compiler

N.B: Sur mon PC avec un petit CPU dual-core, cette opération prends environ 4 heures et fait bien chauffer l’ordinateur. Pensez à la ventilation.

Lors de la compilation, si vous avez supprimer les clés, accepter les options par défaut concernant les clés.

La commande fakeroot permets de surpasser les droits mais on peut s’en passer dans la ligne de commande.

La commande make deb-pkg permets de générer des paquets Debian.

Mon PC n’est pas très puissant , je ne prends que 2 processus (j2).

Je mets un suffixe (kernelperso) et un numéro de compilation (-1) pour repérer le noyau.

Exemple
make deb-pkg -j2 LOCALVERSION=-kernelperso KDEB_PKGVERSION=$(make kernelversion)-1

Installer le noyau compilé

On ne se sert que du header et de l’image. Les autres fichiers générés ne sont pas nécessaires pour un utilisateur ordinaire.

Exemple
dpkg -i linux-headers-4.9.95-kernelperso_4.9.95-1_amd64.deb linux-image-4.9.95-kernelperso_4.9.95-1_amd64.deb

Référence

Debian compilation du noyau

Le fichier local kernel-package: file:///usr/share/doc/kernel-package/Kernel.htm

La documentation kernel.org

Méthode 2 synthétisée

A partir des infos de kernel-package, mises à ma sauce:

1) Récuperer un source du kernel

2) Récupérer un fichier .config depuis
/boot

3) make menuconfig


faire exit tout de suite car on ne veut rien changer.

4)./scripts/config -d CONFIG_DEBUG_INFO

5) make deb-pkg -j2 LOCALVERSION=-kernelperso
KDEB_PKGVERSION=$(make kernelversion)-1

Exemple

Fin de la compilation sans erreur

dpkg-deb: building package 'linux-firmware-image-4.9.107-kernelperso' in '../linux-firmware-image-4.9.107-kernelperso_4.9.107-1_amd64.deb'.
dpkg-deb: building package 'linux-headers-4.9.107-kernelperso' in '../linux-headers-4.9.107-kernelperso_4.9.107-1_amd64.deb'.
dpkg-deb: building package 'linux-libc-dev' in '../linux-libc-dev_4.9.107-1_amd64.deb'.
dpkg-deb: building package 'linux-image-4.9.107-kernelperso' in '../linux-image-4.9.107-kernelperso_4.9.107-1_amd64.deb'.
dpkg-source: info: utilisation du format source « 3.0 (custom) »
dpkg-source: info: construction de linux-4.9.107-kernelperso dans linux-4.9.107-kernelperso_4.9.107-1.dsc
dpkg-genchanges: avertissement: variable de substitution inconnue ${kernel:debarch}
dpkg-genchanges: info: inclusion du code source original dans l'envoi (« upload »)

Paquets générés

cd ~/Téléchargements/linux/kernel

~/Téléchargements/linux/kernel$ ls *.deb
linux-firmware-image-4.9.107-kernelperso_4.9.107-1_amd64.deb
linux-headers-4.9.107-kernelperso_4.9.107-1_amd64.deb
linux-image-4.9.107-kernelperso_4.9.107-1_amd64.deb
linux-libc-dev_4.9.107-1_amd64.deb

Personnaliser

Pour satisfaire son ego, on peut mettre son nom (maintainer :=) et son adresse de courriel  (email :=) dans le fichier /etc/kernel-pkg.conf avant de commencer.

Par Bidouille De Bian

Bidouilleur sur Linux Debian 10 (Buster). Débutant dans le blog sur Wordpress.