Compilation d'un noyau adapté pour le projet Eole

Cet article décrit comment en partant d'un noyau Ubuntu standard on peut le personnaliser pour les besoins du projet EOLE.

Ce document est basé sur le noyau 2.6.17-9.23 de Ubuntu.

Modification du noyau Ubuntu pour Eole

Récupération du paquet source Ubuntu

On part d'une base Ubuntu en récupérant le paquet source des noyaux utilsés par la distribution Ubuntu. On prend les nouveaux noyaux générés pour la distribution edgy. Dans le fichier /etc/apt/source.list il faut avoir la ligne suivante :

deb-src http://fr.archive.ubuntu.com/ubuntu edgy main

Pour récupérer le paquet source :

apt-get source linux-image-2.6.17-9-server

Le système apt/dpkg récupère alors sur les miroirs le fichier :

linux-source-2.6.17_2.6.17-9.23.tar.gz 

et le déarchive dans le répertoire courant.

On partira de là pour les modifications à apporter au paquet Ubuntu pour l'adapter au besoins du projet Eole.

Les modification à reéaliser sont de deux types :

  • ajout de patches spécifiques ;
  • modification des options de compilation pour un noyau plus taillé pour une utilisation serveur.

Ajout de patches supplémentaires

Pour se faire nous allons utiliser le mécanisme « dpatch » prévu par Debian dans ses paquets. Ceci permet de minimiser l'impact des patches et le travail de maintenance pour suivre l'évolution du paquet source Ubuntu. Les patches spécifiques étant appliqués/enlevés à part du paquet original, une mise à jour consiste juste à s'assurer que les patches s'appliquent toujours aux nouveaux sources du paquet.

Pour cela il faut préparer les patches d'une façon spécifique décrite dans la manpage de dpatch briévement décrite ci-dessous. Chaque patch doit passer dans une moulinette afin qu'il soit utilisable par dpatch, l'exemple suivant permet de fixer les idées. En gros il s'agit de transformer le patch en un script contenant à la fois la commande permettant de l'appliquer, le patch ainsi que sa description :

dpatch patch-template -p "01_some_patch" "A random patch" \
     <random.diff >debian/patches/01_some_patch.dpatch
  • “01_some_patch” donne le nom du patch dans le fichier dpatch
  • “A random patch” donne la description du patch (cela permet de se rappeler l'utilité du patch)
  • random.diff est le nom du fichier contenant le patch original
  • debian/patches/01_some_patch.dpatch est le nom du fichier dpatch qui sera utilisé pour appliquer/enlever le patch dans le paquet

Tous les patches préparés ainsi doivent se trouver dans le répertoire patches du répertoire debian du paquet.

Les patches sont appliqués dans l'ordre précisé dans le fichier 00list se trouvant dans le même répertoire que les patches. Il est plutot conseillé de nommer les fichiers dpatch 01_premier_patch.dpatch, 01_deuxième_patch.dpatch ainsi de suite… :-D

Afin que les patches soient appliqués/enlevés au bon moment de la construction du paquet il faut modifier le fichier rules dans le répertoire debian du paquet. Dans notre cas voila les modification apportées au fichier rules :

diff -Nur linux-source-2.6.17-2.6.17/debian/rules linux-source-2.6.17-2.6.17-eole/debian/rules
--- linux-source-2.6.17-2.6.17/debian/rules     2006-09-21 21:35:15.000000000 +0200
+++ linux-source-2.6.17-2.6.17-eole/debian/rules        2006-09-25 18:20:52.000000000 +0200
@@ -104,7 +104,7 @@
 MAKE_KPKG := make-kpkg --stem $(stem) $(subarch)
 
 unpack: stamp-unpack
-stamp-unpack:
+stamp-unpack: patch
        dh_testdir
        find . \( -path ./debian -o -path ./.git -o -name .gitignore \) -prune -o -print | \
                cpio -dumpl $(srcdir)
@@ -151,6 +151,17 @@
 
        touch stamp-unpack
 
+patch: patch-stamp
+
+patch-stamp:
+       dpatch apply-all
+       dpatch list-all >patch-stamp
+
+unpatch:
+       dpatch deapply-all
+       rm -rf patch-stamp debian/patched
+
+
 build_prereq := \
        release.Debian version.Debian \
        debian/control \
@@ -216,7 +227,9 @@
                cd - > /dev/null; \
        done
 
-clean: debian/control
+clean: clean-patched unpatch
+
+clean-patched: debian/control
        dh_testdir
        dh_testroot
 
@@ -440,7 +453,7 @@
 
 .PHONY: printenv updateconfigs
 
-updateconfigs:
+updateconfigs: patch
        dh_testdir
        @for arch in i386 amd64 ia64 hppa powerpc sparc; do     \
                debian/bin/oldconfig $$arch;            \

Pour plus d'explication se reporter à la manpage de dpatch.

Ajout de la cible eole dans le paquet Ubuntu

Afin d'avoir un noyau spécifique avec un paquet à part et ses options de compilation spécifiques il est nécessaire de définir une nouvelle « flavour » pour le noyau eole.

Cela se fait très simplement en ajoutant un fichier config.eole, qui contient les options de compilation spécifiques, et le fichier vars.eole, qui contient des infos pour construire la partie Package spécifique au noyau Eole dans le fichier debian/control, dans le répertoire debian/config/i386/

Dans notre cas le fichier vars.eole contient :

supported="high end x86"
target="Kernel for Eole server systems."
desc="Eole server"
bootloader="lilo (>= 19.1) | grub"
provides="rhcs-modules2-1"

Ces information seront insérées automatiquement dans le fichier debian/control généré automatiquement par le fichier rules.

Le fichier config.eole est un fichier .config de configuration du noyau il peut être obtenu et manipulé par les commandes :

make menuconfig
make xconfig 

ou autres qui permettent la configuration des options de compilation du noyau.

Attention : à chaque fois que l'on modifie les fichiers config* dans les répertoire debian/config/* il faut lancer une commande spécifique qui remette a jour les fichiers config*. En effet certaines options étant réglées de façon générale pour chaque architecture il est nécessaire de refactoriser ces fichiers. Ces commandes sont lancées soit lorsque l'on modifie les fichiers config, soit quand on fait une mise à jour des sources afin de renseigner les éventuelles nouvelles options de compilation.

La commande :

debian/bin/oldconfig i386

permet de regénérer la configuration pour l'architecture i386. Si on veut le faire pour toutes les architectures :

debian/rules updateconfigs

Voir : https://wiki.ubuntu.com/KernelCustomBuild pour plus d'info.

Compilation du noyau

C'est finalement le plus simple mais aussi le plus long mais là on peut aller prendre le café ! :-D

AUTOBUILD=1 fakeroot debian/rules binary-debs flavours=eole

Et à la fin on se retrouve avec les paquets préparés dans debian/build.

Si on lance :

 dpkg-buildpackage -rfakeroot 

on recompile toutes les « flavours » pour i386…

Pour l'instant je n'ai pas défini la « flavour » Eole pour les architectures amd64 et ia64 mais ça consiste juste à mettre les fichiers config.eole et vars.eole dans les bons répertoires debian/config/{ia64,amd64}

 
eole/compilation_noyau.txt · Dernière modification: 2013/10/28 19:07 (modification externe)
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Drupal Garland Theme for Dokuwiki