Compiler et installer le kernel stable 6.10.x
Cette page vous donne une méthode simple pour compiler un kernel Linux, sous Debian, avec les options minimales et fonctionnelles pour tous les systèmes x86_64.
Un noyau (en anglais "kernel") est la base même d'une distribution Linux. Tout est articulé autour de ce binaire, qui est un ensemble de fonction écrit en C. Les noyaux sont maintenus par une équipe de développeur partout dans le monde et par Linus Torvalds (créateur du premier noyau Linux).
Version | Date | Commentaires |
---|---|---|
1 | 01/2016 | Création du document (kernel 4.x) |
2 | 06/2021 | Reformatage complet du document, mise à jour du kernel en 5.x, prise en charge de l'UEFI |
3 | 09/2022 | Refonte du document (correction syntaxique et orthographique), mise à jour du kernel en 5.19.x |
3.1 | 10/2022 | Mise à jour pour le kernel 6.0.x |
3.2 | 02/2023 | Mise à jour pour le kernel 6.2.x + test OK sous Ubuntu 22 LTS + Debian 11 |
3.3 | 05/2023 | Mise à jour pour le kernel 6.3.x + test OK sous Ubuntu 22 LTS + Debian 11 |
3.4 | 08/2023 | Mise à jour pour le kernel 6.4.x + test OK sous Ubuntu 22 LTS + Debian 11 |
3.5 | 11/2023 | Mise à jour pour le kernel 6.6.x + test OK sous Ubuntu 22 LTS + Debian 12 |
3.6 | 09/2024 | Mise à jour pour le kernel 6.10.x + test OK sous Ubuntu 24 LTS + Debian 12.7 |
Le site https://www.kernel.org/ référence les noyaux stables, gratuitement. J'ai pris exemple de l'article du site "cyberciti.biz". L'objectif de cette documentation est de compiler un noyau depuis les sources officielles. Il n'y a aucune personnalisation, ni ajout de patch et autres modules de sécurité.
Pré-requis
Sauvegardez !
Avant toute chose, sauvegardez vos documents sensibles ! Un noyau défectueux peut rendre votre système inutilisable et totalement inopérant. Dans tous les cas, sauvegardez vos données.
Espace de stockage
Compiler un noyau demande de la place libre sur votre système. Assurez-vous d’avoir au minimum 15 Go d’espace disque libre.
Installation des outils nécessaires
La compilation d’un kernel se fait sur une machine disposant de certains outils de compilation, d’interpréteurs et autres, dont voici la liste :
$ apt install git build-essential libncurses5-dev xz-utils libelf-dev bc bison flex libssl-dev rsync
Préparation du dossier de travail
Restons dans la simplicité pour le moment : connexion en tant que root et j’ai créé un dossier à la racine du système. Vous pouvez modifier cet emplacement comme bon vous semble.
$ mkdir /kernel && cd /kernel
À l’intérieur, j’ai téléchargé les sources du noyau depuis le site officiel avec wget
:
$ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.10.11.tar.xz
Une fois l’archive téléchargée, il faut la décompresser puis entrer dans le dossier dans lequel sont extraits les fichiers :
Préparation de la compilation
$ tar xf linux-6.10.11.tar.xz && cd linux-6.10.11
Les sources sont extraites, cependant une étape préliminaire est nécessaire pour faciliter la configuration du noyau. Copiez l’actuel fichier de configuration de votre noyau en cours d'utilisation pour bénéficier d’une base fonctionnelle.
$ cp /boot/config-$(uname -r) .config
Et ainsi, le (futur) noyau que vous allez compiler sera prêt à recevoir des configurations, patchs et autres routines. Pour ce faire, vous devez lancer la commande :
$ make nconfig
Je ne détaillerai pas cette partie : je ne connais pas du tout le fonctionnement, ni eu le temps de chercher. J’ai donc laissé les paramètres par défaut de mon ancien ".config".
Même si vous n’avez aucune option à modifier, vous devez quand même utiliser le make menuconfig
pour créer le fichier ".config". Sélectionnez alors le bouton "< Save >", validez les modifications et enfin, sélectionnez le bouton "< Exit >".
Lancement de la compilation
Une dernière commande est à effectuer pour remettre de l’ordre dans les fichiers et retrouver une arborescence propre. Cette opération peut durer quelques minutes. Enfin, lancez la compilation du noyau et patientez... (l'opération a pris environ 20 minutes en VM (4 vCPU, 8 Go de RAM, VHD de 50 Go sur un disque NVMe)) :
$ make clean && make
$ make modules_install
Installation du kernel
Toujours dans le dossier /kernel
où vous êtes actuellement, initiez l'installation du kernel en effectuant un $ make install
. Selon la puissance de votre machine, l'installation prendra plusieurs minutes pour s'effectuer en bonne et due forme.
Étape facultative — redémarrer à chaud
Peu après l’installation, vous n’êtes pas obligé de redémarrer votre machine ! En effet, depuis les kernel 4.x, vous pouvez "redémarrer à chaud" votre machine et donc prendre en compte les modifications sans devoir redémarrer le serveur.
Pour ce faire, utilisez le paquet "kexec-utils".
$ apt install kexec-tools && systemctl kexec
Vos sessions SSH vont alors se couper, puisque le serveur va redémarrer les services sans redémarrer physiquement. Source
Cependant, vous n’êtes pas imposé d’utiliser ce paquet. Au mieux, redémarrer simplement votre machine. Au démarrage, lorsque vous arriverez sur votre outil de démarrage (grub2 ou systemd-boot), dirigez-vous dans "Options avancées" (Advanced settings) : vous devriez avoir une liste avec quatre options : deux lignes pour le noyau venant d'être compilé (il a dans son nom le numéro de version) et les deux autres lignes correspondant à l'ancien noyau.
Résolution des problèmes possibles
- Erreur au fichier "debian/certs/debian-uefi-certs.pem" qui n'existe pas
Créer le dossier manquant en faisant$ mkdir -p debian/certs
puis créez le fichier manquant ($ touch debian-uefi-certs.pem
), avec le contenu officiel provenant du GitLab Debian. Vous pourrez de nouveau re-lancer la compilation par la suite. - Compilation sous Ubuntu, il manque les fichiers "canonical-certs.pem" et "canonical-revoke-certs.pem"
Installer le paquet "linux-sources", puis créer un lien symbolique quant aux fichiers manquants le temps de générer le kernel :$ apt install linux-sources && cd /kernel/linux-6.10.11 && mkdir debian && cp -v /usr/src/linux-sources-*/debian/canonical-certs.pem debian/. && cp -v /usr/src/linux-sources-*/debian/canonical-revoked-certs.pem debian/.
.