CentOS 8.3 和 CentOS 7.6 在软件包管理和依赖处理上存在根本性差异,主要源于底层包管理器从 YUM(基于 RPM) 升级为 DNF(Dandified YUM)。以下是核心区别的详细对比:
1. 包管理器核心变化
| 特性 | CentOS 7.6 | CentOS 8.3 |
|---|---|---|
| 默认包管理器 | yum(基于 RPM) |
dnf(新一代 YUM) |
| 后端引擎 | RPM + Python 2 | RPM + Python 3 + libsolv |
| 命令兼容性 | yum 是主命令 |
yum 是 DNF 的符号链接(兼容层),实际调用 DNF |
| 配置工具 | /etc/yum.conf |
/etc/dnf/dnf.conf(但 yum.conf 仍被兼容读取) |
✅ 关键提示:在 CentOS 8 中,
yum install xxx实际上等同于dnf install xxx,性能更好、依赖解析更智能。
2. 依赖解析机制
| 方面 | CentOS 7.6 (YUM) | CentOS 8.3 (DNF) |
|---|---|---|
| 算法复杂度 | 回溯式求解,较慢,尤其在大依赖图中易卡顿 | 使用 libsolv 库,SAT 求解器,速度显著提升 |
| 依赖冲突检测 | 较宽松,有时忽略间接冲突 | 更严格,提前识别并报告潜在冲突 |
| 事务回滚 | 支持有限,失败后需手动清理 | 完整事务支持,可安全回滚未完成的安装/卸载 |
| 并行下载 | 不支持 | 支持多线程并行下载元数据和包 |
📌 示例:
- CentOS 7:
yum install nginx可能因依赖链复杂而长时间等待或报错。- CentOS 8:
dnf install nginx通常更快,且能明确提示“无法解决请求”的具体原因。
3. 仓库结构与模块(Module)
| 特性 | CentOS 7.6 | CentOS 8.3 |
|---|---|---|
| 仓库分类 | 基础(base)、更新(updates)、EPEL 等独立源 | 引入 AppStream 仓库,区分“核心系统包”与“应用流” |
| 模块化支持 | ❌ 无原生模块概念 | ✅ 支持 Module(如 Python 3.6 vs 3.9 共存) |
| 版本共存 | 同一软件不同版本需通过 EPEL 或第三方源实现 | 通过 module 切换不同版本(如 dnf module switch-to python39) |
| 强类型依赖 | 弱依赖,易出现“隐式依赖”问题 | 强依赖关系,确保环境一致性 |
💡 举例:
在 CentOS 8 中,你可以同时安装多个 Python 版本作为模块:dnf module list python3 dnf module enable python39 dnf install python39
4. GPG 签名与安全性
| 方面 | CentOS 7.6 | CentOS 8.3 |
|---|---|---|
| GPG 检查 | 可选启用(gpgcheck=1 in yum.conf) |
强制启用,所有仓库必须签名 |
| 密钥管理 | 手动导入密钥常见 | 自动验证,违规仓库直接拒绝 |
| 加密传输 | HTTPS 支持有限 | 全面支持 HTTPS + HTTP/2 |
5. 其他重要差异
-
Python 版本:
- CentOS 7:系统默认 Python 2.7(部分工具依赖 Python 2)
- CentOS 8:系统默认 Python 3.6+,脚本需适配 Python 3
-
SELinux 策略:
- CentOS 8 使用更严格的 SELinux 策略,部分服务需额外配置才能正常运行
-
系统服务管理:
- 两者均使用
systemd,但 CentOS 8 的服务单元文件更规范,废弃了 SysVinit 兼容层
- 两者均使用
-
EPEL 兼容性:
- EPEL 7 包不能在 CentOS 8 直接使用
- EPEL 8 为 CentOS 8/RHEL 8 设计,包名和依赖结构已调整
迁移建议(从 CentOS 7 → 8)
- 不要直接升级:官方不提供平滑升级路径,建议全新安装。
- 重写脚本:将 Shell 脚本中的
yum替换为dnf,注意依赖解析行为变化。 - 测试模块功能:利用 AppStream 模块管理多版本软件。
- 检查 SELinux 上下文:新服务可能需要重新设置安全上下文。
总结
| 维度 | CentOS 7.6 | CentOS 8.3 |
|---|---|---|
| 包管理器 | YUM(慢、简单) | DNF(快、智能) |
| 依赖处理 | 回溯式、易出错 | SAT 求解、精确可靠 |
| 软件版本管理 | 单一版本为主 | 模块化多版本共存 |
| 安全性 | 可选 GPG 验证 | 强制签名验证 |
| 生态系统 | Python 2 生态 | Python 3 + 现代工具链 |
⚠️ 注意:CentOS 8 已于 2021 年 12 月停止维护,建议使用 Rocky Linux 8、AlmaLinux 8 或转向 CentOS Stream 9 / RHEL 9。
CLOUD技术笔记