Como remover as dependências recomendadas e sugeridas dos pacotes desinstalados?


16

Conheço Como remover as dependências de um pacote desinstalado? e eu tentei

apt-get autoremove

mas isso não remove as dependências recomendadas / sugeridas por outros pacotes.

Ou seja, se eu instalar um pacote X que recomenda Y, mas não instalar Y, e depois instalar o pacote Z que depende de Y.

apt-get remove --auto-remove Z

então Y não será removido automaticamente, mesmo que nada dependa disso. (X "pegou" Y, mesmo que não dependa disso).


11
Você poderia dizer qual é o pacote que faz isso?
Braiam 28/09

Existem muitos exemplos, então tentei extrair a essência do problema na descrição acima. Você está certo que eu também deveria ter incluído um exemplo concreto: considere a instalação do texlive-full. Ele instala muitos pacotes de fontes, sugeridos (mas não exigidos) por muitos pacotes pré-existentes (não me lembro exatamente qual, mas acho que o libreoffice pré-existente, o matplotlib ou a oitava os sugeriam). Portanto, o problema é que "o apt-get install texlive-full" seguido de "apt-get remove --purge --auto-remove texlive-full" não deixa o sistema no mesmo estado original.
user2809402

Respostas:


14

Se você deseja remover os pacotes recomendados do seu sistema, mesmo se ainda houver alguns pacotes instalados recomendando (ou sugerindo), coloque o seguinte no arquivo /etc/apt/apt.conf.d/99_norecommends(crie-o):

APT::Install-Recommends "false";
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

A documentação para essas opções está aqui .

Em seguida, a próxima execução do apt deve remover todos eles. Caso contrário, inicie aptitudee digite ge gnovamente.

Essa configuração também desativa a instalação automática dos pacotes recomendados ao usar apt-get. Para aptitudeisso, na GUI do console, menu Opções> Preferências> "Instalar pacotes recomendados automaticamente" (desmarque).


Eu não recomendaria não instalar recomendações, pois na maioria das vezes são úteis .
Braiam

11
@ Braiam Isso não é o que o OP pediu. Seu comentário é para ele, não para mim.
Totor

Só estou dizendo que isso talvez seja um exagero.
Braiam

@Braiam Esse é o seu ponto de vista. Eu moro muito bem com InstallRecommendsdeficientes. Para o registro, ele foi desativado por padrão até o Debian Squeeze ser lançado, ou seja, desde fevereiro de 2011 (não sei sobre o Ubuntu). Além disso, talvez você não precise da mesma configuração em um servidor ou em uma área de trabalho.
Totor

2
InstallRecommends: Porque por que instalar 5MB de itens que você deseja, quando você também pode instalar 1GB de itens que não deseja?
Mark K Cowan

7

Substituindo opções do APT

Diferentemente das dependências, os pacotes "recomendados" ou "sugeridos" instalados automaticamente podem ser ignorados por apt-get autoremove.

Conforme descrito em outro lugar, esse comportamento do APT pode ser alterado na configuração.

Da mesma forma, a configuração do apt-getcomando pode ser alterada temporariamente através da -oopção de linha de comando.

Isto é, como você forçaria o autoremove a remover os pacotes "recomendados" e "sugeridos" restantes, além das dependências não utilizadas.

sudo apt-get autoremove -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0

Cuidado!

Algumas funcionalidades podem ser perdidas. Esteja preparado para investigar e reinstalar as coisas. Pode ser mais fácil deixar esses pacotes em paz.

Outras opções

Para desinstalar os pacotes 'recomendado' e 'sugerido' apenas para um pacote específico, consulte o log de histórico do apt.


11
para simplesmente analisar esses pacotes, execute uma execução a seco com apt-geta -sopção e grep ^Remvo apt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
canal

1

Na verdade, o comando é:

sudo apt-get autoremove <Z>

Mas isso tem um truque! Se alguma das dependências possui outros pacotes instalados anteriormente que os recomendam / sugerem, o apt não os remove.

Você não especificou o pacote, mas, por exemplo, se eu instalasse o plug-in IcedTea, ele instalaria o Java / OpenJRE por dependências. Se eu os desinstalar usando, sudo apt-get autoremove icedtea-7-pluginvocê notará que ele não removerá o Java / OpenJRE, pois o LibreOffice também sugere os pacotes.

Portanto, para removê-los, você deve ser excessivamente específico sobre o pacote que deseja desinstalar que normalmente autoremovenão:

sudo apt-get autoremove <Z> <dependency of Z>

Dessa forma, você pode ter certeza de que seu pacote será removido.

Você também pode usar o deborphan para remover algumas dependências.


11
A propósito, meu entendimento da página de manual do apt é que o autoremove não espera um nome de pacote e simplesmente limpa todas as dependências desnecessárias de pacotes no sistema. Então você teria que executar 2 etapas: "apt-get remove Z" seguido de "apt-get autoremove". Essas duas etapas podem ser executadas de uma só vez com "apt-get remove --auto-remove Z", conforme mencionado na minha pergunta original. Mas, como eu disse, o problema é que existem alguns pacotes que não são removidos se forem sugeridos por outra coisa.
user2809402

11
Sim, você descreveu meu problema perfeitamente. Obrigado. Mas, infelizmente, você não o resolveu, porque eu não quero ir para /var/log/apt/history.log e procurar todos os pacotes Y que foram instalados há alguns meses com Z (no seu exemplo, Y = java / jre, Z = plugin do icedtea) e adicione manualmente todos eles à linha de comando do apt. Quero especificar apenas Z e o restante das dependências a serem captadas automaticamente, mesmo que sejam sugeridas por outro pacote existente X (X = libreoffice no seu exemplo).
user2809402

11
Infelizmente, é assim que o sistema apt funciona; ele prefere manter os pacotes instalados, em vez de removê-los, mesmo que não sejam mais necessários. A única maneira de removê-los é manualmente ou com deborphanmas o deborphan pode perder alguns pacotes ainda. Você pode usar as Debug::opções e também verificar minha outra resposta sobre isso . Você também pode usar o --no-install-recommends, mas o apt-get não instala pacotes sugeridos por padrão.
Braiam

@ user2809402 você também deve verificar askubuntu.com/q/244470/169736
Braiam

Braiam- Obrigado pelo ponteiro deborphan. Vou dar uma olhada.
user2809402

-1

Certo, se você deseja remover o pacote <Z>com dependências, digite:

sudo apt-get autoremove --purge <Z>

3
Obrigado, mas infelizmente, adicionar "--purge" simplesmente remove as configurações de pacotes removidos com "autoremove". Mas, tanto quanto posso ver, isso não altera a decisão sobre quais pacotes remover. Ou seja, as dependências de Z sugeridas por algum pacote pré-existente X ainda não são removidas, independentemente de eu especificar "--purge".
user2809402

11
Além disso, autoremovefunciona em todo o sistema. Portanto, sempre que você ligar autoremove, ele removerá todos os pacotes não utilizados no seu sistema. A instalação de um pacote autoremovingnormalmente não retornará o sistema ao mesmo estado e deixará vários pacotes "restantes".
Rolf
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.