4 astuces pour maintenir un paquet Debian « 3.0 (quilt) » dans un système de suivi de versions (VCS)

La plupart des paquets Debian sont gérés grâce à un logiciel de gestion de versions (VCS – Version Control System) tel que git, subversion, bazaar ou mercurial. Les particularités du format « 3.0 (quilt) » ne sont pas sans conséquences sur la gestion des paquets dans un VCS, et cet article va vous présenter quelques astuces afin d’en rendre l’usage plus agréable.

(Tous les exemples présentés ci-dessous s’appuient sur l’utilisation de git comme VCS).

1. Exclusion du répertoire .pc

Le répertoire .pc est utilisé par quilt afin de stocker ses données internes (liste des patchs appliqués, sauvegarde des fichiers modifiés). Il est également créé par dpkg-source de telle sorte que quilt « sache » que les patchs sont situés dans debian/patches (et non dans patches, qui est le répertoire que quilt utilise par défaut). À ce titre, le répertoire est conservé même lorsque plus aucun patch n’est actuellemement appliqué.

Vous ne tenez cependant pas à conserver ce répertoire dans votre dépôt : il doit donc être mentionné dans la liste des fichiers exclus. Avec git, il suffit d’indiquer :

$ echo ".pc" >>.gitignore
$ git add .gitignore
$ git commit -m "Ignore quilt dir"

Le fichier .gitignore n’étant pas pris en compte par dpkg-source, le paquet source généré par ce dernier ne sera pas « pollué ».

2. Retirer les patchs après la compilation

Si vous stockez vos sources « amont » avec les patchs non appliqués (ce que font la plupart des gens) et que vous ne compilez pas vos paquets dans un répertoire temporaire prévu à cet effet, alors vous souhaitez probablement « désappliquer » les patchs après la compilation, de sorte à retrouver un dépôt dans un état « propre ».

C’est désormais le comportement par défaut de dpkg-source. S’il a dû appliquer les patchs, il les enlèvera automatiquement également.

Mais on peut tout de même forcer ce comportement en ajoutant « unapply-patches » à debian/source/local-options :

$ echo "unapply-patches" >>debian/source/local-options
$ git add debian/source/local-options
$ git commit -m "Unapply patches after build"

svn-buildpackage compilant systématiquement dans un répertoire temporaire, le dépôt est laissé exactement dans le même état qu’avant la compilation : cette option est inutile dans ce cas. Ce comportement peut également être demandé à git-buildpackage grâce à l’option --git-export-dir=../build-area/ (../build-area/ étant le répertoire utilisé par svn-buildpackage, cette option force git-buildpackage à se comporter comme svn-buildpackage).

3. Gérer vos patchs quilt comme une branche git

Plutôt que de gérer les patchs spécifiques à Debian via quilt, il est possible d’utiliser git lui-même. Avec git-buildpackage vient l’outil gbp-pq (Git-BuildPackage Patch Queue – File des patchs de git-buildpackage). gbp-pq permet l’export d’une série quilt dans une branche git, que vous pouvez alors manipuler comme vous le souhaitez. Chaque commit représentant un patch, vous devez « rebaser » cette branche afin d’éditer les commits intermédiaires. Jetez un oeil à la documentation de gbp-pq pour appronfondir le sujet.

Alternative à gbp-pq, l’utilisation de git-dpm est plus compliquée, mais présente l’avantage de conserver l’historique de toutes les branches utilisées pour générer les séries quilt de toutes les publications Debian. Son principe de fonctionnement est très bien expliqué sur son site, et vous pouvez également souhaiter lire la revue qu’en a fait Sam Hartman, qui en présente les limites.

4. Documenter la manière de passer en revue les modifications

L’un des principaux bénéfices liés à l’utilisation du nouveau format source tient au fait qu’il est dorénavant simple de passer en revue les modifications amont : celles-ci sont conservées en autant de patchs distincts proprement documentés (et, idéalement, en utilisant le format DEP-3). En utilisant les outils décrits précédemment, le message de commit devient l’en-tête du patch. Il devient donc important de saisir des messages de commit explicites.

Cette méthode fonctionne bien tant que votre méthode de travail prend appui sur les patchs Debian, regroupés dans une branche que vous rebasez sur les sources amont à chaque publication. Certains mainteneurs n’aiment pas cette méthode de travail et préfèrent voir appliquer les modifications propres à Debian directement sur la branche d’empaquetage. Ils sautent alors vers une nouvelle version amont en la fusionnant dans cette dernière. Il est difficile dans ce cas de générer une série quilt à partir du système de suivi de versions. Il faut à la place indiquer à dpkg-source de stocker toutes les modifications dans un seul patch (qui devient alors équivalent au bon vieux .diff.gz), et documenter dans son en-tête comment mieux passer en revue les modifications, par exemple dans l’interface Web du VCS.

