Un paquet source dans Debian se compose de trois fichiers :
paquet_version.orig.tar.gz contient les sources non modifiées (dites sources « amont ») du programme ou de la bibliothèque empaquetée. Larborescence de fichiers commence obligatoirement au répertoire paquet-version.orig. (noter le tiret au lieu du blanc souligné).
paquet_version-révision.diff.gz est une rustine compressée qui, appliquée à larborescence de fichiers ci-dessus, apporte les scripts de compilation et autres fichiers spécifiques à Debian, ainsi que les changements faits par le responsable du paquet. En particulier, le fichier exécutable debian/rules construit le paquet ; cest en général un Makefile.
paquet_version-révision.dsc contient les sommes de contrôle MD5 des deux fichiers ci-dessus, et est signé par la clé GPG privée du responsable du paquet.
Pour compiler un paquet Debian, il faut donc faire :
$ zcat {paquet}_{version}-{révision}.diff.gz | patch -p0
$ mv {paquet}-{version}.orig {paquet}-{version}
$ cd {paquet}-{version}
$ debian/rules binary
Toutes ces étapes, et dautres, sont automatisées par apt-get : $ apt-get source --build {paquet}
Avec la commande ci-dessus, vous pouvez télécharger et recompiler nimporte quel paquet Debian, tel quil se trouve dans votre version (stable, en test, instable, ou expérimentale). Vous pouvez modifier les scripts de compilation ou appliquer des rustines aux sources amont. Mais vous ne pouvez pas :
utiliser danciennes versions des scripts de compilation
utiliser des scripts non encore publiés dans larchive Debian, et qui sont en cours de mise au point
proposer vos changements de façon simple et sûre au responsable du paquet (la manière officielle est douvrir un rapport de bogue).
De nombreux paquets Debian sont entretenus par des équipes plutôt que par des personnes isolées. Tous les problèmes ci-dessus deviennent critiques dans ce contexte.
Un système de contrôle de versions permet de rendre lentretien des scripts de compilation public. Cest une condition indispensable au travail en équipe. Pour les paquets Ada, jaimerais susciter lémergence dune équipe en rendant mes scripts publics.
De nombreux paquets Debian sont maintenus sur Alioth au moyen de Subversion, GNU Arch, Bazaar-NG ou GIT.
Pour ma part, je travaille surtout dans le train, sans accès au réseau, et jai donc absolument besoin dun système de contrôle des versions distribué. Après voir évalué plusieurs candidats, jai choisi Monotone.
À mon sens, Monotone est aux systèmes de contrôle des versions ce quAda est aux langages de programmation ; il nest donc que trop approprié pour Ada-France. Monotone est, par construction, sûr, correct et puissant. Il utilise des clés cryptographiques pour authentifier les changements. Il est écrit par des programmeurs délite qui, bien quutilisant le langage C++, ont l« attitude Ada » : pas de pointeurs, une assertion toutes les 9 lignes de code, des génériques (templates) à foison, et pas un seul bogue critique depuis trois ans. Cette présentation, ainsi que mes propres essais, mont convaincu dutiliser Monotone quotidiennement depuis plusieurs mois pour tous mes paquets Debian.
Une base de données Monotone se compose dun seul fichier ; cest donc très pratique pour la maintenance.
La base de données dAda-France est une réplique de celle sur laquelle je travaille tous les jours. Elle contient une branche différente pour chaque paquet ; chaque version publiée de chaque paquet est en outre étiquetée. Vous pourrez voir tous les changements, commentés, depuis le début de mon activité dans Debian. La taille de la base de données est denviron 1,7 méga-octets.
À la date daujourdhui, mtn list branches me donne :
org.debian.asis
org.debian.asis-doc
org.debian.asis.2005
org.debian.gnat-gdb
org.debian.gnat-glade
org.debian.gnat-gps
org.debian.libaunit
org.debian.libaws
org.debian.libflorist
org.debian.libgtkada2
org.debian.libopentoken
org.debian.libtemplates-parser
org.debian.libtexttools
org.debian.libxmlada1
org.debian.libxmlada2
La liste des étiquettes (mtn list tags) serait trop longue pour cet article.
Dans chaque branche se trouve une arborscence de fichiers avec un sous-répertoire debian et, en général, un répertoire patches. Jutilise Quilt pour tenir ces rustines à jour.
Donc, en créant une copie de travail (checkout) dans un répertoire qui contient les sources « amont » non modifiées, vous êtes prêt à compiler le paquet.
La base de données ne contient pas les fichiers .orig.tar.gz, qui sont par ailleurs disponibles soit dans les serveurs Debian, soit, sils ne sont pas encore publiés, sur celui dAda-France : http://www.ada-france.org/debian/pool.
Si vous voulez lire la base de données :
installez Monotone, version 0.26 ou supérieure (le serveur est pour le moment en version 0.28).
créez une paire de clés (publique/privée) : $ mtn genkey {votre.adresse@email}
créez une base de données : $ mtn --db=debian.mtn db init
(jaime bien mettre toutes mes bases de données dans /var/lib/monotone/, mais vous pouvez mettre votre base de données nimporte où).
répliquez toutes les branches commençant par org.debian : $ mtn --db=debian.mtn pull www.ada-france.org 'org.debian.*'
Créez une copie de travail :
$ mv {paquet}-{version}.orig {paquet}-{version}
$ cd {paquet}-{version}
$ mtn --db=../debian.mtn checkout --branch=org.debian.{paquet} .
Vous pouvez maintenant construire le paquet, modifier les sources, et même faire un commit dans votre base de données. Vous pouvez créer une sous-branche si vous désirez que vos changement restent séparés.
(Toutes les commandes ci-dessus peuvent être abrégées : -d pour --db=, -b pour --branch=, etc. Le paramètre --db est inutile si vous êtes dans une copie de travail : la copie de travail sait où se trouve votre base de données).
Pour accéder à la base de donnés en écriture :
Comme expliqué ci-dessus, vous pouvez écrire dans votre propre base de données, mais si vous voulez me proposer vos changements automatiquement, vous voudrez écrire dans la base de données dAda-France.
Je naccepterai de vous accorder la permission décrire que si je sais qui vous êtes :) donc, vous aurez besoin dune paire de clés GPG, signée et membre du Réseau de Confiance de Debian en plus de votre paire de clés Monotone. Vous navez pas besoin dêtre responsable Debian, mais vous devez vous identifier.
extrayez votre clé publique de votre base de données : $ mtn --db=debian.mtn pubkey {votre.adresse@email} > ma_cle_publique
Le fichier ma_cle_publique est un simple fichier texte, très court.
envoyez-moi votre clé dans un courrier électronique signé par votre clé GPG.
attendez que je vous réponde pour vous dire que vous pouvez maintenant écrire dans la base de données.
répliquez vos changements : $ mtn --db=debian.mtn push
(la base de données sait où se trouve la base dont elle provient ; vous pouvez changer cela et « pousser » vers une autre base de données si vous le désirez).