











AI 概述
CentOS 7已停止维护,存在安全、兼容及合规等诸多问题,Rocky Linux 9是优质替代方案。本文分享分阶段升级流程:CentOS7.9→CentOS8.5→Rocky8.8→Rocky9.2,详述环境检查、换源、依赖处理、冲突排查、引导修复等步骤。升级风险高,务必提前备份,有应急修复条件再操作。
目录
文章目录隐藏

最近把公司一台服务器上老掉牙的 CentOS 7 升级到了 Rocky Linux 9,中间踩了无数坑,包括升级完成后由于在 CentOS 7 上自行编译升级了一些核心库,导致升级后服务器无法启动,又进入应急恢复模式模式修复,血泪教训,因此有了些系列,详细记录了升级步骤、遇到的问题及排查过程。希望对有需要的人有帮助。这里再重申一次:危险操作,没有十足的把握,切勿尝试
CentOS 7 已于 2024 年 6 月 30 日 End of Life(EOL)!
这是升级的最核心原因。CentOS 7 在 2024 年 6 月 30 日 正式停止维护(End of Life),这意味着:
1. 不再提供安全更新
举例说明:
2. 软件版本严重过时
CentOS 7 的基础软件版本已经非常老旧:
| 组件 | CentOS 7 版本 | Rocky Linux 9 版本 | 影响 |
|---|---|---|---|
| Linux 内核 | 3.10.x (2013 年) | 5.14.x (2021 年) | 新硬件不支持、性能差 |
| OpenSSL | 1.0.2 | 3.0.x | 不支持 TLS 1.3、存在已知漏洞 |
| Python | 2.7 / 3.6 | 3.9+ | Python 2 已 EOL,大量现代库无法使用 |
| PHP | 5.4 / 7.0 | 8.0+ | 现代框架不支持、性能落后 |
| MySQL | 5.6 / 5.7 | 8.0+ | 现代应用不兼容、性能差距大 |
| Git | 1.8.x | 2.31+ | 缺少现代 Git 特性 |
| gcc | 4.8.x | 11.x+ | 无法编译现代 C++ 程序 |
实际问题:
3. 合规性风险
如果你的业务涉及以下场景,继续使用 CentOS 7 可能带来合规风险:
审计风险: 安全审计时,”使用已停止维护的操作系统” 会被标记为高风险项。
4. 不支持新硬件
CentOS 7 的内核(3.10)发布于 2013 年,对现代硬件支持极差:
5. 已知的严重漏洞无法修复
以下是 CentOS 7 上无法修复的部分高危漏洞示例:
攻击者知道这些系统有漏洞且不会修复,CentOS 7 服务器成为”软柿子”。
6. 隐性成本增加
继续使用 CentOS 7 的”省钱”是假象,实际成本更高:
7. 为什么选择 Rocky Linux 9?
Rocky Linux 是 CentOS 的最佳替代品:
| 特性 | CentOS 7 | Rocky Linux 9 |
|---|---|---|
| 维护状态 | ❌ EOL (2024.6.30) | ✅ 活跃维护到 2032+ |
| 内核版本 | 3.10.x | 5.14.x |
| 安全更新 | ❌ 无 | ✅ 及时提供 |
| 二进制兼容 | RHEL 7 | RHEL 9 |
| 迁移难度 | – | 有详细文档支持 |
| 社区支持 | ❌ 基本停止 | ✅ 活跃社区 |
| 商业支持 | ❌ 无 | ✅ 可选 |
Rocky Linux 9 支持周期:
请立即评估以下风险:
不要心存侥幸! 继续使用 EOL 系统的代价远大于升级的成本。
由于无法直接从 CentOS 7 升级到 Rocky Linux 9,需要按以下路径分阶段进行:
CentOS 7.9 → CentOS 8.5 → Rocky Linux 8.8 → Rocky Linux 9.2
整个过程大约需要 1-2 小时,具体时间取决于网络速度和服务器性能。
# 检查当前系统版本 cat /etc/redhat-release uname -r uname -a
预期输出示例:
CentOS Linux release 7.9.2009 (Core) 3.10.0-1160.95.1.el7.x86_64
注意: 如果你的版本低于 CentOS 7.9,请先执行 yum -y update 升级到最新版本。
# 检查根分区剩余空间,建议至少保留 10GB 以上 df -h / # 检查 /boot 分区空间,建议保留 500MB 以上 df -h /boot
如果空间不足,请先清理:
# 清理 yum 缓存 yum clean all # 删除旧内核(谨慎操作,保留当前使用的内核) package-cleanup --oldkernels --count=1
# 备份关键配置文件 cp /etc/fstab /etc/fstab.bak cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 备份网络配置 cp /etc/sysconfig/network-scripts/ifcfg-* /root/network-backup/ 2>/dev/null || true # 记录已安装的重要软件包列表 rpm -qa > /root/installed-packages-before-upgrade.txt
为了加快下载速度,建议更换为阿里云镜像源。
cd /etc/yum.repos.d/ cp CentOS-Base.repo CentOS-Base.repo.bak
# 下载阿里云 CentOS 7 源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 如果没有 wget,使用 curl # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all yum makecache
验证镜像源是否生效:
yum repolist
你应该能看到 base-aliyun、extras-aliyun、updates-aliyun 等仓库。
EPEL 包含了许多额外的软件包,升级过程中可能需要:
yum -y install epel-release
# 安装必要的升级工具 yum -y install yum-utils rpmconf # 安装 dnf(CentOS 8+ 默认使用 dnf) yum -y install dnf
# 运行 rpmconf,如果出现提示,输入 Y 和回车继续 # 如果没有提示,继续下一步 rpmconf -a
说明: rpmconf 会检查系统中需要处理的配置文件冲突。
从 CentOS 8 开始,系统默认使用 dnf 替代 yum。
# 移除 yum 和 yum-metadata-parser dnf -y remove yum yum-metadata-parser # 清理 yum 配置目录 rm -Rf /etc/yum
注意: 这一步执行后,就不能使用 yum 命令了,请确保 dnf 可以正常使用。
dnf --version
预期输出:
4.0.9 Installed: dnf-0:4.0.9.2-2.el7_9.noarch
在升级之前,必须先解决包冲突问题,否则后续升级会遇到报错。
# 检查孤立包(没有依赖的包) package-cleanup --leaves # 检查损坏的依赖 package-cleanup --orphans
注意: 这些包可能在升级过程中引起冲突,先记录下来:
# 列出可能引起冲突的包 rpm -qa | grep -E "(sysvinit-tools|annobin|dracut-network)"
常见冲突包:
在开始正式升级前,请确认以下事项:
rpmconf -a处理配置文件;再次确认你是否真的需要升级?
必须升级的情况(符合任意一条就必须升级):
可以暂缓升级的情况(同时满足以下条件):
即便如此,如果条件允许,还是尽可能升级到新版本!
初始安装镜像为 CentOS 7.6 64 位版本。
# 查看内核版本 uname -r # 输出: 3.10.0-1160.71.1.el7.x86_64 # 查看完整系统信息 uname -a # 输出: Linux VM-4-3-centos 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux # 查看详细版本信息 cat /proc/version # 输出: Linux version 3.10.0-1160.71.1.el7.x86_64 (<mockbuild@kbuilder.bsys.centos.org>) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Tue Jun 28 15:37:28 UTC 2022
# 安装 EPEL 仓库 yum -y install epel-release # 输出: # Installed: # epel-release.noarch 0:7-14 # Complete!
# 查看可用的语言环境 locale -a # 安装中文字体 yum groupinstall "fonts" # 设置系统语言为中文 localectl set-locale LANG=zh_CN.UTF-8 # 退出终端并重新登录后界面语言将显示为中文
# 升级所有软件包到最新版本 yum -y update # 升级完成后重启系统 reboot # 重启后系统版本应升级为 CentOS 7.9
# 安装 rpmconf 和 yum-utils yum -y install rpmconf yum-utils # 执行 rpmconf 检查配置文件 # 如有交互提示,输入 Y 并回车继续;若无提示则进行下一步 rpmconf -a # 安装 dnf 包管理器 yum -y install dnf # 移除 yum 及相关组件 dnf -y remove yum yum-metadata-parser
# 删除 CentOS 7 的软件源 rpm -e --nodeps `rpm -qa|grep centos-` # 安装 Rocky Linux 8 的软件源 rpm -ivh --nodeps --force https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/Packages/r/rocky-gpg-keys-8.10-1.9.el8.noarch.rpm rpm -ivh --nodeps --force https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/Packages/r/rocky-release-8.10-1.9.el8.noarch.rpm rpm -ivh --nodeps --force https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/Packages/r/rocky-repos-8.10-1.9.el8.noarch.rpm # 升级 EPEL 源到版本 8 dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm # 清理缓存 dnf clean all
# 卸载 CentOS 7 的内核包 rpm -e --nodeps `rpm -qa|grep -i kernel`
编辑 Python 站点配置文件:
vi /usr/lib/python2.7/site-packages/sitecustomize.py
添加以下内容:
# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
此步骤可能遇到错误,按以下步骤逐一解决。
# 执行系统升级 dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
可能出现的错误:
运行事务检查 错误:事务检查与依赖解决错误: (gcc >= 8 with gcc < 9) 被 annobin-10.67-3.el8.x86_64 需要 rpmlib(RichDependencies) <= 4.12.0-1 被 annobin-10.67-3.el8.x86_64 需要 (NetworkManager >= 1.20 or dhclient) 被 dracut-network-049-218.git20221019.el8_7.x86_64 需要 rpmlib(RichDependencies) <= 4.12.0-1 被 dracut-network-049-218.git20221019.el8_7.x86_64 需要 (annobin if gcc) 被 redhat-rpm-config-130-1.el8.noarch 需要 (gcc-plugin-annobin if gcc) 被 redhat-rpm-config-130-1.el8.noarch 需要 rpmlib(RichDependencies) <= 4.12.0-1 被 redhat-rpm-config-130-1.el8.noarch 需要
解决方案:
# 查找冲突的软件包位置 find /var/cache/dnf/ -name *annobin-10.67-3.el8.x86_64* # 输出: /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/annobin-10.67-3.el8.x86_64.rpm find /var/cache/dnf/ -name *dracut-network-049-218.git20221019.el8_7.x86_64* # 输出: /var/cache/dnf/baseos-3e608afeebc9a90b/packages/dracut-network-049-218.git20221019.el8_7.x86_64.rpm find /var/cache/dnf/ -name *redhat-rpm-config-130-1.el8.noarch* # 输出: /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/redhat-rpm-config-130-1.el8.noarch.rpm # 强制安装冲突的软件包 rpm -ivh --nodeps --force /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/annobin-10.67-3.el8.x86_64.rpm rpm -ivh --nodeps --force /var/cache/dnf/baseos-3e608afeebc9a90b/packages/dracut-network-049-218.git20221019.el8_7.x86_64.rpm rpm -ivh --nodeps --force /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/redhat-rpm-config-130-1.el8.noarch.rpm
# 再次尝试系统升级 dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
可能出现的错误:
运行事务测试 错误:事务检查错误: file /usr/sbin/pidof from install of procps-ng-3.3.15-9.el8.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/bin/last from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/bin/mesg from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/bin/wall from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/share/man/man1/last.1.gz from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/share/man/man1/mesg.1.gz from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/share/man/man1/wall.1.gz from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64
解决方案:
# 删除冲突的软件包 rpm -e --nodeps sysvinit-tools-2.88-14.dsf.el7.x86_64
# 第三次执行升级 dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync # 升级成功完成
卸载旧的 EPEL 仓库,重新安装并清理冲突软件包,然后重装 rpmconf 并执行配置检查。
# 进入仓库配置目录 cd /etc/yum.repos.d # 删除旧的 EPEL 仓库文件 rm -rf /etc/yum.repos.d/CentOS-Base.repo.rpmsave \ /etc/yum.repos.d/CentOS-Epel.repo \ /etc/yum.repos.d/epel-modular.repo \ /etc/yum.repos.d/epel.repo \ /etc/yum.repos.d/epel-testing-modular.repo \ /etc/yum.repos.d/epel-testing.repo # 重新安装 EPEL 仓库 dnf -y reinstall epel-release # 删除冲突的软件包 rpm -e --nodeps python36-rpmconf-1.1.7-1.el7.1.noarch # 重装 rpmconf dnf -y install rpmconf yum-utils # 执行 rpmconf 检查配置文件 # 在交互界面中一直输入 Y 并回车即可 rpmconf -a
执行rpmconf -a后会看到类似以下交互界面:
Configuration file '/etc/pam.d/fingerprint-auth' -rw-r--r--. 1 root root 701 Jul 3 04:47 /etc/pam.d/fingerprint-auth.rpmnew lrwxrwxrwx. 1 root root 19 Aug 6 10:32 /etc/pam.d/fingerprint-auth -> fingerprint-auth-ac ==> Package distributor has shipped an updated version. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions M : merge configuration files Z : background this process to examine the situation S : skip this file The default action is to keep your current version. *** aliases (Y/I/N/O/D/M/Z/S) [default=N] ? Your choice:
安装 Rocky Linux 8 内核及相关引导组件。如果升级后无法启动,可以使用 Rocky Linux 8 ISO 镜像的救援模式安装内核。
# 安装内核核心组件 dnf -y install kernel kernel-core # 安装 GRUB 引导相关组件 dnf -y install shim grub2-tools-extra grubby grub2-common grub2-pc dnf -y install grub2-tools-efi grub2-tools-minimal grub2-efi grub2-pc-modules grub2-tools
执行以下命令修复引导配置,防止迁移完成后重启无法启动。根据分区表类型选择对应命令。
# 查看分区表类型 fdisk -l
适用于传统 BIOS 系统。注意/dev/vda需根据实际情况替换为正确的磁盘路径。
# 生成 GRUB 配置文件 grub2-mkconfig -o /boot/grub2/grub.cfg # 安装 GRUB 到磁盘 grub2-install /dev/vda
适用于 UEFI BIOS 系统。
# 查找 Rocky 引导目录 export grubcfg=`find /boot/ -name rocky` # 生成 GRUB 配置文件 grub2-mkconfig -o $grubcfg/grub.cfg # 删除 CentOS 引导残留 rm -rf `find /boot/ -name centos`
添加 UEFI 启动项。注意:
/dev/nvme0n1为 EFI 分区所在磁盘,需根据实际情况替换-p后的数字为分区位置,默认为 1
/dev/nvme0n1p1,值为 1/dev/nvme0n1p2,值为 2efibootmgr -c -w -L "RockyLinux" -d /dev/nvme0n1 -p 1 -l \\EFI\\Boot\\bootx64.efi
# 清理旧配置(可选,可解决某些 yum 报错问题) rm -rf /etc/yum # 安装最小化基础环境 dnf -y groupinstall "Minimal Install" # 重启系统 reboot
重启完成后,系统已成功从 CentOS 7 升级到 Rocky Linux 8。
本次 CentOS 7 逐级原地升级 Rocky Linux 9 的实操,验证了跨大版本系统迭代的可行性,也积累了诸多实战踩坑经验,自定义编译核心库引发的启动故障、依赖冲突是本次升级最大的血泪教训。CentOS 7 已全面停更,安全、兼容、合规问题日益突出,Rocky Linux 是其最优替代方案。跨版本原地升级风险极高,仅适合专业运维人员操作,生产环境务必做好备份、快照与回滚方案。本文全程记录升级步骤与故障修复方案,可为同类系统迁移提供可靠参考。
推荐阅读:
如何在 CentOS 7 上搭建 Nginx + RTMP + nginx-http-flv-module 的流媒体服务
如何在 Centos7 下基于 nginx+uwsgi 部署 Django 项目
以上关于详解CentOS 7跨版本迁移Rocky Linux9 生产环境安全升级教程的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 详解CentOS 7跨版本迁移Rocky Linux9 生产环境安全升级教程
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。