it-swarm-pt.tech

"Os seguintes pacotes foram mantidos:" Por que e como resolvo isso?

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 tenho agora?

829
jfoucher

De acordo com m 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 "mantido de volta".

Solução cautelosa 1:

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

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 cautelosa 2:

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 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 da atualização 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 APT e resolvendo 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 inglesa, você terá alguma tranquilidade lendo e fazendo o reparo sozinho. Se você estiver com sorte, pode deixar seu carro com sua prima dist-upgrade e torcer para que ela conheça suas coisas.

845
Michael Crenshaw

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

The following packages have been kept back:

então para atualizar um ou todos os pacotes mantidos, sem fazer uma atualização de distribuição (isto é o que 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.

488
user88285

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

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

Caso de uso: upgrade do kernel mantido de volta, você só quer atualizar o kernel, não quer atualizar a distribuição inteira.

Melhor maneira de lidar com o pacote de volta:

Sudo aptitude

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

  • Hit + nessa lista
  • Acertar g duas vezes
  • Responda debconf stuff se for perguntado
  • Pressione voltar para continuar
  • Pressione Q
  • Pressione sim

Seu pacote mantido de volta instalado.

173
mudy

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

Sudo apt-get --with-new-pkgs upgrade

Isso permite que novos pacotes sejam instalados. Ele permitirá que você saiba quais pacotes seriam instalados e avisá-lo antes de fazer a instalação.

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

Em vez disso, usar apt install <pkg> marcará pkg como "instalado manualmente" !! Para marcá-lo novamente como "instalado automaticamente" use apt-mark auto <pkg> ( veja também subcomando showmanual). Mais informações nesta resposta .

128
Pablo Bianchi

Normalmente existem dois motivos pelos 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 nesse 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 se oferecerá para remover 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 pacotes são adicionados ao repositório fora de ordem, quando um pacote é renomeado ou quando um pacote para de fornecer um pacote virtual.

32
jbowtie

Você também pode tentar:

Sudo aptitude safe-upgrade.

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

De man aptitude:

upgrade seguro

Atualiza pacotes instalados para sua versão mais recente. Os pacotes instalados não serão removidos, a menos que não sejam usados ​​/.../ Os pacotes que não estiverem instalados no momento podem ser instalados para resolver dependências, a menos que a opção de linha de comando --no-new-installs seja fornecida.

23
Afilu

Muito provavelmente, esses pacotes são 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 usado não está totalmente atualizado.

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

Editar:

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

20
txwikinger

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

Se você correr:

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

Então as novas versões devem ser instaladas junto com sua nova dependência.

9
John Lawrence Aspden

Isso funcionou para mim

Sudo aptitude full-upgrade
8
Singh

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

[email protected]:/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 o atualizou muito 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.

7
Alexander Torstling

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

3
Kazark

No meu caso, os pacotes retidos eram aqueles relacionados a cabeçalhos linux e kernel. Eu cheguei a isso tentando resolver um problema com 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 nem dist-upgrade nem manual apt-get install xxx .

O que eu fiz e ajudei 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 problemas e não vejo mais nenhum pacote retido.

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

Então, talvez isso seja apenas o suficiente ?!

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

3
crysman

Eu corri para este problema usando synaptic porque parecia travar, e para tentar corrigir isso eu reiniciei e tentei novamente.

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

Eu tive que bater "detalhes" e, em seguida, "q" para sair depois de ler a mensagem e, em seguida, as coisas procederam normalmente.

2
Elliptical view

Esta parece ser a maneira correta de reinstalar o pacote mantido de volta:

apt-get install --reinstall libjpeg-progs

Pelo menos, isso funcionou para mim quando o 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 gimpname__.

Fonte: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post1347618

2
Stephan Henningsen

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

1
Johnny

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 eu não poderia 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 por posts já existentes, mas o que devo fazer a seguir? enter image description here

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. enter image description here

Desta forma, acho que pode ajudar mais pessoas novas, porque, tendo outros pacotes, podemos fazer os mesmos passos.

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

0
Vasyl Lyashkevych