linux运维升级rhel8后systemd[1]: Freezing execution

在对 RHEL 8.2 操作系统进行安全补丁安装并升级到 RHEL 8.3 后,系统无法引导。连接显示器发现有如下报错:systemd[1]: Freezing execution
当使用 yum 命令应用升级或安全更新补丁程序时,可以看到以下消息:

[...]
error: failed to exec scriptlet interpreter /sbin/ldconfig: Operation not permitted
warning: %post(openssl-libs-1:1.1.1g-11.el8.x86_64) scriptlet failed, exit status 127
[...]
error: failed to exec scriptlet interpreter /sbin/ldconfig: Operation not permitted
warning: %post(libdb-5.3.28-39.el8.x86_64) scriptlet failed, exit status 127
[...]

然后,系统可能会崩溃:

Running scriptlet: systemd-239-41.el8_3.x86_64 130/499
Upgrading : systemd-239-41.el8_3.x86_64 130/499
Running scriptlet: systemd-239-41.el8_3.x86_64 130/499
 
[ ...] printk: systemd: 48 output lines suppressed due to ratelimiting
[ ...] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f00
[ ...]
[ ...] CPU: 0 PID: 1 Comm: systemd Kdump: loaded Not tainted 4.18.0-193.19.1.el8_2.x86_64 #1
[ ...] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-2.fc32 04/01/2014
[ ...] Call Trace:
[ ...] dump_stack+0x5c/0x80
[ ...] panic+0xe7/0x2a9
[ ...] do_exit.cold.22+0x20/0x71
[ ...] do_group_exit+0x3a/0xa0
[ ...] __x64_sys_exit_group+0x14/0x20
[ ...] do_syscall_64+0x5b/0x1a0
[ ...] entry_SYSCALL_64_after_hwframe+0x65/0xca
[ ...] RIP: 0033:0x7f4a5f4164be
[ ...] Code: 89 fa 41 b8 e7 00 00 00 be 3c 00 00 00 eb 14 0f 1f 44 00 00 89 d7 89 f0 0f 05 48 3d 00 f0 ff ff 77 1a f4 89 d7 44 89 c0 0f 05 <48> 3d 00 f0 ff ff 76 e2 f7 d8 89 05 32 dc 20 00 eb d8 f7 d8 89 05
[ ...] RSP: 002b:00007ffc0f36b9a8 EFLAGS: 00000202 ORIG_RAX: 00000000000000e7
[ ...] RAX: ffffffffffffffda RBX: 00007f4a5f41ed38 RCX: 00007f4a5f4164be
[ ...] RDX: 000000000000007f RSI: 000000000000003c RDI: 000000000000007f
[ ...] RBP: 00007f4a5f6209e0 R08: 00000000000000e7 R09: 00007ffc0f36b8b8
[ ...] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000001
[ ...] R13: 0000000000000003 R14: 00007f4a5f624150 R15: 0000000000000000

原因

该问题是由于在更新时系统上已启用 fapolicyd 服务造成的。在 yum 更新了 systemd 软件包时, fapolicyd-0.9.1-4.el8 (由 RHEL 8.2 提供)不再信任已经在运行的 /usr/lib/systemd/systemd 执行文件,这使得 systemd 无法重新执行自己,并导致系统崩溃(因为 PID 1 已死掉)

如何恢复出问题的系统

1,修复yum

(a)在另外一个和损坏系统相同版本的操作系统上,下载yum正常工作所需的包

# mkdir /tmp/miniroot /tmp/packages
# yum install --downloadonly --installroot=/tmp/miniroot --releasever=7.6 --downloaddir=/tmp/packages yum

(b)使用 DVD 将损坏的系统启动到救援模式
(c)通过选择选项让救援环境将根文件系统装载到下/mnt/sysimage

[...]
1) Continue
2) Read-only mount
3) Skip to shell
4) Quit (Reboot)
Please make a selection from the above: 1
Please press ENTER to get a shell:
sh-4.4#

(d)将下载的包复制到损坏的系统/tmp/packages
(e)强制重新安装yum

# rpm -U --force --root=/mnt/sysimage /tmp/packages/*.rpm

如果命令因冲突而失败,请使用以下命令重试:

# rpm -U --nodeps --force --root=/mnt/sysimage /tmp/packages/*.rpm

(f)输入 chroot 并验证yum现在是否正常工作

# chroot /mnt/sysimage
# yum check-update

2,从 chroot 中,删除重复项

bash-4.4# yum -y remove --duplicates

3,从 chroot 中,再次更新系统

bash-4.4# yum -y update

4,在 chroot 中,验证系统的二进制文件

bash-4.4# rpm -Va

5,从 chroot 中退出并再次退出,使系统重启

bash-4.4# exit
sh-4.4# exit

如何正常升级

如果计划完全升级系统,在确保 fapolicyd 软件包会被更新到 fapolicyd-1.0-3.el8_3.2 后,可以安全地使用 yum update 命令进行。
1,验证 fapolicyd 软件包已安装在系统上

# rpm -q fapolicyd
fapolicyd-0.9.1-4.el8.x86_64

2,如果系统上还没有该软件包,可以使用常规的 yum update 命令安全地进行更新。否则,请继续。
将 fapolicyd 软件包更新为 fapolicyd-1.0-3.el8_3.2。

# yum -y update fapolicyd

3,验证新版本的 fapolicyd 软件包已安装在系统上

# rpm -q fapolicyd
fapolicyd-1.0-3.el8_3.2

4,继续进行其余的更新或仅安装安全更新

# yum -y update
# yum -y update --security

原创文章,作者:保哥运维实战侠笔记,如若转载,请注明出处:https://www.shizhanxia.com/biji/391.html

发表评论

登录后才能评论