¿Cómo puedo eliminar los paquetes huérfanos en Fedora?


42

Acabo de cambiar de Ubuntu a Fedora14. En Ubuntu teníamos apt-get autoremoveque eliminar los paquetes huérfanos / no utilizados. ¿Cuál es la contraparte en Fedora?

Respuestas:


36

package-cleanup --quiet --leavesdel paquete yum-utils enumerará los paquetes de la biblioteca en los que otros paquetes no confían. Lamentablemente, tiende a ser un poco ansioso. En mi sistema, por ejemplo, sugirió eliminar libvirt. Agregar el --exclude-binargumento ayuda. Si está satisfecho con su sugerencia, para limpiar los paquetes, haga lo siguiente:

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

1
Probado después de instalar y quitar netbeans-platformy la limpieza del paquete enumera algunas cosas, pero en realidad ninguna de las netbeans-platformdependencias previamente instaladas (usando Fedora 17).
maxschlepzig

2
No funciona, como señaló @maxschlepzig
c0da

30

DNF, el reemplazo de yum desde Fedora 22, también proporciona un autoremovesubcomando que se modela después de apt-get / yum autoremove.

Ejemplos:

# dnf autoremove

que intenta eliminar todos los paquetes de dependencia instalados automáticamente y no utilizados de otra manera, debería ser bastante equivalente a apt-get autoremove.

# dnf autoremove examplepackage

que elimina el paquete de ejemplo y todas sus dependencias instaladas automáticamente (y de otro modo no utilizadas).

Ñam

Yum tiene el comando autoremove desde Fedora 19, y está documentado desde Fedora 20 / RHEL 7.

El uso es análogo a la implementación de dnf, por ejemplo:

# yum autoremove

o

# yum autoremove examplepackage

Cambiar el comportamiento de yum elimina

Yum admite una opción de configuración para cambiar el comportamiento predeterminado del removesubcomando (por ejemplo, a través de /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

Cuando esto se establece, el siguiente yum removetambién intenta eliminar las dependencias instaladas automáticamente si otros paquetes no las necesitan.

También puede probar temporalmente esta opción mediante algo como:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

Solución para la versión anterior de Fedora

(Para las versiones de Fedora donde el subcomando yum autoremove no está disponible y / o clean_requirements_on_removeno funciona).

Aunque durante la instalación de paquetes, las dependencias instaladas se marcan como tales (parece ser una característica relativamente nueva de rpm / yum).

Puede encontrar dependencias innecesarias a través de:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

Esta línea de comando está inspirada en el script de fenris02 .

Después de la inspección tmp(y tal vez de la curación), puede eliminarlos mediante algo como esto:

# xargs yum remove < tmp

Dio el error "Inválido yumdb querytag 'razón' para el paquete instalado: adobe-release-x86_64-1.0-1.noarch". ¿Qué es esto ahora?
c0da

@ c0da, supongo que la característica que yum registra en su base de datos el 'motivo' de instalación (por ejemplo, 'dep' o 'usuario') para cada paquete es relativamente nueva. Tal vez su instancia de Fedora sea anterior a la introducción de esa característica de modo que todavía tenga (algunos) paquetes antiguos instalados sin ese conjunto de etiquetas.
maxschlepzig

Instalé Fedora 18 hace unos días. Así que creo que la etiqueta requerida debería estar allí.
c0da

1
@ c0da, quizás la 'razón' no se registró porque ha instalado el paquete a adobe-releasetravés deyum localinstall
maxschlepzig

16

necesita instalar el complemento yum "remove-with-leaves":

# yum install yum-plugin-remove-with-leaves.noarch

una vez instalado:

# yum remove --remove-leaves package

¡buena suerte!


3
y cómo ejecutarlo para todas las aplicaciones instaladas?
cnd


1
RHEL / CentOS / Oracle Linux 6 necesita el yum-plugin-remove-with-leaves.noarchpaquete instalado para usarpackage-cleanup
Terry Wang

8
# package-cleanup --orphans >/tmp/junk

edite el /tmp/junkarchivo y elimine la primera línea que es informativa de la línea de comando ingrese lo siguiente:

for file in `cat /tmp/junk`
do
  yum remove $file
done

1
package-cleanup (1) dice: '--orphans Lista los paquetes instalados que no están disponibles en los repositorios configurados actualmente'. Esto no es equivalente a lo que apt-get autoremovehace. apt-get (8) dice: 'autoremove se usa para eliminar paquetes que se instalaron automáticamente para satisfacer las dependencias de algunos paquetes y que ya no son necesarios'.
maxschlepzig

1
No funciona Debo haberme equivocado anteriormente. Gracias @maxschlepzig
c0da

Esto solía funcionar para mí, pero en CentOS 6.6 en realidad enumera todos los paquetes instalados, no solo los huérfanos.
Gaia

4

NOTA: Esta respuesta es correcta, pero solo se aplica a RHEL 7+ y Fedora 20+ (donde se ha agregado la eliminación automática como una nueva función).

# yum autoremove

Simplemente confirme para eliminar los paquetes seleccionados.


0

Sobre la base de la respuesta de Larry Mohr :

package-cleanup --orphans | sed '1d' | sed '/^ * /d' | sed '/Loading mirror speeds from cached hostfile/d' | xargs sudo yum remove

(Incluye omitir el espejo más rápido, si se lo pregunta).


0

¡En Fedora, el paquete huérfano significa que no hay repositorios candidatos para que se actualice!

  1. Si los paquetes huérfanos fueron generados por usted, desactive yum.repos.d / some.conf.

    yum distro-sync
    
  2. Otros paquetes huérfanos, el comando puede ser peligroso.

    yum remove $(package-cleanup --orphans)
    

    o simplemente use el comando de seguridad.

    yum remove name-of-page
    

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.