La recompilation du noyau GNU/Linux se révèle parfois nécessaire :
Pour ajouter un nouveau pilote
Pour avoir une version plus récente
Pour profiter d’un correctif qui améliore telle ou telle fonctionnalité
Cependant cette manipulation a la réputation d’être risquée pour votre système. Du coup, peu osent essayer de recompiler leur noyau.
Pourtant en suivant correctement la procédure décrite dans les HOWTO, la compilation du noyau n’est pas d’une grande difficulté. Cet article présente pas à pas la recompilation du noyau et montre que cette procédure n’est pas si compliquée, ni même risquée sous un système de qualité comme la Debian.
$uname -r
Sur le système testé, la réponse est
2.2.20-idepci
(qui est le noyau installé par défaut sur la Debian Woody 3.0r0). Il faut alors récupérer les sources du noyau 2.2.20 avec :
#apt-get install kernel-source-2.2.20
Une fois les sources récupérées, il faut installer tous les outils nécessaires à la compilation :
#apt-get install build-essential kernel-package fakeroot
Maintenant la compilation peut commencer. Néanmoins il reste une chose à faire avant. Il est recommandé de ne pas compiler le noyau en root mais avec un utilisateur quelconque. Pour qu’il ait tous les droits nécessaires à la compilation, il faut l’ajouter dans le groupe src avec la commande :
#adduser mon_utilisateur src
Puis il faut quitter le shell root et revenir dans le shell de l’utilisateur que l’on vient d’ajouter dans le groupe src.
/usr/src pour rester cohérent avec le fait que c’est un utilisateur précis qui compile le noyau. Il faut d’abord créer un répertoire qui va contenir toutes les sources et se placer dedans :
$mkdir ~/src
$cd ~/srcPuis extraire les sources du noyau :
$tar xvfz kernel-source-2.2.20.tar.gz --directory ~/src
Ensuite on se replace dans le répertoire des sources et l’on crée le lien linux pointant sur le répertoire des sources que l’on vient d’extraire. Cela permet de faire cohabiter plusieurs versions de sources du noyau tout en travaillant toujours dans le même répertoire :
$cd ~/src
$ln -s kernel-source-2.2.20 linux$cd ~/src/linux
$make xconfigCet article ne traite pas de la configuration du noyau, car elle est différente selon les versions des noyaux. Cela pourra faire le sujet de futures articles. Lors de cette étape il faut parcourir toutes les rubriques du noyau et activer les fonctionnalités nécessaire à votre système soit en dur dans le noyau soit sous la forme de modules.
Lorsque la configuration est terminée, il faut enregistrer la configuration du noyau [5] avant de quitter l’interface.
$cd ~/src/linux
$fakeroot make-kpkg clean [7]
$fakeroot make-kpkg --append-to-version=-20040314 kernel_image [8] [9] [10] [11]
Il est temps d’aller prendre un petit café pendant la compilation. Une fois la compilation terminée et réussie, un nouveau fichier a été généré dans le répertoire ~/src avec un nom de fichier de la forme :
kernel-image-[kernel-version][--append-to-version]_[--revision]_[architecture].deb
Dans le cadre de cet article le paquet a pour nom de fichier : kernel-image-2.2.20-20040314_10.00.Custom_i386.deb
kernel panic !!
Néanmoins, l’objectif de cet article est la compilation et l’installation du noyau en toute sécurité. C’est pourquoi le nouveau noyau va être installé sans écraser l’ancien. De plus le système pourra redémarrer sur l’un des deux noyaux au choix !!
L’installation du noyau se fait avec la commande :
$cd ~/src
#dpkg -i kernel-image-2.2.20-20040314_10.00.Custom_i386.debLors de l’installation, le système va vous poser trois questions. Il faut répondre impérativement "No" à toutes les questions !! Ceci afin d’empêcher l’ajout automatique du nouveau noyau dans LILO qui écrasera l’ancien. Les questions sont les suivantes :
Would you like to create a boot floppy now ?
Install a boot block using the existing /etc/lilo.conf ?
Wipe out your old LILO configuration and make a new one ?
Si dpkg ne retourne pas d’insulte, le nouveau noyau a été correctement installé. Pour le vérifier, un répertoire a été créé dans le répertoire /lib/modules. Il doit porter comme nom le numéro de version du noyau plus l’extension de version qui a été passée en paramètre à la compilation. Dans le cas de l’article, le répertoire se nomme : /lib/modules/2.2.20-20040314.
/etc/lilo.conf les lignes suivantes :
image=/boot/vmlinux-2.2.20-20040314
label=2.2.20-20040314
Le champ image prend comme valeur le chemin exact où ce trouve le noyau à utiliser. Le champ label [12] correspond au libellé affiché et utilisé par LILO dans le menu de sélection d’amorçage au démarrage de la machine.
Et pour que LILO prenne en compte ces modifications il faut exécuter la commande :
#lilo -v
Attention, il faut bien vérifier que LILO ne retourne aucun message d’erreur. Car dans le cas contraire, il serait peut-être impossible de redémarrer le système.
dpkg, et dans le cas de l’article il faut saisir la commande :
#dpkg remove --purge --force-remove-essential kernel-image-2.2.20-20040314
Je n’ai plus qu’une seule chose à vous dire : à vos GCC !!
[1] Pour connaître la liste des sources des noyaux disponibles sur votre système, il faut faire :
#apt-cache search kernel-source
[2] Il existe d’autres interfaces pour configurer le noyau, notamment :
$make config : en mode ligne de commande
$make menuconfig : en mode console (nécessite peut-être un #apt-get install libncurses-dev ncurses-dev).
$make xconfig : en mode graphique X11 avec la bibliothèque TK (nécessite peut-être un #apt-get install tk8.3).
$make gconfig : en mode graphique X11 avec la bibliothèque GTK+
...
[3] Si vous avez une erreur du type impossible de trouver tk, il faut installer TK avec #apt-get install tk8.3. J’ai rencontré ce problème sur le système de test pour cet article, après un #apt-cache search tk, on peut savoir quels sont les paquets manquants.
[4] Si vous voulez réutilisez une configuration précédemment enregistrée, il faut copier votre ancien fichier de configuration à la place de ~/src/linux/.config avant de faire le $make xconfig.
[5] Le fichier de configuration se nomme .config. L’étape de configuration se révèle très longue, alors n’hésitez pas à le copier dans un autre répertoire pour le réutiliser plus tard au cas où vous en auriez à nouveau besoin. Ceci afin de ne pas recommencer toute l’étape de configuration.
Et dans ce cas la commande à utiliser est make oldconfig, les options déjà cochées dans le .config sont conservées et les questions posées ne portent que sur les nouvelles options. Ainsi l’on met à jour le noyau en conservant une configuration fonctionnelle.
[6] Il ne faut pas oublier d’enregistrer la configuration.
[7] Cette commande permet de nettoyer l’arborescence des sources. Elle est obligatoire avant chaque compilation du noyau !!
[8] Lors du test il manquait le programme as86. Après avoir fait un #apt-cache search as86, je me suis rendu compte qu’il manquait le paquet bin86. Donc s’il vous manque aussi ce programme il faut faire un #apt-get install bin86.
[9] La compilation se fait via le programme fakeroot qui simule un environnement root
[10] Le paramètre --append-to-version permet d’ajouter un suffixe au numéro de version du noyau qui va être compilé. Cette option est utilise lorsque l’on veut faire cohabiter plusieurs compilations différentes d’une même version du noyau GNU/Linux sans les écraser. ce numéro de version accepte les chiffres [0-9], les lettres [a-z], le "+", le "-" et le ".". Optez pour le suffixe le plus approprié autant que possible.
[11] Le paramètre —revision peut être ajouté également. Ce paramètre permet à dpkg de connaitre quel est le paquet le plus récent. Notez que l’utilisation de ce paramètre risque de poser des problèmes lors de retour arrière. Il accepte les mêmes caractères que le paramètre précédent.
[12] Attention ce libellé a une taille maximum.
| Date | Nom | Message |
Correction :-)
[5] Le fichier de configuration se nomme .config. L’étape de configuration se révèle très longue, alors n’hésitez pas à le copier dans un autre répertoire pour le réutiliser plutard au cas où vous en auriez à noveau besoin. Ceci afin de ne pas recommencer toute l’étape de configuration.
devient
[5] Le fichier de configuration se nomme .config. L’étape de configuration se révèle très longue, alors n’hésitez pas à le copier dans un autre répertoire pour le réutiliser plus tard au cas où vous en auriez à nouveau besoin. Ceci afin de ne pas recommencer toute l’étape de configuration.
Et dans ce cas la commande à utiliser est "make oldconfig", les options déjà cochées dans le .config sont conservées et les questions posées ne porte que sur les nouvelles options. Ainsi l’on met a jour le noyau en conservant une configuration fonctionnelle.