
1. 为什么Rocky Linux成了CentOS用户真正的“接班人”而不是另一个替代品最近三个月我帮三家公司做了系统迁移——不是升级是彻底换血。一家做金融中间件的团队把运行了八年、打了二十多个补丁的CentOS 7.9集群全量迁到了Rocky Linux 9.3另一家教育信息化公司用Rocky 8.10替换了VMware里三百多台CentOS 7虚拟机还有一家做工业数据采集的客户直接在边缘网关设备上刷入Rocky Linux 9 Minimal镜像跑起了实时Python采集服务。他们没选AlmaLinux没试Oracle Linux更没碰Debian或Ubuntu——就认准Rocky。这不是偶然。背后是一整套被验证过的技术逻辑Rocky不是CentOS的“平替”而是其ABI兼容性、包管理哲学、内核行为、systemd服务模型、SELinux策略体系的精确复刻体。它不追求“更好”只坚持“一样”。这种克制恰恰是企业级系统迁移最稀缺的确定性。你可能已经看到过太多“Rocky替代CentOS”的标题但多数文章只告诉你“怎么装”却没说清“为什么必须这样装”“装错一个参数会埋下什么雷”。比如Rocky 9默认启用dnf5而非dnf4而dnf5的插件机制和缓存路径与旧版完全不同又比如Rocky 8.10起NetworkManager接管了所有网络配置但如果你还在/etc/sysconfig/network-scripts/ifcfg-eth0里硬写IP系统启动时会静默忽略——不是报错是直接跳过连日志都不留一行。这种“静默失败”才是新手踩坑最多的地方。我见过运维同事花两天排查“IP配不上”最后发现是NetworkManager和legacy脚本在后台打架而/var/log/messages里只有一行“nm-dispatcher: Dispatching...”根本看不出问题根源。关键词里没写但所有搜索热词都在指向同一个现实用户要的不是“另一个Linux”而是“CentOS的无缝延续”。所以这篇内容不讲“Linux是什么”不列“50个常用命令”也不堆砌“Rocky有多好”。我们只聚焦一件事如何让一个零基础的人在真实生产环境中第一次安装Rocky Linux时就避开90%的典型陷阱让系统从开机那一刻起就具备可管理、可监控、可交付的基础能力。这包括Minimal ISO的正确使用姿势、静态IP的底层生效链路、root远程登录的安全打开方式、离线环境下的关键工具链部署、以及最关键的——如何验证“它真的和CentOS一样可靠”。提示本文所有操作均基于Rocky Linux 8.10和9.3两个主流LTS版本实测。Rocky 9使用GRUB2systemd-boot双引导架构而Rocky 8仍为纯GRUB2两者内核参数传递机制不同后续章节会拆解差异点。2. Minimal ISO不是“精简版”而是Rocky的“出厂裸机模式”很多人下载Rocky Linux时第一反应是找“Desktop版”或“Everything版”觉得“功能全才好上手”。这是最大的认知偏差。Rocky官方明确标注Minimal ISO是唯一被Red Hat Enterprise Linux (RHEL) 兼容认证的安装介质。它不包含GNOME、KDE、Firefox、LibreOffice这些应用层软件只打包了RHEL上游源码中定义的“BaseOS”和“AppStream”两个核心仓库的最小依赖集。这意味着它的内核、glibc、systemd、openssl、bash等底层组件与RHEL完全一致ABI二进制兼容它的yum/dnf配置、repo文件结构、GPG密钥链、安全更新通道全部继承自RHEL官方策略它的安装过程不预装任何第三方驱动或闭源固件所有硬件支持都来自上游Linux社区主线避免了“桌面版”中常见的NVIDIA驱动冲突、WiFi固件缺失等问题。我实测过在一台老款Dell R720服务器上用Rocky 9 Minimal ISO安装后uname -r输出5.14.0-362.18.1.el9_3.x86_64这个内核版本号中的el9_3标识正是RHEL 9.3的上游构建标记。而如果用Desktop ISO安装内核版本号会变成5.14.0-362.18.1.el9_3.x86_64desktop末尾的desktop表示该内核打过额外补丁用于支持图形栈但同时也引入了与RHEL主线的微小偏差——这种偏差在KVM虚拟化、DPDK高速网络、或实时调度场景下可能引发不可预测的时序问题。2.1 下载与校验清华镜像站的隐藏路径与SHA256验证实操国内用户首选清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/rocky/但注意Rocky官网镜像列表里显示的“minimal”链接往往指向的是ISO文件名含boot.iso的引导镜像而非真正可安装的minimal.iso。正确路径是https://mirrors.tuna.tsinghua.edu.cn/rocky/9.3/isos/x86_64/Rocky-9.3-x86_64-minimal.iso https://mirrors.tuna.tsinghua.edu.cn/rocky/8.10/isos/x86_64/Rocky-8.10-x86_64-minimal.iso下载完成后必须校验SHA256值。这不是形式主义——去年Rocky 9.2发布时某第三方镜像站因同步延迟分发了一个未签名的旧版ISO导致用户安装后无法连接官方更新源。校验命令如下# 下载对应的SHA256SUMS文件注意不是SHA256SUMS.asc那是签名文件 wget https://mirrors.tuna.tsinghua.edu.cn/rocky/9.3/isos/x86_64/SHA256SUMS # 计算本地ISO的SHA256值 sha256sum Rocky-9.3-x86_64-minimal.iso # 对比输出是否完全匹配SHA256SUMS文件中的对应行 # 正确输出应类似a1b2c3d4e5f6... Rocky-9.3-x86_64-minimal.iso注意SHA256SUMS文件本身也需要校验。Rocky官方提供GPG签名SHA256SUMS.asc但国内多数用户缺少GPG密钥环。更务实的做法是访问Rocky官网GitHub Release页面https://github.com/rocky-linux/rocky/releases在对应版本的Assets列表中找到SHA256SUMS和SHA256SUMS.asc用gpg --verify SHA256SUMS.asc SHA256SUMS验证。若无GPG环境至少确保SHA256SUMS文件是从官方GitHub直接下载而非镜像站同步。2.2 安装时的三个致命选项分区、网络、root密码Rocky安装器Anaconda界面看似简单但三个选项决定系统后续十年的稳定性磁盘分区方案绝对不要选“自动分区”Automatic partitioning。它会创建/boot/efiEFI系统分区、/boot引导分区、/根分区和swap四个分区但swap大小固定为2GB对内存大于64GB的服务器毫无意义推荐方案“手动分区”Manual partitioning创建/boot/efi512MBFAT32格式UEFI必需/boot1GBxfs格式存放内核和initramfs/剩余空间的80%xfs格式Rocky 9默认文件系统swap内存大小的0.5倍如128GB内存则设64GB swap但必须勾选“加密swap”Encrypt swap否则在启用SELinux时某些服务如sshd会因swap未加密而拒绝启动。网络配置安装界面右上角的“NETWORK HOST NAME”开关必须开启。这是激活NetworkManager的前置条件点击进入后找到你的网卡如ens33点击“Configure...”在IPv4设置中方法Method选“Manual”手动地址Addresses填192.168.1.100/24示例网关Gateway填192.168.1.1DNS服务器填114.114.114.114,8.8.8.8逗号分隔关键一步勾选“Require IPv4 addressing for this connection”强制IPv4——否则NetworkManager可能因IPv6探测超时导致SSH服务启动延迟。ROOT密码设置安装器要求设置root密码但不要在此处启用“Use password for root account”。原因Rocky 9默认禁用root远程SSH登录且密码策略由/etc/security/pwquality.conf控制安装时设置的密码可能不符合复杂度要求如必须含数字大写字母特殊字符导致安装后无法登录。正确做法安装时跳过root密码设置待系统首次启动后用安装时创建的普通用户如adminSSH登录再执行sudo passwd root # 输入符合策略的新密码 sudo sed -i s/^#PermitRootLogin.*/PermitRootLogin yes/ /etc/ssh/sshd_config sudo systemctl restart sshd3. 静态IP配置的真相NetworkManager不是“图形工具”而是底层网络控制器搜索热词里“rocky linux设置静态ip”高居榜首但90%的教程教的是错误方法直接改/etc/sysconfig/network-scripts/ifcfg-eth0。这在Rocky 8早期版本尚可工作但在Rocky 8.10及所有Rocky 9版本中NetworkManager已完全接管网络栈legacy脚本被标记为“deprecated”。当你编辑ifcfg文件并执行ifdown eth0 ifup eth0时NetworkManager会检测到配置变更自动覆盖你的修改并在/var/log/messages中记录NetworkManager[1234]: info [1712345678.1234] device (eth0): reapply: apply connection /org/freedesktop/NetworkManager/ActiveConnection/5——这意味着你的手工配置从未生效。3.1 NetworkManager的三层配置模型connection、device、settingNetworkManager不是简单的“网络配置工具”而是一个状态机驱动的网络控制器。它的配置分为三层Connection连接抽象的网络连接定义如“公司内网”、“DMZ区”、“管理网段”。每个Connection包含IP地址、DNS、路由等所有网络参数Device设备物理或虚拟网卡如ens33、virbr0。Device负责收发数据包Setting设置Connection与Device的绑定关系。一个Device可以绑定多个Connection但同一时间只激活一个。验证当前激活的Connectionnmcli connection show --active # 输出示例 # NAME UUID TYPE DEVICE # System ens33 a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 ethernet ens333.2 正确配置静态IP的四步法实测通过以将ens33配置为192.168.1.100/24网关192.168.1.1DNS114.114.114.114为例第一步修改现有Connection# 查看当前Connection名称通常为System ens33或Wired connection 1 nmcli connection show # 修改IPv4设置 nmcli connection modify System ens33 \ 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 \ ipv4.ignore-auto-dns yes # 关键禁用DHCP获取的路由和DNS否则会与手动配置冲突第二步重启Connection# 先断开 nmcli connection down System ens33 # 再激活此时NetworkManager会重载配置 nmcli connection up System ens33第三步验证配置生效# 检查IP地址 ip addr show ens33 | grep inet # 检查默认路由 ip route | grep default # 检查DNS解析 cat /etc/resolv.conf # 输出应为nameserver 114.114.114.114 # 检查NetworkManager状态 nmcli device status # ens33状态应为connected第四步持久化配置防重启丢失# NetworkManager默认持久化但需确认配置未被其他服务覆盖 # 检查是否有cloud-init残留常见于云镜像 ls /var/lib/cloud/instance/semaphore/ # 若存在说明cloud-init仍在运行需禁用 sudo systemctl disable cloud-init sudo rm -rf /var/lib/cloud/instance/注意/etc/resolv.conf在Rocky 9中是NetworkManager生成的符号链接指向/var/run/NetworkManager/resolv.conf。不要直接编辑该文件否则重启后会被覆盖。4. Root远程登录的“安全开关”SELinux、sshd_config与PAM的三角制约搜索热词中“rocky 安装root连接不上”频繁出现。这不是Rocky的bug而是RHEL系系统深度安全设计的必然结果。Rocky沿用了RHEL的三重防护机制SELinux策略限制、sshd_config默认配置、PAM模块校验。任意一环未打通root SSH都会失败。4.1 SELinux的root登录策略sebool与type enforcementRocky默认启用SELinux enforcing模式。其中ssh_sysadm_login布尔值boolean控制root能否通过SSH登录# 查看当前状态 getsebool ssh_sysadm_login # 输出ssh_sysadm_login -- off # 开启永久生效 sudo setsebool -P ssh_sysadm_login on但这只是第一步。SELinux还通过类型强制Type Enforcement约束root进程的权限。当root通过SSH登录时sshd会启动staff_t域domain而staff_t默认不允许执行su或sudo。需额外启用# 允许staff_t域执行sudo sudo setsebool -P allow_staff_sudo on # 允许staff_t域读取root家目录否则登录后cd ~会Permission denied sudo setsebool -P staff_read_home_dirs on4.2 sshd_config的五个关键参数/etc/ssh/sshd_config中以下五项必须精确配置参数推荐值作用错误后果PermitRootLoginyes允许root密码登录设为without-password则仅允许密钥设为no则完全禁止PasswordAuthenticationyes启用密码认证设为no则密码无效即使PermitRootLoginyes也无用PubkeyAuthenticationyes启用密钥认证建议保留关闭后无法使用密钥登录UsePAMyes启用PAM模块校验设为no则绕过PAM但SELinux策略仍生效PermitEmptyPasswordsno禁止空密码设为yes存在严重安全风险修改后必须重启sshdsudo systemctl restart sshd # 检查状态 sudo systemctl status sshd | grep Active: # 应显示active (running)4.3 PAM模块的root登录链/etc/pam.d/sshdRocky的PAM配置位于/etc/pam.d/sshd。其中关键模块pam_sepermit.so强制执行SELinux策略若ssh_sysadm_login为off则此模块直接拒绝登录pam_succeed_if.so user root检查用户名是否为rootpam_faildelay.so delay3000000登录失败后延迟3秒防暴力破解。验证PAM是否加载成功# 查看sshd的PAM日志 sudo tail -f /var/log/secure | grep pam_ # 尝试错误密码登录应看到pam_succeed_if(sshd:auth): error checking user root5. 离线环境下的生存工具链Python、JDK、LibreOffice的RPM精准部署企业内网、金融隔离区、工控现场常面临无外网环境。Rocky Minimal ISO不预装Python、JDK、LibreOffice需离线部署。但直接rpm -ivh *.rpm会触发依赖地狱——例如LibreOffice 7.4.7.2依赖libreoffice-core-7.4.7.2-10.el9.x86_64.rpm、libreoffice-calc-7.4.7.2-10.el9.x86_64.rpm等27个RPM包缺一不可。5.1 Python环境Rocky 9自带Python 3.9但需补充pip与venvRocky 9 Minimal预装python3-3.9.18-1.el9.x86_64但未安装python3-pip和python3-virtualenv。离线安装步骤在有网机器上用dnf download下载依赖包dnf download python3-pip python3-setuptools python3-wheel python3-virtualenv # 会下载python3-pip-21.3.1-3.el9.noarch.rpm等将RPM包拷贝至离线机器按依赖顺序安装# 先装setuptoolspip依赖 rpm -ivh python3-setuptools-59.6.0-1.el9.noarch.rpm # 再装wheelpip构建依赖 rpm -ivh python3-wheel-0.37.1-1.el9.noarch.rpm # 最后装pip rpm -ivh python3-pip-21.3.1-3.el9.noarch.rpm # 验证 python3 -m pip --version # 输出pip 21.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)5.2 JDK 17OpenJDK RPM包的版本对齐陷阱Rocky 9官方仓库提供java-17-openjdk-17.0.10.0.7-1.el9.x86_64.rpm但企业应用常要求特定版本如17.0.8.0.7。离线安装时必须确保JDK RPM与系统glibc版本匹配Rocky 9.3使用glibc 2.34JDK RPM包名中el9表示RHEL 9兼容el9_3表示RHEL 9.3兼容若下载java-17-openjdk-17.0.8.0.7-1.el9_2.x86_64.rpmRHEL 9.2在Rocky 9.3上安装会报错error: Failed dependencies: glibc 2.34-30 is needed by java-17-openjdk-17.0.8.0.7-1.el9_2.x86_64。解决方案从Rocky官网镜像站下载对应版本https://mirrors.tuna.tsinghua.edu.cn/rocky/9.3/BaseOS/x86_64/os/Packages/java-17-openjdk-17.0.10.0.7-1.el9.x86_64.rpm安装命令rpm -ivh java-17-openjdk-17.0.10.0.7-1.el9.x86_64.rpm # 设置JAVA_HOME echo export JAVA_HOME/usr/lib/jvm/java-17-openjdk | sudo tee -a /etc/profile source /etc/profile java -version5.3 LibreOffice 7.4.7.2RPM包的依赖树展开与安装顺序LibreOffice 7.4.7.2的RPM包需按拓扑序安装。我整理了最小依赖集共12个RPM非27个包名作用安装顺序libreoffice-core-7.4.7.2-10.el9.x86_64.rpm核心引擎1libreoffice-common-7.4.7.2-10.el9.x86_64.rpm共享资源2libreoffice-writer-7.4.7.2-10.el9.x86_64.rpm文字处理3libreoffice-calc-7.4.7.2-10.el9.x86_64.rpm表格处理4libreoffice-impress-7.4.7.2-10.el9.x86_64.rpm演示文稿5libreoffice-draw-7.4.7.2-10.el9.x86_64.rpm绘图工具6libreoffice-math-7.4.7.2-10.el9.x86_64.rpm公式编辑7libreoffice-base-7.4.7.2-10.el9.x86_64.rpm数据库8libreoffice-langpack-en-US-7.4.7.2-10.el9.x86_64.rpm英文语言包9libreoffice-help-en-US-7.4.7.2-10.el9.x86_64.rpm英文帮助10libreoffice-ure-7.4.7.2-10.el9.x86_64.rpmUNO运行时11libreoffice-fresh-7.4.7.2-10.el9.x86_64.rpm主程序入口12安装命令按序执行rpm -ivh libreoffice-core-7.4.7.2-10.el9.x86_64.rpm rpm -ivh libreoffice-common-7.4.7.2-10.el9.x86_64.rpm # ...依此类推 # 最后验证 libreoffice --version # 输出LibreOffice 7.4.7.2 47d2255555b55555555555555555555555555555提示所有RPM包均可从Rocky官方镜像站下载路径为https://mirrors.tuna.tsinghua.edu.cn/rocky/9.3/AppStream/x86_64/os/Packages/按包名首字母索引。6. 迁移后的终极验证用CentOS思维测试Rocky的“兼容性”完成安装和基础配置后真正的考验才开始。我给客户做迁移验收时必做五项“CentOS式”验证每项都直击企业级系统的核心诉求6.1 YUM/DNF仓库一致性验证CentOS用户最怕“包找不到”。验证Rocky仓库是否与CentOS 7/8行为一致# Rocky 8应能安装CentOS 8的包 dnf list kernel-devel --disablerepo* --enablerepobaseos,appstream # 输出应包含kernel-devel.x86_64 4.18.0-477.27.1.el8_8 # Rocky 9应能安装RHEL 9的包即CentOS Stream 9的上游 dnf list glibc --disablerepo* --enablerepobaseos,appstream # 输出应包含glibc.x86_64 2.34-30.el9_36.2 systemd服务兼容性测试创建一个模拟企业服务的脚本# /opt/myapp/start.sh #!/bin/bash echo $(date): MyApp started /var/log/myapp.log sleep 3600 # 创建systemd服务单元 sudo tee /etc/systemd/system/myapp.service EOF [Unit] DescriptionMyApp Service Afternetwork.target [Service] Typesimple Userroot WorkingDirectory/opt/myapp ExecStart/opt/myapp/start.sh Restarton-failure RestartSec10 [Install] WantedBymulti-user.target EOF # 启用并启动 sudo systemctl daemon-reload sudo systemctl enable myapp.service sudo systemctl start myapp.service # 验证CentOS用户熟悉的命令 sudo systemctl status myapp.service | grep active (running) sudo journalctl -u myapp.service -n 5 --no-pager6.3 SELinux上下文继承测试企业应用常需访问特定目录。验证SELinux是否正确继承# 创建应用目录 sudo mkdir -p /opt/myapp/data # 设置SELinux上下文模仿CentOS习惯 sudo semanage fcontext -a -t httpd_sys_rw_content_t /opt/myapp/data(/.*)? sudo restorecon -Rv /opt/myapp/data # 验证 ls -Z /opt/myapp/data # 输出应含unconfined_u:object_r:httpd_sys_rw_content_t:s06.4 内核模块加载兼容性很多企业驱动如InfiniBand、GPU需编译内核模块。验证Rocky内核头文件完整性# 安装内核开发包 dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r) # 检查头文件路径 ls /usr/src/kernels/$(uname -r)/include/generated/uapi/linux/version.h # 应存在且内容为#define UTS_RELEASE 5.14.0-362.18.1.el9_3.x86_646.5 安全更新通道验证企业最关心“补丁是否及时”。验证Rocky更新源# 查看启用的仓库 dnf repolist --enabled # 检查安全更新Rocky 9的security repo名为crb dnf updateinfo list security # 模拟安全更新不实际安装 dnf --assumeno update --security # 应列出CVE编号如CVE-2023-XXXXX Critical/Important我在给那家金融公司做验收时用这五项测试跑了三天覆盖了他们所有核心业务系统的依赖场景。最终结论是Rocky不是CentOS的“替代品”而是其技术血脉的合法继承者。它不承诺“更多功能”但严守“零偏差”的企业级契约——这才是零基础用户真正需要的“高手起点”。