Chapitre 2. Gestion des paquets Debian

Table des matières

2.1. Prérequis pour la gestion des paquets Debian
2.1.1. Configuration de paquets
2.1.2. Précautions de base
2.1.3. La vie avec d’éternelles mises à jour
2.1.4. Bases concernant l’archive Debian
2.1.5. Debian est totalement libre
2.1.6. Dépendances des paquets
2.1.7. Flux des événements dans la gestion d’un paquet
2.1.8. Première réponse aux problèmes de gestion de paquets
2.2. Opérations de base de la gestion des paquets
2.2.1. apt-get / apt-cache comparés à aptitude
2.2.2. Opérations de base de gestion des paquets en ligne de commandes
2.2.3. Utilisation interactive d’aptitude
2.2.4. Raccourcis clavier d’aptitude
2.2.5. Vues des paquets sous aptitude
2.2.6. Options de la méthode de recherche avec aptitude
2.2.7. Les formules d’expressions rationnelles d’aptitude
2.2.8. Résolution des dépendances par aptitude
2.2.9. Journaux d’activité des paquets
2.3. Exemples d’opérations avec aptitude
2.3.1. Afficher les paquets dont les noms correspondent à une expression rationnelle
2.3.2. Parcours en correspondance avec une expression rationnelle
2.3.3. Purger pour de bon les paquets supprimés
2.3.4. Toilettage de l’état d’installation automatique/manuel
2.3.5. Mise à jour pour l’ensemble du système
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
2.4.2. Vérifier les fichiers de paquets installés
2.4.3. Protection contre les problèmes de paquets
2.4.4. Rechercher dans les métadonnées du paquet
2.5. Fonctionnement interne de la gestion des paquets Debian
2.5.1. Métadonnées de l’archive
2.5.2. Fichier « Release » de plus haut niveau et authenticité
2.5.3. Fichiers « Release » au niveau de l’archive
2.5.4. Récupérer les métadonnées d’un paquet
2.5.5. État des paquets pour APT
2.5.6. État des paquets pour aptitude
2.5.7. Copies locales des paquets téléchargés
2.5.8. Nom de fichier d’un paquet Debian
2.5.9. La commande dpkg
2.5.10. La commande update-alternatives
2.5.11. Commande dpkg-statoverride
2.5.12. Commande dpkg-divert
2.6. Récupérer un système cassé
2.6.1. Incompatibilité avec une ancienne configuration de l’utilisateur
2.6.2. Différents paquets ayant des fichiers communs
2.6.3. Corriger les scripts cassés des paquets
2.6.4. Récupération avec la commande dpkg
2.6.5. Récupérer les données de sélection des paquets
2.7. Astuces pour la gestion des paquets
2.7.1. Comment obtenir des paquets Debian
2.7.2. Paquets venant de sources mélangées
2.7.3. Ajuster la version candidate
2.7.4. Mises à jour et rétroportages
2.7.5. Blocage des paquets installés par « Recommends »
2.7.6. Suivre testing avec quelques paquets d’unstable
2.7.7. Suivre unstable avec quelques paquets d’experimental
2.7.8. Chargement et mise à niveau automatique de paquets
2.7.9. Diminuer la bande passante utilisée par APT
2.7.10. Retour d’urgence à une version précédente (downgrade)
2.7.11. Qui a envoyé le paquet ?
2.7.12. Paquet equivs
2.7.13. Porter un paquet vers le système stable
2.7.14. Serveur mandataire (proxy) pour APT
2.7.15. Petite archive publique de paquets
2.7.16. Enregistrer et copier la configuration du système
2.7.17. Convertir ou installer un paquet binaire non Debian
2.7.18. Extraire un paquet sans dpkg
2.7.19. Autres lectures concernant la gestion des paquets
[Note] Note

Ce chapitre a été écrit en supposant que le nom de code de la dernière version stable est Wheezy.

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 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 41274 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 :

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

