Compiler un noyau Linux personnalisé : guide sysadmin pas à pas

Linux kernel compilation process in a terminal terminal

Dans la majorité des cas, les distributions modernes comme Debian ou Ubuntu fournissent des noyaux génériques polyvalents et parfaitement stables. Toutefois, l’administrateur système peut avoir besoin de compiler un noyau Linux sur mesure afin d’activer une fonctionnalité expérimentale, d’alléger le système pour un serveur embarqué ou d’intégrer un pilote matériel non distribué par défaut.

1. Installer les dépendances indispensables

La compilation du code source Linux réclame une chaîne de développement complète ainsi que plusieurs bibliothèques pour gérer l’interface de paramétrage. Sous Debian et ses dérivés, mettez à jour votre gestionnaire de paquets et installez les outils de compilation :

apt update && apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev bc dwarves

Ces paquets fournissent le compilateur GCC, les utilitaires d’analyse lexicale, les en-têtes OpenSSL indispensables pour la signature des modules et l’interface ncurses utilisée par l’outil de configuration.

2. Récupérer et décompresser les sources

Vous pouvez vous procurer les sources officielles directement depuis kernel.org ou via les paquets sources de votre distribution. Pour travailler proprement, rendez-vous dans le répertoire système dédié :

cd /usr/src
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.15.tar.xz
tar -xvf linux-6.6.15.tar.xz
cd linux-6.6.15

Certains administrateurs aiment créer un Lien symbolique linux pointant vers le dossier actif (ln -s linux-6.6.15 linux) afin de faciliter les scripts de maintenance ou les compilations régulières de modules tiers.

3. Configurer le noyau avec menuconfig

Partir de zéro pour configurer plusieurs milliers de paramètres peut s’avérer fastidieux. La bonne pratique consiste à réutiliser la configuration du noyau actuel en production pour s’assurer que le matériel de base continue de fonctionner sans accroc :

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

Nettoyez ensuite l’arbre de travail si nécessaire avec make mrproper, puis adaptez l’ancienne configuration aux nouveautés du code source :

make olddefconfig
make menuconfig

Cette commande ouvre une interface semi-graphique en mode console. Vous pouvez y activer ou désactiver les sous-systèmes, choisir de charger des fonctionnalités en dur (marquage avec une astérisque) ou sous forme de modules chargeables dynamiquement (marquage M). Vous pouvez également définir une version personnalisée (champ CONFIG_LOCALVERSION) pour identifier clairement votre binaire.

4. Lancer la compilation

La compilation sollicite énormément le processeur. Pour accélérer grandement le processus, exploitez l’ensemble des cœurs de votre machine grâce à la variable automatique des processeurs disponibles :

make -j$(nproc)

Cette étape génère l’image binaire compressée du noyau (souvent bzImage) ainsi que la table des symboles. Une fois le traitement terminé sans erreur, installez les modules nouvellement compilés dans l’arborescence système :

make modules_install

Cette commande copie les pilotes modulaires dans le dossier /lib/modules/[version_personnalisee].

5. Installer l’image et configurer GRUB

Déployez le noyau exécutable dans le répertoire d’amorçage :

make install

Cette commande automatise la copie du binaire dans /boot, génère l’archive de démarrage temporaire avec update-initramfs et met à jour les entrées de GRUB 2. Si le chargeur de démarrage n’a pas pris en compte le nouveau système automatiquement, forcez sa détection :

update-grub

6. Redémarrage et vérifications post-installation

Avant de redémarrer le serveur, assurez-vous de conserver l’ancien noyau accessible dans le menu GRUB pour pallier tout risque de kernel panic. Redémarrez la machine puis vérifiez la version active avec uname -r.

En cas de dysfonctionnement matériel ou d’incident lors de la phase d’extinction, un diagnostic rapide s’impose. Consultez le journal des événements système en vous appuyant sur un Debug avec dmseg pour repérer d’éventuels conflits de pilotes, ou analysez les blocages récalcitrants en consultant notre mémo sur les cas de Problem shutdown linux.

À lire aussi