Le premier comportement est obtenu en passant l’option --single-debian-patch, et le second en écrivant l’en-tête dans debian/source/patch-header :

$ echo "single-debian-patch" >> debian/source/local-options
$ cat >debian/source/patch-header <<END
This patch contains all the Debian-specific
changes mixed together. To review them
separately, please inspect the VCS history
at http://git.debian.org/?=collab-maint/foo.git
<Put more details here>
END

Ceci est une traduction de mon article 4 tips to maintain a “3.0 (quilt)” Debian source package in a VCS contribuée par Weierstrass01. Vous voulez d’autres tutoriels comme celui-ci ? Cliquez ici pour vous abonner à ma newsletter et recevoir les nouveaux articles par email.

Mes activités Debian en décembre 2011

Voici le récapitulatif mensuel de toutes mes activités gravitant autour de Debian. Si vous faites partie des personnes ayant fait un don pour soutenir mon travail (364,18 €, merci à tous !), c’est l’occasion de constater ce que je fais de votre argent. Sinon, c’est toujours quelques nouvelles intéressantes sur l’avancement de mes différents projets.

dpkg et multiarch

J’avais quelques espoirs d’obtenir pour Noël, dans Sid, une version de dpkg supportant multi-arch. L’objectif était jugé réaliste par Guillem, mais celui-ci tomba malade… ce qui nous renvoie à ce mois de janvier, où rien n’a vraiment avancé.

La taille de sa branche pu/multiarch/master n’a pas vraiment diminué, et ce alors que certains de ses commits de décembre concernaient le support multi-architecture. Il nous en reste encore 36 à intégrer, et la majorité du travail qu’il a réalisé s’apparente à de la re-factorisation de bouts de code déjà intégrés. Il a également lancé plusieurs discussions concernant des changements d’interface. J’y ai participé, avec l’espoir de pouvoir de les amener à une conclusion rapide.

De mon côté, je maintiens toujours ma propre branche pu/multiarch/full, dérivée de celle de Guillem, mais augmentée de correctifs supplémentaires que j’ai réalisés, mais qui n’ont pas encore été intégrés. De plus, ma branche n’inclut pas une des modifications de Guillem : sa branche autorise en effet la mise à jour croisée de paquets entre architectures, tandis que dpkg ne gère pas encore correctement cette fonctionnalité.

J’ai commencé à travailler sur ce projet il y a un an déjà, et je ne peux qu’espérer que ce mois de janvier verra la conclusion de cette histoire sans fin. :-|

Travaux divers concernant dpkg

J’ai revu (et plus tard intégré) un patch de Kees Cook améliorant dpkg-buildflags de sorte que ce dernier puisse faire état des options de compilation renforcée activées. Cette fonctionnalité pourra ainsi permettre à des outils tels que lintian de détecter les options de compilation renforcée manquantes.

J’ai encadré/guidé Gianluca Ciccarelli qui essaye d’améliorer dpkg-maintscript-helper afin de gérer correctement le remplacement de répertoires par des liens symboliques, et vice-versa.

Je me suis occupé du bogue n°651993, de sorte que dpkg-mergechangelogs n’échoue plus lorsqu’il rencontre une version de changelog invalide. Je me suis également occupé du n°652414, de telle sorte que dpkg-source --commit accepte un nom de fichier relatif lorsqu’un fichier de patch lui est explicitement passé.

Guillem a également intégré un correctif que j’ai développé concernant le bogue LP n°369898.

Travaux d’empaquetage

Je me suis attelé à l’empaquetage de WordPress 3.3 dès que la version est sortie. L’upstream n’a pas mis à jour sa page de conformité à la licence GPL, ce en dépit du rapport de bogue que j’avais créé. Je me suis donc mis en chasse des sources requises, et les ai intégrées dans l’archive debian.tar.xz du paquet source Debian. C’est une solution assez brutale, mais qui présente le double avantage, d’une part, de permettre la clôture du bogue critique pour la publication n°646729 ; et d’autre part, de réintroduire les fichiers Flash écartés par le passé… ce qui est une bonne chose, dans la mesure où cet uploader à base de Flash est beaucoup plus joli que celui tirant parti du navigateur.

Quilt 0.50 est sortie après 2 ans de (lent) développement. Le paquet Debian comporte de nombreux patchs, et plusieurs de ces derniers ont du être mis à jour afin de tenir compte de cette publication. Certains d’entre eux furent heureusement intégrés upstream, mais cela ne me pris pas moins d’une matinée entière pour boucler cette mise à jour. J’ai également converti l’empaquetage de CDBS vers dh avec un mini-fichier debian/rules.

Zim 0.54 est sortie, et j’ai immédiatement mis à jour le paquet, car cette dernière version corrige un bogue qui m’ennuyait.

Revue de l’empaquetage de ledgersmb

En tant que mainteneur de sql-ledger (et utilisateur de ce logiciel pour ma comptabilité), j’espérais voir ledgersmb empaqueté, de sorte qu’il puisse tenir lieu de remplaçant pour ce premier. J’ai suivi tous les efforts déployés au fil du temps dans ce but, mais aucun n’a abouti à un véritable paquet Debian.

C’est vraiment dommage, et c’est la raison pour laquelle j’ai essayé d’y remédier en me proposant pour parrainer l’envoi du paquet. D’où une première revue de l’empaquetage. Cette revue a pris plusieurs heures, car il est nécessaire d’expliquer absolument tout ce qui n’est pas à la hauteur des standards attendus.

J’ai également créé un rapport de bogue/demande d’évolution pour le paquet lintian (cf. n°652963), suggérant que ce dernier devrait détecter les utilisations incorrectes de dpkg-statoverride (un exemple de « mauvaise » utilisation était présent dans le paquet de ledgersmb).

nautilus-dropbox

Je souhaitais fignoler les derniers détails du paquet dans les temps pour la sortie de la prochaine Ubuntu LTS, compte tenu du fait que le gel de l’import Debian est en janvier. J’ai ainsi intégré certaines des importantes corrections que je souhaitais apporter.

Le paquet Debian diverge de celui amont dans la mesure où les binaires non-libres ne sont pas installés dans $HOME, mais dans /var/lib/dropbox. Ma première correction a concerné un bogue qui avait pour effet une possession incorrecte des fichiers (normalement par root exclusivement). Décompresser le tarball en tant que root entraîne la réutilisation des informations de l’utilisateur et du groupe embarqués, informations ayant changé récemment du côté de Dropbox apparemment.

Nous avons ensuite identifié d’autres problèmes en lien avec la gestion des serveurs mandataires (proxy), cf. n°651065. J’ai également corrigé ce dernier, car il est relativement fréquent que le téléchargement initial déclenché durant la configuration du paquet échoue… et dans ce cas, il appartient à l’utilisateur de re-déclencher le téléchargement après avoir obtenu les autorisations appropriées via PackageKit. Sans mon correctif, l’usage de pkexec aurait entraîné la perte de la variable d’environnement http_proxy, et donc l’impossibilité pour l’utilisateur de télécharger à travers un serveur mandataire.

Enfin, j’ai également réorganisé les patchs spécifiques à Debian, ce afin de mieux séparer ce qui pourrait et devrait être intégré par les auteurs amonts, et ce dont ils ne veulent pas. Dropbox est malheureusement contre l’installation sous /var/lib/dropbox (et les changements qui en découlent), car ils tiennent à mettre à jour automatiquement leurs binaires non-libres.

Un point sur le livre

La traduction du Cahier de l’Admin Debian progresse : 6 chapitres sont déjà traduits (bien que non encore relus).

Sa campagne de libération, quant à elle, avance (lentement). Grâce à 90 nouveaux donateurs, la somme collectée est passée de 60 (début décembre) à 67% de la somme visée !

Merci

Au mois prochain pour un nouveau résumé de mes activités !

Ceci est une traduction de mon article My Debian Activities in December 2011 contribuée par Weierstrass01.

Mes activités Debian en novembre 2011

Mon résumé mensuel est toujours un on moyen d’avoir les dernières nouvelles des projets Debian sur lesquels je travaille. Ce mois-ci un backport de dpkg, la continuation du travail sur multiarch, du triage de bogues, plusieurs envois de paquets, la traduction d’un chapitre de mon livre et plus encore.

[Continue reading…]

Le Cahier de l’Admin Debian Squeeze est disponible

Découvrez les nouveautés de la cinquième édition du Cahier de l’Admin Debian qui couvre désormais Debian 6.0 « Squeeze », et participez à la libération de sa traduction anglaise à venir.

[Continue reading…]

Mes activités Debian en octobre 2011

Voici le récapitulatif mensuel de toutes mes activités gravitant autour de Debian. Si vous faites partie des personnes ayant fait un don pour soutenir mon travail (130,30 €, merci à tous !), c’est l’occasion de constater ce que je fais de votre argent. Sinon, c’est toujours quelques nouvelles intéressantes sur l’avancement de mes différents projets. [...]

[Continue reading…]

Ne créez pas votre paquet Debian avec dpkg -b

L’usage direct de dpkg –build traduit souvent une méconnaissance de la méthode préconisée pour créer un paquet Debian. Découvrez la bonne méthode dans cet article.

[Continue reading…]