J'ai installé un paquet rpm sur mon Fedora 17. Certains paquets avaient beaucoup de dépendances. J'ai supprimé certains paquets mais j'ai oublié de supprimer les dépendances inutilisées avec yum remove.
Comment puis-je faire ça maintenant?
Ce n'est pas facile. Comment différenciez-vous "un fichier qui a été requis par quelque chose que j'ai supprimé depuis" d'un "fichier qui n'est pas requis par autre chose que je veux vraiment"?
Vous pouvez utiliser le package-cleanup
commande à partir de yum-utils
package pour répertorier les "nœuds feuilles" dans votre graphique de dépendance de package. Ce sont des packages qui peuvent être supprimés sans affecter quoi que ce soit 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 packages en toute sécurité. Si vous ajoutez --all
à la ligne de commande:
$ package-cleanup --leaves --all
Vous obtiendrez également des packages qui ne sont pas considérés comme des bibliothèques, mais cette liste sera si longue qu'elle ne sera probablement pas utile.
Si vous installez un package avec yum install
, disons pdftk
, cela entraînera de nombreuses 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
supprimera uniquement ce package 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 puis 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!
À 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 package installé. autoremove
est un alias de remove --setopt=clean_requirements_on_remove=1
mais pour certaines raisons, n'est toujours pas documenté.
J'ai pris des larsks répondre un peu plus loin.
$ package-cleanup -q --leaves | xargs -l1 yum -y remove
Cela récupère toutes les dépendances qui peuvent être supprimées sans affecter quoi que ce soit d'autre, puis les supprime. Mieux vaut alors passer par un par un.
"-q" est utile sur certains systèmes qui affichent "Configuration de yum" dans le cas contraire, provoquant la suppression de yum par cette commande. Et ce n'est pas ce que tu veux.
Dans les Fedoras plus récents avec dnf
, vous pouvez utiliser dnf repoquery --unneeded
en remplacement de package-cleanup --leaves
.