在几个 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-upgrade
,apt 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
安装新的软件包。