Grimoire-
Command
.es

GNU+Linux command memo

Memo_16 : Gestion des paquets (Debian et Ubuntu)

D’après l’édition 11 des travaux d’Alain Leaper, 2018-04-10
Licence GPL

1. Liste des dépôts

Les dépôts sont listés dans le fichier : /etc/apt/sources.list

Chaque ligne spécifie le type de source, l’url, la distribution et les sections.

# type de source: deb pour un binaire, deb-src pour des fichiers sources
deb http://ftp.fr.debian.org/debian/ lenny main contrib non-free

Une modification de ce fichier doit être suivie d’une mise à jour du catalogue de paquets disponibles.

Les modications sont réservées à un administrateur ou à root.

2. apt : manipulation des paquets depuis le catalogue

2.1. Recherche d’information sur les paquets

2.1.1. Trouver un paquet

# apt search <liste de mots clé>

# apt search make-kpkg

kernel-package - A utility for building Linux kernel related Debian packages.

2.1.2. Afficher le détail d’un paquet

# apt show kernel-package
Package: kernel-package
Version: 13.018+nmu1~bpo9+1
Priority: optional
Section: kernel
Maintainer: Manoj Srivastava <srivasta@debian.org>
Installed-Size: 1 751 kB
Depends: build-essential, po-debconf, gettext, file, bc, binutils, kmod, xz-utils, xmlto, lzma, bzip2, dpkg-dev
Recommends: docbook-utils, cpio, uboot-mkimage, kernel-common
Suggests: linux-source, libncurses-dev
Download-Size: 351 kB
APT-Sources: http://deb.debian.org/debian stretch-backports/main amd64 Packages
Description: utility for building Linux kernel related Debian packages
 This package provides the capability to create a Debian kernel image
 package by just running make-kpkg kernel_image in a kernel source
 directory tree.  It can also package the relevant kernel headers into
 a kernel-headers package. In general, this package is very useful if
 you need to create a custom kernel, if, for example, the default
 kernel does not support some of your hardware, or you wish a leaner,
 meaner kernel.  It also scripts the steps that need be taken to
 compile the kernel, which is quite convenient (forgetting a crucial
 step once was the initial motivation for this package). Please look at
 /usr/share/doc/kernel-package/Rationale for a full list of advantages
 of this package.

2.2. Mise à jour après modification de /etc/apt/sources.list

Il faut être administrateur ou root.

# apt update

2.3. Installation de paquet

Il faut être administrateur ou root.

# apt install <nomPkg1> <nomPkg2> …

2.4. Suppression de paquet

Il faut être administrateur ou root.

# apt remove <nomPkg1> <nomPkg2>

Cette opération demande une confirmation, pour être sûr de ne pas supprimer un paquet par erreur. Il est possible de confirmer par avance cette suppression via l’option -y. Ce ne fut pas toujours le cas, d’où l’exploration suivante :

2.4.1. Suppression complète d’un paquet, y compris les fichiers de configuration

Il faut être administrateur ou root.

# apt purge <nomPkg1> <nomPkg2>

En effet, la plupart des logiciels sous GNU+Linux peuvent être personnalisés en éditant leur fichier de configuration. Un utilisateur curieux peut donc passer des heures à personnaliser la configuration de ses logiciels. Pour éviter de perdre accidentellement des heures de travail, les fichiers de configuration d’un logiciel ne sont donc pas (par défaut) effacés lors de la désinstallation du logiciel. La commande purge permet de tout supprimer.

2.4.2. Suppression des dépendances qui ne sont plus utilisées

Il faut être administrateur ou root.

# apt autoremove

2.5. Mise à jour globale des paquets

Il faut être administrateur ou root.

# apt upgrade

2.6. Passage d’une distribution à une autre

Il faut être administrateur ou root.

# apt dist-upgrade

2.7. Réparation des paquets cassés

Il faut être administrateur ou root.

# apt-get --fix-broken install

2.8. Lister les fichiers installés par un paquet

# apt-file list <paquet>

