AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 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

“以下软件包已被保留:”为什么以及如何解决?

  • 772

我刚刚为 GIMP 的开发版本添加了一个 PPA 存储库,但出现此错误:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

为什么以及如何解决它,以便我可以使用最新版本而不是我现在拥有的版本?

package-management apt
  • 26 26 个回答
  • 1271599 Views

26 个回答

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

    根据debian-administration.org 上的一篇文章,

    如果您已安装的其中一个软件包的依赖关系已更改,因此必须安装新软件包才能执行升级,则该软件包将被列为“保留”。

    谨慎的解决方案1:

    根据Pablo 的回答,您可以运行sudo apt-get --with-new-pkgs upgrade,它会安装保留的软件包。

    这样做的好处是不会将保留的软件包标记为“手动安装”,这可能会迫使更多的用户干预(见评论)。

    如果 Pablo 的解决方案适合您,请点赞。如果没有,请评论出了什么问题。

    谨慎的解决方案2:

    谨慎的解决方案是运行sudo apt-get install <list of packages kept back>。在大多数情况下,这将为保留的软件包提供成功升级所需的内容。

    激进的解决方案:

    更激进的解决方案是 run sudo apt-get dist-upgrade,这将强制安装这些新的依赖项。

    但dist-upgrade 可能相当危险。与升级不同,它可能会删除软件包以解决复杂的依赖情况。与您不同,APT 并不总是足够聪明,无法知道这些添加和删除是否会造成严重破坏。

    因此,如果您发现自己处于“谨慎解决方案”不起作用的地方,dist-upgrade 可能会起作用......但是您最好了解更多有关 APT 的知识并通过安装和删除“手动”解决依赖问题根据具体情况打包。

    把它想象成修理汽车......如果你有时间并且可以用扳手方便,通过阅读和自己修理你会得到一些安心。如果你觉得幸运的话,你可以把你的车交给你的表妹dist-upgrade,希望她知道她的事情。

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

    每当您从命令收到apt-get upgrade消息时

    The following packages have been kept back:
    

    然后升级一个或所有保留的软件包,而不进行分发升级(dist-upgrade如果我没记错的话,这就是这样做的)是发出命令:

    apt-get install <list of packages kept back>
    

    这将解决保留的问题,并将要求安装其他软件包等,正如其他答案所解释的那样。

    另请参阅:为什么使用 apt-get upgrade 而不是 apt-get dist-upgrade?

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

    我在这里回答了一个类似的问题,更多地解释了这个问题背后的原因。


    试试这个 Unix SE 答案:

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

    这允许安装新的软件包。它将让您知道将安装哪些软件包并在实际进行安装之前提示您。

    apt命令(友好的替代apt-get)共享此选项。

    相反,使用apt install <pkg>会将 pkg 标记为“手动安装”!要再次将其标记为“自动安装”,请使用apt-mark auto <pkg>(另请参见 subcommand showmanual)。有关此答案的更多信息。

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

    apt-get dist-upgrade对稳定的环境是危险的,

    1. 错误的 source.list 设置最终会导致 ubuntu 损坏。
    2. 您可能会将整个应用程序升级到您不想要的版本。

    用例:内核升级保留,你只想升级内核,不想升级整个发行版。

    处理保留包裹的更好方法:

    sudo aptitude
    

    如果您保留了包,您应该在列表顶部看到可升级包。

    • 在该列表上点击 +
    • 按 g 两次
    • 如果被问到,请回答 debconf 内容
    • 按回车继续
    • 按Q
    • 按是

    您保留的软件包已安装。

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

    您可能会看到此消息通常有两个原因。

    如果升级程序(通过sudo apt-get upgrade)会导致添加或删除软件包,则程序将被阻止。您可以sudo apt-get dist-upgrade在这种情况下使用,然后它将提供添加或删除其他包。

    这很常见,通常不是问题。偶尔(特别是在 Ubuntu alpha 期间)adist-upgrade会提出删除许多其他程序,在这种情况下您可能想要取消它。

    如果软件包依赖于不可用的软件包或版本,则程序将被阻止。在这种情况下,您真的只能等待,因为该软件包基本上是可卸载的。当包被无序添加到存储库时、包被重命名或包停止提供虚拟包时,可能会发生这种情况。

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

    你也可以试试天赋。首先安装它:

    sudo apt-get install aptitude -y
    

    然后:

    sudo aptitude safe-upgrade
    

    它比full-upgrade(最初命名为dist-upgrade)更安全,因为“除非未使用,否则不会删除包”。

    来自man aptitude:

    安全升级

    将已安装的软件包升级到最新版本。--no-new-installs除非提供了命令行选项,否则不会删除已安装的包,除非它们未使用 [...] 可以安装当前未安装的包以解决依赖关系。

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

    这些软件包很可能被阻止,因为它们的安装会产生依赖性不一致。发生这种情况的原因可能是您正在使用主动开发、ppas 下的存档,或者是因为您使用的镜像未完全更新。

    在最后一种情况下,只需等待,当依赖关系解决后,它将在下一次安装。

    编辑:

    还有另一种可能性,如果包裹被搁置或被固定,包裹可能会被搁置。

    • 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, ... 提供了一种简化的语法,通过apt full-upgrade它可以像sudo apt-get dist-upgrade.

    sudo apt full-upgrade
    

    sudo apt upgrade用于从通过 sources.list(5) 配置的源安装当前安装在系统上的所有软件包的可用升级。如果需要满足依赖关系,将安装新包,但永远不会删除现有包。如果软件包的升级需要删除已安装的软件包,则不会执行此软件包的升级。

    sudo apt full-upgrade执行升级功能,但如果需要升级整个系统,则会删除当前安装的软件包。

    注意:full-upgrade仍然是当前分布。

    请参阅:手册apt页:18.04、20.04、22.04

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

    这对我有用

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

    我添加这个答案是因为我不满意其他答案如何处理问题的为什么部分以了解正在发生的事情并选择适当的行动方案。

    希望这能帮助人们避免盲目地apt dist-upgrade绝望奔跑!

    为什么要保留包裹?

    据我所知,包裹在apt upgrade.

    它被标记为保留

    apt-mark可以这样做:

    sudo apt-mark hold <package>
    

    hold 用于将包标记为保留,这将防止包被自动安装、升级或删除。

    要列出标记为保留的所有包裹或查看包裹是否处于保留状态,请使用:

    apt-mark showhold
    apt-mark showhold <package>
    

    要删除对包的保留并允许升级:

    sudo apt-mark unhold <package>
    

    apt检测依赖项更改

    我能找到的关于这方面的最佳权威信息来源被标记为已过时,但它说:

    [保留] 表示这些软件包有新版本,由于某种原因不会安装。可能的原因是依赖关系损坏(它所依赖的包没有可供下载的版本)或新的依赖关系(该包从上一个版本开始依赖于新包)

    这将告诉您软件包的当前和候选升级版本:

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

    使用当前版本(例如2:8.0.1453-1ubuntu1.3)和新版本(例如2:8.0.1453-1ubuntu1.4),我们可以通过以下方式找出更改的依赖项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
    

    (或者只是用来apt show -a直接查看所有版本,但我认为它使版本比较更难)

    重要的部分是Depends和Recommends包列表。如果保留包的新版本中的这些列表中有新包,apt 不会自动升级它。

    此时有 2 个选项可以升级保留的软件包。请注意,以下两种解决方案都有适当的参数,以避免错误地将软件包从“自动安装”更改为“手动安装”。

    1. 要升级软件包并安装任何新的“推荐”软件包(即,就像新安装的一样apt install <package>,请使用--only-upgrade:

      sudo apt install --only-upgrade <package>
      

      (提示:添加--dry-run前先看看会发生什么)

    2. 要在不安装任何新添加的“推荐”包的情况下升级包,请使用--with-new-pkgs.

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

    案例研究:升级docker-ce包

    docker-ce在 Ubuntu 18.04 上升级软件包是我首先来到这里的原因,所以我认为有一个完整的具体示例会很有趣。

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

    好的,让我们看看是什么阻碍了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.
    

    版本5:20.10.3~3-0~ubuntu-bionic已添加docker-ce-rootless-extras为新的推荐依赖项。我希望 apt 会更有帮助,只是建议安装它或其他东西,而不是让我留下旧版本......无论如何,这里有 2 个可能的修复(--dry-run用于说明目的):

    $ 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

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行判断机器是否需要重新启动?

  • 有没有办法重置所有包/源并从头开始?

  • 如何回滚到 PHP 5.2?

  • 包管理器之间有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve