Wiki Désinstaller proprement ses paquets sur sa distribution

2
22
mar.
2017

Sommaire

Cette page wiki était à l'origine une dépêche qui avait été rédigée en juin 2016 :
https://linuxfr.org/redaction/news/astuces-pour-desinstaller-proprement

Les auteurs: Oliver H, Yves Bourguignon, rogo, palm123, BAud, Storm et guitou

Tour d'horizon des astuces actuelles (2016) pour supprimer complètement et proprement les applications, et tout autre paquet en général. Cette dépêche ne traite pas du nettoyage en profondeur de sa machine, seulement de la désinstallation.

Avertissement : Vouloir supprimer trop de paquets peut conduire à l'instabilité du système, voire à ne plus pouvoir le redémarrer !

Suppression partielle avec apt remove

Sur une distribution Debian et dérivées, pour supprimer un logiciel nous avons le traditionnel :

sudo apt-get remove <paquet-a-supprimer>

Sur d'autres distributions nous avons les commandes suivantes (liste non exhaustive) :

sudo yum    remove <paquet-a-supprimer>  # Jusqu'à Red Hat 7
sudo dnf    remove <paquet-a-supprimer>  # Remplacement de yum
sudo zypper remove <paquet-a-supprimer>  # OpenSuse
sudo snappy remove <paquet-a-supprimer>  # Ubuntu Core

La suite de cette dépêche se concentre sur les distributions Debian et ses dérivés (comme Ubuntu).

Suppression complète avec apt purge

Mais bien souvent, nous voulons supprimer aussi les fichiers de configuration qui ont également été installés avec le logiciel. Ces fichiers de configuration sont conservés par défaut au cas où ils auraient été personnalisés, bien que la plupart du temps personne ne les modifie. Sauf cas particulier, réinstaller le logiciel va réécrire ces mêmes fichiers de configuration. Donc purge à la place de remove :

sudo apt-get purge <paquet-a-supprimer>

Qui est un raccourci à

sudo apt-get  remove --purge <paquet-a-supprimer>

Les copains de apt-get

Depuis quelques années, nous avons aussi la possibilité d'utiliser la commande apt à la place de apt-get. Et aussi le bon vieux dpkg et l'interface aptitude.

sudo apt-get  purge <paquet-a-supprimer>
sudo apt      purge <paquet-a-supprimer>
sudo dpkg   --purge <paquet-a-supprimer>
sudo aptitude purge <paquet-a-supprimer>

Mais dans tous ces cas, ces actions remove et purge n'enlèvent pas les dépendances, et oui toutes les bibliothèques qui ont été nécessaires pour installer tel ou tel logiciel et dont on ne se souvient plus et qui sont mises à jour inutilement pendant des mois, voire des années après la suppression des logiciels.

Suppression des dépendances avec apt --purge autoremove

Donc pour supprimer un logiciel et ses dépendances (du moins, celles qui ne sont pas utilisées par d'autres logiciels) nous avons apt --purge autoremove (merci à Morphé de l'équipe Ubuntu-Fr pour avoir partagé cette astuce).

sudo apt-get        --purge   autoremove  <paquet-a-supprimer>

ou encore :

sudo apt-get          purge --auto-remove <paquet-a-supprimer>
sudo apt-get remove --purge --auto-remove <paquet-a-supprimer>

Ces options --purge et --autoremove peuvent aussi être utilisées pour la mise à jour de sa distribution :

( set -x ; sudo apt update && sudo apt list --upgradable && sudo apt full-upgrade --autoremove --purge --yes )

aptitude en mode interactif

aptitude peut s'utiliser en ligne de commande, mais cet usage est progressivement supplanté par la commande apt. En mode curses, il permet par contre de nettoyer de façon optimale ses paquets.

Ce chapitre présente la suppression de bibliothèques (librairies) inutiles, puis des fichiers de configuration étant toujours présents malgré la suppression des paquets correspondants.

1. Supprimer les bibliothèques inutiles

  • Lancer aptitude ;
  • Ouvrir les "Preferences" dans le menu ; Comme indiqué à l'écran, on peut utiliser ctrl-t pour ouvrir le menu, ou passer par la souris ;
  • Cocher la case "Remove unused packages automatically" sous "Dependency handling" ;
  • Presser q pour quitter la configuration ;
  • Avec les flèches et entrée, déplier "Installed packages" et se placer sur "libs" ;
  • Appuyer sur M (majuscule-m) pour marquer tous les paquets sous "lib" comme étant automatiquement installé. On peut vérifier sur la page d'aide, accessible par ?, que m est l'action réciproque qui marque les paquets manuellement installés ;
  • aptitude propose alors de désinstaller les bibliothèques qui ont été installées automatiquement mais ne sont plus nécessaires. En haut à droite de la page s'affiche l'espace qui serait gagné. Appuyer sur g (go) pour amorcer cette action ;
  • Sur cette nouvelle vue "Preview" (noter l'onglet en haut de l"écran), les paquets sont regroupés selon de nouvelles catégories, la première étant ici "Packages being removed because they are no longer used". On peut la déplier et vérifier au cas par, en appuyant sur + si on veut annuler la désinstallation ;
  • Si la liste des désinstallations a été modifiée, mieux vaut fermer et réouvrir ce panneau avec q puis g ;
  • Pour purger au lieu de conserver les fichiers de configuration, utiliser _. On peut bien sûr l'appliquer à tout un groupe ;
  • Depuis le panneau de "preview", appuyer à nouveau sur g pour appliquer les modifications listées.

2. Supprimer les configurations de paquets désinstallés

  • Dans aptitude, taper l pour filtrer les paquets selon un motif de recherche. Pour info, la recherche normale est associée à / comme d'habitude, mais elle permet seulement de se déplacer dans la liste des paquets ;
  • Saisir ~c dans la boîte de dialogue, puis entrée ;
  • aptitude affiche alors une liste de tout les paquets dont il ne reste que la configuration. Appuyer sur _ demandera une purge de ce qui est surligné ;
  • Une fois désignées les cibles, g passe dans l'onglet preview et un second g applique les changements.

NB : La syntaxe pour filtrer les paquets n'est pas spécifique à aptitude, elle est définie par la bibliothèque APT. Il y a aussi d'autres paramètres APT qui influencent aptitude, par exemple le fait d'installer automatiquement les paquets recommandés (activé par défaut, désactivable dans la configuration d'aptitude ou en éditant la configuration dans /etc/apt/).

aptitude a encore bien d'autres cordes à son arc, notamment pour gérer les conflits de mises à jour en ajoutant des contraintes (monter la version de A sans désinstaller B ni rétrograder C, etc).

Suppression des dépendances avec debfoster

Mais d'autres outils sont disponibles.

sudo apt-get install debfoster
sudo debfoster <paquet-a-supprimer>-

Notez le signe « tiret du six » '-' collé à la fin du nom du paquet. Sans ce caractère « tiret du six », debfoster installe le paquet. Personnellement, je trouve cela plus pratique que d'avoir à taper install ou purge.

Un autre truc sympa avec debfoster est l'enregistrement en local de tous les paquets à conserver.
Lors de la première utilisation, debfoster demande quels paquets sont à conserver/supprimer.
Les principales réponses :