paquet popcon taille description
apt V:857, I:999 3569 Advanced Packaging Tool (APT) (« outil avancé de paquetage »), frontal de dpkg permettant les méthodes d’accès à l’archive « http », « ftp » et « file » (les commandes apt-get et apt-cache sont comprises)
aptitude V:227, I:991 4488 gestionnaire de paquets interactif en mode terminal avec aptitude(8)
tasksel V:51, I:966 715 outil de sélection de tâches pour l’installation sur un système Debian (frontal d’APT)
unattended-upgrades V:59, I:471 312 paquet d’amélioration d’APT permettant une installation automatique des mises à niveau de sécurité
dselect V:8, I:80 2516 gestionnaire de paquets en mode terminal (standard précédent, frontal d’APT et d’autres anciennes méthodes d’accès)
dpkg V:910, I:999 6427 système de gestion des paquets pour Debian
synaptic V:111, I:478 7667 gestionnaire de paquets graphique (interface graphique GNOME pour APT)
apt-utils V:429, I:997 1364 Programmes utilitaires d’APT : apt-extracttemplates(1), apt-ftparchive(1) et apt-sortpkgs(1)
apt-listchanges V:369, I:757 203 outil de notification des modifications d’un paquet
apt-listbugs V:9, I:15 418 affiche la liste des bogues critiques avant chaque installation par APT
apt-file V:20, I:87 69 utilitaire de recherche de paquet d’APT — interface en ligne de commandes
apt-rdepends V:1, I:8 64 afficher de manière récursive la liste des dépendances du paquet

[Avertissement] 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.

L’administrateur débutant d’un système Debian devrait conserver la version stable de Debian en appliquant les mises à jour de sécurité. Je veux dire qu’il vaut mieux éviter, par précaution, certaines des actions valables suivantes, jusqu’à ce que vous ayez très bien compris le système Debian. Voici quelques rappels :

  • ne pas inclure testing, ni unstable dans « /etc/apt/sources.list » ;

  • ne pas mélanger des archives standard de Debian avec d’autres archives telles qu’Ubuntu dans « /etc/apt/sources.list » ;

  • 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 non compatibles avec le système de gestion des paquets Debian engendrés par les actions ci-dessus 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.

En dépit de mes avertissements précédents, je sais que de nombreux lecteurs de ce document voudront utiliser les versions testing ou unstable de Debian comme système principal pour des environnements de bureau autoadministrés. Cela parce qu’elles fonctionnent très bien, sont fréquemment mises à jour et offrent les fonctionnalités les plus récentes.

[Attention] 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, par exemple le PC de votre belle-mère.

Cela ne demande rien d’autre que de définir la chaîne de la distribution dans « /etc/apt/sources.list » avec le nom de suite « testing » ou « unstable », ou le nom de code « jessie » ou « sid ». Cela vous permettra de vivre la vie des mises à jour éternelles.

Il y a beaucoup de plaisir à prendre en utilisant testing ou unstable mais aussi quelques risques. Même si la version unstable du système Debian semble très stable la plupart du temps, il y a eu certains problèmes de paquets sur les versions testing et unstable et certains d’entre-eux n’ont pas été aisés à résoudre. Ce peut être assez douloureux pour vous. Quelquefois, vous pouvez avoir un paquet cassé ou une fonctionnalité manquante pendant quelques semaines.

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

(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).

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.

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

[Astuce] Astuce

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

Pour un accès HTTP typique, l’archive est indiquée de la manière suivante dans le fichier « /etc/apt/sources.list », par exemple pour le système stable = wheezy actuel :

deb http://ftp.XX.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.XX.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib
deb-src http://security.debian.org/ wheezy/updates main contrib

Veuillez noter que « ftp.XX.debian.org » doit être remplacé par l’URL du site miroir approprié à votre lieu de résidence, « ftp.us.debian.org » pour les États-Unis (et « ftp.fr.debian.org » pour la France). On peut la trouver dans la liste mondiale des sites miroirs Debian. L’état de ces serveurs peut être vérifié sur le site de vérification des miroirs Debian.

Ici, j’ai tendance à utiliser le nom de code « wheezy » plutôt que le nom de la suite « stable » afin d’éviter des surprises lorsque la version stable suivante sera diffusée.