Voir aussi le dernier exemple d’utilisation de dpkg.

2.9. Exemple récapitulatif : mise à jour majeure de GNU+Linux Debian.

Exemple de Jessie à Stretch. Présenté dans ce billet :

# apt update
# apt upgrade
# apt-get autoremove (1)
# vi /etc/apt/sources.list +:%s/jessie/stretch/gi +:wq
# apt update
# apt upgrade
# apt full-upgrade
# apt autoremove (1)
# apt clean
# reboot
1 apt autoremove is defined by apt-transport-https or its dependancies.

3. aptitude : idem (mais en mieux ;-p)

# aptitude search
# aptitude show
# aptitude update
# aptitude install
# aptitude remove
# aptitude purge
# aptitude upgrade
# aptitude dist-upgrade

apt et aptitude ne gèrent pas les dépendances de la même manière.

Utiliser l’un et l’autre en alternance serait susceptible de poser problème.

3.1. Revenir à la version précédente d’un paquet Debian

aptitude est capable d’assurer la descente de version d’un paquet, en assurant la gestion des dépendances :

# aptitude version <pkg>
# aptitude install <pkg>=<version>

3.2. Lister les paquets installés volontairement / manuellement

# apt-mark showmanual (1)
# aptitude search '~i!~M' -F '%p' (1)
1 Equivalent

3.3. Marquer un paquet comme installé automatiquement

C’est possible via aptitude ou via un utilitaire sur mesure : apt-mark.

# apt-mark manual $pkg (1)
# aptitude unmarkauto $pkg (1)
1 Equivalent, replace $pkg par the name of your package.

4. wajig : opérations complexes

En plus d’assurer également les opérations classiques, wajig permet par exemple de lister les paquets qui prennent le plus de place (à partir de 10MO).

# wajig large
Package                           Size (KB)        Status
=================================-==========-============
network-manager                     10,172      installed
libreoffice-draw                    10,225      installed
graphviz                            10,259      installed
[…]
pypy                                70,167      installed
libstd-rust-dev                     82,804      installed
libreoffice-common                  83,573      installed
freecad                             98,949      installed
linux-source-4.16                  105,827      installed
firefox-esr                        111,832      installed
rust-doc                           118,139      installed
inkscape                           129,840      installed
libgl1-mesa-dri                    133,632      installed
libreoffice-core                   147,548      installed
linux-image-4.16.0-0.bpo.2-amd64   252,057      installed
0ad-data                          2,047,009     installed

Pour découvrir les autres opérations disponibles :

# wajig commands
[…]
# wajig commands | wc -l

98

5. dpkg : Debian Package

Gestionnaire de paquet Debian (.deb), ne gère pas les dépendances.

Permet de manipuler un paquet directement depuis son fichier, et non plus à partir de son enregistrement dans un catalogue.

Un exemple d’utilisation est l’installation d’un noyau après compilation.

# dpkg -i linux-image-monNoyau.deb

Pour la suppression (sans suppression des fichiers de configuration) :

# dpkg -r paquet.deb

Pour la suppression (avec suppression des fichiers de configuration) :

# dpkg -P paquet.deb

Pour lister les fichiers installés par un paquet Debian :

# dpkg -L paquet.deb

5.1. Télécharger un paquet Debian et ses dépendances

Comme vu ici.

./get_deb_depends.sh $package_name [$wanted_architecture]

Sources available here:

pkg_name=$1
arch=$2 || 'amd64'

for dep in `apt-rdepends "$pkg_name" | grep -v "^ "`; do
    apt-get download "$dep":"$arch"
done

apt-get download "$pkg_name":"$arch"

6. synaptic : l’interface graphique, la logithèque

Synaptic permet de réaliser toutes les opérations de maintenance des paquets d’un système GNU+Linux Debian ou ses dérivés (Ubuntu, Devuan, MX Linux…).

L’interface comporte un menu, donnant accès à toutes les fonctionnalité selon le nom de leur étiquette. Puis une barre d’icônes reprenant les principales fonctionnalités (mise à jour du catalogue d’application, mise à jour des paquets qui peuvent l’être, application des changements en attente).

