Compiler un noyau Ubuntu
Ce tutoriel est une méthode se voulant synthétique et éprouvée pour Ubuntu 10.04 (Lucid Lynx) et Ubuntu 10.10 (Maverick Meerkat). Cette page n'a pas lieu de remplacer les tutoriaux Compiler Linux et Comment compiler un kernel sur mesure, auxquels il est fortement conseillé de se référer pour de plus amples informations sur la compilation d'un noyau Ubuntu et Linux en général. Néanmoins, les méthodes de compilation du noyau évoluent quelque peu d'une version à l'autre.
Pré-requis
- Disposer des droits d'administration.
- Disposer d'une connexion à Internet configurée et activée.
- Avoir créé les dépendances requises par votre noyau actuel, en tapant dans un terminal
sudo apt-get build-dep --no-install-recommends linux-image-$(uname -r)
- Si vous souhaitez utiliser les dépots Git : Avoir installé les paquets supplémentaires git-core.
Récupérer les sources du noyau
1) Via les archives sources
Créer un dossier où télécharger les sources et se déplacer à l'intérieur, exemple pour un dossier nommé src
dans votre dossier personnel :
mkdir ~/src cd ~/src
Après avoir pris bien soin de vérifier tous les Pré-Requis présentés plus haut (sauf l'étape concernant Git), lancer dans un terminal la commande suivante pour récupérer vos sources :
apt-get source linux-image-$(uname -r)
uname -r
sert à afficher la version courante de votre noyau
Ceci va créer un sous répertoire nommé linux-<version du noyau téléchargé>
où seront extraites les sources de votre noyau courant. Déplacez-vous y par la commande :
cd linux-<version du noyau>
2) Via les dépôts Git
tOnI0 01/02/2011 - A venir
Editer votre configuration
Ce tutoriel ne traite pas des milles et unes façons de configurer son noyau, par conséquent nous assumons que vous savez à l'avance quelles options sont nécessaires à la compilation de votre noyau.
Deux méthodes sont proposées
- La méthode basique, nécessitant uniquement une modification votre configuration actuelle
- La méthode de création d'une nouvelle variante, à réserver aux personnes qui souhaitent compiler plusieurs versions d'un même noyau
Légèrement différentes dans leur approche, ces deux méthodes mènent au même résultat.
a) En réutilisant la configuration actuelle
Commencer par copier la configuration actuelle qui se trouve dans le dossier /boot
vers votre dossier courant sous le nom de fichier .config
cp -vi /boot/config-`uname -r` .config
Vous pouvez également importer n'importe quel autre fichier de configuration en adéquation avec la version de votre noyau.
Il vous reste à entrer dans la configuration et à la modifier selon vos préférences. Bien qu'il soit possible d'éditer directement le fichier .config
avec un éditeur de texte, je vous recommande la méthode graphique que l'on utilise en saisissant la commande suivante :
make menuconfig
Kernel Hacking ---> [ ] Kernel Debugging <------------- A DÉSACTIVER
Enregistrez bien vos modifications avant de passer à la suite.
b) En créant votre propre variante
Inspiré par cet article de Peter sur le site My Thoughts
generic
, vous avez dû vous apercevoir de cette extension lorsque vous démarrez votre ordinateur et que Grub vous affiche la liste des noyaux installés. Il existe cependant d'autres variantes (ou flavours en anglais) pour différences architectures (i386, amd64) et différents usages (generic, server, virtual, pae…)
Nous allons ici exploiter les scripts contenus dans le sous dossier debian/rules
de votre dossier source pour éditer les configurations par défaut proposées par les sources du noyau. A titre d'information, ces fichiers de configuration se trouvent dans le sous-dossier debian/configs
.
Dupliquer le fichier de configuration qui vous intéresse (generic, server, virtual, ou autre) et le renommer avec votre propre extension.
Dans l'exemple suivant on choisit d'utiliser la configuration <conf>
comme base et de créer le fichier config.flavour.<ma config>
, en veillant à remplacer <conf> par la variante de votre choix (generic
par défaut) et <ma config> par un mot de votre choix.
On peut pour cela utiliser la commande suivante en remplaçant <architecture> par i386
si vous avez installé un Ubuntu 32bits ou amd64
si vous avez installé un Ubuntu 64bits.
cp debian.master/config/<architecture>/config.flavour.<conf> debian.master/config/<architecture>/config.flavour.<ma config>
Pour plus de commodité dans la suite du tutoriel, les occurences suivantes vont être remplacées, prendre soin de les adapter à la suite des manipulation :
- <conf> → generic
- <architecture> → i386
- <ma config> → mon_noyau
On fait appel au script suivant pour éditer la/les configurations que nous souhaitons.
debian/rules editconfigs
Dans le cas présent, nous souhaitons seulement modifier la configuration mon_noyau
qui vient d'être créée. Il faut donc répondre *N* à toutes les questions posées, sauf à la question concernant votre propre configuration où il faudra répondre *Y*.
Do you want to edit config: i386/config.flavour.mon_noyau? [Y/n]
Il vous reste à la modifier selon vos préférences.
Kernel Hacking ---> [ ] Kernel Debugging <------------- A DÉSACTIVER
Enregistrer les modifications avant de passer à la suite, et répondre *N* aux dernières questions s'il y a lieu.
On regénère les fichiers de config pour s'assurer qu'ils ne contiennent pas d'erreur.
debian/rules updateconfigs
Dupliquer ces deux autres fichiers et les renommer selon le nom de votre nouvelle configuration pour que la variante soit prise en compte lors de la compilation.
cp debian.master/abi/2.6.35-23.36/i386/generic debian.master/abi/2.6.35-23.36/i386/mon_noyau cp debian.master/abi/2.6.35-23.36/i386/generic.modules debian.master/abi/2.6.35-23.36/i386/mon_noyau.modules
Ouvrir le fichier debian.master/etc/getabis
Ajouter mon_noyau
à la fin de la ligne
getall i386 generic generic-pae virtual
Ouvrir le fichier debian.master/rules.d/i386.mk
Ajouter mon_noyau
à la fin de la ligne
flavours = generic generic-pae virtual
Enfin, dupliquer le fichier debian.master/control.d/vars.generic
et le renommer en debian.master/control.d/vars.mon_noyau
cp debian.master/control.d/vars.generic debian.master/control.d/vars.mon_noyau
Compilation
- Si vous avez suivi la méthode a) précédemment , la compilation se lance ainsi, en remplaçant
mon_noyau
par ce que vous souhaitez :
fakeroot debian/rules clean #nettoyage de l'arborescence des sources, pour éviter de laisser trainer des résidus d'anciennes compilations CONCURRENCY_LEVEL=3 skipabi=true fakeroot make-kpkg --initrd --append-to-version=-mon_noyau kernel-image kernel-headers
- Si vous avez suivi la méthode b), la compilation se lance ainsi :
fakeroot debian/rules clean #nettoyage de l'arborescence des sources, pour éviter de laisser trainer des résidus d'anciennes compilations CONCURRENCY_LEVEL=3 skipabi=true fakeroot debian/rules binary-mon_noyau
Des précisions :
skipabi=true
sert à outrepasser les vérifications ABI (tests de compatibilité binaire) ce qui évite des erreurs très courantesCONCURRENCY_LEVEL=3
est à adapter selon le nombre de coeurs que vous possédez sur votre machine. On prend une valeur égale au nombre de coeurs + 1 (soit 3 pour un processeur double coeur)
Installation
Si tout s'est bien déroulé, deux fichier installeurs .deb devraient être créés à la racine de votre dossier courant (~/src/linux-<version du noyau>
pour rappel). Leur nom doit ressembler à ceci :
linux-headers-2.6.35-23-mon_noyau_2.6.35-23.37_i386.deb linux-image-2.6.35-23-mon_noyau_2.6.35-23.37_i386.deb
Dans un envrironnement de bureau, l'installation de votre nouveau noyau peut bien souvent se faire par un double clic sur chacun de ces fichiers. Dans un terminal, on peut utiliser la commande suivante :
sudo dpkg -i linux-headers-2.6.35-23-mon_noyau_2.6.35-23.37_i386.deb linux-image-2.6.35-23-mon_noyau_2.6.35-23.37_i386.deb
En remplaçant bien sûr les noms de fichiers donnés en exemple par les vôtres.
Le nouveau noyau devrait apparaître dans votre menu GRUB au prochain redémarrage.
Voir aussi
- (en) Kernel Compile sur Community Ubuntu Documentation
- (en) Kernel Git Guide sur Ubuntu Wiki
- (en) Master kernel thread sur Ubuntu forums
Contributeurs principaux : tOnI0.