La signification de « /etc/apt/sources.list » est décrite dans sources.list(5), ses points-clés sont les suivants :

  • la ligne « deb » définit les paquets binaires ;

  • la ligne « deb-src » définit les paquets sources ;

  • le premier paramètre est l’URL-racine de l’archive Debian ;

  • le deuxième paramètre est le nom de la distribution : soit le nom de la suite, soit son nom de code ;

  • le troisième paramètre et les suivants sont la liste des noms de sections d’archives valables dans l’archive Debian.

Les lignes deb-src peuvent être omises sans risque (ou mises en commentaire en mettant un « # » au début de la ligne) si ce n’est qu’aptitude ne pourra pas avoir accès aux métadonnées liées aux sources. Cela accélérera les mises à jour des métadonnées de l’archive. L’URL peut-être « http:// », « ftp:// », « file:// », etc.

[Astuce] Astuce

Si « sid » est utilisé dans l’exemple ci-dessus plutôt que « wheezy », il n’est pas obligatoire d’avoir la ligne « deb: http://security.debian.org/ … » pour les mises à jour de sécurité dans le fichier « /etc/apt/sources.list » parce qu’il n’y a pas de mises à jour de sécurité pour « sid » (unstable).

Voici la liste des URL des sites d’archives de Debian et les noms de suite ou les noms de code utilisés dans le fichier de configuration :


[Attention] 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 wheezy-updates et des services backports.debian.org (consultez Section 2.7.4, « Mises à jour et rétroportages »). Ces services doivent être utilisés avec des précautions supplémentaires.

[Attention] 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.3, « Ajuster la version candidate »).

[Astuce] Astuce

Pour les systèmes Debian ayant les versions stable et testing, c’est une bonne idée d’inclure les lignes ayant « http://security.debian.org/ » dans le fichier « /etc/apt/sources.list » afin d’activer les mises à jour de sécurité comme dans l’exemple ci-dessus.

[Note] 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. 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é.


Ici, le nombre de paquets est celui de l’architecture amd64. La section main fournit le système Debian (consultez Section 2.1.5, « 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 :


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 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] 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, l’archive unstable peut être utilisée avec précautions.

[Astuce] 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.

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 ni de contrib.

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

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 et contrib de l’archive.

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

  • 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 demandent à pouvoir utiliser des travaux qui ne sont pas conformes aux principes du logiciel libre selon Debian. Les paquets correspondant prennent place dans des sections nommées « contrib » (« contributions ») et « non-free » (« non libre »). Les paquets de ces sections ne font pas partie du système Debian, bien qu’ils aient été configurés afin d’être utilisés avec lui. Nous encourageons les fabricants de CD à lire les licences de ces paquets afin de déterminer s’ils peuvent les distribuer. Ainsi, bien que les travaux non libres ne fassent pas partie de Debian, nous prenons en compte leur utilisation et fournissons donc l’infrastructure nécessaire (à l’image de notre système de suivi des bogues et de nos listes de diffusion).

Les utilisateurs doivent être conscients des risques lors de l’utilisation des sections non-free et contrib de l’archive.

  • 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.

Afin de respecter ces normes strictes du logiciel libre nécessaires pour main, Debian démarque les paquets des programmes de Mozilla comme Firefox, Thunderbird et Seamonkey en retirant leurs logos et certaines données artistiques, et les distribue respectivement sous les noms Iceweasel, Icedove et Iceape.

Les paquets typiques de non-free et contrib contiennent des paquets librement distribuables 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 microprogramme contenant des données binaires sans source comme celles de Section 9.9.6, « Pilotes de matériel et microprogramme » dans non-free (la plupart sont dans la sectionnon-free/kernel).

  • Les paquets de jeu ou de police avec des restrictions sur l’utilisation commerciale ou la modification de contenu.

Veuillez remarquer que le nombre de paquets de non-free et contrib est inférieur à 2 % de ceux dans main. Activer l’accès aux sections non-free 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.

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 lâche. De nombreux utilisateurs de ce paquet pourront tirer profit de l’installation des paquets cités dans ce champs mais auront cependant des fonctionnalités acceptables sans eux.

  • « Enhances »

    • Cela déclare une dépendance lâche comme « Suggests » mais fonctionne à l’inverse.

  • « 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] 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.

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

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

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 <nom_paquet>
$ 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).


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).

Les opérations de base de gestion des paquets avec le système Debian peuvent être réalisées à l’aide de n’importe quel outil de gestion de paquets disponible avec le système Debian. Nous décrirons ici les outils de base de gestion des paquets : 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.

[Note] Note

Il arrive parfois que les paquets dans unstable soient temporairement dans un état incohérent. Le solveur de dépendances de paquet de la commande aptitude a alors tendance à suggérer des suppressions de paquets massives. Cette situation peut avoir des effets anxiogènes. En principe, « apt-get dist-upgrade » devrait y remédier. Cette situation s’observe principalement lorsqu’il existe des décalages de versions entre des paquets recommandés ou requis par un méta-paquet tel que gnome-core.

Les commandes apt-get et apt-cache sont les outils les plus basiques de gestion des paquets.

  • 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 paquets robuste et stable qui utilise les données habituelles d’états des paquets.

  • 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 aptitude est l’outil de gestion des paquets 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.

Voici les opérations de base de gestion des paquets en ligne de commandes en utilisant 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 aptitude(8), apt-get(8) et apt-cache(8)

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

[Note] 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-get et apt-cache plutôt que la commande aptitude.

[Note] Note

Puisqu’apt-get et aptitude partagent l’état de paquet installé automatiquement (consultez Section 2.5.5, « État des paquets pour APT ») après lenny, vous pouvez mélanger ces outils sans trop de problème (consultez le Bogue #594490).

« aptitude why <expression-rationnelle> » peut afficher plus d’informations par « aptitude -v why <expression_rationnelle> ». On peut obtenir des informations similaires par « 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

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


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

[Astuce] Astuce

Le paquet dselect est encore disponible et était l’outil de gestion des paquets en mode plein écran préféré des versions précédentes.

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 :


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] 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.

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                             -2220ko 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] 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.3, « Ajuster la version candidate »).

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


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


[Astuce] Astuce

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

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 ~n<expression_rationnelle_nom>
correspond à la description ~d<expression_rationnelle_description>
correspond au nom de la tâche ~t<expression_rationnelle_tâche>
correspond à l’étiquette debtag ~G<expression_rationnelle_debtag>
correspond au responsable du paquet ~m<expression_rationnelle_responsable>
correspond à la section du paquet ~s<expression_rationnelle_section>
correspond à la version du paquet ~V<expression_rationnelle_version>
correspond à l’archive ~A{wheezy,jessie,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> ~B<type>
correspond aux paquets filtrés par <motif> ayant une dépendance de <type> ~D[<type>:]<motif>
correspond aux paquets filtrés par <motif> ayant une dépendance cassée de <type> ~DB[<type>:]<motif>
correspond aux paquets vers lesquels le paquet filtré par <motif> déclare une dépendance de <type> ~R[<type>:]<motif>
correspond aux paquets vers lesquels le paquet filtré par <motif> a une dépendance cassée de <type> ~RB[<type>:]<motif>
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 <motif>
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] Astuce

Lorsqu’un <motif d’expression rationnelle> (« regex_pattern> ») est une chaîne de caractères vide, placez « ~T » directement après la commande.

Voici quelques raccourcis.

  • « ~P<term> » == « ~Dprovides:<term> »

  • « ~C<term> » == « ~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] 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’ancien équivalent « ~b » en forme courte. Le caractère d’espacement «   » 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 ».

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

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.

[Note] 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 de l’ensemble du système vers une nouvelle version en modifiant le contenu du fichier « /etc/apt/sources.list » pour qu’il pointe vers la nouvelle version et en lançant la commande « apt-get update; apt-get dist-upgrade ».

Pour effectuer la mise à jour depuis stable vers testing ou unstable, remplacez « wheezy » dans le fichier « /etc/apt/sources.list » d’exemple donné dans Section 2.1.4, « Bases concernant l’archive Debian » par « jessie » 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  : oldstablestabletestingunstable.

  10. Mettre à jour le fichier « /etc/apt/sources.list » afin qu’il pointe uniquement vers la nouvelle archive et lancer « aptitude update ».

  11. Installer d’abord, de manière facultative, le nouveau core packages, 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] Attention

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

[Attention] 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.

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

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 <motif_nom_paquet> afficher l’état d’un paquet installé pour le signalement de bogue
dpkg -L <nom_paquet> afficher le contenu d’un paquet installé.
dpkg -L <nom_paquet> | egrep '/usr/share/man/man.*/.+' afficher les pages de manuel d’un paquet installé.
dpkg -S <motif_nom_fichier> afficher les paquets installés dont le nom correspond
apt-file search <motif_nom_fichier> afficher les paquets de l’archive dont le nom correspond
apt-file list <motif_nom_paquet> afficher le contenu d’un paquet correspondant de l’archive
dpkg-reconfigure <nom_paquet> reconfigurer le paquet exact
dpkg-reconfigure -p=low <nom_paquet> 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 <nom_paquet_binaire> afficher la version disponible, la priorité et les informations concernant l’archive du paquet binaire
apt-cache madison <nom_paquet> afficher la version disponible et les informations de l’archive concernant un paquet
apt-cache showsrc <nom_paquet_binaire> afficher les informations concernant le paquet source d’un paquet binaire
apt-get build-dep <nom_paquet> installer les paquets nécessaires à la construction d’un paquet
aptitude build-dep <nom_paquet> installer les paquets nécessaires à la construction d’un paquet
apt-get source <nom_paquet> télécharger une source (depuis l’archive standard)
dget <URL pour le fichier dsc> télécharger un paquet source (depuis une autre archive)
dpkg-source -x <nom_paquet>_<version>-<version_debian>.dsc construire une arborescence source depuis un ensemble de paquets source(« *.tar.gz » et « *.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 <nom_paquet>_<version>-<version_debian>_<arch>.deb installer un paquet local sur le système
debi <nom_paquet>_<version>-<version_debian>_<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 <nom_paquet> 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] 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] 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 :

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] 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.

Bien que visiter le site Debian à http://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).

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.

[Astuce] 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://ftp.fr.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] Note

Vous pouvez trouver ici ma justification pour l’utilisation de « suite », « nom de code » dans Section 2.1.4, « 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 plus haut niveau est vérifiée par une infrastructure cryptographique appelée secure apt.

  • 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.

  • La clé publique de l’archive Debian peut être placée dans « /etc/apt/trusted.gpg » ;

  • Le système secure APT vérifie de manière cryptographique, à l’aide du fichier « Release.gpg » et de la clé publique de l’archive Debian de « /etc/apt/trusted.gpg », l’intégrité du fichier « Release » de plus haut niveau téléchargé .

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 »).

[Astuce] Astuce

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

Il y a des fichiers « Release » du niveau de l’archive pour tous les emplacements d’archives indiqués par une ligne « deb » dans « /etc/apt/sources.list » comme, par exemple, « http://ftp.fr.debian.org/debian/dists/unstable/main/binary-amd64/Release » ou « http://ftp.fr.debian.org/debian/dists/sid/main/binary-amd64/Release » comme suit :

Archive: unstable
Origin: Debian
Label: Debian
Component: main
Architecture: amd64
[Attention] 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 (« dapper", « feisty », « gutsy », « hardy », « intrepid », …) sont utilisés dans l’archive Ubuntu.

Pour certaines archives, comme experimental et wheezy-backports, qui contiennent des paquets qui ne devraient pas être installés automatiquement, il y a une ligne supplémentaire, par exemple « http://ftp.fr.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.3, « Ajuster la version candidate »).

Lorsqu’on utilise les outils APT, comme aptitude, apt-get, synaptic, apt-file, auto-apt, etc., 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 « /etc/apt/sources.list » (consultez Section 2.1.4, « Bases concernant l’archive Debian »).

  • « /var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_Release »

  • « /var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_Release.gpg »

  • « /var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_<area>_binary-<architecture>_Packages »

  • « /var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribution>_<area>_source_Sources »

  • « /var/cache/apt/apt-file/ftp.us.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 sont mis à jour depuis la ligne de commandes par « apt-get update » ou « aptitude update ». Les métadonnées « Packages » sont mises à jour s’il y a une ligne « deb » dans le fichier « /etc/apt/sources.list ». Les métadonnées « Sources » sont mises à jour s’il y a une ligne « deb-src » dans le fichier « /etc/apt/sources.list ».

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 »).

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


