User Mode Linux et paquets Debian
Il y a
quelques temps, j'avais parlé de
http://user-mode-linux.sf.net sur ce blog. Je me suis remis dessus récemment, puisque je voulais tester un paquet Debian que nous avons créé avec David Mentré et Frédéric Lehobey sans l'installer sur mon système. En effet, comme c'est notre premier paquet Debian, il y avait des chances pour qu'il soit foireux.
J'ai donc commencé à reprendre UML. Je suis reparti du
root_fs Debian Woody fourni sur le site de UML, que j'ai essayé d'upgrader en
sarge, puisque c'est pour cette distribution que le paquet a été prévu. Or, pour une raison obscure, le
dist-upgrade se foirait sur la mise à jour de la libc avec une étrange assertion incompréhensible. Bref, ça ne fonctionnait pas.
J'ai donc décidé de créer un
root_fs pour Debian Sarge. Évidemment, je n'ai pas fait ça a la main, j'ai utilisé un outil formidable :
rootstrap. Après moultes péripéties, j'ai réussi à obtenir un
root_fs fonctionnel, que vous
pouvez télécharger. J'en ai profité pour écrire un petit HOWTO sur comment ça se déroule :
HowtoRootStrap. D'ailleurs, je viens de voir qu'il était déjà à la 4ème place dans Google pour la recherche
rootstrap uml.
Résultat, j'ai pu tester le paquet Debian que nous avions créé. Pour information, ce paquet est
librpc-ocaml-dev, c'est une bibliothèque de développement pour Objective Caml qui permet de faire des RPC. En fait le but est de packager le logiciel de l'
Expérience Démocratique qui a besoin de cette bibliothèque. Le paquet pour Sarge, totalement expérimental, est
disponible. Je l'ai testé dans UML, et il s'installe parfaitement dans une Sarge.
Ensuite, j'ai testé la compilation du logiciel de l'Expérience Démocratique dans UML avec ce paquet installé. La compilation s'effectue correctement, ce qui signifie que Objective Caml a bien trouvé la bibliothèque RPC. En revanche, le serveur de l'Expérience Démocratique se vautre lamentablement avec un
Segmentation Fault lorsqu'on le lance. Je n'ai pas encore déterminé si c'était lié à UML ou non. D'une manière ou d'une autre, c'est sûrement le cas, parce que sur ma machine, il fonctionne parfaitement.
Tout cela m'a également fait découvrir la façon dont on créé un paquet Debian. Brièvement, je vais citer quelques outils utilisés pour donner quelques pistes aux éventuels lecteurs. Tout d'abord, l'outil
dh_make (paquet Debian
dh-make) permet de créer dans les sources originales le répertoire
debian avec les fichiers par défaut, ansi que les fichiers
.orig.tar.gz et
.dsc. A partir de là, il faut modifier
debian/control pour y mettre la description et les dépendances du paquet, puis
debian/rules pour indiquer comment le paquet se compile et s'installe. Dans notre cas, c'était à la fois simple puisque nous avions des exemples, mais pas évident, puisque la compilation de la bibliothèque Objective Caml n'utilise pas le simple triplet
./configure && make && make install. Il a donc fallu un peu bricoler, s'inspirer d'autres
debian/rules pour obtenir quelque chose de satisfaisant et fonctionnel. Une fois ceci terminé, on peut construire le paquet en utilisant
dpkg-buildpackage. Toutefois, il existe un paquet encore plus fort :
pbuilder. En utilisant la commande
pbuilder create vous allez créer un tarball contenant un système Debian minimal. Puis en utilisant
pbuilder build paquet vous allez lancer la construction de votre paquet au sein du sous-système
pbuilder (en fait c'est une Debian chrooté). Ceci permet de vérifier que les dépendances de compilation du paquet (
Build-Depends) sont correctes, et que celui-ci se compile bien dans un environnement sain. C'est assez fort comme outil.
Ensuite, pour tester, soit vous utilisez directement votre machine, soit vous utilisez un sous-système UML !