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

jfo*_*her 1188 package-management apt

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

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*haw 1345

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

如果您安装的其中一个软件包的依赖关系发生了变化,因此必须安装新软件包才能执行升级,那么该软件包将被列为“保留”。

谨慎的解决方案1:

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

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

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

谨慎的解决方案2:

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

激进的解决方案:

一个更积极的解决方案是运行sudo apt-get dist-upgrade,这将强制安装这些新的依赖项。

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

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

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

  • 由于这是一个公认的答案需求,因此它确实需要更新以警告在稳定的系统上使用“dist-upgrade”,正如下面的许多其他答案所指出的那样。我个人认为有一个更简单/更安全的答案需要推广:[apt-get install &lt;list of pkgs&gt;](http://askubuntu.com/a/185402/8570) (204认同)
  • 请注意,`sudo apt-get dist-upgrade` 也可以**删除**包。因此,在运行 `sudo apt-get dist-upgrade` 时,最好总是在同意之前检查将要进行的更改列表。 (21认同)
  • 有一个 [Server Fault answer](http://serverfault.com/a/46749/82301) 更详细地解释了 dist-upgrade。我认为值得澄清(并不危险)它可能会升级整个系统,这可能超出用户的期望/想要的,即在 OP 示例中,他们想知道为什么 gimp 被阻止。 (20认同)
  • Cas,我应该补充一点,在稳定的系统上运行 dist-upgrade 可能很危险吗?为什么那么危险?(老实说,我不太了解 apt。) (8认同)
  • @EliahKagan 我可以补充一点,即使是 `apt-get upgrade` 也可以删除软件包吗?当存在版本冲突时,它总是会这样做。想想 `llvm3.6` 与 `llvm3.6v5`(“v5”意味着它是用 `gcc 5` 编译的)。这两个__不能共存__,系统上只能保留两者之一。所以是的,`dist-upgrade` 也可以删除一些软件包,但不仅仅是 `dist-upgrade` 会这样做;在某些情况下,`upgrade` 也会。 (8认同)
  • 为您提供升级计算机软​​件的图形工具,每天都有新软件可用……每次都会执行“apt-get dist-upgrade”。它与升级到新版本的操作系统无关(即从 12.04 升级到 14.04)。它更多是内核升级和其他升级之间的一种区分形式。无论如何,除非您需要继续使用某些旧版本的软件,否则您总是希望进行 dist-upgrade。 (3认同)
  • `sudo aptitude safe-upgrade` 有效,而 `--with-new-pkgs update` 不执行任何操作,并且其他选项由于其他原因并不理想。 (3认同)
  • 有一个不太危险的选项,它不需要手动列出每个包:`sudo apt-get --with-new-pkgs upgrade` 来自 http://unix.stackexchange.com/questions/38837/what-does-the-以下包裹已被保留的意思 (2认同)
  • `apt-get install` 还会将软件包标记为手动安装,您可能不希望这样。当您删除依赖于它们的软件包时,它们不会卸载。 (2认同)
  • @syntaxerror 对不起,我刚看到这个。您所描述的正是必须使用“dist-upgrade”的情况。*运行`apt-get upgrade`不会删除包。*作为[`apt-get`手册页](http://manpages.ubuntu.com/manpages/xenial/en/man8/apt-get.8. html) 在 `upgrade` 操作的描述中说:“检索和升级当前安装的具有可用新版本的软件包;在任何情况下都不会删除当前安装的软件包,或者检索和安装尚未安装的软件包。” 所以 `dist-upgrade` 绝对*比 `upgrade` 更强大。 (2认同)
  • sudo apt-get dist-upgrade 是给出此消息的人,所以这不是解决方案。这也不起作用 udo apt-get --with-new-pkgs update 所以只安装一个包就可以了 (2认同)
  • 当 `--with-new-pkgs` 不起作用时,`apt install --only-upgrade &lt;package_name&gt;` 可以是一个解决方案,并且不会像正常安装那样将软件包标记为手动安装。 (2认同)

小智 571

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

The following packages have been kept back:
Run Code Online (Sandbox Code Playgroud)

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

apt-get install <list of packages kept back>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 当包以这种方式保留并且我手动`apt-get upgrade &lt;包列表&gt;`时,如果我重做`apt-get upgrade`,它将列出不再需要的有问题的包并且我可以使用`apt autoremove` 删除它们,我这样做了,然后最后一个 `apt-get upgrade` 并且它们不再被列为保留......非常奇怪。有什么想法吗? (3认同)
  • 如果升级需要安装新包,则该包将被“保留”。首先考虑使用:`sudo apt-get --with-new-pkgs upgrade`,这不会导致软件包被标记为手动安装的副作用_ (3认同)

Pab*_*chi 284

试试这个 Unix SE 答案

sudo apt-get --with-new-pkgs upgrade
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 出于某种原因,`sudo apt-get --with-new-pkgs upgrade` 仍然将软件包显示为“保留”。没有错误信息。 (38认同)
  • +1 因为它没有导致软件包被标记为手动安装的副作用。 (25认同)
  • 此解决方案不会产生导致软件包被标记为“手动安装”的副作用。它也没有“实际安装 dang 包”的副作用。 (14认同)
  • 这对我来说没有任何影响——包裹仍然被保留。 (14认同)
  • 这没有任何作用。仍然说“以下包裹已被扣留:” (11认同)
  • 请注意谁读过我上面的评论:没有标记为手动安装的副作用是一件好事。我喜欢这个答案。 (3认同)
  • 只是想补充一点,对于许多最新的 debian 9.6 服务器实例,这是绝对最安全的解决方案,而不会破坏事物。谢谢你,Pablo,因为我幸运地预先测试了暂存环境的其他选项,并且由于包含 --with-new-pkgs 为一般的未来包管理提供了更清晰的结果,因此可以管理许多服务器达到安全标准。真的,这个 UNIX SE 答案应该被点赞! (3认同)
  • 是的。`apt-mark auto &lt;pkg&gt;` 应该只需要将软件包标记为自动安装([这里是手册页](https://manpages.debian.org/stretch/apt/apt-mark.8.en .html))。 (2认同)
  • @MichaelCrenshaw 是的,这就是重点。`apt-mark auto &lt;pkg&gt;' 适用于当您为之前标记为 auto 的 pkg 使用 `apt-get install &lt;pkg&gt;` 时。 (2认同)

小智 184

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

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

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

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

sudo aptitude
Run Code Online (Sandbox Code Playgroud)

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

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

你保留的安装包。

  • `apt-get dist-upgrade` 只有在 `/etc/apt/sources.list*` 中有错误的存储库时才危险。很高兴知道`dist-upgrade` 会升级*所有* 包,但是使用默认存储库,这应该没问题。*不*使用 `dist-upgrade` 可能很危险,因为你可能会错过安全更新。 (38认同)
  • `apt-get dist-upgrade` 可以*删除*以及添加包,但它并不真正危险。任何软件包安装命令都可能造成严重损坏*如果您的 `sources.list` 文件有问题*!常规的“apt-get upgrade”命令将安装来自已启用的任何软件源的任何软件包;`dist-upgrade` 在这种情况下并不是唯一的。此外,使用 `aptitude` 执行任何操作,至少在 amd64 上,比在 [bug 831768](https://bugs.launchpad. net/ubuntu/+source/aptitude/+bug/831768) 未修复。 (7认同)
  • 还有`sudo aptitude 安全升级` (6认同)
  • @msanford 谢谢你!您的解决方案为我解决了“sudo apt-get --with-new-pkgs update”没有解决的问题。 (3认同)

ber*_*nie 126

我添加这个答案是因为我对其他答案如何处理问题的原因部分以了解发生的情况并选择适当的行动方案感到不满意。

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

为什么包裹会被退回?

据我所知,包裹在 期间被扣留的原因有 3 类apt upgrade

1)它被标记为保留

apt-mark可以这样做

sudo apt-mark hold <package>
Run Code Online (Sandbox Code Playgroud)

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

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

apt-mark showhold
apt-mark showhold <package>
Run Code Online (Sandbox Code Playgroud)

要取消对软件包的保留并允许其升级:

sudo apt-mark unhold <package>
Run Code Online (Sandbox Code Playgroud)

2)apt检测依赖关系变化

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

[Kept back] 意味着这些软件包有新版本,由于某种原因不会安装。可能的原因是依赖关系被破坏(它所依赖的包没有可供下载的版本)或新的依赖关系(自上一个版本以来,该包开始依赖新的包)

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

$ 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.
Run Code Online (Sandbox Code Playgroud)

使用当前版本(例如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
Run Code Online (Sandbox Code Playgroud)

(或者只是用来apt show -a直接查看所有版本,但在我看来这使得版本比较变得更加困难)

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

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

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

    sudo apt upgrade --with-new-pkgs <package>
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 要升级软件包而不安装任何新添加的“推荐”软件包,请使用--only-upgrade

    sudo apt install --only-upgrade <package>
    
    Run Code Online (Sandbox Code Playgroud)

3)分阶段更新

分阶段更新

一旦更新发布到 -updates,更新就会分阶段进行,以便逐步向不断扩大的 Ubuntu 用户子集提供更新。此过程使我们能够自动监视回归并在发现任何情况时停止更新过程。

您可以通过以下方式检查分阶段更新:

sudo apt -o APT::Get::Always-Include-Phased-Updates=true upgrade --dry-run

这里有更多信息:什么是分阶段更新,为什么 Ubuntu 使用它们?

案例研究:升级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.
Run Code Online (Sandbox Code Playgroud)

好吧,让我们看看是什么阻碍了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 <support@docker.com>
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 <support@docker.com>
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.
Run Code Online (Sandbox Code Playgroud)

版本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])
Run Code Online (Sandbox Code Playgroud)

  • 如果我理解正确的话,保留更新还有第三个原因:**分阶段更新**。这些内容将逐渐分发给越来越多的用户群,直到每个人都可以使用更新。(请参阅[此处](https://wiki.ubuntu.com/PhasedUpdates)) (14认同)
  • 您可以使用“sudo apt -o APT::Get::Always-Include-Phased-Updates=true update --dry-run”检查分阶段更新。 (6认同)
  • 这应该是公认的答案 (5认同)
  • 我更新了我的答案以包含 PhasedUpdates。谢谢! (3认同)

Joe*_*Joe 63

自从我升级到 Ubuntu 22.04 jammy 以来,这种情况发生了更多。

原因通常是分阶段更新。(感谢@louis-waweru 提供的链接。)

  1. 解决方案是忽略那些“已被保留”的消息。当存储库维护者认为这些软件包足够安全,可以安装时,您将获得它们。

  2. /etc/apt/apt.conf.d/99-Phased-Updates如果您绝对必须获取这些更新,您可以创建包含以下内容的文件:

Update-Manager::Always-Include-Phased-Updates "1";
APT::Get::Always-Include-Phased-Updates "1";
Run Code Online (Sandbox Code Playgroud)

  • 这!这似乎是与我相关的答案。进一步注意:当我执行“apt list --upgradable”时,它显示各种软件包以及新旧版本。然后,我可以对列出的任何软件包执行“apt show package -a”,至少在我的情况下,我会看到类似“Phased-Update-Percentage: 70”或“Phased-Update-Percentage: 0”的内容` 或其他什么。另请参阅:https://wiki.ubuntu.com/PhasedUpdates (12认同)

jbo*_*tie 38

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

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

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

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

  • 有没有办法确定持有的包是否需要无法安装的依赖项,或者是否因为其他包依赖它而被持有。我有很多持有的包裹,我相信这两种情况都可能适用于我的系统。 (6认同)

Afi*_*ilu 32

你也可以试试:

sudo aptitude safe-upgrade
Run Code Online (Sandbox Code Playgroud)

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

来自man aptitude

安全升级

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

  • @MikeB 您是否按照答案的指示首先安装了 aptitude? (6认同)
  • 这是正确的答案 (4认同)
  • 这只是给出了 `sudo: aptitude: command not found` (2认同)

txw*_*ger 23

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

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

编辑:

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

  • 这是支持问题和错误中最常出现的问题 (2认同)

小智 16

这对我有用

sudo aptitude full-upgrade
Run Code Online (Sandbox Code Playgroud)

  • 甚至“能力升级”也对我有用。 (2认同)

Joh*_*den 12

这通常是因为包添加了一个依赖项,而升级不想未经许可为您添加它。

如果你运行:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0
Run Code Online (Sandbox Code Playgroud)

然后应将新版本与其新依赖项一起安装。


l -*_*c l 12

Ubuntu 18.04(和更新版本)提供了一种简化的语法,通过apt full-upgrade它可以像sudo apt-get dist-upgrade.

sudo apt full-upgrade
Run Code Online (Sandbox Code Playgroud)

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

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

注意:full-upgrade保留在当前分发中。

请参阅:apt手册页:18.04 , 20.04

  • `full-upgrade` 与 `dist-upgrade` 做同样的事情!这个答案是错误的!请参阅此处 https://askubuntu.com/questions/770135/apt-full-upgrade-versus-apt-get-dist-upgrade (3认同)

ros*_*net 8

更新/升级不起作用 [最后的答案]

保留的软件包 (...) 目前处于分阶段更新中。

Phased Updates is one precaution to prevent everybody from receiving a buggy package via upgrade: Some people get the upgraded a few days earlier, others a few days later. This provides an opportunity to pause distribution if early folks report problems.
Run Code Online (Sandbox Code Playgroud)

没有任何错误。你的系统没有坏。

  • 我还不知道这是否是***正确的答案***,但我确实知道这里的*高度赞成的答案*是***不正确的答案*** - 除非你正在运行 10岁系统。 (2认同)

小智 7

我发现 aptitude 在升级软件包方面做得更好,如果版本略有不同。我遇到过这样的情况:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)

这使得 apt-get 阻止更新,但 aptitude 更新它就好了。我不确定使用哪种算法来确定是否应该更新包。我猜这两个版本相同,只是“限定符”不同。但无论如何, apt-get 不会更新它,但 aptitude 会。


Ste*_*sen 7

这看起来像是重新安装保留包的正确方法:

apt-get install --reinstall libjpeg-progs
Run Code Online (Sandbox Code Playgroud)

至少当我libjpeg-progs从 Ubuntu 14.04 升级到 16.04 后遇到困难时,这对我有用。我确信您可以对任何其他保留的应用程序执行相同的操作,例如gimp.

来源


Kaz*_*ark 5

当新内核发布时我遇到了这个问题。(可能是因为我启用了不稳定的更新。)我发现最简单的安装方法是通过 Ubuntu 的图形安装程序 ( update-manager)。


cry*_*man 5

在我的情况下,被阻止的包是那些与linux-headers和内核相关的包。我是通过尝试解决通知区域中有红色感叹号并且无法更新包的问题来解决这个问题的。

为了解决它,我不必使用dist-upgrade或手动apt-get install xxx

我所做和帮助过的事情简单而干净

sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

我必须手动确认 Grub 更新及其配置。

然后我只是在计算机上工作了一段时间,然后再次出现标准更新对话框,最终包括带有内核和相关内容的“Ubuntu base”部分。更新执行没有任何问题,我再也看不到任何保留的包了。

此外,请务必记住,包括内核更新在内的那些 *buntu 更新对休眠很敏感- 我已经多次遇到这个问题,我总是通过重新启动机器并执行上述步骤来解决它。

所以也许这就足够了?!

(这里描述的情况与我2015年12月底的Xubuntu 15.10有关)


hlo*_*dal 5

虽然其他答案警告说这apt dist-upgrade可能会删除程序,但请注意,您可以只运行该命令,然后对“您想继续吗?”回答“否”。问题以调查 apt 会做什么

\n
\n

将树莓派从 Buster 更新为 Bullseye 后,我最终得到了 apt 报告

\n
The following packages have been kept back:\n  sshfs\n
Run Code Online (Sandbox Code Playgroud)\n

所以我开始搜索错误消息,登陆此页面,阅读一些答案,然后运行

\n
$\xc2\xa0apt-get dist-upgrade\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nCalculating upgrade... Done\nThe following packages will be REMOVED:\n  fuse\nThe following NEW packages will be installed:\n  fuse3 libfuse3-3\nThe following packages will be upgraded:\n  sshfs\n1 upgraded, 2 newly installed, 1 to remove and 0 not upgraded.\nNeed to get 147 kB of archives.\nAfter this operation, 196 kB of additional disk space will be used.\nDo you want to continue? [Y/n] \n
Run Code Online (Sandbox Code Playgroud)\n

此时很明显它fuse已被替换fuse3,我很高兴让 apt 删除它。

\n
\n

您的情况可能有所不同,但进行(潜在的)试运行将为您提供更详细的信息,并很可能回答“为什么”问题。

\n


归档时间:

查看次数:

1050177 次

最近记录:

4 年,3 月 前