AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 601
Accepted
jfoucher
jfoucher
Asked: 2010-08-01 13:59:22 +0800 CST2010-08-01 13:59:22 +0800 CST 2010-08-01 13:59:22 +0800 CST

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

  • 772

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?

package-management apt
  • 26 26 respostas
  • 1271599 Views

26 respostas

  • Voted
  1. Best Answer
    crenshaw-dev
    2010-08-01T14:15:04+08:002010-08-01T14:15:04+08:00

    De acordo com um artigo em debian-administration.org ,

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

    Solução cautelosa 1:

    De acordo com a resposta de Pablo , você pode executar sudo apt-get --with-new-pkgs upgradee 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-upgradee esperar que ela saiba das coisas dela.

    • 1558
  2. user88285
    2012-09-09T01:14:42+08:002012-09-09T01:14:42+08:00

    Sempre que você recebe do comando apt-get upgradea 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 (é isso que dist-upgradefaz, se bem me lembro) é emitir o comando:

    apt-get install <list of packages kept back>
    

    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?

    • 612
  3. Pablo Bianchi
    2016-12-21T12:16:32+08:002016-12-21T12:16:32+08:00

    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 :

    sudo apt-get --with-new-pkgs upgrade
    

    Isso permite que novos pacotes sejam instalados. Ele informará quais pacotes seriam instalados e avisará antes de realmente fazer a instalação.

    aptcommand ( alternativa amigável para apt-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" use apt-mark auto <pkg>(veja também o subcomando showmanual). Mais informações sobre esta resposta .

    • 340
  4. mudy
    2010-12-24T16:43:16+08:002010-12-24T16:43:16+08:00

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

    1. configuração source.list errada 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: 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:

    sudo aptitude
    

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

    • Aperte + nessa lista
    • Aperte g duas vezes
    • Responda coisas do debconf se perguntado
    • Pressione retornar para continuar
    • Pressione Q
    • Pressione sim

    Seu pacote retido instalado.

    • 191
  5. jbowtie
    2010-08-01T14:16:48+08:002010-08-01T14:16:48+08:00

    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 usar sudo apt-get dist-upgradeneste 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-upgradeoferecerá 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.

    • 41
  6. Afilu
    2014-08-13T00:02:22+08:002014-08-13T00:02:22+08:00

    Você também pode tentar o aptitude. Primeiro instale-o:

    sudo apt-get install aptitude -y
    

    então:

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

    De man aptitude:

    atualização segura

    Atualiza os pacotes instalados para sua versão mais recente. Pacotes instalados não serão removidos a menos que não sejam usados ​​[...] Pacotes que não estão instalados atualmente podem ser instalados para resolver dependências a menos que a --no-new-installsopção de linha de comando seja fornecida.

    • 38
  7. txwikinger
    2010-08-01T14:17:03+08:002010-08-01T14:17:03+08:00

    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.

    • 26
  8. l --marc l
    2019-07-30T06:05:06+08:002019-07-30T06:05:06+08:00

    Ubuntu 18.04, 20.04, 22.04, … fornece uma sintaxe simplificada através da apt full-upgradequal 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 via sources.list(5). Novos pacotes serão instalados se necessário para satisfazer as dependências, mas os pacotes existentes nunca serão removidos. Se uma atualização de um pacote exigir a remoção de um pacote instalado, a atualização desse pacote não será executada.

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

    Nota: full-upgradepermanece na distribuição atual.

    Veja: aptpágina man: 18.04 , 20.04 , 22.04

    • 22
  9. Singh
    2013-03-23T03:40:43+08:002013-03-23T03:40:43+08:00

    Isso funcionou para mim

    sudo aptitude full-upgrade
    
    • 19
  10. bernie
    2021-02-15T06:21:14+08:002021-02-15T06:21:14+08:00

    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:

    sudo apt-mark hold <package>
    

    hold is used to mark a package as held back, which will prevent the package from being automatically installed, upgraded or removed.

    To list all packages marked on hold or find out if a package is on hold use:

    apt-mark showhold
    apt-mark showhold <package>
    

    To remove a hold on a package and allow it to be upgraded:

    sudo apt-mark unhold <package>
    

    apt detects a dependency change

    The best authoritative source of information I could find regarding this is marked as obsolete, but it says:

    [Kept back] means that there are new versions of these packages which will not be installed for some reason. Possible reasons are broken dependencies (a package on which it depends doesn't have a version available for download) or new dependencies (the package has come to depend on new packages since the last version)

    This will tell you the current and candidate upgrade versions of the package:

    $ apt list <package>
    
    # example output:
    vim/bionic-updates,bionic-security 2:8.0.1453-1ubuntu1.4 amd64 [upgradable from: 2:8.0.1453-1ubuntu1.3]
    N: There are 2 additional versions. Please use the '-a' switch to see them.
    

    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 with apt show:

    apt show <package>=<old version> <package>=<new version>
    
    # example:
    apt show vim=2:8.0.1453-1ubuntu1.3 vim=2:8.0.1453-1ubuntu1.4
    

    (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 and Recommends 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".

    1. To upgrade the package and install any new "Recommended" packages (i.e. as if newly installed with apt install <package>, use --only-upgrade:

      sudo apt install --only-upgrade <package>
      

      (Tip: add --dry-run to see what will happen before doing it)

    2. To upgrade the package without installing any newly added "Recommended" packages, use --with-new-pkgs.

      sudo apt upgrade --with-new-pkgs <package>
      

    Case study: upgrading the docker-ce package

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

    $ sudo apt upgrade
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Calculating upgrade... Done
    The following packages have been kept back:
      docker-ce
    0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
    
    $ apt list docker-ce
    Listing... Done
    docker-ce/bionic 5:20.10.3~3-0~ubuntu-bionic amd64 [upgradable from: 5:19.03.12~3-0~ubuntu-bionic]
    N: There are 34 additional versions. Please use the '-a' switch to see them.
    

    Ok let's see what's holding back docker-ce:

    $ apt show docker-ce=5:19.03.12~3-0~ubuntu-bionic docker-ce=5:20.10.3~3-0~ubuntu-bionic
    Package: docker-ce
    Version: 5:19.03.12~3-0~ubuntu-bionic
    Priority: optional
    Section: admin
    Maintainer: Docker <[email protected]>
    Installed-Size: 107 MB
    Depends: docker-ce-cli, containerd.io (>= 1.2.2-3), iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
    Recommends: aufs-tools, ca-certificates, cgroupfs-mount | cgroup-lite, git, pigz, xz-utils, libltdl7, apparmor
    Conflicts: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
    Replaces: docker-engine
    Homepage: https://www.docker.com
    Download-Size: 22.5 MB
    APT-Manual-Installed: yes
    APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
    Description: Docker: the open-source application container engine
     Docker is a product for you to build, ship and run any application as a
     lightweight container
     .
     Docker containers are both hardware-agnostic and platform-agnostic. This means
     they can run anywhere, from your laptop to the largest cloud compute instance and
     everything in between - and they don't require you to use a particular
     language, framework or packaging system. That makes them great building blocks
     for deploying and scaling web apps, databases, and backend services without
     depending on a particular stack or provider.
    
    Package: docker-ce
    Version: 5:20.10.3~3-0~ubuntu-bionic
    Priority: optional
    Section: admin
    Maintainer: Docker <[email protected]>
    Installed-Size: 121 MB
    Depends: containerd.io (>= 1.4.1), docker-ce-cli, iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
    Recommends: apparmor, ca-certificates, docker-ce-rootless-extras, git, libltdl7, pigz, xz-utils
    Suggests: aufs-tools, cgroupfs-mount | cgroup-lite
    Conflicts: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
    Replaces: docker-engine
    Homepage: https://www.docker.com
    Download-Size: 24.8 MB
    APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
    Description: Docker: the open-source application container engine
     Docker is a product for you to build, ship and run any application as a
     lightweight container
     .
     Docker containers are both hardware-agnostic and platform-agnostic. This means
     they can run anywhere, from your laptop to the largest cloud compute instance and
     everything in between - and they don't require you to use a particular
     language, framework or packaging system. That makes them great building blocks
     for deploying and scaling web apps, databases, and backend services without
     depending on a particular stack or provider.
    

    Version 5:20.10.3~3-0~ubuntu-bionic has added docker-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):

    $ sudo apt upgrade --with-new-pkgs --dry-run docker-ce
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Calculating upgrade... Done
    The following packages will be upgraded:
      docker-ce
    1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    Inst docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
    Conf docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
    
    $ sudo apt install --only-upgrade --dry-run docker-ce
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following additional packages will be installed:
      docker-ce-rootless-extras
    Recommended packages:
      slirp4netns
    The following NEW packages will be installed:
      docker-ce-rootless-extras
    The following packages will be upgraded:
      docker-ce
    1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Inst docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
    Inst docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
    Conf docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
    Conf docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
    
    • 18

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como adicionar um diretório ao PATH?

    • 17 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Marko Smith

    Como faço para obter a temperatura da CPU?

    • 21 respostas
  • Marko Smith

    Como posso adicionar um usuário como um novo sudoer usando a linha de comando?

    • 7 respostas
  • Marko Smith

    Alterar permissões e propriedade da pasta

    • 9 respostas
  • Marko Smith

    Como você reinicia o Apache?

    • 13 respostas
  • Marko Smith

    Como posso desinstalar o software?

    • 11 respostas
  • Marko Smith

    Como os PPAs podem ser removidos?

    • 26 respostas
  • Martin Hope
    justingrif Como adicionar um diretório ao PATH? 2009-07-23 12:42:23 +0800 CST
  • Martin Hope
    NES Como habilitar ou desabilitar serviços? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    Olivier Lalonde Como manter os processos em execução após encerrar a sessão ssh? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B Como posso adicionar um usuário como um novo sudoer usando a linha de comando? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans Como removo versões antigas do kernel para limpar o menu de inicialização? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve