Supprimer les paquets inutilisés

63

J'ai installé des paquets rpm sur mon Fedora 17. Certains paquets avaient beaucoup de dépendances. J'ai supprimé des paquets mais j'ai oublié de supprimer les dépendances inutilisées avec yum remove.

Comment puis-je faire cela maintenant?

Raphael Ahrens
la source
Avez-vous consulté la yumpage de manuel : linux.die.net/man/8/yum ?
Linuxios
1
duplicate of: unix.stackexchange.com/questions/23330/…
maxschlepzig

Réponses:

39

Ce n'est pas facile. Comment faites-vous la distinction entre "un fichier requis par quelque chose que j'ai supprimé depuis" de "un fichier qui n'est plus requis par quelque chose que je veux vraiment"?

Vous pouvez utiliser la package-cleanupcommande du yum-utilspackage pour répertorier les "nœuds terminaux" dans votre graphe de dépendance. Ce sont des paquets qui peuvent être supprimés sans rien affecter d'autre:

$ package-cleanup --leaves

Cela produira une liste de "bibliothèques" dont rien d'autre ne dépend. Dans la plupart des cas, vous pouvez supprimer ces paquets en toute sécurité. Si vous ajoutez --allà la ligne de commande:

$ package-cleanup --leaves --all

Vous obtiendrez également des paquets qui ne sont pas considérés comme des bibliothèques, mais cette liste sera si longue qu'elle ne sera probablement pas utile.

alsacs
la source
9
APT (l'équivalent Debian de Yum) a la notion de «paquet automatiquement installé». Si un package n'a pas été explicitement demandé mais est uniquement extrait en tant que dépendance, il sera automatiquement supprimé (avec une invite de confirmation) si les packages qui en dépendent sont tous supprimés. Sans indication de ce type, ce n'est en effet pas facile.
Gilles 'SO- arrête d'être méchant'
101

Si vous installez un paquet avec yum install, disons pdftk, il attirera beaucoup de dépendances:

Installed:
  pdftk.x86_64 0:1.44-10.fc18

Dependency Installed:
  bouncycastle.noarch 0:1.46-6.fc18     
  itext-core.noarch 0:2.1.7-14.fc18     
  libgcj.x86_64 0:4.7.2-8.fc18          
  bouncycastle-mail.noarch 0:1.46-6.fc18
  java-1.5.0-gcj.x86_64 0:1.5.0.0-40.fc18
  sinjdoc.x86_64 0:0.5-13.fc18
  bouncycastle-tsp.noarch 0:1.46-5.fc18
  java_cup.noarch 1:0.11a-10.fc18
  itext.x86_64 0:2.1.7-14.fc18   
  javamail.noarch 0:1.4.3-12.fc18

Complete!

yum remove pdftk enlèvera seulement ce paquet et pas toutes les dépendances.

Mais vous pouvez regarder toutes les "transactions" (installer, supprimer, etc.):

$ sudo yum history list pdftk
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------  
    88 | install pdftk            | 2012-12-14 13:35 | Install        |   11   

Et ensuite, vous pouvez annuler cette transaction:

$ sudo yum history undo 88
Undoing transaction 88, from Fri Dec 14 13:35:34 2012
    Dep-Install bouncycastle-1.46-6.fc18.noarch       @fedora
    Dep-Install bouncycastle-mail-1.46-6.fc18.noarch  @fedora
    Dep-Install bouncycastle-tsp-1.46-5.fc18.noarch   @fedora
    Dep-Install itext-2.1.7-14.fc18.x86_64            @fedora
    Dep-Install itext-core-2.1.7-14.fc18.noarch       @fedora
    Dep-Install java-1.5.0-gcj-1.5.0.0-40.fc18.x86_64 @fedora
    Dep-Install java_cup-1:0.11a-10.fc18.noarch       @fedora
    Dep-Install javamail-1.4.3-12.fc18.noarch         @fedora
    Dep-Install libgcj-4.7.2-8.fc18.x86_64            @fedora
    Install     pdftk-1.44-10.fc18.x86_64             @fedora
    Dep-Install sinjdoc-0.5-13.fc18.x86_64            @fedora
    ...
    Complete!
Votre maman
la source
14
+1 solution géniale et très facile à faire. Je n'ai jamais entendu parler de yum history. Merci!
Stefan Lasiewski
8
Et si 89 dépend de java_cup ou de libgcj?
WernerCD
2
Cela ne devrait-il pas être une réponse acceptée?
Celdor
62

A partir de Fedora 18, vous pouvez simplement utiliser cette commande

yum autoremove

ou

yum remove --setopt=clean_requirements_on_remove=1

Vous pouvez également appliquer la commande autoremove avec un package spécifique

yum autoremove <package>

Ce qui supprimera les dépendances inutiles de ce paquet installé. autoremoveest très souvent un alias, remove --setopt=clean_requirements_on_remove=1mais pour certaines raisons, il n’est toujours pas documenté.

Finalzone
la source
5
commande yum remove --setopt=clean_requirements_on_remove=1fonctionne pour moi en centOS
BMW
Pour moi, package-cleanup --leaves && yum autoremovelibvorbis supprimé et a ainsi fait disparaître l'application "Ices" de diffusion en continu sur Internet - probablement parce qu'elle n'était pas en pension et que je devais la compiler.
Nakilon
La commande yum autoremovefonctionne également sur CentOS 7.6.
scrutari le
yum autoremove ne parvient pas à supprimer 4 anciens noyaux sur CentOS 7
utilisateur1133275
6

J'ai pris des larsks répondre un pas plus loin.

$ package-cleanup -q --leaves | xargs -l1 yum -y remove 

Cela saisit toutes les dépendances qui peuvent être supprimées sans affecter quoi que ce soit d'autre, puis les supprime. Mieux vaut alors passer un par un.

"-q" est utile sur certains systèmes qui affichent "Configuration de yum" sinon, cette commande supprime yum. Et ce n'est pas ce que tu veux.

jtoscarson
la source
2
package-cleanupsorties "Configuration de yum" sur ma machine, ce qui a amené Yum à se retirer lui-même. J'essaie maintenant de trouver un moyen de résoudre ce problème.
Paul Lammertsma
@PaulLammertsma vient d'ajouter une -qoption pour le nettoyage du paquet. Cela m'est aussi arrivé: D
Ealhad
1
package-cleanup -q --leaves | xargs -r -l1 yum -y removeignore silencieusement xargs si la sortie de nettoyage du paquet est vide, utile pour les scripts automatisés tels que ansible, chef, marionnette, vagabond
Ilya Sheershoff
c'est la réponse.
xCovelus
1

Dans les nouvelles Fedoras avec dnf, vous pouvez utiliser dnf repoquery --unneededen remplacement de package-cleanup --leaves.

Thomas Ahle
la source