Français Anglais Explication
'o' 'y' Conserver le paquet (par défaut, appuyer juste sur [Entrée])
'n' 'n' Supprimer le paquet (par défaut c'est un apt-get --purge remove)
'm' 'p' Supprimer le paquet et les paquets qu'il maintient installés
'r' ou '?' 'i' ou '?' Affiche la description du paquet (très utile)
'd' 'u' Annuler la précédente réponse (très utile aussi)

Les auteurs de cette page wiki ne sont pas sûrs d'avoir bien compris ce que signifie « Supprimer le paquet et les paquets qu'il maintient installés ». Voici notre compréhension :

  • D'abord, les paquets ont plusieurs marquages possibles. Les paquets sont tous marqués comme installés automatiquement ou manuellement (voir les commandes apt-mark showauto et apt-mark showmanual) ;
  • D'autres marquages sont possibles. Quand un paquet est installé, d'autres paquets sont recommandés/suggérés. Les paquets installés ne dépendent pas forcément de ces paquets recommandés/suggérés, mais ces derniers peuvent être marqués comme installés avec ;
  • C'est aussi le cas quand l'installation d'un paquet installe une dépendance par défaut. Mais le paquet peut fonctionner avec une autre dépendance alternative. La suppression de cette dépendance force l'installation d'une dépendance alternative…

Bon bref, encore une fois, nous ne sommes pas sûrs d'avoir bien pigé, mais nous avons l'impression que répondre « Supprimer le paquet et les paquets qu'il maintient installés » (plutôt que seulement « Supprimer le paquet ») permet de virer le maximum de paquets inutiles.

Apparemment, il n'y a pas de moyen élégant pour remettre à zéro la base de donnée des paquets à conserver. Voici deux façons moches de réinitialiser cette liste des paquets :

  1. Supprimer le fichier (selon votre système, le fichier peut se trouver dans une autre arborescence)

    sudo rm -vi /var/lib/debfoster/keepers
  2. Réinstaller debfoster

    sudo debfoster debfoster-
    sudo apt install debfoster

La commande suivante permet de lister les paquets marqués « à conserver » :

debfoster --show-keepers

ou :

debfoster -a

Pour finir, notons que la configuration de debfoster peut être finement paramétrée :

sudo vim /etc/debfoster.conf

Lister les orphelins avec deborphan

À la recherche des paquets orphelins.
Généralement ce sont des bibliothèques oubliées dont aucun logiciel ne dépend.

sudo apt install deborphan
deborphan                  # Liste les bibliothèques orphelines (lib) 
deborphan --guess-all      # Liste aussi les autres dépendances orphelines
deborphan --all-packages   # Liste aussi les exécutables

Pour être sûr que certains paquets ne soient pas listés comme orphelins :

sudo deborphan --add-keep libdvdcss2 ubuntu-desktop ubuntu-restricted-extras ubuntu-minimal ubuntu-standard

Pour la suppression, trois alternatives :

  1. Passer la liste des orphelins à dpkg (ou apt ou …). Ici, c'est la philosophie « chaque petit outil fait son boulot » ;

    deborphan | xargs sudo dpkg --purge
  2. Utiliser l'interface en mode texte fournit avec le paquet deborphan ;

    sudo orphaner --purge [options deborphan]
  3. Utiliser l'interface graphique.

    sudo apt install gtkorphan
    sudo gtkorphan

aptsh

sudo apt install aptsh
sudo aptsh purge <paquet-a-supprimer>

Mais comme son suffixe sh le laisse deviner, c'est à utiliser en mode interactif (shell).

$ sudo aptsh
Generating and mapping caches...
Reading commands history...

aptsh>  # Appuyer sur la touche [Tab] pour la liste des commandes
add              dump             policy           source
autoclean        dump-cfg         purge            stats
build-dep        dumpavail        queue*           toupgrade
changelog        help*            quit             unmet
check            install          rdepends         update
clean            listfiles        remove           upgrade
depends          ls               rls              whatis
dist-upgrade     madison          search           whichpkg
dotty            news             show
dpkg*            orphans*         showpkg
dselect-upgrade  pkgnames         showsrc

aptsh> orphans
libcdaudio1
libgmp-dev
libprocps3
libgstreamer-plugins-bad0.10-0
libboost-dev
libwebkit2gtk-3.0-dev

wajig

https://en.wikipedia.org/wiki/Wajig

$ sudo apt install wajig
$ sudo wajig orphans
libgstreamer-plugins-bad0.10-0:amd64
libcdaudio1:amd64

Mais toute sa puissance se révèle en mode interactif :

$ sudo wajig
wajig> commnads
addcdrom           Add a Debian CD/DVD to APT's list of available sources
addrepo            Add a Launchpad PPA (Personal Package Archive) repository
aptlog             Display APT log file
autoalts           Mark the Alternative to be auto-set (using set priorities)
autoclean          Remove no-longer-downloadable .deb files from the download cache
autodownload       Do an update followed by a download of all updated packages
autoremove         Remove unused dependency packages
build              Get source packages, unpack them, and build binary packages from them.
builddeps          Install build-dependencies for given packages
changelog          Display Debian changelog of a package
clean              Remove all deb files from the download cache
contents           List the contents of a package file (.deb)
dailyupgrade       Perform an update then a dist-upgrade
dependents         Display packages which have some form of dependency on the given package
describe           Display one-line descriptions for the given packages
describenew        Display one-line descriptions of newly-available packages
distupgrade        Comprehensive system upgrade
download           Download one or more packages without installing them
editsources        Edit list of Debian repository locations for packages
extract            Extract the files from a package file to a directory
fixconfigure       Fix an interrupted install
fixinstall         Fix an install interrupted by broken dependencies
fixmissing         Fix and install even though there are missing dependencies
force              Install packages and ignore file overwrites and depends
hold               Place packages on hold (so they will not be upgraded)
info               List the information contained in a package file
init               Initialise or reset wajig archive files
install            Package installer
installsuggested   Install a package and its Suggests dependencies
integrity          Check the integrity of installed packages (through checksums)
large              List size of all large (>10MB) installed packages
lastupdate         Identify when an update was last performed
listall            List one line descriptions for all packages
listalternatives   List the objects that can have alternatives configured
listcache          List the contents of the download cache
listcommands       Display all wajig commands
listdaemons        List the daemons that wajig can start, stop, restart, or reload
listfiles          List the files that are supplied by the named package
listhold           List packages that are on hold (i.e. those that won't be upgraded)
listinstalled      List installed packages
listlog            Display wajig log file
listnames          List all known packages; optionally filter the list with a pattern
listpackages       List the status, version, and description of installed packages
listscripts        List the control scripts of the package of deb file
listsection        List packages that belong to a specific section
listsections       List all available sections
liststatus         Same as list but only prints first two columns, not truncated
localupgrade       Upgrade using only packages that are already downloaded
madison            Runs the madison command of apt-cache
move               Move packages in the download cache to a local Debian mirror
new                Display newly-available packages
newdetail          Display detailed descriptions of newly-available packages
news               Display the NEWS file of a given package
nonfree            List packages that don't meet the Debian Free Software Guidelines
orphans            List libraries not required by any installed package 
policy             From preferences file show priorities/policy (available)
purge              Remove one or more packages and their configuration files
purgeorphans       Purge orphaned libraries (not required by installed packages)
purgeremoved       Purge all packages marked as deinstall
rbuilddeps         Display the packages which build-depend on the given package
readme             Display the README file(s) of a given package
recdownload        Download a package and all its dependencies
recommended        Display packages installed as Recommends and have no dependents
reconfigure        Reconfigure package
reinstall          Reinstall the given packages
reload             Reload system daemons (see LIST-DAEMONS for available daemons)
remove             Remove packages (see also PURGE command)
removeorphans      Remove orphaned libraries
repackage          Generate a .deb file from an installed package
reportbug          Report a bug in a package using Debian BTS (Bug Tracking System)
restart            Restart system daemons (see LIST-DAEMONS for available daemons)
rpm2deb            Convert an .rpm file to a Debian .deb file
rpminstall         Install an .rpm package file
search             Search for package names containing the given pattern
searchapt          Find nearby Debian package repositories
show               Provide a detailed description of package
sizes              Display installed sizes of given packages
snapshot           Generates a list of package=version for all installed packages
source             Retrieve and unpack sources for the named packages
start              Start system daemons (see LIST-DAEMONS for available daemons)
status             Show the version and available versions of packages
statusmatch        Show the version and available versions of matching packages
stop               Stop system daemons (see LISTDAEMONS for available daemons)
tasksel            Run the task selector to install groups of packages
todo               Display the TODO file of a given package
toupgrade          List versions of upgradable packages
tutorial           Display wajig tutorial
unhold             Remove listed packages from hold so they are again upgradeable
unofficial         Search for an unofficial Debian package at apt-get.org
update             Update the list of new and updated packages
updatealternatives Update default alternative for things like x-window-manager
updatepciids       Updates the local list of PCI ids from the internet master list
updateusbids       Updates the local list of USB ids from the internet master list
upgrade            Conservative system upgrade
upgradesecurity    Do a security upgrade
verify             Check package's md5sum
versions           List version and distribution of given packages
whichpackage       Search for files matching a given pattern 

ubuntu-tweak

Pour les heureux possesseurs d'une vieille distribution de type Debian, l’interface graphique ubuntu-tweak est géniale, surtout son onglet « Nettoyage ». Mais bon, son auteur est passé depuis sur MacOS. Et personne n'a repris la maintenance de cette application. Cette application bien pratique n'est donc plus officiellement disponible pour les versions récentes de Debian, Ubuntu et autres distributions dérivées. Le code source python ne compile même plus ! Néanmoins, le site getdeb.net propose un paquet tout prêt pour Ubuntu 16.04 (non testé).

Synaptic

Pour ceux qui préfèrent l’interface graphique :

sudo apt install synaptic
gksu synaptic

Cliquer en bas à gauche sur « État ».
Voici les sélections qui apparaissent alors en haut à gauche :

Menu Explication
Installés (locaux ou obsolète) Paquets installés à partir d'un .deb ou conservé d'une version précédente du système…
Installés (manuellement) Paquets installés par l'utilisateur après l'installation du système (voir apt-mark showmanual)
Installés (pouvant être supprimés) Correspond à sudo apt autoremove
Non installés (résidus de configuration) Paquets ayant été supprimés mais pas purgés (différence entre apt remove et apt purge).

Dans les menus de Synaptic, « Sélectionner pour suppression complète » correspond à apt purge.

Synaptic a 14 ans (APT a 17 ans) et utilise les bibliothèques graphiques GTK+, donc pour les environnements Gnome, Unity, XFCE…

Dans le monde GTK+, il y avait aussi GNOME apt remplacé maintenant par
GNOME Software qui se base sur PackageKit. Ce dernier est une abstraction des différents gestionnaire de paquets.

Muon

Et KDE ?
Pour ne pas faire de jaloux, un petit historique des équivalents pour les environnements basés sur Qt :

  • Il y avait adept jusqu'à la fin des années 2010 (pour les nostalgiques qui n'utilisaient pas la ligne de commande à cette époque) ;
  • Puis apper ;
  • Et maintenant, muon prend la relève.

    sudo apt install muon
    kdesu muon

Il y avait aussi KPackage qui semble avoir été remplacé par Shaman, à confirmer…

Et les autres

Voir aussi

Merci d'apporter votre pierre à l'édifice

Et vous, quelles sont vos astuces pour désinstaller une application, une bibliothèque ou un paquet quelconque ?

Comment faire avec les autres gestionnaires de paquet ?

  • pip
  • npm
  • yum
  • dnf
  • zypper
  • snappy
  • pacman
  • portage/emerge
  • pkgsrc
  • nix

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.