La distribution de test de Debian
Pour les informations élémentaires destinées aux simples utilisateurs de la distribution de test, veuillez vous référer à la FAQ Debian.
Les simples utilisateurs et les développeurs de la distribution de test doivent savoir que les mises à jour de sécurité pour la distribution de test ne sont pas gérées par l'équipe chargée de la sécurité. Pour de plus amples informations, référez-vous à la FAQ de l'équipe chargée de la sécurité.
Cette page traite principalement de l'importance que revêt la distribution de test pour les développeurs Debian.
Comment fonctionne la distribution de test ?
La distribution de test est une distribution générée automatiquement. Elle est générée à partir de la distribution instable par un ensemble de scripts qui tentent d'intégrer les paquets qui selon toute vraisemblance ne contiennent pas de bogues critiques pour la publication. Ils s'assurent que les dépendances des autres paquets de la distribution de test soient toujours préservées.
Un paquet (ou une version particulière) sera déplacé dans la distribution de test lorsqu'il satisfera les critères suivants :
- Il doit avoir été dans la distribution instable pendant 10, 5 ou 2 jours, en fonction de l'urgence de la mise en ligne ;
- Il devra être compilé et à jour sur toutes les architectures sur lesquelles il a été compilé par le passé dans la distribution instable ;
-
Il ne doit pas avoir de rapport de bogue entrant dans
la catégorie critique pour la parution dans la prochaine distribution
qui ne concerne pas déjà la version actuellement
dans la
distribution de test
(regardez ci-dessous pour plus d'informations) ; - Toutes ces dépendances doivent soit être satisfaites par les paquets d'ores et déjà présents dans la distribution de test, ou bien être satisfaites par un ensemble de paquets qui sont installés au même instant ;
- L'opération d'installation des paquets dans la distribution de test ne doit pas casser un seul paquet actuellement dans cette distribution (regardez ci-dessous pour plus d'informations) ;
Un paquet qui satisfait aux trois premiers critères ci-dessus est un
Candidat Valide
.
Le script de mise à jour indique quand un paquet peut-être déplacé de la distribution instable vers la distribution de test. La sortie a deux formes :
- la excuses de la mise à jour [compressée] : liste l'ensemble des versions des paquets candidats et l'état de base de leur propagation dans la distribution de test. Elle est beaucoup plus digeste que :
- la sortie de la mise à jour [compressée] : sortie complète, plutôt indigeste des scripts de la distribution de test compte tenu de la récursivité des candidats.
Foire aux questions
Que sont les bogues de type critique pour l'intégration dans la
distribution (release-critical bugs), et
comment sont-ils comptabilisés ?
Tous les bogues des niveaux supérieurs de gravité appartiennent par défaut à cette catégorie (release-critical) ; actuellement, ce sont les niveaux critical, grave et serious.
De tels bogues sont présumés avoir une incidence sur l'intégration du paquet dans la distribution stable de Debian : en règle générale, si un paquet a un rapport de bogue appartenant à cette catégorie, il n'ira pas dans la distribution de test, et par conséquent ne sera pas publié dans la distribution stable.
Le décompte des bogues de testing
est effectué avec tous
les bogues critiques pour la publication marqués pour s'appliquer
à une combinaison de paquet/version disponible dans
testing
pour une architecture concernée par la publication.
Comment l'installation d'un paquet provenant de la distribution de test
peut-elle casser d'autres paquets ?
La structure des archives de la distribution est telle qu'une distribution ne peut contenir qu'une seule version d'un paquet ; un paquet est défini par son nom. Aussi lorsque le paquet source acmefoo est installé dans la distribution de test, ainsi que ses paquets binaires acme-foo-bin, acme-bar-bin, libacme-foo1 et libacme-foo-dev, la version précédente est enlevée.
Néanmoins, il se peut que l'ancienne version ait fourni un paquet binaire avec un ancien nom-so d'une bibliothèque, comme libacme-foo0. Enlever l'ancien acmefoo enlèvera également libacme-foo0, ce qui cassera tout les paquets qui en dépendent.
Évidemment, cela affecte principalement les paquets qui fournissent des ensembles de paquets binaires dans différentes versions (et principalement les bibliothèques). Néanmoins, cela concerne aussi les paquets pour lesquels des dépendances pour des versions précises ont été déclarées avec ==, <= ou <<.
Lorsque l'ensemble des paquets binaires issu d'un paquet source est modifié, tous les paquets qui dépendent des anciens paquets binaires doivent être mis à jour pour dépendre maintenant des nouveaux paquets binaires. Étant donné que l'installation d'un tel paquet source dans la distribution de test cassera tous les paquets de cette distribution qui en dépendent, il est nécessaire de prendre quelques dispositions : tous les paquets en dépendant doivent être mis à jour et être prêts à être installés pour éviter la casse, une fois que tout est prêt, une intervention manuelle du responsable de la publication ou d'un assistant est nécessaire.
Si vous êtes confronté à des problèmes complexes sur des groupes de paquets
tels qu'évoqués ci-dessus, veuillez prendre contact avec debian-devel
ou
debian-release
pour demander de l'aide.
Je ne comprends toujours pas ! Les scripts de la distribution de
test disent que ce paquet est un candidat valide, mais il n'est toujours pas
dans cette distribution.
Cela peut se produire lorsque, directement ou indirectement l'installation du paquet empêche un autre paquet de fonctionner.
N'oubliez pas de prendre en compte les dépendances de votre paquet. Considérez que votre paquet dépend de libtool, ou libtdlX. Votre paquet n'ira pas dans la distribution de test tant que la bonne version de libtool n'est pas prête à y aller aussi.
De même, elle n'y entrera pas tant que l'installation de libtool provoquera de la casse sur les paquets qui se trouvent déjà dans la distribution de test. En d'autres termes, tant que tous les paquets dépendants de libltdlY (où Y est une version précédente) n'auront pas été recompilés, et que tous les bogues de type critique pour l'intégration dans la distribution n'auront pas été corrigés, etc., aucun de ces paquets n'entrera dans la distribution de test.
Dans ce genre de situation, la sortie textuelle [gzippée] est utile : elle fournit bon nombre d'informations (qu'il faut néanmoins décoder) sur les paquets cassés lorsqu'un candidat valide est ajouté dans la distribution de test (consultez la référence du développeur pour plus de précisions).
Pourquoi est-il parfois difficile de mettre un paquet
Architecture: all dans la distribution de
test ?
Si un paquet valable pour toutes les architectures doit être installé, il doit pouvoir satisfaire l'ensemble de ses dépendances sur toutes les architectures. S'il dépend d'un paquet qui ne compile que sur un nombre limité d'architectures de Debian, il ne pourra pas être inclus.
Néanmoins, pour l'instant, la distribution de test ne vérifiera pas si le
paquet peut être installé sur les architectures non-i386 (C'est un
bidouillage grossier, je ne suis pas très fier de l'avoir fait, mais c'est comme ça
--aj).
Mon paquet est bloqué car il est dépassé sur certaines architectures.
Que dois-je faire ?
Vérifiez l'état de votre paquet dans la base de données de journaux de construction. Si le paquet ne se construit pas, il sera marqué comme failed ; analysez les comptes rendu de construction et corrigez chacun des problèmes dont l'origine se trouve votre paquet source.
Si vous constatez que certaines architectures ont construit la nouvelle version de votre paquet, mais que cela n'apparaît pas dans la sortie des scripts de la distribution de test, alors vous devrez vous armer de patience et attendre que le responsable du buildd correspondant mette en ligne le fichier dans l'archive Debian.
Si vous constatez que certaines architectures n'ont pas du tout construit la nouvelle version de votre paquet, malgré le fait que vous ayez mis en ligne une rustine pour réparer l'échec précédent, la raison est selon toute vraisemblance que votre paquet est marqué comme attendant des dépendances (Dep-Wait). Vous pouvez également regarder la liste de ce que l'on appelle en attente de construction pour vous en assurer.
Ces problèmes sont en définitive généralement corrigés, mais si vous attendez déjà depuis un bon moment (disons deux semaines et plus), notifiez le responsable des buildd concerné si une telle adresse est fournie sur la page des portages, ou sur la liste de diffusion du portage.
Si vous avez explicitement supprimé l'architecture de la liste Architecture
danns le fichier control et que le paquet avait déjà été construit pour cette
architecture, vous devez demander la suppression de l'archive des anciens
paquets binaires de cette architecture avant que votre paquet ne puisse
effectuer sa transition vers la distribution de test. Vous devez remplir un
rapport de bogue contre ftp.debian.org
demandant la suppression de
l'archive instable des paquets de l'architecture abandonnée. En général, la
liste de diffusion du portage correspondant doit en être informée par
courtoisie.
Y a-t-il des exceptions ? Je suis persuadé que acmefoo a
été intégré dans la distribution de test malgré le fait qu'il ne réponde pas
à tous les critères.
Le responsable de la publication peut transgresser les règles dans deux cas de figure :
- Il peut décider que la rupture engendrée par l'installation d'une nouvelle bibliothèque sera un bienfait, et il l'installera avec sa flottille de dépendances ;
- Il peut également enlever de façon manuelle des paquets de la distribution de test, qui autrement seraient cassés, pour pouvoir installer de nouveaux éléments.
Pouvez-vous fournir un exemple réel qui ne soit pas
trivial ?
En voici un : lorsque le paquet source apache est installé dans la distribution de test, ainsi que ses paquets binaires apache, apache-common, apache-dev et apache-doc, l'ancienne version est enlevée.
Néanmoins, tous les modules d'Apache dépendent de apache-common
(>=quelque chose), apache-common (<< quelque
chose)
, aussi ce changement cassera toutes ces dépendances. Par
conséquent, tous les modules d'Apache devront être recompilés avec la dernière
version d'Apache pour que la distribution de test soit mise à jour.
Continuons notre analyse plus avant : une fois que tous les modules ont
été mis à jour dans la distribution instable afin de fonctionner avec un nouvel
Apache, les scripts de la distribution de test testent apache-common
et se rendent compte que tous les modules d'Apache sont cassés parce qu'ils
possèdent Depends: apache-common (<< la version
actuelle
; ensuite, ils essayent
libapache-foo et trouvent qu'il ne s'installe pas parce
qu'il possède Depends: apache-common (>= la nouvelle
version)
.
Néanmoins, par la suite, les scripts appliqueront une logique différente (quelque fois provoquée par une intervention manuelle) : ils ignoreront le fait que apache-common provoque de la casse, et continueront avec les choses qui fonctionnent ; si cela ne fonctionne toujours pas, après toutes ces tentatives, tant pis ! mais peut-être que ça va fonctionner. Par la suite, ils testeront au hasard tous les paquets libapache-foo et constateront qu'ils fonctionnent.
Après que tout a été essayé, ils contrôlent le nombre de paquets qui ont été
cassés, cherchent si c'est plutôt un bien ou un mal par rapport à la situation
d'origine et soit ils acceptent tout, soit ils rejettent tout. Vous verrez
cela dans le fichier update_output.txt sur les lignes
.
recur:
Par exemple :
recur: [foo bar] baz
dit grosso modo : j'ai trouvé que foo et bar
amélioraient la situation, je vais maintenant essayer baz, même s'il
casse quelque chose pour voir ce qui se passe
. Les lignes du fichier
update_output.txt qui commencent par
indiquent les éléments qui apparaissent comme étant bénéfiques, et les lignes
accepted
les éléments qui empirent la situation.
skipped
Le fichier update_output.txt est complètement
illisible !
Ce n'est pas une question. ;-)
Prenons un exemple :
skipped: cln (0) (150+4) got: 167+0: a-40:a-33:h-49:i-45 * i386: ginac-cint, libginac-dev
Cela signifie que si cln est ajouté dans la distribution de test, ginac-cint et libginac-dev ne pourront plus être y installés sur l'architecture i386. Notez que les architectures sont contrôlées dans l'ordre alphabétique et seuls les problèmes survenants sur la première architecture en défaut sont rapportés — c'est pourquoi on voit souvent l'architecture alpha.
La ligne got
inclut le nombre de problèmes dans la distribution de test
sur différentes architectures (jusqu'à la première architecture où l'on trouve
un problème — voir ci-dessus). L'item i-45
signifie que si
cln est ajouté dans la distribution de test, il y aura 45 paquets
qui ne pourront plus être installés sur l'architecture i386. Quelques entrées
au-dessus et en dessous de cln montrent qu'il y avait 43 paquets
qui ne pouvaient pas être installés dans la distribution de test pour
l'architecture i386 à ce moment-là.
La ligne skipped: cln (0) (150+4)
signifie qu'il y a toujours
150 paquets à vérifier après ce paquet pour que le contrôle de tous les
paquets soit achevé, et que 4 paquets ont d'ores et déjà été identifiés et
ne seront pas mis à jour car ils casseraient des dépendances. Le (0)
n'est pas significatif, vous pouvez l'ignorer.
Notez qu'il y plusieurs contrôles de tous les paquets lors de l'exécution d'un script de la distribution de test.
Jules Bean est à l'origine de la foire aux questions et de ses réponses.
Informations complémentaires
Les pages suivantes donnent des informations sur l'état de la distribution de test et sur la migration des paquets de unstable vers testing :
- Les statistiques des paquets binaires ne sont pas à jour pour les distributions : de testet stable,
- les problèmes de dépendance des distributions de test et stable.
Vous serez peut être intéressé par la lecture d'un ancien courrier d' explication. Son seul défaut est de ne pas prendre en considération l'organisation en pool des paquets ; mais il a été écrit avant que cette organisation ne soit mise en place par James Troup.
Le code de testing est disponible sur la machine ftp-master.
Anthony Towns est l'auteur de l'implémentation de testing.