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.
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.
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:
gcc
libc6-dev
bin86
(pour les possesseurs de x86)gawk
bzip2
libncurses5-dev
(indispensable pour faire un make menuconfig
)Il vous faut aussi ces quelques derniers, mais ils devraient déjà êtres installés:
binutils
gzip
make
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.
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.
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.
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.
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
--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
.
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:
kernel-doc-2.2.18-mmedia_2.2.18-3_all.deb
kernel-headers-2.2.18-mmedia_2.2.18-3_i386.deb
kernel-image-2.2.18-mmedia_2.2.18-3_i386.deb
kernel-source-2.2.18-mmedia_2.2.18-3.dsc
kernel-source-2.2.18-mmedia_2.2.18-3.tar.gz
kernel-source-2.2.18-mmedia_2.2.18-3_all.deb
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.
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.
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).
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.