PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Cyrille BORNE : Créer un environnement de construction de paquets Debian

mardi 3 novembre 2015 à 10:26

Créer un environnement de construction de paquets Debian

Dans ce billet nous verrons comment créer un environnement sécurisé pour gérer ou construire des paquets Debian sans interférer sur le système installé car les paquets en dépendances nécessaires pour le développement du programme ne seront pas installés sur notre os mais dans un système de chroot afin d'isoler les procédures.

Dans un autre billet nous verrons comment obtenir un paquet Debian de A à Z depuis les sources originales en amont. Ces deux billets ne prétendent pas traiter le problème de la construction de paquets dans sa totalité, pour cela se référer au handbook Debian in extenso, mais plutôt à des débutants motivés susceptibles de créer des paquets pour leur usage personnel ou pour pour une distribution en petit comité, dans un groupe de confiance. Ne sera pas abordée non plus la signature des paquets.

Pour créer notre environnement de gestion nous allons utiliser pbuilder qui, comme dit plus haut, va créer un chroot dans lequel sera installée une autre distribution Debian, indépendante de celle utilisée, qui peut être d'une autre version, Stable, Testing, Sid, totalement indépendante de la version hôte, voire une Ubuntu sur un hôte Debian ou l'inverse. Bénéfice donc, le paquet créé sera indépendant de l'os utilisé et pourra ainsi aussi être installé sur une autre machine.

Installation de l'environnement :

:~# aptitude install pbuilder dh-make debootstrap devscripts unp

Dans cet exemple j'utilise une Debian GNU/Linux 8.2 (jessie) et je veux fabriquer un paquet pour fonctionner sur une Sid amd64. Je vais donc fabriquer un chroot que je pourrai utiliser à nouveau dans les mêmes circonstances.

:~# pbuilder --create   \\
    --distribution sid  \\
    --architecture amd64 \\
    --basetgz /var/cache/pbuilder/sid-amd64-base.tgz

Explications des options de construction :
--distribution Ici je demande la version Sid mais j'aurais pu construire une Jessie, une Stretch, une Ubuntu Quantal, vivid, etc. Comme pbuilder utilise debootstrap on peut voir la liste des constructions possibles dans /usr/share/debootstrap/scripts en sachant tout de même que suivant le choix il faudra ajouter d'autres options comme les adresses des miroirs et autres variantes. À noter qu'avec pbuilder on peut aussi utiliser experimental.

--architecture Il est demandé amd64 mais ce pourrait être aussi i386

--basetgz On peut créer plusieurs chroots indépendants les uns des autres, il est donc bon de leur donner un nom explicite. Dans le cas contraire le chroot compressé sera placé dans /var/cache/pbuilder/base.tgz

Le fichier de configurations principal de pbuilder est dans /usr/share/pbuilder/pbuilderrc. Il existe un autre fichier de configuration dans /etc/pbuilderrc qu'il est préférable d'utiliser pour modifier la configuration principale, ou bien créer un pbuilderrc dans son /home. Il ne sera pas modifié lors des mises à jour.
En ce qui me concerne comme modifications génériques j'y ai ajouté l'adresse des miroirs dans la ligne MIRRORSITE et "main contrib non-free" dans COMPONENTS.

Après lancement de la procédure elle se termine par :
I: creating base tarball [/var/cache/pbuilder/sid-amd64-base.tgz]
I: cleaning the build env

Voilà, nous avons uns Debian Sid contenant le minimum nécessaire de 257 Mo compressé.

Nous verrons plus tard comment créer un nouveau paquet Debian mais là, pour tester pbuilder nous allons utiliser les sources Debian pour avoir le deb du programme axe, un simple éditeur. Comme on peut le vérifier par aptitude -s build-dep axe si nous devions créer ce paquet sur notre système principal il faudra ajouter plus de 20 paquets afin de satisfaire les dépendances de création. D'où l'intérêt de le faire dans le chroot car pbuilder appellera les dépendances nécessaires puis, une fois le paquet créé, nettoiera le chroot en supprimant ces paquets pour le conserver dans son état d'origine.

Après avoir récupéré l'adresse du fichier dsc sur https://packages.debian.org/sid/axe on le télécharge car c'est ce fichier qui donnera à pbuilder tous les renseignements nécessaires pour construire le deb :

$ dget -d http://http.debian.net/debian/pool/non-free/a/axe/axe_6.1.2-16.2.dsc

et j'aurai ensuite mon fichier et les signatures vérifiées automatiquement :

axe_6.1.2-16.2.dsc:
      Good signature found
   validating axe_6.1.2.orig.tar.gz
   validating axe_6.1.2-16.2.diff.gz
All files validated successfully.

$ ls -1
axe_6.1.2-16.2.diff.gz
axe_6.1.2-16.2.dsc
axe_6.1.2.orig.tar.gz

On peut maintenant construire (build) le paquet en précisant - mais ce n'est pas toujours nécessaire - la distribution et l'architecture, l'adresse de la base.tgz puisqu'elle est spécifique ainsi que l'adresse où trouver le fichier .dsc.

sudo pbuilder --build  \\
--distribution sid     \\
--architecture amd64   \\
--basetgz  /var/cache/pbuilder/sid-amd64-base.tgz \\
~/axe/axe_6.1.2-16.2.dsc

Voilà, dans le dossier result on trouve ensuite le deb construit ainsi que les diverses parties propres à un paquet Debian, les sources donc, le changes, le diff, le dsc, fichiers que nous aurons l'occasion d'étudier lors de la création de notre premier paquet.

$ ls -1 /var/cache/pbuilder/result/
axe_6.1.2-16.2_amd64.changes
axe_6.1.2-16.2_amd64.deb
axe_6.1.2-16.2.diff.gz
axe_6.1.2-16.2.dsc
axe_6.1.2.orig.tar.gz

On peut maintenant vérifier la qualité de construction de notre deb avec lintian :

$ lintian /var/cache/pbuilder/result/axe_6.1.2-16.2_amd64.deb

E: axe: info-document-missing-dir-section usr/share/info/axe.info.gz

Il y a une Erreur. En effet sur aXe le mainteneur a omis de renseigner le dir, ce qui d'ailleurs a fait l'objet d'une déclaration de bug, mais le paquet est opérationnel :

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=528866

Pour faire la mise à jour d'un chroot avec pbuilder on utilise la commande pbuilder --update mais dans notre cas puisqu'on a précisé le nom de la base.tgz il faudra la renseigner par la commande :

:~$ sudo pbuilder --update --basetgz /var/cache/pbuilder/sid-amd64-base.tgz

À suivre.

Gravatar de Cyrille BORNE
Original post of Cyrille BORNE.Votez pour ce billet sur Planet Libre.