Table des matières
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 :
le paquet build-essential
;
les paquets énumérés dans le champ Build-Depends
(consultez Section 4.1, « control
») ;
les paquets énumérés dans le champ Build-Depends-indep
(consultez Section 4.1, « control
»).
Ensuite, exécutez la commande suivante dans le répertoire des sources :
$ dpkg-buildpackage
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
) ;
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.
La seule entrée nécessaire de votre part sera votre phrase secrète GPG, deux
fois. [64] Si vous ne construisez des
paquets Debian que pour votre utilisation locale, vous pouvez passer les
demandes de signatures GPG des fichiers .dsc
et
.changes
comme ceci :
$ dpkg-buildpackage -us -uc
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
c'est un résumé du contenu du code source. Il est créé à partir du fichier
control
, et est utilisé pour décompresser les sources
avec dpkg-source(1). C'est un fichier signé avec GPG,
de sorte que les gens peuvent être sûrs qu'il s'agit bien du vôtre ;
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
ce fichier décrit toutes les modifications effectuées dans la révision
actuelle du paquet, et est utilisé par les programmes de maintenance des
archives FTP Debian pour y installer les paquets binaires et sources. Il est
partiellement créé à partir des fichiers changelog
et
.dsc
. Ce fichier est signé avec GPG, de sorte que les
gens peuvent être sûrs qu'il s'agit bien du vôtre.
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.
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é.
Pour un paquet Debian natif, par exemple monpaquet
, vous verrez les fichiers suivants
dans le répertoire parent après la construction des paquets :
monpaquet_1.0.tar.gz
c'est l'archive compressée du code source créé à partir du répertoire
monpaquet-1.0
par la commande
dpkg-source (il ne se termine pas par
orig.tar.gz
) ;
monpaquet_1.0.dsc
c'est un résumé du contenu du code source comme dans un paquet Debian non natif (il n'y a pas de révision Debian) ;
monpaquet_1.0_i386.deb
c'est le paquet binaire terminé comme dans un paquet Debian non natif (il n'y a pas de révision Debian) ;
monpaquet_1.0_i386.changes
ce fichier décrit toutes les modifications effectuées dans la version actuelle du paquet comme dans un paquet Debian non natif (il n'y a pas de révision Debian).
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 :
le paquet build-essential
;
les paquets énumérés dans le champ Build-Depends
,
(consultez Section 4.1, « control
»).
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
»).
Vous pouvez automatiser encore plus le processus de construction de la commande dpkg-buildpackage avec la commande debuild, consultez debuild(1).
La configuration de la commande debuild peut être faite
via /etc/devscript.conf
ou
~/.devscript
. Les entrées suivantes sont suggérées :
DEBSIGN_KEYID=Votre_ID_cle_GPG DEBUILD_LINTIAN_OPTS=-i -I --show-overrides
Ainsi, les paquets seront signés avec votre identifiant de clé GPG (bon pour les paquets parrainés) et vérifiés en détail avec la commande lintian.
Le nettoyage des sources et la reconstruction du paquet avec un compte utilisateur est aussi simple que :
$ debuild
Ici, si vous ne construisez des paquets Debian que pour votre utilisation
locale, vous pouvez passer les demandes de signatures GPG des fichiers
.dsc
et .changes
comme ceci :
$ debuild -us -uc
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
,
accessible en écriture pour l'utilisateur pour y placer ses scripts hook ;
/var/cache/pbuilder/hooks
configuration de ~/.pbuilderrc
ou
/etc/pbuilderrc
pour intégrer :
AUTO_DEBSIGN=${AUTO_DEBSIGN:-yes}
HOOKDIR=/var/cache/pbuilder/hooks
Les paquets créés seront alors signés avec votre clé GPG du répertoire
~/.gnupg/
.
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
, et
toto
.debian.tar.gz
pour mettre à jour
le système chroot de toto
.dscpbuilder
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/ $ debsigntoto_version
.dsc $ debsigntoto_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
Ici, si vous ne construisez des paquets Debian que pour votre utilisation
locale, vous pouvez passer les demandes de signatures GPG des fichiers
.dsc
et .changes
comme ceci :
$ AUTO_DEBSIGN=no 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
configuré comme suit : [70]
/var/cache/pbuilder/hooks
/B90lintian
#!/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.
[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 :
Construction de paquets Debian avec git-buildpackage
(/usr/share/doc/git-buildpackage/manual-html/gbp.html
) ;
Utilisation de TopGit pour créer un ensemble quilt pour l'empaquetage Debian.
[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.