15 Nov 2015

Création de votre environnement pbuilder

Introduction

Ce guide vous aidera a configurer et personnaliser votre environnement pour pbuilder. Pbuilder est un environnement de construction propre afin de compiler et d’empaqueter un logiciel au format deb à destination des distributions Ubuntu ou Debian. L’avantage de pbuilder est d’éviter de polluer votre machine avec les paquets de développement et d’être certain d’avoir déclaré les bonnes dépendances pour la fabrication de votre paquet. A chaque nouvelle compilation, l’environnement est effectivement reconstruit à partir d’une base verge.

Avant d’attaquer ce guide, je vous conseille d’avoir déjà des bases sur la compilation des paquets sous Debian/Ubuntu, de comprendre comment fonctionne un dépôt et la signature des paquets. Il existe un guide officiel sur le site de Debian à l’adresse suivante.

https://www.debian.org/doc/manuals/maint-guide/index.fr.html

Préparation de votre environnement

Avant de pouvoir compiler un paquet, il est nécessaire de construire un ou plusieurs environnement pour pbuilder. En effet, il est recommandé de construire la base i386 et amd64 afin de pouvoir fournir les paquets pour les deux architectures processeur. Attention toute fois, vous ne serez pas capable de compiler des paquets pour amd64 si votre distribution est installée en i386, il est donc recommandé de systématiquement utiliser une distribution amd64.

Dans ce guide, j’utiliserais Debian Wheezy dans mon environnement de pbuilder pour construire des paquets. Cependant, le système hôte pour tourner sous n’importe quelle distribution (Debian ou Ubuntu). Il semblerait même qu’il existe le logiciel pbuilder sur d’autres distributions GNU/Linux.

La première étape est d’installer pbuilder sur votre système hôte :

apt-get install pbuilder

Nous allons ensuite configurer l’environnement amd64 pour pbuilder. Notez qu’un environnement n’est autre qu’un debootstrap compressé. La compilation se fera ensuite dans un chroot de cet environnement.

pbuilder --create --architecture amd64 --distribution wheezy --basetgz /var/cache/pbuilder/wheezy-amd64.tgz --mirror http://ftp.fr.debian.org/debian

Ceci vous créera le fichier /var/cache/pbuilder/wheezy-amd64.tgz qui sera une base minimal Debian. Créez maintenant la base i386.

pbuilder --create --architecture i386 --distribution wheezy --basetgz wheezy-i386.tgz --mirror http://ftp.fr.debian.org/debian

Si vous souhaitez ajouter les backports de Debian, utilisez les lignes suivante.

pbuilder --create --architecture amd64 --distribution wheezy --basetgz /var/cache/pbuilder/wheezy-amd64.tgz --mirror http://ftp.fr.debian.org/debian --othermirror "deb http://ftp.fr.debian.org/debian wheezy-backports main"

Et pour i386 :

pbuilder --create --architecture i386 --distribution wheezy --basetgz /var/cache/pbuilder/wheezy-i386.tgz --mirror http://ftp.fr.debian.org/debian --othermirror "deb http://ftp.fr.debian.org/debian wheezy-backports main"

Cette base sera très pratique pour développer avec la base de Wheezy. Cependant, il peut être utile d’ajouter des dépôts tiers comme source de compilation.

Personnalisation de votre environnement

Il est possible de personnaliser votre environnement de développement. Par exemple, ajouter un dépôt tiers peut s’avérer très utile.

Personnalisation de la version amd64 :

pbuilder login --save-after-login --basetgz /var/cache/pbuilder/base-amd64.tgz

Ou pour la version i386 :

pbuilder login --save-after-login --basetgz /var/cache/pbuilder/base-i386.tgz

Vous vous retrouvez ensuite dans un chroot de votre environnement. Tous les changements appliqué maintenant seront répercutés dans la base qui servira pour la compilation.

Modifier donc ensuite le fichier avec

nano /etc/apt/sources.list

