“Os seguintes pacotes foram mantidos:” Por que e como resolvo?

725

Acabei de adicionar um repositório PPA para a versão de desenvolvimento do GIMP, mas recebo este erro:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

Por que e como posso resolvê-lo para que eu possa usar a versão mais recente em vez da que eu tenho agora?

    
por jfoucher 31.07.2010 / 23:59

16 respostas

710

De acordo com um artigo sobre debian-administration.org ,

  

Se as dependências foram alteradas em um dos pacotes que você instalou para que um novo pacote seja instalado para executar o upgrade, ele será listado como "keep-back".

Solução cautelosa 1:

A solução cautelosa é executar sudo apt-get install <list of packages kept back> . Na maioria dos casos, isso dará aos pacotes mantidos de volta o que eles precisam para atualizar com sucesso.

Solução cautelosa 2:

Por a resposta de Pablo , você pode executar sudo apt-get --with-new-pkgs upgrade , e ele irá instalar os pacotes mantidos de volta.

Isso tem a vantagem de não marcar os pacotes mantidos como "instalados manualmente", o que poderia forçar mais a intervenção do usuário no final da linha (ver comentários).

Se a solução de Pablo funcionar para você, por favor, faça um upvote. Se não, por favor, comente o que deu errado.

Solução agressiva:

Uma solução mais agressiva é executar sudo apt-get dist-upgrade , o que forçará a instalação dessas novas dependências.

Mas dist-upgrade pode ser bastante perigoso . Ao contrário do upgrade , ele pode remover pacotes para resolver situações complexas de dependência. Ao contrário de você, o APT nem sempre é inteligente o suficiente para saber se essas adições e remoções podem causar estragos.

Então, se você se encontrar em um lugar onde a "solução cautelosa" não funciona, dist-upgrade pode funcionar ... mas provavelmente é melhor você aprender um pouco mais sobre o APT e resolver os problemas de dependência "manualmente" instalando e removendo pacotes caso a caso.

Pense nisso como consertar um carro ... se você tiver tempo e for útil com uma chave, você terá alguma tranquilidade lendo e fazendo o reparo sozinho. Se você estiver com sorte, pode deixar o seu carro com a prima dist-upgrade e esperar que ela conheça as coisas dela.

    
por mac9416 01.08.2010 / 00:15
469

Sempre que você receber do comando apt-get upgrade a mensagem

The following packages have been kept back:

em seguida, para atualizar um ou todos os pacotes mantidos, sem fazer uma atualização de distribuição (isso é o que o dist-upgrade faz, se bem me lembro) é emitir o comando:

apt-get install <list of packages kept back>

isso resolverá os problemas mantidos e solicitará a instalação de pacotes adicionais etc., conforme explicado por outras respostas.

    
por user88285 08.09.2012 / 11:14
170

apt-get dist-upgrade é perigoso para ambientes estáveis,

  1. configuração errada de source.list e você acaba com o ubuntu quebrado.
  2. você pode ter o aplicativo inteiro atualizado para a versão que você não deseja.

Caso de uso: atualização do kernel mantida para trás, você só quer atualizar o kernel, não quer atualizar a distribuição inteira.

Melhor maneira de lidar com o pacote guardado:

sudo aptitude

Se você guardou o pacote, deverá ver os Pacotes Atualizáveis no topo da lista.

  • Hit + nessa lista
  • Pressione g duas vezes
  • Responda as coisas do debconf se for solicitado
  • Pressione voltar para continuar
  • Pressione Q
  • Pressione sim

Seu pacote mantido de volta instalado.

    
por mudy 24.12.2010 / 01:43
64

Por que você não tenta esta resposta do Unix SE :

sudo apt-get --with-new-pkgs upgrade
  

Isso permite que novos pacotes sejam instalados. Ele permitirá que você saiba quais pacotes serão instalados e solicitará que você faça a instalação.

apt command ( alternativa amigável para apt-get ) compartilhar esta opção apt-get .

Usar apt install <pkg> marcará o pkg como "instalado manualmente" !! Para marcá-lo novamente como "instalado automaticamente" use apt-mark auto <pkg> (veja também o subcomando showmanual ). Mais informações sobre esta resposta >.

    
por Pablo Bianchi 20.12.2016 / 21:16
30

Normalmente, existem duas razões pelas quais você pode ver esta mensagem.

Se a atualização do programa (via sudo apt-get upgrade ) fizer com que os pacotes sejam adicionados ou removidos, o programa será retido. Você pode usar sudo apt-get dist-upgrade neste caso, que oferecerá para adicionar ou remover os programas adicionais.

Isso é muito comum e geralmente não é um problema. Ocasionalmente (particularmente durante um alpha do Ubuntu), um dist-upgrade oferecerá a remoção de muitos outros programas, caso em que você provavelmente desejará cancelá-lo.

Se o programa depender de pacotes ou versões que não estão disponíveis, o programa será retido. Você realmente não pode fazer nada além de esperar nesta circunstância, já que o pacote é basicamente desinstalável. Isso pode acontecer quando os pacotes são adicionados ao repositório fora de ordem, quando um pacote é renomeado ou quando um pacote para de fornecer um pacote virtual.

    
por jbowtie 01.08.2010 / 00:16
18

O mais provável é que esses pacotes sejam retidos porque a instalação deles criaria inconsistências de dependência. Isso pode acontecer porque você está usando arquivos em desenvolvimento ativo, ppas ou porque o espelho que você usa não está totalmente atualizado.

