Table des matièresCompilation d'un noyau adapté pour le projet EoleCet 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 EoleRécupération du paquet source UbuntuOn 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 supplémentairesPour 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
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… 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 UbuntuAfin 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 noyauC'est finalement le plus simple mais aussi le plus long mais là on peut aller prendre le café ! 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} |