Dominique Meeùs
Dernière modification le   
retour à la table des matières — à l’index — à ma page de départ

Paquets Debian (deb)

Outre de nombreuses autres qualités, les distributions Debian et dérivées, comme Ubuntu, ont une gestion tout à fait supérieure, parce que facile et sûre à la fois, des paquets de logiciel, que ces distributions offrent dans des dépôts (repository), dont les principaux sont inscrits à l’installation de la distribution.

Sauf erreur de ma part, dpkg serait le back-end ultime, installe les paquets, renseigne ce qui est installé, et cetera. Le système APT gère les dépendances entre paquets. Il fournit des commandes apt-get et autres qui servent de front end à dpkg, tandis qu’Aptitude, Dselect et Synaptic (GUI) sont à leur tour des front end d’APT. (Selon man apt-get : « apt-get is the command-line tool for handling packages, and may be considered the user’s “back-end” to other tools using the APT library. Several “front-end” interfaces exist, such as dselect(8), aptitude, synaptic, gnome-apt and wajig. »)

Voir aussi dans Le cahier de l’administrateur Debian, 6.2. Commandes aptitude, apt-get et apt.

Les manuels de référence de Debian recommandent Aptitude (ou Synaptic en mode graphique). Le programme Wajig réunit de nombreuses commandes supposées plus directes que celles d’apt et de dpkg. Ubuntu a abandonné (16.04) sa Logithèque Ubuntu en faveur de celle de GNOME (gnome-software) supposée plus facile pour les débutants.

dpkg-query -l foo* ou dpkg -l foo* (ou --list)

donne le statut des paquets (installés ou non) dont le nom commence par foo.

dpkg-query -W fait la même chose, mais avec la possibilité de contrôler la sortie avec --showformat.

dpkg-query -l

peut aussi être filtré en

dpkg-query -l | grep -i foo

pour donner seulement ceux dont le nom comprend la chaîne « foo ».

La commande dpkg écrit un journal de ses actions : /var/log/dpkg.log. Ce journal est extrêmement bavard ; il détaille toutes les opérations partielles. Ce peut être intéressant pour suivre une installation particulière. On peut obtenir un journal chronologique plus simple des installations. Voir dans /var/log le nom des journaux (mensuels) à exploiter. Faire ensuite quelque chose comme :

zcat /var/log/dpkg.log.2.gz | grep " install " > install.log
grep " install " /var/log/dpkg.log.1 >> install.log
grep " install " /var/log/dpkg.log >> install.log

où les espaces devant et derrière « install » dans " install " sont importants pour écarter des « half-installed » et cetera.

Principales commandes du système APT :

apt-get update met à jour les informations sur les paquets accessibles à partir des sources.list et sources.list.d/*.

apt-get upgrade met à jour les paquets installés.

Attention que sur un poste de travail habituel, la distribution GNU/Linux, comme Ubuntu, comportera le plus souvent un gestionnaire de mise à jour qui proposera régulièrement de mettre à jour les logiciels dont il existe de nouvelles versions. Il ne faut donc pas oublier sur un serveur installé sans interface graphique et piloté par telnet, qu’il est de la responsabilité de l’administrateur du serveur de faire régulièrement apt-get update, apt-get upgrade.

apt-get install foo installe foo.

apt-get remove foo désinstalle foo.

apt-get --purge remove foo désinstalle foo et efface ses fichiers de configuration.

apt-get autoremove désinstalle s’ils ne sont plus nécessaires des paquets installés automatiquement comme dépendance.

apt-get clean efface les paquets téléchargés dans le cache d’APT /var/cache/apt/archives/ — une grosse mise à jour d’une distribution à l’installation (par rapport au CD) peut facilement faire déborder la partition /var.

apt-get autoclean n’efface du cache que les paquets obsolètes.

On peut obtenir la description d’un paquet avec apt-cache show, qui donne aussi d’autres renseignements intéressants, dont les dépendances.

La commande apt-rdepends donne la chaîne (récursive) des dépendances d’un paquet.

D’un paquet installé, on peut se demander s’il est là par choix ou comme dépendance, et alors dépendance de quoi. On peut trouver ces dépendances inverses par apt-cache rdepends --installed somepackage et on peut écarter de la réponse les recommandations et cetera par

apt-cache rdepends --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed

Voir aussi aptitude why somepackage. On peut le faire aussi avec la commande reverse-depends du paquet ubuntu-dev-tools, mais celui-ci installe trop de choses dont l’utilisateur ordinaires n’a que faire et la commande ne semble pas limiter sa réponse aux paquets installés. La commande apt-rdepends --reverse donne la chaîne (récursive) des dépendances inverses d’un paquet.

Le programme Synaptic donne tout ça : dans l’onglet Dépendances des Propriétés d’un paquet, il y a un menu déroulant qui donne aussi les dépendances inverses.

On obtient une liste des installations intéressantes (pas les innombrables dépendances) en faisant aptitude search '~i!~M'

Quel est le paquet qui fournit telle commande ou tel fichier ? Différentes commandes répondent à cela :

La commande whereis ne donne pas le paquet, mais le fichier digital de la commande et l’éventuelle page de manuel. Essayer whereis whereis. Ayant ainsi identifié le fichier d’une commande, dpkg -S /usr/bin/foo donne le paquet.

On peut chercher un fichier aussi par apt-file search foo, mais cela demande d’installer apt-file qui ne l’est pas par défaut et de mettre à jour la liste par apt-file update.

La commande dlocate (à installer ; elle ne l’est pas par défaut) simplifie un certain nombre de recherches du genre dpkg -L ou -S. Pour ce qui nous intéresse ici, dlocate foo ou dlocate /usr/bin/foo.

Pour la mise à jour, outre les commandes apt-get déjà mentionnées, il y a une application graphique, le Gestionnaire de mise à jour (update-manager).

On peut aussi inclure les commandes apt-get dans un crontab : pour mettre à jour tous les soirs, par exemple, écrire dans /root/.crontab la ligne

30 19 * * * /usr/bin/apt-get update && /usr/bin/apt-get upgrade -y

où les cinq paramètres devant la commande sont :
minutes (0 à 59)
heure (0 à 23)
jour (1 à 31)
mois (1 à 12)
jour (1 = lundi, maandag, Monday à 7)
en marquant * pour un paramètre non utilisé.

Dominique Meeùs . Date: 2011… 2016