Un serveur Monotone sur Ada-France

Le samedi 23 septembre 2006.
Comme chacun sait, les scripts de tous les paquets Debian sont publics ; ils font partie des paquets sources publiés sur les serveurs. Il est désormais plus facile de participer à leur entretien et à leur amélioration grâce à Monotone.

Qu’est-ce qu’un paquet source ?

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. L’arborescence 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 à l’arborescence 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 ; c’est 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 :


$ tar xzf {paquet}_{version}.orig.tar.gz
$ 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 d’autres, sont automatisées par apt-get :


$ apt-get source --build {paquet}

Mais où est le problème ?

Avec la commande ci-dessus, vous pouvez télécharger et recompiler n’importe quel paquet Debian, tel qu’il 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 d’anciennes versions des scripts de compilation
-  utiliser des scripts non encore publiés dans l’archive 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 d’ouvrir 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.

Le contrôle des versions

Un système de contrôle de versions permet de rendre l’entretien des scripts de compilation public. C’est une condition indispensable au travail en équipe. Pour les paquets Ada, j’aimerais susciter l’émergence d’une é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 j’ai donc absolument besoin d’un système de contrôle des versions distribué. Après voir évalué plusieurs candidats, j’ai choisi Monotone.

Pourquoi Monotone ?

À mon sens, Monotone est aux systèmes de contrôle des versions ce qu’Ada est aux langages de programmation ; il n’est 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 qu’utilisant 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, m’ont convaincu d’utiliser Monotone quotidiennement depuis plusieurs mois pour tous mes paquets Debian.

Une base de données Monotone se compose d’un seul fichier ; c’est donc très pratique pour la maintenance.

Qu’y a-t-il dans la base de données ?

La base de données d’Ada-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 d’environ 1,7 méga-octets.

À la date d’aujourd’hui, mtn list branches me donne :

org.debian.adacontrol
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. J’utilise 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, s’ils ne sont pas encore publiés, sur celui d’Ada-France : http://www.ada-france.org/debian/pool.

Comment accéder au référentiel d’Ada-France ?

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

(j’aime bien mettre toutes mes bases de données dans /var/lib/monotone/, mais vous pouvez mettre votre base de données n’importe 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 :


$ tar xzf {paquet}_{version}.orig.tar.gz
$ 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 d’Ada-France.

Je n’accepterai de vous accorder la permission d’écrire que si je sais qui vous êtes :) donc, vous aurez besoin d’une 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 n’avez 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).

Ludovic Brenta est le responsable bénévole de la plupart des paquets Ada dans Debian depuis juillet 2003. Vous pouvez le joindre par email : lbrenta@debian.org.


Forum de l'article