Questão “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 última versão em vez da que tenho agora?


720
2017-07-31 21:59


origem


Estritamente falando, eu diria que é um aviso, não um erro. - Kazark


Respostas:


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 "mantido de volta".

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 correr sudo apt-get --with-new-pkgs upgrade, e instalará os pacotes mantidos para trás.

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 é rodar sudo apt-get dist-upgrade, o que forçará a instalação dessas novas dependências.

Mas dist-upgrade  pode ser muito perigoso. Ao contrário de upgrade 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 encontra em um lugar onde a "solução cautelosa" não funciona, dist-upgrade  pode trabalho ... 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 seu carro com seu primo dist-upgrade e espero que ela saiba as coisas dela.


704
2017-07-31 22:15



Como essa é uma resposta aceita, ela precisa ser atualizada para avisar sobre o uso dist-upgrade em um sistema estável como muitas das outras respostas abaixo apontaram. Pessoalmente, acho que há uma resposta mais simples / segura que precisa ser promovida: apt-get install <lista de pkgs> - Cas
Cas, devo acrescentar que pode ser perigoso executar um dist-upgrade em um sistema estável? Por que exatamente isso é perigoso? (Eu honestamente não sei tudo isso bem.) - mac9416
Existe um Resposta de falha do servidor Isso explica dist-upgrade em um pouco mais de detalhes. Eu acho que vale a pena esclarecer (não é perigoso como tal) que pode atualizar todo o sistema que pode estar além do que o usuário espera / quer, ou seja, no exemplo do OP eles estão se perguntando por que o gimp está sendo retido. - Cas
Por favor note que sudo apt-get dist-upgrade também pode remover pacotes. Consequentemente, é sempre melhor inspecionar a lista de alterações que serão feitas antes de concordar com elas, ao executar sudo apt-get dist-upgrade. - Eliah Kagan
@ EliahKagan Posso acrescentar que mesmo apt-get upgrade pode remover pacotes? Sempre fará isso quando houver um conflito de versões. Imagine llvm3.6 vs. llvm3.6v5 (com o "v5" significa que foi compilado com gcc 5). Estes dois não pode coexistir, apenas um dos dois pode ser mantido no sistema. Então sim dist-upgrade pode remover alguns pacotes também, mas não é só dist-upgrade isso faria isto; Sob certas circunstâncias, upgrade também. - syntaxerror


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

The following packages have been kept back:

então atualizar um ou todos os pacotes mantidos, sem fazer um upgrade de distribuição (é isso 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.


468
2017-09-08 09:14



Quando os pacotes são mantidos para trás dessa maneira e eu manualmente apt-get upgrade <list of packages>, se eu refazer apt-get upgrade, listará os pacotes em questão como não mais necessários e que eu posso usar apt autoremove para removê-los, o que eu faço e, em seguida, um último apt-get upgrade e eles não são mais listados como mantidos para trás ... Muito estranho. Alguma ideia? - cram2208
Faz apt-get install também remover pacotes quando necessário para resolver situações de dependência deformadas, ou você teria que executar um separado apt-get remove comando para realizar essa parte do processo de atualização? - mac9416
@ cram2208 Eu acredito que é o comportamento esperado. Os pacotes que foram "instalados [...] automaticamente e não são mais necessários" são as versões anteriores dos pacotes atualizados, que agora não são mais necessários. apt autoremove Em seguida, remove essas dependências não utilizadas. - Alex
Se a atualização exigir que um novo pacote seja instalado, o pacote será "retido". Primeiro considere usar: sudo apt-get --with-new-pkgs upgrade qual seria não tem efeitos colaterais de fazer com que os pacotes sejam marcados como instalados manualmente - l --marc l
@ mac9416 sim faz. - jarno


apt-get dist-upgrade é perigoso para ambiente estável,

  1. configuração errada source.list e você acaba com o Ubuntu quebrado.
  2. você pode obter todo o aplicativo 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 guardado:

sudo aptitude

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

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

Seu pacote mantido de volta instalado.


170
2017-12-24 00:43



apt-get dist-upgrade só é perigoso se você tiver repositórios ruins /etc/apt/sources.list*. É bom estar ciente de que dist-upgrade Atualizações todos pacotes, mas com os repositórios padrão, que devem estar bem. Não usando dist-upgrade pode ser perigoso, pois você pode perder atualizações de segurança. - Flimm
apt-get dist-upgrade posso remover bem como adicionar pacotes, mas não é realmente perigoso. Qualquer comando de instalação do pacote pode causar sérios danos se você tiver problemas em seu sources.list Arquivo! Um regular apt-get upgrade comando irá instalar qualquer pacote de qualquer fonte de software que esteja habilitado; dist-upgrade não é único desta maneira. Além disso, usando aptitude para executar qualquer operação, pelo menos na amd64, é muito mais perigoso do que correr apt-get dist-upgrade, em um lançamento onde bug 831768 não é fixo - Eliah Kagan
Para mim, era mais fácil (máquina local com X rodando) apenas abrir o synaptic e forçar a atualização do pacote. Por alguma razão, não parece aparecer em todos os lugares que você descreveu no sináptico. - djvs
Além disso sudo aptitude safe-upgrade - msanford


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) compartilhar esta apt-get opção.

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


