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.
For any work with APT, the list of available packages needs to be updated; this can be done simply through apt update
. Depending on the speed of your connection, the operation can take a while since it involves downloading a certain number of Packages
/Sources
/Translation-language-code
files, which have gradually become bigger and bigger as Debian has developed (at least 10 MB of data for the main
section). Of course, installing from a CD-ROM set does not require any downloading — in this case, the operation is very fast.
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
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
One of the most important aspects in the configuration of APT is the management of the priorities associated with each package source. For instance, you might want to extend one distribution with one or two newer packages from Testing, Unstable or Experimental. It is possible to assign a priority to each available package (the same package can have several priorities depending on its version or the distribution providing it). These priorities will influence APT's behavior: for each package, it will always select the version with the highest priority (except if this version is older than the installed one and if its priority is less than 1000).
APT defines several default priorities. Each installed package version has a priority of 100. A non-installed version has a priority of 500 by default, but it can jump to 990 if it is part of the target release (defined with the -t
command-line option or the APT::Default-Release
configuration directive).
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 will never install an older version of a package (that is, a package whose version number is lower than the one of the currently installed package) except if its priority is higher than 1000. APT will always install the highest priority package which follows this constraint. If two packages have the same priority, APT installs the newest one (whose version number is the highest). If two packages of same version have the same priority but differ in their content, APT installs the version that is not installed (this rule has been created to cover the case of a package update without the increment of the revision number, which is usually required).
In more concrete terms, a package whose priority is less than 0 will never be installed. A package with a priority ranging between 0 and 100 will only be installed if no other version of the package is already installed. With a priority between 100 and 500, the package will only be installed if there is no other newer version installed or available in another distribution. A package of priority between 501 and 990 will only be installed if there is no newer version installed or available in the target distribution. With a priority between 990 and 1000, the package will be installed except if the installed version is newer. A priority greater than 1000 will always lead to the installation of the package even if it forces APT to downgrade to an older version.
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
:
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.
Let's now assume that you have a server with several local programs depending on the version 5.14 of Perl and that you want to ensure that upgrades will not install another version of it. You could use this entry:
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.
Everything centers around the fact that APT only considers packages of higher or equal version than the installed one (assuming that /etc/apt/preferences
has not been used to force priorities higher than 1000 for some packages).
Let's assume that you have installed version 1 of a first package from Stable and that version 2 and 3 are available respectively in Testing and Unstable. The installed version has a priority of 100 but the version available in Stable (the very same) has a priority of 990 (because it is part of the target release). Packages in Testing and Unstable have a priority of 500 (the default priority of a non-installed version). The winner is thus version 1 with a priority of 990. The package “stays in Stable”.
Let's take the example of another package whose version 2 has been installed from Testing. Version 1 is available in Stable and version 3 in Unstable. Version 1 (of priority 990 — thus lower than 1000) is discarded because it is lower than the installed version. This only leaves version 2 and 3, both of priority 500. Faced with this alternative, APT selects the newest version, the one from Unstable.If you don't want a package installed from Testing to migrate to Unstable, you have to assign a priority lower than 500 (490 for example) to packages coming from Unstable. You can modify /etc/apt/preferences
to this effect:
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)