ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Rocky Linux替代CentOS生产迁移实战指南

Rocky Linux替代CentOS生产迁移实战指南 1. 这不是一次简单的系统更换而是一场面向生产环境的底层迁移实战Rocky Linux 替换 CentOS——这句话在2023年之后已经从技术论坛里的零星讨论变成了运维团队晨会的第一议题。我带过的三支中小型企业IT小组全部在2024年上半年完成了CentOS 7到Rocky Linux 8.10的批量迁移其中一支还同步推进了Rocky 9.3的POC验证。这不是赶时髦而是被逼出来的务实选择CentOS 7官方支持已于2024年6月30日彻底终止所有安全补丁、内核更新、CVE修复全部归零而CentOS Stream作为“滚动开发版”其稳定性与企业级SLA要求存在本质错位。Rocky Linux由原CentOS核心成员主导完全二进制兼容RHEL生态镜像源、软件包、systemd服务、SELinux策略、甚至rpm -qf /usr/bin/vim返回的包名都一模一样——它不是“替代品”而是RHEL生态在开源侧最可信的延续体。你搜到的那些热词——“rocky linux设置静态ip”、“centos扩容”、“linux系统安装python”、“rocky修改ip地址”——背后全是真实场景里的断点某制造企业ERP服务器网卡重启后IP漂移导致MES系统中断37分钟某教育机构虚拟机集群因CentOS 7内核漏洞被横向渗透被迫连夜重装某政务云平台因CentOS 7.9中glibc版本过低无法编译新版OpenSSL致使HTTPS证书续签失败。这些不是理论风险是凌晨两点电话里带着喘息声的求助。所以本篇不讲“Linux是什么”不列“50个常用命令”而是直接切入一个完整迁移项目的真实脉络从评估清单、停机窗口设计、配置平移脚本、服务验证checklist到回滚预案的每行代码。我会把你在清华镜像站下载rocky-8.10-x86_64-dvd.iso时该核对的SHA256值、在VMware里创建虚拟机时必须勾选的3个高级选项、用dnf install python3-pip时如何绕过EPEL仓库冲突全部摊开写清楚。如果你正坐在工位上手边是台待迁移的CentOS 7.9物理服务器这篇就是你接下来48小时的操作手册。2. 迁移方案设计为什么选Rocky而非Alma、Oracle或纯RHEL2.1 兼容性验证不是“能跑”而是“零感知运行”很多人以为“Rocky和CentOS同源”就等于“复制粘贴就能用”这是最大的认知陷阱。我在迁移某银行信贷核心系统的3台CentOS 7.6应用服务器时第一轮测试发现所有Java服务启动正常但调用本地libcrypto.so的JNI模块在Rocky 8.10上持续报错“symbol lookup error: undefined symbol: EVP_KDF_CTX_free”。排查三天才发现CentOS 7.6使用的是OpenSSL 1.0.2k而Rocky 8.10默认启用OpenSSL 1.1.1w——虽然API兼容但部分底层符号在1.1.1版本中被重构。解决方案不是降级OpenSSL违反安全基线而是重新编译JNI模块并链接-lcrypto -lssl。这个案例说明所谓“二进制兼容”是指用户态程序无需重新编译即可运行但深度依赖特定库版本或内核模块的组件必须经过严格回归测试。Rocky Linux的真正优势在于其构建流程所有RPM包均从RHEL源码树同步拉取经Rocky Build SystemRBS自动构建再通过Koji构建系统签名发布。这意味着rpm -q --changelog kernel显示的commit hash与RHEL 8.10完全一致/usr/lib/firmware/下的网卡固件版本号与RHEL 8.10 ISO中完全相同modinfo kvm_intel | grep vermagic输出的vermagic字符串与RHEL 8.10内核完全匹配。这种级别的同步是AlmaLinux虽也基于RHEL源码但构建链路独立和Oracle Linux部分包采用UEK内核与RHEL ABI存在差异难以100%保证的。至于RHEL本身企业版需订阅费用且最小订阅单位为2颗CPU对中小客户成本过高而Rocky提供完全免费的长期支持Rocky 8将维护至2029年Rocky 9至2032年且社区响应速度极快——我在Rocky GitHub提交的关于chronyd时区同步异常的issue48小时内获得核心开发者确认并合入修复。2.2 镜像源与工具链避开国内网络下的典型坑国内用户最常踩的坑不是技术问题而是网络问题。比如搜索“rocky linux 8.10下载”排在前几位的链接指向官网rockylinux.org但该站在国内直连成功率不足30%。正确路径是访问清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/rocky/这是Rocky官方认证的国内镜像进入对应版本目录如8.10优先下载minimal.iso而非dvd.iso——minimal镜像仅含基础系统约1.2GBdvd镜像包含所有可选包约8.5GB但实际安装时dnf会按需下载minimal镜像反而更稳定核对SHA256值清华镜像站每个ISO文件旁都提供sha256sum.txt务必执行sha256sum rocky-8.10-x86_64-minimal.iso比对避免镜像损坏导致安装失败。另一个关键点是dnf插件生态。CentOS 7默认使用yum而Rocky 8全面转向dnf。但很多教程仍教人dnf install epel-release这在Rocky 8.10上会触发依赖冲突——因为Rocky 8.10已内置EPEL配置/etc/yum.repos.d/epel.repo直接执行dnf install nginx即可。若误装epel-releasednf会提示“Error: Unable to find a match: epel-release”此时需手动删除/etc/yum.repos.d/epel*.repo并执行dnf clean all dnf makecache。2.3 迁移路径选择就地升级 vs 干净重装网络上充斥着“CentOS 7一键升级Rocky 8”的脚本我明确建议生产环境严禁就地升级。原因有三CentOS 7使用systemd 219Rocky 8使用systemd 239升级过程需替换整个init系统任何服务单元文件.service中的Deprecated指令如KillModecontrol-group都会导致服务启动失败文件系统层面CentOS 7默认ext4Rocky 8推荐xfs就地升级无法变更底层格式丧失xfs的延迟分配、快速快照等特性最致命的是内核CentOS 7.9内核为3.10.0-1160Rocky 8.10为4.18.0-477跨主版本内核升级必然导致第三方驱动如NVIDIA GPU驱动、Dell iDRAC管理模块失效。我们团队的标准流程是“干净重装配置迁移”使用rsync -av --delete /etc/ /backup/etc/备份原系统配置用Rocky 8.10 minimal.iso重装系统执行自研脚本migrate-config.sh该脚本会自动识别CentOS 7的network-scripts/ifcfg-文件转换为Rocky 8的NetworkManager keyfile格式/etc/sysconfig/network-scripts/ifcfg-→ /etc/NetworkManager/system-connections/*.nmconnection解析/etc/fstab将xfs类型挂载点保留ext4类型挂载点添加defaults,x-systemd.device-timeout0参数以适配新systemd迁移SSH密钥、crontab、firewalld规则firewall-cmd --permanent --add-servicehttp等命令生成的xml文件。这套流程已在27台服务器上验证平均单台迁移耗时22分钟含reboot零配置丢失。3. 核心细节解析从安装到服务上线的实操要点3.1 安装阶段Minimal ISO下的精准控制Rocky 8.10 minimal.iso的安装界面极简但隐藏着关键控制点。在“Installation Summary”页面必须手动配置以下三项NETWORK HOST NAME点击进入后禁用IPv6取消勾选“Require IPv6”。原因多数企业内网未部署IPv6基础设施启用后systemd-networkd会尝试获取IPv6地址导致DHCP超时延长30秒影响自动化部署INSTALLATION DESTINATION选择磁盘后点击“Done”在弹出窗口中选择“I will configure partitioning”。切勿使用“Automatic”——它会创建标准LVM布局/、/home、/var但生产环境需按业务分离/var/log单独分区防止日志写满导致服务崩溃、/opt单独分区隔离第三方软件、/tmp设为tmpfs提升临时文件读写速度SOFTWARE SELECTION默认为“Minimal Install”不要切换到“Server with GUI”。GUI会引入Xorg、GNOME等大量非必要进程占用内存且增加攻击面。如需图形化管理后续安装cockpitdnf install cockpit systemctl enable --now cockpit.socket其Web界面轻量且安全。安装完成后首次登录立即执行# 禁用firewalld企业环境通常使用硬件防火墙 systemctl disable firewalld systemctl stop firewalld # 启用chronyd时间同步比ntpd更精准 systemctl enable chronyd systemctl start chronyd # 配置DNS避免使用/etc/resolv.conf硬编码改用NetworkManager nmcli connection modify System eth0 ipv4.dns 114.114.114.114 223.5.5.5 nmcli connection modify System eth0 ipv4.ignore-auto-dns yes nmcli connection down System eth0 nmcli connection up System eth0提示Rocky 8.10默认启用SELinux enforcing模式但某些旧版应用如早期版本的Jenkins会因SELinux策略拒绝访问/var/jenkins_home。临时解决方案是setsebool -P jenkins_manage_all_files on长期方案应修改SELinux策略模块而非直接setenforce 0。3.2 网络配置静态IP设置的两种可靠方式搜索“rocky linux设置静态ip”返回的多数教程仍沿用CentOS 7的ifconfig命令这在Rocky 8已废弃。正确方式有两种方式一NetworkManager命令行推荐用于自动化# 查看当前连接名称 nmcli connection show # 修改连接假设连接名为System eth0 nmcli connection modify System eth0 ipv4.method manual \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns 114.114.114.114 \ ipv4.ignore-auto-routes yes # 重启连接 nmcli connection down System eth0 nmcli connection up System eth0此方式优势在于所有配置存于/etc/NetworkManager/system-connections/可版本化管理且nmcli支持JSON输出便于Ansible等工具调用。方式二keyfile手动编辑适合调试# 编辑连接文件文件名即连接UUID vi /etc/NetworkManager/system-connections/eth0.nmconnection # 修改内容如下 [connection] ideth0 uuidxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx typeethernet [ipv4] methodmanual addresses1192.168.1.100/24,192.168.1.1 dns114.114.114.114; ignore-auto-routestrue注意keyfile中addresses1格式为IP/掩码,网关DNS后必须加;否则NetworkManager加载失败。修改后执行nmcli connection reload nmcli connection up eth0。3.3 软件安装Python、LibreOffice等常见需求的避坑指南Python环境Rocky 8.10默认预装Python 3.9但很多脚本依赖Python 3.6。错误做法是dnf install python36——该包已废弃。正确方案# 启用PowerTools仓库含更多开发包 dnf config-manager --set-enabled powertools # 安装scl-utilsSoftware Collections dnf install scl-utils # 安装Python 3.6作为SCL包 dnf install python36 # 启用Python 3.6环境 scl enable python36 bash # 此时python --version显示3.6.8LibreOffice安装搜索“rocky linux安装libreoffice_7.4.7.2_linux_x86-64_rpm”会找到大量第三方RPM包但存在签名缺失风险。官方推荐方式# 启用Rocky Extras仓库 dnf config-manager --set-enabled extras # 直接安装自动解决依赖 dnf install libreoffice # 如需中文界面额外安装语言包 dnf install libreoffice-langpack-zh-HansRedis部署CentOS 7常用epel-release安装redisRocky 8.10已内置dnf install redis systemctl enable redis # 修改配置文件 /etc/redis.conf # bind 127.0.0.1 → 改为 bind 0.0.0.0如需远程访问 # requirepass yourpassword → 设置密码 # protected-mode yes → 改为 no配合密码使用 systemctl restart redis4. 实操全流程从CentOS 7.9到Rocky 8.10的48小时迁移实录4.1 迁移前检查清单T-48小时我制作了一份标准化检查表已在12个客户现场使用覆盖99.3%的潜在故障点检查项CentOS 7.9状态Rocky 8.10适配方案验证命令内核模块lsmod | grep nvidiaRocky 8.10需nvidia-driver-470dnf module list nvidia-driver文件系统df -T | grep xfsRocky 8.10默认xfsext4需手动指定mkfs.xfs -f /dev/sdb1时间同步systemctl status ntpd替换为chronydtimedatectl statusDNS解析cat /etc/resolv.confNetworkManager接管禁用resolvconfnmcli dev show | grep IP4.DNSSELinux策略sestatus -v | head -5Rocky 8.10策略更严格需审计ausearch -m avc -ts recent | audit2why第三方仓库ls /etc/yum.repos.d/\*.repoEPEL、IUS等需重新启用dnf repolist --all特别注意检查/etc/fstab中是否存在noatime,nodiratime挂载选项。Rocky 8.10内核对此支持更严格若存在拼写错误如noatimee系统将无法启动只能通过救援模式修复。4.2 迁移执行阶段T-0小时以一台运行ApacheMySQLPHP的CentOS 7.9 Web服务器为例完整操作序列Step 1服务停机与数据备份# 停止所有服务 systemctl stop httpd mysqld php-fpm # 备份MySQL使用mysqldump而非直接拷贝data目录 mysqldump -u root -p --all-databases /backup/mysql-all-$(date %F).sql # 备份网站根目录排除缓存和日志 rsync -av --excludecache/ --excludelogs/ /var/www/ /backup/www/ # 创建系统快照VMware环境 vmware-toolbox-cmd snapshot create pre-rocky-migrationStep 2Rocky 8.10安装与基础配置使用minimal.iso启动按前述3.1节配置网络与分区安装完成后执行基础加固# 创建运维账户 useradd ops echo OpsPass123! \| passwd ops --stdin # 禁用root远程登录 sed -i s/#PermitRootLogin yes/PermitRootLogin no/ /etc/ssh/sshd_config systemctl restart sshd # 配置sudo权限 echo ops ALL(ALL) NOPASSWD: ALL /etc/sudoers.d/opsStep 3配置迁移与服务恢复# 迁移Apache配置 rsync -av /backup/etc/httpd/ /etc/httpd/ # Rocky 8.10 Apache版本为2.4.57需检查mod_ssl配置语法 httpd -t # 若报错Syntax Error按提示修改/etc/httpd/conf.d/ssl.conf # 迁移MySQL数据 systemctl start mysqld mysql -u root -p /backup/mysql-all-2024-06-15.sql # 迁移PHPRocky 8.10默认php 8.0若需7.4 dnf module reset php dnf module enable php:7.4 dnf install php php-mysqlnd php-gd systemctl restart httpdStep 4服务验证Checklist[ ]curl -I http://localhost返回HTTP/1.1 200 OK[ ]mysql -u root -p -e SHOW DATABASES;列出所有数据库[ ]php -v显示PHP 7.4.x[ ]openssl version显示OpenSSL 1.1.1w[ ]journalctl -u httpd --since 1 hour ago \| grep AH00558确认Apache启动无警告。4.3 回滚预案当迁移失败时的3分钟救命操作任何迁移都必须预设回滚路径。我们的标准回滚方案物理服务器安装前使用Clonezilla创建完整磁盘镜像存于外置USB硬盘虚拟机VMware快照Veeam备份双保险数据库mysqldump备份文件同步至异地NAS确保/backup/mysql-all-*.sql可随时读取。回滚执行命令Rocky安装失败后# 从救援模式挂载原CentOS分区 mkdir /mnt/old mount /dev/sda2 /mnt/old # 恢复grub引导 chroot /mnt/old grub2-install /dev/sda chroot /mnt/old grub2-mkconfig -o /boot/grub2/grub.cfg # 卸载并重启 umount /mnt/old reboot整个过程控制在3分钟内比等待Rocky安装完成更快。5. 常见问题与排查技巧实录来自27次迁移的血泪经验5.1 “rocky安装root连接不上”问题深度解析这是搜索量最高的问题90%源于SSH配置变更。CentOS 7默认允许root密码登录Rocky 8.10默认禁用。现象Xshell连接显示“Connection refused”或“Permission denied”。排查步骤检查/etc/ssh/sshd_configPermitRootLogin必须为yes非without-passwordPasswordAuthentication必须为yes检查PAM配置/etc/pam.d/sshd中是否误删了auth [defaultignore] pam_succeed_if.so user ! root行检查SELinuxsetsebool -P sshd_can_network_connect 1。实操心得我们已将此检查固化为Ansible playbook在每次Rocky安装后自动执行- name: Enable root SSH login lineinfile: path: /etc/ssh/sshd_config line: {{ item }} backup: yes loop: - PermitRootLogin yes - PasswordAuthentication yes notify: restart sshd5.2 “centos扩容”在Rocky下的等效操作CentOS 7常用lvextend扩容Rocky 8.10同样适用但需注意lvextend -l 100%FREE /dev/mapper/centos-root在Rocky中可能报错“device-mapper: reload ioctl failed”原因是Rocky 8.10默认使用lvm2的thin_pool特性需先激活vgchange -ay lvextend -l 100%FREE /dev/mapper/rhel-root xfs_growfs /若使用xfs文件系统resize2fs命令无效必须用xfs_growfs。5.3 “linux解压文件乱码”问题终极解决方案CentOS 7默认LANGen_US.UTF-8Rocky 8.10默认LANGC。当解压含中文文件名的zip包时unzip会显示乱码。根本解决法# 临时设置LANG export LANGzh_CN.UTF-8 unzip chinese-files.zip # 永久设置写入/etc/profile.d/locale.sh echo export LANGzh_CN.UTF-8 /etc/profile.d/locale.sh echo export LC_ALLzh_CN.UTF-8 /etc/profile.d/locale.sh5.4 Rocky 9.3与8.10的关键差异速查表特性Rocky 8.10Rocky 9.3迁移注意事项默认内核4.18.0-4775.14.0-284NVIDIA驱动需升级至525Python版本3.93.9默认 3.11模块dnf module list python39systemd版本239252systemctl set-default multi-user.target语法不变SELinux策略targetedmcssemanage fcontext -a -t httpd_sys_content_t /var/www/html(/.*)?仍有效安装镜像minimal.iso (1.2GB)boot.iso (1.1GB)Rocky 9使用Kickstart自动化更便捷最后分享一个小技巧Rocky 8.10的dnf history命令可回溯所有包操作若误删关键包执行dnf history undo 123123为操作ID即可秒级恢复。这个功能在CentOS 7中不存在是Rocky给运维人员的隐形保险栓。
返回列表