跳转到内容

EL 8 升级到 EL 9

从 EL 8(CentOS 8、AlmaLinux 8、Rocky Linux 8)升级到 EL 9 是一次跨大版本升级。本文档以 Leapp 和 ELevate 工具为核心,介绍完整的升级流程。

源系统目标系统工具
CentOS 8 / CentOS Stream 8AlmaLinux 9 / Rocky Linux 9ELevate
AlmaLinux 8AlmaLinux 9Leapp / ELevate
Rocky Linux 8Rocky Linux 9Leapp / ELevate
  • 系统已更新到 EL 8 的最新小版本
  • 至少 2 GB 可用磁盘空间(/var 分区)
  • 可靠的系统备份
  • 物理或远程控制台访问(非仅 SSH)
确保 EL 8 已更新到最新
dnf update -y
reboot
确认当前系统版本
cat /etc/redhat-release
uname -r
备份关键数据和配置
# 备份 /etc 目录
tar czf /root/etc-backup-$(date +%Y%m%d).tar.gz /etc/
# 备份已安装的包列表
rpm -qa --qf '%{NAME}\n' | sort > /root/installed-packages-el8.txt
# 备份分区表
fdisk -l > /root/partition-table.txt
# 备份引导配置
cp -a /boot/grub2/ /root/grub2-backup/
安装 ELevate 仓库
dnf install -y http://repo.almalinux.org/elevate/elevate-release-latest-el8.noarch.rpm

根据目标系统安装对应的数据包:

升级到 AlmaLinux 9
dnf install -y leapp-upgrade leapp-data-almalinux
升级到 Rocky Linux 9(如需)
dnf install -y leapp-upgrade leapp-data-rocky
升级到 CentOS Stream 9(如需)
dnf install -y leapp-upgrade leapp-data-centos
执行升级前评估
leapp preupgrade

此命令会生成详细的报告,列出所有需要处理的问题。

查看预升级报告
cat /var/log/leapp/leapp-report.txt
移除无效仓库
# 禁用不兼容的第三方仓库
dnf config-manager --disable <仓库名>
确认 PAM 模块兼容性
leapp answer --section authselect_check.confirm=True
手动指定 GRUB 设备
echo 'GRUB_DEVICE=/dev/sda' >> /etc/default/leapp
移除第三方内核模块
rmmod <模块名>
# 并从 /etc/modules-load.d/ 中移除对应配置
列出非官方仓库的包
dnf list installed | grep -v '@baseos' | grep -v '@appstream'
创建自定义 Leapp Actor 忽略特定包
# 编辑 /etc/leapp/transaction/to_remove 添加要移除的包
echo "自定义包名" >> /etc/leapp/transaction/to_remove
# 编辑 /etc/leapp/transaction/to_keep 添加要保留的包
echo "需要保留的包名" >> /etc/leapp/transaction/to_keep
执行原地升级
leapp upgrade

升级过程需要较长时间,请耐心等待。

重启系统以完成升级
reboot
确认已升级到 EL 9
cat /etc/redhat-release
uname -r
rpm -q kernel-core
检查失败的服务
systemctl --failed
检查网络配置
ip addr show
nmcli connection show
ping -c 3 8.8.8.8
检查仓库配置
dnf repolist
dnf check-update
清理 Leapp 升级数据
# 移除旧版本的包
dnf remove -y leapp-upgrade leapp-data-* elevate-release
# 清理旧的 EL 8 内核
dnf remove -y $(rpm -qa | grep el8 | grep kernel)
# 移除 Leapp 残留数据
rm -rf /var/log/leapp /root/tmp_leapp_py3
重建 RPM 数据库
rpm --rebuilddb
重新标记 SELinux
fixfiles -B onboot
reboot

EL 9 默认使用 NetworkManager key-file 格式替代旧的 ifcfg 格式。

迁移网络配置到新格式
nmcli connection migrate

EL 9 默认禁用了一些旧的加密算法。

检查 SSH 加密策略
update-crypto-policies --show

如果需要临时兼容旧客户端:

临时降低加密策略(不推荐长期使用)
update-crypto-policies --set DEFAULT:SHA1

EL 9 默认 Python 版本为 3.9,不再提供 Python 2。

检查 Python 版本
python3 --version
alternatives --list | grep python
检查并重置 PHP 模块流
dnf module list php
dnf module reset php
dnf module enable php:8.1
检查共享库依赖是否满足
for bin in /usr/local/bin/*; do
ldd "$bin" 2>&1 | grep "not found" && echo " --> $bin"
done
验证自定义服务文件
systemd-analyze verify /etc/systemd/system/*.service 2>&1 | grep -v "^$"
对比包变更
rpm -qa --qf '%{NAME}\n' | sort > /root/installed-packages-el9.txt
diff /root/installed-packages-el8.txt /root/installed-packages-el9.txt

如果升级过程中断或失败:

查看升级日志
cat /var/log/leapp/leapp-upgrade.log
journalctl -b -p err

如果事先创建了 LVM 快照或虚拟机快照,直接恢复是最可靠的回滚方式。

从 LVM 快照恢复(如适用)
lvconvert --merge /dev/vg0/pre-upgrade-snap
reboot