EL 9 升级到 EL 10
从 EL 9(AlmaLinux 9、Rocky Linux 9、CentOS Stream 9)升级到 EL 10 是一次跨大版本升级。本文以 Leapp 和 ELevate 工具为核心,介绍完整的升级流程及重要注意事项。
升级前须知:EL 10 的重要变化
Section titled “升级前须知:EL 10 的重要变化”升级前请充分了解 EL 10 的关键变化,以评估升级风险:
| 变化项 | EL 9 | EL 10 |
|---|---|---|
| 包管理器 | DNF 4 | DNF 4.20(仍是 DNF 4,命令兼容) |
| Python 默认版本 | 3.9 | 3.12 |
| Rootless 容器网络 | slirp4netns | pasta |
| NetworkManager 配置格式 | keyfile(ifcfg 已弃用) | 仅 keyfile(ifcfg 彻底移除) |
| 默认加密策略 | DEFAULT(允许 SHA-1) | DEFAULT(禁用 SHA-1) |
| Podman 版本 | 4.x | 5.x |
| 源系统 | 目标系统 | 工具 |
|---|---|---|
| AlmaLinux 9 | AlmaLinux 10 | ELevate(含 Leapp) |
| Rocky Linux 9 | Rocky Linux 10 | ELevate(含 Leapp) |
| CentOS Stream 9 | CentOS Stream 10 | ELevate(leapp-data-centos) |
升级前置条件
Section titled “升级前置条件”- 系统已更新到 EL 9 的最新小版本
- 至少 5 GB 可用磁盘空间(
/和/var分区) - 完整的系统备份(快照、备份文件)
- 物理或远程控制台访问(升级过程中会多次重启)
- 检查所有关键应用与 EL 10 的兼容性
- CPU 必须支持 x86_64-v2 微架构(EL 10 最低要求,老旧 CPU 会被 Leapp 阻断)
更新到最新小版本
Section titled “更新到最新小版本”sudo dnf update -ysudo reboot验证当前系统版本
Section titled “验证当前系统版本”cat /etc/redhat-releaseuname -r创建完整备份
Section titled “创建完整备份”# 备份 /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检查 ifcfg 网络配置(重要)
Section titled “检查 ifcfg 网络配置(重要)”EL 10 完全移除了 ifcfg 格式,升级前先迁移到 keyfile:
sudo nmcli connection migratels /etc/NetworkManager/system-connections/检查加密策略
Section titled “检查加密策略”确认是否有依赖 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
Section titled “安装 ELevate”sudo dnf install -y http://repo.almalinux.org/elevate/elevate-release-latest-el9.noarch.rpm安装 Leapp 数据包
Section titled “安装 Leapp 数据包”根据目标发行版选择对应的数据包:
sudo dnf install -y leapp-upgrade leapp-data-almalinuxsudo dnf install -y leapp-upgrade leapp-data-rockysudo leapp preupgrade预检查会生成报告,列出所有阻断项(inhibitors)和警告。必须解决所有阻断项才能继续升级。
查看报告:
sudo cat /var/log/leapp/leapp-report.txt处理常见阻断项
Section titled “处理常见阻断项”SHA-1 相关警告:
# 如果报告 SHA-1 相关问题,在升级后重新生成 SSH 主机密钥# 暂时允许 SHA-1 以完成升级(升级后需恢复)sudo update-crypto-policies --set DEFAULT:SHA1内核模块阻断:
部分旧内核模块在 EL 10 不可用,需先卸载:
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True解决所有阻断项后,执行升级:
sudo leapp upgradesudo reboot升级过程大约需要 20-40 分钟,系统会自动重启进入升级环境,完成后再次重启进入 EL 10。
确认升级成功
Section titled “确认升级成功”cat /etc/redhat-releaseuname -rsudo dnf remove $(rpm -qa | grep -i 'el9\|leapp') --skip-broken -ysudo dnf autoremove -ysudo dnf distro-sync -y检查网络配置
Section titled “检查网络配置”nmcli connection showip addrping -c 3 8.8.8.8检查加密策略
Section titled “检查加密策略”升级后恢复标准策略(如果之前临时修改了):
sudo update-crypto-policies --set DEFAULT# 重新生成 SSH 主机密钥(如有需要)sudo ssh-keygen -A检查 DNF 版本与元数据行为
Section titled “检查 DNF 版本与元数据行为”EL 10 仍使用 DNF 4(4.20),确认升级后版本正常:
dnf --version# 应显示 4.20.xEL 10 默认不再下载 filelists 元数据。如果某些依赖文件路径的查询报错,可以加上:
sudo dnf --setopt=optional_metadata_types=filelists repoquery -l <package>检查关键服务
Section titled “检查关键服务”sudo systemctl --failedsudo journalctl -p err -b升级后常见问题
Section titled “升级后常见问题”dnf module 命令被弃用
Section titled “dnf module 命令被弃用”EL 10 不再分发 AppStream modular 内容,dnf module 命令虽然仍然存在,但会显示弃用警告,且没有可用的模块流。
迁移方法:EL 9 中用 dnf module enable php:8.1 选版本的做法,在 EL 10 改为直接安装带版本号的包:
# EL 10 上直接安装具体版本的 PHPsudo dnf install php8.2# 或使用 Remi 等上游仓库获取更多版本选择任何依赖 dnf module 的自动化脚本都需要在升级前提前适配。
容器网络不通(Podman rootless)
Section titled “容器网络不通(Podman rootless)”Podman 5 默认使用 pasta 网络后端,如遇问题:
# 安装 slirp4netns 作为备选sudo dnf install slirp4netns旧 SSH 密钥无法连接
Section titled “旧 SSH 密钥无法连接”SHA-1 被禁用后,旧的 RSA 密钥可能无法使用:
ssh-keygen -t ed25519 -C "your_email@example.com"原地大版本升级没有官方的”撤销”命令。一旦 ELevate 已经替换系统软件包,唯一可靠的回退方式就是恢复升级前的完整备份。这也是为什么升级前的备份/快照不是可选项。
按部署形态选择回退手段:
| 环境 | 升级前准备 | 回滚方式 |
|---|---|---|
| 云主机(ECS/CVM 等) | 升级前打一个整机镜像/快照 | 控制台用该快照回滚或重建实例 |
| 虚拟机(KVM/VMware) | 关机后克隆磁盘,或建虚拟机快照 | 恢复磁盘/快照 |
| 物理机(LVM 根分区) | lvcreate -s 建根卷快照 + 单独备份 /boot、/etc | 从快照与备份恢复(见下) |
| 物理机(无快照) | 完整文件级或块级备份(见备份策略) | 重装 EL 9 后还原备份 |
# 假设根卷是 /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 /bootsudo tar czf /backup/etc-pre-el10.tar.gz /etc# 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升级失败但系统仍能启动时,先不要急于回滚——多数问题是第三方仓库残留或个别服务未适配,参见上文升级后常见问题逐项排查;只有系统无法启动或核心业务无法恢复时才执行整机回滚。
- EL 8 → EL 9 升级 — 上一个大版本升级指南
- DNF 基础 — DNF 4.20 与模块化弃用说明
- 网络配置 — ifcfg 迁移说明
- ELevate 官方文档 — AlmaLinux ELevate 项目