RHEL9.4换Rocky源后,openssl报错别慌!手把手教你修复libs与fips-provider冲突(附EFI启动修复脚本)

张开发
2026/4/19 13:18:01 15 分钟阅读

分享文章

RHEL9.4换Rocky源后,openssl报错别慌!手把手教你修复libs与fips-provider冲突(附EFI启动修复脚本)
RHEL9.4迁移Rocky源后openssl冲突全解从报错分析到EFI启动修复最近在帮客户做RHEL9.4到Rocky Linux 9.4的迁移时遇到了一个棘手的问题——更换软件源后openssl相关组件开始频繁报错严重时甚至导致系统无法正常启动。这个问题在Rocky官方论坛也有不少讨论但中文社区缺乏系统性的解决方案。经过反复测试验证我整理出一套完整的故障排查和修复流程包括EFI启动项丢失的补救措施。1. 故障现象与根源分析当你在RHEL9.4系统上执行以下操作后sudo sed -i s|^mirrorlist|#mirrorlist|g /etc/yum.repos.d/rocky-*.repo sudo sed -i s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g /etc/yum.repos.d/rocky-*.repo sudo dnf makecache系统可能会出现以下几种异常情况openssl命令执行时报libfips.so加载错误yum/dnf安装软件时提示openssl-libs与openssl-fips-provider冲突严重情况下系统重启后无法进入卡在grub救援模式核心冲突点在于RHEL将FIPS相关功能拆分到openssl-fips-provider包Rocky的openssl-libs包包含了RHEL中属于openssl-fips-provider的内容两个包都提供了/usr/lib64/ossl-modules/fips.so文件通过rpm查询可以验证这个问题rpm -qf /usr/lib64/ossl-modules/fips.so在纯RHEL系统会显示openssl-fips-provider而混合源环境下可能显示两个包都提供该文件。2. 分步修复方案2.1 强制解决包冲突首先需要清理冲突的包关系建议在操作前备份重要数据# 备份现有openssl相关包 rpm -qa | grep openssl openssl_packages_backup.txt # 强制移除冲突包 sudo rpm -e --nodeps openssl-fips-provider # 下载特定版本openssl组件 wget https://mirrors.aliyun.com/rockylinux/9.4/AppStream/x86_64/os/Packages/openssl-libs-3.0.7-27.el9.x86_64.rpm wget https://mirrors.aliyun.com/rockylinux/9.4/AppStream/x86_64/os/Packages/openssl-3.0.7-27.el9.x86_64.rpm # 强制安装Rocky版本 sudo rpm -ivh --force --nodeps openssl-libs-3.0.7-27.el9.x86_64.rpm sudo rpm -ivh --force --nodeps openssl-3.0.7-27.el9.x86_64.rpm # 清理临时文件 rm -f openssl-*.rpm2.2 验证修复结果执行以下检查命令确认修复成功# 检查文件归属 ls -l /usr/lib64/ossl-modules/fips.so # 验证openssl功能 openssl list -provider fips -verbose # 检查包依赖关系 rpm -q --whatprovides /usr/lib64/ossl-modules/fips.so正常情况应该只显示openssl-libs包提供该文件且openssl命令能够正常列出FIPS提供者。3. EFI启动项修复方案如果修复后系统无法正常启动很可能是EFI启动项出了问题。以下是手动修复流程3.1 准备救援环境使用Rocky Linux 9.4安装ISO进入救援模式从ISO启动选择Troubleshooting进入Rescue a Rocky Linux system按照提示挂载原系统到/mnt/sysimage3.2 重建EFI启动项chroot /mnt/sysimage # 检查EFI分区情况 lsblk -o NAME,FSTYPE,MOUNTPOINT | grep -i efi # 重建grub配置 grub2-mkconfig -o /boot/grub2/grub.cfg # 修复EFI引导 efibootmgr | grep -i rocky || { boot_partition$(lsblk -o NAME,MOUNTPOINT | grep /boot/efi | awk {print $1}) disk_name$(echo $boot_partition | sed s/[0-9]*$//) part_num$(echo $boot_partition | grep -o [0-9]*$) efibootmgr --create --disk /dev/$disk_name --part $part_num \ --loader \EFI\rocky\shimx64.efi \ --label Rocky Linux \ --unicode }3.3 自动化修复脚本对于批量处理环境可以使用以下自动化脚本#!/bin/bash # 检查EFI环境 if [ -d /sys/firmware/efi ]; then echo 检测到EFI启动环境 # 备份现有配置 cp -a /boot/efi/EFI/redhat /boot/efi/EFI/redhat.bak 2/dev/null # 迁移引导文件 [ -d /boot/efi/EFI/rocky ] || { mkdir -p /boot/efi/EFI/rocky cp /boot/efi/EFI/redhat/* /boot/efi/EFI/rocky/ } # 获取当前启动信息 boot_id$(efibootmgr | grep BootCurrent | awk {print $2}) efi_info$(efibootmgr -v | grep -A1 Boot$boot_id) # 重建启动项 disk_path$(echo $efi_info | grep -o HD(.*)) part_num$(echo $efi_info | grep -o Part[0-9]* | grep -o [0-9]*) efibootmgr -b $boot_id -B efibootmgr --create --disk $disk_path --part $part_num \ --loader \EFI\rocky\shimx64.efi \ --label Rocky Linux \ --unicode # 更新grub配置 grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg fi4. 预防措施与最佳实践为避免类似问题建议在迁移前做好以下准备检查清单[ ] 备份/etc/yum.repos.d/目录[ ] 记录当前openssl相关包版本[ ] 准备系统救援ISO[ ] 确认EFI分区有足够空间(≥200MB)推荐的迁移步骤先测试在不更换源的情况下安装Rocky的openssl-libssudo dnf install --reporocky-appstream openssl-libs确认兼容性后再全面切换源sudo dnf config-manager --set-disabled rhel-* sudo dnf config-manager --set-enabled rocky-*定期验证关键组件# 验证openssl openssl version -a # 验证FIPS模式 openssl list -provider fips -verbose对于生产环境建议先在测试机上验证迁移过程特别是依赖FIPS认证的应用。遇到启动问题时记住救援模式下的关键命令# 挂载原有系统 mount /dev/mapper/rootvg-rootlv /mnt/sysimage mount /dev/nvme0n1p1 /mnt/sysimage/boot/efi mount -t proc proc /mnt/sysimage/proc mount -t sysfs sys /mnt/sysimage/sys mount -o bind /dev /mnt/sysimage/dev chroot /mnt/sysimage

更多文章