我刚刚为 GIMP 的开发版本添加了一个 PPA 存储库,但出现此错误:
$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
gimp gimp-data libgegl-0.0-0 libgimp2.0
为什么以及如何解决它,以便我可以使用最新版本而不是我现在拥有的版本?
我刚刚为 GIMP 的开发版本添加了一个 PPA 存储库,但出现此错误:
$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
gimp gimp-data libgegl-0.0-0 libgimp2.0
为什么以及如何解决它,以便我可以使用最新版本而不是我现在拥有的版本?
根据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
,希望她知道她的事情。每当您从命令收到
apt-get upgrade
消息时然后升级一个或所有保留的软件包,而不进行分发升级(
dist-upgrade
如果我没记错的话,这就是这样做的)是发出命令:这将解决保留的问题,并将要求安装其他软件包等,正如其他答案所解释的那样。
另请参阅:为什么使用 apt-get upgrade 而不是 apt-get dist-upgrade?
我在这里回答了一个类似的问题,更多地解释了这个问题背后的原因。
试试这个 Unix SE 答案:
apt
命令(友好的替代apt-get
)共享此选项。相反,使用
apt install <pkg>
会将 pkg 标记为“手动安装”!要再次将其标记为“自动安装”,请使用apt-mark auto <pkg>
(另请参见 subcommandshowmanual
)。有关此答案的更多信息。apt-get dist-upgrade
对稳定的环境是危险的,用例:内核升级保留,你只想升级内核,不想升级整个发行版。
处理保留包裹的更好方法:
如果您保留了包,您应该在列表顶部看到可升级包。
您保留的软件包已安装。
您可能会看到此消息通常有两个原因。
如果升级程序(通过
sudo apt-get upgrade
)会导致添加或删除软件包,则程序将被阻止。您可以sudo apt-get dist-upgrade
在这种情况下使用,然后它将提供添加或删除其他包。这很常见,通常不是问题。偶尔(特别是在 Ubuntu alpha 期间)a
dist-upgrade
会提出删除许多其他程序,在这种情况下您可能想要取消它。如果软件包依赖于不可用的软件包或版本,则程序将被阻止。在这种情况下,您真的只能等待,因为该软件包基本上是可卸载的。当包被无序添加到存储库时、包被重命名或包停止提供虚拟包时,可能会发生这种情况。
你也可以试试天赋。首先安装它:
然后:
它比
full-upgrade
(最初命名为dist-upgrade
)更安全,因为“除非未使用,否则不会删除包”。来自
man aptitude
:这些软件包很可能被阻止,因为它们的安装会产生依赖性不一致。发生这种情况的原因可能是您正在使用主动开发、ppas 下的存档,或者是因为您使用的镜像未完全更新。
在最后一种情况下,只需等待,当依赖关系解决后,它将在下一次安装。
编辑:
还有另一种可能性,如果包裹被搁置或被固定,包裹可能会被搁置。
Ubuntu 18.04, 20.04, 22.04, ... 提供了一种简化的语法,通过
apt full-upgrade
它可以像sudo apt-get dist-upgrade
.注意:
full-upgrade
仍然是当前分布。请参阅:手册
apt
页:18.04、20.04、22.04这对我有用
我添加这个答案是因为我不满意其他答案如何处理问题的为什么部分以了解正在发生的事情并选择适当的行动方案。
希望这能帮助人们避免盲目地
apt dist-upgrade
绝望奔跑!为什么要保留包裹?
据我所知,包裹在
apt upgrade
.它被标记为保留
apt-mark
可以这样做:要列出标记为保留的所有包裹或查看包裹是否处于保留状态,请使用:
要删除对包的保留并允许升级:
apt
检测依赖项更改我能找到的关于这方面的最佳权威信息来源被标记为已过时,但它说:
这将告诉您软件包的当前和候选升级版本:
使用当前版本(例如
2:8.0.1453-1ubuntu1.3
)和新版本(例如2:8.0.1453-1ubuntu1.4
),我们可以通过以下方式找出更改的依赖项apt show
:(或者只是用来
apt show -a
直接查看所有版本,但我认为它使版本比较更难)重要的部分是
Depends
和Recommends
包列表。如果保留包的新版本中的这些列表中有新包,apt 不会自动升级它。此时有 2 个选项可以升级保留的软件包。请注意,以下两种解决方案都有适当的参数,以避免错误地将软件包从“自动安装”更改为“手动安装”。
要升级软件包并安装任何新的“推荐”软件包(即,就像新安装的一样
apt install <package>
,请使用--only-upgrade
:(提示:添加
--dry-run
前先看看会发生什么)要在不安装任何新添加的“推荐”包的情况下升级包,请使用
--with-new-pkgs
.案例研究:升级
docker-ce
包docker-ce
在 Ubuntu 18.04 上升级软件包是我首先来到这里的原因,所以我认为有一个完整的具体示例会很有趣。好的,让我们看看是什么阻碍了
docker-ce
:版本
5:20.10.3~3-0~ubuntu-bionic
已添加docker-ce-rootless-extras
为新的推荐依赖项。我希望 apt 会更有帮助,只是建议安装它或其他东西,而不是让我留下旧版本......无论如何,这里有 2 个可能的修复(--dry-run
用于说明目的):