Le noyau Linux, sauce Debian

Nicolas Boos <nicolas.boos@wanadoo.fr>

Samedi 20 Janvier 2001 (MAJ le 4 Août 2001)

Nous avons généralement toujours un reproche, aussi insignifiant qu'il puisse être, à faire au noyau installé par défaut avec notre distribution favorite, quelque soit celle-ci d'ailleurs. Il y a bien la distribution Slackware qui propose une foule de noyaux pré-compilés différents, mais qui ne sont hélas pas toujours très récents. Dans le cas Debian, on constate qu'il n'y a environ que 3 ou 4 noyaux disponibles en remplacement de celui installé par défaut. De plus, ces noyaux sont en général compilés pour satisfaire et couvrir la plupart des configurations des utilisateurs ; on obtient donc ainsi des noyaux qui ne sont souvent pas très légers et parfois longs à démarrer. Aussi, il nous arrive d'avoir à appliquer certains patches divers et variés nécessaires au bon fonctionnement d'un périphérique, à une fonctionnalité particulière, ou encore pour corriger un bogue important par exemple. Tout cela pour dire qu'il est vraiment très utile de savoir recompiler soi-même son noyau, les façons de le faire variant un peu selon les distributions.

L'originalité avec Debian, c'est qu'il y a généralement toujours une méthode "propre" pour faire telle ou telle tâche. Cela s'applique évidemment aux compilations de noyau. Ainsi, nous allons essayer d'éclairer certaines et certains sur les démarches à entreprendre afin de parvenir à effectuer une compilation "nette et sans bavures", à la manière particulière de Debian. Bien entendu, des erreurs peuvent s'être glissé à l'intérieur de ce modeste article, et cela malgré tout le soin et l'attention que j'ai pu y apporter. Si tel était le cas, merci de me le signaler. Vos remarques et contributions sont évidemment impatiemment attendues.

1. Préparatifs

1.1 Lectures

Avant toute chose, pour celles et ceux qui ne seraient pas familier avec tout ce qui gravite autour de notre objet (i.e. le noyau), il est très vivement conseillé de lire les documentations se rapportant à celui-ci. Vous en trouverez sur http://www.traduc.org, et en particulier le Kernel-HOWTO. Même si ce dernier n'est pas tout à fait à jour, les informations qu'il dispense sont pour la plupart toujours d'actualité. Aussi, vous pourrez (et vous devriez!) également lire les pages de manuels dès lors que vous ne savez que trop peu sur tel ou tel paquet, et même si nous n'y faisons pas référence dans l'article, bien entendu.

D'ailleurs en général, la lecture des documentations est probablement le meilleur réflexe à avoir lorsque l'on est confronté à des difficultés et/ou des interrogations ; c'est souvent bien plus instructif que tout autre source.

1.2 Paquets Debian requis

Il faut avoir installé sur sa machine un nombre raisonnable de paquets (dont certains sont mêmes incontournables) pour être en mesure de pouvoir travailler correctement et sans problèmes avec tout ce qui touche de près ou de loin à la construction du noyau. Le premier paquet à installer est kernel-package, qui n'est peut-être pas le plus vital de tous mais qui en tout cas est l'un des piliers en ce qui concerne la compilation de noyau dans la manière et le style Debian. Lisez bien le fichier README.gz dans la répertoire /usr/doc/kernel-package (par exemple avec la commande gzip -cd /usr/doc/kernel-package/README.gz | more). Vous verrez, c'est très instructif.

Ensuite, et pour faire simple, je vais faire une courte liste des autres paquets à installer, une sorte de minimum vital à avoir, vous cherchez un peu par vous même à quoi ils correspondent:

Il vous faut aussi ces quelques derniers, mais ils devraient déjà êtres installés:

2. Le noyau sous Debian GNU/Linux

2.1 Mise en place des sources

Maintenant, deux possibilités s'offrent à vous. Soit vous installez les sources du noyau disponibles en .deb avec la distribution, soit depuis des archives en .tar.gz récupérables sur Internet à l'adresse http://www.kernel.org (ou l'un des ses miroirs), par exemple.

La première solution vous permet donc de recompiler les sources des noyaux fournis avec Debian GNU/Linux. Personnellement, je n'aime pas trop cette méthode ; les noyaux fournis sont parfois des pré-versions et auxquels l'équipe Debian a souvent rajouté des patches venant de droite et de gauche (par exemple les noyaux fournis avec 2.2r0 étaient des 2.2.17pre6...), et on peut donc avoir parfois, mais très rarement, quelques surprises.

Sources disponibles en paquets au format Debian

Pour connaître la liste des différents paquets disponibles et contenant les sources du noyau Linux, c'est très simple, on utilise la méthode classique du "apt-cache search". Démonstration :

apt-cache search kernel-source

Résultat :

kernel-source-2.2.18pre21 - Linux kernel source for version 2.2.18pre21
kernel-source-2.0.36 - Linux kernel source.
kernel-source-2.0.38 - Linux kernel source for version 2.0.38
kernel-source-2.2.10 - Linux kernel source.
kernel-source-2.2.12 - Linux kernel source.
kernel-source-2.2.13 - Linux kernel source.
kernel-source-2.2.15 - Linux kernel source for version 2.2.15
kernel-source-2.2.17 - Linux kernel source for version 2.2.17

Nous avons donc maintenant le choix entre différentes versions du noyau Linux. Prenons alors ici la dernière disponible, à savoir la 2.2.18pre21. On l'installe le plus normalement possible :

apt-get install kernel-source-2.2.18pre21

Cette dernière étape à pour effet de placer les sources du noyau dans /usr/src, dans un ficher nommé kernel-source-2.2.18pre21.tar.bz2.

Cette archive bzippée relativement volumineuse est donc à décompresser, comme ceci :

tar xvfI kernel-source-2.2.18pre21.tar.bz2

Ensuite on se retrouve avec un répertoire kernel-source-2.2.18pre21. Reste à ne pas oublier de faire un lien symbolique linux vers ce dernier :

ln -s kernel-source-2.2.18pre21 linux

Vous pouvez alors dès à présent passer à l'étape de configuration du noyau.

Sources traditionnelles du noyau Linux

A l'heure où j'écris cet article, la dernière version du noyau Linux est la 2.2.18 (Oui, le 2.4.0 est sorti... Bref, pour aujourd'hui on va pas chipoter...). C'est probablement l'un des meilleurs noyau qui soit sorti dans la série des 2.2. Il inclus un grand nombre choses (l'AGP, DRM, USB, SBLive! et j'en oublie sûrement beaucoup d'autres...) qui permettent largement de se passer du tout nouveau 2.4.0.

Tout d'abord, procurez vous une archive contenant les sources du noyau, linux-2.2.18.tar.gz ou linux.2.2.18.tar.bz2 sur http://www.kernel.org ou tout autre miroir. Ensuite, placez vous dans le répertoire /usr/src. Vérifiez qu'il n'y a pas déjà un répertoire linux. Si tel était le cas, renommez ou déplacez ce dernier. Décompressez enfin l'archive que vous avez rapatrié (selon celle-ci):

tar xvfz linux-2.2.18.tar.gz

ou

tar xvfI linux-2.2.18.tar.bz2

Vous vous retrouverez alors avec un répertoire /usr/src/linux qui contient donc les sources de votre noyau Linux. Comme toujours, lisez bien le Kernel-HOWTO (et en particulier le volet 3.2) pour plus d'information.

2.2 Configuration du noyau

Pour que la compilation puisse s'effectuer à l'étape suivante, il est nécessaire de définir au noyau un fichier de configuration. Ce dernier se trouve placé dans la racine du répertoire linux crée lors de la décompression de l'archive contenant les sources ; ce fichier se nomme .config (et est donc un fichier "caché"). Vous pouvez l'éditer à la main, mais c'est un travail fastidieux pour le non-spécialiste. Le plus facile est plutôt de définir la configuration à l'aide d'une interface graphique qui s'occupera ensuite d'écrire un fichier .config pour vous. Pour cela, lancez la commande suivante, en faisant toujours bien attention de vous trouver positionné dans /usr/src/linux:

make menuconfig

Il y a un tas de rubriques, avec des cases à cocher ou non. Faites selon vos besoins puis quittez l'interface en prenant soin de confirmer l'enregistrement de vos modifications si besoin était. Pour plus de précisions n'hésitez pas à consulter le Kernel-HOWTO.

2.3 Compilation

C'est ici que vous allez apercevoir l'originalité Debian. Nous avons la possibilité de mettre sous forme de paquets le noyau, plus précisément ce dernier et ses modules, la documentation de celui ci, ses fichiers d'en-têtes ainsi que ses sources. De ce fait on peut installer et retirer facilement un noyau précis et ce qui gravite autour de celui-ci très facilement. Aussi, lorsque l'on souhaite tester un nouveau noyau, la procédure d'installation est largement automatisée, et nous facilite ainsi le travail.

