跳转到内容

EL 9 升级到 EL 10

从 EL 9(AlmaLinux 9、Rocky Linux 9、CentOS Stream 9)升级到 EL 10 是一次跨大版本升级。本文以 Leapp 和 ELevate 工具为核心,介绍完整的升级流程及重要注意事项。

升级前请充分了解 EL 10 的关键变化,以评估升级风险:

变化项EL 9EL 10
包管理器DNF 4DNF 4.20(仍是 DNF 4,命令兼容)
Python 默认版本3.93.12
Rootless 容器网络slirp4netnspasta
NetworkManager 配置格式keyfile(ifcfg 已弃用)仅 keyfile(ifcfg 彻底移除)
默认加密策略DEFAULT(允许 SHA-1)DEFAULT(禁用 SHA-1)
Podman 版本4.x5.x
源系统目标系统工具
AlmaLinux 9AlmaLinux 10ELevate(含 Leapp)
Rocky Linux 9Rocky Linux 10ELevate(含 Leapp)
CentOS Stream 9CentOS Stream 10ELevate(leapp-data-centos)
  • 系统已更新到 EL 9 的最新小版本
  • 至少 5 GB 可用磁盘空间(//var 分区)
  • 完整的系统备份(快照、备份文件)
  • 物理或远程控制台访问(升级过程中会多次重启)
  • 检查所有关键应用与 EL 10 的兼容性
  • CPU 必须支持 x86_64-v2 微架构(EL 10 最低要求,老旧 CPU 会被 Leapp 阻断)
确保 EL 9 已更新到最新
sudo dnf update -y
sudo reboot
确认当前系统版本
cat /etc/redhat-release
uname -r
备份关键数据和配置
# 备份 /etc 目录
sudo tar czf /root/etc-backup-$(date +%Y%m%d).tar.gz /etc/
# 列出已安装的包(升级后对比用)
rpm -qa --qf '%{NAME}\n' | sort > /root/packages-before-upgrade.txt

EL 10 完全移除了 ifcfg 格式,升级前先迁移到 keyfile:

将 ifcfg 配置迁移为 keyfile 格式
sudo nmcli connection migrate
ls /etc/NetworkManager/system-connections/

确认是否有依赖 SHA-1 的服务(如旧 SSH 密钥、自签名证书):

查看当前加密策略
update-crypto-policies --show
# 检查 SSH 主机密钥类型
ls -la /etc/ssh/ssh_host_*_key

使用 ELevate 升级(AlmaLinux / Rocky Linux)

Section titled “使用 ELevate 升级(AlmaLinux / Rocky Linux)”
安装 ELevate 仓库(AlmaLinux 为例)
sudo dnf install -y http://repo.almalinux.org/elevate/elevate-release-latest-el9.noarch.rpm

根据目标发行版选择对应的数据包:

AlmaLinux 9 → AlmaLinux 10
sudo dnf install -y leapp-upgrade leapp-data-almalinux
Rocky Linux 9 → Rocky Linux 10
sudo dnf install -y leapp-upgrade leapp-data-rocky
执行升级预检查
sudo leapp preupgrade

预检查会生成报告,列出所有阻断项(inhibitors)和警告。必须解决所有阻断项才能继续升级

查看报告:

查看详细预检查报告
sudo cat /var/log/leapp/leapp-report.txt

SHA-1 相关警告

Terminal window
# 如果报告 SHA-1 相关问题,在升级后重新生成 SSH 主机密钥
# 暂时允许 SHA-1 以完成升级(升级后需恢复)
sudo update-crypto-policies --set DEFAULT:SHA1

内核模块阻断

部分旧内核模块在 EL 10 不可用,需先卸载:

Terminal window
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True

解决所有阻断项后,执行升级:

开始升级(系统将多次重启)
sudo leapp upgrade
sudo reboot

升级过程大约需要 20-40 分钟,系统会自动重启进入升级环境,完成后再次重启进入 EL 10。

确认系统版本
cat /etc/redhat-release
uname -r
清理升级遗留的旧包
sudo dnf remove $(rpm -qa | grep -i 'el9\|leapp') --skip-broken -y
sudo dnf autoremove -y
sudo dnf distro-sync -y
确认网络正常
nmcli connection show
ip addr
ping -c 3 8.8.8.8

升级后恢复标准策略(如果之前临时修改了):

恢复默认加密策略
sudo update-crypto-policies --set DEFAULT
# 重新生成 SSH 主机密钥(如有需要)
sudo ssh-keygen -A

EL 10 仍使用 DNF 4(4.20),确认升级后版本正常:

确认 DNF 版本
dnf --version
# 应显示 4.20.x

EL 10 默认不再下载 filelists 元数据。如果某些依赖文件路径的查询报错,可以加上:

临时加载 filelists 元数据
sudo dnf --setopt=optional_metadata_types=filelists repoquery -l <package>
检查所有服务状态
sudo systemctl --failed
sudo journalctl -p err -b

EL 10 不再分发 AppStream modular 内容dnf module 命令虽然仍然存在,但会显示弃用警告,且没有可用的模块流。

迁移方法:EL 9 中用 dnf module enable php:8.1 选版本的做法,在 EL 10 改为直接安装带版本号的包:

Terminal window
# EL 10 上直接安装具体版本的 PHP
sudo dnf install php8.2
# 或使用 Remi 等上游仓库获取更多版本选择

任何依赖 dnf module 的自动化脚本都需要在升级前提前适配。

Podman 5 默认使用 pasta 网络后端,如遇问题:

Terminal window
# 安装 slirp4netns 作为备选
sudo dnf install slirp4netns

SHA-1 被禁用后,旧的 RSA 密钥可能无法使用:

生成新的 Ed25519 密钥(推荐)
ssh-keygen -t ed25519 -C "your_email@example.com"

原地大版本升级没有官方的”撤销”命令。一旦 ELevate 已经替换系统软件包,唯一可靠的回退方式就是恢复升级前的完整备份。这也是为什么升级前的备份/快照不是可选项。

按部署形态选择回退手段:

环境升级前准备回滚方式
云主机(ECS/CVM 等)升级前打一个整机镜像/快照控制台用该快照回滚或重建实例
虚拟机(KVM/VMware)关机后克隆磁盘,或建虚拟机快照恢复磁盘/快照
物理机(LVM 根分区)lvcreate -s 建根卷快照 + 单独备份 /boot/etc从快照与备份恢复(见下)
物理机(无快照)完整文件级或块级备份(见备份策略重装 EL 9 后还原备份
物理机:升级前创建 LVM 根卷快照
# 假设根卷是 /dev/vg0/root,预留 10G 给快照
sudo lvcreate -s -L 10G -n root-pre-el10 /dev/vg0/root
# 同时单独备份 /boot 和关键配置(快照不覆盖它们)
sudo tar czf /backup/boot-pre-el10.tar.gz /boot
sudo tar czf /backup/etc-pre-el10.tar.gz /etc
回滚:从 LVM 快照合并恢复
# 1) 先还原 /boot——快照不含 /boot,必须在重启前恢复 EL 9 的内核与引导项,
# 否则合并后的 EL 9 根分区会配上 EL 10 的内核,导致无法启动或模块不匹配
sudo tar xzf /backup/boot-pre-el10.tar.gz -C /
# 2) 将根卷快照合并回原卷(下次激活/重启时生效)
sudo lvconvert --merge /dev/vg0/root-pre-el10
# 3) 重启使合并生效
sudo reboot

升级失败但系统仍能启动时,先不要急于回滚——多数问题是第三方仓库残留或个别服务未适配,参见上文升级后常见问题逐项排查;只有系统无法启动或核心业务无法恢复时才执行整机回滚。