为何可升级的软件包没有升级?

为何可升级的软件包没有升级?

执行sudo apt update结束于

Reading package lists... Done
Building dependency tree       
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.

执行apt list --upgradable给了我

Listing... Done
onionshare/bionic,bionic 2.2.ppa1-1 all [upgradable from: 2.1-1]
ring-all/unknown 20190927.2.c2af011~dfsg1-1 amd64 [upgradable from: 20190629.2.c07ef23~dfsg1-1]

但执行sudo apt upgrade不会升级可升级的软件包:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
  1. 这是为什么?可能是未满足依赖关系?
  2. 我可以(手动)升级列出的软件包吗?如果可以,如何升级?

更新: 看这个Pastebin以获得完整的成绩单。

答案1

在这种情况下,“可升级包”实际上不可升级,因为它们具有未满足的依赖关系。

重现:尝试更新有问题的特定软件包(参见如何在 Ubuntu 中更新特定软件包) 执行sudo apt-get install --only-upgrade <packagename>。如果任何软件包有未满足的依赖关系,则升级将失败,原因是

E: Unable to correct problems, you have held broken packages.

升级这些软件包需要解决未满足的依赖关系。有关信息可以在“添加 PPA 后如何解决未满足的依赖关系?” 的答案“修复无法纠正的问题,您持有损坏的包裹”

答案2

您可以运行以下命令行来升级所有可升级的包及其依赖项:

sudo apt-get dist-upgrade

答案3

您的案例中缺少的软件包名称不一定与本例中的相同。但这显示了如何解决问题。无论您在输出中看到什么名称,该技术都有效。因此,请将实际文件名(如 ubuntu-advantage-tools 或 libnfsidmap1)替换为您的计算机显示需要升级的任何名称。

所有这些命令都需要以 root 身份运行。我们通过使用 sudo 在终端中更改用户来实现这一点,而无需实际以 root 身份登录会话。为此,请键入:

sudo su

...并在提示时输入您的 root 密码。 su 部分将切换用户。如果输入后没有其他内容,则默认切换到 root。现在您有权限彻底搞砸计算机,因此请谨慎使用“root”!

否则,您必须在所有这些命令前分别输入 sudo。一些 Linux 纯粹主义者认为 sudo su 是错误的,但我向您保证,这与为每个命令反复输入 sudo 完全相同。

跑步:

apt update

进而

apt upgrade

...你可能会得到如下输出:

1 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.

...显示有八个包未升级。

其他更新相关的命令可能会提供如下消息:

The following packages have been kept back: evolution evolution-common evolution-plugin-bogofilter evolution-plugin-pstimport evolution-plugins libevolution libnfsidmap1 ubuntu-advantage-tools

您需要修复这些列出的软件包,它们可能缺少依赖项,导致无法轻松升级。没有人想到在 apt upgrade 中包含一个子程序来自动处理这些问题。所以我们只能自己动手。

要列出软件包,您应该运行:

apt list --upgradable

然后您应该手动安装那些列出的包。

apt install evolution evolution-common evolution-plugin-bogofilter evolution-plugin-pstimport evolution-plugins libevolution libnfsidmap1

请注意,您只需输入所有软件包的名称,并在名称之间留一个空格,而不必对每个软件包单独运行 apt install。您可以直接从终端中复制此列表,该列表来自之前未升级的输出。在终端中处理内容时,您必须右键单击并选择“复制”或“粘贴”。Ctrl C 和 Ctrl V 键盘命令在终端输出上不起作用。

当然,完成所有这些操作可能仍无法解决所有问题。您可能会得到如下输出:

6 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

或者

2 packages can be upgraded. Run 'apt list --upgradable' to see them.

然后您可以运行:

apt-get --with-new-pkgs upgrade

...显示剩余的包。这将输出类似

The following packages have been kept back: libnfsidmap1 ubuntu-advantage-tools

然后,你只需要手动单独安装它们,因为某些不合理的原因。就我而言,我输入了:

apt install ubuntu-advantage-tools

apt install libnfsidmap1

再次强调,这里安装的内容的名称应该替换为您的计算机所称的未升级的内容。

这应该可以解决之前使用 list 命令时无法安装的其余两个问题。运行 apt update 然后 apt upgrade 应该会输出:

0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

完毕!

您可能还想运行:

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

进而

sudo apt autoremove

正如我在其他地方看到的建议。但仅凭这一点并不能解决我的问题。

答案4

我建议运行:

sudo apt-get upgrade

这对我有用。它会告诉你有多少个包裹已升级,有多少是新的已安装,有多少删除,以及有多少人没有升级(被阻止)。

我有一些包裹被扣留了,所以读完之后这个帖子,它提供了多种解决方案,我运行了以下命令来安装保留的软件包:

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

这还将包括不再需要包并且可以删除。根据输出的说明,我运行了以下命令来删除它们:

sudo apt autoremove

最后,我再次运行了第一个代码,只是为了确保一切都清楚,并会得到输出“0 升级,0 新安装,0 删除和 0 未升级”。

相关内容