Como posso remover pacotes órfãos no Fedora?

42

Acabei de mudar do Ubuntu para o Fedora14. No Ubuntu, apt-get autoremoveconseguimos remover pacotes órfãos / não utilizados. Qual é a contrapartida no Fedora?

c0da
fonte

Respostas:

36

package-cleanup --quiet --leavesdo pacote yum-utils listará os pacotes da biblioteca que não são confiáveis ​​por outros pacotes. Infelizmente, tende a ser um pouco exagerado. No meu sistema, por exemplo, sugeriu a remoção da libvirt. Adicionar o --exclude-binargumento ajuda. Se você estiver satisfeito com a sugestão, limpe os pacotes:

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

fonte
1
O teste após a instalação, remoção netbeans-platforme limpeza de pacotes lista algumas coisas, mas na verdade nenhuma das netbeans-platformdependências instaladas anteriormente (usando o Fedora 17).
maxschlepzig
2
Não funciona, como apontado por @maxschlepzig
c0da
30

O DNF, o yum substituto desde o Fedora 22, também fornece um autoremovesubcomando que é modelado após o apt-get / yum autoremove.

Exemplos:

# dnf autoremove

que tenta remover todos os pacotes de dependências instalados automaticamente e não utilizados - deve ser praticamente equivalente a apt-get autoremove.

# dnf autoremove examplepackage

que remove o pacote de exemplo e todas as suas dependências instaladas automaticamente (e não utilizadas).

Yum

O Yum possui o comando autoremove desde o Fedora 19 e está documentado desde o Fedora 20 / RHEL 7.

O uso é análogo à implementação dnf, por exemplo:

# yum autoremove

ou

# yum autoremove examplepackage

Alterar o comportamento de yum remove

O Yum suporta uma opção de configuração para alterar o comportamento padrão do removesubcomando (por exemplo, via /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

Quando isso estiver definido, o próximo yum removetambém tentará remover as dependências instaladas automaticamente se elas não forem necessárias por outros pacotes.

Você também pode testar temporariamente esta opção através de algo como:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

Solução alternativa para a versão antiga do Fedora

(Para versões do Fedora em que o subcomando yum autoremove não está disponível e / ou clean_requirements_on_removenão funciona.)

Embora durante a instalação dos pacotes, as dependências instaladas sejam marcadas como tal (parece ser um recurso relativamente novo do rpm / yum).

Você pode encontrar dependências desnecessárias em:

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

Esta linha de comando é inspirada no script de fenris02 .

Após a inspeção tmp(e talvez a curadoria), você pode removê-los através de algo como isto:

# xargs yum remove < tmp
maxschlepzig
fonte
Ele deu o erro "Invalid yumdb querytag 'reason' para o pkg instalado: adobe-release-x86_64-1.0-1.noarch". O que é isso agora?
C0da
@ c0da, acho que o recurso que o yum registra em seu banco de dados o 'motivo' da instalação (por exemplo, 'dep' ou 'usuário') para cada pacote é relativamente novo. Talvez sua instância do Fedora seja anterior à introdução desse recurso, de forma que você ainda tenha (alguns) pacotes antigos instalados sem esse conjunto de tags.
maxschlepzig
Eu instalei o Fedora 18 alguns dias atrás. Então, acho que a tag necessária deve estar lá.
C0da
1
@ c0da, talvez a 'razão' não foi registrada porque você instalou o pacote adobe-releaseviayum localinstall
maxschlepzig
16

você precisa instalar o plugin yum "remove-with-leaves":

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

uma vez instalado:

# yum remove --remove-leaves package

boa sorte!

mrc
fonte
3
e como executá-lo para todos os aplicativos instalados?
CND
Não parece ser muito confiável, bem como: skvidal.wordpress.com/2010/11/09/orphaned-dep-cleanup-in-yum
maxschlepzig
1
RHEL / CentOS / Oracle Linux 6 precisa do yum-plugin-remove-with-leaves.noarchpacote instalado para usopackage-cleanup
Terry Wang
8
# package-cleanup --orphans >/tmp/junk

edite o /tmp/junkarquivo e remova a primeira linha informativa da linha de comando e digite o seguinte:

for file in `cat /tmp/junk`
do
  yum remove $file
done
Larry Mohr
fonte
1
package-cleanup (1) diz: '--orphans Lista os pacotes instalados que não estão disponíveis nos repositórios configurados no momento.' Isso não é equivalente ao que apt-get autoremovefaz. O apt-get (8) diz: 'autoremove é usado para remover pacotes que foram instalados automaticamente para satisfazer dependências de alguns pacotes e que não são mais necessários.'
maxschlepzig
1
Não funciona! Eu devo ter me enganado anteriormente. Obrigado @maxschlepzig
c0da
Isso costumava funcionar para mim, mas no CentOS 6.6, na verdade, lista todos os pacotes instalados, não apenas os órfãos.
Gaia
4

NOTA: Esta resposta está correta, mas se aplica apenas ao RHEL 7+ e Fedora 20+ (onde o autoremove foi adicionado como um novo recurso).

# yum autoremove

Apenas confirme para remover os pacotes selecionados.

Chilly Milly
fonte
0

Com base na resposta de Larry Mohr :

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

(Inclui pular para o espelho mais rápido, se você se perguntar.)

Bengt
fonte
0

No Fedora, o pacote órfão significa que nenhum candidato é reposicionado para atualizar!

  1. Se os pacotes órfãos foram gerados por você, desative yum.repos.d / some.conf.

    yum distro-sync
    
  2. Outros pacotes órfãos, o comando pode ser perigoso.

    yum remove $(package-cleanup --orphans)
    

    ou, apenas use o comando de segurança.

    yum remove name-of-page
    
firo
fonte