Eliminar paquetes no utilizados

Respuestas:

39

No es fácil. ¿Cómo se diferencia entre "un archivo que fue requerido por algo que eliminé" de "un archivo que no es requerido por otra cosa que realmente quiero"?

Puede usar el package-cleanupcomando del yum-utilspaquete para enumerar los "nodos hoja" en el gráfico de dependencia del paquete. Estos son paquetes que se pueden eliminar sin afectar nada más:

$ package-cleanup --leaves

Esto producirá una lista de "bibliotecas" de las cuales nada más depende. En la mayoría de los casos, puede eliminar estos paquetes de forma segura. Si agrega --alla la línea de comando:

$ package-cleanup --leaves --all

También obtendrá paquetes que no se consideran bibliotecas, pero esta lista será tan larga que probablemente no será útil.

larsks
fuente
99
APT (el equivalente Debian de Yum) tiene la noción de "paquete instalado automáticamente". Si un paquete no se solicitó explícitamente, pero solo se introdujo como una dependencia, se eliminará automáticamente (con un mensaje de confirmación) si todos los paquetes que dependen de él se eliminan. Sin una indicación de este tipo, de hecho no es fácil.
Gilles 'SO- deja de ser malvado'
101

Si instala un paquete con yum install, digamos pdftk, atraerá muchas dependencias:

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 eliminará solo ese paquete y no todas las dependencias.

Pero puede ver todas las 'transacciones' (instalar, eliminar, 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   

Y luego puedes deshacer esa transacción:

$ 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!
Tu mamá
fuente
14
+1 Solución impresionante y muy fácil de hacer. Nunca he oído hablar de yum history. ¡Gracias!
Stefan Lasiewski
8
¿Y si 89 depende de java_cup o libgcj?
WernerCD
2
¿No debería ser esta una respuesta aceptada?
Celdor
62

A partir de Fedora 18, simplemente puede usar este comando

yum autoremove

o

yum remove --setopt=clean_requirements_on_remove=1

También puede aplicar el comando autoremove con un paquete específico

yum autoremove <package>

Lo que eliminará las dependencias innecesarias de ese paquete instalado. autoremovees un alias de, remove --setopt=clean_requirements_on_remove=1pero por alguna razón, todavía no está documentado.

Zona final
fuente
55
comando yum remove --setopt=clean_requirements_on_remove=1funciona para mí en centOS
BMW
Para mí, la package-cleanup --leaves && yum autoremovelibvorbis eliminada hizo que la aplicación "Ices" de transmisión de radio por Internet muriera, probablemente porque no está en repos y tuve que compilarla.
Nakilon
El comando también yum autoremovefunciona en CentOS 7.6.
scrutari
yum autoremove no puede eliminar 4 núcleos antiguos en CentOS 7
user1133275
6

Tomé larsks respuesta un paso más allá.

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

Esto toma todas las dependencias que se pueden eliminar sin afectar nada más y luego las elimina. Mejor que pasar uno por uno.

"-q" es útil en algunos sistemas que imprimen "Configuración de yum", de lo contrario, este comando elimina yum. Y eso no es lo que quieres.

jtoscarson
fuente
2
package-cleanupgenera "Configuración de yum" en mi máquina, lo que provocó que Yum se eliminara. Ahora estoy tratando de descubrir cómo resolver esto.
Paul Lammertsma
@PaulLammertsma solo agrega la -qopción a la limpieza del paquete. Esto también me pasó a mí: D
Ealhad
1
package-cleanup -q --leaves | xargs -r -l1 yum -y removeomitirá xargs en silencio si la salida de limpieza del paquete está vacía, útil para scripts automatizados como ansible, chef, puppet, vagabundo
Ilya Sheershoff
esta es la respuesta.
xCovelus
1

En Fedoras más nuevas con dnf, puede usar dnf repoquery --unneededcomo reemplazo para package-cleanup --leaves.

Thomas Ahle
fuente