No último caso, apenas espere, quando as dependências forem resolvidas, ele será instalado da próxima vez.

Editar:

Existe outra possibilidade, os pacotes podem ser retidos se forem colocados em espera ou se forem fixados.

    
por txwikinger 01.08.2010 / 00:17
18

Você também pode tentar:

sudo aptitude safe-upgrade .

É mais seguro que full-upgrade (originalmente chamado de dist-upgrade) porque "os pacotes não serão removidos a menos que não sejam usados".

De man aptitude :

  

upgrade seguro

     

Atualiza os pacotes instalados para sua versão mais recente. Instalado   pacotes não serão removidos a menos que não sejam usados /.../ Packages   que não estão atualmente instalados podem ser instalados para resolver   dependências, a menos que a opção da linha de comandos --no-new-installs seja   fornecido.

    
por Afilu 12.08.2014 / 10:02
9

Geralmente, isso ocorre porque o pacote adicionou uma dependência e a atualização não deseja adicioná-lo a você sem permissão.

Se você executar:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

Em seguida, as novas versões devem ser instaladas junto com sua nova dependência.

    
por John Lawrence Aspden 27.12.2012 / 20:20
7

Eu descobri que o aptitude faz um trabalho melhor na atualização de pacotes se as versões diferirem apenas ligeiramente. Eu tive uma situação assim:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

Isso fez com que o apt-get retivesse a atualização, mas o aptitude a atualizou bem. Não tenho certeza de qual algoritmo é usado para determinar se um pacote deve ser atualizado ou não. Eu acho que esses dois tinham a mesma versão, apenas um 'qualificador' diferente. Mas em qualquer caso, o apt-get não atualizaria, mas o aptitude o faria.

    
por Alexander Torstling 02.05.2012 / 22:48
7

Isso funcionou para mim

sudo aptitude full-upgrade
    
por Singh 22.03.2013 / 12:40
3

Eu corri para este problema quando um novo kernel foi lançado. (Possivelmente porque eu tenho atualizações instáveis habilitadas.) Eu encontrei a maneira mais simples de fazer a instalação foi através do instalador gráfico do Ubuntu ( update-manager ).

    
por Kazark 16.11.2011 / 21:07
3

No meu caso, os pacotes retidos eram aqueles relacionados a linux-headers e kernel. Eu cheguei a isso tentando resolver um problema em ter um ponto de exclamação vermelho na área de notificação e não poder atualizar pacotes.

Para resolvê-lo, eu não precisei usar dist-upgrade nem manual apt-get install xxx .

O que eu fiz e ajudou foi simples e limpo :

sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade

Eu tive que confirmar manualmente a atualização do Grub e sua configuração.

Então eu apenas trabalhei com o computador por um tempo e, em seguida, o diálogo de atualização padrão apareceu novamente incluindo a seção "base do Ubuntu" com o kernel e os relacionados. A atualização foi realizada sem nenhum problema e não vejo mais nenhum pacote retido.

Além disso, é muito importante ter em mente que essas atualizações do * buntu incluindo atualizações do kernel são sensíveis à hibernação - Eu tenho esse problema várias vezes e sempre resolvo reiniciando o problema. máquina e executando as etapas acima.

Então, talvez isso seja suficiente?

(a situação descrita aqui está relacionada ao meu Xubuntu 15.10 no final de dezembro de 2015)

    
por crysman 29.12.2015 / 15:01
2

Eu encontrei este problema usando o synaptic porque ele pareceu travar, e para tentar corrigir isso eu reiniciei e tentei novamente.

Então descobri uma mensagem informativa como parte do pacote com algumas instruções de pós-instalação para mim.

Tive de clicar em " detalhes " e, em seguida, em " q " para sair depois de ler a mensagem e, em seguida, as coisas prosseguiram normalmente.

    
por Eliptical view 03.08.2016 / 08:41
2

Esta parece ser a maneira correta de reinstalar o pacote guardado:

apt-get install --reinstall libjpeg-progs

Pelo menos, isso funcionou para mim quando libjpeg-progs ficou preso após a atualização do Ubuntu 14.04 para o 16.04. Tenho certeza de que você pode fazer o mesmo com qualquer outro aplicativo, por exemplo gimp .

Fonte: link

    
por Stephan Henningsen 29.08.2016 / 08:58
1

Na verdade, a opção de que você precisa é dselect-upgrade , que instala / remove as dependências do conjunto de pacotes específico envolvido.

    
por Johnny 29.02.2012 / 09:52
0

Eu li todos os posts e descobri que existem muitas explicações interessantes. Eu estava tentando todos eles, mas não tenho nenhum resultado completamente. Eu tenho um problema com mysql-utilities que não consegui atualizar. A atualização foi proposta pelo sistema.  Então, quero mostrar alguns passos para fazer isso. Claro, vou repetir em alguns momentos todos os posts acima mencionados. Aqui está o meu erro, sim eu achei pelos posts já existentes, mas o que devo fazer a seguir?

O próximo passo é:

sudo apt-get --purge remove mysql-utilities

Os resultados que podemos ver na imagem abaixo. Eu removo o pacote e verifico pelo comando:

sudo apt-get -f install

Resultados - tudo bem! Mais tarde eu instalei esta nova versão do pacote corretamente.

Dessa forma, acho que podemos ajudar mais pessoas novas, pois, tendo outros pacotes, podemos realizar as mesmas etapas.

Uma vez, desculpe, quando repeti em alguns lugares outros posts.

    
por Vasyl Lyashkevych 26.12.2017 / 00:59