L’écran se divise ensuite en deux, une barre latérale à onglets permet de lister de différentes manières les paquets disponibles ou installés.

Au gré des tris, il est possible de marquer les paquets pour signifier qu’on souhaite leur appliquer une opération (installation, mise à jour, suppression…). Une fois les sélections faîtes, il faut encore réaliser les changements en question, c’est à dire appliquer à chaque paquet, l’opération marquée.

En pratique, on cherche un paquet, on clique pour cocher sa case dans l’interface, puis on clique sur « appliquer les changements » pour que Synaptic s’occupe de télécharger puis installer le paquet et ses dépendances.

7. Paquets : une interface graphique simplifiée

Donnant accès au même catalogue de logiciel, cette interface graphique se présente plus comme un catalogue où venir piocher des logiciels à installer, que comme un couteau suisse multi-usages (défaut de Synaptic).

Avec paquets c’est directe : on cherche un logiciel de compta ? On tape « comptabilité » dans la case de recherche qui est le premier éléments de la fenêtre sur 100% de la largeur disponible, les logiciels de compta sont alors listés (GNU Cash, Grisbi …). Lorsqu’un logiciel est choisi plusieurs bouton apparaissent dans le volet de détail du paquet, le premier de la colonne étant : « Installer ». Fin de l’histoire :-)

8. Divers problèmes liés aux mises à jour

8.1. Mise à jour impossible

Il peut être utile de supprimer (ou renommer temporairement) le répertoire /var/lib/apt/list qui contient les infos de mise à jour, et d’en créer un nouveau (vide). Il faut ensuite tout remettre à jour.

8.2. Problème de clé GPG après modification de /etc/apt/sources.list

Exemple :

# apt-get update

W: Erreur GPG: http://www.debian […]

les signatures […] ne sont pas disponibles: NO_PUBKEY 0x07DC563D1F41B907

En général il faut importer la clé GPG en question dans le trousseau local de l’utilisateur root de la machine.

$ wget -O- <https://example.com/key/repo-key.gpg> | gpg --dearmor | sudo tee /usr/share/keyrings/<myrepository>-archive-keyring.gpg   (1) (2) (3)
1 wget télécharge le fichier repo-key.gpg et l’affiche sur la sortie standard, qui se trouve redirigée vers gpg
2 gpg, qui est une commande de gestion des clés de chiffrement OpenPGP retire l’habillage en texte simple (ASCII) de la clé
3 sudo tee va vous demander le mode de passe de l’utilisateur root et écrire le contenu (nettoyé) de la clé dans le fichier dont le chemin est précisé à la fin de la commande. Ce fichier est situé à un endroit de votre arborescence de fichier qui n’est accessible qu’à l’utilisateur adminsitrateur (root). N’oubliez pas de remplacer le jeton <myrespository> par un nom de dossier suffisamment simple, personnalisé et descriptif du dépôt que vous êtes entrain d’ajouter.

La précédente méthode, désormais à éviter :

# gpg --recv-key 0x07DC563D1F41B907
# gpg --export --armor 0x07DC563D1F41B907 | apt-key add - (1)
1 apt-key est désormais à éviter (janvier 2021) : https://www.linuxuprising.com/2021/01/apt-key-is-deprecated-how-to-add.html

8.3. Mise à jour interrompue

En général un message demande de passer la commande suivante:

# dpkg --configure -all

8.4. Un paquet gêne, mais impossible de le supprimer avec Synaptic ?

# apt purge vlc

C’est arrivé…

8.5. Optimiser le temps d’exécution de commandes répétées

Comme vu ici.

# apt install apt-build
# apt update
# apt-build 'jpegoptim' (1)
# prelink 'jpegoptim' (2)
1 Locally recompile the package from sources, make sure you have deb-src lines in your /etc/apt/sources.list file
2 Prelink ELF shared libraries and binaries to speed up startup time

See also : Recompress images JPEG / PNG at equal quality at a higher speed.