Mon pbuilderrc utilisant qemu-debootstrap
Bonjour à tous.
Comme vous le savez déjà, je passe beaucoup de temps sur tout ce qui est packaging Debian, tant sur le côté pratique que théorique de la chose.
Récemment, je suis devenu mainteneur Debian des paquets audacious et audacious-plugins. Et d'ici quelques semaines, je deviendrai co-mainteneur du paquet nginx sous debian.
En dehors de ça, j'essaye d'améliorer le travail en équipe au niveau du packaging nginx en fixant des objectifs à atteindre pour la prochaine freeze, et en essayant d'impliquer tous les co-mainteneurs dès qu'une décision importante doit être prise (upload d'une nouvelle version, ajout/suppression d'un module, etc...). Ce qui porte pas mal ses fruits, et on commence à bien travailler en équipe.
Mais sans environnement de compilation, le packaging Debian serait similaire au fait de jouer à la roulette russe avec une Gatling.
Pourquoi ?.
La raison est simple.
Avant d'uploader un paquet source dans Debian, il vaut mieux tester sa compilation dans un environnement le plus vierge possible, afin d'être certain des dépendances de compilation (les fameuses build-dep) et des dépendances binaires. Compiler un paquet en local ne garantit aucunement la bonne compilation d'un paquet, car comme tout utilisateur, on a déjà des paquets installés sur la machine, dont certains sont des dépendances de compilation, ce qui peut fausser l'appréciation de la justesse du paquet.
Pour avoir un environnement vierge, il existe plusieurs méthodes, dont voici une liste :
- Des machines virtuelles qu'on réinstalle à chaque compile (méthode pour les gens patients et qui ont surtout beaucoup de temps libre).
- La même chose, avec des machines physiques (fonctionnement sponsorisé par EDF, vu la conso électrique que ça doit engendrer, et pratique en hiver, ça permet de couper le chauffage).
- Trouver un stagiaire, qui s'occupera des réinstall pendant que vous bossez sur les paquets sources (relativement cher, et peut engendrer une consommation excessive d'anti dépresseurs en tout genre de la part du stagiaire).
- Faire des chroots à la main, à coup de debootstrap (on s'approche d'une solution pérènne, mais on doit recréer les chroots à chaque compile, pas pratique).
- Utiliser des outils fournis par Debian, qui créent des chroots vierges (compressés dans des TGZ) et les décompressent afin de les utilisent pour lancer les compilation (ce que fait parfaitement pbuilder avec son pote debootstrap).
Comme vous avez dû le deviner, je vais parler de l'outil pbuilder.
Pbuilder peut se configurer à l'aide d'un fichier nommé pbuilderrc, souvent placé dans $HOME/.pbuilderrc, qui est un script bash, que pbuilder lit et exécute avant de commencer à travailler selon les actions qu'on lui ordonne.
Comme déjà expliqué dans les billets La machine ultime pour compiler ses paquets debian et Pbuilder et tmpfs peuvent être bons amis, le fichier .pbuilderrc permet de configurer tous les aspects de la création et de l'utilisation de ces chroots.
À force de travailler pour personaliser ma configuration, j'en suis arrivé à écrire un pbuilderrc assez complet, qui peut gérer plusieurs aspects de l'utilisation des pbuilders, y compris l'utilisation de qemu-debootstrap, qui est un debootstrap plus évolué, qui peut utiliser qemu afin de virtualiser l'architecture matérielle du chroot. On peut donc compiler du arm sur une machine i386 ou amd64 sans avoir besoin de passer par la création d'un environnement de cross-compilation.
Avant d'utiliser ce pbuilderrc, il faut donc posséder qemu-debootstrap, compris dans le paquet "qemu-user-static". Ce paquet est dispo dans le dépôt squeeze-backports, wheezy et sid pour debian et à partir de Natty pour Ubuntu.
Il est aussi fortement recommandé d'avoir lu le billet La machine ultime pour compiler ses paquets debian avant de l'utiliser, afin d'avoir toutes les dépendances nécessaires pour utiliser pbuilder avec une telle configuration.
Le pbuilderrc est disponible sur mon dépôt GIT "scriptomaniak", disponible sur github.
Il est à placer dans le dossier /root/, sous le nom .pbuilderrc
N'hésitez pas à faire des remarques et à me proposer des patchs/pull requests si vous voulez l'améliorer.
Bonne lecture et merci :).