Chapitre 2. Gestion des paquets Debian

# Chapitre 2. Gestion des paquets Debian

| Note
Ce chapitre a été écrit en supposant que le nom de code de la dernière version stable est `Trixie`. La source des données du système APT est collectivement appelée la liste des sources dans ce document. Elle peut être définie n'importe où dans le fichier "`/etc/apt/sources.list`", les fichiers "`/etc/apt/sources.list.d/*.list`" ou les fichiers "`/etc/apt/sources.list.d/*.sources`".

## 2.1. Prérequis pour la gestion des paquets Debian

### 2.1.1. Système de gestion des paquets Debian

Debian est une association de volontaires qui construit des distributions cohérentes de paquets binaires de logiciels libres pré-compilés et les distribue depuis son archive.

L’archive Debian est proposée depuis de nombreux sites-miroirs distants, on peut y accéder par les méthodes HTTP et FTP. Elle est aussi disponible sous forme de CD-ROM/DVD.

Le système actuel de gestion des paquets de Debian qui peut utiliser toutes ces ressources est Advanced Packaging Tool (APT).

Le système de gestion des paquets Debian, lorsqu’il est proprement utilisé, permet à l’utilisateur d’installer sur le système des ensembles cohérents de paquets binaires à partir de l’archive. Il y a actuellement 78093 paquets disponibles pour l’architecture amd64.

Le système de gestion des paquets de Debian possède un riche historique et de nombreux choix de programmes d’interface pour l’utilisateur final et de méthodes de fond pour l’accès aux archives. Actuellement, nous recommandons ce qui suit :

- apt(8) pour toutes les opérations interactives en ligne de commande, y compris l'installation et la suppression de paquets et la mise à niveau de la distribution.

- apt-get(8) pour appeler le système de gestion de paquet Debian depuis des scripts. C'est également une option de rechange lorsqu'`apt` n'est pas disponible (souvent le cas avec d'anciens systèmes Debian).

- aptitude(8) pour une interface interactive en mode texte permettant de gérer les paquets installés et de faire des recherches parmi les paquets disponibles.

Tableau 2.1. Liste des outils de gestion des paquets de Debian

paquet | popularité | taille | description
--- | --- | --- | ---
`dpkg` | V:904, I:1000 | 6399 | système de gestion des paquets de bas niveau pour Debian (basé sur les fichiers)
`apt` | V:892, I:1000 | 4956 | frontaux d’APT pour gérer les paquets en ligne de commande : `apt`/`apt-get`/`apt-cache`
`aptitude` | V:32, I:168 | 4621 | frontal d’APT pour gérer interactivement les paquets avec une console plein écran : aptitude(8)
`tasksel` | V:37, I:984 | 351 | frontal d’APT pour installer les tâches sélectionnées : tasksel(8)
`unattended-upgrades` | V:127, I:181 | 320 | paquet d’amélioration d’APT permettant une installation automatique des mises à niveau de sécurité
`gnome-software` | V:155, I:259 | 4707 | gestionnaire de logiciels pour GNOME (interface graphique pour APT)
`synaptic` | V:31, I:276 | 7788 | gestionnaire de paquets graphique (frontal en GTK pour APT)
`apt-utils` | V:414, I:998 | 1181 | Programmes utilitaires d’APT : apt-extracttemplates(1), apt-ftparchive(1) et apt-sortpkgs(1)
`apt-listchanges` | V:396, I:891 | 562 | outil de notification des modifications d’un paquet
`apt-listbugs` | V:5.2, I:7.1 | 512 | affiche la liste des bogues critiques avant chaque installation par APT
`apt-file` | V:15, I:56 | 89 | utilitaire de recherche de paquet d’APT — interface en ligne de commandes
`apt-rdepends` | V:0.4, I:4.7 | 39 | afficher de manière récursive la liste des dépendances du paquet

### 2.1.2. Configuration de paquets

Voici quelques points-clés de la configuration des paquets sur un système Debian :

- For the modern Desktop environment, rebooting of the system after package configuration change and package upgrade is a good idea to ensure the system to function properly.

- la configuration manuelle effectuée par l’administrateur du système est respectée. En d’autres termes, le système de configuration des paquets effectue, pour des raisons de commodité, une configuration non intrusive ;

- chaque paquet possède son propre script de configuration avec une interface utilisateur standardisée appelée debconf(7) qui permet de faciliter le processus initial d’installation du paquet ;

- les développeurs Debian font de leur mieux pour que vos mises à jour se fassent de manière impeccable avec les scripts de configuration du paquet ;

- l’administrateur du système peut utiliser toutes les fonctionnalités des paquets de logiciels. Cependant, celles qui présentent un risque de sécurité sont désactivées lors de l’installation par défaut ;

- si vous activez vous-même un service qui présente certains risques de sécurité, vous êtes responsable du confinement du risque ;

- Des configurations ésotériques peuvent être activées manuellement par l’administrateur du système. Cela peut créer une interférence avec les programmes génériques d’assistance à la configuration du système.

### 2.1.3. Précautions de base

| Avertissement
Ne pas installer de paquets provenant d’un mélange aléatoire de suites. Cela va probablement casser la cohérence des paquets et demande une connaissance en profondeur de la gestion du système, comme l’ABI, d’un compilateur, la version d’une bibliothèque, les fonctionnalités d’un interpréteur, etc.

Le nouveau administrateur du système Debian devrait rester avec la `stable` version de Debian tout en appliquant seulement les mises à jour de sécurité. Jusqu'à ce que vous compreniez très bien le système Debian, vous devriez suivre les précautions suivantes.

- Ne pas inclure `testing` ou `unstable` dans la liste des sources.

- Ne mélangez pas les archives Debian standard avec d'autres archives non Debian comme Ubuntu dans la liste des sources .

- ne pas créer le fichier « `/etc/apt/preferences` » ;

- ne pas modifier le comportement par défaut des outils de gestion des paquets au travers des fichiers de configuration sans en connaître toutes les conséquences ;

- ne pas installer de paquets quelconques à l’aide de « `dpkg -i paquet_quelconque` » ;

- ne jamais installer de paquets quelconques à l’aide de « `dpkg --force-all -i paquet_quelconque` » ;

- ne pas effacer ni modifier les fichiers se trouvant dans « `/var/lib/dpkg/` » ;

- ne pas écraser les fichiers systèmes en installant des logiciels directement depuis les sources.

  - Au besoin, les installer dans « `/usr/local` » ou « `/opt` ».

Les effets de non-compatibilité provoqués par la violation des précautions ci-dessus concernant le système de gestion des paquets Debian peuvent rendre votre système inutilisable.

L’administrateur système Debian sérieux, qui s’occupe de serveurs dont la mission est critique, devra prendre des précautions supplémentaires :

- ne pas installer de paquets, y compris les mises à jour de sécurité provenant de Debian sans les avoir testés soigneusement, avec votre configuration particulière, dans des conditions sûres.

  - Vous êtes finalement, en tant qu’administrateur système, responsable de votre système.

  - La longue histoire de stabilité du système Debian n’est pas, en elle-même, une garantie.

### 2.1.4. La vie avec d’éternelles mises à jour

| Attention
Pour votre serveur de production, la suite `stable` avec les mises à jour de sécurité est recommandée. On peut dire la même chose des PC de bureau sur lesquels vous ne pouvez dépenser que des efforts limités d’administration.

Malgré mes avertissements ci-dessus, je sais que de nombreux lecteurs de ce document peuvent souhaiter exécuter les nouvelles distributions `testing` ou `unstable`.

La Lumière provenant de ce qui suit sauvera une personne de l’éternelle lutte karmique de l’enfer des mises à jour et lui permettra d’atteindre le nirvana de Debian.

Cette liste est faite pour un environnement de bureau auto-administré.

- Utilisez la publication `testing` car il s’agit pratiquement de la version continue gérée automatiquement par l’infrastructure d’assurance qualité de l’archive Debian telle que l’intégration continue de Debian , les pratiques de téléversement de sources uniquement et le suivi des transitions de bibliothèque. Les packages de la publication `testing` sont mis à jour assez fréquemment pour offrir toutes les fonctionnalités les plus récentes.

- Définir le nom de code correspondant à la suite `testing` ("`forky`" pendant le cycle de publication `trixie`-as-`stable`) dans le répertoire des sources.

- Mettez manuellement à jour ce nom de code dans la liste des sources vers le nouveau nom seulement après avoir évalué la situation par vous-même pendant environ un mois après la publication de la suite majeure. Les listes de diffusion des utilisateurs et des développeurs de Debian sont de bonnes sources d'information pour cela aussi.

L'utilisation de la publication `unstable` n'est pas recommandée. La publication `unstable` est destinée au débogage des paquets en tant que développeur, mais vous expose à des risques inutiles pour un utilisation normale comme bureau. Même si la suite `unstable` du système Debian semble très stable la plupart du temps, il y a eu quelques problèmes avec des paquets, et certains d'entre eux n'étaient pas si faciles à résoudre.

Voici quelques idées de mesures de précaution basiques pour assurer une récupération rapide et facile lors de bogues dans les paquets Debian :

- Make the rescue system available by following Section 3.2, « Rescue system ».

- faites un système avec un double démarrage en installant la suite `stable` du système Debian sur une autre partition ;

- pensez à installer `apt-listbugs` afin de vérifier les informations du Système Debian de suivi des bogues (BTS) avant de faire une mise à jour ;

- apprenez suffisamment l’infrastructure du système de paquets pour contourner le problème ;

| Attention
Si vous ne savez pas faire l’une quelconque de ces actions de précaution, vous n’êtes probablement pas prêt pour les versions `testing` et `unstable`.

### 2.1.5. Bases concernant l’archive Debian

| Astuce
La charte officielle de l’archive Debian est définie dans la Charte Debian, chapitre 2 - l’archive Debian.

Jetez un œil sur l’archive Debian avec le point de vue d’un utilisateur du système.

Pour un utilisateur du système, l'archive Debian est accessible à l'aide du système APT.

Le système APT spécifie sa source de données comme la liste des sources et elle est décrite dans sources.list(5).

For the `trixie` system with the typical HTTP access, the source list is provided in the modern deb822-style in "`/etc/apt/sources.list.d/debian.sources`" as the following:

    Types: deb deb-src
    URIs: http://deb.debian.org/debian/
    Suites: trixie
    Components: main non-free-firmware contrib non-free

    Types: deb deb-src
    URIs: http://security.debian.org/debian-security/
    Suites: trixie-security
    Components: main non-free-firmware contrib non-free

| Astuce

If the source list is provided in the older deprecated one-line-style in "`/etc/apt/sources.list`" or "`/etc/apt/sources.list.d/*.list`" files, update them with:

     $ sudo apt modernize-sources

Key points of the source list in deb822-style are followings.

- Ses fichiers de définition se trouvent dans les fichiers "`/etc/apt/sources.list.d/*.sources`".

- Chaque bloc de lignes séparé par une ligne vierge définit la source de données pour le système APT.

- La strophe "`Types:`" définit la liste des types tels que "`deb`" et "`deb-src`".

- La strophe "`URIs:`" définit la liste des URIs racine de l'archive Debian.

- La section "`Suites:`" définit la liste des noms de distribution en utilisant soit le nom de la suite, soit le nom de code.

- La section " `Composants:` " définit la liste des noms de zones d'archivage valides de l'archive Debian.

La définition de "`deb-src`" peut être omise sans risque si elle ne concerne que `aptitude` qui n'accède pas aux métadonnées relatives aux sources. Il accélère la mise à jour des métadonnées de l'archive.

L'URL peut être "`https://`", "`http://`", "`ftp://`", "`file://`", .....

Les lignes commençant par "`#`" sont des commentaires et sont ignorées.

Ici, j'ai tendance à utiliser le nom de code "`trixie`" ou "`forky`" au lieu du nom de suite "`stable`" ou "`testing`" pour éviter les surprises lors de la sortie de la prochaine `stable`.

| Astuce
Si "`sid`" est utilisé dans l'exemple ci-dessus au lieu de "`trixie`", la ligne "`deb: http://security.debian.org/ …`" ou son contenu équivalent deb822 pour les mises à jour de sécurité dans la liste des sources n'est pas nécessaire. En effet, il n'existe pas d'archive de mise à jour de sécurité pour "`sid`" (`unstable`).

Voici la liste des URL des sites de l'archive Debian et du nom de la suite ou du nom de code utilisé dans le fichier de configuration après la publication de `trixie`.

Tableau 2.2. Liste des sites d’archive de Debian

URL de l’archive | nom de la suite | nom de code | but du dépôt
--- | --- | --- | ---
http://deb.debian.org/debian/ | `stable` | `trixie` | publication `stable` quasi statique après des vérifications intensives
http://deb.debian.org/debian/ | `testing` | `forky` | publication `testing` évolutive avec de sérieuses vérifications et un délai d’attente
http://deb.debian.org/debian/ | `unstable` | `sid` | distribution `unstable` évolutive avec des vérifications minimales et sans délai d’attente
http://deb.debian.org/debian/ | `experimental` | N/A | expérimentation d’une pré-publication par des développeurs (facultative et réservée aux développeurs)
http://deb.debian.org/debian/ | `stable-proposed-updates` | `trixie-proposed-updates` | mises à jour pour la prochaine version `stable` intermédiaire (facultatif)
http://deb.debian.org/debian/ | `stable-updates` | `trixie-updates` | Sous-ensemble de la suite `stable-proposed-updates` ayant besoin de mises à jour urgentes comme les données de zone horaire (facultatif)
http://deb.debian.org/debian/ | `stable-backports` | `trixie-backports` | collection arbitraire de paquets recompilés, la plupart issus de la publication `testing` (facultatif)
http://security.debian.org/debian-security/ | `stable-security` | `trixie-security` | mises à jour de sécurité pour la publication `stable` (important)
http://security.debian.org/debian-security/ | `testing-security` | `forky-security` | non géré activement ni utilisé par l’équipe de sécurité

| Attention

Seule la version `stable` pure avec les mises à jour de sécurité présente la meilleure stabilité. Faire tourner une version principalement `stable` mélangée à quelques paquets venant des versions `testing` ou `unstable` est plus risqué que d’utiliser une version `unstable` pure parce que des versions de bibliothèques peuvent ne pas correspondre, etc. Si vous avez réellement besoin de la dernière version de certains programmes sous la version `stable`, utilisez alors les paquets venant de stable-updates et backports (consulter Section 2.7.4, « Mises à jour et rétroportages »). Ces services doivent être utilisés avec des précautions supplémentaires.

| Attention

De base, vous ne devriez avoir qu’une seule des suites `stable`, `testing` ou `unstable` sur la ligne « `deb` ». Si vous avez une combinaison des suites `stable`, `testing` et `unstable` sur la ligne « `deb` », les programmes APT vont être ralentis bien que seule la dernière archive soit utilisée. Des mentions multiples ont un intérêt lorsqu’on utilise le fichier « `/etc/apt/preferences` » avec des objectifs clairs (consultez Section 2.7.7, « Ajustement de la version candidate avec apt-pinning »).

| Astuce
Pour un système Debian avec la suite `stable`, c’est une bonne idée d'inclure "`http://security.debian.org/`" dans la liste des source pour activer les mises à jour de sécurité comme dans l'exemple ci-dessus.

| Note

Les bogues de sécurité de l’archive `stable` sont corrigés par l’équipe de sécurité de Debian. Cette activité a été assez rigoureuse et fiable. Ceux de l’archive `testing` peuvent être corrigés par l’équipe de sécurité de Debian. Pour diverses raisons, cette activité n’est pas aussi rigoureuse que pour `stable` et vous pouvez avoir à attendre la migration de paquets corrigés de `unstable` vers l'archive `testing`. Ceux de l’archive `unstable` sont corrigés par les responsables individuels. Les paquets de `unstable` maintenus de manière active sont habituellement maintenus dans un assez bon état par mise à niveau avec les dernières corrections de sécurité des développeurs amonts. Consultez FAQ de sécurité de Debian concernant la manière dont Debian gère les bogues de sécurité.

Tableau 2.3. Liste des sections de l’archive de Debian

section | nombre de paquets | critères de composant du paquet
--- | --- | ---
`main` | 76611 | conforme à DFSG sans dépendance vers `non-free`
`non-free-firmware` | 75 | non compatible DFSG, microprogramme requis pour une expérience satisfaisante de l’installation du système
`contrib` | 362 | conforme à DFSG mais avec des dépendances vers `non-free`
`non-free` | 1045 | non conforme à DFSG et non dans `non-free-firmware`

Ici, le nombre de paquets est celui de l’architecture amd64. La section `main` fournit le système Debian (consultez Section 2.1.6, « Debian est totalement libre »).

La meilleure manière d’étudier l’organisation de l’archive Debian est de pointer votre navigateur vers chacune des URL des archives en y ajoutant `dists` ou `pool`.

On se réfère à la distribution de deux manières, la version ou le nom de code. Le mot « distribution » est aussi utilisé comme synonyme de version dans de nombreuses documentations. La relation entre la version et le nom de code peut être résumée comme suit :

Tableau 2.4. Relation entre version et nom de code

calendrier | version = `stable` | version = `testing` | version = `unstable`
--- | --- | --- | ---
après la diffusion de `trixie` | nom de code = `trixie` | nom de code = `forky` | nom de code = `sid`
après la diffusion de `forky` | nom de code = `forky` | nom de code = `duke` | nom de code = `sid`

L’histoire des noms de code a été décrite dans la FAQ Debian : 6.2.1 Quels noms de code ont déjà été utilisés ?

Dans la terminologie la plus stricte de l’archive Debian, le mot « section » est spécifiquement utilisé pour la catégorisation des paquets par zone d’application. (Cependant l’expression « section principale » peut parfois être utilisée pour décrire la section de l’archive Debian qui fournit la zone « main ».)

Chaque fois qu’un nouveau chargement est fait par un développeur Debian (DD) vers l’archive `unstable` (par l’intermédiaire du traitement d’incoming), le DD doit s’assurer que les paquets envoyés sont compatibles avec le dernier ensemble de paquets de l’archive `unstable`.

Si le DD casse intentionnellement cette compatibilité en raison de la mise à jour d’une bibliothèque importante, etc., il y a habituellement une annonce sur la liste de diffusion debian-devel, etc.

Avant qu’un ensemble de paquets ne soit déplacé par le script de maintenance de l’archive Debian depuis l’archive `unstable` vers l’archive `testing`, le script de maintenance de l’archive ne se contente pas vérifier sa maturité (environ 2-10 jours) et l’état des rapports de bogues pour ces paquets mais essaie aussi de s’assurer qu’ils sont compatibles avec le dernier ensemble des paquets de l’archive `testing`. Ce processus rend l’archive `testing` très actuelle et utilisable.

Par le processus de gel progressif de l’archive dirigé par l’équipe de diffusion (« release team »), l’archive `testing` est mûrie afin de la rendre entièrement cohérente et sans bogue avec quelques interventions manuelles. Ensuite, la nouvelle version `stable` est créée en assignant le nom de code de l’ancienne archive `testing` à la nouvelle archive `stable` et en créant un nouveau nom de code pour la nouvelle archive `testing`. Le contenu initial de la nouvelle archive `testing` est exactement le même que celui de l’archive `stable` qui vient d’être diffusée.

Les archives `unstable` et `testing` peuvent toutes les deux souffrir temporairement de problèmes en raison de divers facteurs :

- chargement vers l’archive cassé (la plupart du temps, cela concerne `unstable`) ;

- délai pour accepter un nouveau paquet dans l’archive (la plupart du temps, cela concerne `unstable`) ;

- problème de temps de synchronisation de l’archive (à la fois pour `testing` et `unstable`) ;

- intervention manuelle sur l’archive comme la suppression d’un paquet (davantage pour `testing`), etc.

Si vous décidez donc d’utiliser ces archives, vous devriez être capable de corriger ou de contourner ces types de problèmes.

| Attention

Pendant les quelques mois qui suivent la diffusion d’une nouvelle version `stable`, la plupart des utilisateur de machines de bureau devraient utiliser l’archive `stable` avec ses mises à jour de sécurité même s’ils utilisent habituellement les archives `unstable` ou `testing`. Pendant cette période de transition, les archives `unstable` et `testing` ne sont pas bonnes pour la plupart des gens. Votre système sera difficile à conserver dans un bon état de fonctionnement avec l’archive `unstable` car elle souffre de pics d’importantes mises à jour de paquets fondamentaux. L’archive `testing` n’est pas utile non plus car elle a sensiblement le même contenu que l’archive `stable` sans la prise en compte de la sécurité (Debian testing-security-announce 2008-12). Après environ un mois, les archives `unstable` et `testing`peuvent être utilisées en prenant des précautions.

| Astuce
Lors du suivi de l’archive `testing`, un problème causé par la suppression d’un paquet est habituellement contournée en installant le paquet correspondant de l’archive `unstable` qui est envoyé pour la correction du bogue.

Consultez la Charte Debian pour la définition des archives.

- « Sections »

- « Priorités »

- « Système de base »

- « Paquets essentiels »

### 2.1.6. Debian est totalement libre

Debian est totalement libre pour les raisons suivantes :

- Debian n’installe que des logiciels libres par défaut pour respecter les libertés des utilisateurs ;

- Debian ne fournit que des logiciels libres dans `main` ;

- Debian recommande de n’utiliser que des logiciels libres de `main` ;

- Aucun paquet de `main` ne dépend ou ne recommande de paquets de `non-free`, de `non-free-firmware` ou de `contrib`.

Certaines personnes se demandent si les deux faits suivants sont contradictoires ou non.

- « Debian demeurera totalement libre » (premier point du contrat social Debian).

- Les serveurs Debian hébergent certains paquets `non-free-firmware`, `non-free` et `contrib`.

Ce n’est pas contradictoire pour les raisons suivantes.

- Le système Debian est totalement libre et ses paquets sont hébergés par les serveurs Debian dans la section `main` de l’archive.

- Des paquets hors du système Debian sont hébergés par les serveurs Debian dans les sections `non-free`, `non-free-firmware` et `contrib` de l’archive.

C’est précisément expliqué dans les quatrième et cinquième points du contrat social Debian :

- Nos priorités sont nos utilisateurs et les logiciels libres.

  - Les besoins de nos utilisateurs et de la communauté des logiciels libres nous guideront. Nous placerons leurs intérêts en tête de nos priorités. Nous répondrons aux besoins de nos utilisateurs dans de nombreux types d’environnements informatiques différents. Nous ne nous opposerons pas aux travaux non libres prévus pour fonctionner sur les systèmes Debian. Nous permettrons, sans réclamer rétribution, que d’autres créent des distributions contenant conjointement des logiciels Debian et d’autres travaux. Pour servir ces objectifs, nous fournirons un système intégrant des composants de grande qualité sans restrictions légales incompatibles avec ces modes d’utilisation.

- Travaux non conformes à nos standards sur les logiciels libres.

  - Nous reconnaissons que certains de nos utilisateurs ont besoin d’utiliser des œuvres qui ne sont pas conformes aux Lignes directrices du logiciel libre Debian. Nous avons créé des sections "`non-free`", "`non-firmware`" et "`contrib`" dans notre archive pour ces travaux. Les paquets dans ces sections ne font pas partie du système Debian, bien qu'ils aient été configurés pour être utilisés avec Debian. Nous encourageons les fabricants de CD à lire les licences des paquets dans ces sections et à déterminer s'ils peuvent distribuer ces paquets dans leurs CD. Ainsi, même si les travaux non libres ne font pas partie de Debian, nous soutenons leur utilisation et fournissons l'infrastructure pour les paquets non libres (comme notre système de suivi des bogues et nos listes de diffusion). Les médias officiels de Debian peuvent inclure un micrologiciel qui ne fait pas partie du système Debian pour permettre l'utilisation de Debian avec du matériel qui nécessite ce micrologiciel.

| Note
Le texte du cinquième paragraphe dans la version 1.2 actuelle du Contrat social de Debian est légèrement différent du texte ci-dessus. Cette déviation éditoriale est intentionnelle pour rendre ce document utilisateur cohérent sans modifier le contenu réel du Contrat social.

Les utilisateurs devraient être conscients des risques d'utilisation de paquets des sections `non-free`, `non-free-firmware` et `contrib` :

- l’absence de liberté pour de tels paquets de logiciel ;

- l’absence de suivi de la part de Debian pour de tels paquets de logiciel (Debian ne peut pas suivre correctement un logiciel sans avoir accès à son code source) ;

- la contamination de votre système Debian totalement libre.

Les principes du logiciel libre selon Debian sont les normes du logiciel libre pour Debian. Debian interprète « logiciel » de la façon la plus large possible, y compris la documentation, les microprogrammes, les logos et données artistiques des paquets. Cela rend les normes du logiciel libre de Debian très strictes.

Les paquets classiques de `non-free`, `non-free-firmware` et `contrib` incluent des paquets distribuables librement des types suivants :

- les paquets de documentation sous licence de documentation libre GNU avec des sections invariables comme celles de GCC et Make (la plupart sont dans la section `non-free/doc`) ;

- les paquets de micrologiciel contenant des données binaires sans source telles que celles listées dans Section 9.10.5, « Pilotes de matériel et microprogramme » comme `non-free-firmware` (principalement trouvés dans la section `non-free-firmware/kernel`) ;

- les paquets de jeu ou de fonte avec des restrictions sur l’utilisation commerciale ou la modification de contenu.

Veuillez remarquer que le nombre de paquets de `non-free`, `non-free-firmware` et `contrib` est inférieur à 2 % de ceux dans `main`. Activer l’accès aux sections `non-free`, `non-free-firmware` et `contrib` ne cache pas la provenance des paquets. L’utilisation interactive d’aptitude(8) fournit une visibilité totale et un contrôle complet des paquets installés et de leur section pour garder le système aussi libre que voulu.

### 2.1.7. Dépendances des paquets

Le système Debian offre un ensemble cohérent de paquets binaires par l’intermédiaire de son mécanisme de déclaration de dépendances binaires versionnées dans les champs du fichier « control ». En voici une définition un peu simplifiée :

- « Depends »

  - Cela déclare une dépendance absolue du paquet et tous les paquets listés dans ce champ doivent être installés en même temps ou à l’avance.

- « Pre-Depends »

  - Comme pour « Depends » excepté que cela demande une installation complète et à l’avance des paquets cités.

- « Recommends »

  - Cela déclare une dépendance forte mais non absolue. La plupart des utilisateurs n’installeront pas le paquet si tous les paquets cités dans ce champ ne sont pas installés.

- « Suggests »

  - Cela déclare une dépendance faible. De nombreux utilisateurs de ce paquet pourront tirer profit de l’installation des paquets cités dans ce champ, mais auront cependant des fonctionnalités acceptables sans eux.

- « Enhances »

  - Cela déclare une dépendance faible comme Suggests mais fonctionne dans la direction opposée.

- « Casse »

  - Cela déclare une incompatibilité de paquet avec habituellement une indication de version. La solution est en général de mettre à jour tous les paquets indiqués dans ce champ.

- « Conflicts »

  - Cela déclare une incompatibilité absolue. Tous les paquets cités dans ce champs doivent être supprimés pour installer ce paquet.

- « Replaces »

  - C’est déclaré lorsque les fichiers installés par ce paquet remplacent des fichiers des paquets cités.

- « Provides »

  - C’est déclaré lorsque ce paquet fournit tous les fichiers et les fonctionnalités des paquets cités.

| Note
Remarquez que définir simultanément « Provides », « Conflicts » et « Replaces » pour un paquet virtuel est une configuration saine. Cela permet de s’assurer qu’un seul paquet réel fournissant ce paquet virtuel puisse être installé à un moment donné.

La définition officielle, y compris les dépendances de sources, se trouve dans la Charte Debian ; Chapitre 7 - Déclaration des dépendances entre paquets.

### 2.1.8. Flux des événements dans la gestion d’un paquet

Voici un résumé du flux simplifié des événements de la gestion d’un paquet par APT.

- Mettre à jour (« update ») («`apt update`», « `aptitude update` » ou « `apt-get update` ») :

  1. Rechercher les métadonnées d’une archive depuis l’archive distante

  2. Reconstruire et mettre à jour les métadonnées locales pour qu’elles puissent être utilisées par APT

- Mettre à niveau (« upgrade ») («`apt upgrade`» et «`apt full-upgrade`», ou « `aptitude safe-upgrade` » et « `aptitude full-upgrade` » ou « `apt-get upgrade` » et « `apt-get dist-upgrade` ») :

  1. Choisir la version candidate, qui est habituellement la dernière version disponible, pour tous les paquets installés (consultez Section 2.7.7, « Ajustement de la version candidate avec apt-pinning » pour les exceptions) ;

  2. Effectuer la résolution des dépendances du paquet

  3. Rechercher le paquet binaire sélectionné depuis l’archive distante si la version candidate est différente de la version installée

  4. Dépaqueter les paquets binaires ayant été téléchargés

  5. Lancer le script preinst

  6. Installer les fichiers binaires

  7. Lancer le script postinst

- Installer («`apt install …`», `aptitude install …` » ou « `apt-get install …` ») :

  1. Choisir les paquets indiqués sur la ligne de commandes

  2. Effectuer la résolution des dépendances du paquet

  3. Récupérer les paquets binaires sélectionnés depuis l’archive distante

  4. Dépaqueter les paquets binaires ayant été téléchargés

  5. Lancer le script preinst

  6. Installer les fichiers binaires

  7. Lancer le script postinst

- Supprimer («`apt remove …`», « `aptitude remove …` » ou « `apt-get remove …` ») :

  1. Choisir les paquets indiqués sur la ligne de commandes

  2. Effectuer la résolution des dépendances du paquet

  3. Lancer le script prerm

  4. Supprimer les fichiers installés à l’exception des fichiers de configuration

  5. Lancer le script postrm

- Purger (« `apt purge` », « `aptitude purge …` » ou « `apt-get purge …` ») :

  1. Choisir les paquets indiqués sur la ligne de commandes

  2. Effectuer la résolution des dépendances du paquet

  3. Lancer le script prerm

  4. Supprimer les fichiers installés y compris leurs fichiers de configuration

  5. Lancer le script postrm

J’ai ici intentionnellement sauté des détails techniques dans le souci d’avoir une vue d’ensemble.

### 2.1.9. Première réponse aux problèmes de gestion de paquets

Vous devriez lire l’excellente documentation officielle. Le premier document à lire est « `/usr/share/doc/nom_paquet/README.Debian` » qui est spécifique à Debian. Les autres documents dans « `/usr/share/doc/nom_paquet/` » devraient aussi être consultés. Si vous avez configuré l’interpréteur de commande comme dans Section 1.4.2, « Personnaliser bash », entrez ce qui suit :

    $ cd package_name
    $ pager README.Debian
    $ mc

Vous aurez besoin d’installer le paquet de documentation correspondant au paquet dont le nom possède le suffixe « `-doc` » pour des informations détaillées.

Si vous rencontrez des problèmes avec un paquet particulier, faites d’abord une recherche sur le site du système de suivi des bogues Debian (BTS).

Tableau 2.5. Liste de sites web clés pour résoudre les problèmes avec un paquet particulier

site web | commande
--- | ---
Page d’accueil du système de suivi des bogues Debian (BTS) | `sensible-browser "https://bugs.debian.org/"`
Signalement de bogue d’un nom de paquet connu | `sensible-browser "https://bugs.debian.org/package_name"`
Rapport de bogue concernant un numéro de bogue connu | `sensible-browser "https://bugs.debian.org/bug_number"`

Rechercher sur Google avec des mots de recherche comprenant « `site:debian.org` », « `site:wiki.debian.org` », « `site:lists.debian.org` », etc.

Pour déposer un signalement de bogue, veuillez utiliser la commande reportbug(1).

### 2.1.10. Comment obtenir des paquets Debian

Si vous trouvez deux paquets similaires et que vous vous demandez lequel installer sans faire des efforts d’« essais et erreurs », vous pouvez user de bon sens. Je considère que les points suivants constituent de bonnes indications pour les paquets à privilégier :

- Essential : yes > no

- Section : main > contrib > non-free

- Priorité : required > important > standard > optional > extra

- Tâches : paquets affichés dans les tâches tels que « Environnement de bureau »

- Packages selected by the dependency package (e.g., `gcc-16` by `gcc`)

- Popcon : les votes et le nombre d’installations les plus élevés

- Journaux des modifications (« Changelog ») : mises à jour régulières par le responsable

- BTS : pas de bogue RC (pas de bogue critique, grave ou sérieux)

- BTS : réactivité du responsable aux signalements de bogues

- BTS : le plus grand nombre de bogues réglés récemment

- BTS : le plus faible nombre de bogues restants qui ne soient pas dans la liste des vœux

Debian étant un projet basé sur le volontariat avec un modèle de développement distribué, son archive contient de nombreux paquets avec des cibles différentes et de qualité variable. Vous devrez choisir vous-même ce que vous voulez en faire.

### 2.1.11. Comment faire face à des exigences conflictuelles

Quelle que soit la suite du système Debian que vous pouvez décider d'utiliser, vous pouvez toujours vouloir exécuter des versions de programmes qui ne sont pas disponibles dans cette suite. Même si vous trouvez des paquets binaires de tels programmes dans d'autres suites Debian ou dans d'autres ressources non Debian, leurs exigences peuvent être incompatibles avec votre système Debian actuel.

Bien qu’il soit possible d’ajuster votre système de gestion de paquets avec la technique apt-pinningetc., comme décrit dans Section 2.7.7, « Ajustement de la version candidate avec apt-pinning », pour installer de tels paquets binaires hors synchronisation, ces approches de peaufinage ont seulement des cas d'utilisation limités, car elles peuvent briser ces programmes et votre système.

Avant d'installer brutalement ces paquets hors synchronisation, vous devriez chercher toutes les solutions techniques alternatives plus sûres qui sont compatibles avec votre système Debian actuel :

- installez de tels programmes en utilisant les paquets binaires correspondants dans un bac à sable (consultez Section 7.7, « Bac à sable »),

  - beaucoup de programmes graphiques tels que les applications LibreOffice et GNOME sont disponibles sous forme de paquets Flatpak, Snap ou AppImage ;

- créez un environnement isolé (« chroot ») ou similaire et faites-y tourner de tels programmes (consulter la Section 9.11, « Système virtualisé »),

  - les commandes en ligne de commande peuvent être exécutées facilement sous son chroot compatible (consulter Section 9.11.4, « Système protégé (chroot) »),

  - plusieurs environnements de bureau complets peuvent être essayés facilement sans redémarrage (voir Section 9.11.5, « Systèmes de bureaux multiples ») ;

- construisez des versions souhaitées de paquets binaires qui sont compatibles avec votre système Debian actuel par vous-même,

  - il s'agit d'une tâche non triviale (voir Section 2.7.13, « Porter un paquet vers le système stable »).

## 2.2. Opérations de base de la gestion des paquets

Sur le système Debian, les opérations de gestion des paquets basées sur les dépôts peuvent être réalisées à l’aide de nombreux outils de gestion de paquets basés sur APT et disponibles dans le système Debian. Nous décrirons ici les outils de base de gestion des paquets : `apt`, `apt-get`/`apt-cache` et `aptitude`.

Pour les opérations de gestion des paquets qui concernent l’installation des paquets ou les mises à jour des métadonnées des paquets, vous aurez besoin des privilèges de l’administrateur.

### 2.2.1. `apt` vs. `apt-get` / `apt-cache` vs. `aptitude`

Bien qu'`aptitude` soit un très bon outil interactif et que l'auteur l'utilise, voici quelques avertissements que vous devriez connaître :

- La commande `aptitude` n'est pas recommandée pour une mise à niveau du système entre versions sur le système Debian `stable` après la sortie d'une nouvelle version.

  - L'utilisation de "`apt full-upgrade`" ou de "`apt-get dist-upgrade`" est recommandée pour cela. Voir Bug #411280.

- La commande `aptitude` suggère parfois la suppression massive de paquets lors de la mise à niveau du système sur des systèmes Debian en `testing` ou `unstable`.

  - Cette situation a effrayé de nombreux administrateurs système. Pas de panique.

  - Il semblerait que cela soit principalement causé par un biais de version parmi des paquets dépendants de, ou recommandés par, un méta-paquet tel que `gnome-core`.

  - Cela peut être résolu en sélectionnant « Annuler les actions en attente » dans le menu de commande d'`aptitude`, en quittant `aptitude` et en utilisant la commande « `apt full-upgrade` ».

Les commandes `apt-get` et `apt-cache` sont les outils les plus basiques de gestion des paquets basés sur APT.

- `apt-get` et `apt-cache` n’offre qu’une interface utilisateur en ligne de commandes.

- `apt-get` est le mieux adapté pour les mises à jour majeures du système entre les versions, etc.

- `apt-get` offre un système de résolution des dépendances entre paquets robuste.

- `apt-get` nécessite moins de ressources matérielles. Il consomme moins de mémoire et fonctionne plus rapidement.

- `apt-cache` offre une recherche basée sur des expressions rationnelles standard sur les noms et les descriptions des paquets.

- `apt-get` et `apt-cache` peuvent gérer des versions multiples des paquets en utilisant `/etc/apt/preferences` mais est assez lourd.

La commande `apt` est une interface de haut niveau en ligne de commande pour la gestion de paquets. C’est basiquement une enveloppe d’`apt-get`, d’`apt-cache` et de commandes similaires, originellement destinée comme interface d’utilisateur final, et active quelques options mieux adaptées par défaut à un usage interactif.

- `apt` fournit une barre de progression plaisante lors de l’installation de paquets en utilisant `apt install`.

- `apt` supprimera par défaut les paquets `.deb` mis en cache après une utilisation réussie de paquets téléchargés.

| Astuce
Il est recommandé aux utilisateurs d’utiliser la nouvelle commande apt(8) pour un usage interactif et d’utiliser les commandes apt-get(8) et apt-cache(8) dans des scripts d’interpréteur.

La commande `aptitude` est l’outil de gestion des paquets basé sur APT le plus flexible.

- `aptitude` offre une interface utilisateur interactive en plein écran en mode texte.

- `aptitude` offre aussi une interface utilisateur en ligne de commandes.

- `aptitude` est le mieux adapté pour la gestion interactive journalière des paquets comme, par exemple, la vérification des paquets installés et la recherche de paquets disponibles.

- `aptitude` nécessite plus de ressources matérielles. Il consomme plus de mémoire et fonctionne moins rapidement.

- `aptitude` offre une recherche avancée basée sur des expressions rationnelles pour la recherche sur toutes les métadonnées des paquets.

- `aptitude` peut gérer des versions multiples des paquets sans utiliser `/etc/apt/preferences` et est assez intuitif.

### 2.2.2. Opérations de base de gestion des paquets en ligne de commandes

Voici les opérations de base de gestion des paquets en ligne de commandes en utilisant apt(8), aptitude(8), apt-get(8) et apt-cache(8) .

Tableau 2.6. Opérations de base de gestion des paquets avec la ligne de commandes en utilisant apt(8), aptitude(8), apt-get(8) et apt-cache(8)

syntaxe d’`apt` | syntaxe d’`aptitude` | syntaxe d’`apt-get` et `apt-cache` | description
--- | --- | --- | ---
`apt update` | `aptitude update` | `apt-get update` | mettre à jour les métadonnées de l’archive du paquet
`apt install foo` | `aptitude install foo` | `apt-get install foo` | installer la version candidate du paquet « `toto` » ainsi que ses dépendances
`apt upgrade` | `aptitude safe-upgrade` | `apt-get upgrade` | installer les versions candidates des paquets installés sans supprimer aucun autre paquet
`apt full-upgrade` | `aptitude full-upgrade` | `apt-get dist-upgrade` | installer les versions candidates des paquets installés en supprimant d’autres paquets si nécessaire
`apt remove foo` | `aptitude remove foo` | `apt-get remove foo` | supprimer le paquet « `toto` » en laissant ses fichiers de configuration
`apt autoremove` | N/A | `apt-get autoremove` | supprimer les paquets installés automatiquement lorsqu’ils ne sont plus nécessaires
`apt purge foo` | `aptitude purge foo` | `apt-get purge foo` | purger le paquet « `toto` » ainsi que ses fichiers de configuration
`apt clean` | `aptitude clean` | `apt-get clean` | nettoyer complètement le dépôt local des fichiers de paquets récupérés
`apt autoclean` | `aptitude autoclean` | `apt-get autoclean` | nettoyer le dépôt local des fichiers des paquets périmés
`apt show foo` | `aptitude show foo` | `apt-cache show foo` | afficher des informations détaillées concernant le paquet « `toto` »
`apt search regex` | `aptitude search regex` | `apt-cache search regex` | rechercher les paquets qui correspondent à l’expression rationnelle
N/A | `aptitude why regex` | N/A | expliquer les raisons qui font que les paquets correspondant à l’expression rationnelle devront être installés
N/A | `aptitude why-not regex` | N/A | expliquer les raisons pour lesquels les paquets qui correspondent à l’expression rationnelle ne peuvent pas être installés
`apt list --manual-installed` | `aptitude search '~i!~M'` | `apt-mark showmanual` | lister les paquets installés manuellement

`apt`/`apt-get` et `aptitude` peuvent mélangées sans inconvénients majeurs.

« `aptitude why expression-rationnelle` » peut afficher plus d’informations par « `aptitude -v why expression_rationnelle` ». On peut obtenir des informations similaires par « `apt rdepends paquet`" ou "`apt-cache rdepends paquet` ».

Lorsque la commande `aptitude` est lancée en mode ligne de commande, et rencontre des problèmes tels que des conflits de paquets, vous pouvez passez en mode plein écran en pressant ensuite la touche « `e` » à l’invite de commande.

| Note
Bien que la commande `aptitude` soit disponible avec de riches fonctionnalités comme son solveur de paquets avancé, cette complexité a causé (et peut encore causer) certaines régressions comme le bogue #411123, le bogue #514930 et le bogue #570377. En cas de doute, veuillez utiliser les commandes `apt`, `apt-get` et `apt-cache` plutôt que la commande `aptitude`.

Vous pouvez indiquer les options de commande juste après « `aptitude` ».

Tableau 2.7. Options importantes de la commande aptitude(8)

option de la commande | description
--- | ---
`-s` | simuler le résultat de la commande
`-d` | télécharger seulement les paquets sans les installer ni les mettre à jour
`-D` | afficher une courte explication avant les installations ou les suppressions automatiques

Consultez aptitude(8) et le « manuel de l’utilisateur d’aptitude » à « `/usr/share/doc/aptitude/README` » pour en apprendre davantage.

### 2.2.3. Utilisation interactive d’aptitude

Pour une gestion interactive des paquets, lancez `aptitude` en mode interactif depuis l’invite de l’interpréteur de commandes de la console comme suit :

    $ sudo aptitude -u
    Password:

Cela va mettre à jour la copie locale des informations de l’archive et afficher la liste des paquets en plein écran avec un menu. On trouvera la configuration d’aptitude dans « `~/.aptitude/config` ».

| Astuce
Si vous désirez utiliser la configuration de l’administrateur (root) plutôt que celle de l’utilisateur, utilisez la commande « `sudo -H aptitude …` » en remplacement de « `sudo aptitude …` » dans l’expression précédente.

| Astuce
`Aptitude` définit automatiquement les actions en attente lorsqu’il est lancé de manière interactive. Si elles ne vous conviennent pas, vous pouvez le réinitialiser depuis le menu : « Action » → « Annuler les opérations en attente ».

### 2.2.4. Raccourcis clavier d’aptitude

Les raccourcis clavier principaux pour parcourir l’état des paquets et pour définir les « actions prévues » sur ces paquets dans le mode plein écran sont les suivants :

Tableau 2.8. Liste des raccourcis clavier d’aptitude

touche | affectation
--- | ---
`F10` ou `Ctrl-t` | menu
`?` | afficher l’aide pour les raccourcis clavier (liste plus complète)
`F10` → Aide → Manuel de l’utilisateur | afficher le Manuel de l’utilisateur
`u` | mettre à jour les informations de l’archive des paquets
`+` | marquer le paquet pour mise à niveau ou installation
`-` | marquer le paquet pour suppression (conserver ses fichiers de configuration)
`_` | marquer le paquet pour être purgé (supprimer ses fichiers de configuration)
`=` | mettre le paquet dans l’état « conservé »
`U` | marquer tous les paquets susceptibles de mise à niveau (fonctionne comme full-upgrade)
`g` | lancer le téléchargement et l’installation des paquets sélectionnés
`q` | quitter l’écran actuel et enregistrer les modifications
`x` | quitter l’écran actuel en abandonnant les modifications
`Enter` | afficher les informations concernant un paquet
`C` | afficher le journal des modifications (« changelog ») d’un paquet
`l` | modifier les limites pour les paquets affichés
`/` | rechercher la première correspondance
`\` | répéter la dernière recherche

L’indication du nom de fichier sur la ligne de commandes et à l’invite du menu après avoir pressé « `l` » et « `//` » prend l’expression rationnelle d’aptitude telle que décrite ci-dessous. Une expression rationnelle d’aptitude peut correspondre explicitement à un nom de paquet en utilisant une chaîne de caractères commençant par « `~n` » et suivie du nom de paquet.

