# 5. Gestion des paquets

Ce chapitre contient des informations relatives à la création, l'envoi, la maintenance et le portage des paquets.

## 5.1. Nouveaux paquets

Si vous voulez créer un nouveau paquet pour la distribution Debian, vous devriez commencer par consulter la liste des paquets en souffrance et paquets souhaités (« `Work-Needing and Prospective Packages` » ou `WNPP`). Vous pourrez ainsi vérifier que personne ne travaille déjà sur ce paquet et éviter un travail en double. Consultez aussi cette page si vous voulez en savoir plus.

Supposons que personne ne travaille sur le paquet que vous visez, vous devez alors envoyer un rapport de bogue (voir Signalement de bogues) concernant le pseudopaquet `wnpp`. Ce courrier devra décrire le paquet que vous projetez de créer, la licence de ce paquet et l'URL à laquelle le code source peut être téléchargé. Cette liste n'est pas limitative.

You should set the subject of the bug to `ITP:` foo `--` short description, substituting the name of the new package for foo. The severity of the bug report must be set to `wishlist`. Please send a copy to `debian-devel@lists.debian.org` by using the X-Debbugs-CC header (don't use CC:, because that way the message's subject won't indicate the bug number). If you are packaging so many new packages (>10) that notifying the mailing list in separate messages is too disruptive, send a summary after filing the bugs to the debian-devel list instead. This will inform the other developers about upcoming packages and will allow a review of your description and package name.

Veuillez ajouter « `Closes: #`nnnnn » au journal de modification (`changelog`) du nouveau paquet. Cette indication provoquera la fermeture automatique du rapport de bogue à l'installation du nouveau paquet dans l'archive (voir Fermeture des rapports de bogue lors des mises à jour).

Si vous jugez nécessaire d'ajouter des explications pour les administrateurs de la file d'attente de nouveaux paquets (`NEW`), veuillez les ajouter au fichier `changelog`, envoyer à `ftpmaster@debian.org` une réponse au message reçu en tant que responsable suite à votre envoi de paquet, ou une réponse au message de rejet si vous envoyez à nouveau le paquet.

Lors de la fermeture de bogues de sécurité, indiquez les numéros CVE en plus de « `Closes: #`nnnnn ». Cela permet à l'équipe de sécurité de suivre les failles. Si un envoi est effectué pour corriger le bogue avant que l'identifiant d'alerte soit connu, il est conseillé de modifier la mention existante du fichier `changelog` lors d'un envoi suivant. Même dans ce cas, veuillez inclure toutes les indications disponibles sur les origines de la situation dans la première entrée de `changelog`.

Les responsables sont priés d'annoncer leurs intentions pour plusieurs raisons :

- afin d'être informés si quelqu'un travaille déjà sur le paquet et pour permettre à d'autres membres de la liste de partager leur expérience ;

- si d'autres personnes envisagent de travailler sur le même paquet, elles apprendront qu'il existe un volontaire et pourront proposer de partager le travail ;

- cela permet aux autres responsables d'en apprendre plus sur le nouveau paquet que la description courte et la formule consacrée du journal de modification « `Initial release` » (publication initiale) envoyée sur `debian-devel-changes@lists.debian.org` ;

- cette information est utile aux utilisateurs d'`unstable` qui sont les premiers testeurs. Ces personnes devraient être incitées à essayer le nouveau paquet ;

- ces annonces donnent aux responsables et autres personnes intéressées une meilleure idée des évolutions et des nouveautés du projet.

Veuillez consulter https://ftp-master.debian.org/REJECT-FAQ.html pour les raisons courantes de rejet des nouveaux paquets.

## 5.2. Enregistrement des modifications

Les modifications apportées au paquet doivent être consignées dans le fichier `debian/changelog` pour être lisibles et compréhensibles par les humains. Ces notes doivent donner une description concise des changements, expliquer les raisons de ceux-ci (si ce n'est pas clair) et indiquer quels rapports de bogue ont été clos. Il faut aussi indiquer quand le paquet a été terminé. Ce fichier sera installé dans `/usr/share/doc/`paquet`/changelog.Debian.gz` ou `/usr/share/doc/`paquet`/changelog.gz` pour un paquet natif.

Le fichier `debian/changelog` a une structure précise comportant différents champs. Le champ `distribution` est décrit en Choix de distribution. Plus d'informations sur la structure de ce fichier sont disponibles dans la section « `debian/changelog` » de la Charte Debian (« `Debian Policy` »).

Certaines indications du fichier `changelog` peuvent provoquer la fermeture automatique des rapports de bogue au moment où le paquet est installé dans l'archive. Voir Fermeture des rapports de bogue lors des mises à jour.

Par convention, quand un paquet contient une nouvelle version amont, le fichier `changelog` comporte une ligne qui ressemble à :

    * New upstream release.

There are tools to help you create entries and finalize the `changelog` for release — see devscripts (command `dch`), git-buildpackage (command `gbp dch`) and dpkg-dev-el.

Voir aussi Meilleures pratiques pour debian/changelog.

## 5.3. Tests du paquet

Avant d'envoyer un paquet, il faut effectuer quelques tests essentiels. Les opérations suivantes (une ancienne version du paquet est parfois nécessaire) devraient au moins être effectuées :

- Run `lintian` over the package. You can run `lintian` as follows: `lintian -v` package-version`.changes`. This will check the source package as well as the binary package. If you don't understand the output that `lintian` generates, try adding the `-i` switch, which will cause `lintian` to output a very verbose description of the problem.

  En principe, un paquet pour lequel `lintian` renvoie des erreurs (elles commencent par `E`) ne devrait jamais être envoyé.

  Pour en savoir plus sur `lintian`, voir lintian ;

- facultativement exécuter `debdiff` (voir debdiff) pour analyser les modifications depuis une ancienne version si celle-ci existe ;

- installer le paquet et s'assurer que le logiciel fonctionne sur un système `unstable` à jour ;

- mettre à niveau le paquet à partir d'une version plus ancienne vers la nouvelle version ;'

- retirer le paquet et l'installer à nouveau ;

- l'installation, la mise à niveau et le retrait des paquets peuvent être testés manuellement ou en utilisant l'outil `piuparts` ;

- With the package installed, run `adequate <package name>` to test its installed state for policy violations. Ideally, you should automate this step using `autopkgtest` (see adequate).

- copier le paquet source dans un répertoire différent puis tenter de le décompresser et de le reconstruire. Le but est de vérifier que la construction n'utilise pas de fichiers en dehors de ceux du paquet ou des permissions non préservées sur les fichiers contenus dans le fichier `.diff.gz`.

## 5.4. Agencement du paquet source

Il existe deux types de paquets source Debian :

- les paquets natifs (« `native` ») pour lesquels il n'y a pas de distinction entre les sources d'origine et les correctifs appliqués pour Debian ;

- les paquets (plus courants) avec au moins une archive, contenant les sources d'origine, accompagnée d'un fichier, contenant les modifications pour Debian.

Pour les paquets natifs, le paquet source comprend un fichier de contrôle source Debian (`.dsc`) et l'archive source (`.tar.{gz,bz2,xz}`). Un paquet source d'un paquet non natif comprend un fichier de contrôle source Debian, l'archive source d'origine (`.orig.tar.{gz,bz2,xz}`) et les modifications Debian (`.diff.gz` pour le format source « 1.0 » ou `.debian.tar.{gz,bz2,xz}` pour le format source « 3.0 (quilt) »).

Avec le format « 1.0 », le paquet est soit natif, soit non déterminé par `dpkg-source` au moment de la construction. Il est dorénavant recommandé de déterminer explicitement le format source en écrivant « 3.0 (quilt) » ou « 3.0 (native) » dans `debian/source/format`. La suite de cette partie ne traite que les paquets non natifs.

La première fois qu'un paquet est installé dans l'archive pour une version amont donnée, le fichier `tar` de cette version amont doit être envoyé et mentionné dans le fichier `.changes`. Par la suite, ce même fichier `tar` sera utilisé pour générer les fichiers `diff` et `.dsc` et il ne sera pas nécessaire de l'envoyer à nouveau.

Par défaut, `dpkg-genchanges` et `dpkg-buildpackage` incluront le fichier `tar` amont si et seulement si la précédente modification de `changelog` mentionne une version amont différente de la précédente. Ce comportement peut être modifié en utilisant `-sa` pour l'inclure systématiquement ou `-sd` pour ne jamais l'inclure.

Si la mise à jour ne contient pas le fichier `tar` des sources d'origine, `dpkg-source` doit utiliser le même fichier `tar` que celui déjà présent dans l'archive pour construire les fichiers `.dsc` et `diff` envoyés.

Dans des paquets non natifs, les permissions des fichiers non présents dans l'archive `*.orig.tar.{gz,bz2,xz}` ne seront pas préservées, car `diff` ne stocke pas les permissions dans le correctif. Néanmoins, en utilisant le format « 3.0 (quilt) », les permissions des fichiers du répertoire `debian` seront préservées puisqu'ils seront contenus dans une archive `tar`.

## 5.5. Choix de distribution

Chaque envoi doit indiquer à quelle distribution le paquet est destiné. Le processus de construction de paquet extrait cette information à partir de la première ligne du fichier `debian/changelog` et la place dans le champ `Distribution` du fichier `.changes`.

Les paquets sont généralement téléversés dans `unstable`. Les envois dans `unstable` ou `experimental` doivent utiliser ces noms de publication dans le fichier `changelog`. Les envois pour les autres publications doivent aussi utiliser les noms de code des publications, car ils évitent toute ambiguïté.

En fait, il y a d'autres distributions possibles : nomdecode`-security`, consultez Gestion des bogues de sécurité pour plus d'informations sur celles-ci.

Il n'est pas possible d'envoyer un paquet dans plusieurs distributions en même temps.

### 5.5.1. Cas particulier : distributions `stable` et `oldstable`

Envoyer un paquet pour la distribution `stable` signifie que le paquet sera dirigé vers la file d'attente `proposed-updates-new` pour être revu par les responsables de la publication `stable`. Une fois accepté, le paquet sera installé dans le répertoire `stable-proposed-updates` de l'archive Debian. Il sera ensuite ajouté à `stable` lors de la prochaine mise à jour de la distribution.

Uploads to a supported `stable` release should target their suite name in the changelog, i.e. `trixie` or `bookworm`. You should normally use `reportbug` and the `release.debian.org` pseudo-package to send a source `debdiff`, rationale and associated bug numbers to the stable release managers, and await a request to upload or further information.

Si vous êtes certain que l'envoi sera accepté sans changement, n'hésitez pas à faire l'envoi en même temps que vous remplissez le bogue sur `release.debian.org`. Néanmoins, si vous êtes peu familier avec le processus, nous vous recommandons d'attendre l'approbation avant de faire l'envoi pour avoir la possibilité de voir si vos exigences correspondent à celle des responsables de publication.

Dans tous les cas, il faut qu'il y ait un bogue d'accompagnement pour le suivi, et votre envoi doit répondre aux critères d'acceptation définis par les responsables de publication. Ces critères ont été conçus pour faire que le processus rencontre le moins d'obstacles ou de frustration possible.

- Le bogue que vous voulez corriger dans `stable` doit être déjà corrigé dans `unstable` (et pas en attente dans `NEW` ou dans la file d'attente `DELAYED`).

- Le bogue devrait être de sévérité « important » ou plus haute.

- Les métadonnées du bogue — les versions particulièrement affectées — doivent être à jour.

- Les correctifs doivent être minimaux et pertinents et inclure une entrée de journal de modification suffisamment détaillée.

- Un `debdiff` source des modifications projetées doit être inclus dans la requête (pas uniquement les correctifs bruts ou la mention « `a debdiff can be found at $URL` »).

- The proposed package must have a correct version number (e.g. `...+deb13u1`/`...~deb13u1` for `trixie` or `+deb12u1`/`~deb12u1` for `bookworm`) and you should be able to explain what testing it has had. See the Debian Policy for the version number: https://www.debian.org/doc/debian-policy/ch-controlfields.html#special-version-conventions

- La mise à jour doit être construite dans un environnement ou un chroot `stable` (ou `oldstable` si cette distribution est visée).

- Les corrections de problèmes de sécurité devraient être coordonnées avec l'équipe de sécurité à moins qu'elle n'ait déclaré explicitement qu'elle n'émettrait pas de `DSA` pour le bogue (par exemple, au moyen d'un indicateur « no-dsa » dans le Gestionnaire de sécurité Debian (« Debian Security Tracker »)).

- Do not close `release.debian.org` bugs in debian/changelog. They will be closed by the release team once the package has reached the respective point release.

Il est recommandé d'utiliser `reportbug`, car cela facilite la création de bogues avec des métadonnées correctes. L'équipe de publication fait un usage extensif d'étiquettes pour trier et gérer les requêtes, et les rapports mal étiquetés prennent plus de temps pour être remarqués et traités.

Les mises à jour de la distribution `oldstable` sont possibles tant qu'elle n'a pas été archivée. Les mêmes règles que pour `stable` s'appliquent.

Par le passé, les envois vers `stable` étaient également utilisés pour corriger les problèmes de sécurité. Cependant, cette pratique est déconseillée, car les mises à jour pour les avis de sécurité Debian (« `Debian security advisory` » ou `DSA`) sont automatiquement copiées dans l'archive `proposed-updates` appropriée quand l'avis est publié. Reportez-vous en Gestion des bogues de sécurité pour des informations plus détaillées sur la gestion des problèmes de sécurité. Si l'équipe en charge de la sécurité estime le problème trop insignifiant pour justifier un `DSA`, les responsables de la publication `stable` seront cependant plus facilement disposés à intégrer votre correctif par un envoi ordinaire vers `stable`.

### 5.5.2. Cas particulier : la publication `stable-updates`

Parfois les responsables de la publication `stable` décideront qu'une mise à jour vers `stable` devrait être mise à disposition des utilisateurs plus tôt que la prochaine mise à jour intermédiaire programmée. Dans ce cas, ils peuvent copier la mise à jour vers la publication `stable-updates`, dont l'utilisation est activée par défaut par l'installateur.

À l'origine, le processus décrit dans le Cas particulier : distributions stable et oldstable devrait être suivi comme d'habitude. Si vous pensez que l'envoi devrait être publié à travers `stable-updates`, mentionnez-le dans votre requête. Voici des exemples de circonstances pour lesquelles l'envoi peut être éligible pour ce type de traitement :

- La mise à jour est urgente, mais n'a pas de caractère de sécurité. Les mises à jour de sécurité continueront à être publiées dans l'archive de sécurité. Comme exemple on citera les paquets cassés par le fil du temps (cf. `spamassassin` et le problème de l'année 2010) et les correctifs des bogues introduits par les versions intermédiaires.

- Le paquet en question est un paquet de données qui doivent être mises à jour dans un délai raisonnable (par exemple, `tzdata`).

- La correction de paquets en bout de chaîne qui ont été cassés par des modifications externes (par exemple des utilitaires de téléchargement de vidéos et `tor`).

- Les paquets qui nécessitent d'être à jour pour être utiles (par exemple `clamav`).

- Uploads to `stable-updates` should target their suite name in the changelog as usual, e.g. `trixie`.

Une fois que l'envoi a été accepté dans `proposed-updates` et est prêt pour la publication, les responsables de la publication `stable` le copieront vers la publication stable-updates` et publieront une annonce de mise à jour de `stable` (Stable Update Announcement ou `SUA`) sur la liste de diffusion `debian-stable-announce`.

Toutes les mises à jour publiées par `stable-updates` seront incluses dans `stable` avec la prochaine version intermédiaire comme d'habitude.

### 5.5.3. Cas particulier : `testing/testing-proposed-updates`

Veuillez consulter les informations des Mises à jour directes dans testing pour plus de détails.

## 5.6. Envois de paquets

### 5.6.1. Source and binary uploads

Each upload to Debian consists of a signed `.changes` file describing the requested change to the archive, plus the source and binary package files that are referenced by the `.changes` file.

If possible, the version of a package that is uploaded should be a source-only changes file. These are typically named `*_source.changes`, and reference the source package, but no binary `.deb` or `.udeb` packages. All of the corresponding architecture-dependent and architecture-independent binary packages, for all architectures, will be built automatically by the build daemons in a controlled and predictable environment (see wanna-build for more details).

For many source-only uploads you can use tag2upload instead, which means that you only need to push a signed Git tag to Salsa, instead of generating and signing `.dsc` and `.changes` files yourself. See https://wiki.debian.org/tag2upload.

There are several situations where a source-only upload is not possible.

The first upload of a new source package (see Nouveaux paquets) must include binary packages, so that they can be reviewed by the archive administrators before they are added to Debian.

If new binary packages are added to an existing source package, then the first upload that lists the new binary packages in `debian/control` must include binary packages, again so that they can be reviewed by the archive administrators before they are added to Debian. It is preferred for these uploads to be done via the `experimental` suite.

Uploads that will be held for review in other queues, such as packages being added to the `*-backports` suites, might also require inclusion of binary packages.

The build daemons will automatically attempt to build any `main` or `contrib` package for which the build-dependencies are available. Packages in `non-free` and `non-free-firmware` will not be built by the build daemons unless the package has been marked as suitable for auto-building (see Paquets non libres pouvant être automatiquement construits).

The build daemons only install build-dependencies from the `main` archive area. This means that if a source package has build-dependencies that are in the `contrib`, `non-free` or `non-free-firmware` archive areas, then uploads of that package need to include prebuilt binary packages for every architecture that will be supported. By definition this can only be the case for source packages that are themselves in the `contrib`, `non-free` or `non-free-firmware` archive areas.

Bootstrapping a new architecture, or a new version of a package with circular dependencies (such as a self-hosting compiler), will sometimes also require an upload that includes binary packages.

### 5.6.2. Envois sur `ftp-master`

Pour envoyer un paquet, il faut envoyer les fichiers (y compris les fichiers `changes` et `dsc` signés) par FTP anonyme sur `ftp.upload.debian.org` dans le répertoire /pub/UploadQueue/. Pour que les fichiers y soient traités, ils doivent être signés avec une clé du porte-clés (`keyring`) des développeurs ou des responsables Debian (voir https://wiki.debian.org/DebianMaintainer).

Attention, il est préférable de transférer le fichier `changes` en dernier. Dans le cas contraire, votre envoi pourrait être rejeté, car l'outil de maintenance de l'archive pourrait lire le fichier `changes` et constater que les fichiers ne sont pas tous présents.

Les paquets dupload ou dput pourront vous faciliter le travail lors du téléchargement. Ces programmes bien pratiques aident à automatiser le processus d'envoi de paquets vers Debian.

For removing packages or cancelling an upload, please see ftp://ftp.upload.debian.org/pub/UploadQueue/README and the Debian package dcut.

Enfin, vous devriez réfléchir au statut de votre paquet par rapport à `testing` avant l'envoi vers `unstable`. S'il a une version en attente de migration dans `unstable`, c'est généralement une bonne idée d'attendre sa migration avant d'envoyer une nouvelle version. Vous devriez aussi rechercher dans le Suivi de paquets Debian (Debian Package Tracker) les avertissements detransition pour éviter de procéder à des envois qui perturbent des transitions en cours.

### 5.6.3. Envois différés

It is sometimes useful to upload a package immediately, but to want this package to arrive in the archive only a few days later. For example, when preparing a Mises à jour indépendantes (NMU), you might want to give the maintainer a few days to react, while at the same time having the certainty that your upload will eventually take effect if the maintainer does not. A one-shot approach of (i) file bug with a patch (or Merge Request) and (ii) at once upload to DELAYED, is much more efficient than having to wait for days between the two steps.

Les envois vers le répertoire différé sont gardés dans la file d'attente différée. Une fois le temps d'attente indiqué terminé, le paquet est déplacé dans le répertoire `incoming` normal pour être traité. Cela est réalisé par une mise à jour automatique en envoyant dans le répertoire `DELAYED/`X`-day` (X compris entre 0 et 15) de `ftp.upload.debian.org`. Le contenu de `0-day` est envoyé plusieurs fois par jour vers `ftp.upload.debian.org`.

With dput, you can use the `--delayed` DELAY parameter to put the package into one of the queues.

Sometimes you'll need to remove a previously uploaded package from the DELAYED queue (e.g. because the package maintainer has asked you so). dcut(1) has examples of how to do so.

### 5.6.4. Envois de sécurité

N'envoyez jamais un paquet vers la file d'envoi de sécurité (sur `*.security.upload.debian.org`) sans avoir auparavant obtenu l'autorisation de l'équipe de sécurité. Si le paquet ne correspond pas tout à fait aux besoins de cette équipe, il entraînera beaucoup de problèmes et de retards dans la gestion de cet envoi non désiré. Pour plus de précisions, consultez Gestion des bogues de sécurité.

### 5.6.5. Les autres files d'envoi

Une file d'attente alternative en Europe est disponible sur ftp://ftp.eu.upload.debian.org/pub/UploadQueue/. Son fonctionnement est similaire à `ftp.upload.debian.org`, mais devrait être plus rapide pour les responsables européens.

Les paquets peuvent également être envoyés à l’aide de ssh sur `ssh.upload.debian.org` ; les fichiers doivent être placés dans `/srv/upload.debian.org/UploadQueue`. Cette file d'attente ne permet pas les Envois différés.

### 5.6.6. Notifications

Les administrateurs de l'archive Debian sont responsables de l'installation des mises à jour. La plupart des mises à jour sont gérées quotidiennement par le logiciel de gestion de l'archive `dak process-upload`. Les mises à jour de paquets sur la distribution `unstable` sont ainsi installées automatiquement. Dans les autres cas et notamment dans le cas d'un nouveau paquet, celui-ci sera installé manuellement. Il peut s'écouler un peu de temps entre l'envoi d'un paquet vers un serveur et son installation effective. Veuillez être patient.

Dans tous les cas, vous recevrez un accusé de réception par courrier électronique indiquant que votre paquet a été installé et quels rapports de bogue ont été clos. Veuillez lire attentivement ce courrier et vérifier que tous les rapports de bogue que vous vouliez clore sont bien dans cette liste.

L'accusé de réception indique aussi la section dans laquelle le paquet a été installé. S'il ne s'agit pas de votre choix, vous recevrez un second courrier qui vous informera de cette différence (voir ci-dessous).

Notez que si vous envoyez en utilisant les files d'attente, le démon vous enverra également une notification par courrier électronique.

Notez aussi que les nouveaux envois sont annoncés sur le Canaux IRC `#debian-devel-changes`. Si le vôtre échoue sans écho, cela peut être dû à ce que votre paquet n’est pas signé correctement, auquel cas vous pouvez trouver plus d’explications dans `ssh.upload.debian.org:/srv/upload.debian.org/queued/run/log`.

## 5.7. Section, sous-section et priorité de paquet

Les champs `Section` et `Priority` du fichier `debian/control` ne précisent pas vraiment l'endroit où le fichier sera placé dans l'archive, ni sa priorité. Afin de conserver l'intégrité globale de l'archive, ce sont les administrateurs de l'archive qui contrôlent ces champs. Les valeurs dans le fichier `debian/control` sont seulement indicatives.

Les administrateurs de l'archive indiquent les sections et priorités des paquets dans le fichier `override`. Si ce fichier `override` et le fichier `debian/control` du paquet diffèrent, vous en serez informé par courrier électronique quand le paquet sera installé dans l'archive. Vous pouvez corriger votre fichier `debian/control` avant votre prochain envoi ou alors vous pouvez modifier le fichier `override`.

Pour modifier la section dans laquelle un paquet est archivé, vous devez d'abord vérifier que le fichier `debian/control` est correct. Ensuite, envoyez un rapport de bogue sur le pseudopaquet `ftp.debian.org` demandant la modification de la section ou de la priorité de votre paquet. Utilisez un sujet comme `override: PACKAGE1:section/priorité, [...], PACKAGEX: section/priorité`, et exposez bien les raisons qui vous amènent à demander ces changements dans le corps de texte.

Pour en savoir plus sur les fichiers `override`, reportez-vous à dpkg-scanpackages 1 et https://www.debian.org/Bugs/Developer#maintincorrect.

Notez que le champ `Section` décrit à la fois la section et la sous-section, comme décrit en Sections. Si la section est `main`, elle devrait être omise. La liste des sous-sections autorisées peut être trouvée en https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections.

## 5.8. New upstream versions

To update a package for a new upstream release:

1. Read the upstream changelog, NEWS, and whatever other documentation they may have released with the new version.

2. If possible, inspect the full diff between the old and new upstream sources, potentially filtering out uninteresting parts using filterdiff (e.g. `filterdiff -x '*.po'`). If it's too big to review thoroughly, you can use `diffstat` to get a feel for the scope and nature of the changes (and thus where new bugs may appear), and to keep an eye for anything suspicious (e.g. unexpected use of network or the apperance of dubious binary blobs).

3. Port the old Debian packaging to the new version. This basically involves incrementing the `debian/changelog` and merging `debian/patches` from the old package to the new one.

4. Check to see if any bugs have been fixed that are currently open in the BTS. If they have been, close them in the `debian/changelog`.

5. If the patch/merge did not apply cleanly, figure out why. A patch may fail to apply if it's already been applied in the new upstream release, or if the upstream files the patch applies to have been substantially modified (or deleted).

6. If any changes were made to the build system (you'd know from steps 1 and 2), update the `debian/rules` and `debian/control` build dependencies if necessary.

7. Build the new package in an isolated environment, e.g. using `sbuild` or `pbuilder`. This ensures that all required build dependencies are listed in `debian/control` and eliminates the possibility of interference of any third party packages in your system.

8. Verify that the new package builds correctly and if so carry out the checks in _sanitycheck.

## 5.9. Manipulation des bogues

Chaque développeur doit être capable de travailler avec le système de suivi des bogues de Debian (« ``bubogue correctement (voir Signalement de bogues), comment les mettre à jour, les réordonner, les traiter et les fermer.

Les fonctionnalités du système de suivi des bogues sont décrites dans la documentation du BTS pour les développeurs : fermeture de bogues, envoi de messages de suivi, assignation de niveaux de gravité et de marques, indication que les bogues ont été transmis aux développeurs amonts, etc.

Des opérations comme réassigner des bogues à d'autres paquets, réunir des rapports de bogues séparés traitant du même problème ou rouvrir des bogues quand ils ont été prématurément fermés, sont gérées en utilisant le serveur de contrôle par courrier. Toutes les commandes disponibles pour ce serveur sont décrites dans la documentation du serveur de contrôle du BTS.

### 5.9.1. Supervision des bogues

Être un bon responsable implique de consulter régulièrement la page du système de suivi des bogues (BTS) de vos paquets. Le système de suivi des bogues contient tous les rapports de bogue qui concernent vos paquets. Vous pouvez les vérifier en consultant cette page : `https://bugs.debian.org/`votrecompte`@debian.org`.

Les responsables interagissent avec le système de suivi des bogues en utilisant l'adresse électronique `bugs.debian.org`. Vous trouverez une documentation sur les commandes disponibles à l'adresse https://www.debian.org/Bugs/ ou, si vous avez installé le paquet `doc-debian`, dans les fichiers locaux `/usr/share/doc/debian/bug-*`.

Certains trouvent utile de recevoir régulièrement une synthèse des rapports de bogue ouverts. Si vous voulez recevoir une synthèse hebdomadaire relevant tous les rapports de bogue ouverts pour vos paquets, vous pouvez configurer `cron` comme suit :

    # ask for weekly reports of bugs in my packages
    0 17 * * fri   echo "index maint address" | mail request@bugs.debian.org

Remplacez address par votre adresse officielle de responsable Debian.

### 5.9.2. Réponses aux bogues

Lors d'une réponse à un bogue assurez-vous que toutes les discussions concernant le bogue sont envoyées au rapporteur original du bogue, au bogue lui-même et (si vous n'êtes pas le responsable du paquet) au responsable. L'envoi d'un message à 123`@bugs.debian.org` enverra le message au responsable du paquet et l'enregistrera dans le journal du bogue. Si vous ne vous souvenez pas de l'adresse courriel du rapporteur, vous pouvez aussi employer 123`-submitter@bugs.debian.org` pour contacter le rapporteur du bogue. Cette adresse enregistre aussi le message dans le journal du bogue, ainsi, si vous êtes le responsable du paquet en question, il suffit de répondre à 123`-submitter@bugs.debian.org`. Sinon, vous devrez aussi ajouter l'adresse 123`@bugs.debian.org` afin d'atteindre également le responsable du paquet.

Si vous recevez un rapport de bogue mentionnant « FTBFS », cela signifie une erreur de construction à partir du paquet source (« `Fails To Build From Source` »). Les porteurs emploient fréquemment cet acronyme.

Une fois un bogue traité (c'est-à-dire qu'il est corrigé), marquez-le comme `done` (il sera fermé) en envoyant un message d'explication à 123`-done@bugs.debian.org`. Si vous corrigez un bogue en changeant et en envoyant une nouvelle version du paquet, vous pouvez fermer le bogue automatiquement comme décrit en Fermeture des rapports de bogue lors des mises à jour.

Vous ne devez jamais fermer un rapport de bogue en envoyant la commande `close` à l'adresse `control@bugs.debian.org`. Si vous le faites, le rapporteur n'aura aucune information sur la clôture de son rapport.

### 5.9.3. Gestion des bogues

En tant que responsable de paquet, vous trouverez fréquemment des bogues dans d'autres paquets et recevrez des rapports de bogue sur vos paquets qui sont en fait relatifs à d'autres paquets. Les fonctions intéressantes du système de suivi des bogues sont décrites dans la documentation du BTS pour les développeurs Debian. Les instructions du serveur de contrôle du BTS documentent les opérations techniques du BTS, telles que comment remplir, réassigner, regrouper et marquer des bogues. Cette section contient des lignes directrices pour gérer vos propres bogues, définies à partir de l'expérience collective des développeurs Debian.

Remplir des rapports de bogue pour des problèmes que vous trouvez dans d'autres paquets est l'une des « obligations civiques » du responsable, voir Signalement de bogues pour les détails. Cependant, gérer les bogues de vos propres paquets est encore plus important.

Voici une liste des étapes que vous pouvez suivre pour traiter un rapport de bogue :

1. décider si le rapport correspond à un bogue réel ou non. Parfois, les utilisateurs utilisent simplement un programme d'une mauvaise façon, car ils n'ont pas lu la documentation. Si c'est votre diagnostic, fermez simplement le bogue avec assez d'informations pour laisser l'utilisateur corriger son problème (donnez des indications vers la bonne documentation et ainsi de suite). Si le rapport de bogue revient régulièrement, vous devriez vous demander si la documentation est assez bonne ou si le programme ne devrait pas détecter une mauvaise utilisation pour donner un message d'erreur informatif. Il s'agit d'un problème qui peut être discuté avec l'auteur amont.

   Si le rapporteur de bogue n'est pas d'accord avec votre décision de fermeture du bogue, il peut le rouvrir jusqu'à ce que vous trouviez un accord sur la façon de le gérer. Si vous n'en trouvez pas, vous pouvez marquer le bogue `wontfix` pour indiquer à tout le monde que le bogue existe, mais ne sera pas corrigé. Assurez-vous que le rapporteur du bogue comprend les raisons de votre décision en ajoutant une explication au message qui ajoute la marque `wontfix`.

   Si cette situation n'est pas acceptable, vous (ou le rapporteur) pouvez vouloir demander une décision par le comité technique en ouvrant un nouveau bogue sur le pseudopaquet `tech-ctte` avec un résumé de la situation. Avant de faire cela, veuillez lire la procédure recommandée ;

2. si le bogue est réel, mais causé par un autre paquet, réassignez simplement le bogue à l'autre paquet. Si vous ne savez pas à quel paquet il doit être réassigné, vous pouvez demander de l'aide sur Canaux IRC ou sur `debian-devel@lists.debian.org`. Veuillez informer le ou les responsables du paquet sur lequel est réassigné le bogue, par exemple en envoyant une copie du message de réassignation à nomdupaquet`@packages.debian.org`, en expliquant vos raisons. Attention, une simple réassignation n'envoie pas de courrier aux mainteneurs du paquet auquel le bogue est réassigné, de ce fait ils n'apprendraient l'existence du bogue qu'en regardant la vue d'ensemble des bogues relatifs à leurs paquets.

   Si le bogue affecte le fonctionnement de votre paquet, veuillez envisager de cloner le bogue avant de le réassigner au paquet qui provoque vraiment le comportement. Si vous procédez autrement, le bogue ne sera pas vu dans la liste des bogues sur votre paquet, au risque que d'autres utilisateurs signalent le même bogue de nouveau. Vous devriez marquer « votre » bogue bloqué par le clone réassigné afin de documenter la relation entre les deux bogues ;

3. parfois, vous devez également ajuster la gravité du bogue pour qu'elle corresponde à la définition de gravité des bogues. C'est dû au fait que les gens tendent à augmenter la gravité des bogues pour s'assurer que leurs bogues seront corrigés rapidement. La gravité de certains bogues peut même être rétrogradée en `wishlist` (souhait) quand le changement demandé est seulement superficiel ;

4. si le bogue est réel, mais que le problème a déjà été rapporté auparavant, alors les deux rapports devraient être rassemblés en un seul à l'aide de la commande `merge` du BTS. De cette façon, quand un bogue sera corrigé, tous les rapporteurs en seront informés (veuillez notez, néanmoins, qu'un courrier envoyé au rapporteur d'un des bogues ne sera pas automatiquement envoyé aux autres rapporteurs) ;

5. le rapporteur de bogue peut avoir oublié de fournir certaines informations. Dans ce cas, vous devez lui demander les informations nécessaires. Vous pouvez utiliser la marque `moreinfo` (plus d'information) sur le bogue. De plus, si vous ne pouvez pas reproduire le bogue, vous pouvez le marquer comme `unreproducible` (non reproductible). Une personne qui arriverait à reproduire le bogue est alors invitée à fournir plus d'informations sur la façon de le reproduire. Après quelques mois, si cette information n'a été envoyée par personne, le bogue peut être fermé ;

6. If the bug is related to the packaging, you just fix it. If you are not able to fix it yourself, then tag the bug as `help`. You can also ask for help on `debian-devel@lists.debian.org` or `debian-qa@lists.debian.org`. See Coordination avec les développeurs amont if it's an upstream problem. If you have the required skills you can prepare a patch that fixes the bug and send it to the author at the same time. Make sure to send the patch to the BTS and to tag the bug as `patch`.

7. si un bogue a été corrigé sur la copie locale ou sur le système de gestion de versions, il peut être marqué `pending` (en attente) pour signaler qu'il est corrigé, et sera fermé à la prochaine mise à jour (ajouter « `closes:` » dans `changelog`). C'est d'autant plus utile si plusieurs développeurs travaillent sur le même paquet ;

8. une fois le paquet corrigé disponible dans l'archive, le bogue devrait être fermé en précisant dans quelle version du paquet il a été réglé. Cela peut être fait automatiquement, voir Fermeture des rapports de bogue lors des mises à jour.

### 5.9.4. Fermeture des rapports de bogue lors des mises à jour

Au fur et à mesure que les bogues et problèmes sont corrigés dans vos paquets, il est de votre responsabilité en tant que responsable du paquet de fermer les rapports de bogue associés. Cependant, vous ne devez pas les fermer avant que le paquet n'ait été accepté dans l'archive Debian. C'est pourquoi, vous pouvez et devriez clore les rapports dans le système de suivi des bogues une fois que vous avez reçu l'avis indiquant que votre nouveau paquet a été installé dans l'archive. Le bogue devrait être fermé avec la bonne version.

Cependant, il est possible de fermer automatiquement les bogues après l'envoi — indiquez simplement les bogues corrigés dans le fichier `debian/changelog` en suivant une syntaxe précise et le logiciel de maintenance de l'archive s'occupera de le fermer pour vous. Par exemple :

    acme-cannon (3.1415) unstable; urgency=low

      * Frobbed with options (closes: Bug#98339)
      * Added safety to prevent operator dismemberment, closes: bug#98765,
        bug#98713, #98714.
      * Added man page. Closes: #98725.

D'un point de vue technique, l'expression rationnelle Perl suivante décrit comment sont identifiées les fermetures de bogue dans les lignes de `changelog` :

    /closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*/ig

La syntaxe « `closes: #`XXX » est à préférer, car c'est la plus concise et facile à intégrer au texte de `changelog`. À moins de spécifier un comportement différent avec l'option `-v` de `dpkg-buildpackage`, seuls les bogues ainsi marqués dans l'entrée la plus récente de `changelog` seront fermés (de fait, seuls les bogues signalés dans la partie relative au journal de modification du fichier `.changes` sont fermés).

Historiquement, les envois identifiés comme Mises à jour indépendantes (NMU) étaient marqués comme `fixed` au lieu d'être fermés, mais cette pratique a cessé avec l'ajout du suivi des versions. Le même raisonnement s'applique à l'étiquette `fixed-in-experimental`.

If you happen to mistype a bug number or forget a bug in the changelog entries, don't hesitate to undo any damage the error caused. To reopen wrongly closed bugs, send a `reopen` XXX command to the bug tracking system's control address, `control@bugs.debian.org`. To close any remaining bugs that were fixed by your upload, email the `.changes` file to XXX`-done@bugs.debian.org`, where XXX is the bug number, and put Version: YYY and an empty line as the first two lines of the body of the email, where YYY is the first version where the bug has been fixed.

Rappelez-vous qu'il n'est pas obligatoire de fermer les bogues en utilisant le `changelog` tel que décrit ci-dessus. Si vous désirez simplement fermer les bogues qui n'ont rien à voir avec l'un de vos envois, faites-le simplement en envoyant une explication à XXX`-done@bugs.debian.org`. Vous ne devez jamais fermer des bogues dans une entrée du journal de modification (`changelog`) si les changements dans cette version n'ont rien à voir avec le bogue.

Pour une information plus générale sur ce qu'il faut mettre dans les entrées du journal de modification (`changelog`), voir Meilleures pratiques pour debian/changelog.

### 5.9.5. Gestion des bogues de sécurité

À cause de leur nature sensible, les bogues liés à la sécurité doivent être soigneusement traités. L'équipe de sécurité de Debian est là pour coordonner cette activité, pour faire le suivi des problèmes de sécurité en cours, pour aider les responsables ayant des problèmes de sécurité ou pour les corriger elle-même, pour envoyer les annonces de sécurité et pour maintenir `security.debian.org`.

Si vous prenez connaissance d'un bogue lié à un problème de sécurité sur un paquet Debian, que vous soyez ou non le responsable, regroupez les informations pertinentes sur le problème et contactez rapidement l'équipe de sécurité par courriel à `team@security.debian.org`. Si vous le désirez, vous pouvez chiffrer votre courriel avec la clé de contact de l’équipe de sécurité ; consultez https://www.debian.org/security/faq#contact pour plus de détails. N'envoyez pas de paquet pour `stable` sans contacter l'équipe de sécurité. Les informations utiles comprennent, par exemple :

- si le bogue a déjà été rendu public on non ;

- les versions du paquet affectées par le bogue. Vérifiez chaque version présente dans les distributions maintenues par Debian ainsi que dans `testing` et `unstable` ;

- la nature d'une solution si elle existe (les correctifs sont particulièrement utiles) ;

- tout paquet corrigé préparé par vous-même (envoyez seulement le fichier debdiff résultant ou autrement uniquement les fichiers `.diff.gz` et `.dsc` et lisez d'abord Préparation de paquets pour les problèmes de sécurité) ;

- toute assistance possible pour aider à tester (exploitation de faille, tests de régression, etc.) ;

- toute information utile pour l'annonce de sécurité (voir Annonces de sécurité).

En tant que responsable d'un paquet, il est de votre devoir de le maintenir, même dans la distribution stable. Vous êtes le mieux placé pour apprécier les correctifs et tester les paquets mis à jour, donc merci de vous référer aux sections suivantes sur la façon de préparer les paquets pour l'équipe en charge de la sécurité.

#### 5.9.5.1. Gestionnaire de sécurité Debian (« `Debian Security Tracker` »)

L'équipe en charge de la sécurité gère une base de donnée centralisée, le gestionnaire de sécurité Debian (« `Debian Security Tracker` »). Il contient tous les renseignements publics à propos des problèmes de sécurité connus : quels sont les paquets et versions affectés et non affectés, et par conséquent si `stable`, `testing` ou `unstable` sont vulnérables. Les informations encore confidentielles ne sont pas ajoutées à la base de données.

Il est possible de rechercher un problème particulier, mais aussi un paquet. Cherchez parmi vos paquets afin de prendre connaissance de problèmes non encore résolus. Si vous le pouvez, veuillez fournir plus d'informations sur ces problèmes, ou aidez à les corriger dans vos paquets. Le mode d'emploi est disponible sur les pages web du gestionnaire.

#### 5.9.5.2. Confidentialité

À la différence de la plupart des autres activités de Debian, les problèmes de sécurité doivent parfois être tenus secrets un certain temps. Cela permet aux distributeurs de logiciels de coordonner leur divulgation afin de minimiser l'exposition de leurs utilisateurs. Cette décision dépend de la nature du problème, de l'existence d'une solution correspondante, et de sa publicité.

Il existe plusieurs façons pour un développeur de prendre connaissance d'un problème de sécurité :

- il le remarque sur un forum public (liste de diffusion, site web, etc.) ;

- quelqu'un soumet un rapport de bogue ;

- quelqu'un l'informe en privé.

Dans les deux premiers cas, l'information est publique et il est important de régler le problème au plus vite. Dans le dernier cas, cependant, l'information n'est pas forcément publique. Il existe alors différentes possibilités pour traiter le problème :

- si l'exposition est mineure, il n'y a parfois pas besoin de garder le secret sur le problème et une correction devrait être mise en œuvre et diffusée ;

- si le problème est grave, il vaut mieux partager cette information avec d'autres distributeurs et de coordonner une publication. L'équipe de sécurité est en contact avec les différentes organisations et individus et peut s'en occuper.

Dans tous les cas, si la personne ayant indiqué le problème demande à ce que l'information ne soit pas diffusée, cela devrait être respecté, avec l'évidente exception d'informer l'équipe de sécurité pour préparer un correctif de la version `stable` de Debian. Quand vous envoyez des informations confidentielles à l'équipe de sécurité, assurez-vous de bien le préciser.

Si le secret est nécessaire, vous ne pourrez pas envoyer de correctif vers `unstable` (ou ailleurs, comme un système de gestion de version public). Il ne suffit pas d'occulter les détails des modifications : puisque le code lui même est public, il peut être (et sera) étudié.

Il existe deux raisons de diffuser l'information même si le secret est demandé : le problème est connu depuis un certain temps, ou le problème ou son exploitation est devenu public.

L'équipe de sécurité dispose d'une clé PGP pour permettre de chiffrer tout échange d'informations pour les problèmes sensibles. Voir la FAQ de l'équipe Debian sur la sécurité pour plus de détails.

#### 5.9.5.3. Annonces de sécurité

Les annonces de sécurité ne sont émises que pour la distribution actuellement `stable`, mais pas pour `testing` ou `unstable`. Une fois diffusée, l'annonce est envoyée à la liste `debian-security-announce@lists.debian.org` et mise en ligne sur la page d'informations de sécurité. Les annonces de sécurité sont écrites et mises en ligne par les membres de l'équipe en charge de la sécurité. Cependant, ils ne verront aucun inconvénient à ce qu'un responsable leur apporte des informations ou écrive une partie du texte. Les informations d'une annonce devraient comporter :

- une description du problème et de sa portée, y compris :

  - le type du problème (élévation de privilège, déni de service, etc.),

  - quels sont les privilèges obtenus et par quels utilisateurs (si c'est le cas),

  - comment il peut être exploité,

  - si le problème peut être exploité à distance ou localement,

  - comment le problème a été corrigé,

  ces informations permettent aux utilisateurs d'estimer la menace pesant sur leurs systèmes ;

- les numéros de version des paquets affectés ;

- les numéros de version des paquets corrigés ;

- une information sur la façon de récupérer les paquets mis à jour (habituellement l'archive de sécurité Debian) ;

- des références à des annonces amont, des identifiants CVE et toute autre information utile pour recouper les références de la vulnérabilité.

#### 5.9.5.4. Préparation de paquets pour les problèmes de sécurité

Une façon d'aider l'équipe de sécurité dans sa tâche est de lui fournir des paquets corrigés adéquats pour une annonce de sécurité de la version `stable` de Debian.

Quand une mise à jour de la version `stable` est effectuée, un soin particulier doit être apporté pour éviter de modifier le comportement du système ou d'introduire de nouveaux bogues. Pour cela, faites le moins de changements possibles pour corriger le bogue. Les utilisateurs et les administrateurs s'attendent à conserver un fonctionnement convenu dans une distribution lorsque celle-ci est publiée, donc toute modification est susceptible de casser le système de quelqu'un. Cela est spécialement vrai pour les bibliothèques : assurez-vous de ne jamais changer l'API (interface de programmation applicative) ou l'ABI (interface binaire-programme), aussi minime que soit le changement.

Cela signifie que passer à une version amont supérieure n'est pas une bonne solution. À la place, les changements pertinents devraient être rétroportés vers la version actuelle de la distribution `stable` de Debian. Habituellement, les développeurs amont veulent bien aider. Sinon, l'équipe de sécurité Debian peut le faire.

Dans certains cas, il n'est pas possible de rétroporter un correctif de sécurité, par exemple, quand de grandes quantités de code source doivent être modifiées ou réécrites. Si cela se produit, il peut être nécessaire de passer à une nouvelle version amont. Cependant, cela n'est fait que dans des situations extrêmes et vous devez toujours coordonner cela avec l'équipe de sécurité auparavant.

Une autre règle importante découle de ce qui précède : testez toujours vos changements. Si une exploitation du problème existe, essayez-la et vérifiez qu'elle réussit sur le paquet non corrigé et échoue sur le paquet corrigé. Testez aussi les autres actions normales, car un correctif de sécurité peut parfois casser de manière subtile des fonctionnalités apparemment découplées.

N'ajoutez pas de modifications au paquet qui ne soient pas directement liées à la correction de la vulnérabilité. Celles-ci devraient alors être enlevées, ce qui ne représentera qu'une perte de temps. S'il y a d'autres bogues dans votre paquet que vous aimeriez corriger, faites un envoi vers proposed-updates de la façon habituelle, après l'envoi de l'alerte de sécurité. Le mécanisme de mise à jour de sécurité n'est pas un moyen d'introduire des changements dans votre paquet qui serait sinon rejeté de la distribution stable, veuillez donc ne pas essayer de le faire.

Examinez et testez autant que possible vos changements. Vérifiez les différences avec la version précédente de manière répétée (`interdiff` du paquet `patchutils` et `debdiff` du paquet `devscripts` sont des outils pratiques pour cela, voir debdiff).

Assurez-vous de garder les points suivants à l'esprit :

- ciblez la bonne distribution dans le fichier `debian/changelog` : nomdecode`-security` (par exemple `trixie-security`). Ne ciblez ni distribution`-proposed-updates`, ni `stable` !

- fournissez des entrées de `changelog` descriptives et complètes. D'autres personnes se baseront dessus pour déterminer si un bogue particulier a été corrigé. Ajoutez la déclaration `closes:` pour tout bogue Debian. Intégrez toujours une référence externe, de préférence un identifiant CVE, pour qu'elle puisse être recoupée. Néanmoins, si aucun identifiant CVE n'a encore été assigné, ne l'attendez pas et continuez le processus. L'identifiant pourra être référencé plus tard ;

- assurez-vous que le numéro de version est correct. Il doit être plus élevé que celui du paquet actuel, mais moins que celui des paquets des distributions suivantes. En cas de doute, testez-le avec `dpkg --compare-versions`. Soyez attentif à ne pas réutiliser un numéro de version déjà utilisé pour un précédent envoi, ou qui entrerait en conflit avec une mise à jour indépendante binaire (`binNMU`). Par convention, ajoutez `+deb` X `u1` (où X est le numéro de publication majeure), par exemple `1:2.4.3-4+deb13u1`, bien sûr, incrémentez le nombre final (1 ici) lors des mises à jour suivantes ;

- à moins que l'archive source amont n'ait déjà été envoyée à `security.debian.org` (lors d'une précédente mise à jour de sécurité), construisez le paquet en incluant l'archive source amont complète (`dpkg-buildpackage -sa`). Si l'archive source amont a déjà été envoyée à `security.debian.org`, vous pouvez préparer le paquet en l'excluant (`dpkg-buildpackage -sd`) ;

- assurez-vous d'utiliser exactement le même ``*.orig.tar.{gz,bz2,xz}`` que celui utilisé dans l'archive normale, sinon il ne sera pas possible de déplacer plus tard le correctif de sécurité dans l'archive principale ;

- compilez le paquet sur un système propre, où tous les paquets appartiennent à la distribution pour laquelle vous construisez le paquet. Si vous ne disposez pas d’un tel système, vous pouvez utiliser l'une des machines de debian.org (voir Serveurs Debian) ou mettre en place un chroot (voir pbuilder et debootstrap).

#### 5.9.5.5. Mise à jour du paquet corrigé

N'envoyez jamais un paquet vers la file d'envoi de sécurité (sur `*.security.upload.debian.org`) sans avoir auparavant obtenu l'autorisation de l'équipe de sécurité. Si le paquet ne correspond pas tout à fait aux besoins de cette équipe, il entraînera beaucoup de problèmes et de retards dans la gestion de cet envoi non désiré.

Vous ne devez jamais envoyer votre correction dans `proposed-updates` sans vous coordonner avec l'équipe de sécurité. Les paquets seront copiés de `security.debian.org` au répertoire `proposed-updates` automatiquement. Si un paquet avec le même numéro de version ou un numéro plus grand est déjà installé dans l'archive, la mise à jour de sécurité sera rejetée par le système d'archive. Ainsi, la distribution `stable` se retrouvera plutôt sans la mise à jour de sécurité de ce paquet.

Une fois le nouveau paquet créé et testé, et qu'il a été approuvé par l'équipe de sécurité, il doit être envoyé pour être installé dans les archives. Pour les envois de sécurité, l'adresse d'envoi est `ftp://ftp.security.upload.debian.org/pub/SecurityUploadQueue/`.

Une fois l'envoi vers la file d'attente de sécurité accepté, le paquet sera automatiquement recompilé pour toutes les architectures et stocké pour vérification par l'équipe de sécurité.

Les envois en attente d'acceptation ou de vérification ne sont accessibles que par l'équipe de sécurité. C'est obligatoire, car il pourrait y avoir des correctifs pour des problèmes de sécurité qui ne peuvent pas encore être diffusés.

Si une personne de l'équipe de sécurité accepte un paquet, il sera installé sur `security.debian.org` et proposé pour le répertoire distribution`-proposed-updates` adéquat sur `ftp-master.debian.org`.

## 5.10. Subscribing to package updates

As a maintainer of a package, you get email notifications for various kinds of events (uploads, BTS messages etc). You can subscribe to receive such notifications also for packages you are not a maintainer of (or packages you maintain collaboratively), by mailing `control@tracker.debian.org` with `subscribe <pkgname>` either in the subject or the body of the email (see https://qa.pages.debian.net/distro-tracker/usage/messages.html#email-messages for details).

## 5.11. Manipulation de paquet dans l'archive

Certaines manipulations de l'archive ne sont pas possibles avec le processus de mise à jour automatisé. Elles sont effectuées manuellement par les responsables. Cette partie décrit la marche à suivre dans ces situations.

### 5.11.1. Déplacement de paquet

Il arrive parfois qu'un paquet change de section. Un paquet de la section `non-free` pourrait, par exemple, être distribué sous licence GNU GPL dans une nouvelle version ; dans ce cas, le paquet devrait être déplacé vers la section `main` ou `contrib`. [1]

Pour changer la section d'un paquet, modifiez les informations de contrôle pour placer le paquet dans la section voulue et envoyez-le à nouveau dans l'archive (voir la Charte Debian pour plus d'informations). Assurez-vous d'inclure le fichier `.orig.tar.{gz,bz2,xz}` dans l'envoi (même si vous n'envoyez pas de nouvelle version amont) sinon il n'apparaîtra pas dans la nouvelle section avec le reste du paquet. Si la nouvelle section est valable, il sera déplacé automatiquement. Si ce n'est pas le cas, contactez les responsables de l'archive (« `ftpmasters` ») pour comprendre ce qui s'est passé.

Pour changer la sous-section d'un paquet (`devel` ou `admin` par exemple), la procédure est légèrement différente. Modifiez la sous-section dans le fichier de contrôle du paquet et renvoyez-le. Il vous faudra ensuite demander la modification du fichier `override` comme décrit en Section, sous-section et priorité de paquet.

### 5.11.2. Suppression de paquet

If for some reason you want to completely remove a package (say, if it is an old compatibility library which is no longer required), you need to file a bug against `ftp.debian.org` asking that the package be removed; as with all bugs, this bug should normally have normal severity. The bug title should be in the form `RM:` package [architecture list] `--` reason, where package is the package to be removed and reason is a short summary of the reason for the removal request. [architecture list] is optional and only needed if the removal request only applies to some architectures, not all. Note that the `reportbug` will create a title conforming to these rules when you use it to report a bug against the `ftp.debian.org` pseudo-package.

Si vous êtes responsable du paquet à supprimer, il faudrait le préciser dans le titre du rapport en commençant celui-ci par la mention `ROM` (« `Request Of Maintainer` », demande du responsable). De nombreux autres acronymes sont utilisés pour justifier la suppression d'un paquet, voir la liste complète sur https://ftp-master.debian.org/removals.html. Cette page fournit également une vue d'ensemble des requêtes en cours.

Seuls les paquets d'`unstable`, `experimental` ou `stable` peuvent être supprimés. Les paquets de `testing` ne sont pas supprimés directement. Ils sont plutôt enlevés automatiquement après suppression d'`unstable` et si aucun paquet de `testing` n'en dépend. (Les suppressions de `testing` sont possibles aussi en soumettant un bogue de suppression sur le pseudopaquet `release.debian.org`. Consultez la section Suppression de testing.)

Il existe une exception pour laquelle il n'est pas nécessaire de faire une demande explicite de suppression : si un paquet (source ou binaire) ne se construit plus depuis le source, il sera supprimé de façon semi-automatique. Pour un paquet binaire, cela veut dire qu'il n'y a plus de paquet source produisant ce paquet binaire ; si le paquet binaire n'est simplement plus produit pour certaines architectures, une demande de suppression est toujours nécessaire. Pour un paquet source, cela veut dire que tous les paquets binaires auxquels il se réfère ont été récupérés par un autre paquet source.

Il faut détailler dans la demande de suppression les raisons de cette demande. Cela a pour but d'éviter les suppressions indésirables et de garder une trace de la raison pour laquelle un paquet a été supprimé. Par exemple, vous pouvez fournir le nom du paquet qui remplace celui à supprimer.

Normalement, vous ne devriez demander la suppression d'un paquet que si vous en êtes le responsable. Si vous voulez supprimer un autre paquet, vous devez obtenir l'accord de son responsable. Dans le cas d'un paquet orphelin, qui n'a donc pas de responsable, vous devriez discuter la demande de suppression sur `debian-qa@lists.debian.org`. S'il existe un consensus sur la suppression du paquet, vous devriez changer le titre et réassigner le bogue `O:` au paquet `wnpp` plutôt que d'en ouvrir un autre.

Further information relating to these and other package removal related topics may be found at https://wiki.debian.org/ftpmaster_Removalsand https://qa.debian.org/howto-remove.html.

If in doubt concerning whether a package is disposable, email `debian-devel@lists.debian.org` asking for opinions. Also of interest is the `apt-cache` program from the `apt` package. When invoked as `apt-cache showpkg` package, the program will show details for package, including reverse depends. Other useful programs include `apt-cache rdepends`, `apt-rdepends`, `build-rdeps` (in the `devscripts` package) and `grep-dctrl`. Removal of orphaned packages is discussed on `debian-qa@lists.debian.org`.

Une fois le paquet supprimé, les bogues du paquet doivent être gérés. Soit ils sont réassignés dans le cas où le code a évolué vers un autre paquet (par exemple, `libfoo12` a été supprimé parce que `libfoo13` le remplace), soit ils sont fermés si le logiciel ne fait simplement plus partie de Debian. Lors de la fermeture des bogues, pour éviter d'être marqués corrigés dans des versions du paquet disponibles dans des distributions précédentes de Debian, ils devraient être marqués corrigés dans la version `<dernière-version-existant-dans-Debian>+rm`.

#### 5.11.2.1. Suppression de paquet d'`Incoming`

Par le passé, il était possible de supprimer un paquet d'`incoming`. Cependant, ce n'est plus possible depuis la mise en place du nouveau système. [4] À la place, il faut envoyer une nouvelle version du paquet avec un numéro de version plus élevé que celui à remplacer. Les deux versions seront installées dans l'archive, mais seule la plus récente sera réellement disponible dans `unstable`, car la précédente sera immédiatement remplacée par la nouvelle. Toutefois, si vous testez correctement vos paquets, vous ne devriez pas avoir besoin de les remplacer trop souvent.

### 5.11.3. Remplacement et changement de nom de paquet

Quand les responsables amont d'un de vos paquet décident de renommer leur logiciel (ou si vous vous trompez en nommant un paquet), vous devrez intervenir en deux étapes pour changer son nom. D'abord, modifiez le fichier `debian/control` pour que le nouveau paquet remplace (`Replaces`), fournisse (`Provides`) et entre en conflit avec (`Conflicts`) le paquet mal nommé (reportez-vous à la Charte Debian pour les détails). Vous ne devriez ajouter une relation `Provides` que si tous les paquets dépendants du paquet mal nommé continuent de fonctionner après le changement de nom. Une fois le paquet installé dans l'archive, faites un rapport de bogue concernant le pseudopaquet `ftp.debian.org` et demandez la suppression du paquet mal nommé (voir Suppression de paquet). N'oubliez pas de réassigner correctement les bogues du paquet en même temps.

Vous pourriez aussi commettre une erreur en construisant le paquet et voulant le remplacer. La seule façon de faire est d'incrémenter le numéro de version et d'envoyer une nouvelle version. L'ancienne version expirera de la façon habituelle. Notez que cela s'applique à chaque partie de votre paquet, y compris les sources : pour remplacer l'archive source amont de votre paquet, envoyez-la avec un numéro de version différent. Une possibilité simple est de remplacer `foo_1.00.orig.tar.gz` par `foo_1.00+0.orig.tar.gz` ou `foo_1.00.orig.tar.bz2`. Cette restriction permet à chaque fichier de l'archive d'avoir un nom unique, ce qui aide à garantir la cohérence dans le réseau des miroirs.

### 5.11.4. Abandon de paquet

If you can no longer maintain a package, you need to inform others, and see that the package is marked as orphaned. You should set the package maintainer to `Debian QA Group <packages@qa.debian.org>` and submit a bug report against the pseudo package `wnpp`. The bug report should be titled `O:` package `--` short description indicating that the package is now orphaned. The severity of the bug should be set to `normal`; if the package has a priority of standard or higher, it should be set to important. If you feel it's necessary, send a copy to `debian-devel@lists.debian.org` by putting the address in the X-Debbugs-CC: header of the message (no, don't use CC:, because that way the message's subject won't indicate the bug number).

If you just intend to give the package away, but you can keep maintainership for the moment, then you should instead submit a bug against `wnpp` and title it `RFA:` package `--` short description. `RFA` stands for `Request For Adoption`.

Vous pouvez trouver plus d'informations sur les pages web WNPP (« `Work-Needing and Prospective Packages` » : paquets en souffrance et paquets souhaités).

### 5.11.5. Adoption de paquet

Une liste des paquets en attente de nouveau responsable est disponible dans la liste des paquets en souffrance et paquets souhaités (WNPP). Afin de prendre en charge un paquet de cette liste, reportez-vous à la page mentionnée précédemment pour plus d'informations et les procédures à suivre.

Prendre un paquet sans l’accord du responsable actuel n'est pas correct — ce serait un détournement de paquet. Vous pouvez, bien sûr, prendre contact avec le responsable actuel et lui demander si vous pouvez prendre en charge ce paquet.

Cependant, si un paquet est abandonné par son responsable, vous pouvez prendre la responsabilité de ce paquet en suivant le processus de récupération décrit dans Sauvetage de paquets. Si vous avez une raison de croire que le responsable n’est plus du tout actif, consultez Gestion des responsables non joignables.

Les plaintes à propos des responsables devraient être portées sur la liste de diffusion des développeurs. Si la discussion ne se termine pas par une conclusion positive et que le problème est de nature technique, envisagez de porter le cas à l'attention du comité technique (voir la page web du comité technique pour plus d'informations).

Si vous reprenez un vieux paquet, vous voudrez sûrement que le système de suivi des bogues indique que vous êtes le responsable du paquet. Cela se produira automatiquement une fois installé une nouvelle version du paquet dans l'archive avec le champ `Maintainer` à jour. Cela peut prendre quelques heures après l'envoi. Si vous ne pensez pas faire de mise à jour avant un moment, vous pouvez utiliser le Suivi de paquets Debian (Debian Package Tracker) pour recevoir les rapports de bogue. Cependant, assurez-vous que l'ancien responsable n'est pas embêté de recevoir les rapports de bogue en attendant.

### 5.11.6. Réintroduction de paquet

Les paquets sont souvent supprimés à cause de bogues critiques pour la publication, de mainteneurs absents, de trop peu d'utilisateurs ou d'une médiocre qualité générale. Alors que le processus de réintroduction de paquet est similaire au processus d'empaquetage initial, certains pièges peuvent être évités en commençant par un peu de recherche historique.

Vous devriez d'abord vérifier la raison pour laquelle le paquet a été supprimé. Ces renseignements sont disponibles dans le paragraphe suppression (« removal ») de la section de nouvelles du PTS pour le paquet ou en consultant le journal des suppressions. Le bogue de suppression indiquera la raison pour laquelle le paquet a été supprimé et donnera quelques indications sur les points à travailler avant de réintroduire le paquet. Cela pourrait indiquer que la meilleure solution est d'utiliser un autre programme au lieu de réintroduire le paquet.

Contacter les précédents responsables peut être utile pour savoir s'ils ont commencé à réintroduire le paquet et s'ils sont intéressés à être coresponsables du paquet ou à parrainer le paquet si nécessaire.

Toutes les étapes nécessaires à l'introduction d'un nouveau paquet (Nouveaux paquets) devraient être suivies.

Le travail devrait être basé sur la dernière version pertinente du paquet disponible. Ce pourrait être la dernière version d'`unstable`, toujours disponible dans l'archive d'instantanés.

Le système de gestion de versions utilisé par les précédents mainteneurs pourrait contenir des modifications utiles, y jeter un œil pourrait donc être une bonne idée. Vérifiez si le fichier `control` du précédent paquet contient des en-têtes pointant vers le système de gestion de versions du paquet et s'il existe encore.

Les suppressions de paquet d'`unstable` (pas de `testing`, `stable` ou `oldstable`) déclenchent la fermeture de tous les bogues relatifs au paquet. Vous devriez passer en revue tous les bogues fermés (y compris les bogues archivés) puis extraire et rouvrir tous ceux qui ont été fermés avec une version se finissant par `+rm` et toujours d'actualité. Tous ceux qui ne s'appliquent plus devraient être marqués comme corrigés dans la version adéquate si elle est connue.

Les suppressions de paquet d'`unstable` déclenchent aussi le marquage du paquet comme supprimé dans le Gestionnaire de sécurité Debian (« Debian Security Tracker »).Les membres de Debian devraient marquer les problèmes supprimés comme non corrigés dans le dépôt du suivi de sécurité et tous les autres devraient contacter l'équipe de sécurité pour rapporter les paquets réintroduits.

## 5.12. Portage

Debian gère un nombre croissant d'architectures. Même si vous n'êtes pas un porteur et que vous utilisez une seule architecture, il est de votre responsabilité de développeur d'être attentif aux questions de portabilité. C'est pourquoi il est important de lire ce chapitre même si vous n'êtes pas un porteur.

Porter un paquet consiste à compiler un paquet binaire pour des architectures différentes de celle du paquet binaire du responsable du paquet. C'est une activité remarquable et essentielle. En fait, les porteurs sont à l'origine de la plupart des compilations de paquets Debian. Par exemple, quand un paquet source (portable) est envoyé avec les paquets binaires `i386`, il faut compter une compilation pour chaque autre architecture, soit un total de 8 compilations.

### 5.12.1. Courtoisie avec les porteurs

Les porteurs ont une tâche remarquable et difficile, car ils doivent gérer un grand nombre de paquets. Idéalement, tout paquet source devrait compiler sans modification. Malheureusement, c'est rarement le cas. Cette section contient une liste d'erreurs régulièrement commises par les responsables Debian — problèmes courants qui bloquent souvent les porteurs et compliquent inutilement leur travail.

Ici, le premier et plus important point est de répondre rapidement aux rapports de bogue et problèmes soulevés par les porteurs. Traitez-les courtoisement, comme s'ils étaient coresponsables de vos paquets (ce qu'ils sont d'une certaine manière). Merci pour votre indulgence envers des rapports de bogue succincts ou peu clairs ; faites de votre mieux pour éliminer le problème.

Les problèmes les plus couramment rencontrés par les porteurs sont causés par des erreurs d'empaquetage dans le paquet source. Voici un pense-bête pour les points auxquels vous devez être attentif :

1. vérifiez que les champs `Build-Depends` et `Build-Depends-Indep` du fichier `debian/control` sont corrects. Le meilleur moyen de le vérifier est d'utiliser le paquet `debootstrap` pour créer un environnement `unstable` `chrooté` (voir debootstrap). Dans cet environnement `chrooté`, installez le paquet `build-essential` et tous les paquets mentionnés dans les champs `Build-Depends` ou `Build-Depends-Indep`. Ensuite, essayez de fabriquer le paquet dans cet environnement. Ces étapes peuvent être automatisées en utilisant le programme `pbuilder` fourni par le paquet de même nom (voir pbuilder).

   En cas de difficultés pour configurer un environnement `chrooté`, `dpkg-depcheck` pourra peut-être vous aider (voir dpkg-depcheck).

   Consultez la Charte Debian pour en savoir plus sur les dépendances de construction ;

2. ne choisissez pas d'autres valeurs que `all` ou `any` pour le champ architecture sans avoir de bonnes raisons. Trop souvent, les développeurs ne respectent pas les instructions de la Charte Debian. Choisir la valeur `i386` ou `amd64` est généralement incorrect ;

3. Make sure your source package is correct. Do `dpkg-source -x` package`.dsc` to make sure your source package unpacks properly. Then, in there, try building your package from scratch with `dpkg-buildpackage`.

4. vérifiez que les fichiers `debian/files` ou `debian/substvars` ne sont pas dans votre paquet source. Ils doivent être effacés par la cible `clean` de `debian/rules` ;

5. assurez-vous de ne pas dépendre d'éléments de configuration, ou de logiciels installés ou modifiés localement. Par exemple, vous ne devriez jamais appeler des programmes du répertoire `/usr/local/bin` ou de répertoires équivalents. Essayez de ne pas dépendre de logiciels configurés de manière spéciale. Essayez de construire votre paquet sur une autre machine, même s'il s'agit de la même architecture ;

6. ne vous appuyez pas sur une installation préexistante du paquet (un sous-cas de la remarque précédente). Il existe, bien sûr, des exceptions à cette règle, mais soyez conscient que chaque cas comme celui-ci demande une mise en place (« `bootstrapping` ») manuelle et ne peut être automatisé par les services d'empaquetage ;

7. si possible, ne dépendez pas d'une version particulière d'un compilateur. Si vous ne pouvez pas faire autrement, assurez-vous que les dépendances de construction reflètent cette restriction, bien que vous cherchiez sûrement les problèmes, puisque certaines architectures s’uniformisent pour différents compilateurs.

8. vérifiez que le fichier `debian/rules` distingue les cibles `binary-arch` et `binary-indep` comme l'exige la Charte Debian. Vérifiez que ces cibles sont indépendantes l'une de l'autre, c'est-à-dire qu'il n'est pas nécessaire d'invoquer l'une de ces cibles avant d'invoquer l'autre. Pour vérifier cela, essayez d'exécuter `dpkg-buildpackage -B`.

9. When you can't support your package on a particular architecture, you shouldn't use the Architecture field to reflect that (it's also a pain to maintain correctly). If the package fails to build from source, you can just let it be and interested people can take a look at the build logs. If the package would actually build, the trick is to add a `Build-Depends` on `unsupported-architecture [the-not-supported-arch]`. The buildds will not build the package as the build dependencies are not fulfilled on that arch. To prevent building on 32-bits architectures, the `architecture-is-64-bit` build dependency can be used, as `architecture-is-little-endian` can be used to prevent building on big endian systems.

### 5.12.2. Conseils aux porteurs pour les mises à jour

Si le paquet se construit tel quel sur l'architecture visée, vous avez de la chance et votre travail est facile. Cette section s'applique dans ce cas ; elle décrit comment construire et installer correctement le paquet binaire dans l'archive Debian. Si vous devez modifier le paquet pour le rendre compilable sur la nouvelle architecture, il faudra faire une NMU sources, consultez plutôt NMU : quand et comment.

Pour un envoi de portage, ne faites pas de changement dans les sources. Vous n'avez pas besoin de modifier les fichiers du paquet source, y compris le fichier `debian/changelog`.

The way to invoke `dpkg-buildpackage` is as `dpkg-buildpackage -B -m` porter-email. Of course, set porter-email to your email address. This will do a binary-only build of only the architecture-dependent portions of the package, using the `binary-arch` target in `debian/rules`.

Si vous travaillez sur une machine Debian pour vos efforts de portage et que vous devez signer l'envoi localement pour être accepté dans l'archive, vous pouvez exécuter `debsign` sur le fichier `.changes` pour qu'il soit signé convenablement, ou utiliser le mode de signature à distance de `dpkg-sig`.

#### 5.12.2.1. Recompilation ou mise à jour indépendante binaire (`binNMU`)

Parfois, l'envoi du porteur initial pose problème, car l'environnement dans lequel le paquet a été construit n'était pas bon (bibliothèques périmées ou obsolètes, mauvais compilateur, etc.). Il se peut que vous ayez à le recompiler dans un environnement mis à jour. Cependant, dans ce cas, vous devez changer le numéro de version pour que les mauvais anciens paquets soient remplacés dans l'archive Debian (`dak` refuse d'installer un nouveau paquet s'il n'a pas un numéro de version supérieur à celui actuellement disponible).

Vous devez vous assurer que votre binNMU ne rend pas le paquet non installable. Cela peut arriver si un paquet source génère des paquets dépendants et indépendants de l'architecture qui ont des interdépendances créées par l’utilisation de la substitution de variable de dpkg `$(Source-Version)`.

Malgré la modification nécessaire du journal de modification (`changelog`), ce type de mise à jour est appelé binNMU — il n'est pas nécessaire de reconsidérer le statut des paquets binaires des autres architectures pour les marquer périmés ou à recompiler.

Ces recompilations nécessitent des numéros de version « magiques » pour que le système de maintenance de l'archive comprenne que, bien qu'il y ait une nouvelle version, il n'y a pas eu de modification des sources. Si vous ne faites pas cela correctement, les administrateurs de l'archive rejetteront votre mise à jour (car il n'y aura pas de code source associé).

Le « numéro magique » d'une NMU pour une recompilation particulière est obtenu en utilisant un suffixe ajouté au numéro de version du paquet, de la forme `b` numéro. Par exemple, si la dernière version recompilée était la version `2.9-3`, la binNMU aura pour version `2.9-3+b1`. Si la dernière version était `3.4+b1` (c'est-à-dire un paquet natif avec une précédente NMU par recompilation), la binNMU aura le numéro de version `3.4+b2`. [2]

De manière similaire aux envois du porteur initial, la façon correcte d'invoquer `dpkg-buildpackage` est `dpkg-buildpackage -B` pour ne construire que les parties dépendant de l'architecture du paquet.

#### 5.12.2.2. Quand utiliser une NMU source pour un portage

Les porteurs faisant des NMU source suivent normalement les instructions de Mises à jour indépendantes (NMU), tout comme les non-porteurs. Les délais d'attente sont cependant réduits, car les porteurs doivent manipuler un grand nombre de paquets. À nouveau, la situation diffère selon la distribution visée. Elle varie également si l'architecture est candidate pour la prochaine version stable ; les responsables de publication décident et annoncent quelles sont les architectures candidates.

Si vous êtes porteur et faites une NMU pour `unstable`, les instructions précédentes sont applicables à deux différences près. Tout d'abord, le temps d'attente raisonnable — délai entre le moment où vous envoyez un rapport au BTS et le moment où vous pouvez faire une NMU — est de sept jours. Ce délai peut être réduit si le problème est crucial et met l'effort de portage en difficulté : c'est à la discrétion de l'équipe de portage. (Souvenez-vous, il ne s'agit pas d'un règlement, mais de recommandations communément acceptées). Pour les envois de `stable` ou `testing`, veuillez d'abord vous coordonner avec l'équipe de publication concernée.

Deuxième différence, les porteurs faisant des NMU source doivent choisir une gravité `serious` (sérieuse) ou supérieure quand ils envoient leur rapport au BTS. Cela assure qu'un paquet source unique permet de produire un paquet binaire pour chaque architecture maintenue au moment de la sortie de la distribution. Il est très important d'avoir un paquet source et un paquet binaire pour toutes les architectures pour être conforme à plusieurs licences.

Les porteurs doivent éviter les correctifs qui contournent les bogues des actuelles versions de l'environnement de compilation, du noyau ou de la `libc`. Parfois, ces contournements ne peuvent être améliorés. Si vous devez faire quelque chose de ce genre, marquez proprement vos modifications avec des `#ifdef` et documentez votre contournement pour pouvoir le retirer une fois le problème externe disparu.

Les porteurs peuvent aussi avoir un dépôt non officiel pour publier le résultat de leur travail pendant le délai d'attente. Ainsi, d'autres personnes peuvent bénéficier du travail du porteur même pendant ce délai. Bien sûr, ces dépôts n'ont rien d'officiel, donc soyez sur vos gardes si vous les utilisez.

### 5.12.3. Infrastructure de portage et automatisation

Une infrastructure et plusieurs outils sont disponibles pour faciliter l'automatisation du portage des paquets. Cette section contient un bref aperçu de cette automatisation et de ces outils ; veuillez vous reporter à la documentation des paquets ou les références pour des informations complètes.

#### 5.12.3.1. Listes de diffusion et pages web

Les pages web contenant l'état de chaque portage peuvent être trouvées à https://www.debian.org/ports/.

Chaque portage de Debian possède sa propre liste de diffusion. La liste des listes de diffusion de portage peut être trouvée à https://lists.debian.org/ports.html. Ces listes sont utilisées pour coordonner les porteurs et pour mettre en relation les utilisateurs d'un portage donné avec les porteurs.

#### 5.12.3.2. Outils pour les porteurs

Les descriptions de plusieurs outils de portage peuvent être trouvées en Outils de portage.

#### 5.12.3.3. `wanna-build`

Le système `wanna-build` est un système distribué pour la compilation d'une distribution. Il est habituellement utilisé en conjonction avec des automates de compilation faisant fonctionner le programme `buildd`. Les automates de compilation (« `build daemons` ») sont des machines « esclaves » qui récupèrent la liste des paquets à compiler du système principal `wanna-build`.

`wanna-build` n'est pas encore disponible sous forme de paquet ; pourtant, tous les efforts de portage l'utilisent pour automatiser la compilation de paquets. L'outil de compilation vraiment utilisé est dans le paquet `sbuild`, voir la description en sbuild. La version empaquetée n'est pas la même que celle utilisée sur les automates de compilation, mais suffisamment proche pour reproduire les problèmes.

La plupart des informations produites par `wanna-build`, souvent utiles pour les porteurs, sont disponibles sur la toile à l'adresse https://buildd.debian.org/. Les données disponibles sont entre autres les statistiques mises à jour chaque nuit, les informations de file d'attente et les journaux de tentatives de compilation.

Ce système est une fierté de Debian, car il a de nombreux usages potentiels. Il peut être utilisé par des groupes de développeurs indépendants pour créer différentes variantes de Debian d'intérêt général ou non (par exemple, une variante de Debian compilée avec des vérifications de limites (« `bounds checking` ») de `gcc`). Ce système permettra aussi de recompiler rapidement toute une distribution.

L'équipe de `wanna-build`, en charge des empaqueteurs (« `buildd` »), peut être contactée à l'adresse électronique `debian-wb-team@lists.debian.org`. Pour savoir qui (équipe de `wanna-build`, équipe de publication) et comment (courrier électronique, BTS) contacter, se reporter à https://lists.debian.org/debian-project/2009/03/msg00096.html.

Lors d'une demande de mise à jour indépendante binaire (`binNMU`) ou de « rendu » (« `give-back` » : nouvel essai suite à une compilation échouée), veuillez utiliser le format décrit en https://release.debian.org/wanna-build.txt.

### 5.12.4. Paquet non portable

Certains paquets ont encore des problèmes pour être construits ou pour fonctionner sur certaines architectures prises en charge par Debian, et ne peuvent pas du tout être portés, ou pas dans un délai raisonnable. Par exemple, un paquet spécifique à SVGA (disponible uniquement sur `i386` et `amd64`), ou qui utilise des fonctionnalités spécifiques au matériel non gérées sur toutes les architectures.

Pour éviter que des paquets cassés soient envoyés dans l'archive et qu'ils fassent perdre le temps des empaqueteurs (« `buildd` »), vous devez faire plusieurs choses :

- tout d'abord, assurez-vous que votre paquet échoue à la compilation sur les architectures qu'il ne gère pas. Il y a plusieurs façons de faire cela. Le meilleur moyen est d'avoir une petite suite de tests pendant la construction qui vérifiera la fonctionnalité et échouera si cela ne fonctionne pas. C'est de toute façon une bonne idée et empêchera (certains) des envois cassés pour toutes les architectures, cela permettra également au paquet d'être construit dès que la fonctionnalité nécessaire sera disponible.

  De plus, si vous croyez que la liste des architectures gérées est plutôt constante, vous devriez changer `any` en une liste des architectures gérées dans le fichier `debian/control`. Ainsi, la construction échouera également et l'indiquera à un lecteur humain sans vraiment essayer ;

- pour empêcher les compilateurs automatiques de tenter sans raison de construire votre paquet, il doit être inclus dans `Packages-arch-specific`, une liste utilisée par le script `wanna-build`. La version actuelle est disponible en https://wiki.debian.org/PackagesArchSpecific ; veuillez consulter le début du fichier pour savoir qui contacter pour le modifier.

Il ne suffit pas d'ajouter votre paquet à `Packages-arch-specific` sans le faire échouer lors de compilation sur les architectures non gérées : un porteur ou toute autre personne essayant de construire votre paquet peut accidentellement l'envoyer sans remarquer qu'il ne fonctionne pas. Si par le passé, certains paquets binaires ont été envoyés pour des architectures non gérées, demandez leur suppression en remplissant un bogue sur `ftp.debian.org`.

### 5.12.5. Paquets non libres pouvant être automatiquement construits

By default packages from the `non-free` and `non-free-firmware` sections are not built by the autobuilder network (mostly because the license of the packages could disapprove). To enable a package to be built, you need to perform the following steps:

1. vérifier s'il est légalement permis et techniquement possible de construire automatiquement le paquet ;

2. ajouter `XS-Autobuild: yes` dans la partie en-tête de `debian/control` ;

3. envoyer un courrier à `non-free@buildd.debian.org` et expliquer pourquoi le paquet peut légalement et automatiquement être construit.

## 5.13. Mises à jour indépendantes (`NMU`)

Chaque paquet est géré par un ou plusieurs responsables. Normalement, ce sont eux qui travaillent sur les paquets et s'occupent de les mettre à jour. Dans certains cas, il est utile que d'autres développeurs puissent aussi envoyer une nouvelle version, par exemple pour résoudre un bogue dans un paquet dont ils ne sont pas responsables, lorsque le responsable a besoin d'aide pour réagir aux problèmes. De tels envois sont appelés mises à jour indépendantes (« ``Non-Maintainer Uploads`` » ou ``NMU``).

### 5.13.1. NMU : quand et comment

Avant de procéder à une NMU, veuillez prendre en considération les questions suivantes.

- Have you geared the NMU towards helping the maintainer? As there might be disagreement on the notion of whether the maintainer actually needs help or not, the DELAYED queue exists to give time to the maintainer to react and has the beneficial side-effect of allowing for independent reviews of the NMU diff.

- Does your NMU really fix bugs? ("Bugs" means any kind of bugs, e.g. wishlist bugs for packaging a new upstream version, but care should be taken to minimize the impact to the maintainer.) Using NMUs to make changes that are likely to be non-consensual is discouraged.

- As more specific examples, the following changes are generally considered acceptable, unless there are good reasons for not following those practices in a particular package: using the latest released debhelper compatibility level; using dh; using 3.0 (quilt); using lintian-brush.

- Avez-vous laissé suffisamment de temps au responsable ? Quand le bogue a-t-il été reporté au BTS ? Être occupé pendant une semaine ou deux n'est pas exceptionnel. Le bogue est-il si grave qu'il doive être corrigé immédiatement, ou cela peut-il attendre encore quelques jours ?

- Quelle confiance avez-vous dans vos modifications ? Souvenez-vous du serment d'Hippocrate : « je m'abstiendrai de tout mal ». Il est préférable de laisser un paquet avec un bogue ouvert grave plutôt qu'appliquer un correctif non fonctionnel ou un correctif qui cache le bogue sans le résoudre. Si vous n'êtes pas absolument sûr de vous, il pourrait être judicieux de chercher des conseils autour de vous. Rappelez-vous que si quelque chose est cassé par votre NMU, de nombreuses personnes seront mécontentes.

- Avez-vous clairement manifesté votre intention de procéder à une NMU, au moins dans le BTS ? En l’absence de réaction, une bonne idée serait d'essayer de contacter le responsable par d'autres moyens (courriel aux responsables ou personnel, IRC).

- Si le responsable est habituellement actif et réactif, avez-vous tenté de le contacter ? En général il est préférable que le responsable prenne en charge lui-même un problème et qu'il lui soit offert une chance d'examiner et corriger votre correctif, car il est censé être mieux placé pour découvrir d'éventuels problèmes que vous pourriez rater. C'est souvent un gain de temps pour tout le monde si le responsable a la possibilité d'envoyer lui-même une correction.

Lors d'une NMU, vous devez d'abord vous assurer que votre intention est sans ambiguïté. Ensuite, vous devez envoyer un correctif contenant les différences entre le paquet actuel et votre proposition de NMU au BTS. Le script `nmudiff` du paquet `devscripts` pourrait être utile.

While preparing the patch, you had better be aware of any package-specific practices that the maintainer might be using. Taking them into account reduces the burden of integrating your changes into the normal package workflow and thus increases the chances that integration will happen. A good place to look for possible package-specific practices is `debian/README.source`.

À moins d'avoir une excellente raison de ne pas le faire, vous devez laisser du temps au responsable pour réagir (par exemple en envoyant le paquet dans la file `DELAYED`). Voici quelques valeurs recommandées pour les délais :

- envoi corrigeant seulement un bogue critique pour la publication ouvert il y a plus de sept jours, sans action du responsable sur le bogue pendant sept jours, et sans indication qu'un correctif est en cours : zéro jour ;

- envoi corrigeant seulement un bogue critique pour la publication ouvert il y a plus de sept jours : deux jours ;

- envoi corrigeant seulement un bogue critique pour la publication et important : cinq jours ;

- Other NMUs: 15 days

Ces délais sont simplement donnés à titre indicatifs. Dans certains cas, comme des envois corrigeant des problèmes de sécurité, ou corrigeant des bogues insignifiants qui bloquent une transition, il est préférable que le paquet atteigne `unstable` au plus tôt.

Parfois, les responsables de publication peuvent décider d'encourager des délais plus courts pour les NMU corrigeant un sous-ensemble de bogues (par exemple les bogues critiques pour la publication ouverts il y a plus de sept jours). Certains responsables s'inscrivent d'eux-mêmes à la liste permissive de NMU (« ``Low Threshold NMU list` ») <https://wiki.debian.org/LowThresholdNmu>`__, et acceptent que les NMU soient effectuées sans délai. Mais même dans ce cas, il est toujours préférable de laisser quelques jours au responsable pour réagir avant votre envoi, d'autant plus si le correctif n'était pas disponible auparavant dans le BTS, ou si vous savez que le responsable est habituellement actif.

After you upload an NMU, you are responsible for the possible problems that you might have introduced. You must keep an eye on the package (Subscribing to package updates is a good way to achieve this).

Il ne s'agit pas d'un permis pour faire des NMU irréfléchies. Si vous procédez à une NMU alors que le responsable est clairement actif et aurait pris en considération un correctif de façon opportune, ou si vous passez outre les recommandations de ce document, votre envoi risque d'être une cause de conflit avec le responsable. Vous devriez toujours être prêt à défendre le bien-fondé de toute NMU effectuée.

### 5.13.2. NMU et `debian/changelog`

Comme tout autre envoi (de paquet source), les NMU doivent comporter une nouvelle entrée dans le fichier `debian/changelog`, expliquant les modifications effectuées dans cet envoi. La première ligne de cette entrée doit signaler explicitement qu'il s'agit d'une NMU, par exemple :

    * Non-maintainer upload.

La façon de numéroter les versions lors d'une NMU est différente s'il s'agit d'un paquet natif ou non.

Si le paquet est natif (sans partie révision Debian dans le numéro de version du paquet), la version doit être celle du dernier envoi du responsable, suivi de `+nmu` X, où X est un compteur commençant à `1`. Si le dernier envoi était également une NMU, le compteur devrait être augmenté. Par exemple, si la version actuelle est `1.5`, alors une NMU devrait prendre la version `1.5+nmu1`.

Si le paquet n'est pas natif, vous devriez ajouter un numéro de version mineure à la partie révision Debian du numéro de version (la partie après le dernier tiret). Ce numéro supplémentaire devrait commencer à `1`. Par exemple si la version actuelle est `1.5-2`, alors une NMU devrait prendre la version `1.5-2.1`. Si une nouvelle version amont est empaquetée lors de la NMU, la révision Debian est configurée à `0`, par exemple `1.6-0.1`.

Dans les deux cas, si le dernier envoi était également une NMU, le compteur devrait être augmenté. Par exemple, si la version actuelle est `1.5+nmu3` (un paquet natif déjà mis à jour indépendamment), la NMU devrait prendre la version `1.5+nmu4`.

Une numérotation de version spécifique est nécessaire pour éviter de perturber le travail du responsable, car l'utilisation d'un entier dans la révision Debian risque d'entrer en conflit avec un envoi déjà en préparation lors de la NMU, ou même déjà dans la file d'attente de nouveaux paquets (`NEW`), Cela présente également l'avantage d'indiquer clairement que le paquet dans l'archive n'a pas été préparé par le responsable officiel.

Lors d'un envoi de paquet vers `testing` ou `stable`, il est parfois nécessaire de créer une branche (« `fork` ») dans l'arbre de numérotation des versions. C'est par exemple le cas pour les mises à jour de sécurité. Pour cela, une version de la forme `+deb` X `u` Y devrait être utilisée, X étant le numéro de publication majeure et Y étant un compteur qui commence à `1`. Par exemple, alors que `trixie` (Debian 13) est stable, une NMU de sécurité pour un paquet dont la version est `1.5-3` devrait avoir la version `1.5-3+deb13u1`, alors qu'une NMU de sécurité vers `forky` devrait prendre la version `1.5-3+deb14u1`.

### 5.13.3. Utilisation de la file d'attente `DELAYED/`

Attendre une réponse après avoir demandé la permission de procéder à une NMU est inefficace, car cela coûte au demandeur un changement de contexte (« `context switch` ») pour revenir sur le problème. La file d'attente `DELAYED/` (voir Envois différés) permet au développeur préparant une NMU d'accomplir toutes les tâches nécessaire en même temps. Par exemple, plutôt que dire au responsable que vous allez envoyer le nouveau paquet dans sept jours, vous devriez envoyer le paquet vers `DELAYED/7` et dire au responsable qu'il a sept jours pour réagir. Pendant ce temps, le responsable peut vous demander de retarder un peu plus votre envoi, ou l'annuler.

You can cancel your upload using dcut. In case you uploaded `foo_1.2-1.1_all.changes` to a `DELAYED` queue, you can run `dcut cancel foo_1.2-1.1_all.changes` to cancel your upload. The `.changes` file does not need to be present locally as you instruct dcut to upload a command file removing a remote filename. The `.changes` file name is the same that you used when uploading.

La file d'attente `DELAYED` ne devrait pas être utilisée pour augmenter la pression sur le responsable. Notamment, il est important d'être disponible pour annuler ou retarder l'envoi avant la fin du délai, car le responsable ne peut pas le faire lui-même.

Si vous procédez à une NMU vers `DELAYED` et que le responsable envoie son paquet avant la fin du délai, votre envoi sera rejeté, car une nouvelle version sera alors disponible dans l'archive. Dans l'idéal, le responsable se chargera d'intégrer votre proposition (ou du moins une solution pour le problème en question) dans son envoi.

### 5.13.4. NMU d'un point de vue du responsable

Quand quelqu'un réalise une NMU sur votre paquet, c'est pour vous aider à le garder en bon état. Cela permet aux utilisateurs d'obtenir un paquet corrigé au plus vite. Vous pouvez envisager de proposer à l'auteur de la NMU de devenir coresponsable du paquet. Recevoir une NMU sur un paquet n'est pas une mauvaise chose : cela signifie simplement que le paquet est suffisamment intéressant pour que d'autres personnes veuillent travailler dessus.

Pour prendre en compte une NMU, intégrez ses modifications et l'entrée de journal de modification (`changelog`) lors de votre envoi suivant. Si vous ne prenez pas en compte la NMU en conservant l'entrée de `changelog` correspondante, le bogue restera fermé dans le BTS, mais sera listé comme affectant votre version du paquet.

Notez que si vous avez besoin d’annuler une NMU qui a empaqueté une nouvelle version amont, il est recommandé d’utiliser une version amont factice telle que ACTUEL`+really` ANCIEN jusqu’à ce que quelqu’un puisse téléverser à nouveau la dernière version. Plus d’informations sont disponibles dans https://www.debian.org/doc/debian-policy/ch-controlfields.html#epochs-should-be-used-sparingly.

Note that easiest way to both check if your package has been NMUed, and also automatically download and commit the changes into a git-buildpackage maintained git repository is to run `gbp import-dsc --verbose --pristine-tar apt:<package>/sid`. This example command assumes you are working on the `debian/latest` branch preparing the next upload to Debian unstable, and it assumes your `apt` has the `deb-src` line active for Debian unstable.

### 5.13.5. Mise à jour indépendante source (`NMU`) vs binaire (`binNMU`)

Le nom complet pour une NMU est mise à jour indépendante source (« ``source NMU`` »). Il en existe aussi d'un autre type, appelé mise à jour indépendante binaire (« ``binary-only NMU`` » ou « ``binNMU`` »). Une binNMU est aussi un paquet envoyé par quelqu'un d'autre que le responsable du paquet. Cependant, seul le paquet binaire est mis à jour.

Lorsqu'une bibliothèque (ou toute autre dépendance) est mise à jour, les paquets l'utilisant risquent de devoir être reconstruits. Puisque le code source n'a pas besoin d'être modifié, le même paquet source est utilisé.

Les binNMU sont généralement déclenchées sur les empaqueteurs (« `buildd` ») par `wanna-build`. Une entrée est ajoutée à `debian/changelog` expliquant pourquoi un envoi était requis et le numéro de version est augmenté tel que décrit en Recompilation ou mise à jour indépendante binaire (binNMU). Cette entrée ne devrait pas être gardée lors de l'envoi suivant.

Les empaqueteurs (« `buildd` ») envoient les paquets de leur architecture comme des mises à jour binaires. Au sens strict, ce sont des binNMU. Cependant, elles ne sont généralement pas appelées NMU, et aucune entrée n'est ajoutée à `debian/changelog`.

### 5.13.6. NMU et envoi de `QA`

Les NMU sont des envois effectués par quelqu'un d'autre que le responsable attitré. Il existe un autre type d'envoi où le paquet mis à jour ne vous appartient pas : les envois de `QA`, qui sont des envois pour les paquets orphelins.

Les envois de `QA` ressemblent beaucoup à des envois normaux de responsable : ils peuvent corriger quelque chose, même un problème mineur ; la numérotation de version est normale, et il n'est pas nécessaire d'utiliser d'envoi retardé. La différence est que vous ne faites pas partie des responsables (`Maintainer` ou `Uploader`) du paquet. Ainsi, l'entrée du journal de modification (`changelog`) d'un envoi de `QA` commence par la ligne :

    * QA upload.

Si vous voulez faire une NMU, et que le responsable ne semble pas actif, il est judicieux de vérifier le paquet pour voir s'il est orphelin (cette information est disponible sur la page du système de suivi relative au paquet). Lors d'un premier envoi de `QA` sur un paquet orphelin, veuillez positionner le responsable à « `Debian QA Group <packages@qa.debian.org>` ». La liste actuelle des paquets orphelins dont le responsable n'a pas encore été modifié est disponible en https://qa.debian.org/orphaned.html.

Plutôt que faire un envoi de `QA`, vous pouvez envisager l'adoption du paquet en devenant son responsable. Vous n'avez besoin de la permission de personne pour adopter un paquet orphelin, il suffit de vous configurer comme responsable et d'envoyer la nouvelle version (voir Adoption de paquet).

### 5.13.7. NMU et envoi d'équipe

Parfois, vous corrigez ou envoyez un paquet, car vous êtes membre d'une équipe de responsables (qui utilise une liste de diffusion comme responsable (`Maintainer` ou `Uploader`), voir Maintenance collective), mais vous ne voulez pas vous ajouter comme coresponsable (`Uploaders`), car vous n'avez pas l'intention de participer régulièrement à ce paquet. Si cela est conforme avec la politique de votre équipe, vous pouvez procéder à un envoi normal sans être listé parmi les responsables (`Maintainer` ou `Uploader`). Dans ce cas, vous devriez commencer l'entrée du journal de modification (`changelog`) par la ligne suivante :

    * Team upload.

## 5.14. Sauvetage de paquets

Le sauvetage de paquet est le processus permettant de sauver un paquet qui, tout en n'étant pas officiellement orphelin, semble peu ou complètement non entretenu. C’est une procédure moindre et plus rapide que de déclarer un paquet orphelin officiellement à l’aide des moyens de l’équipe MIA. Sauver un paquet n’est pas destiné à remplacer la gestion MIA et diffère en ce qu’elle n’implique aucunement l’activité complète de responsable. Cela gère plutôt la transition de responsabilité pour un seul paquet, n’affectant pas tout autre paquet, affiliation à Debian ou droits de téléversement (lorsque pertinents).

Il est a remarquer que le processus est seulement destiné à prendre fermement la responsabilité. Ne démarrez pas le processus de sauvetage de paquet sans la ferme intention d’entretenir le paquet pendant une période prolongée. Si vous voulez corriger certaines choses sans devenir responsable, vous devez utiliser le processus NMU, même si le paquet est susceptible d’être sauvé. Le processus NMU est expliqué dans Mises à jour indépendantes (NMU).

Une autre chose à se souvenir est qu’il n’est pas acceptable de détourner d’autres paquets. S'il est suivi, le processus de sauvetage vous aide à être sûr que votre initiative n’est pas un détournement, mais une procédure (officielle) de sauvetage, et vous pourrez réfuter toute allégation de détournement en faisant référence à ce processus. Grâce à ce processus, les nouveaux contributeurs ne devraient pas être effrayés de s’accaparer des paquets délaissés ou complètement abandonnés.

Le processus se déroule en deux phases. Premièrement, vous déterminez si le paquet en question est éligible au processus de sauvetage. Seulement après que l’éligibilité a été déterminée, vous pouvez démarrer la deuxième phase, le sauvetage effectif du paquet.

Pour des informations complémentaires, des principes et des FAQ sur le sauvetage de paquet, veuillez consulter la page Salvaging Packages sur le wiki de Debian.

### 5.14.1. Quand un paquet devient-il éligible au sauvetage de paquet ?

Un paquet devient éligible au sauvetage lorsqu’il est abandonné par le responsable actuel. Pour savoir qu’un paquet est réellement abandonné par son responsable, les indicateurs suivants donnent une idée sommaire sur ce qu’il faut rechercher :

- les NMU, spécialement s’il y a eu plusieurs NMU consécutifs ;

- les bogues concernant le paquet, sans réponse du responsable ;

- l’amont a publié plusieurs versions du paquet, mais malgré un dépôt de bogue en faisant la demande, elle n’a pas été empaquetée ;

- Il existe des problèmes de QA avec le paquet.

Vous devez vous fier à votre jugement pour déterminer si une combinaison de facteurs constitue un délaissement. En cas de désaccord du responsable, celui-ci doit seulement le signaler (voir ci-dessous). Si vous n’êtes pas sûr de votre jugement ou que vous vouliez simplement être du bon côté, il existe un ensemble de conditions plus précis (et conservateur) dans la page de wiki Package Salvaging. Ces conditions constituent le consensus actuel de Debian sur les critères de sauvetage. Dans tous les cas, vous devriez expliquer vos raisons de penser que le paquet est délaissé lorsque plus tard vous déposez un bogue « Intent to Salvage ».

### 5.14.2. Comment sauver un paquet ?

Si, et seulement si, un paquet a été déterminé comme éligible au sauvetage, n’importe quel responsable potentiel peut démarrer la procédure de sauvetage qui suit.

1. Ouvrez un bogue avec une sévérité « important » pour le paquet en question, exprimant votre intention de prendre la responsabilité du paquet. Pour cela, le titre du rapport doit débuter par `ITS: package-name` [3]. Sinon vous pouvez proposer de prendre la coresponsabilité du paquet. Lorsque vous ouvrez le bogue, vous devez informer tous les responsables, téléverseurs et si approprié, l’équipe d’empaquetage, explicitement en les ajoutant dans `X-Debbugs-CC`. De plus, si le ou les responsables semblent être généralement inactifs, veuillez informer l’équipe MIA en ajoutant également `mia@qa.debian.org` à `X-Debbugs-CC`. De même que l’expression explicite de l’intention de sauvetage, veuillez aussi prendre le temps de documenter votre évaluation de l’éligibilité dans le rapport de bogue, par exemple, en listant les critères utilisés et en ajoutant quelques données pour faciliter l’évaluation de la situation par d’autres ;

2. À ce stade, vous devez attendre au cas où des objections seraient soulevées. Le responsable, n’importe quel téléverseur actuel ou n’importe quel membre de l’équipe d’empaquetage concernée par le paquet en question peut objecter publiquement en réponse au bogue déposé sous `21 jours`, et cela met fin au processus de sauvetage.

   Les responsables actuels peuvent être d’accord avec votre volonté de sauvetage en répondant (avec signature) publiquement au bogue. Ils peuvent proposer que vous deveniez coresponsable au lieu d’être l’unique responsable. Pour les paquets entretenus par une équipe, un membre de cette équipe peut accepter votre proposition de sauvetage en envoyant un avis signé d’accord au bogue ITS, ou autrement vous inviter à devenir un coresponsable du paquet. L’équipe peut exiger que le paquet reste sous sa tutelle, mais alors vous inviter à les rejoindre. Dans tous les cas, lorsque vous avez reçu le feu vert, vous pouvez téléverser le nouveau paquet immédiatement en tant que nouveau (co)responsable, sans avoir besoin d’utiliser la file d’attente `DELAYED` comme décrit dans la prochaine étape ;

3. Après 21 jours d’attente, si aucune réponse n’a été envoyée au bogue par le responsable, un téléverseur ou une équipe, vous pouvez envoyez la nouvelle publication du paquet dans la file d’attente `DELAYED` avec un délai minimal de `sept jours`. Vous devrez clore le bogue dans le changelog et vous devez aussi envoyer un nmudiff au bogue veillant que des copies soient envoyées au responsable et à tous les téléverseurs (y compris les équipes) du paquet en les mettant en `CC` (Copie conforme) dans le courriel au BTS.

   Durant le temps d’attente de la file `DELAYED`, les responsables peuvent accepter le sauvetage, faire un envoi eux-mêmes ou (demander à) annuler l’envoi. Ces deux dernières actions stopperont le processus de sauvetage, mais les responsables doivent répondre au bogue de sauvetage avec plus d’informations sur le pourquoi.

## 5.15. Maintenance collective

« Maintenance collective » est un terme décrivant le partage des devoirs de la maintenance d'un paquet Debian par plusieurs personnes. Cette collaboration est presque toujours une bonne idée, car il en résulte généralement une meilleure qualité et un temps de correction de bogues plus court. Il est fortement recommandé que les paquets de priorité `standard` ou qui font partie de la base aient des coresponsables.

Habituellement, il y a un responsable principal et un ou plusieurs coresponsables. Le responsable principal est la personne dont le nom est indiqué dans le champ `Maintainer` du fichier `debian/control`. Les coresponsables sont tous les autres responsables, normalement listés dans le champ `Uploaders` du fichier `debian/control`.

Dans sa forme la plus simple, ajouter un nouveau coresponsable est assez facile :

- configurer le coresponsable avec droit d'accès aux sources à partir desquelles vous construisez le paquet. En général, cela implique que vous utilisez un système de gestion de versions en réseau, tel que `Git`. Salsa (voir salsa.debian.org : dépôts Git et plateforme de développement collaborative) fournit des dépôts Git parmi d'autres outils collaboratifs.

- ajouter les nom et adresse correctes du coresponsable au champ `Uploaders` dans le premier paragraphe du fichier `debian/control` ;

      Uploaders: John Buzz <jbuzz@debian.org>, Adam Rex <arex@debian.org>

- The co-maintainers should subscribe themselves to the appropriate source package (see Subscribing to package updates).

Une autre forme de maintenance collective est une maintenance en équipe, recommandée si vous gérez plusieurs paquets avec le même groupe de développeurs. Dans ce cas, les champs de responsable (`Maintainer` et `Uploaders`) de chaque paquet doivent être gérés avec attention. Il est conseillé de choisir entre les deux possibilités suivantes :

1. placer un membre de l'équipe comme responsable principal du paquet dans le champ `Maintainer`. En `Uploaders`, placer l'adresse de la liste de diffusion et les membres de l'équipe qui s'occupent du paquet ;

2. placer l'adresse de la liste de diffusion dans le champ `Maintainer`. En `Uploaders`, placer les membres de l'équipe qui s'occupent du paquet. Dans ce cas, vous devez vous assurer que la liste de diffusion peut recevoir les rapports de bogue sans interaction humaine (modération pour les non inscrits par exemple).

En tout cas, il faut éviter de placer automatiquement tous les membres de l'équipe dans le champ `Uploaders`. Cela encombre la vue d'ensemble des paquets d'un développeur (voir Vue d'ensemble des paquets d'un développeur) avec des paquets dont il ne s'occupe pas vraiment et donne la fausse impression d'un bon suivi. De même, les membres de l'équipe n'ont pas besoin de s'ajouter dans le champ `Uploaders` pour faire un envoi ponctuel, ils peuvent le faire en « envoi d'équipe » (voir NMU et envoi d'équipe). En revanche, c'est une mauvaise idée de garder un paquet avec seulement l'adresse de la liste de diffusion dans le champ `Maintainer` et sans `Uploaders`.

## 5.16. La distribution `testing`

### 5.16.1. Bases

Les paquets sont habituellement installés dans la distribution `testing` après avoir subi suffisamment de tests dans `unstable`.

Ils doivent être en synchronisation pour toutes les architectures et ne doivent pas avoir de dépendances qui les rendraient non installables ; ils doivent également être exempts de bogue critique pour la publication (« `release-critical` ») au moment où ils sont installés dans `testing`. Ainsi, `testing` devrait toujours être prête à devenir une version candidate pour la publication. Veuillez voir ci-dessous pour les détails.

### 5.16.2. Mise à jour depuis `unstable`

Les scripts de mise à jour de la distribution `testing` sont exécutés deux fois par jour, juste après l'installation des paquets mis à jour ; ces scripts sont appelés `britney`. Ils fabriquent les fichiers `Packages` pour la distribution `testing`, mais ils le font d'une manière intelligente pour éviter toute incohérence et essayer de n'utiliser que des paquets sans bogue.

L'inclusion d'un paquet d'`unstable` est soumise aux conditions suivantes :

- The package must have been available in `unstable` for a certain number of days, see Sélection de l’urgence du téléversement. Please note that the urgency is sticky, meaning that the highest urgency uploaded since the previous `testing` transition is taken into account;

- il ne doit pas introduire de nouveau bogue critique pour la publication (« `RC bug` » affectant la version disponible dans `unstable`, mais pas celle de `testing`) ;

- il doit être disponible pour toutes les architectures pour lesquelles il a déjà été construit dans `unstable`. Utilitaire dak ls permet de vérifier cette information ;

- il ne doit pas casser les dépendances d'un paquet déjà disponible dans `testing` ;

- les paquets dont il dépend doivent soit être déjà disponibles dans `testing`, soit être acceptés dans `testing` au même moment (et ils doivent remplir tous les critères nécessaires) ;

- l'état du projet. C'est-à-dire que les transitions automatiques sont arrêtées pendant le freeze (gel) de la distribution `testing`.

Pour savoir si un paquet a progressé ou non dans `testing`, veuillez voir la sortie du script de `testing` sur la page web de la distribution `testing <https://www.debian.org/devel/testing>`__ ou utilisez le programme `grep-excuses` du paquet `devscripts`. Pour rester informé de la progression de vos paquets dans `testing`, vous pouvez facilement le mettre dans une crontab 5.

Le fichier `update_excuses` ne donne pas toujours la raison précise pour laquelle un paquet est refusé ; il peut être nécessaire de la chercher soi-même en regardant ce qui serait cassé avec l'inclusion du paquet. La page web de la distribution testing donne plus d'informations sur les problèmes courants pouvant occasionner cela.

Parfois, certains paquets n'entrent jamais dans `testing` parce que le jeu des interrelations est trop compliqué et ne peut être résolu par le script. Voir ci-dessous pour des détails.

Des analyses de dépendances plus avancées sont présentées sur https://release.debian.org/migration/ — mais, attention, cette page affiche également des dépendances de construction qui ne sont pas prises en compte par `britney`.

#### 5.16.2.1. Désynchronisation

Pour le script de migration de `testing`, périmé signifie : il y a différentes versions dans `unstable` pour les architectures publiées (sauf les architectures dans outofsync_arches ; outofsync_arches est la liste des architectures qui sont abandonnées (dans `britney.py`), mais actuellement la liste est vide). Le caractère périmé n'a absolument rien à voir avec les architectures de ce paquet dans `testing`.

Considérons cet exemple :

| alpha | arm
--- | --- | ---
testing | 1 | -
unstable | 1 | 2

Le paquet est désynchronisé pour `alpha` dans `unstable` et n'entrera pas dans `testing`. Supprimer le paquet de `testing` n'aiderait en rien, le paquet serait toujours désynchronisé pour `alpha` et ne se propagerait pas dans `testing`.

Cependant, si `ftp-master` supprime un paquet d'`unstable` (ici pour `arm`) :

| alpha | arm | hurd-i386
--- | --- | --- | ---
testing | 1 | 1 | -
unstable | 2 | - | 1

Dans ce cas, le paquet est synchronisé pour toutes les architectures de version dans `unstable` (et l'architecture supplémentaire `hurd-i386` ne compte pas, car ce n'est pas une architecture de publication).

Quelquefois, la question est soulevée de savoir s'il est possible de permettre à des paquets de passer dans `testing` alors qu'ils ne sont pas encore construits pour toutes les architectures : non. Simplement non. (Excepté si vous êtes responsable de glibc ou équivalent).

#### 5.16.2.2. Suppression de `testing`

Parfois, un paquet est supprimé pour permettre l'inclusion d'un autre paquet : cela ne se produit que pour permettre à un autre paquet d'entrer, ce dernier doit être prêt pour tous les autres critères. Par exemple, si un paquet `a` ne peut pas être installé avec la nouvelle version de `b`, alors `a` peut être supprimé pour permettre l'entrée de `b`.

Bien sûr, il existe une autre raison pour supprimer un paquet de `testing` : le paquet est trop bogué (et avoir un seul bogue critique pour la publication est suffisant pour être dans cet état).

De plus, si un paquet a été supprimé d'`unstable` et que plus un seul paquet de `testing` n'en dépend, il sera alors automatiquement supprimé.

#### 5.16.2.3. Dépendances circulaires

Une situation mal gérée par `britney` est si un paquet `a` dépend de la nouvelle version d'un paquet `b` et vice versa.

Voici un exemple :

| testing | unstable
--- | --- | ---
a | 1 ; dépend de : b=1 | 2 ; dépend de : b=2
b | 2 ; dépend de : a=1 | 2 ; dépend de : a=2

Aucun des paquets `a` et `b` ne sera considéré pour une mise à jour.

Actuellement, cela nécessite un coup de pouce manuel de l'équipe de publication. Veuillez les contacter à l'adresse `debian-release@lists.debian.org` si cela se produit pour l'un de vos paquets.

#### 5.16.2.4. Influence d'un paquet dans `testing`

En général, rien n'est indiqué par l'état d'un paquet dans `testing` pour une transition de la versions suivante d'`unstable` vers `testing`, avec deux exceptions : la première si le nombre de bogues critiques pour la publication diminue, il peut entrer même s'il comporte encore des bogues critiques. La seconde exception, c'est si la version du paquet dans `testing` est désynchronisée sur les différentes architectures : alors une architecture pourrait seulement être mise à niveau vers la version du paquet source ; néanmoins, cela peut se produire seulement si auparavant le passage du paquet a été forcé, si l'architecture est dans outofsync_arches ou s'il n'y avait aucun paquet binaire de cette architecture présent dans `unstable` durant la migration de `testing`.

En résumé, cela signifie : la seule influence qu'un paquet de `testing` a sur la nouvelle version du même paquet est que la nouvelle version peut entrer plus facilement.

#### 5.16.2.5. Détails

Si vous êtes intéressés par les détails, voici quelques informations sur le fonctionnement de `britney`.

Les paquets sont examinés pour savoir si ce sont des candidats valables. Cela génère les dispenses de mise à jour (« `update excuses` »). Les raisons habituelles pour lesquelles un paquet n'est pas considéré sont la jeunesse du paquet, le nombre de bogues critiques pour la publication et la désynchronisation pour certaines architectures. Pour cette partie de `britney`, les responsables de publication ont des marteaux de toute taille, appelés coups de pouce (« hints », voir ci-dessous) pour forcer `britney` à examiner un paquet.

Maintenant, la partie la plus complexe se produit : `britney` tente de mettre à jour `testing` avec des candidats valables. Pour ce faire, `britney` essaye d'ajouter chaque candidat valable à la distribution `testing`. Si le nombre de paquets non installables dans `testing` n'augmente pas, le paquet est accepté. À partir de là, le paquet accepté est considéré comme partie de `testing`, de telle sorte qu'il sera considéré dans les tests suivants d'installabilité. Avant et après cette partie, certains coups de pouce (« hints ») de l'équipe de publication sont traités.

Pour obtenir plus de précisions, vous pouvez consulter https://release.debian.org/britney/update_output/.

Les coups de pouce (« hints ») sont disponibles sur https://release.debian.org/britney/hints/, qui contient aussi une description. Avec les coups de pouce, l'équipe en charge de la publication de Debian peut bloquer ou débloquer des paquets, faciliter ou forcer le passage de paquets dans `testing`, enlever des paquets de `testing`, approuver des envois vers les Mises à jour directes dans testing ou outrepasser l'urgence.

### 5.16.3. Mises à jour directes dans `testing`

La distribution `testing` est remplie de paquets en provenance d'`unstable` selon des règles expliquées ci-dessus. Cependant, dans certains cas, il est nécessaire d'envoyer des paquets construits seulement pour `testing`. Pour cela, vous pouvez envoyer vos paquets vers `testing-proposed-updates`.

Souvenez-vous que les paquets envoyés là ne sont pas traités automatiquement, ils doivent passer entre les mains des responsables de distribution. Vous devez donc avoir une bonne raison pour les y envoyer. Pour savoir ce que représente une bonne raison aux yeux des responsables de publication, vous devriez lire les instructions qu'ils envoient régulièrement sur `debian-devel-announce@lists.debian.org`.

Vous ne devriez pas envoyer de paquet à `testing-proposed-updates` quand vous pouvez le mettre à jour par `unstable`. Si vous ne pouvez faire autrement (par exemple, parce que vous avez une nouvelle version de développement dans `unstable`), vous pouvez utiliser cette fonction. Même si un paquet est gelé, des mises à jour par `unstable` sont possibles si l'envoi dans `unstable` ne crée pas de nouvelles dépendances.

Les numéros de version sont habituellement choisis en ajoutant `+deb` X `uY`, où X est le numéro de publication majeure de Debian et Y est un compteur démarrant à `1`, par exemple, `1:2.4.3-4+deb13u1`.

Veuillez vous assurer de n'avoir oublié aucun des éléments suivants lors de votre envoi :

- vérifiez que le paquet doit vraiment aller dans `testing-proposed-updates`, et ne peut pas passer par `unstable` ;

- vérifiez de n'avoir intégré qu'un minimum de changements ;

- vérifiez d'avoir ajouté une explication appropriée dans le journal de modification (`changelog`) ;

- vérifiez d'avoir ajouté les Noms de code des distributions de testing (par exemple, `forky`) comme distribution cible ;

- vérifiez d'avoir construit et testé votre paquet dans `testing`, et non dans `unstable` ;

- vérifiez que le numéro de version est plus élevé que les versions de `testing` et de `testing-proposed-updates`, et moins élevé que celui d'`unstable` ;

- demandez l'autorisation d'envoi aux responsables de publication ;

- après l'envoi et la construction réussie sur toutes les plates-formes, contactez l'équipe de publication à `debian-release@lists.debian.org` et demandez-leur d'approuver votre envoi.

### 5.16.4. Foire aux questions

#### 5.16.4.1. Quels sont les bogues bloquant l'intégration dans la version stable et comment sont-ils pris en compte ?

Tous les bogues de gravité assez élevée sont par défaut considérés comme bloquant l'intégration du paquet dans la version stable ; actuellement, ce sont les bogues `critical` (critique), `grave` (grave) et `serious` (sérieux).

Certains bogues sont supposés avoir un impact sur la probabilité d'un paquet a être diffusé dans la version `stable` de Debian : en général, si un paquet a des bogues bloquants, il n'ira pas dans `testing`, et par conséquent, ne pourra pas être diffusé dans `stable`.

Le décompte des bogues d'`unstable` inclut tous les bogues critiques pour la publication marqués pour s'appliquer à des combinaisons de paquet/version disponibles dans `unstable` pour une architecture concernée par la publication. Le décompte des bogues de `testing` est défini de façon analogue.

#### 5.16.4.2. Comment l'installation d'un paquet dans `testing` peut-elle casser d'autres paquets ?

La structure des archives de la distribution est faite de telle façon qu'elles ne peuvent contenir qu'une version d'un paquet ; un paquet est défini par son nom. Donc, quand le paquet source `acmefoo` est installé dans `testing` avec ses paquets binaires `acme-foo-bin`, `acme-bar-bin`, `libacme-foo1` et `libacme-foo-dev`, l'ancienne version est supprimée.

Cependant, l'ancienne version pouvait fournir à un paquet binaire un vieux `soname` d'une bibliothèque, comme `libacme-foo0`. Supprimer l'ancien `acmefoo` va supprimer `libacme-foo0`, ce qui va casser tout paquet qui en dépend.

Évidemment, cela touche principalement des paquets qui fournissent des jeux variables de paquets binaires pour différentes versions (principalement des bibliothèques). Cependant, cela va aussi concerner des paquets sur lesquels une dépendance versionnée du type `==`, `<=`, ou `<<` a été déclarée.

Quand le jeu de paquets binaires fournis par un paquet source change de cette façon, tous les paquets qui dépendent des anciens binaires doivent être mis à jour pour dépendre plutôt de la nouvelle version. Comme l'installation d'un tel paquet source dans `testing` casse tous les paquets qui en dépendent dans `testing`, une attention particulière doit y être portée : tous les paquets en dépendant doivent être mis à jour et prêts à être installés eux-mêmes pour ne pas casser et, une fois que tout est prêt, une intervention manuelle des responsables de publication est normalement requise.

Si vous avez des problèmes avec des groupes compliqués de paquets comme cela, demandez de l'aide sur `debian-devel@lists.debian.org` ou `debian-release@lists.debian.org`.

[1]

Reportez-vous à la Charte Debian (« Debian Policy Manual ») pour savoir dans quelle section un paquet doit être classé.

[2]

Par le passé, ces NMU utilisaient le numéro de troisième niveau de la partie Debian de la révision pour indiquer l'état de leur recompilation particulière ; cependant, cette syntaxe était ambiguë pour les paquets natifs et ne permettait pas d'ordonner correctement les NMU de recompilation particulière, les NMU source et les NMU de sécurité sur le même paquet, elle a donc été abandonnée en faveur de cette nouvelle syntaxe.

[3]

ITS est une abréviation pour "Intend to Salvage".

[4]

Though, if a package still is in the upload queue and hasn't been moved to Incoming yet, it can be removed. (see Envois sur ftp-master)

## 5.17. The Stable backports archive

### 5.17.1. Bases

Once a package reaches the `testing` distribution, it is possible for anyone with upload rights in Debian (see below about this) to build and upload a backport of that package to `stable-backports`, to allow easy installation of the version from `testing` onto a system that is tracking the `stable` distribution.

One should not upload a version of a package to `stable-backports` until the matching version has already reached the `testing` archive.

### 5.17.2. Exception to the testing-first rule

The only exception to the above rule, is when there's an important security fix that deserves a quick upload: in such a case, there is no need to delay an upload of the security fix to the `stable-backports` archive. However, it is strongly advised that the package is first fixed in `unstable` before uploading a fix to the `stable-backports` archive.

### 5.17.3. Who can maintain packages in the stable-backports archive?

It is not necessarily up to the original package maintainer to maintain the `stable-backports` version of the package. Anyone can do it, and one doesn't even need approval from the original maintainer to do so. It is however good practice to first get in touch with the original maintainer of the package before attempting to start the maintenance of a package in `stable-backports`. The maintainer can, if they wish, decide to maintain the backport themselves, or help you doing so. It is not uncommon, for example, to apply a patch to the unstable version of a package, to facilitate its backporting.

### 5.17.4. When can one start uploading to stable-backports?

The new `stable-backports` is created before the freeze of the next `stable` suite. However, it is not allowed to upload there until the very end of the freeze cycle. The `stable-backports` archive is usually opened a few weeks before the final release of the next `stable` suite, but it doesn't make sense to upload until the release has actually happened.

### 5.17.5. How long must a package be maintained when uploaded to stable-backports?

The `stable-backports` archive is maintained for bugs and security issues during the whole life-cycle of the Debian `stable` suite. Therefore, an upload to `stable-backports`, implies a willingness to maintain the backported package for the duration of the `stable` suite, which can be expected to be about 3 years from its initial release.

The person uploading to backports is also supposed to maintain the backported packages for security during the lifetime of `stable`.

It is to be noted that the `stable-backports` isn't part of the LTS or ELTS effort. The `stable-backports` FTP masters will close the `stable-backports` repositories for uploads once `stable` reaches end-of-life (ie: when `stable` becomes maintained by the LTS team only). Therefore there won't be any maintenance of packages from `stable-backports` after the official end of life of the `stable` suite, as uploads will not be accepted.

### 5.17.6. How often shall one upload to stable-backports?

The packages in backports are supposed to follow the developments that are happening in Testing. Therefore, it is expected that any significant update in `testing` should trigger an upload into `stable-backports`, until the new `stable` is released. However, please do not backport minor version changes without user visible changes or bugfixes.

### 5.17.7. How can one learn more about backporting?

You can learn more about how to contribute directly on the backport web site.

It is also recommended to read the Frequently Asked Questions (FAQ).