Classiquement sous Linux, après avoir configuré le noyau, on passe par différentes étapes. En général, on fait un nettoyage dans les sources (fichiers objets d'une ancienne compilation par exemple), puis on cherche les dépendances, on compile le noyau, puis ses modules et enfin on installe le tout (les commandes exécutées pour effectuer une compilation traditionnelle sont généralement celles-ci: make clean, make dep, make bzImage, make modules...).

Avec Debian, il y quelques changements, notamment le nettoyage ce fait plutôt comme ceci:

make-kpkg clean

Ensuite, cela devient très simple:

make-kpkg --revision=2.2.18-1 kernel_image

Avec cette dernière commande, le système effectue plusieurs tâches successivement ; il vérifie les dépendances, compile le noyau, après il s'occupe des modules, et enfin très important il fabrique pour vous un paquet .deb où il inclura tout le travail réalisé (i.e le noyau et les modules).

Aussi, il est possible de construire d'autres paquets, par exemple et successivement avec les commandes suivantes, on obtient soit les sources, soit la documentation ou encore les fichiers d'en-têtes (nécessaires pour certaines de vos compilations):

make-kpkg kernel_source
make-kpkg kernel_doc
make-kpkg kernel_headers

Pour pouvez également faire "la totale", i.e. un make-kpkg clean et make-kpkg kernel_*, tout cela avec une seule commande:

make-kpkg buildpackage

2.4 L'option --revision

Une dernière note concernant l'option --revision introduite ci-dessus avec la commande make-kpkg kernel_image ; cette option permet de "personnaliser" un peu le paquet produit. Ici, j'ai choisi d'y intégrer le numéro du noyau (2.2.18), ainsi qu'un numéro de révision (1). Faites attention, n'y mettez pas n'importe quoi, vous pourriez avoir des surprises ; lisez donc très attentivement la page de manuel de make-kpkg.

2.5 Installation

Une fois la compilation terminée, et si celle-ci c'est déroulée correctement, vous devriez avoir selon vos désirs auparavant exigés, un ou plusieurs nouveaux fichiers situés dans /usr/src. Nous allons ici prendre le cas où l'on spécifie à make-kpkg la cible buildpackage pour pouvoir établir une petite liste exemple des fichiers produits que voici:

  1. kernel-doc-2.2.18-mmedia_2.2.18-3_all.deb
  2. kernel-headers-2.2.18-mmedia_2.2.18-3_i386.deb
  3. kernel-image-2.2.18-mmedia_2.2.18-3_i386.deb
  4. kernel-source-2.2.18-mmedia_2.2.18-3.dsc
  5. kernel-source-2.2.18-mmedia_2.2.18-3.tar.gz
  6. kernel-source-2.2.18-mmedia_2.2.18-3_all.deb
  7. kernel-source-2.2.18-mmedia_2.2.18-3_i386.changes

Vous l'aurez tous deviné, le premier fichier inclus la documentation et le deuxième les fichiers d'en-têtes. Le troisième correspond au paquet le plus essentiel du lot ; il inclus donc le noyau et ses modules. Pour l'installer, rien de plus facile:

dpkg -i kernel-image-2.2.18-mmedia_2.2.18-3_i386.deb

Le processus d'installation se déclenchera et vous posera normalement quelques questions. Répondez y consciencieusement. Une fois terminé, et si tout c'est bien passé, vous n'avez plus qu'à redémarrer pour essayer votre nouveau noyau. Si ce dernier vous convient alors tant mieux, dans le cas contraire (si vous n'arrivez pas à démarrer le système correctement, faites le avec la disquette de démarrage de votre ancien noyau, disquette que vous devriez normalement et impérativement avoir...), retirez le avec la commande suivante:

apt-get remove kernel-image-2.2.18-mmedia

Ensuite, n'oubliez surtout pas de réinstaller votre ancien noyau convenablement.

Pour finir, l'avant dernier fichier de la liste correspond simplement aux sources incluses dans un paquet au format .deb.

3. Patate et noyau 2.4

Le noyau 2.4.0 peut être installé sur une Potato, bien entendu. Mais c'est plutôt chose risquée. Néanmoins pour les téméraires, voici quelques maigres indications pour effectuer la transition le plus en douceur possible. Personnellement, j'ai renoncé à ce changement. Les avantages qu'il offrait étaient trop faibles en comparaison de désagréments occasionnés. En particulier, je ne suis pas arrivé à faire fonctionner modconf convenablement (malgré toutes les mises à jour) et avait aussi trop souvent des problèmes avec les modules.

Avant toute chose, posez vous la question de savoir si vous avez vraiment et réellement besoin d'effectuer la transition. Cette dernière n'est pas toujours une promenade de santé ; le noyau 2.2.18 est relativement complet, ne faites donc le pas que si il lui manque quelque chose qui vous est vraiment indispensable.

3.1 Mettre à jour quelques paquets

Comme indiqué dans dans le fichier /usr/src/linux/Documentation/Changes, il est nécessaire de mettre à jour, voir d'ajouter certains paquets pour le passage au noyau 2.4. J'en ai aussi recompilé pour vous un certain nombre pour la Potato 2.2 (à l'aide d'un apt-get source -b <nompaquet>), en particulier:

Vous trouverez tous ces paquets, ainsi que d'autres parfois complémentaires, à l'adresse suivante: http://nicolaxx.free.fr/pub/dists/stable/noyaunux/binary-i386

Il est également possible de récupérer ces paquets avec l'utilitaire APT ; la ligne à ajouter à au /etc/apt/sources.list de votre système est :

deb http://nicolaxx.free.fr/pub stable noyaunux

Ensuite, rien de bien compliqué, il suffit de mettre à jour les paquets nécessaires (les débutants peuvent aussi éventuellement consulter le document suivant, APT & DPKG, à propos des manipulations de paquets sous Debian).

4. Quelques mots pour finir

J'ai essayé de vous fournir rapidement et simplement un bref résumé de ce que je savais du noyau sous Debian GNU/Linux. J'aurais aimé être plus complet sur certains passages, notamment celui concernant la Potato et le 2.4, mais mes connaissances sur ce dernier n'étaient que trop maigres (avis donc aux gourous en la matière...). Aussi, n'hésitez pas à m'écrire pour alimenter ce petit article.