Puis ajouter vos dépôts. N’oubliez pas également d’installer le certificat.

Petite astuce : la commande wget n’est pas installée dans votre environnement, plutôt que de l’installer, ouvrez un autre terminal et copiez le fichier vers /var/cache/pbuilder/build/xxxxx (xxxxx est un nombre aléatoire).

Compilation de votre paquet

Une fois votre environnement prêt, il est temps de passer aux choses sérieuses, la compilation de

Portage d’un paquet existant vers votre distribution

Si vous souhaitez tenter de porter un paquet pour votre distribution (de Ubuntu ou Debian Sid vers Debian Wheezy), l’opération devrait être relativement simple.

D’abord, récupérez les fichiers sources. Il existe différentes méthodes, soit récupérer les fichiers sur un ppa, ou bien depuis le site de Debian, ou bien encore depuis un dépôt directement. Généralement trois fichiers sont nécessaires :

  • le fichier .orig.tar.(gz, bz2, xv) : il contient les sources non modifiées du logiciel (tel que téléchargé sur le site).
  • le fichier .debian.tar.(gz, bz2, xv) : il contient le dossier debian contenant les règles de compilation et les patchs éventuels à apporter au code source.
  • le fichier .dsc : il contient les checksums pour les fichiers ci-dessus ainsi que d’autres informations sur les dépendances des paquets que les sources ont besoins.

Une fois ces trois fichiers à disposition, tapez simplement depuis votre terminal la commande suivante.

pbuilder --build --architecture amd64 --basetgz /var/cache/pbuilder/base-amd64.tgz xxxx_y.y.y-y.dsc

Et la suivante pour l’architecture i386.

pbuilder --build --architecture i386 --basetgz /var/cache/pbuilder/base-i386.tgz xxxx_y.y.y-y.dsc

Une fois la compilation et l’empaquetage terminé, placez vous dans le dossier /var/cache/pbuilder/result/. Vous devriez trouver un ou plusieurs paquets suivant ce que vous venez de compiler.

Compilation depuis les sources décompressées

Si vous ne possédez pas encore de fichier .dsc, vous pouvez vous placer dans le dossier de votre paquet source, à condition d’avoir le dossier debian contenant les règles. Vous pouvez créer ce dossier debian, mais je ne vais pas vous le décrire ici car ce n’est pas l’objet de ce guide. Un guide complet est disponible ici.

https://www.debian.org/doc/manuals/maint-guide/index.fr.html

Une fois placé dans votre dossier, tapez la commande suivante pour lancer la fabrication des paquets.

pdebuild --use-pdebuild-internal -- --basetgz /var/cache/pbuilder/base-amd64.tgz

Attention, les paquets compilés ne se retrouvent pas dans /var/cache/pbuilder/result comme précédemment, mais dans le dossier parent au dossier dans lequel vous avez votre code source

Pour la version i386, vous avez le choix ensuite soit de lancer la commande pdebuild en utilisant la base i386, soit d’utiliser pbuilder sur le fichier dsc qui est maintenant géré dans le dossier parent de votre code source.

Dans le cas ou votre paquet contruit des paquets all (c’est à dire installable sur n’importe quelle architecture processeur) et en même temps de paquets dépendant du processeur, vous pouvez indiquez à pbuilder ou pdebuild de ne construire que les paquets non all.

pdebuild --use-pdebuild-internal -debbuildopts -B -- --basetgz /var/cache/pbuilder/base-amd64.tgz

Signer vos paquets

Une fois vos paquets terminés et prêt à l’emploi, vous serez certainement intéressés par signer vos paquets. Habituellement, vos paquets sont signés automatiquement en utilisant votre email depuis le fichier changelog. Hors dans le cas d’un portage, vous n’êtes certainement pas le mainteneur du paquet et vous n’avez pas changé le fichier changelog. Mais vous pouvez signer simplement vos paquets à l’aide de la commande suivante.

debsign -e monmail@example.com xxxx_y.y.y-y_zzzz.changes

Tags: