Product SiteDocumentation Site

6.2. Commandes aptitude, apt-get et apt

APT est un projet relativement vaste, qui prévoyait à l'origine une interface graphique. Il repose sur une bibliothèque contenant le cœur de l'application et apt-get est la première interface — en ligne de commande — développée dans le cadre du projet. apt est une deuxième interface en ligne de commande fournie par APT qui corrige quelques erreurs de conception de apt-get.
De nombreuses interfaces graphiques sont ensuite apparues en tant que projets extérieurs : synaptic (interface graphique), aptitude (qui inclut à la fois une interface en mode texte et une interface graphique, bien que pas encore complète), wajig, etc. Le frontal le plus recommandé, apt, est celui que nous utiliserons pour les exemples de cette section. Notez cependant que les syntaxes en ligne de commande d'aptitude et d'apt-get sont très similaires. En cas de différences notables entre apt, apt-get et aptitude celles-ci seront détaillées.

6.2.1. Initialisation

Un préalable à tout travail avec APT est la mise à jour de la liste des paquets disponibles, qui s'effectue avec un simple apt update. Selon le débit de votre connexion, cette opération peut durer puisqu'elle télécharge un certain nombre de fichiers Packages/Sources/Translation-code_langue, devenus assez volumineux au fil de la croissance de Debian (plus de 10 Mo pour la section main). Évidemment, une installation à partir d'un jeu de CD-Rom ne nécessite aucun téléchargement — cette opération est alors très rapide.

6.2.2. Installation et suppression

APT permet d'ajouter ou de supprimer des paquets sur le système, respectivement avec apt install paquet et apt remove paquet. Dans chaque cas, APT installera automatiquement les dépendances nécessaires ou supprimera les paquets dépendant du paquet en cours de désinstallation. La commande apt purge paquet demande une désinstallation complète — les fichiers de configuration sont alors également supprimés.
Si le fichier sources.list mentionne plusieurs distributions, il est possible de préciser la version du paquet à installer. On peut demander un numéro de version précis avec apt install paquet=version, mais on se contentera en général d'indiquer la distribution d'origine du paquet (Stable, Testing ou Unstable) avec la syntaxe apt install paquet/distribution. Avec cette commande, on pourra donc revenir à une ancienne version d'un paquet (si par exemple on sait qu'elle fonctionne bien), à condition qu'elle soit encore disponible dans une des sources référencées par le fichier sources.list. On pourra au besoin utiliser l'archive snapshot.debian.org (voir encadré POUR ALLER PLUS LOIN Anciennes versions des paquets : snapshot.debian.org).

Exemple 6.3. Installation de la version Unstable de spamassassin

# apt install spamassassin/unstable

6.2.3. Mise à jour

Des mises à jour régulières sont recommandées, car elles mettront en place les derniers correctifs de sécurité. Pour cela, on invoquera apt upgrade, apt-get upgrade ou aptitude safe-upgrade (évidemment précédé par apt update). Cette commande cherche les mises à jour des paquets installés, réalisables sans supprimer de paquets. Autrement dit, l'objectif est d'assurer une mise à jour la moins intrusive possible. Pour cette action, apt-get est un peu plus exigeant que aptitude ou apt parce qu'il refusera d'installer des paquets qui ne l'étaient pas préalablement.
Remarquons cependant qu'apt retiendra en général le numéro de version le plus récent (à l'exception des paquets Experimental et des rétroportages, ignorés par défaut quel que soit leur numéro de version). Si vous avez mentionné Testing ou Unstable dans votre sources.list, apt upgrade migrera une grande partie de votre système Stable en Testing ou Unstable, ce qui n'est peut-être pas l'effet recherché.
Pour indiquer à apt d'utiliser telle ou telle distribution pour ses recherches de paquets mis à jour, il faut utiliser l'option -t ou --target-release (version cible), suivie du nom de la distribution en question (exemple : apt -t stable upgrade). Pour éviter de spécifier cette option à chaque invocation d'apt, vous pouvez ajouter APT::Default-Release "stable"; dans le fichier /etc/apt/apt.conf.d/local.
Pour les mises à jour plus importantes, comme lors du basculement d'une version majeure de Debian à la suivante, il faut utiliser apt full-upgrade. Cela effectue la mise à jour même s'il y a des paquets obsolètes à supprimer et de nouvelles dépendances à installer. C'est également la commande employée par ceux qui exploitent quotidiennement la version Unstable de Debian et suivent ses évolutions au jour le jour. Elle est si simple qu'elle parle d'elle-même : c'est bien cette fonctionnalité qui a fait la renommée d'APT.
Contrairement à apt et aptitude, apt-get n'a pas la commande full-upgrade. À la place, on utilisera apt-get dist-upgrade (mise à jour de la distribution), qui est la commande historique et bien connue que apt et aptitude acceptent également pour le confort des utilisateurs qui sont habitués à les utiliser.

6.2.4. Options de configuration

Outre les éléments de configuration déjà mentionnés, il est possible de configurer quelques aspects d'APT en ajoutant des directives dans un fichier du répertoire /etc/apt/apt.conf.d/. Rappelons par exemple qu'il est possible pour APT d'indiquer à dpkg d'ignorer les erreurs de collision de fichiers en précisant DPkg::options { "--force-overwrite"; }.
Si l'accès au Web n'est possible qu'à travers un mandataire (proxy), il faut ajouter une ligne semblable à Acquire::http::proxy "http://monproxy:3128". Pour un proxy FTP, on écrira Acquire::ftp::proxy "ftp://monproxy". Découvrez par vous-même les autres options de configuration en consultant la page de manuel apt.conf(5), avec la commande man apt.conf (pour plus de détails sur les pages de manuel, voir Section 7.1.1, « Les pages de manuel »).

6.2.5. Gérer les priorités associées aux paquets

Une des problématiques les plus importantes dans la configuration d'APT est la gestion des priorités des différentes sources de paquets. Il arrive en effet assez fréquemment qu'on souhaite compléter une distribution d'un ou deux paquets plus récents issus de Testing, Unstable ou Experimental. Il est possible d'affecter une priorité à chaque paquet disponible (un même paquet pouvant recevoir plusieurs priorités, selon sa version ou sa distribution d'appartenance). Ces priorités dicteront à APT son comportement : pour chaque paquet, il sélectionnera systématiquement la version de plus haute priorité (sauf si cette version est plus ancienne que celle installée et si la priorité associée est inférieure à 1 000).
APT définit un certain nombre de priorités par défaut. Chaque version de paquetage déjà installée a une priorité de 100, une version non installée reçoit une priorité de 500 sauf si elle fait partie de la distribution cible (Target Release), qu'on spécifie avec l'option -t ou la directive APT::Default-Release, auquel cas sa priorité passe à 990.
On modifiera ces priorités en intervenant sur le fichier /etc/apt/preferences pour y ajouter des entrées de quelques lignes décrivant le nom des paquets concernés, leur version, leur origine et leur nouvelle priorité.
APT refusera toujours d'installer une version antérieure d'un paquet (portant un numéro de version inférieur à celui de la version actuelle), sauf si la priorité du paquet concerné est supérieure à 1 000. APT installera toujours la version de priorité la plus élevée. Si deux versions ont la même priorité, APT installe la plus récente (le numéro de version le plus grand). Si deux paquets de même version ont la même priorité mais diffèrent par leurs contenus, APT installe la version qui n'est pas installée (cette règle doit couvrir le cas d'une mise à jour de paquet sans incrément — normalement indispensable — du numéro de révision).
Concrètement, un paquet de priorité inférieure à 0 ne sera jamais installé. Un paquet de priorité comprise entre 0 et 100 ne sera installé que si aucune autre version du même paquet n'est installée. Avec une priorité comprise entre 100 et 500, le paquet ne sera installé que s'il n'en existe aucune version plus récente, installée ou disponible dans une autre distribution. Un paquet de priorité entre 501 et 990 ne sera installé qu'à défaut de version plus récente, installée ou disponible dans la distribution cible. Une priorité entre 990 et 1 000 fera installer le paquet, sauf si la version installée est plus récente. Une priorité supérieure à 1 000 provoquera l'installation du paquet, même si cela force APT à installer une version plus ancienne que la version actuelle.
Quand APT consulte le fichier /etc/apt/preferences, il prend d'abord en compte les entrées les plus précises (souvent, celles spécifiant le paquet concerné), puis les plus génériques (incluant par exemple tous les paquets d'une distribution). Si plusieurs entrées génériques existent, la première correspondant au paquet dont on cherche la priorité est utilisée. Les critères de sélection disponibles comprennent notamment le nom du paquet et la source d'où il provient. Chaque source de paquets est identifiée par un ensemble d'informations contenues dans un fichier Release, qu'APT télécharge en même temps que les fichiers Packages.gz. Ce dernier spécifie l'origine (habituellement « Debian » pour les paquets des miroirs officiels, mais il peut s'agir du nom d'une personne ou d'un organisme proposant une archive de paquets Debian) ; il précise également le nom de la distribution (habituellement Stable, Testing, Unstable ou Experimental pour les distributions standards fournies par Debian) ainsi que sa version (par exemple 8 pour Debian Jessie). Étudions-en la syntaxe précise au travers de quelques cas vraisemblables d'emploi de ce mécanisme.
Supposons qu'on souhaite utiliser exclusivement des paquets provenant de la version stable de Debian, sans jamais installer ceux des autres versions sauf demande explicite. Il est possible d'écrire ce qui suit dans le fichier /etc/apt/preferences :
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10
a=stable précise le nom de la distribution concernée. o=Debian restreint l'entrée aux paquets dont l'origine est « Debian ». Le terme pin (épingle en anglais), est généralement traduit, dans ce contexte, par « étiquetage », car il permet d'accrocher à un paquet une étiquette désignant de quelle distribution il doit provenir.
Supposons maintenant que nous disposions d'un serveur ayant installé de nombreux programmes spécifiques à la version 5.14 de Perl et que l'on veuille s'assurer qu'aucune mise à jour n'en installera une autre version. On peut pour cela utiliser cette entrée :
Package: perl
Pin: version 5.14*
Pin-Priority: 1001
La documentation de référence sur ce fichier de configuration est disponible dans la page de manuel apt_preferences(5), accessible par la commande man apt_preferences.

6.2.6. Travailler avec plusieurs distributions

L'outil formidable qu'est apt incite fortement à mettre en place des paquets provenant d'autres distributions. Ainsi, après avoir installé une version Stable, vous voulez tester un logiciel présent dans Testing ou Unstable, sans trop vous éloigner de son état initial.
Même si vous n'êtes pas complètement à l'abri de bogues d'interactions entre les paquets de différentes distributions, apt se révèle fort heureusement très habile pour gérer une telle cohabitation et en minimiser les risques. La meilleure manière de procéder est de préciser toutes les distributions employées dans le fichier /etc/apt/sources.list (certains y placent toujours les trois distributions, mais rappelons que l'utilisation d'Unstable est réservée aux utilisateurs expérimentés) et de préciser votre distribution de référence avec le paramètre APT::Default-Release (voir Section 6.2.3, « Mise à jour »).
Supposons que Stable soit votre distribution de référence, mais que Testing et Unstable apparaissent également dans votre fichier sources.list. Dans ce cas, vous pouvez employer apt install paquet/testing pour installer un paquet depuis Testing. Si l'installation échoue parce que certaines dépendances ne peuvent pas être satisfaites, autorisez-le à satisfaire ces dernières dans Testing en ajoutant le paramètre -t testing. Il en ira évidemment de même pour Unstable.
Dans cette situation, les mises à jour (« upgrade » et « full-upgrade ») ont lieu dans le cadre de Stable, sauf pour les paquets mis à jour depuis une autre distribution : ces derniers suivront les dernières évolutions dans celles-là. Nous donnons ci-après l'explication de ce comportement grâce aux priorités automatiques employées par APT. N'hésitez pas à employer apt-cache policy (voir encadré ASTUCE apt-cache policy) pour vérifier les priorités indiquées.
Tout est lié au fait que APT ne considère que les paquets de version supérieure ou égale à la version installée (sauf configuration particulière dans /etc/apt/preferences forçant la priorité de certains paquets au-delà de 1 000).
Considérons un premier paquet installé depuis Stable et qui en est à la version 1, dont la version 2 se trouve dans Testing et la 3 dans Unstable. La version installée a une priorité de 100, mais la version disponible dans Stable (la même) a une priorité de 990 (en tant que version dans la distribution cible). Les paquets de Testing et Unstable ont une priorité de 500 (priorité par défaut d'une version non installée). Le vainqueur est donc la version 1 avec une priorité de 990. Le paquet « reste dans Stable ».
Prenons le cas d'un autre paquet, dont la version 2 a été installée depuis Testing ; la version 1 est disponible dans Stable et la 3 dans Unstable. La version 1 (de priorité 990 — donc inférieure à 1 000) est ignorée car plus petite que la version installée. Restent donc les versions 2 et 3, toutes deux de priorité 500. Face à ce choix, APT choisit la version la plus récente, celle de la distribution Unstable. Si vous ne souhaitez pas qu'un paquet installé depuis Testing puisse migrer vers Unstable, il faut associer une priorité inférieure à 500 (par exemple, 490) aux paquets provenant d'Unstable en modifiant /etc/apt/preferences :
Package: *
Pin: release a=unstable
Pin-Priority: 490

6.2.7. Suivi des paquets installés automatiquement

Une des fonctionnalités essentielles d'apt est le suivi des paquets qui ne sont installés que pour satisfaire des dépendances. Ces paquets sont dits « automatiques » et ils incluent souvent des bibliothèques.
Avec cette information, lorsque des paquets sont supprimés, les gestionnaires de paquets peuvent calculer une liste des paquets automatiques qui ne sont plus requis (parce qu'il ne reste plus de paquets installés « manuellement » qui en dépendent). apt-get autoremove est la commande pour supprimer ces paquets. aptitude et apt ne disposent pas d'une commande équivalente, parce qu'ils suppriment ces paquets automatiquement dès qu'ils sont identifiés comme superflus. Dans tous les cas, les programmes mentionnent clairement les paquets affectés lors de leurs opérations.
Il est sain d'adopter l'habitude de marquer comme automatiques les paquets dont on n'a pas besoin directement, de sorte qu'ils soient automatiquement supprimés lorsqu'ils ne sont plus nécessaires. apt-mark auto paquet marque le paquet concerné comme automatique et apt-mark manual package fait le contraire. aptitude markauto et aptitude unmarkauto fonctionnent de la même manière, mais offrent plus de fonctionnalités permettant de marquer plusieurs paquets d'un coup (voir Section 6.4.1, « aptitude »). L'interface interactive en mode semi-graphique d'aptitude facilite également la maintenance de ce marqueur « automatique » sur de nombreux paquets.
Il arrive que l'on veuille savoir pourquoi un paquet automatiquement installé est présent sur le système. Pour obtenir cette information directement depuis la ligne de commande, on peut employer aptitude why paquet (apt et apt-get ne disposent pas de cette fonctionnalité) :
$  aptitude why python-debian
i   aptitude         Recommande apt-xapian-index         
i A apt-xapian-index Dépend     python-debian (>= 0.1.15)