我的任务是为一些高性能 RHEL8 工作站和服务器设置自动更新。
我不喜欢这样做,因为无人值守的更新可能会出很多问题,但是,似乎引发错误和数据丢失比让计算机至少每周不更新“更安全”……
目标计算机使用zfs
和kmod-nvidia
(分别来自 zfsonlinux.org 和www.elrepo.org);两个 RPM 都需要匹配的内核“版本”,因此我想要实施的第一个安全措施是确保当有新内核可用时,安装的zfs
和kmod-nvidia
(或其可用更新)与其兼容。
例如,现在有一个新的内核:
$ sudo dnf update --assumeno
Updating Subscription Management repositories.
Last metadata expiration check: 0:57:59 ago on Thu 28 Nov 2024 12:08:30 AM CET.
Dependencies resolved.
==========================================================================================================================================================
Package Architecture Version Repository Size
==========================================================================================================================================================
Installing:
kernel x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 10 M
Upgrading:
bpftool x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 11 M
kernel-headers x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 12 M
kernel-tools x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 11 M
kernel-tools-libs x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 10 M
pam x86_64 1.3.1-36.el8_10 rhel-8-for-x86_64-baseos-rpms 748 k
python3-perf x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 11 M
webkit2gtk3 x86_64 2.46.3-2.el8_10 rhel-8-for-x86_64-appstream-rpms 28 M
webkit2gtk3-jsc x86_64 2.46.3-2.el8_10 rhel-8-for-x86_64-appstream-rpms 4.5 M
Installing dependencies:
kernel-core x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 43 M
kernel-devel x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 24 M
kernel-modules x86_64 4.18.0-553.30.1.el8_10 rhel-8-for-x86_64-baseos-rpms 36 M
Transaction Summary
==========================================================================================================================================================
Install 4 Packages
Upgrade 8 Packages
Total download size: 202 M
安装的kmod-nvidia
接缝兼容:
$ sudo dnf repoquery --requires kmod-nvidia | awk '$1 == "kernel"'
kernel >= 4.18.0-553.el8_10
但我不知道该说些什么,因为其 RPM 中zfs
没有提到任何要求:kernel
$ sudo dnf repoquery --requires zfs
Updating Subscription Management repositories.
/bin/sh
/usr/bin/python3.6
libblkid.so.1()(64bit)
libblkid.so.1(BLKID_1.0)(64bit)
libc.so.6(GLIBC_2.28)(64bit)
libcrypto.so.1.1()(64bit)
libdl.so.2()(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libnvpair.so.3()(64bit)
libnvpair3(x86-64) = 2.1.15-1.el8
libnvpair3(x86-64) = 2.1.15-2.el8
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.12)(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
librt.so.1()(64bit)
librt.so.1(GLIBC_2.3.3)(64bit)
libtirpc.so.3()(64bit)
libudev.so.1()(64bit)
libudev.so.1(LIBUDEV_183)(64bit)
libuuid.so.1()(64bit)
libuuid.so.1(UUID_1.0)(64bit)
libuutil.so.3()(64bit)
libuutil3(x86-64) = 2.1.15-1.el8
libuutil3(x86-64) = 2.1.15-2.el8
libz.so.1()(64bit)
libzfs.so.4()(64bit)
libzfs5(x86-64) = 2.1.15-1.el8
libzfs5(x86-64) = 2.1.15-2.el8
libzfs_core.so.3()(64bit)
libzpool.so.5()(64bit)
libzpool5(x86-64) = 2.1.15-1.el8
libzpool5(x86-64) = 2.1.15-2.el8
openssl
rtld(GNU_HASH)
sysstat
systemd
util-linux
zfs-kmod = 2.1.15
如何验证已安装的(或可用的更新)zfs
是否与新内核兼容?
内核依赖项未在主
zfs
包中指定,而是分别在zfs-dkms
或kmod-zfs
包中指定,具体取决于您使用的变体存储库。来自 openzfs.github.io 上的 OpenZFS 文档:
由于您的依赖项列表
zfs
已包含zfs-kmod
,因此似乎您已经在这样做了。但是,与 不同的是
kmod-nvidia
,kmod-zfs
该变体存储库中可用的软件包在内核符号级别跟踪内核依赖关系,而不是在内核包版本级别:另一方面,该
zfs-dkms
软件包指定了相对于kernel-devel
软件包的依赖关系,并且可以接受更广泛的内核版本:对于 DKMS,内核模块(重新)构建由引导加载程序更新步骤之前的内核包安装后阶段触发,如果失败,则应将其视为内核包安装失败。换句话说,如果 DKMS 无法为新内核提供兼容的内核模块,则新内核的安装将无法完成。
使用
kmod-zfs
,内核符号依赖项应该阻止不兼容的内核 RPM 安装,直到 ZFS 也可以更新以匹配新内核。换句话说,您已经拥有了相当于您所设想的安全措施。