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.x

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.0.2.tar.xz

Une fois l’archive téléchargée, il faut la décompresser puis entrer dans le dossier où sont extraits les fichiers :

$ tar xf linux-6.0.2.tar.gz && cd linux-6.0.2

Préparation de la compilation

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".

⚠️
Attention lors de l'utilisation de ce menu. Un faux-pas et vous pouvez rendre votre noyau inutilisable et donc votre machine aussi !

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 bon 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 comme quoi le fichier "debian/certs/debian-uefi-certs.pem" 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.
Partager l'article