加油
努力

升级从 CentOS 7.3 到 7.6 再到 8.2 有哪些需要注意的变化?

从 CentOS 7.3 → 7.6 → 8.2 的升级路径涉及 两大核心跨越

  1. CentOS 7 内部小版本升级(7.3→7.6):相对平滑,主要是安全补丁、内核更新和 minor 包变更。
  2. CentOS 7 → CentOS 8 的大版本跃迁架构性变化最大,需重点注意以下关键差异与风险点。

🔑 一、CentOS 7.3 → 7.6(推荐先完成此步)

✅ 建议通过 yum update 逐步升级,避免跨大版本直接跳级。

类别 注意事项
内核版本 7.3: 3.10.0-514;7.6: 3.10.0-957(含更多硬件驱动、CVE 修复)。部分旧驱动可能不兼容新内核。
YUM/DNF 仍使用 yum,但底层依赖库(如 libxml2, openssl)有小幅更新。检查自定义 .repo 文件是否兼容。
SELinux 策略更严格,默认模式仍为 enforcing,但审计日志更详细。测试前建议用 setenforce 0 验证兼容性。
系统服务 systemd 配置基本一致,但部分 unit 文件增强(如 network.service 被弃用,改用 NetworkManager)。
⚠️ 若曾禁用 network 或自定义网络脚本,需迁移至 NM 或 ifcfg-* + nmcli
时间同步 chronyd 已取代 ntpd 作为默认 NTP 实现(7.4+),确保 chronyd 运行正常。

操作建议

# 备份当前状态
tar -czf /backup/centos7-7.3-backup.tar.gz /etc /var/log/yum.log

# 清理并升级
yum clean all && yum update --releasever=7.6

# 重启后验证
uname -r && systemctl status chronyd

🚨 二、CentOS 7 → CentOS 8(关键!非连续升级,需重新安装或迁移)

⚠️ 重要事实:CentOS 官方不支持直接从 7.x 升级到 8.x(无 yum upgrade 到 8 的路径)。
正确方式是:

  • 方案 A(推荐):全新安装 CentOS 8.2,再迁移数据/配置(最稳妥)
  • 方案 B(高风险):使用 leapp 工具尝试升级(仅适用于特定场景,成功率有限,官方已不再积极维护)

🔁 若使用 leapp 升级(谨慎!)

# 在 CentOS 7.6 上安装 leapp
yum install leapp leapp-repository

# 预检(必须执行!会列出所有阻碍项)
leapp preupgrade

# 查看报告:/var/log/leapp/leapp-report.txt
# 修复问题后重试
leapp upgrade

❗常见失败原因:

  • 自定义 YUM repo 未适配 RHEL/CentOS 8 源结构
  • 使用了已移除的软件包(如 python2, mysql 社区版)
  • SELinux 策略冲突
  • 第三方驱动/模块(如 NVIDIA、VMware Tools)不兼容

📦 三、CentOS 7 → 8 的核心变化清单(影响生产环境)

领域 CentOS 7 CentOS 8 影响与建议
包管理器 yum(基于 RPM + libdnf 1.x) dnf(RPM + libdnf 2.x+) yumdnf 的软链接;命令行为高度兼容,但部分插件(如 yum-plugin-fastestmirror)行为微调。
Python Python 2.7 默认 Python 3.6+ 默认,Python 2 被移除 ❌ 所有 Python 2 脚本将失效!需重写为 Py3 或用 python2 EPEL 临时支持(不推荐长期)。
数据库 MySQL 5.7, MariaDB 10.1 MariaDB 10.3+, PostgreSQL 11, Redis 5 社区版 MySQL 被移除,需用 MariaDB 或 Percona。
Web 服务 Apache 2.4, PHP 7.0/7.2 Apache 2.4, PHP 7.2+/7.4 (via AppStream) PHP 版本需显式启用 Stream 或 COPR 仓库。
容器支持 Docker 需手动安装 Podman + Buildah + Skopeo 默认集成 Docker 仍在 EPEL/AppStream,但 Red Hat 主推 Podman(无 daemon,rootless 支持更好)。
网络栈 network-scripts (ifcfg-eth0) 默认禁用 network-scripts,强制 NetworkManager + nmcli /etc/sysconfig/network-scripts/ 配置将失效!需迁移至 NM 或使用 firewalld 替代 iptables 持久化规则。
防火墙 iptables 为主 firewalld 默认启用,iptables 需手动安装 规则需转换:iptables-save > rules.v4firewall-cmd --permanent --add-rich-rule=...
加密算法 OpenSSL 1.0.2 OpenSSL 1.1.1+(TLS 1.3 默认) 老旧客户端可能无法连接;检查应用 TLS 兼容性。
软件源结构 base, updates, extras AppStream + BaseOS 双流模型 传统 centos-release 被替换;需启用 --enablerepo=crb 获取额外包(如 gcc-toolset)。

✅ 推荐实践步骤(生产环境)

  1. 评估阶段

    • leapp 做预检(即使计划重装,也可识别依赖问题)
    • 扫描代码中的 #!/usr/bin/python → 改为 #!/usr/bin/python3 或虚拟环境
    • 导出所有自定义配置:rpm -qa > packages.list, diff -r /etc old/new
  2. 迁移策略

    graph LR
    A[CentOS 7.6] --> B{选择方案}
    B -->|低风险 | C[新装 CentOS 8.2 VM]
    B -->|中风险 | D[Leapp 升级 + 充分测试]
    C --> E[迁移数据/配置/脚本]
    D --> F[回归测试网络/DB/安全]
    E & F --> G[灰度上线]
  3. 关键检查项(上线前)

    • ✅ 所有服务能否启动?systemctl list-units --failed
    • ✅ 防火墙规则是否生效?firewall-cmd --list-all
    • ✅ Python 应用是否兼容 Py3?python3 --version + 功能测试
    • ✅ 定时任务、cron 表达式是否保留?
    • ✅ 监控X_X(Zabbix/Nagios)是否适配新内核/端口?

📌 最后提醒

  • CentOS 8 已于 2024-12-31 结束生命周期(EOL),后续应转向:
    • Rocky Linux 8/9AlmaLinux 8/9(1:1 二进制兼容)
    • 或直接规划迁移至 CentOS Stream 8/9(滚动预览版,适合开发)
  • 若业务稳定且无需新功能,保持 CentOS 7.9(EOL: 2024-06-30) 并打满补丁,比冒险升 8 更安全。

需要我提供:

  • leapp 预检报告解读示例?
  • iptablesfirewalld 的具体命令模板?
  • Python 2 → 3 自动迁移脚本建议?

欢迎告诉我你的具体应用场景(如 Web 服务器/数据库/CI/CD),我可定制迁移 checklist。

云服务器