Chapitre 6. Construction du paquet

Table des matières

6.1. Reconstruction complète
6.2. Serveurs d'empaquetage automatique (« autobuilder »)
6.3. Commande debuild
6.4. Paquet pbuilder
6.5. Commande git-buildpackage et similaires
6.6. Reconstruction rapide
6.7. Command hierarchy

Tout devrait maintenant être prêt pour construire le paquet.

Pour réaliser correctement la reconstruction complète d'un paquet, doivent être installés :

Ensuite, exécutez la commande suivante dans le répertoire des sources :

$ dpkg-buildpackage -us -uc

Ceci fera tout le nécessaire pour créer entièrement les paquets binaires et source à votre place :

  • nettoyage de l'arbre des sources (debian/rules clean) ;

  • construction du paquet source (dpkg-source -b) ;

  • construction du programme (debian/rules build) ;

  • construction des paquets binaires (fakeroot debian/rules binary) ;

  • make the .dsc file

  • make the .changes file, using dpkg-genchanges

If the build result is satisfactory one, sign the .dsc and .changes files with your private GPG key using the debsign command. You need to enter your secret pass phrase, twice. [64]

Pour un paquet Debian non natif, par exemple gentoo, vous verrez les fichiers suivants dans le répertoire parent (~/gentoo) après la construction des paquets :

  • gentoo_0.9.12.orig.tar.gz

    c'est le code source amont d'origine, simplement renommé pour être conforme aux normes Debian. Il a été créé au début avec dh_make -f ../gentoo-0.9.12.tar.gz ;

  • gentoo_0.9.12-1.dsc

    This is a summary of the contents of the source code. The file is generated from your control file, and is used when unpacking the source with dpkg-source(1).

  • gentoo_0.9.12-1.debian.tar.gz

    cette archive compressée contient le répertoire debian. Tous les ajouts et modifications au code source d'origine sont conservés en tant que correctif quilt dans debian/patches.

    Si quelqu'un d'autre veut recréer le paquet depuis le début, il peut facilement le faire en utilisant ces trois fichiers. La procédure d'extraction est facile : copier simplement ces trois fichiers quelque part et exécuter dpkg-source -x gentoo_0.9.12-1.dsc ; [65]

  • gentoo_0.9.12-1_i386.deb

    c'est le paquet binaire terminé. Vous pouvez utiliser dpkg pour l'installer ou le retirer comme n'importe quel autre paquet ;

  • gentoo_0.9.12-1_i386.changes

    This file describes all the changes made in the current package revision; it is used by the Debian FTP archive maintenance programs to install the binary and source packages. It is partly generated from the changelog file and the .dsc file.

    Au fur et à mesure que vous travaillez sur le paquet, son comportement va évoluer et de nouvelles fonctionnalités seront ajoutées. Les gens qui téléchargent votre paquet peuvent lire ce fichier et voir rapidement ce qui a changé. Les programmes de maintenance des archives Debian vont aussi poster le contenu de ce fichier sur la liste de diffusion debian-devel-changes@lists.debian.org.

The gentoo_0.9.12-1.dsc and gentoo_0.9.12-1_i386.changes files must be signed using the debsign command with your private GPG key in the ~/.gnupg/ directory, before uploading them to the Debian FTP archive. The GPG signature provides the proof that these files are really yours using your public GPG key.

The debsign command can be made to sign with your specified secret GPG key ID (good for sponsoring packages) with the following in the ~/.devscripts:

DEBSIGN_KEYID=Your_GPG_keyID

Les longues chaînes de chiffres dans les fichiers .dsc et .changes sont les sommes SHA1 et SHA256 des fichiers indiqués. Les personnes téléchargeant vos fichiers peuvent les vérifier avec sha1sum(1) ou sha256sum(1), et si les fichiers ne correspondent pas, elles sauront que le fichier a été corrompu ou falsifié.

Debian gère de nombreux portages avec le réseau de serveurs d'empaquetage automatique faisant fonctionner des démons buildd sur de nombreux ordinateurs d'architectures différentes. Même si vous n'avez pas besoin de le faire vous-même, vous devriez être au courant de ce qui va arriver à vos paquets. La suite présente brièvement comment les paquets sont reconstruits sur plusieurs architectures. [66]

Les paquets Architecture: any sont reconstruits par les serveurs d'empaquetage automatique. Seront installés :

Ensuite, la commande suivante est exécutée dans le répertoire des sources :

$ dpkg-buildpackage -B

Ceci fera tout le nécessaire pour créer entièrement les paquets binaires dépendants de l'architecture sur l'architecture concernée :

  • nettoyage de l'arbre des sources (debian/rules clean) ;

  • construction du programme (debian/rules build) ;

  • construction des paquets binaires dépendants de l'architecture (fakeroot debian/rules binary-arch) ;

  • signature du fichier source .dsc, en utilisant gpg ;

  • création et signature du fichier de téléchargement .changes, en utilisant dpkg-genchanges et gpg.

C'est pourquoi votre paquet est disponible sur plusieurs architectures.