| Astuce
Vous devrez presser « `U` » pour obtenir la mise à niveau de tous les paquets installés vers la version candidate de l’interface visuelle. Sinon, seuls les paquets sélectionnés et certains paquets ayant des dépendances versionnées sur ces paquets seront mis à niveau vers la version candidate.

### 2.2.5. Vues des paquets sous aptitude

Dans le mode interactif en plein écran d’aptitude(8), les paquets de la liste des paquets sont affichés comme dans l’exemple suivant.

    idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

Cette ligne signifie, en partant de la gauche :

- Indicateur d’« état actuel » (la première lettre)

- Indicateur d’« action prévue » (la seconde lettre)

- Indicateur « automatique » (la troisième lettre)

- Nom du paquet

- Modification de l’utilisation du disque attribuée à l’« action prévue »

- Version actuelle du paquet

- Version candidate du paquet

| Astuce
La liste complète des indicateurs est donnée en bas de l’écran d’Aide affiché en pressant « `?` ».

La version candidate est choisie en fonction des préférences locales actuelles (consultez apt_preferences(5) et Section 2.7.7, « Ajustement de la version candidate avec apt-pinning »).

Plusieurs types de vues de paquets sont disponibles depuis le menu « `Vues` ».

Tableau 2.9. Liste des vues d’aptitude

vue | description de la vue
--- | ---
`Package View` | consultez Tableau 2.10, « Classement par catégories des vues de paquets standard » (défaut)
`Audit Recommendations` | liste des paquets qui sont recommandés par certains paquets installés mais qui ne sont pas encore installés sur le système
`Flat Package List` | liste des paquets sans regroupement par catégories (pour l’utilisation avec des expressions rationnelles)
`Debtags Browser` | liste des paquets classés selon leur entrée debtags
`Source Package View` | liste de paquets groupés par paquet source

| Note
Merci de nous aider à améliorer le marquage des paquets avec debtags !

La « `Vue des paquets` » standard classe les paquets un peu comme le fait `dselect` avec quelques fonctionnalités supplémentaires.

Tableau 2.10. Classement par catégories des vues de paquets standard

catégorie | description de la vue
--- | ---
`Upgradable Packages` | liste des paquets organisée sous la forme `section` → `zone` → `paquet`
`New Packages` | , ,
`Installed Packages` | , ,
`Not Installed Packages` | , ,
`Obsolete and Locally Created Packages` | , ,
`Virtual Packages` | liste des paquets ayant la même fonction
`Tasks` | liste des paquets ayant les différentes fonctions généralement nécessaires à une tâche

| Astuce
La vue des `tâches` peut être utilisée pour choisir les paquets nécessaires à votre tâche.

### 2.2.6. Options de la méthode de recherche avec aptitude

Aptitude vous offre différentes options pour rechercher des paquets en utilisant sa formule d’expressions rationnelles.

- Ligne de commande du shell :

  - « `aptitude search 'expression_rationnelle_aptitude'` » afin d’afficher l’état d’installation, le nom du paquet et une courte description des paquets correspondants

  - « `aptitude show 'nom_paquet'` » pour afficher la description détaillée du paquet

- Mode interactif plein écran :

  - « `l` » pour limiter la vue des paquets à ceux qui correspondent

  - « `/` » pour rechercher un paquet correspondant

  - « `\` » pour rechercher en arrière un paquet correspondant

  - « `n` » pour rechercher le suivant

  - « `N` » pour rechercher le suivant (en arrière)

| Astuce
La chaîne du nom_paquet est traitée comme la correspondance exacte de chaîne pour le nom de paquet à moins qu’il ne soit lancé explicitement avec « `~` » pour être la formule d’expression rationnelle.

### 2.2.7. Les formules d’expressions rationnelles d’aptitude

La formule des expressions rationnelles d’aptitude est étendue ERE de manière similaire à mutt (consultez Section 1.6.2, « Expressions rationnelles ») et la signification des extensions de règles de correspondance spécifiques à `aptitude` est la suivante :

Tableau 2.11. Liste des formules d’expressions rationnelles d’aptitude

description des règles étendues de correspondance | formules d’expressions rationnelles
--- | ---
correspond au nom du paquet | `~nregex_name`
correspond à la description | `~dregex_description`
correspond au nom de la tâche | `~tregex_task`
correspond à l’étiquette debtag | `~Gregex_debtag`
correspond au responsable du paquet | `~mregex_maintainer`
correspond à la section du paquet | `~sregex_section`
correspond à la version du paquet | `~Vregex_version`
correspond à l’archive | `~A{trixie,forky,sid`}
correspond à l’origine | `~O{debian,…`}
correspond à la priorité | `~p{extra,important,optional,required,standard`}
correspond aux paquets essentiels | `~E`
correspond aux paquets virtuels | `~v`
correspond aux nouveaux paquets | `~N`
correspond aux actions en attente | `~a{install,upgrade,downgrade,remove,purge,hold,keep`}
correspond aux paquets installés | `~i`
correspond aux paquets installés ayant la marque A (paquets installés automatiquement) | `~M`
correspond aux paquets installés n’ayant pas la marque A (paquets sélectionnés par l’administrateur) | `~i!~M`
correspond aux paquets installés et pouvant être mis à jour | `~U`
correspond aux paquets supprimés mais non purgés | `~c`
correspond aux paquets supprimés, purgés ou pouvant être supprimés | `~g`
correspond aux paquets ayant une dépendance cassée | `~b`
correspond aux paquets ayant une dépendance cassée de type | `~Btype`
correspond aux paquets filtrés par motif ayant une dépendance de type | `~D[type:]pattern`
correspond aux paquets filtrés par motif ayant une dépendance cassée de type | `~DB[type:]pattern`
correspond aux paquets vers lesquels le paquet filtré par motif déclare une dépendance de type | `~R[type:]pattern`
correspond aux paquets vers lesquels le paquet filtré par motif a une dépendance cassée de type | `~RB[type:]pattern`
correspond aux paquets desquels dépendent d’autres paquets installés | `~R~i`
correspond aux paquets desquels ne dépend aucun autre paquet | `!~R~i`
correspond aux paquets vers lesquels d’autres paquets installés dépendent ou qu’ils recommandent | `~R~i|~Rrecommends:~i`
correspond au paquet motif dont la version est filtrée | `~S filter pattern`
correspond à tous les paquets (vrai) | `~T`
ne correspond à aucun paquet (faux) | `~F`

- La partie expression rationnelle est la même ERE que celle utilisée dans les outils UNIX typiques en utilisant « `^` », « `.*` », « `$` » etc. comme dans egrep(1), awk(1) et perl(1).

- La dépendance type est comprise dans la liste (depends, predepends, recommends, suggests, conflicts, replaces, provides) et spécifie les relations du paquet avec d’autres paquets.

- Le type de relation par défaut est « depends ».

| Astuce
Lorsqu’un motif d’expression rationnelle est une chaîne de caractères vide, placez « `~T` » directement après la commande.

Voici quelques raccourcis.

- « `~Pterm` » == « `~Dprovides:term` »

- « `~Cterm` » == « `~Dconflicts:term` »

- « `…~W term` » == « `(…|term)` »

Les utilisateurs familiers avec `mutt` comprendront rapidement car mutt a été la source d’inspiration pour la syntaxe des expressions. Consultez « SEARCHING, LIMITING, AND EXPRESSIONS » dans le manuel de l’utilisateur (« `/usr/share/doc/aptitude/README` »).

| Note

Avec la version `lenny` d’aptitude(8), la nouvelle forme longue de la syntaxe comme « `?broken` » peut être utilisée pour la correspondance des expressions rationnelles en remplacement de l’ancienne forme courte équivalente « `~b` ». Le caractère espace « `` » est maintenant considéré comme l’un des caractères de terminaison d’une expression rationnelle en plus du caractère tilde « `~` ». Consultez la syntaxe de la nouvelle forme longue dans le « Manuel de l’utilisateur ».

### 2.2.8. Résolution des dépendances par aptitude

La sélection d’un paquet dans `aptitude` récupère non seulement les paquets définis dans son champ « `Depends:` » mais aussi ceux définis dans le champ « `Recommends:` » si la configuration a été faite dans ce sens dans le menu « `F10` → Options → Préférences → Gestion des dépendances ». Ces paquets installés automatiquement seront supprimés automatiquement s’ils ne sont plus nécessaires sous `aptitude`.

Le drapeau contrôlant le comportement « auto install » de la commande `aptitude` peut aussi être manipulé en utilisant la commande apt-mark(8) du paquet `apt`.

### 2.2.9. Journaux d’activité des paquets

Vous pouvez vérifier l’activité de l’historique des paquets dans les fichiers journaux.

Tableau 2.12. Fichiers journaux de l’activité des paquets

fichier | contenu
--- | ---
`/var/log/dpkg.log` | Enregistrement des actions au niveau de `dpkg` pour l’activité de tous les paquets
`/var/log/apt/term.log` | Journal de l’activité générique d’APT
`/var/log/aptitude` | Journal des actions de la commande `aptitude`

En réalité, il n’est pas aussi facile de comprendre la signification de ces journaux. Consultez Section 9.3.9, « Enregistrer les modifications dans des fichiers de configuration » pour une façon de faire plus simple.

## 2.3. Exemples d’opérations avec aptitude

Voici quelques exemples d’opérations d’aptitude(8).

### 2.3.1. Rechercher des paquets intéressants

Vous pouvez rechercher les paquets qui satisfont à vos besoins avec `aptitude` à partir de la description du paquet ou depuis la liste se trouvant dans « Tasks ».

### 2.3.2. Afficher les paquets dont les noms correspondent à une expression rationnelle

La commande suivante affiche les paquets dont les noms correspondent à une expression rationnelle.

    $ aptitude search '~n(pam|nss).*ldap'
    p libnss-ldap - NSS module for using LDAP as a naming service
    p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

Il vous est assez facile de trouver le nom exact d’un paquet.

### 2.3.3. Parcours en correspondance avec une expression rationnelle

L’expression rationnelle « `~dipv6` » entrée dans la vue « Nouvelle liste des paquets » (« New Flat Package List » depuis l’invite « `l` » limite la vue aux paquets dont la description correspond à cette expression rationnelle et vous permet de parcourir les informations de manière interactive.

### 2.3.4. Purger pour de bon les paquets supprimés

Vous pouvez supprimer tous les fichiers de configuration subsistant des paquets supprimés.

Vérifiez le résultat de la commande suivante :

    # aptitude search '~c'

Si vous pensez que les paquets affichés doivent être purgés, exécutez la commande suivante :

    # aptitude purge '~c'

Vous pouvez avoir envie de faire la même chose en mode interactif avec un contrôle plus fin.

Indiquez l’expression rationnelle « `~c` » dans la « Nouvelle liste des paquets » en utilisant l’invite « `l` ». Cela limite la vue des paquets à ceux qui correspondent à l’expression rationnelle, c’est-à-dire « supprimé mais non purgé ». On peut visualiser tous les paquets correspondant à cette expression rationnelle en pressant « `[` » depuis une section de haut niveau.

Pressez ensuite « `_` » depuis une fenêtre de haut niveau comme « Paquets non installés ». Seuls les paquets correspondants à l’expression rationnelle se trouvant dans cette section seront marqués comme devant être purgés par cette commande. Vous pouvez exclure certains paquets de cette opération en pressant de manière interactive la touche « `=` » en face de chacun d’eux.

Cette technique est assez pratique et fonctionne avec de nombreuses autres touches de commande.

### 2.3.5. Toilettage de l’état d’installation automatique/manuel

Voici comment je nettoie l’état d’installation automatique/manuel des paquets (après avoir utilisé un installateur de paquets autre qu’aptitude, etc.).

1. Démarrer `aptitude` en mode interactif en tant qu’administrateur.

2. Entrer « `u` », « `U` », « `f` » et « `g` » pour mettre à jour la liste des paquets et mettre à niveau les paquets.

3. Entrer « `l` » afin de définir la limite d’affichage des paquets avec « `~i(~R~i|~Rrecommends:~i)` » et entrez « `M` » sur « `Paquets installés` » automatiquement.

4. Entrer « `l` » afin de définir la limite d’affichage des paquets avec « `~prequired|~pimportant|~pstandard|~E` » et entrez « `m` » sur les « `Paquets installés` » manuellement.

5. Entrer « `l` » pour définir la limite d’affichage des paquets avec « `~i!~M` » et supprimez tous les paquets inutilisés en entrant `-` » sur chacun d’eux après les avoir affichés en entrant « `[` » sur « `Paquets installés` ».

6. Entrer « `l` » pour définir la limite d’affichage des paquets avec « `~i` » puis entrez `m` » sur les « `Tâches` » pour attribuer un marquage « manuellement installé » aux paquets.

7. Quitter `aptitude`.

8. Lancer « `apt-get -s autoremove|less` » en tant qu’administrateur pour vérifier les paquets non utilisés.

9. Redémarrer `aptitude` en mode interactif et marquer les paquets nécessaires comme « `m` ».

10. Redémarrer « `apt-get -s autoremove|less` » en tant qu’administrateur et vérifier à nouveau que « REMOVED » ne contient que les paquets voulus.

11. Lancer « `apt-get autoremove|less` » en tant qu’administrateur pour supprimer automatiquement les paquets inutilisés.

L’action « `m` » sur les « `Tâches` » est facultative pour éviter une situation de suppression en masse de paquets dans le futur.

### 2.3.6. Mise à jour pour l’ensemble du système

| Note

Lors du changement vers une nouvelle version, etc., vous devriez envisager d’effectuer une installation propre d’un nouveau système même si Debian peut être mis à niveau comme décrit ci-dessous. Cela vous donne une chance de supprimer les résidus amassés et vous présente la meilleure combinaison des derniers paquets. Bien entendu, vous devrez effectuer une sauvegarde totale de votre système vers un endroit sûr (consultez Section 10.2, « Sauvegarde et restauration ») avant de faire cela. Je vous recommande de faire une configuration dual boot en utilisant des partitions différentes afin d’effectuer une transition en douceur.

Vous pouvez effectuer une mise à niveau du système vers une nouvelle version en changeant le contenu de la liste des sources pointant vers une nouvelle publication et en exécutant la commande "`apt update ; apt dist-upgrade`".

Pour mettre à niveau depuis `stable` vers `testing` ou `unstable` durant le cycle de publication de `trixie` en tant que `stable`, il faut remplacer « `trixie` » dans l’exemple de liste des sources de Section 2.1.5, « Bases concernant l’archive Debian » avec « `forky` » ou « `sid` ».

En réalité, vous pouvez rencontrer quelques complications en raison de problèmes de transition de paquets, le plus souvent pour des problèmes de dépendances de paquets. Plus la mise à jour est importante, plus vous avez de chances de rencontrer des problèmes importants. Lors de la transition de l’ancienne version `stable` vers la nouvelle version `stable` après sa diffusion, afin de minimiser les problèmes vous pouvez lire ses nouvelles Notes de diffusion et suivre la procédure exacte qui y est décrite.

Lorsque vous décidez de changer de la version `stable` vers la version `testing` avant sa diffusion formelle, il n’y a pas de Notes de diffusion pour vous aider. La différence entre `stable` et `testing` peut être devenue assez importante depuis la diffusion de la version `stable` précédente et rendre compliquée la situation de la mise à jour.

Vous devriez aller vers la mise à niveau complète avec précaution tout en récupérant les dernières informations depuis les listes de diffusion et en usant de bon sens.

1. Lire les « Notes de diffusion » précédentes.

2. Faire la sauvegarde de l’ensemble du système (particulièrement les données et les informations de configuration).

3. Avoir un support amorçable prêt au cas où le chargeur initial serait cassé.

4. Informer les utilisateurs du système bien à l’avance.

5. Enregistrer l’activité de mise à jour avec script(1).

6. Appliquer « unmarkauto » aux paquets nécessaires, par exemple « `aptitude unmarkauto vim` », afin d’en éviter la suppression.

7. Minimiser les paquets installés pour réduire les chances de conflits de paquets, par exemple supprimer les paquets de la tâche « bureau ».

8. Supprimer le fichier « `/etc/apt/preferences` » (désactiver l’épinglage apt « apt-pinning »).

9. Essayer de mettre à jour par étapes : `oldstable` → `stable` → `testing` → `unstable`.

10. Mettre à jour la liste des sources pour pointer vers une nouvelle archive seulement et exécuter "`aptitude update`".

11. Installer d’abord, de manière facultative, les nouveaux paquets essentiels, par exemple « `aptitude install perl` ».

12. Lancer la commande « `apt-get -s dist-upgrade` » pour contrôler quel en sera l’impact.

13. Et enfin lancer la commande « `apt-get dist-upgrade` ».

| Attention
Il n’est pas sage de sauter une version majeure de Debian lors de la mise à niveau entre versions `stable`.

| Attention
Dans les « Notes de diffusion » précédentes, GCC, Linux Kernel, initrd-tools, Glibc, Perl, APT tool chain, etc. ont demandé une attention particulière pour une mise à niveau de l’ensemble du système.

| Attention
"Release Notes" may not cover all possible cases. If you change low level configurations, your next upgrade may fail badly as "... segfault after upgrade ...".

Pour une mise à jour quotidienne d’`unstable`, consultez Section 2.4.3, « Protection contre les problèmes de paquets ».

## 2.4. Opérations avancées de gestion des paquets

### 2.4.1. Opérations avancées de gestion des paquets en ligne de commandes

Voici la liste des autres opérations de gestion des paquets pour lesquelles `aptitude` est de trop haut niveau ou n’a pas la fonctionnalité requise.

Tableau 2.13. Liste des opérations avancées de gestion des paquets

commande | action
--- | ---
`COLUMNS=120 dpkg -l package_name_pattern` | afficher l’état d’un paquet installé pour le signalement de bogue
`dpkg -L package_name` | afficher le contenu d’un paquet installé
`dpkg -L package_name | egrep '/usr/share/man/man.*/.+'` | afficher les pages de manuel d’un paquet installé
`dpkg -S file_name_pattern` | afficher les paquets installés dont le nom correspond
`apt-file search file_name_pattern` | afficher les paquets de l’archive dont le nom correspond
`apt-file list package_name_pattern` | afficher le contenu d’un paquet correspondant de l’archive
`dpkg-reconfigure package_name` | reconfigurer le paquet exact
`dpkg-reconfigure -plow package_name` | reconfigurer le paquet exact avec la question la plus détaillée
`configure-debian` | reconfigurer les paquets depuis le menu en plein écran
`dpkg --audit` | système de vérification des paquets partiellement installés
`dpkg --configure -a` | configurer tous les paquets partiellement installés
`apt-cache policy binary_package_name` | afficher la version disponible, la priorité et les informations concernant l’archive du paquet binaire
`apt-cache madison package_name` | afficher la version disponible et les informations de l’archive concernant un paquet
`apt-cache showsrc binary_package_name` | afficher les informations concernant le paquet source d’un paquet binaire
`apt-get build-dep package_name` | installer les paquets nécessaires à la construction d’un paquet
`aptitude build-dep package_name` | installer les paquets nécessaires à la construction d’un paquet
`apt-get source package_name` | télécharger une source (depuis l’archive standard)
`dget URL for dsc file` | télécharger un paquet source (depuis une autre archive)
`dpkg-source -x package_name_version-debian.revision.dsc` | construire une arborescence des sources à partir d’un ensemble de paquets source (« `*.orig.tar.gz` » et « `*.debian.tar.gz`"/"`*.diff.gz` »)
`debuild binary` | construire des paquets depuis une arborescence source locale
`make-kpkg kernel_image` | construire un paquet du noyau à partir de l’arborescence source du noyau
`make-kpkg --initrd kernel_image` | construire un paquet du noyau à partir de l’arborescence source du noyau avec initramfs activé
`dpkg -i package_name_version-debian.revision_arch.deb` | installer un paquet local sur le système
`apt install /path/to/package_filename.deb` | installer un paquet local sur le système, tout en essayant de résoudre automatiquement les dépendances
`debi package_name_version-debian.revision_arch.dsc` | installer des paquets locaux sur le système
`dpkg --get-selections '*' >selection.txt` | enregistrer l’information d’état de la sélection des paquets au niveau de `dpkg`
`dpkg --set-selections <selection.txt` | définir l’information d’état de sélection des paquets au niveau de `dpkg`
`echo package_name hold | dpkg --set-selections` | définir l’information d’état de sélection des paquets au niveau de `dpkg` à hold (gelé, équivalent à `aptitude hold nom_paquet`)

| Note
Pour les paquets disponibles en multi-arch(itectures), certaines commandes devront parfois être complétées du nom de l’architecture cible. Il faut, par exemple, utiliser « `dpkg -L libglib2.0-0:amd64` » pour obtenir une liste du contenu du paquet `libglib2.0-0` dans son architecture `amd64`.

| Attention

Un outil de plus bas niveau tel que « `dpkg -i …` » et « `debi …` » devra être utilisé avec précautions par l’administrateur du système. Il ne s’assure pas automatiquement des dépendances exigées par le paquet. Les options « `--force-all` » et similaires de la ligne de commandes de dpkg (consultez dpkg(1)) ne sont prévues pour être utilisées que par des experts. Les utiliser sans comprendre entièrement leurs effets peut casser l’ensemble de votre système.

Veuillez noter ce qui suit :

- Toutes les commandes de configuration et d’installation doivent être lancées avec le compte de l’administrateur.

- Au contraire d’`aptitude` qui utilise des expressions rationnelles (consultez Section 1.6.2, « Expressions rationnelles »), les autres commandes de gestion des paquets utilisent des motifs semblables aux motifs génériques (« glob ») de l’interpréteur de commandes (consultez Section 1.5.6, « Motifs génériques (« glob ») de l’interpréteur de commandes »).

- La commande apt-file(1) fournie par le paquet `apt-file` doit être précédée de l’exécution de la commande « `apt-file update` ».

- configure-debian(8) fourni par le paquet `configure-debian` exécute en fond dpkg-reconfigure(8).

- dpkg-reconfigure(8) exécute les scripts du paquet en utilisant en fond debconf(1).

- Les commandes « `apt-get build-dep` », « `apt-get source` » et « `apt-cache showsrc` » nécessitent une entrée « `deb-src` » dans la liste des sources.

- dget(1), debuild(1) etdebi(1) ont besoin du paquet `devscripts`.

- Consultez la procédure de (re)paquetage en utilisant « `apt-get source` » dans Section 2.7.13, « Porter un paquet vers le système stable ».

- La commande `make-kpkg` exige le paquet `kernel-package` (consultez Section 9.10, « Le noyau »).

- Consultez Section 12.9, « Créer un paquet Debian » pour la réalisation de paquets en général.

### 2.4.2. Vérifier les fichiers de paquets installés

L’installation de `debsums` permet, avec debsums(1), la vérification des fichiers des paquets installés d’après les valeurs de MD5sum se trouvant dans le fichier « `/var/lib/dpkg/info/*.md5sums` » Consultez Section 10.3.5, « La somme de contrôle MD5 » pour le fonctionnement de MD5sum.

| Note
Comme la base de données MD5sum peut être trafiquée par un intrus, debsums(1) est d’une utilité restreinte en tant qu’outil de sécurité. Il n’est bon que pour la vérification locale des modifications de l’administrateur ou des défectuosités en raison de problèmes de support.

### 2.4.3. Protection contre les problèmes de paquets

De nombreux utilisateurs préfèrent suivre les versions testing (ou unstable) du système Debian pour ses nouvelles fonctionnalités et paquets. Cela rend le système plus sensible aux bogues critiques des paquets.

L’installation du paquet `apt-listbugs` protège votre système contre les bogues critiques en recherchant automatiquement dans le BTS de Debian les bogues critiques lors de la mise à jour par l’intermédiaire du système APT.

L’installation du paquet `apt-listchanges` indique les nouveautés importantes se trouvant dans « `NEWS.Debian` » lors de la mise à jour du système avec APT.

### 2.4.4. Rechercher dans les métadonnées du paquet

Bien que visiter le site Debian à https://packages.debian.org/ permette aujourd’hui de rechercher facilement les métadonnées des paquets, voyons les méthodes plus traditionnelles .

Les commandes grep-dctrl(1), grep-status(1) et grep-available(1) peuvent être utilisées pour effectuer des recherches dans tous les fichiers dont le format général est celui d’un fichier de contrôle de Debian.

« `dpkg -S motif_nom_fichier` » peut être utilisé pour rechercher les noms de paquets installés par `dpkg` qui contiennent des fichiers dont le nom correspond au motif. Mais les fichiers créés par les scripts du responsable du paquet ne sont pas pris en compte.

Si vous devez faire des recherches plus élaborées sur les métadonnées de dpkg, il vous faudra lancer la commande « `grep -e motif_expression_rationnelle *` » dans le répertoire « `/var/lib/dpkg/info/` ». Cela vous permet de rechercher des mots mentionnés dans les scripts des paquets et les textes des requêtes d’installation.

Pour rechercher de manière récursive les dépendances de paquets, vous devrez utiliser apt-rdepends(8).

## 2.5. Fonctionnement interne de la gestion des paquets Debian

Voyons comment le système Debian de gestion des paquets fonctionne de manière interne. Cela vous permettra de créer votre propre solution à certains problèmes de paquets.

### 2.5.1. Métadonnées de l’archive

Les fichiers de métadonnées de chaque distribution se trouvent sur chaque miroir Debian, dans « `dist/nom_de_code` », par exemple, « `http://deb.debian.org/debian/` ». On peut parcourir la structure de son archive à l’aide d’un navigateur web. Il existe 6 types de métadonnées clés :

Tableau 2.14. Contenu des métadonnées de l’archive Debian

fichier | emplacement | contenu
--- | --- | ---
`Release` | sommet de la distribution | description de l’archive et informations d’intégrité
`Release.gpg` | sommet de la distribution | fichier signature du fichier « `Release` » signé avec la clé de l’archive
`Contents-architecture` | sommet de la distribution | liste de tous les fichiers pour tous les paquets dans l’archive pertinente
`Release` | sommet de chaque combinaison de distribution/section/architecture | description de l’archive utilisée pour la règle de apt_preferences(5)
`Packages` | sommet de chaque combinaison de distribution/section/architecture binaire | `debian/control` concaténés des paquets binaires
`Sources` | sommet de chaque combinaison distribution/section/source | `debian/control` concaténés des paquets sources

Dans les archives récentes, ces métadonnées sont enregistrées sous forme compressée et différentielle afin de limiter le trafic réseau.

### 2.5.2. Fichier « Release » de plus haut niveau et authenticité

| Astuce
Le fichier « `Release` » de plus haut niveau est utilisé pour signer l’archive au moyen du système secure APT.

Chaque version de l’archive Debian possède un fichier « `Release` » de plus haut niveau, par exemple, « `http://deb.debian.org/debian/dists/unstable/Release` », comme ci-dessous :

    Origin: Debian
    Label: Debian
    Suite: unstable
    Codename: sid
    Date: Sat, 14 May 2011 08:20:50 UTC
    Valid-Until: Sat, 21 May 2011 08:20:50 UTC
    Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
    Components: main contrib non-free
    Description: Debian x.y Unstable - Not Released
    MD5Sum:
     bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
     9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
     3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
    ...

| Note
Vous pouvez trouver ici ma justification pour l’utilisation de « suite », « nom de code » dans Section 2.1.5, « Bases concernant l’archive Debian ». La « distribution » est utilisée pour désigner à la fois « suite » et « nom de code ». Tous les noms possibles de « sections » de l’archive sont indiqués dans l’archive sous « Composants ».

L'intégrité du fichier « `Release` » de premier niveau est vérifiée par l'infrastructure cryptographique appelée secure apt comme décrit dans apt-secure(8).

- Le fichier de signature chiffré « `Release.gpg` » est créé à partir du fichier « `Release` » réel de plus haut niveau et de la clé secrète de l’archive Debian.

- Les clés publiques des archives de Debian sont installées localement par le paquet récent `debian-archive-keyring`.

- Le système secure APT vérifie automatiquement l'intégrité du fichier téléchargé « `Release` » à l’aide du fichier « `Release.gpg` » de signature et des clés publiques d'archive installées localement.

- L’intégrité de tous les fichiers « `Packages` » et « `Sources` » est vérifiée en utilisant les valeurs des sommes MD5 se trouvant dans son fichier de plus haut niveau « `Release` ». L’intégrité de tous les fichiers de paquets est vérifiée en utilisant les valeurs des sommes MD5 se trouvant dans les fichiers « `Packages` » et « `Sources` ». Consultez debsums(1) et Section 2.4.2, « Vérifier les fichiers de paquets installés ».

- Comme la vérification de la signature cryptographique est un processus beaucoup plus consommateur de processeur que les calculs de sommes MD5, l’utilisation d’une somme MD5 pour chacun des paquets tout en utilisant une signature cryptographique pour le fichier « `Release` » de plus haut niveau allie une bonne sécurité avec de bonnes performances (consultez Section 10.3, « Infrastructure de sécurité des données »).

Si une entrée dans la liste des sources spécifie l'option "`signed-by`", l'intégrité de son fichier téléchargé "`Release`" est vérifiée en utilisant la clé publique spécifiée. Cela est utile lorsque la liste des sources contient des archives non Debian.

| Astuce
L’utilisation de la commande apt-key(8) pour la gestion des clés d’APT est déconseillée car vouée à disparaitre.

Vous pouvez également vérifier manuellement l'intégrité du fichier « `Release` » avec le fichier « `Release.gpg` » et la clé publique d'archive de Debian publiée sur ftp-master.debian.org en utilisant `gpg`.

### 2.5.3. Fichiers « Release » de niveau de l’archive

| Astuce
Les fichiers « `Release` » de niveau de l’archive sont utilisés pour la règle d’apt_preferences(5).

Il existe des fichiers « `Release` » de niveau de l’archive pour tous les sites d'archives spécifiés par la liste des sources, tels que «`http://deb.debian.org/debian/dists/binstable/main/binary-amd64/Release` » ou « `http://deb.debian.org/debian/dists/sid/main/binary-amd64/Release` » comme suit :

    Archive: unstable
    Origin: Debian
    Label: Debian
    Component: main
    Architecture: amd64

| Attention
Pour l’entrée « `Archive:` », les noms de version (« `stable` », « `testing` », « `unstable` », …) sont utilisés dans l’archive Debian alors que les noms de code (« `trusty`", « `xenial` », « `artful` », …) sont utilisés dans l’archive Ubuntu.

Pour certaines archives, comme `experimental` et `trixie-backports`, qui contiennent des paquets qui ne devraient pas être installés automatiquement, il y a une ligne supplémentaire, par exemple « `http://deb.debian.org/debian/dists/experimental/main/binary-amd64/Release` » comme suit :

    Archive: experimental
    Origin: Debian
    Label: Debian
    NotAutomatic: yes
    Component: main
    Architecture: amd64

Remarquez que les archives normales, sans « `NotAutomatic: yes` », la valeur par défaut de « Pin-Priority » est de 500, alors que pour les archives spéciales avec « `NotAutomatic: yes` » la valeur par défaut de « Pin-Priority » est de 1 (consultez apt_preferences(5) et Section 2.7.7, « Ajustement de la version candidate avec apt-pinning »).

### 2.5.4. Récupérer les métadonnées d’un paquet

Lorsque des outils d’APT, comme `aptitude`, `apt-get`, `synaptic`, `apt-file`, `auto-apt`, etc., sont utilisés, il faut mettre à jour les copies locales des métadonnées contenant les informations de l’archive Debian. Ces copies locales ont les noms de fichier suivants, correspondant aux noms de la `distribution`, de la `section` et de l’`architecture` indiquées dans la liste des sources (consulter Section 2.1.5, « Bases concernant l’archive Debian »).

- « `/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release` »

- « `/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release.gpg` »

- « `/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_binary-architecture_Packages` »

- « `/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_source_Sources` »

- « `/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribution_Contents-architecture.gz` » (pour `apt-file`)

Les quatre premiers types de fichiers sont partagés par toutes les commandes APT pertinentes et mis à jour depuis la ligne de commande par « `apt-get update`» ou « `aptitude update` ». Les métadonnées « `Packages` » sont mises à jour si une ligne « `deb` » est spécifiée dans la liste des sources. Les métadonnées « `Sources` » sont mises à jour si une ligne « `deb-src` » est spécifiée dans la liste des sources.

Les métadonnées « `Packages` » et « `Sources` » contiennent une entrée « `Filename:` » pointant vers l’emplacement du paquet binaire et du paquet source. Actuellement, ces paquets sont situés dans l’arborescence du répertoire « `pool/` » afin d’améliorer le passage d’une version à l’autre.

On peut effectuer des recherches interactivement dans les copies locales des métadonnées « `Packages` » à l’aide d’`aptitude`. La commande de recherche spécialisée grep-dctrl(1) peut effectuer des recherches dans les copies locales des métadonnées « `Packages` » et « `Sources` ».

La copie locale des métadonnées « `Contents-architecture` » peut être mise à jour par « `apt-file update` », son emplacement est différent des quatre autres. Consultez apt-file(1). (`auto-apt` utilise par défaut un emplacement différent pour la copie locale de « `Contents-architecture.gz` ».)

### 2.5.5. État des paquets pour APT

En plus des métadonnées récupérées par téléchargement, l’outil APT des versions ultérieures à `Lenny` enregistre l’état de l’installation généré localement dans « `/var/lib/apt/extended_states` » qui est utilisé par tous les outils APT afin de suivre tous les paquets installés automatiquement.

### 2.5.6. État des paquets pour aptitude

En plus des métadonnées récupérées par téléchargement, la commande `aptitude` enregistre l’état de l’installation généré localement dans « `/var/lib/aptitude/pkgstates` » qu’il est le seul à utiliser.

### 2.5.7. Copies locales des paquets téléchargés

Tous les paquets ayant été téléchargés au moyen du mécanisme APT sont enregistrés dans le répertoire « `/var/cache/apt/archives` » jusqu’à ce qu’ils en soient supprimés.

Cette politique de nettoyage des fichiers de cache pour `aptitude` peut être spécifiée sous « `Options` » → « `Préférences` » et peut être déclenchée manuellement par le menu « `Nettoyer le cache des paquets` » ou « `Enlever les fichiers périmés` » sous « `Actions` ».

### 2.5.8. Nom de fichier d’un paquet Debian

Les fichiers de paquets Debian ont une structure de nom particulière.

Tableau 2.15. Structure du nom des paquets Debian :

type de paquet | structure du nom
--- | ---
Paquet binaire (encore appelé `deb`) | `package-name_upstream-version-debian.revision_architecture.deb`
Le paquet binaire de l’installateur de Debian (connu sous le nom `udeb`) | `package-name_upstream-version-debian.revision_architecture.udeb`
paquet source (source amont) | `package-name_upstream-version-debian.revision.orig.tar.gz`
Paquet source `1.0` (modifications Debian) | `package-name_upstream-version-debian.revision.diff.gz`
Paquet source `3.0 (quilt)` (modifications Debian) | `package-name_upstream-version-debian.revision.debian.tar.gz`
paquet source (description) | `package-name_upstream-version-debian.revision.dsc`

| Astuce
Seuls les formats de paquets source de base sont décrits ici. Consultez dpkg-source(1) pour davantage d’informations.

Tableau 2.16. Caractères utilisables pour chacune des composantes des noms de paquets Debian

nom de la composante | caractères utilisables (expressions rationnelles étendues) | existence
--- | --- | ---
`package-name` | `[a-z0-9][-a-z0-9.+]+` | nécessaire
`epoch:` | `[0-9]+:` | optionnel
`upstream-version` | `[-a-zA-Z0-9.+:]+` | nécessaire
`debian.revision` | `[a-zA-Z0-9.+~]+` | optionnel

| Note
Vous pouvez vérifier l’ordre des versions d’un paquet à l’aide de dpkg(1), par exemple, « `dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?` ».

| Note

L’installateur Debian (d-i) utilise `udeb` comme extension du nom de fichier de ses paquets binaires plutôt que le `deb` normal. Un paquet `udeb` est un paquet `deb` allégé dont certaines parties non essentielles du contenu, comme la documentation, sont supprimées afin d’économiser de la place en relâchant les exigences de la charte des paquets. Les paquet `deb` et `udeb` partagent la même structure de paquet. Le « `u` » signifie micro.

### 2.5.9. La commande dpkg

dpkg(1) est l’outil de plus bas niveau pour la gestion des paquets de Debian. C’est un outil très puissant et il faut l’utiliser avec précaution.

Lors de l’installation d’un paquet appelé « `nom_paquet` », `dpkg` le traite selon l’ordre suivant :

1. dépaquetage du fichier deb (équivalent à « `ar -x` ») ;

2. exécution de « `nom_paquet.preinst` » en utilisant debconf(1) ;

3. installation du contenu du paquet sur le système (équivalent à « `tar -x` » ;

4. exécution de « `nom_paquet.postinst` » en utilisant debconf(1).

Le système `debconf` fournit une interaction standardisée avec l’utilisateur avec la prise en charge de I18N and L10N (Chapitre 8, I18N et L10N).

Tableau 2.17. Fichiers particuliers créés par `dpkg`

fichier | description du contenu
--- | ---
`/var/lib/dpkg/info/package_name.conffiles` | liste de fichiers de configuration. (modifiables par l’utilisateur)
`/var/lib/dpkg/info/package_name.list` | liste des fichiers et répertoires installés par le paquet
`/var/lib/dpkg/info/package_name.md5sums` | liste des valeurs de hachage MD5 pour les fichiers installés par le paquet
`/var/lib/dpkg/info/package_name.preinst` | script du paquet à exécuter avant l’installation du paquet
`/var/lib/dpkg/info/package_name.postinst` | script du paquet à exécuter après l’installation du paquet
`/var/lib/dpkg/info/package_name.prerm` | script du paquet à exécuter avant la suppression du paquet
`/var/lib/dpkg/info/package_name.postrm` | script du paquet à exécuter après la suppression du paquet
`/var/lib/dpkg/info/package_name.config` | script du paquet pour le système `debconf`
`/var/lib/dpkg/alternatives/package_name` | information d’alternative utilisée par la commande `update-alternatives` command
`/var/lib/dpkg/available` | information de disponibilité de tous les paquets
`/var/lib/dpkg/diversions` | information sur les détournements utilisés par dpkg(1) et établis avec dpkg-divert(8)
`/var/lib/dpkg/statoverride` | information de remplacement de statut utilisé par dpkg(1) et établi avec dpkg-statoverride(8)
`/var/lib/dpkg/status` | informations d’état pour tous les paquets
`/var/lib/dpkg/status-old` | fichier de sauvegarde de première génération du fichier « `var/lib/dpkg/status` »
`/var/backups/dpkg.status*` | fichier de sauvegarde de seconde génération du fichier « `var/lib/dpkg/status` »

Le fichier « `status` » est aussi utilisé par des outils comme dpkg(1), « `dselect update` » et « `apt-get -u dselect-upgrade` ».

La commande de recherche spécialisée grep-dctrl(1) peut rechercher des copies locales des métadonnées « `status` » et « `available` ».

| Astuce
Dans l’environnement de l’installateur debian, la commande `udpkg` est utilisée pour ouvrir les paquets `udeb`. La commande `udpkg` est une version allégée de la commande `dpkg`.

### 2.5.10. La commande update-alternatives

Le système Debian possède un mécanisme pour installer paisiblement des paquets qui présentent un certain recouvrement en utilisant update-alternatives(1). Par exemple, vous pouvez faire que la commande `vi` choisisse de lancer `vim` alors que les paquets `vim` et `nvi` sont tous deux installés.

    $ ls -l $(type -p vi)
    lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
    $ sudo update-alternatives --display vi
    ...
    $ sudo update-alternatives --config vi
      Selection    Command
     ----------------------------------------------
          1        /usr/bin/vim
    *+    2        /usr/bin/nvi

    Enter to keep the default[*], or type selection number: 1

Le système d’alternatives de Debian utilise des liens symboliques dans « `/etc/alternatives/` » pour enregistrer ses sélections. Le processus de sélection utilise le fichier correspondant de « `/var/lib/dpkg/alternatives/` ».

### 2.5.11. Commande dpkg-statoverride

Stat overrides, fournie par la commande dpkg-statoverride(8) est un moyen d’indiquer à dpkg(1) d’utiliser un propriétaire ou un mode différent pour un fichier lorsqu’un paquet est installé. Si « `--update` » est indiqué et que le fichier existe, il est immédiatement configuré avec le nouveau propriétaire et le nouveau mode.

| Attention
Une modification directe par l’administrateur du propriétaire ou du mode d’un fichier dont le propriétaire est le paquet en utilisant les commandes `chmod` ou `chown` sera réinitialisée lors d’une nouvelle mise à niveau du paquet.

| Note
J’utilise ici le mot fichier, mais en réalité, ce peut être n’importe quel objet d’un système de fichiers que gère `dpkg`, y compris les répertoires, les périphériques, etc.

### 2.5.12. Commande dpkg-divert

Les fichiers diversions fournis par la commande dpkg-divert(8) sont un moyen de forcer dpkg(1) à ne pas installer un fichier à son emplacement par défaut, mais à un emplacement détourné (« diverted »). L’utilisation de `dpkg-divert` est destinée à la maintenance de paquets par des scripts. Son utilisation occasionnelle par l’administrateur du système est obsolète.

## 2.6. Récupérer un système cassé

En utilisant la distribution `testing` ou `unstable`, l’administrateur peut avoir à restaurer le système à partir d’une situation où la gestion des paquets est défectueuse.

| Attention
Certaines des méthodes décrites ici sont des actions très risquées. Vous avez été prévenu !

### 2.6.1. Incompatibilité avec une ancienne configuration de l’utilisateur

Si un programme avec interface graphique présente une instabilité après une mise à niveau amont importante, vous devriez songer à des interférences avec les anciens fichiers de configuration locaux qu’il avait créés. S’il est stable avec un compte d’utilisateur fraîchement créé, cette hypothèse est confirmée. (C’est un bogue d’empaquetage du paquet et c’est le plus souvent évité par le responsable du paquet.)

Pour retrouver la stabilité, vous devrez déplacer les fichiers de configuration locaux et redémarrer le programme ayant une interface graphique. Il vous faudra peut-être lire le contenu de l’ancien fichier de configuration pour retrouver plus tard vos informations de configuration. (Ne les effacez pas trop rapidement.)

### 2.6.2. Erreurs de mise en cache des données du paquet

Les erreurs de mise en cache des données du paquet provoquent des erreurs intrigantes, telles que "GPG error: ... invalid: BADSIG ..." avec APT.

Vous devez supprimer toutes les données mises en cache avec « `sudo rm -rf /var/lib/apt/*` » et réessayer. (Si `apt-cacher-ng` est utilisé, vous devez également exécuter « `sudo rm -rf /var/cache/apt-cacher-ng/*` ».)

### 2.6.3. Récupération avec la commande dpkg

Since `dpkg` is very low level package tool, it can function without network connection.

Let's assume `foo` package was broken and needs to be fixed.

Vous pouvez trouver des copies de l’ancienne version du paquet `toto` sans bogue dans le répertoire de cache des paquets « `/var/cache/apt/archives/` ». (Si ce n’est pas le cas, vous pouvez télécharger l’archive depuis https://snapshot.debian.org/ ou la copier depuis le cache des paquets d’une machine qui fonctionne.)

Si vous pouvez démarrer le système, vous pouvez l’installer avec la commande suivante :

    # dpkg -i /path/to/foo_old_version_arch.deb

Si la tentative d’installation d’un paquet de cette manière échoue en raison de la violation de certaines dépendances et que vous voulez vraiment le faire, vous pouvez, en dernier ressort, outrepasser les dépendances en utilisant les options « `--ignore-depends` », « `--force-depends` » de `dpkg` et d’autres options. Si vous le faites, vous aurez un sérieux effort à faire pour restaurer les dépendances correctes par la suite. Consultez dpkg(8) pour davantage d’informations.

| Note
Si votre système est sérieusement cassé, vous devriez faire une sauvegarde complète du système dans un endroit sûr (consultez Section 10.2, « Sauvegarde et restauration ») et effectuer une installation propre. Cela demande moins de temps et donne, en fin de compte, de meilleurs résultats.

| Astuce
Si la casse du système est minime, vous pouvez faire un retour en arrière (downgrade) de tout le système comme dans Section 2.7.11, « Retour d’urgence à une version précédente (downgrade) » en utilisant le système de plus haut niveau APT.

### 2.6.4. Échec d’installation à cause de dépendances manquantes

Si vous forcez l’installation d’un paquet avec « `sudo dpkg -i ...` » sur un système sans que tous les paquets de dépendance soient installés, l’installation du paquet échouera puisque partielle.

You should install all dependency packages by repeatedly using "`sudo dpkg -i ...`" or by using:

    # apt --fix-broken install

Puis, configurez tous les paquets partiellement installés à l’aide de la commande suivante :

    # dpkg --configure -a

### 2.6.5. Différents paquets ayant des fichiers communs

Les systèmes de gestion d’archive au niveau du paquet, tels qu’aptitude(8) ou apt-get(1) ne tenteront même pas, grâce aux dépendances des paquets, d’installer des paquets ayant des fichiers qui se superposent (consultez Section 2.1.7, « Dépendances des paquets »).

Des erreurs du responsable du paquet ou le déploiement de sources d’archives mélangées et incohérentes (consultez Section 2.7.6, « Paquets de sources mixtes d’archives sans apt-pinning ») par l’administrateur du système peuvent créer une situation où les dépendances des paquets sont décrites de manière incorrecte. Lorsque, dans une telle situation, vous installez un paquet qui écrase des fichiers en utilisant aptitude(8) ou apt-get(1), dpkg(1) qui dépaquette le paquet va retourner une erreur au programme appelant sans écraser les fichiers existants.

| Attention
L’utilisation de programmes tierce partie introduit un risque significatif par l’intermédiaire des scripts du responsable qui sont lancés avec les privilèges de l’administrateur et peuvent effectuer n’importe quoi sur votre système. La commande dpkg(1) ne protège que contre l’écrasement des fichiers lors du dépaquetage.

Vous pouvez contourner un tel problème d’installation cassée en supprimant d’abord l’ancien paquet, `ancien_paquet`, qui pose des problèmes.

    $ sudo dpkg -P old-package

### 2.6.6. Corriger les scripts cassés des paquets

Lorsqu’une commande dans le script du paquet retourne une erreur pour une raison quelconque et que le script retourne une erreur, le système de gestion des paquets arrête son action et se termine en laissant des paquets partiellement installés. Lorsqu’un paquet comporte des bogues dans les scripts de suppression, le paquet peut devenir impossible à supprimer et assez déplaisant.

Pour les problèmes avec le script de paquet de « `nom_paquet` », il vous faudra regarder dans les scripts du paquet suivants :

- « `/var/lib/dpkg/info/nom_paquet.preinst` »

- « `/var/lib/dpkg/info/nom_paquet.postinst` »

- « `/var/lib/dpkg/info/nom_paquet.prerm` »

- « `/var/lib/dpkg/info/nom_paquet.postrm` »

Éditez le script du paquet posant problème avec le compte de l’administrateur en utilisant les techniques suivantes :

- désactiver la ligne posant problème avec un « `#` » en tête de ligne ;

- forcer un retour avec succès en ajoutant à la fin de la ligne qui pose problème « `|| true` ».

Puis, configurez tous les paquets partiellement installés à l’aide de la commande suivante :

    # dpkg --configure -a

### 2.6.7. Récupérer les données de sélection des paquets

Si le fichier « `/var/lib/dpkg/status` » est corrompu pour une raison quelconque, le système Debian perd les données de paquets sélectionnés et est sérieusement endommagé. Regardez l’ancienne version du fichier « `/var/lib/dpkg/status` » dans « `/var/lib/dpkg/status-old` » ou « `/var/backups/dpkg.status.*` ».

Conserver « `/var/backups/` » sur une partition séparée peut être une bonne idée car ce répertoire contient de nombreuses données importantes du système.

Pour les casses sévères, je recommande de faire une réinstallation propre après avoir fait une sauvegarde du système. Même si vous avez perdu tout ce qui se trouve dans « `/var/` », vous pouvez encore récupérer certaines informations depuis les répertoires qui se trouvent dans « `/usr/share/doc/` » afin de vous guider dans votre nouvelle installation.

Réinstaller un système (de bureau) minimum.

    # mkdir -p /path/to/old/system

Montez l’ancien système sur « `/chemin/vers/ancien/système/` ».

    # cd /path/to/old/system/usr/share/doc
    # ls -1 >~/ls1.txt
    # cd /usr/share/doc
    # ls -1 >>~/ls1.txt
    # cd
    # sort ls1.txt | uniq | less

Le système vous présentera alors les noms de paquets à installer. (Il peut y avoir des noms qui ne soient pas des noms de paquets, comme, par exemple, « `texmf` ».)

## 2.7. Astuces pour la gestion des paquets

Pour la simplicité, les exemples de liste des sources dans cette section sont présentés sous « `/etc/apt/sources.list` » dans style ligne par ligne après la publication de `trixie`.

### 2.7.1. Qui a envoyé le paquet ?

Bien que le nom du responsable figure dans « `/var/lib/dpkg/available` » et « `/usr/share/doc/nom_paquet/changelog` » procure quelques informations sur « qui se trouve derrière l’activité de construction des paquets », celui qui a réellement envoyé le paquet est un peu obscur. who-uploads(1) dans le paquet `devscripts` identifie celui qui a réellement envoyé les paquets sources Debian.

### 2.7.2. Diminuer la bande passante utilisée par APT

Si vous désirez limiter la bande passante utilisée par APT à, par exemple, 800Kib/sec (=100kio/sec), vous devrez configurer APT avec son paramètre de configuration comme suit :

    APT::Acquire::http::Dl-Limit "800";

### 2.7.3. Chargement et mise à niveau automatique de paquets

Le paquet `apt` est diffusé avec son propre script d’événements planifiés (cron) « `/etc/cron.daily/apt` » afin de gérer le téléchargement automatique de paquets. Ce script peut être amélioré afin d’effectuer la mise à niveau automatique des paquets en installant le paquet `unattended-upgrades`. Cela peut être personnalisé à l’aide de paramètres se trouvant dans « `/etc/apt/apt.conf.d/02backup` » et « `/etc/apt/apt.conf.d/50unattended-upgrades` » comme décrit dans « `/usr/share/doc/unattended-upgrades/README` ».

Le paquet `unattended-upgrades` est principalement destiné à des mises à jour de sécurité des systèmes `stable`. Si le risque de casser un système `stable` existant par la mise à niveau automatique est plus faible que celui d’avoir un système cassé par un intrus utilisant une de ses failles de sécurité qui a été fermée par une mise à jour de sécurité, vous devriez envisager d’utiliser cette mise à niveau automatique avec les paramètres de configuration suivants :

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "1";

Si vous faites tourner un système `testing` ou `unstable`, vous ne devriez pas utiliser les mises à niveau automatiques car cela cassera probablement votre système un jour ou l’autre. Même dans le cas de `testing` ou `unstable`, vous pourrez télécharger des paquets à l’avance afin de gagner du temps pour la mise à niveau interactive avec les paramètres de configuration suivants :

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "0";

### 2.7.4. Mises à jour et rétroportages

Il existe des stable-updates (« `trixie`-updates » pendant le cycle de publication de `trixie`-comme-`stable`) et des archives de backports.debian.org fournissent des paquets de mise à niveau pour `stable`.

Afin d’utiliser ces archives, placez la liste de toutes les archives nécessaires dans le fichier « `/etc/apt/sources.list` » de la manière suivante :

    deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free
    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-backports main non-free-firmware contrib non-free

Il n’est pas nécessaire de définir explicitement la valeur de Pin-Priority dans le fichier « `/etc/apt/preferences` ». Quand de nouveaux paquets sont disponibles, la configuration par défaut fournit les mises à niveau les plus saines (consultez Section 2.5.3, « Fichiers « Release » de niveau de l’archive »).

- Tous les paquets installés les plus anciens sont mis à niveau vers les plus récents à partir de `trixie-updates`.

- Seuls les paquets les plus anciens installés à partir de `trixie-backports` sont mis à niveau vers les plus récents à partir de `trixie-backports`.

Chaque fois que vous désirerez installer un paquet nommé « `nom_paquet` » avec ses dépendances depuis l’archive `trixie-backports` vous-même, vous utiliserez la commande suivante en changeant de version cible avec l’option « `-t` » :

    $ sudo apt-get install -t trixie-backports package-name

| Avertissement
N’installez pas trop de paquets à partir des archives backports.debian.org. Cela peut causer des complications de dépendance. Voir Section 2.1.11, « Comment faire face à des exigences conflictuelles » pour les solutions alternatives.

### 2.7.5. Archives de paquets externes

| Avertissement
Vous devez être conscient que le paquet externe obtient les privilèges du superutilisateur sur votre système. Vous ne devriez utiliser que l'archive de confiance de paquets externes. Voir Section 2.1.11, « Comment faire face à des exigences conflictuelles » pour les solutions alternatives.

Vous pouvez utiliser APT sécurisé avec l'archive de paquets externes compatible Debian en l'ajoutant à la liste des sources et son fichier de clé d'archive dans le répertoire "`/etc/apt/trusted.gpg.d/`". Voir sources.list(5), apt-secure(8) et apt-key(8).

### 2.7.6. Paquets de sources mixtes d’archives sans apt-pinning

| Attention
Installer des paquets provenant de sources d’archives mélangées n’est pas pris en charge par la distribution officielle de Debian sauf pour la prise en charge officielle d’une combinaison particulière d’archives telle que `stable` avec security updates et stable-updates.

Voici un exemple des opérations pour inclure des paquets d’une version amont spécifique plus récente se trouvant dans `unstable` pour une seule occasion tout en suivant `testing` :

1. modifier le fichier « `/etc/apt/sources.list` » de manière temporaire avec la seule entrée « `unstable` » ;

2. lancer « `aptitude update` » ;

3. lancer « `aptitude install nom_paquet` » ;

4. rétablir le fichier « `/etc/apt/sources.list` » pour `testing`.

5. lancer « `aptitude update` » ;

Vous ne créez pas le fichier « `/etc/apt/preferences` » et vous n’avez pas besoin de vous préoccuper de l’épinglage apt (« apt-pinning ») avec cette approche manuelle. Mais c’est très lourd.

| Attention

En utilisant une source d’archive mixte, vous devez vous assurer par vous-même de la compatibilité des paquets car Debian ne la garantit pas. S’il existe des incompatibilités de paquets, vous pouvez casser votre système. Vous devrez être capable d’apprécier ces exigences techniques. L’utilisation de sources mixtes d’archives aléatoires est une opération entièrement facultative et son utilisation est quelque chose que je ne vous encourage pas à faire.

Les règles générales pour l’installation de paquets de différentes archives sont les suivantes :

- Les paquets non binaires (« `Architecture: all` ») sont plus sûrs à installer :

  - paquets de documentation : pas d’exigence particulière

  - paquet de programmes d’interpréteur : un interpréteur compatible doit être disponible

- Les paquets binaires (qui ne sont pas « `Architecture: all` ») sont confrontés à de nombreux barrages et ne sont pas sûrs à installer

  - compatibilité des versions de bibliothèques (y compris « `libc` »)

  - compatibilité des versions des programmes utilitaires en rapport

  - compatibilité avec l’ABI du noyau

  - compatibilité avec l’ABI C++

  - …

| Note
De manière à rendre un paquet plus sûr à installer, certains programmes commerciaux binaires et non libres peuvent être fournis liés avec des bibliothèques complètement statiques. Vous devrez quand même vérifier leurs problèmes de compatibilité avec l’ABI, etc.

| Note
Sauf pour contourner pour un court terme un paquet cassé, l'installation de paquets binaires d’archives non Debian est généralement mauvaise idée. Vous devriez chercher toutes les solutions techniques alternatives plus sûres qui sont compatibles avec votre système Debian actuel (voir Section 2.1.11, « Comment faire face à des exigences conflictuelles »).

### 2.7.7. Ajustement de la version candidate avec apt-pinning

| Avertissement
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Section 2.1.11, « Comment faire face à des exigences conflictuelles » for alternative solutions.

Sans le fichier « `/etc/apt/preferences` », le système APT choisit, en utilisant la chaîne de version, la dernière version disponible comme version candidate. C’est l’état normal et l’utilisation la plus recommandée du système APT. Toutes les combinaisons d’archives officiellement prises en charge n’exigent pas le fichier « `/etc/apt/preferences` » car certaines archives qui ne peuvent pas être utilisées comme source des mises à jour automatiques sont marquées NotAutomatic et gérées proprement.

| Astuce
La règle de comparaison de la chaîne de version peut être vérifiée avec, par exemple « `dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?` » (consulter dpkg(1)).

Lorsque vous installez régulièrement des paquets depuis un mélange de sources d’archives (consulter Section 2.7.6, « Paquets de sources mixtes d’archives sans apt-pinning »), vous pouvez automatiser ces opérations compliquées en créant le fichier « `/etc/apt/preferences` » avec les entrées appropriées et en ajustant la règle de sélection des paquets pour la version candidate comme décrit dans apt_preferences(5). C’est appelé apt-pinning (épinglage avec apt).

Lorsque vous utilisez apt-pinning, vous devez assurer la compatibilité des paquets par vous-même puisque Debian ne le garantit pas. apt-pinning est une opération totalement facultative et son utilisation n'est pas quelque chose que je vous encourage à utiliser.

Les fichiers Release de niveau de l’archive (consulter Section 2.5.3, « Fichiers « Release » de niveau de l’archive ») sont utilisés pour la règle de apt_preferences(5). Par conséquent apt-pinning fonctionne seulement avec le nom de « suite » pour les archives normales de Debian et les archives de sécurité de Debian, ce qui est différent des archives d’Ubuntu. Par exemple, dans le fichier « `/etc/apt/preferences` », il est possible de mettre « `Pin: release a=unstable` », mais pas « `Pin: release a=sid` ».

Lorsque vous utilisez une archive ne venant pas de Debian en tant que partie d’apt-pinning, vous devez vérifier ce pour quoi elles sont prévues et aussi vérifier leur crédibilité. Par exemple, Ubuntu et Debian ne sont pas prévues pour être mélangées.

| Note
Même si vous ne créez pas le fichier « `/etc/apt/preferences` », vous pouvez effectuer des opérations assez complexes sur le système sans apt-pinning (consulter Section 2.6.3, « Récupération avec la commande dpkg » et Section 2.7.6, « Paquets de sources mixtes d’archives sans apt-pinning »).

Voici une explication simplifiée de la technique d’apt-pinning.

Le système APT choisit la mise à niveau du paquet de plus haute priorité d’épinglage (« Pin-Priority ») dans la liste des sources de paquets disponible dans le fichier « `/etc/apt/sources.list` » comme paquet de « version candidate ». Si la priorité d’épinglage du paquet est supérieure à 1000, cette restriction de version pour la mise à niveau est levée afin de permettre le retour vers une version précédente (consulter Section 2.7.11, « Retour d’urgence à une version précédente (downgrade) »).

La valeur de priorité d’épinglage de chaque paquet est définie par l’entrée « Pin-Priority » dans le fichier « `/etc/apt/preferences` » ou utilise sa valeur par défaut.

Tableau 2.18. Liste de valeurs remarquables des priorités d’épinglage pour la technique deapt-pinning

priorité d’épinglage | effet d’apt-pinning sur le paquet
--- | ---
1001 | installer le paquet même s’il s’agit d’un retour en arrière
990 | utilisé par défaut pour l’archive version cible
500 | utilisé par défaut pour l’archive normale
100 | utilisé par défaut pour l’archive non automatique mais mises à niveau automatiques
100 | utilisé pour le paquet installé
1 | utilisé par défaut pour l’archive non automatique
-1 | ne jamais installer le paquet même s'il est recommandé

L'archive version cible peut être définie par l'option de ligne de commande, par exemple, "`apt-get install -t testing un_paquet`"

L’archive non automatique mais mises à niveau automatiques est définie par le serveur d’archive dont le fichier Release au niveau de l’archive (consultez Section 2.5.3, « Fichiers « Release » de niveau de l’archive ») contient à la fois « `NotAutomatic: yes` » et « `ButAutomaticUpgrades: yes` ». L’archive non automatique est définie par le serveur d’archive dont le fichier Release au niveau de l’archive contient « `NotAutomatic: yes` ».

La situation d’épinglage apt de paquet provenant de sources d’archive multiple est affichée par « `apt-cache policy paquet` ».

- Une ligne commençant par « `Package pin:` » affiche la version d’épinglage du paquet si l’association n’est définie que pour paquet par exemple, « `Package pin: 0.190` ».

- Il n’existe pas de ligne avec « `Package pin:` » s’il n’y a pas d’association définie uniquement avec paquet.

- La valeur de Pin-Priority associée uniquement avec paquet est affichée sur la partie droite de toutes les chaînes de version, par exemple, « `0.181 700` ».

- « `0` » est affiché à droite de toutes les chaînes de version s’il n’y a pas d’association définie avec uniquement paquet, par exemple, « `0.181 0` ».

- Les valeurs de Pin-Priority des archives (définies par « `Package: *` » dans le fichier « `/etc/apt/preferences` ») sont affichées sur la gauche de tous les chemins vers les archives, par exemple, « `100 http://deb.debian.org/debian/ trixie-backports/main Packages` ».

### 2.7.8. Blocage des paquets installés par « Recommends »

| Avertissement
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Section 2.1.11, « Comment faire face à des exigences conflictuelles » for alternative solutions.

Si vous ne voulez pas installer des paquets particuliers automatiquement avec « Recommends », vous devez créer le fichier « `/etc/apt/preferences` » et y placer la liste explicite de tous ces paquets au début du fichier comme suit :

    Package: package-1
    Pin: version *
    Pin-Priority: -1

    Package: package-2
    Pin: version *
    Pin-Priority: -1

### 2.7.9. Suivre `testing` avec quelques paquets d’`unstable`

| Avertissement
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Section 2.1.11, « Comment faire face à des exigences conflictuelles » for alternative solutions.

Voici un exemple de technique d’épinglage apt permettant d’inclure de manière régulière une version amont plus récente de paquets spécifiques se trouvant dans `unstable` tout en suivant `testing`. Listez toutes les archives nécessaires dans le fichier « `/etc/apt/sources.list` » de la manière suivante :

    deb http://deb.debian.org/debian/ testing main contrib non-free
    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://security.debian.org/debian-security testing-security main contrib

Configurez le fichier « `/etc/apt/preferences` » comme suit :

    Package: *
    Pin: release a=unstable
    Pin-Priority: 100

Lorsque vous désirez installer un paquet appelé « `nom_paquet` » avec ses dépendances depuis l’archive `unstable` avec cette configuration, vous utilisez la commande suivante qui modifie la version cible avec l’option « `-t` » (la priorité d’épinglage de `unstable` devient 990).

    $ sudo apt-get install -t unstable package-name

Avec cette configuration, l’exécution habituelle de « `apt-get upgrade` » et « `apt-get dist-upgrade` » (ou « `aptitude safe-upgrade` » et « `aptitude full-upgrade` » met à niveau les paquets qui avaient été installés depuis l’archive `testing` en utilisant l’archive `testing` actuelle et les paquets qui avaient été installés depuis l’archive `unstable` en utilisant l’archive `unstable` actuelle.

| Attention
Faites bien attention à ne pas supprimer l’entrée « `testing` » du fichier « `/etc/apt/sources.list` ». Sans l’entrée « `testing` », le système APT mettra à niveau les paquets en utilisant la nouvelle archive `unstable`.

| Astuce

J’édite habituellement le fichier « `/etc/apt/sources.list` » en commentant l’entrée correspondant à l’archive « `unstable` » juste après avoir effectué les opérations ci-dessus. Cela évite un processus de mise à jour lent en raison du nombre trop important d’entrées dans le fichier « `/etc/apt/sources.list` » bien que cela ne permette pas de mettre à niveau les paquets qui avaient été installés depuis l’archive `unstable` en utilisant l’archive `unstable` actuelle.

| Astuce
Si on utilise « `Pin-Priority: 1` » à la place de « `Pin-Priority: 100` » dans le fichier « `/etc/apt/preferences` », les paquets déjà installés ayant une valeur de Pin-Priority de 100 ne seront pas mis à niveau depuis l’archive `unstable` même si l’entrée « `testing` » du fichier « `/etc/apt/sources.list` » est supprimée.

Si vous désirez suivre automatiquement un paquet particulier dans `unstable` sans une installation initiale « `-t unstable` », vous devrez créer le fichier « `/etc/apt/preferences` » et y placer la liste explicite de tous ces paquets au début du fichier de la manière suivante :

    Package: package-1
    Pin: release a=unstable
    Pin-Priority: 700

    Package: package-2
    Pin: release a=unstable
    Pin-Priority: 700

Cela définit la valeur de Pin-Priority pour chacun de ces paquets spécifiques. Par exemple, pour suivre la dernière version `unstable` de cette « Référence Debian » en français, vous devrez ajouter les entrées suivantes dans le fichier « `/etc/apt/preferences` ».

    Package: debian-reference-en
    Pin: release a=unstable
    Pin-Priority: 700

    Package: debian-reference-common
    Pin: release a=unstable
    Pin-Priority: 700

| Astuce
Cette technique d’apt-pinning est valable même si vous suivez l’archive `stable`. Jusqu’à présent et selon mon expérience, les paquets de documentation ont toujours été sûrs à installer depuis l’archive `unstable`.

### 2.7.10. Suivre `unstable` avec quelques paquets d’`experimental`

| Avertissement
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Section 2.1.11, « Comment faire face à des exigences conflictuelles » for alternative solutions.

Voici un autre exemple de technique d’épinglage apt destinée à inclure une version amont plus récente de paquets spécifiques se trouvant dans `experimental` tout en suivant `unstable`. Vous donnez la liste de toutes les archives nécessaires dans fichier « `/etc/apt/sources.list` » de la manière suivante :

    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://deb.debian.org/debian/ experimental main contrib non-free
    deb http://security.debian.org/ testing-security main contrib

La valeur de Pin-Priority par défaut pour l’archive `experimental` est toujours de 1 (<<100) car c’est une archive non automatique (consultez Section 2.5.3, « Fichiers « Release » de niveau de l’archive »). Il n’y a pas besoin de définir explicitement de valeur de Pin-Priority dans le fichier « `/etc/apt/preferences` » simplement pour utiliser l’archive `experimental` à moins que vous ne désiriez suivre des paquets particuliers dans cette archive de manière automatique pour la mise à niveau suivante.

### 2.7.11. Retour d’urgence à une version précédente (downgrade)

| Avertissement
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. See Section 2.1.11, « Comment faire face à des exigences conflictuelles » for alternative solutions.

| Attention

Le retour vers une version antérieure n’est pas officiellement géré par Debian dans sa conception. Ce ne devrait être fait qu’en tant que partie d’un processus de récupération d’urgence. Malgré cette situation, on sait que cela fonctionne bien pour de nombreux incidents. Avec les systèmes critiques vous devrez effectuer une sauvegarde des données importantes du système après l’opération de récupération et réinstaller le nouveau système depuis le départ.

Vous pouvez être assez chanceux pour revenir en arrière depuis une archive plus récente vers une archive plus ancienne afin de récupérer une mise à jour du système en manipulant la version candidate (consultez Section 2.7.7, « Ajustement de la version candidate avec apt-pinning »). Cette méthode est un remplacement de paresseux des nombreuses et fastidieuses commandes « `dpkg -i paquet-cassé_ancienne-version.deb` » (consultez Section 2.6.3, « Récupération avec la commande dpkg »).

Recherchez les lignes du fichier « `/etc/apt/sources.list` » permettant de suivre `unstable` ayant la forme suivante :

    deb http://deb.debian.org/debian/ sid main contrib non-free

Remplacez-la avec la suivante pour suivre `testing` :

    deb http://deb.debian.org/debian/ forky main contrib non-free

Configurez le fichier « `/etc/apt/preferences` » comme suit :

    Package: *
    Pin: release a=testing
    Pin-Priority: 1010

Lancez « `apt-get update; apt-get dist-upgrade` » pour forcer l’installation à une version antérieure des paquets du système.

Supprimez ce fichier spécial « `/etc/apt/preferences` » après ce retour en arrière d’urgence.

| Astuce

C’est une bonne idée de supprimer (sans purger) autant de paquets que possible afin de limiter les problèmes de dépendances. Vous devrez peut-être supprimer et installer manuellement un certain nombre de paquets afin de remettre le système dans un état antérieur. Le noyau de Linux, le gestionnaire d’amorçage, udev, PAM, APT, et les paquets relatifs au réseau ainsi que leurs fichiers de configuration demandent une attention particulière.

### 2.7.12. Paquet equivs

Si vous devez compiler un programme à partir de ses sources pour remplacer un paquet Debian, le mieux est d’en faire un paquet local réellement « debianisé » (`*.deb`) et d’utiliser une archive privée.

Si vous choisissez de compiler un programme depuis ses sources et de l’installer plutôt sous « `/usr/local` », vous pouvez avoir besoin d’utiliser `equivs` en dernier ressort pour satisfaire les dépendances des paquets manquants.

    Package: equivs
    Priority: optional
    Section: admin
    Description: Circumventing Debian package dependencies
     This package provides a tool to create trivial Debian packages.
     Typically these packages contain only dependency information, but they
     can also include normal installed files like other packages do.
     .
     One use for this is to create a metapackage: a package whose sole
     purpose is to declare dependencies and conflicts on other packages so
     that these will be automatically installed, upgraded, or removed.
     .
     Another use is to circumvent dependency checking: by letting dpkg
     think a particular package name and version is installed when it
     isn't, you can work around bugs in other packages' dependencies.
     (Please do still file such bugs, though.)

### 2.7.13. Porter un paquet vers le système stable

| Attention
Il n'y a aucune garantie que la procédure décrite ici fonctionne sans efforts manuels supplémentaires pour faire face aux différences de systèmes.

Pour des mises à niveau partielles du système `stable`, il est souhaitable de reconstruire un paquet dans son environnement en utilisant le paquet source. Cela évite des mises à niveau massives de paquets en raison de leurs dépendances.

Ajoutez les entrées suivantes au fichier « `/etc/apt/sources.list` » d’un système `stable` :

    deb-src http://deb.debian.org/debian unstable  main contrib non-free

Installez les paquets nécessaires à la compilation et téléchargez les sources comme suit :

    # apt-get update
    # apt-get dist-upgrade
    # apt-get install fakeroot devscripts build-essential
    # apt-get build-dep foo
    $ apt-get source foo
    $ cd foo*

Mettez à jour certains paquets de la chaîne d’outils tels que `dpkg`, et `debhelper` à partir des paquets rétroportés s’ils sont requis pour le rétroportage.

Exécutez ce qui suit :

    $ dch -i

Incrémentez la version du paquet, en ajoutant, par exemple « `+bp1` » dans « `debian/changelog` »

Construisez les paquets et installez-les sur le système en faisant ce qui suit :

    $ debuild
    $ cd ..
    # debi foo*.changes

### 2.7.14. Serveur mandataire (proxy) pour APT

Comme effectuer le miroir complet d’une sous-section d’une archive Debian gaspille de l’espace disque et de la bande passante du réseau, il est souhaitable, lorsque vous administrez de nombreux systèmes sur le LAN, de mettre en œuvre un serveur mandataire (« proxy ») local pour APT. APT peut être configuré pour utiliser un serveur mandataire web (http) générique comme `squid` (consultez Section 6.5, « Autres serveurs d’applications réseau ») tel que décrit dans apt.conf(5) et dans « `/usr/share/doc/apt/examples/configure-index.gz` ». La variable d’environnement « `$http_proxy` » peut être utilisée pour outrepasser le serveur mandataire défini dans le fichier « `/etc/apt/apt.conf` ».

Il y a des outils de proxy spécifiques pour l’archive Debian. Vous devriez consulter le BTS avant de les installer.

Tableau 2.19. Liste des outils de proxy spécifiques à l’archive Debian

paquet | popularité | taille | description
--- | --- | --- | ---
`apt-cacher` | V:0.31, I:0.35 | 265 | proxy avec cache pour les paquets et les fichiers source Debian (programme Perl)
`apt-cacher-ng` | V:4.2, I:4.3 | 2063 | proxy avec cache pour la distribution de paquets de logiciel (programme C++ compilé)

| Attention
Lors que Debian réorganise la structure de son archive, ces outils de proxy spécialisés ont tendance à exiger que le code soit réécrit par le responsable du paquet et peuvent ne plus fonctionner pendant un certain temps. D’un autre côté, les serveurs mandataires web (http) génériques sont plus robustes et s’accommodent plus facilement de tels changements.

### 2.7.15. Autres lectures concernant la gestion des paquets

Vous pouvez en apprendre davantage sur la gestion des paquets dans les documentations suivantes :

- Documentations primaires sur la gestion des paquets :

  - aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8), apt-config(8), apt-secure(8), sources.list(5), apt.conf(5) et apt_preferences(5) ;

  - « `/usr/share/doc/apt-doc/guide.html/index.html` » et « `/usr/share/doc/apt-doc/offline.html/index.html` » du paquet `apt-doc` ;

  - « `/usr/share/doc/aptitude/html/en/index.html` » du paquet `aptitude-doc-fr`.

- Documentations officielles et détaillées sur l’archive Debian :

  - « Charte Debian, chapitre 2 - L’archive Debian »,

  - « Manuel de référence du développeur Debian, chapitre 4 - Ressources pour les développeurs Debian 4.6 L’archive Debian » et

  - « FAQ de Debian GNU/Linux, chapitre 6 - Les archives FTP Debian ».

- Didacticiel pour la construction d’un paquet Debian pour les utilisateurs Debian :

  - « <Guide des responsables Debian> ».

Chapitre 1. Didacticiels GNU/Linux |  | Chapitre 3. Initialisation du système