[Astuce] Astuce

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


[Note] 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] 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.

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/<nom_paquet>.conffiles liste de fichiers de configuration. (modifiables par l’utilisateur)
/var/lib/dpkg/info/<nom_paquet>.list liste des fichiers et répertoires installés par le paquet
/var/lib/dpkg/info/<nom_paquet>.md5sums liste des valeurs de hachage MD5 pour les fichiers installés par le paquet
/var/lib/dpkg/info/<nom_paquet>.preinst script du paquet à exécuter avant l’installation du paquet
/var/lib/dpkg/info/<nom_paquet>.postinst script du paquet à exécuter après l’installation du paquet
/var/lib/dpkg/info/<nom_paquet>.prerm script du paquet à exécuter avant la suppression du paquet
/var/lib/dpkg/info/<nom_paquet>.postrm script du paquet à exécuter après la suppression du paquet
/var/lib/dpkg/info/<nom_paquet>.config script du paquet pour le système debconf
/var/lib/dpkg/alternatives/<nom_paquet> 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] 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.

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

[Attention] Attention

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

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.6, « 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.2, « Paquets venant de sources mélangées ») 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] 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 <ancien_paquet>

Comme dpkg est un outil de gestion des paquets de très bas niveau, il peut fonctionner dans des situations très difficiles telles qu’un système qu’on ne peut pas démarrer et qui n’a pas de connexion réseau. Supposons que le paquet toto soit cassé et doive être remplacé.

Vous pouvez trouver des copies de l’ancienne version du paquet foo 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 http://snapshot.debian.net/ 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 /chemin/vers/toto_<ancienne-version>_<arch>.deb
[Astuce] 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.10, « Retour d’urgence à une version précédente (downgrade)  » en utilisant le système de plus haut niveau APT.

Si votre système ne peut pas être démarré depuis le disque dur, vous devrez rechercher d’autres manières de le démarrer :

  1. Démarrez le système en utilisant le CD de l’installateur Debian en mode secours (« rescue mode »).

  2. Montez le système qui ne veut pas démarrer sur le disque dur sur « /target ».

  3. Installez une version plus ancienne du paquet toto en faisant ce qui suit :

# dpkg --root /target -i /chemin/vers/toto_<ancienne_version>_<arch>.deb

Cet exemple fonctionne même si la commande dpkg qui se trouve sur le disque dur est cassée.

[Astuce] Astuce

Tous les systèmes GNU/Linux démarrés depuis un autre système sur le disque dur, depuis un CD autonome GNU/Linux, depuis une clé USB amorçable, depuis le réseau peuvent être utilisés de manière similaire pour restaurer un système cassé.

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] 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.

[Attention] 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 wheezy-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] 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 :

[Note] 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] Note

Sauf pour éviter à court terme un paquet cassé, installer des paquets binaires depuis des archives officiellement non supportées est en général une mauvaise idée. C’est vrai même si vous utilisez l’épinglage apt (« apt-pinning ») (consultez Section 2.7.3, « Ajuster la version candidate »). Vous devriez envisager chroot ou des techniques similaires (consultez Section 9.10, « Système virtualisé ») afin de faire tourner des programmes en provenance d’archives différentes.

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] 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 $? » (consultez dpkg(1)).

Lorsque vous installez régulièrement des paquets depuis un mélange de sources d’archives (consultez Section 2.7.2, « Paquets venant de sources mélangées »), vous pouvez automatiser ces opérations compliquées en créant le fichier « /etc/apt/preferences » avec les entrées correctes 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é épinglage apt (« apt-pinning »).

[Avertissement] Avertissement

L’utilisation de l’épinglage apt par un débutant est une source certaine de problèmes majeurs. Vous devriez éviter l’utilisation de l’épinglage apt sauf si vous en avez absolument besoin.

[Attention] Attention

