apt说包裹已被退回,怎么办?


23

输出apt-get upgrade为:

The following packages have been kept back:
certbot python-acme python-certbot python-certbot-apache python-cryptography python-openssl

这是什么意思?我应该采取行动吗?如果是这样,该怎么办?

Answers:


37

快速简便的解决方案:

我有几次相同的问题。不要先做sudo apt-get dist-upgrade。很重要。****注意:此解决方案适用于基于Debian的计算机,但不适用于KDE Neon。要更新KDE Neon,必须使用sudo pkcon update。****

为什么?

它会使您的系统非常不稳定,程序可能会崩溃,并且您可能会失去操作系统中的许多功能。

必须单独安装每个软件包,但是在此过程中,其他依赖项也将自动安装,并且您的问题将在几分钟内得到解决。

以下解决方案没有任何问题。这是相当快捷和容易的。


首先,执行以下操作:

apt list --upgradable

  • 这将显示可以升级的软件包列表。

接下来,执行以下操作:

  • 从第一个软件包的列表的开头开始,然后键入:

sudo apt-get install package-name-here

  • 这将贯穿安装过程并提取/安装依赖项。

该过程完成后,请执行以下操作:

apt list --upgradable

  • 这将再次显示哪些软件包可以升级。您的软件包列表现在应该在减少。按照软件包列表进行操作,并apt list --upgradable在每次安装软件包后键入。这只需几分钟即可完成。

最后:

sudo apt-get autoclean

sudo apt-get update && sudo apt-get dist-upgrade

如果此解决方案适合您,请不要忘记对其进行投票,以便其他人可以使用正确的解决方案,并且该解决方案位于答案列表的顶部。

如果由于某种原因该解决方案对您不起作用,请参见下面用户GAD3R的回答。这也是一个很好的解决方案。

谢谢。


1
对我来说,这个软件包是最小的。您的指示效果很好。
DeanM '19

如果您使用的是KDE Neon,请不要使用此解决方案。
格雷戈里·史密瑟曼

11

这是什么意思?

The following packages have been kept back:

答案在这里

这意味着这些软件包的新版本由于某种原因将无法安装。可能的原因是损坏的依赖项(依赖于其的软件包没有可下载的版本)或新的依赖项(自上一版本以来,该软件包已依赖于新的软件包)。

我应该采取行动吗?

您需要使用dist-upgrade来安装新的依赖关系并升级软件包:

sudo apt-get dist-upgrade

dist-upgrade如果不需要,可以通过运行来解决此问题:

修复损坏的依赖关系

sudo apt-get -f install 

删除一些不再安装在系统上的软件包:

sudo apt-get autoclean

保留所需的包装:

echo "<package_name> hold" | dpkg --set-selections

重新配置命名包:

dpkg-reconfigure <package_name>

3

这个Unix SE答案

首先,如上所述,请不要对任何生产系统进行升级!尽管dist-upgrade可以“解决”保留的软件包,但绝对不是解决此问题的方法,如果在不知道对系统有何影响的情况下运行它,很可能会给您带来更多的痛苦。

如果升级软件包需要安装其他软件包,则在运行时将“保留” sudo apt-get upgrade

如上所述,您可以通过显式运行来手动安装这些“保留”软件包,sudo apt-get install [paste kept back packages here]但这会将这些软件包标记为“手动安装”,这通常不是我们想要的。

要自动安装升级“保留”软件包所需的任何其他软件包,同时不将“保留”软件包标记为手动安装,只需运行即可sudo apt-get --with-new-pkgs upgrade


更多关于这里的信息--with-new-pkgs以及其他选择的副作用。
Pablo A

2

我在博客中包含了这个答案。如果您想看到可以从此链接转到那里。

当您尝试升级(apt-get upgrade)时,以上错误在Ubuntu终端中非常常见。这通常是因为您安装的一个软件包的依赖关系已更改。为了升级,您还需要先进行升级。因此,解决该问题非常简单。您将能够看到这些错误消息下方包含的软件包。作为示例,我可以在列表中看到以下软件包:

gnome-software gnome-software-common linux-generic linux-headers-generic linux-image-generic snapd ubuntu-core-launcher ubuntu-software

不要只是键入sudo apt-get dist-upgrade它非常危险,因为它会安装所有待处理的更新。这会使您的工作环境处于高度不稳定的状态。

所以我的看法是用名牌

sudo apt-get install [package]

您可以用[package]错误消息中的任何软件包替换。您也可以将它们作为列表放置(只需复制并粘贴)。例如,我可以输入

sudo apt-get install gnome-software gnome-software-common linux-generic linux-headers-generic linux-image-generic snapd ubuntu-core-launcher ubuntu-software

如果你想做

sudo apt-get dist-upgrade

出于某种原因,只需确保使用Simulation选项-ssudo apt-get -s dist-upgrade)检查软件包列表,否则,如果没有该-s选项,您可以在接受之前终止执行。(您始终可以选择选项no)


2

最近,Debian安全更新引入了一些新的依赖项。在这种情况下,该linux-image软件包开始需要linux-firmware以及其他一些要求。因此,它们被阻止而不是由安装unattended-upgrade。经过一些测试并确认后,我能够选择性地安装那些软件包,而不会涉及其他未决的更新:

apt-get -yy install $(apt-get -s upgrade | sed '1,/kept back/d;/will be upgraded/,$d')


1

本文很好地总结了为什么会发生这种情况:

如果对已安装的某个软件包的依赖关系发生了更改,因此必须安装新的软件包才能执行升级,则该软件包将列为“保留”。

解决方案是使用以下命令显式安装它们

sudo apt install [packages]

您可能希望将这些软件包标记为自动安装,除非您自己关心它们,而不仅仅是满足依赖关系。

sudo apt-mark auto [packages]

为了避免这种情况的发生,我建议使用

sudo apt --with-new-pkgs upgrade

在将来升级软件包,从而允许安装新软件包来满足依赖性方面的更改。


两个大拇指--with-new-pkgs!让我再次强调, 请勿对任何生产系统进行分布式升级!尽管分布式升级将“解决”保留的软件包,但这绝对不是解决此问题的方法,并且如果您愿意,可能会给您带来更多的痛苦而不是好的在不知道对系统有何影响的情况下运行它。”
xpt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.