Fui encarregado de configurar atualizações automáticas em algumas estações de trabalho e servidores RHEL8 de alto desempenho.
Não gosto disso, pois muitas coisas podem dar errado com atualizações não supervisionadas, mas bem, parece que provocar bugs e perdas de dados é "mais seguro" do que ter computadores não atualizados pelo menos semanalmente...
Os computadores de destino usam zfs
e kmod-nvidia
(de zfsonlinux.org e www.elrepo.org , respectivamente); ambos os RPMs precisam de uma "versão" de kernel correspondente, então a primeira medida de segurança que eu gostaria de implementar é garantir que, quando um novo kernel estiver disponível, o e instalado zfs
( kmod-nvidia
ou sua atualização disponível) seja compatível com ele.
Por exemplo, agora há um novo kernel:
$ 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
As kmod-nvidia
costuras instaladas são compatíveis:
$ sudo dnf repoquery --requires kmod-nvidia | awk '$1 == "kernel"'
kernel >= 4.18.0-553.el8_10
Mas não sei o que dizer sobre zfs
, pois não há menção de nenhum kernel
requisito em seu RPM:
$ 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
Como posso verificar se a atualização instalada (ou disponível) zfs
é compatível com o novo kernel?
As dependências do kernel não são especificadas no
zfs
pacote principal, mas nos pacoteszfs-dkms
oukmod-zfs
respectivamente, dependendo de qual repositório variante você está usando.Da documentação do OpenZFS em openzfs.github.io:
Como sua lista de dependências
zfs
já incluizfs-kmod
, parece que você já está fazendo isso.Entretanto, diferentemente do
kmod-nvidia
, okmod-zfs
pacote disponível nesse repositório de variantes rastreia dependências do kernel no nível do símbolo do kernel, não no nível da versão do pacote do kernel:Por outro lado, o
zfs-dkms
pacote especifica suas dependências em relação aokernel-devel
pacote e pode aceitar uma gama maior de versões do kernel:Com o DKMS, a (re)construção do módulo do kernel é acionada pela fase de pós-instalação do pacote do kernel antes da etapa de atualização do bootloader e, se falhar, deve ser tratada como uma falha de instalação do pacote do kernel. Em outras palavras, se o DKMS não puder fornecer um módulo do kernel compatível para o novo kernel, a instalação do novo kernel não será concluída.
Com
kmod-zfs
, as dependências do símbolo do kernel devem bloquear a instalação de um RPM do kernel não compatível até que o ZFS também possa ser atualizado para corresponder ao novo kernel.Em outras palavras, você já tem um equivalente da medida de segurança que imaginou em vigor.