为什么可升级包没有升级?

mar*_*oju 14 upgrade updates apt

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

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

但执行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.
Run Code Online (Sandbox Code Playgroud)
  1. 这是为什么?可能未满足的依赖项?
  2. 我可以(手动)升级列出的软件包吗?如果可以:如何升级?

更新:请参阅此 pastebin以获取完整的成绩单。

mar*_*oju 35

在这种情况下,\xe2\x80\x9cupgradable 包\xe2\x80\x9d 实际上是不可升级的,因为它们具有未满足的依赖关系。

\n

重现:尝试通过执行来更新有问题的特定包(请参阅如何在 Ubuntu 中更新特定包sudo apt-get install --only-upgrade <packagename>。如果任何软件包具有未满足的依赖关系,则升级将由于以下原因而失败

\n

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

\n

升级这些包需要解决未满足的依赖关系。有关信息可以在\xe2\x80\x9c 添加 PPA 后如何解决未满足的依赖关系?\xe2\x80\x9d\xe2\x80\x9c的答案中找到xe2\x80\x9d

\n

  • 在某些情况下这可能是正确的,但对我来说不是。我运行了“sudo apt full-upgrade”和“sudo apt-get dist-upgrade”,并且都报告了 5 个软件包被保留,但是当我运行“sudo apt install”并给出了软件包的名称时,它们全部更新,没有任何问题。 (4认同)

use*_*788 13

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

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

sudo su
Run Code Online (Sandbox Code Playgroud)

...并在出现提示时输入您的 root 密码。su 部分将切换用户。当输入后没有任何其他内容时,默认切换到 root。现在你已经获得了彻底搞砸计算机的权限,所以要小心“root”!

否则,您必须在所有这些命令前面单独键入 sudo。一些 Linux 纯粹主义者认为 sudo su 是错误的,但我向你保证,这与为每个命令一遍又一遍地输入 sudo 完全相同。

跑步:

apt update
Run Code Online (Sandbox Code Playgroud)

进而

apt upgrade
Run Code Online (Sandbox Code Playgroud)

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

1 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
Run Code Online (Sandbox Code Playgroud)

...显示八个未升级的软件包。

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

The following packages have been kept back: evolution evolution-common evolution-plugin-bogofilter evolution-plugin-pstimport evolution-plugins libevolution libnfsidmap1 ubuntu-advantage-tools
Run Code Online (Sandbox Code Playgroud)

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

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

apt list --upgradable
Run Code Online (Sandbox Code Playgroud)

然后您应该手动安装这些列出的软件包。

apt install evolution evolution-common evolution-plugin-bogofilter evolution-plugin-pstimport evolution-plugins libevolution libnfsidmap1
Run Code Online (Sandbox Code Playgroud)

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

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

6 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Run Code Online (Sandbox Code Playgroud)

或者

2 packages can be upgraded. Run 'apt list --upgradable' to see them.
Run Code Online (Sandbox Code Playgroud)

然后您可以运行:

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

...显示剩余的包。这应该输出类似的内容

The following packages have been kept back: libnfsidmap1 ubuntu-advantage-tools
Run Code Online (Sandbox Code Playgroud)

然后你只需要出于某种不正当的原因单独手动安装它们。就我而言,我输入:

apt install ubuntu-advantage-tools
Run Code Online (Sandbox Code Playgroud)

apt install libnfsidmap1
Run Code Online (Sandbox Code Playgroud)

同样,此处安装的名称应替换为您的计算机显示未升级的名称。

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

0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Run Code Online (Sandbox Code Playgroud)

完毕!

您可能还想运行:

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

进而

sudo apt autoremove
Run Code Online (Sandbox Code Playgroud)

正如我在其他地方看到的建议。但仅此一点并没有解决我的问题。


小智 7

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

sudo apt-get dist-upgrade

  • 命令“sudo apt-get dist-upgrade”不会升级所有可升级包及其依赖项。我的输出是:```读取软件包列表...完成构建依赖关系树读取状态信息...完成计算升级...完成以下软件包已被保留:ring-all 0升级,0新安装,0删除且 1 未升级。``` (与 `sudo apt update` 和 `sudo apt full-upgrade` 相同) (9认同)