为什么内核 4.4.0-135 需要显式升级而不是通常的 apt 升级?

为什么内核 4.4.0-135 需要显式升级而不是通常的 apt 升级?

在几个 Ubuntu(16.04 LTS、Xenial)系统上apt list --upgradable告诉我内核升级可用:

$ apt list --upgradable
initramfs-tools/xenial-updates,xenial-updates 0.122ubuntu8.12 all [upgradable from: 0.122ubuntu8.11]
initramfs-tools-bin/xenial-updates 0.122ubuntu8.12 amd64 [upgradable from: 0.122ubuntu8.11]
initramfs-tools-core/xenial-updates,xenial-updates 0.122ubuntu8.12 all [upgradable from: 0.122ubuntu8.11]
linux-generic/xenial-updates 4.4.0.135.141 amd64 [upgradable from: 4.4.0.134.140]
linux-headers-generic/xenial-updates 4.4.0.135.141 amd64 [upgradable from: 4.4.0.134.140]
linux-image-generic/xenial-updates 4.4.0.135.141 amd64 [upgradable from: 4.4.0.134.140]

然而apt upgrade不是升级内核。相反,apt upgrade linux-generic需要一个显式的(或其他软件包之一)并安装软件包4.4.0-135

$ apt-get upgrade linux-generic --dry-run
  .. snip ..
The following NEW packages will be installed:
  linux-headers-4.4.0-135 linux-headers-4.4.0-135-generic linux-image-4.4.0-135-generic linux-image-extra-4.4.0-135-generic
The following packages will be upgraded:
  initramfs-tools initramfs-tools-bin initramfs-tools-core linux-generic linux-headers-generic linux-image-generic
6 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.

这很不寻常。为什么linux-generic突然需要一个-version包裹?-130-133和版本134不需要明确升级或dist-upgrade,并且使用apt upgrade或进行安装unattended-upgrade。 有什么特别之处吗4.4.0-135

(注:我知道如何升级内核,我想知道为什么 4.4.0-135不遵循通常的apt upgrade政策)

答案1

apt!=apt-get

传统的apt-get有以下升级相关命令:

  • apt-get upgrade将升级软件包到较新的版本没有安装新的或删除其他包。
  • apt-get dist-upgrade也会升级软件包,但如果有必要,也可以通过安装新的软件包或删除旧的软件包来处理依赖关系发生变化的升级。

较新的界面apt解释了不同的选项:

  • apt upgrade当然会再次升级软件包,但与 不同,它也可以安装新软件包来满足不断变化的依赖关系apt-get upgrade。但它永远不会删除软件包。
  • apt full-upgrade相当于,apt-get dist-upgrade如果新软件包版本的依赖项发生变化,它可以安装和删除软件包。

内核升级的工作原理是将元软件包(例如linux-image-generic)升级到较新的版本,然后对最新linux-image-X.Y.Z-AAA-generic软件包的依赖性会发生变化。这意味着,apt-get upgrade永远无法升级内核,但apt-get dist-upgradeapt full-upgrade甚至apt upgrade可以。

答案2

在 Ubuntu 中,我们不升级内核。实际上,我们安装较新的版本并保留旧版本,以防新内核启动系统时出现任何故障,并删除其他版本。

如您所知,升级系统时安装新软件包需要使用apt-get dist-upgrade

linux-generic软件包是一个虚拟软件包。虚拟软件包会将您指向真正的软件包:

apt show linux-generic

它将始终依赖于最新的完整的通用 Linux 内核和头文件。

因此,我们无需检查新版本并手动安装,Hitlinux-generic将为我们完成这项工作。

最后当你使用时apt upgrade它将安装新的软件包而apt-get需要dist-upgrade安装新的软件包。

相关内容