Lorsque vous utilisez l’épinglage apt, vous devez vérifier vous-même la compatibilité des paquets car le système Debian ne la garantit pas. L’épinglage apt est une opération entièrement facultative et je ne vous encourage pas à l’utiliser.

[Attention] Attention

Les fichiers Release au niveau de l’archive (consultez Section 2.5.3, « Fichiers « Release » au niveau de l’archive ») sont utilisés pour la règle de apt_preferences(5). L’épinglage apt ne fonctionne donc qu’avec le nom de « suite » pour les archives normales de Debian et les archives de sécurité de Debian c’est différent des archives Ubuntu). Par exemple, dans le fichier « /etc/apt/preferences », il est possible de mettre « Pin: release a=unstable  » mais pas « Pin: release a=sid »

[Attention] Attention

Lorsque vous utilisez une archive ne venant pas de Debian en tant que partie d’épinglage apt, 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] 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 épinglage apt (consultez Section 2.6.4, « Récupération avec la commande dpkg » et Section 2.7.2, « Paquets venant de sources mélangées »).

Voici une explication simplifiée de la technique d’épinglage apt (« 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 (consultez Section 2.7.10, « 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.


Il y a plusieurs méthodes pour définir l’archive version cible :

  • fichier de configuration « /etc/apt/apt.conf » avec la ligne « APT::Default-Release "stable"; »

  • option de la ligne de commandes, 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 » au 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://ftp.XX.debian.org/debian/ wheezy-backports/main Packages ».

Les archives du wheezy-updates et backports.debian.org fournissent des paquets mis à niveau pour stable (wheezy).

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://ftp.fr.debian.org/debian/ wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib
deb http://ftp.fr.debian.org/debian/ wheezy-updates main contrib non-free
deb http://ftp.us.debian.org/debian/ wheezy-backports main 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 » au niveau de l’archive »).

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

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

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

$ sudo apt-get install -t wheezy-backports <nom_paquet>

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://ftp.fr.debian.org/debian/ testing main contrib non-free
deb http://ftp.fr.debian.org/debian/ unstable main contrib non-free
deb http://security.debian.org/ testing/updates 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 <nom_paquet>

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] 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] 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] 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: <paquet-1>
Pin: release a=unstable
Pin-Priority: 700

Package: <paquet-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-fr
Pin: release a=unstable
Pin-Priority: 700

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

Cette technique d’épinglage apt est aussi valable 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.

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 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 ce cas, avec 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";
[Attention] 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.3, « Ajuster la version candidate »). Cette méthode est un remplacement de paresseux des nombreuses et fastidieuses commandes « dpkg -i <paquet-cassé>_<ancienne-version>.deb » (consultez Section 2.6.4, « 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://ftp.fr.debian.org/debian/ sid main contrib non-free

Remplacez-la avec la suivante pour suivre testing :

deb http://ftp.fr.debian.org/debian/ jessie main contrib non-free

Définissez comme suit le fichier « /etc/apt/preferences » :

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] 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.

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.10, « 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.


[Attention] 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.

Voici un exemple de création d’une petite archive publique de paquets compatible avec le système moderne d’APT sécurisée (consultez Section 2.5.2, « Fichier « Release » de plus haut niveau et authenticité »). Définissons un certain nombre de choses :

  • Nom du compte : « toto »

  • Nom de machine : « www.example.com »

  • Paquets nécessaires : apt-utils, gnupg, et autres paquets

  • URL : « http://www.example.com/~toto/ » ( → « /home/foo/public_html/index.html »)

  • Architecture des paquets : « amd64 »

Créez une clé d’archive APT de Toto sur votre serveur en faisant ce qui suit :

$ ssh foo@www.example.com
$ gpg --gen-key
...
$ gpg -K
...
sec   1024D/3A3CB5A6 2008-08-14
uid                  Toto (ARCHIVE KEY) <toto@www.example.com>
ssb   2048g/6856F4A7 2008-08-14
$ gpg --export -a 3A3CB5A6 >toto.public.key

Publiez le fichier contenant la clé de l’archive « toto.public.key » avec l’ID de clé « 3A3CB5A6 » pour toto

Créez une arborescence d’archive appelée « Origin: Toto » comme suit :

$ umask 022
$ mkdir -p ~/public_html/debian/pool/main
$ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64
$ mkdir -p ~/public_html/debian/dists/unstable/main/source
$ cd ~/public_html/debian
$ cat > dists/unstable/main/binary-amd64/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Foo
Label: Foo
Architecture: amd64
EOF
$ cat > dists/unstable/main/source/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Foo
Label: Foo
Architecture: source
EOF
$ cat >aptftp.conf <<EOF
APT::FTPArchive::Release {
  Origin "Foo";
  Label "Foo";
  Suite "unstable";
  Codename "sid";
  Architectures "amd64";
  Components "main";
  Description "Archive publique de Toto";
};
EOF
$ cat >aptgenerate.conf <<EOF
Dir::ArchiveDir ".";
Dir::CacheDir ".";
TreeDefault::Directory "pool/";
TreeDefault::SrcDirectory "pool/";
Default::Packages::Extensions ".deb";
Default::Packages::Compress ". gzip bzip2";
Default::Sources::Compress "gzip bzip2";
Default::Contents::Compress "gzip bzip2";

BinDirectory "dists/unstable/main/binary-amd64" {
  Packages "dists/unstable/main/binary-amd64/Packages";
  Contents "dists/unstable/Contents-amd64";
  SrcPackages "dists/unstable/main/source/Sources";
};

Tree "dists/unstable" {
  Sections "main";
  Architectures "amd64 source";
};
EOF

Vous pouvez automatiser les mises à jour répétitives du contenu de l’archive APT sur votre serveur en configurant dupload.

Placez tous les fichiers de paquets dans « ~toto/public_html/debian/pool/main/ » en exécutant « dupload -t toto changes_file » dans le client avec « ~/.dupload.conf  » contenant ce qui suite :

$cfg{'toto'} = {
  fqdn => "www.example.com",
  method => "scpb",
  incoming => "/home/toto/public_html/debian/pool/main",
  # dinstall de ftp-master s'envoie lui-même des courriels
  dinstall_runs => 1,
};

$cfg{'toto'}{postupload}{'changes'} = "
  echo 'cd public_html/debian ;
  apt-ftparchive generate -c=aptftp.conf aptgenerate.conf;
  apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ;
  rm -f dists/unstable/Release.gpg ;
  gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'|
  ssh toto@www.example.com  2>/dev/null ;
  echo 'Archive de paquets créée.'";

Le script automatique (« hook » postupload lancé par dupload(1) crée une archive mise à jour des fichiers lors de chaque dépôt (« upload »).

Vous pouvez ajouter cette petite archive publique à la ligne apt de votre système client par ce qui suit :

$ sudo bash
# echo "deb http://www.example.com/~foo/debian/ unstable main" \
   >> /etc/apt/sources.list
# apt-key add toto.public.key
[Astuce] Astuce

Si l’archive est située sur le système de fichiers local, vous pouvez utiliser à la place « deb file:///home/toto/debian/ … ».

Le contenu du paquet « dpkg*.deb » peut être extrait sans utiliser dpkg(1) sur un environnement quelconque UNIX-like en utilisant les commandes standards ar(1) et tar(1).

# ar x /path/to/dpkg_<version>_<arch>.deb
# ls
total 24
-rw-r--r-- 1 bozo bozo  1320 2007-05-07 00:11 control.tar.gz
-rw-r--r-- 1 bozo bozo 12837 2007-05-07 00:11 data.tar.gz
-rw-r--r-- 1 bozo bozo     4 2007-05-07 00:11 debian-binary
# mkdir control
# mkdir data
# tar xvzf control.tar.gz -C control
# tar xvzf data.tar.gz -C data

Le contenu de l’autre paquet « *.deb  peut être extrait avec la commande dpkg-deb(1), elle-même extraite du paquet "dpkg*.deb" évoqué au paragraphe précédent ; ou en utilisant les outils standards ar(1) et son descendant GNU tar(1) avec les fonctions xz(1) de désarchivage/décompression, comme dans les exemples ci-dessus.

Vous pouvez aussi parcourir le contenu du paquet en utilisant la commande mc.