Bien qu'il soit nécessaire d'installer les paquets énumérés dans le champ Build-Depends-Indep pour l'empaquetage normal (consultez Section 6.1, « Reconstruction complète »), il n'est pas nécessaire de les installer sur le serveur d'empaquetage automatique puisqu'il ne construit que les paquets binaires dépendants de l'architecture. [67] Cette distinction entre l'empaquetage normal et celui des serveurs d'empaquetage automatique permet de déterminer si les paquets doivent être énumérés dans le champ Build-Depends ou Build-Depends-Indep du fichier debian/control (consultez Section 4.1, « control »).

You can automate the build activity around executing the dpkg-buildpackage command package further with the debuild command. See debuild(1).

The dbuild command executes the lintian command to make the static check after building the Debian package. The lintian command can be customized with the following in the ~/.devscripts:

DEBUILD_DPKG_BUILDPACKAGE_OPTS="-us -uc -I -i"
DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"

Le nettoyage des sources et la reconstruction du paquet avec un compte utilisateur est aussi simple que :

$ debuild

Le nettoyage de l'arborescence des sources est aussi simple que :

$ debuild clean

Pour un environnement de construction propre (chroot) permettant de vérifier les dépendances de construction, pbuilder est très utile. [68] Cela garantit une construction propre des sources en construction automatique sous sid pour différentes architectures et évite un erreur sérieuse FTBFS (« Fails To Build From Source » pour les échecs de construction à partir du paquet source), qui est toujours en catégorie RC (« Release Critical », bloquant la publication). [69]

Le paquet pbuilder est personnalisable de la manière suivante :

  • configuration du répertoire /var/cache/pbuilder/result accessible en écriture pour l'utilisateur ;

  • création d'un répertoire, par exemple /var/cache/pbuilder/hooks, accessible en écriture pour l'utilisateur pour y placer ses scripts hook ;

  • configuration de ~/.pbuilderrc ou /etc/pbuilderrc pour intégrer :

    AUTO_DEBSIGN=${AUTO_DEBSIGN:-no}
    HOOKDIR=/var/cache/pbuilder/hooks
    

D'abord, le système chroot local de pbuilder doit être initialisé :

$ sudo pbuilder create

Si vous possédez déjà le paquet source terminé, exécutez les commandes suivantes dans le répertoire contenant les fichiers toto.orig.tar.gz, toto.debian.tar.gz, et toto.dsc pour mettre à jour le système chroot de pbuilder et y construire les paquets binaires :

$ sudo pbuilder --update
$ sudo pbuilder --build toto_version.dsc

Les paquets nouvellement créés sans signatures GPG sont accessibles en /var/cache/pbuilder/result/ et n'appartiennent pas au superutilisateur.

Les signatures GPG des fichiers .dsc et .changes peuvent être créés avec :

$ cd /var/cache/pbuilder/result/
$ debsign foo_version_arch.changes

Si vous possédez une arborescence des sources à jour, mais n'avez pas créé le paquet source correspondant, exécutez plutôt les commandes suivantes dans le répertoire des sources avec le répertoire debian :

$ sudo pbuilder --update
$ pdebuild

Vous pouvez vous connecter à l'environnement chroot avec la commande pbuilder --login --save-after-login et le configurer à votre convenance. Cet environnement peut être sauvegardé en quittant l'invite de commande avec ^D (Contrôle-D).

La dernière version de la commande lintian peut être exécutée dans l'environnement chroot en utilisant le script hook /var/cache/pbuilder/hooks/B90lintian configuré comme suit : [70]

#!/bin/sh
set -e
install_packages() {
    apt-get -y --force-yes install "$@"
    }
install_packages lintian
echo "+++ début de lintian +++"
su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder
# utilisez ceci si vous ne voulez pas que lintian arrête la construction
#su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder
echo "+++ fin de lintian +++"

Un environnement sid à jour est nécessaire pour construire correctement les paquets destinés à sid. En pratique, sid peut parfois être victime de problèmes qui peuvent rendre non souhaitable la migration de votre système complet. Le paquet pbuilder peut vous aider à faire face à ce genre de situation.

Vous pouvez avoir besoin de mettre à jour vos paquets stable après sa publication à destination de stable-proposed-updates, stable/updates, etc. [71] Dans ces cas-là, le fait d'utiliser sid est une mauvaise excuse pour ne pas les mettre à jour au plus tôt. Le paquet pbuilder vous permet d'accéder à la plupart des distributions dérivées de Debian pour la même architecture.

Consultez http://www.netfort.gr.jp/~dancer/software/pbuilder.html, pdebuild(1), pbuilderrc(5), et pbuilder(8).

Si les développeurs amont utilisent un système de gestion de version (VCS) [72] pour maintenir leur code source, vous devriez envisager de l'utiliser. Cela rend la fusion et la sélection (« cherry-picking ») des correctifs amont plus facile. De nombreux paquets de scripts d'enrobage sont disponibles pour la construction de paquets Debian pour chaque système de gestion de version :

  • git-buildpackage : assistants pour les paquets Debian en dépôts Git ;

  • svn-buildpackage : assistants pour la maintenance de paquets Debian en dépôt Subversion ;

  • cvs-buildpackage : scripts pour paquets Debian en dépôt CVS.

