“以下方案已被保留:”为什么以及如何解决?
我刚刚为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:
谨慎的解决方案是运行sudo apt-get install
。 在大多数情况下,这将为保留包提供成功升级所需的function。
谨慎解决方案2:
按照Pablo的回答 ,您可以运行sudo apt-get --with-new-pkgs upgrade
,它将安装保留的软件包。
这样做的好处是不会将后备包装标记为“手动安装”,这可能会迫使用户进行更多干预(参见注释)。
如果Pablo的解决方案适合您,请进行投票。 如果没有,请评论出错的地方。
积极的解决方案:
更积极的解决方案是运行sudo apt-get dist-upgrade
,这将强制安装这些新的依赖项。
但是dist-upgrade
可能非常危险 。 与升级不同,它可以删除包以解决复杂的依赖情况。 与您不同,APT并不总是足够聪明,无法知道这些添加和删除是否会造成严重破坏。
因此,如果您发现自己处于“谨慎解决方案”不起作用的地方,那么dist-upgrade
可能会起作用……但您可能最好更多地了解APT并通过“手动”解决依赖性问题。根据具体情况安装和删除软件包。
把它想象成一辆汽车…如果你有时间并且用扳手方便,你可以通过阅读和自己修理来获得一些安心。 如果你感觉很幸运,你可以放弃你的表弟,让你的表兄弟dist-upgrade
并希望她知道她的东西。
每当您收到命令apt-get upgrade
的消息时
The following packages have been kept back:
然后升级一个或所有保留的软件包,而不进行分发升级(这是dist-upgrade
作用,如果我没记错的话)是发出命令:
apt-get install
这将解决保留的问题,并将要求安装其他包等,如其他答案所解释的那样。
apt-get dist-upgrade
对于稳定的环境是危险的,
- 错误的source.list设置,你最终破坏了ubuntu。
- 您可能会将整个应用程序升级到您不想要的版本。
使用案例:内核升级保留回来,你只想升级内核,不想升级整个发行版。
处理后备包装的更好方法:
sudo aptitude
如果您保留了后备包,则应在列表顶部看到可升级包。
- 点击该列表中的+
- 击中g两次
- 如果被问到,请回答debconf的问题
- 按返回继续
- 按Q.
- 按是
你的后备包装好了。
为什么你不试试这个Unix SE答案 :
sudo apt-get --with-new-pkgs upgrade
这允许安装新包。 它会告诉您安装的软件包,并在实际安装之前提示您。
apt
命令 ( apt-get
友好替代 )共享此apt-get
选项 。
使用apt install
会将pkg标记为“手动安装”!! 要将其再次标记为“自动安装”,请使用apt-mark auto
(另请参阅子命令showmanual
)。 有关此答案的更多信息。
通常有两个原因可以看到此消息。
如果升级程序(通过sudo apt-get upgrade
)会导致添加或删除程序包,那么程序将被阻止。 在这种情况下,您可以使用sudo apt-get dist-upgrade
,然后可以添加或删除其他程序。
这很常见,通常不是问题。 偶尔(特别是在Ubuntu alpha期间) dist-upgrade
将提供删除许多其他程序,在这种情况下你可能想要取消它。
如果程序依赖于不可用的软件包或版本,则程序将被取消。 你真的不能做任何事情,只能在这种情况下等待,因为包基本上是可以卸载的。 当程序包无序地添加到存储库,重命名程序包或程序包停止提供虚拟程序包时,可能会发生这种情况。
你也可以尝试:
sudo aptitude safe-upgrade
。
它比full-upgrade
(最初命名为dist-upgrade)更安全,因为“除非未使用,否则不会删除包”。
从man aptitude
:
安全升级
将已安装的软件包升级到最新版本。 除非未使用/…/,否则不会删除已安装的软件包。除非提供了–no-new-installs命令行选项,否则可以安装当前未安装的软件包以解决依赖关系。
最有可能这些包被阻止,因为它们的安装会产生依赖性不一致。 这可能是因为您在活动开发,ppas下使用存档,或者因为您使用的镜像未完全更新。
在最后一种情况下,只需等待,当依赖关系得到解决时,它将在下次安装。
编辑:
还有另一种可能性,如果对它们进行保持,或者它们被固定,则可能会阻止包裹。
这通常是因为程序包添加了依赖项,并且升级不希望在未经许可的情况下为您添加它。
如果您运行:
sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0
然后,新版本应与其新依赖项一起安装。
这对我有用
sudo aptitude full-upgrade
我发现如果版本略有不同,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
这使得apt-get阻止了更新,但aptitude更新了它就好了。 我不确定使用哪种算法来确定是否应该更新包。 我猜这两个版本相同,只有不同的’限定符’。 但无论如何,apt-get不会更新它,但aptitude会。
发布新内核时遇到了这个问题。 (可能是因为我启用了不稳定的更新。)我发现安装最简单的方法是通过Ubuntu的图形安装程序( update-manager
)。
在我看来,阻止的包是与linux-headers和kernel相关的包。 我通过尝试解决通知区域中有红色感叹号并且无法更新包的问题来实现此目的。
为了解决这个问题,我没有使用dist-upgrade和手动apt-get install xxx 。
我做过和做过的事情简单而干净 :
sudo apt-get update sudo apt-get autoremove sudo apt-get autoclean sudo apt-get upgrade
我不得不手动确认Grub更新及其配置。
然后我只是使用计算机一段时间,然后标准更新对话框再次出现,最后包括内核和相关的“Ubuntu基础”部分。 更新没有任何问题,我不再看到任何阻止包。
此外,请记住,包括内核更新在内的那些* buntu更新对hibernate敏感非常重要 – 我已经多次遇到此问题,并且我总是通过重新启动计算机并执行上述步骤来解决此问题。
那么也许这就够了?!
(这里描述的情况与我2015年12月底的Xubuntu 15.10有关)
我使用synaptic遇到了这个问题,因为它似乎挂了,并尝试修复此问题,我重新启动并再次尝试。
然后我发现了一个信息性消息作为包的一部分,并为我提供了一些安装后的说明。
我必须点击“ 详细信息 ”,然后在阅读消息后退出“ q ”,然后事情正常进行。
这看起来像是重新安装后备包的正确方法:
apt-get install --reinstall libjpeg-progs
当libjpeg-progs
从Ubuntu 14.04升级到16.04后,至少这对我有用。 我相信你可以和任何其他后备应用程序一样,例如gimp
。
来源: https : //ubuntuforums.org/showthread.php?t = 2321702&p = 13476183#post13476183
实际上,您需要的交换机是dselect-upgrade
,它可以安装/删除所涉及的特定软件包的依赖关系。
我已阅读所有post,发现有许多有趣的解释。 我正在尝试所有这些但完全没有任何结果。 我有mysql-utilities的问题,我无法升级。 更新是由系统提出的。 所以,我想展示一些步骤来做到这一点。 当然,我会在某些时候重复所有上述post。 这是我的错误,是的,我已经找到已经存在的post,但我接下来应该怎么做?
下一步是:
sudo apt-get --purge remove mysql-utilities
我们可以在下面的图像中看到结果。 我删除包并通过命令检查:
sudo apt-get -f install
结果 – 很好! 后来我正确安装了这个新版本的软件包。
这样,我认为可以帮助更多新人,因为拥有其他包我们可以做同样的步骤。
有一次,我很抱歉,当我在某些地方重复其他post时。