"Os seguintes pacotes foram mantidos para trás:" por que e como faço para resolvê-lo?

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 poder usar a versão mais recente em vez da que tenho agora?

Segundar um artigo sobre debian-administration.org,

Se as dependências foram alteradas em um dos pacotes que você instalou para que um novo pacote deve ser instalado para executar a atualização, em seguida, que será listado como "kept-back".

Solução cautelosa 1:

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

Isso tem o benefício de não marcar os pacotes retidos como "instalados manualmente", o que poderia forçar mais intervenção do usuário na linha (Veja comentários).

Se a solução de Pablo funciona para você, por favor, upvote-o. 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 de dependência complexas. 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 poder trabalhar... 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ê tem tempo e é útil com uma chave inglesa, você terá alguma paz de espírito 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 das coisas dela.

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

The following packages have been kept back:

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

apt-get install <list of packages kept back>

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

Ver: Por que usar apt-get upgrade em vez de apt-get dist-upgrade?

Tentar 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 solicitará antes de realmente fazer a instalação.

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

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

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

  1. fonte errada.configuração de lista e você acaba com o ubuntu quebrado.
  2. você pode obter todo o aplicativo atualizado para a versão que você não quer.

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

Melhor maneira de lidar com o pacote retido:

sudo aptitude

Se você manteve o pacote de volta, você deve ver pacotes atualizáveis no topo da lista.

  • Hit + nessa lista
  • Hit g duas vezes
  • Responda às coisas do debconf se solicitado
  • Pressione Voltar para continuar
  • Imprensa Q
  • Pressione Sim

Seu pacote retido instalado.

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

Se atualizar o programa (via sudo apt-get upgrade) faria com que os pacotes fossem adicionados ou removidos, então o programa será retido. Você pode usar sudo apt-get dist-upgrade nesse caso, que se oferecerá para adicionar ou remover os programas adicionais.

Isso é bastante comum e geralmente não é um problema. Ocasionalmente (particularmente durante um Ubuntu alpha) a dist-upgrade oferecerá para remover muitos outros programas, caso em que você provavelmente deseja 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.

Você também pode tentar:

sudo aptitude safe-upgrade

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

De man aptitude:

atualização segura

Atualiza pacotes instalados para sua versão mais recente. Os pacotes instalados não serão removidos a menos que não sejam utilizados /.../ Pacotes que não estão 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.

Provavelmente, esses pacotes são retidos porque sua instalação 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, basta esperar, quando as dependências forem resolvidas, ele será instalado na próxima vez.

Editar:

Há outra possibilidade, pacotes podem ser retidos se houver um porão sobre eles, ou se eles são fixados.

Isso funcionou para mim

sudo aptitude full-upgrade

Isso geralmente ocorre porque o pacote adicionou uma dependência e o upgrade não deseja adicioná-lo para você sem permissão.

Se você correr:

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.

Ubuntu 18.04, 20.04 (e mais recente) fornecem um sintaxe simplificada por apt full-upgrade quais funções como sudo apt-get dist-upgrade.

sudo apt full-upgrade

sudo apt upgrade é usado para instalar atualizações disponíveis de todos os pacotes atualmente instalados no sistema a partir das fontes configuradas por meio de fontes.Lista(5). Novos pacotes serão instalados se necessário para satisfazer dependências, mas os pacotes existentes nunca serão removidos. Se uma atualização para um pacote exigir a remoção de um pacote instalado, a atualização para este pacote não será executada.

sudo apt full-upgrade executa a função de atualização, mas será remova os pacotes instalados atualmente se isso for necessário para atualizar o sistema como um todo.

Notar: full-upgrade permanece na distribuição atual.

Ver: apt página do homem: 18.04, 20.04

Que Mensagem de lixo. Por que o sistema operacional não pode apenas fazer o necessário?