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?
De acordo com um artigo em debian-administration.org ,
Solução cautelosa 1:
De acordo com a resposta de Pablo , você pode executar
sudo apt-get --with-new-pkgs upgrade
e instalará os pacotes mantidos.Isso tem a vantagem de não marcar os pacotes retidos como "instalados manualmente", o que poderia forçar mais intervenção do usuário no futuro (veja comentários).
Se a solução de Pablo funcionar para você, por favor, dê 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 retidos o que eles precisam para atualizar com sucesso.Solução agressiva:
Uma solução mais agressiva é executar o
sudo apt-get dist-upgrade
, 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 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.Portanto, se você se encontrar em um lugar onde a "solução cautelosa" não funciona,
dist-upgrade
pode funcionar ... mas provavelmente é melhor 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 habilidoso com uma chave inglesa, você terá um pouco de paz de espírito lendo e fazendo o reparo você mesmo. Se você estiver com sorte, pode deixar seu carro com sua prima
dist-upgrade
e esperar que ela saiba das coisas dela.Sempre que você recebe do comando
apt-get upgrade
a mensagementão, para atualizar um ou todos os pacotes mantidos, sem fazer uma atualização de distribuição (é isso que
dist-upgrade
faz, se bem me lembro) é emitir o comando:isso resolverá os problemas retidos e solicitará a instalação de pacotes adicionais, etc., conforme explicado por outras respostas.
Veja também : Por que usar apt-get upgrade em vez de apt-get dist-upgrade?
Eu respondi uma pergunta semelhante aqui , explicando um pouco mais sobre as razões por trás desse problema.
Tente esta resposta do Unix SE :
apt
command ( alternativa amigável paraapt-get
) compartilhe esta opção.Usar
apt install <pkg>
em vez disso marcará o pkg como "instalado manualmente"!! Para marcá-lo novamente como "instalado automaticamente" useapt-mark auto <pkg>
(veja também o subcomandoshowmanual
). Mais informações sobre esta resposta .apt-get dist-upgrade
é perigoso para o ambiente estável,Caso de uso: atualização do kernel mantida, você só quer atualizar o kernel, não quer atualizar toda a distribuição.
Melhor maneira de lidar com o pacote guardado:
Se você reteve o pacote, deverá ver Pacotes Atualizáveis no topo da lista.
Seu pacote retido instalado.
Normalmente, há 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, então o programa será retido. Você pode usarsudo apt-get dist-upgrade
neste caso, que então oferecerá para adicionar ou remover os pacotes adicionais.Isso é bastante comum e geralmente não é um problema. Ocasionalmente (particularmente durante um alfa do Ubuntu) a
dist-upgrade
oferecerá a remoção de muitos outros programas, nesse caso você provavelmente deseja cancelá-lo.Se o pacote 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 deixa de fornecer um pacote virtual.
Você também pode tentar o aptitude. Primeiro instale-o:
então:
É mais seguro do que
full-upgrade
(originalmente chamadodist-upgrade
) porque "os pacotes não serão removidos a menos que não sejam usados".De
man aptitude
:Muito 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, é só esperar, quando as dependências forem resolvidas ele será instalado na próxima vez.
Editar:
Existe outra possibilidade, os pacotes podem ser retidos se forem suspensos ou se forem fixados.
Ubuntu 18.04, 20.04, 22.04, … fornece uma sintaxe simplificada através da
apt full-upgrade
qual funções comosudo apt-get dist-upgrade
.Nota:
full-upgrade
permanece na distribuição atual.Veja:
apt
página man: 18.04 , 20.04 , 22.04Isso funcionou para mim
I'm adding this answer because I'm not satisfied with how other answers handle the why part of the question to understand what's going on and choose the appropriate course of action.
Hopefully this will help someone avoid blindly running
apt dist-upgrade
in despair!Why is a package kept back?
To my knowledge, there are 2 categories of reasons for packages being kept back during
apt upgrade
.It is marked as held back
apt-mark
can do this:To list all packages marked on hold or find out if a package is on hold use:
To remove a hold on a package and allow it to be upgraded:
apt
detects a dependency changeThe best authoritative source of information I could find regarding this is marked as obsolete, but it says:
This will tell you the current and candidate upgrade versions of the package:
With the current version (e.g.
2:8.0.1453-1ubuntu1.3
) and new version (e.g.2:8.0.1453-1ubuntu1.4
), we can figure out the changed dependencies withapt show
:(or just use
apt show -a
to view all versions directly, but it makes the version comparison harder in my opinion)The important parts are the
Depends
andRecommends
package lists. If there are new packages in those lists in the new version of the kept back package, apt won't automatically upgrade it.At this point there are 2 options to upgrade the kept back package. Note that both solutions below have the proper arguments to avoid erroneously changing a package from "automatically installed" to "manually installed".
To upgrade the package and install any new "Recommended" packages (i.e. as if newly installed with
apt install <package>
, use--only-upgrade
:(Tip: add
--dry-run
to see what will happen before doing it)To upgrade the package without installing any newly added "Recommended" packages, use
--with-new-pkgs
.Case study: upgrading the
docker-ce
packageUpgrading the
docker-ce
package on Ubuntu 18.04 is what brought me here in the first place so I thought it would be interesting to have a full concrete example.Ok let's see what's holding back
docker-ce
:Version
5:20.10.3~3-0~ubuntu-bionic
has addeddocker-ce-rootless-extras
as a new recommended dependency. I wish apt would be more helpful and simply suggest installing it or something instead of leaving me with an old version... Anyhow, here are the 2 possible fixes (with--dry-run
for illustration purposes):