O apt diz que os pacotes foram retidos, o que fazer?


22

A saída de apt-get upgradeé:

The following packages have been kept back:
certbot python-acme python-certbot python-certbot-apache python-cryptography python-openssl

O que isto significa? Devo agir? Se sim, o que?

Respostas:


36

Solução rápida e fácil:

Eu tive o mesmo problema várias vezes. NÃO faça sudo apt-get dist-upgradeprimeiro. Muito importante. **** NOTA: Esta solução é para máquinas baseadas no Debian, mas não funcionará no KDE Neon . Para atualizar o KDE Neon, você deve usar sudo pkcon update. ****

Por quê?

Isso pode tornar seu sistema muito instável, os programas podem falhar e você pode perder muitas funcionalidades no seu sistema operacional.

Você DEVE instalar cada pacote individualmente, NO ENTANTO , durante esse processo, outras dependências também serão instaladas automaticamente e seu problema será resolvido em apenas alguns minutos.

Não tive problemas com a seguinte solução. É bastante rápido e fácil.


Primeiro, faça o seguinte:

apt list --upgradable

  • Isso mostrará uma lista de pacotes que podem ser atualizados.

Em seguida, faça o seguinte:

  • Comece no início da lista com o primeiro pacote e digite:

sudo apt-get install package-name-here

  • Isso executará o processo de instalação e puxará / instalará dependências.

Após a conclusão desse processo, faça o seguinte:

apt list --upgradable

  • Isso mostrará novamente quais pacotes podem ser atualizados. Sua lista de pacotes agora deve estar diminuindo. Siga a lista de pacotes e digite apt list --upgradableapós cada instalação do pacote. Isso deve levar apenas alguns minutos para ser concluído.

Finalmente:

sudo apt-get autoclean

sudo apt-get update && sudo apt-get dist-upgrade

Se essa solução funcionou para você, não se esqueça de fazer um voto positivo para que a solução correta esteja disponível para outras pessoas e fique no topo da lista de respostas.

Se, por algum motivo, esta solução não funcionar, consulte a resposta do usuário GAD3R abaixo. Também é uma boa solução.

Obrigado.


1
Para mim, o pacote foi mínimo no ubuntu. Suas instruções funcionaram perfeitamente.
21419 DeanM

Não use esta solução se você estiver no KDE Neon.
Gregory Smitherman

11

O que isto significa?

The following packages have been kept back:

A resposta está aqui

Isso significa que existem novas versões desses pacotes que não serão instaladas por algum motivo. Os possíveis motivos são dependências quebradas (um pacote do qual depende não tem uma versão disponível para download) ou novas dependências (o pacote passou a depender de novos pacotes desde a última versão).

Devo agir?

Você precisa usar dist-upgradepara instalar as novas dependências e atualizar os pacotes:

sudo apt-get dist-upgrade

O problema pode ser resolvido executando, dist-upgradese não for necessário:

Corrigir dependências quebradas

sudo apt-get -f install 

Remova alguns pacotes que não estão mais instalados no seu sistema:

sudo apt-get autoclean

Coloque o pacote desejado em espera:

echo "<package_name> hold" | dpkg --set-selections

Reconfigure o pacote nomeado:

dpkg-reconfigure <package_name>

3

A partir desta resposta do Unix SE :

Em primeiro lugar, como mencionado acima, NÃO atualize distintamente nenhum sistema de produção! Embora a atualização dist "resolva" os pacotes atrasados, definitivamente não é a solução para esse problema e provavelmente causará mais sofrimento do que benefícios se você executá-lo sem conhecer as implicações em seu sistema.

Se a atualização de um pacote exigir a instalação de pacotes adicionais, ela será "retida" ao executar sudo apt-get upgrade.

Como mencionado acima, você pode instalar manualmente sudo apt-get install [paste kept back packages here]esses pacotes "retidos" executando explicitamente, mas isso marcará esses pacotes como "instalados manualmente", o que geralmente não é o que queremos.

Para instalar automaticamente quaisquer pacotes adicionais necessários para atualizar os pacotes "retidos", sem marcar os pacotes "retidos" como instalados manualmente, basta executar sudo apt-get --with-new-pkgs upgrade.


Mais sobre --with-new-pkgse os efeitos colaterais de outras alternativas aqui .
Pablo A

2

Eu incluí esta resposta no meu blog. Se você quiser ver que você pode ir lá a partir deste link .

O erro acima é muito comum no terminal Ubuntu quando você tenta atualizar ( apt-get upgrade). Isso geralmente acontece porque as dependências de um pacote que você instalou foram alteradas. Para atualizar, você precisa atualizá-los também primeiro. Portanto, é muito simples resolver isso. Você poderá ver os pacotes que ficaram abaixo dessa mensagem de erro. Como exemplo, posso ver os seguintes pacotes na lista:

gnome-software gnome-software-common linux-generic linux-headers-generic linux-image-generic snapd ubuntu-core-launcher ubuntu-software

Não basta digitar sudo apt-get dist-upgradeÉ muito perigoso, pois instala todas as atualizações pendentes. Isso pode levar seu ambiente de trabalho a um estado altamente instável.

Portanto, minha opinião é usar famosos

sudo apt-get install [package]

Você pode substituir [package]por qualquer pacote que esteja na mensagem de erro. Além disso, você pode colocá-los como estão em uma lista (basta copiar e colar). Como um exemplo no meu caso, posso inserir

sudo apt-get install gnome-software gnome-software-common linux-generic linux-headers-generic linux-image-generic snapd ubuntu-core-launcher ubuntu-software

Se você quer fazer

sudo apt-get dist-upgrade

por algum motivo, apenas verifique a lista de pacotes usando a opção simular -s( sudo apt-get -s dist-upgrade), ou sem a -sopção de terminar a execução antes de aceitar. (você sempre pode escolher a opção não)


2

Recentemente, uma atualização de segurança do Debian introduziu algumas novas dependências. Nesse caso, o linux-imagepacote começou a exigir linux-firmware, entre alguns outros. Então eles foram retidos e não foram instalados por unattended-upgrade. Após alguns testes e confirmações, consegui instalar seletivamente apenas esses pacotes, sem tocar em outras atualizações pendentes:

apt-get -yy install $(apt-get -s upgrade | sed '1,/kept back/d;/will be upgraded/,$d')


1

Este artigo resume bem por que isso acontece:

Se as dependências foram alteradas em um dos pacotes que você instalou para que um novo pacote seja instalado para executar a atualização, isso será listado como "retido".

A solução para isso é instalá-los explicitamente com o

sudo apt install [packages]

Você provavelmente deseja marcar esses pacotes como instalados automaticamente, a menos que você se preocupe com eles e não apenas para satisfazer dependências.

sudo apt-mark auto [packages]

Para evitar que isso aconteça em primeiro lugar, recomendo usar

sudo apt --with-new-pkgs upgrade

para atualizar pacotes no futuro, o que permite a instalação de novos pacotes para satisfazer mudanças nas dependências.


Dois polegares para --with-new-pkgs! E deixe-me enfatizar novamente que " NÃO atualize distintamente nenhum sistema de produção! Embora a atualização dist" resolva "os pacotes retidos, definitivamente não é a solução para esse problema e provavelmente causará mais sofrimento do que benefícios se você execute-o sem conhecer as implicações no seu sistema ".
xpt 29/06/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.