Réseau de serveurs d'empaquetage automatique
Le réseau de serveurs d'empaquetage automatique est un développement de Debian qui s'occupe des empaquetages de paquet pour toutes les architectures que Debian gère actuellement. Ce réseau est constitué de plusieurs serveurs qui utilisent un programme empaqueté dédié appelé buildd afin de récupérer des paquets depuis l'archive Debian et les empaqueter pour l'architecture cible.
Pourquoi le réseau de serveurs d'empaquetage automatique est-il nécessaire ?
Le réseau de serveurs d'empaquetage automatique fournit une fonction de construction de paquet sécurisée pour toutes les architectures prises en charge. La distribution Debian gère plusieurs architectures et les responsables de paquet n’ont souvent pas accès aux machines nécessaires pour toutes les architectures. D’un autre côté, Debian désormais exige que les paquets binaires ordinaires soient générés à partir du code source dans un environnement de construction contrôlé (à travers l’exigence de téléversement uniquement de source) pour éviter l’introduction de paquets binaires contrefaits de manière malveillante par des développeurs humains. Le réseau de serveurs d’empaquetage automatique prend le code source du paquet et construit automatiquement les paquets binaires pour chacune des architectures prises en charge. Les échecs sont suivis dans la base de données de constructions automatiques.
Le réseau de serveurs d’empaquetage automatique facilite le travail des responsables des portages de Debian. Quand le projet Debian/m68k (le premier portage non-Intel) a débuté, ses développeurs devaient surveiller les nouvelles versions de paquets et les empaqueter à nouveau s'ils souhaitaient rester à jour avec la distribution Intel. Tout ceci était fait à la main : les développeurs surveillaient sur la liste de diffusion les envois de nouveaux paquets et les récupéraient pour les construire. Afin qu'aucun paquet ne soit construit deux fois, la coordination se faisait par des annonces sur la liste de diffusion. Évidemment, cette procédure menait à des erreurs et prenait du temps. Ce fut pourtant pendant longtemps la méthode habituelle pour maintenir les distributions non-i386 à niveau.
Le système d'empaquetage automatise la plupart de ces processus. Il consiste en une série de scripts (écrits en Perl et Python) qui ont évolué à travers le temps pour aider les porteurs dans diverses tâches. Ils ont finalement développé un système capable de maintenir à niveau presque automatiquement les distributions Debian. Les mises à jour de sécurité sont construites sur le même jeu de machines pour s'assurer de leur disponibilité en temps utile.
Comment fonctionne le service d'empaquetage « buildd » ?
Buildd est le nom usuel que l'on donne aux programmes utilisés par le réseau de serveurs d'empaquetage automatique, mais il est en réalité constitué de différentes parties :
- wanna-build
- Un outil qui aide à la coordination du (ré)empaquetage de paquet à travers une base de données qui maintient une liste des paquets et de leurs statuts. Il y a une base de données centrale par architecture qui stocke les états, les versions et quelques autres informations sur les paquets. Elle est alimentée avec les fichiers Sources et Packages récupérés des diverses archives Debian (par exemple ftp-master et security-master).
- buildd
- Un démon qui vérifie périodiquement la base de données maintenue par wanna-build et appelle sbuild pour construire les paquets. Dès que le journal de construction a été validé par l'administrateur, le paquet est envoyé dans l'archive adéquate.
- sbuild
- Cette partie est responsable de la construction effective des paquets dans des « chroots ». Elle s'assure que toutes les dépendances nécessaires des sources sont installées avant la construction puis appelle les outils standards de Debian pour commencer le processus de construction. Les journaux de construction sont envoyés sur la base de données des journaux de construction.
Toutes ces parties contribuent ensemble à faire fonctionner le réseau de serveurs d'empaquetage.
Que doit faire un développeur Debian ?
Dans les faits, le développeur Debian moyen n'a rien à faire explicitement pour utiliser le service d'empaquetage. À chaque fois qu'il envoie un paquet à l'archive (un binaire compilé pour une architecture donnée), celui-ci est ajouté à la base de données de toutes les architectures (dans l'état Needs-Build). Les serveurs d'empaquetage enverront des requêtes à la base de données pour les paquets qui sont dans cet état, et prendront habituellement les paquets de cette liste. La liste est priorisée par état de compilation précédent (soit out-of-date, soit uncompiled), priorité, section et nom de paquet. De plus, pour éviter de laisser moisir des paquets en fin de queue, les priorités sont ajustées dynamiquement en fonction du temps passé dans la file d'attente.
Si l'empaquetage réussit sur toutes les architectures, les responsables n'auront rien à faire. Tous les paquets binaires produits seront envoyés sur le site principal de l'architecture. Si l'empaquetage échoue, le paquet entrera dans un état spécial (Build-Attempted en cas d'erreurs de construction qui n'ont pas été vérifiées, Failed en cas d'erreurs vérifiées et de bogues soumis au paquet ou Dep-Wait, s'ils nécessitent des dépendances spécifiques qui ne sont pas disponibles). Les administrateurs des serveurs d'empaquetage automatique examineront les paquets dont l'empaquetage échoue et rapporteront cet échec au responsable, habituellement par l'ouverture d'un bogue dans le système de suivi des bogues.
Parfois, un paquet met du temps à être empaqueté pour une architecture donnée et cela bloque son entrée dans testing. Si un paquet retarde une transition, les priorités sont normalement ajustées à la demande de l'équipe en charge de la publication. Les autres requêtes seront refusées puisque la priorité augmente automatiquement en fonction du temps passé dans la file d'attente.
Vous pouvez vérifier le statut des différentes tentatives d'empaquetage des paquets qui appartiennent à n'importe quel responsable donné en jetant un œil aux journaux des services d'empaquetage. Ces journaux sont aussi liés aux pages récapitulatives des responsables de paquets.
Pour plus d'informations sur les différents états que peut prendre un paquet, veuillez lire wanna-build-states.
Où puis-je trouver des informations additionnelles ?
Bien entendu, la documentation et le code source disponibles pour ces différents outils sont le meilleur moyen de bien comprendre comment fonctionne le réseau d'empaqueteurs. Par ailleurs, la section Portage de la Référence du développeur Debian fournit des informations complémentaires sur la manière dont cela fonctionne et elle fournit aussi quelques informations sur les empaqueteurs et les outils de portage qui sont impliqués dans les processus d'installation et de maintenance du réseau de serveurs d'empaquetage.
Quelques statistiques sur le réseau de serveurs d'empaquetage sont disponibles sur les pages de statistiques des serveurs d'empaquetage.
Comment puis-je mettre en place mon propre nœud d'empaquetage automatique ?
Il peut y avoir plusieurs raisons pour qu'un développeur (ou qu'un utilisateur) veuille mettre en place et faire fonctionner un service d'empaquetage automatique :
- afin d'aider au développement d'un portage vers une architecture donnée (quand des serveurs d'empaquetage automatique sont nécessaires) ;
- afin d'évaluer l'impact d'une optimisation de compilateur ou d'un patch donnés sur le réempaquetage d'un large panel de paquets ;
- afin de lancer des outils d'analyse des paquets pour débusquer des erreurs connues et qui doivent être lancés sur des paquets construits. Cela est même nécessaire lorsque l'on fait de l'analyse de code, par exemple lorsque l'on utilise dpatch pour proposer des solutions de contournement (« work-around »).
Vous pouvez lire plus d'informations sur la méthode de mise en place d'un serveur d'empaquetage automatique.
Contacter les administrateurs « buildd »
L'adresse de contact principale des responsables de wanna-build est debian-wb-team@lists.debian.org (liste de diffusion).
Les administrateurs responsables de l'empaquetage automatique pour une architecture particulière peuvent être contactés sur arch@buildd.debian.org, par exemple i386@buildd.debian.org.
Cette introduction au réseau de serveurs d'empaquetage automatique a été écrite à partir d'extraits fournis par Roman Hodek, Christian T. Steigies, Wouter Verhelst, Andreas Barth, Francesco Paolo Lovergine, Javier Fernández-Sanguino et Philipp Kern.