Remova pacotes não utilizados

63

Eu instalei algum pacote rpm no meu Fedora 17. Alguns pacotes tinham muitas dependências. Eu removi alguns pacotes, mas esqueci de remover dependências não utilizadas com o yum remove.

Como posso fazer isso agora?

Raphael Ahrens
fonte
Você já viu a página de yummanual: linux.die.net/man/8/yum ?
Linuxios 6/06/12
11
duplicado de: unix.stackexchange.com/questions/23330/…
maxschlepzig

Respostas:

39

Não é fácil. Como você diferencia entre "um arquivo que foi requerido por algo que removi desde então" de "um arquivo que não é requerido por mais nada que eu realmente queira"?

Você pode usar o package-cleanupcomando do yum-utilspacote para listar "nós da folha" no gráfico de dependência do pacote. Estes são os pacotes que podem ser removidos sem afetar mais nada:

$ package-cleanup --leaves

Isso produzirá uma lista de "bibliotecas" das quais nada mais depende. Na maioria dos casos, você pode remover com segurança esses pacotes. Se você adicionar --allà linha de comando:

$ package-cleanup --leaves --all

Você também receberá pacotes que não são considerados bibliotecas, mas essa lista será tão longa que provavelmente não será útil.

larsks
fonte
9
O APT (o equivalente Debian do Yum) tem uma noção de "pacote instalado automaticamente". Se um pacote não foi solicitado explicitamente, mas apenas recebido como uma dependência, ele será removido automaticamente (com um prompt de confirmação) se todos os pacotes que dependem dele forem removidos. Sem uma indicação desse tipo, na verdade não é fácil.
Gilles 'SO- stop be evil'
101

Se você instalar um pacote com yum install, digamos pdftk, ele puxará muitas dependências:

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 removerá apenas esse pacote e nem todas as dependências.

Mas você pode olhar para todas as 'transações' (instalar, remover 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   

E então você pode desfazer essa transação:

$ 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!
Sua mãe
fonte
14
Uma solução impressionante e muito fácil de fazer. Eu nunca ouvi falar yum history. Obrigado!
Stefan Lasiewski
8
E se 89 depender de java_cup ou libgcj?
WernerCD
2
Isso não deveria ser uma resposta aceita?
Celdor 07/03
62

A partir do Fedora 18, você pode simplesmente usar este comando

yum autoremove

ou

yum remove --setopt=clean_requirements_on_remove=1

Você também pode aplicar o comando autoremove com pacote específico

yum autoremove <package>

O que removerá dependências desnecessárias desse pacote instalado. autoremoveé muito um alias de, remove --setopt=clean_requirements_on_remove=1mas por algumas razões, ainda não está documentado.

Finalzone
fonte
5
comando yum remove --setopt=clean_requirements_on_remove=1funciona para mim no centOS
BMW
Para mim, os package-cleanup --leaves && yum autoremovelibvorbis removidos e, assim, fizeram com que o aplicativo "Ices" de streaming de rádio na Internet morresse - provavelmente porque não está em repositórios e eu tive que compilá-lo.
Nakilon
O comando também yum autoremovefunciona no CentOS 7.6.
scrutari
yum autoremove falha ao remover 4 kernels antigos no CentOS 7
user1133275
6

Eu levei os larsks a dar um passo adiante.

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

Isso agarra todas as dependências que podem ser removidas sem afetar mais nada e as remove. Melhor do que passar por um por um.

"-q" é útil em alguns sistemas que imprimem "Configurando o yum", caso contrário, fazendo com que este comando remova o yum. E não é isso que você quer.

jtoscarson
fonte
2
package-cleanupproduz "Configurando o yum" na minha máquina, o que resultou na remoção do Yum. Agora estou tentando descobrir como resolver isso.
Paul Lammertsma
@PaulLammertsma basta adicionar uma -qopção à limpeza de pacotes. Isso aconteceu comigo também: D
Ealhad
11
package-cleanup -q --leaves | xargs -r -l1 yum -y removesilenciosamente ignorar xargs se a saída pacote-limpeza está vazio, útil para scripts automatizados como ansible, cozinheiro chefe, fantoche, vagabundo
Ilya Sheershoff
Esta é a resposta.
xCovelus
1

Nos Fedoras mais recentes com dnf, você pode usar dnf repoquery --unneededcomo um substituto para package-cleanup --leaves.

Thomas Ahle
fonte