60
2017-12-20 20:16



+1 porque não tem efeitos colaterais de fazer com que os pacotes sejam marcados como instalados manualmente. - ctrl-alt-delor
Nota para quem já leu meu comentário acima: não ter o efeito colateral de marcar como instalado manualmente é uma coisa boa. Eu gosto dessa resposta. - ctrl-alt-delor
Então, se você usar sudo apt-get --with-new-pkgs upgrade  sem corrida apt-mark auto <pkg>tudo ficará bem? O segundo comando é necessário apenas se você Faz optar por instalar manualmente os pacotes retidos? - mac9416
Sim. apt-mark auto <pkg> deve ser necessário apenas para marcar um pacote como sendo instalado automaticamente (aqui a man page). - Pablo Bianchi


Normalmente existem dois motivos pelos quais você pode ver esta mensagem.

Se estiver atualizando o programa (via sudo apt-get upgrade) faria com que os pacotes fossem adicionados ou removidos, então o programa seria 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 Ubuntu alpha) um dist-upgrade 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 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.


30
2017-07-31 22:16



Existe uma maneira de determinar se o pacote retido precisa de uma dependência que não pode ser instalada ou se está sendo retida porque outros pacotes dependem dela. Eu tenho muitos pacotes e acredito que ambos os casos podem ser aplicados no meu sistema. - Jake
Obrigado, o segundo motivo foi o problema para mim. Até apt-get dist-upgrade recusou-se a instalá-lo. Inspecionar o pacote com o aptitude mostrou que isso depende de um pacote que não está disponível. Eu acho que vou ter que esperar. - jlh


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 que você usa 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.


18
2017-07-31 22:17



O que você baseia essa probabilidade, sem saber o que ele correu uma atualização apt-get ou um apt-get dist-upgrade (alt. Os equivalentes de aptidão)? - andol
este é o problema mais comum em questões de suporte e bugs - txwikinger
Acordado. Você provavelmente deve esperar e verificá-lo em apt_preferences. Isso geralmente é causado por arquivos de desenvolvimento nos quais as dependências de pacotes e disponíveis estão mudando muito rapidamente. Espere que eles se acalmem e você pode não precisar dist-upgrade em absoluto. Se você ainda quiser dist-upgradeEntão, olhe os NOVOS pacotes a serem instalados e os pacotes a serem removidos antes de prosseguir. - Umang
Este é o meu caso porque recebo a mensagem "keep back" usando dist-upgrade - Postadelmaga
Nos casos em que este problema é devido a um confronto com as preferências do apt (pinning), descobri que a reinstalação dos pacotes mantidos me ajudou: apt-get install --reinstall <packages>. - tanius


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".

A partir de man aptitude:

upgrade seguro

Atualiza 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.


18
2017-08-12 08:02





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

Se você executar:

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
2017-12-27 19:20



Atualiza pacotes específicos (e suas dependências) sem o compromisso (riscos) de um dist-upgrade. - John Mee