L'utilisation de git-buildpackage devient assez populaire parmi les développeurs Debian pour gérer les paquets Debian avec le serveur Git sur alioth.debian.org. [73] Ce paquet fournit plusieurs commandes pour automatiser les activités d'empaquetage :

  • git-import-dsc(1) : importer un paquet Debian existant dans un dépôt Git ;

  • git-import-orig() : importer une nouvelle archive amont dans un dépôt Git ;

  • git-dch(1) : générer le journal des modifications Debian à partir des messages de commit Git ;

  • git-buildpackage(1) : construire des paquets Debian à partir d'un dépôt Git ;

  • git-pbuilder() : construire des paquets Debian à partir d'un dépôt Git en utilisant pbuilder ou cowbuilder.

Ces commandes utilisent trois branches pour suivre les activités d'empaquetage :

  • main pour l'arborescence de paquet Debian ;

  • upstream pour l'arborescence source amont ;

  • pristine-tar pour l'archive amont générée par l'option --pristine-tar.[74]

git-buildpackage peut être configuré dans ~/.gbp.conf. Consultez gbp.conf(5). [75]

Avec un paquet imposant, vous ne voudrez sans doute pas reconstruire depuis le début chaque fois que vous faites une petite modification à debian/rules. Pour tester, vous pouvez faire un fichier .deb sans reconstruire les sources amont comme ceci [76] :

$ fakeroot debian/rules binary

Ou faites simplement comme suit pour voir s'il y a construction ou non :

$ fakeroot debian/rules build

Une fois terminés vos ajustements, souvenez-vous de reconstruire en suivant la procédure correcte ci-dessus. Vous pouvez être incapable d'envoyer proprement si vous essayez d'envoyer des fichiers .deb construits de cette façon.

Here is a quick summary of how many commands to build packages fit together in the command hierarchy. There are many ways to do the same thing.

  • debian/rules = maintainer script for the package building

  • dpkg-buildpackage = core of the package building tool

  • debuild = dpkg-buildpackage + lintian (build under the sanitized environment variables)

  • pbuilder = core of the Debian chroot environment tool

  • pdebuild = pbuilder + dpkg-buildpackage (build in the chroot)

  • cowbuilder = speed up the pbuilder execution

  • git-pbuilder = the easy-to-use commandline syntax for pdebuild (used by gbp buildpackge)

  • gbp = manage the Debian source under the git repo

  • gbp buildpackge = pbuilder + dpkg-buildpackage + gbp

Although use of higher level commands such as gbp buildpackge and pbuilder ensures the perfect package building environment, it is essential to understand how lower level commands such as debian/rules and dpkg-buildpackage are executed under them.



[64] Cette clef GPG doit être signée par un développeur Debian pour être connecté au réseau de confiance et doit être enregistrée dans le trousseau Debian. Cela permet à vos paquets d'être acceptés dans l'archive Debian. Consultez la page de création d'une nouvelle clef GPG et le wiki Debian à propos de la signature de clef.

[65] Il est possible de ne pas appliquer les correctifs quilt du format source 3.0 (quilt) à la fin de l'extraction avec l'option --skip-patches. Sinon, il est aussi possible d'exécuter dquilt pop -a après l'extraction normale.

[66] Le véritable réseau de serveurs d'empaquetage automatique a un fonctionnement autrement plus compliqué que celui présenté ici. De tels détails sortent du cadre de ce document.

[67] contrairement à celui du paquet pbuilder, l'environnement chroot du paquet sbuild utilisé par les serveurs d'empaquetage automatique n'est pas forcément minimal et plusieurs paquets peuvent rester installés.

[68] Comme le paquet pbuilder est en constante évolution, vous devriez vérifier les possibilités réelles de la configuration en consultant la dernière documentation officielle.

[69] Consultez http://buildd.debian.org/ pour obtenir plus de renseignements sur le service de construction automatique de paquets Debian.

[70] Cela suppose que HOOKDIR=/var/cache/pbuilder/hooks est déjà configuré. De nombreux exemples de scripts hook sont disponibles dans le répertoire /usr/share/doc/pbuilder/examples.

[71] Il existe des restrictions pour de telles mises à jour de paquet stable.

[72] Consultez Systèmes de contrôle de version pour obtenir plus de renseignements.

[73] Le wiki Debian sur Alioth documente la façon d'utiliser le service alioth.debian.org.

[74] L'option --pristine-tar invoque la commande pristine-tar qui peut générer une copie exacte de l'archive amont d'origine en n'utilisant qu'un petit fichier de delta binaire et le contenu de l'archive amont, qui est normalement gardé dans une branche upstream du système de gestion de version.

[75] Voici quelques ressources disponibles sur la toile pour les utilisateurs avancés :

[76] Les variables d'environnement qui devraient normalement être configurées correctement à cette étape ne sont pas configurées par cette méthode. Ne créez jamais de vrai paquets pour l'envoi avec cette méthode rapide.