跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    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 10❌ 无官方原地升级路线(没有 leapp-data-rocky,见下)
    CentOS Stream 9CentOS Stream 10ELevate(leapp-data-centos)
    • 系统已更新到 EL 9 的最新小版本
    • 至少 5 GB 可用磁盘空间(/ 和 /var 分区)
    • 完整的系统备份(快照、备份文件)
    • 物理或远程控制台访问(升级过程中会多次重启)
    • 检查所有关键应用与 EL 10 的兼容性
    • CPU 基线:RHEL 10 与 Rocky 10 要求 x86_64-v3;AlmaLinux 10 的主 x86_64 构建同样是 x86_64-v3,v2 只是额外提供的介质/仓库(老旧 CPU 会被阻断)
    确保 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 / CentOS Stream)

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

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

    AlmaLinux 9 → AlmaLinux 10
    sudo dnf install -y leapp-upgrade leapp-data-almalinux
    执行升级预检查
    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

    预检查阻断项:

    leapp preupgrade 会把不满足项写进 /var/log/leapp/answerfile,需要逐条确认。EL 9 → 10 没有像 CentOS 7 → 8 那样的「普遍常见修复清单」;下面这条 pam_pkcs11 的 answer 是 CentOS 7 升级里的修复项,不要照抄到 EL 9 → 10,只在报告确实要求时按报告给出的 section 名作答:

    Terminal window
    # 仅当 preupgrade 报告明确要求时才执行,section 名以报告为准
    sudo leapp answer --section <报告里的 section>.confirm=True

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

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

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

    确认系统版本
    cat /etc/redhat-release
    uname -r
    检查并逐包处理升级遗留的旧包
    # 先看有哪些残留(不要按名字批量删:el9 后缀的包可能仍被依赖)
    rpm -qa | grep -i 'el9\|leapp'
    # 逐个确认后再处理;确实无用的再删
    sudo dnf remove <确认可删的包名>
    sudo dnf autoremove -y
    sudo dnf distro-sync -y

    按 grep 'el9|leapp' 的结果批量 dnf remove 没有官方依据,可能删掉升级后仍需要的包(尤其是第三方仓库的 *.el9 包)。

    确认网络正常
    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 为 8.3;直接装即可
    sudo dnf install php
    # 需要其它版本时,用提供对应包的上游仓库(如 Remi),按该仓库的包名安装

    注意:EL 10 官方仓库不保证存在 php8.2 这种带版本号的包名——装之前先 dnf list available 'php*' 确认,不要照抄其它发行版的包名。

    任何依赖 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

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