Webmail Espace privé About
Home   Debian Addict Testing
Compilation du kernel

Compiler un noyau GNU/Linux

Compilation du noyau GNU/Linux sous Debian
vendredi 7 mai 2004.
 

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.

Introduction

Cet article n’est valable que pour la Debian. En effet, il utilise la Debian attitude pour recompiler le noyau en toute sécurité pour votre système.

Pré-requis

Pour recompiler le noyau, il faut tout d’abord bien comprendre ce qu’est le noyau. De plus il est nécessaire de bien connaître le matériel présent sur la machine où le noyau va être recompilé ainsi que l’objectif d’utilisation de cette dernière.

Récupération des sources du noyau

Dans un premier temps il faut récupérer les sources du noyau. Pour celà il faut savoir qu’elle version du noyau vous voulez recompiler [1]. L’objectif ici sera de recompiler le noyau déjà installé sur le système. Donc il faut tout d’abord vérifier quelle version du noyau est présente sur le système avec la commande :

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

Compilation du noyau

Extraction des sources

Les sources devront être extraites dans le répertoire de l’utilisateur et non pas dans /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 ~/src

Puis 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

Configuration du noyau

Maintenant il faut configurer le noyau. Cette étape permet de dire quelle fonctionnalité le noyau doit comprendre. Et si ces fonctionnalités doivent être intégrées dans le noyau en dur ou bien résider sous forme de modules. Pour commencer la configuration, il est nécessaire de se placer dans le répertoire des sources avant, puis de lancer l’interface de configuration :
$cd ~/src/linux
$make xconfig

 [2]  [3] [4]

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

Compilation du noyau

Une fois que le noyau est configuré correctement [6], il faut le compiler. Cette procédure est très simple mais aussi très longue selon la puissance de votre machine... Mais il faut se lancer :
$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

Installation

Installation du nouveau noyau

Si la compilation s’est déroulée sans accrocs, il ne reste plus qu’à installer ce noyau fraîchement compilé. Cette étape est réputée pour être le point de non retour. En effet en général, lorsque l’on installe un nouveau noyau, et que lors de la configuration une fonctionnalité a été oubliée, il se peut que le système soit incapable de redémarrer !! Demandez aux rois du :

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

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

Configuration du système d’amorçage

Pour finir il faut ajouter le nouveau noyau dans LILO afin de pouvoir démarrer avec ce noyau. Pour cela il faut ajouter dans le fichier /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.

Démarrer avec le nouveau noyau compilé

Après tout ce labeur, il ne reste plus qu’à tester ce nouveau noyau. Ceci est très simple. Il faut redémarrer votre système. Et au lancement de LILO, un nouveau choix est présent !! Oui c’est votre noyau tout beau !! Sélectionnez le et démarrez. Si votre système ne démarre pas correctement, c’est sûrement que vous avez oublié une option lors de la configuration du noyau. Peu importe, redémarrez votre système avec l’ancien noyau que vous sélectionnerez dans LILO.

Désinstallation

Si jamais vous vouliez désinstaller un noyau précédemment installé, il ne faut pas s’inquiéter. Cette manipulation est très simple (grâce à la Debian) et très rapide. Néanmoins prenez soin de ne pas désinstaller le noyau qui est en cours d’exécution car dans ce cas la stabilité du système n’est pas garantie. La désinstallation se fait avec 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

Le mot de la fin

Cet article n’avait pas la prétention d’expliquer comme intégrer tel ou tel patch du noyau, ni même d’expliquer comment optimiser le noyau GNU/Linux. Il a pour unique but d’expliquer de façon détaillée comment recompiler un noyau GNU/Linux dans l’esprit Debian et de montrer que cette manipulation n’est si pas compliquée ni même risquée.

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.


Signatures: 0
Date Nom Message

Forum

Vous pouvez participer à la vie de ce site et proposer vos propres articles en vous inscrivant ci-dessous. Vous recevrez immédiatement un email vous indiquant vos codes d'accès à l'espace privé du site.

Identifiants personnels

Indiquez ici votre nom et votre adresse email. Votre identifiant personnel vous parviendra rapidement, par courrier électronique.

Des mêmes auteurs


Parse error: syntax error, unexpected $end, expecting ')' in /home/gwhere/www/debianaddict/stats/var/last.php on line 803