CentOS 8和CentOS 9在软件包管理上有什么主要区别?

CentOS 8 和 CentOS 9 在软件包管理上的核心区别在于底层工具链的升级以及软件源策略的调整。虽然两者都使用 dnf 作为默认包管理器,但具体行为、依赖解析机制和仓库配置存在显著差异。

以下是主要区别的详细说明:

1. 包管理器版本与特性

  • CentOS 8: 使用较早期的 dnf (通常基于 RHEL 8.0-8.x)。虽然引入了 dnf 取代 yum,但在某些高级依赖解决功能上不如新版成熟。
  • CentOS 9: 使用了更新版本的 dnf (基于 RHEL 9.0+)。新版本带来了更强大的依赖解析算法(如 libdnf5 的逐步集成尝试,尽管 CentOS Stream 9 早期仍主要用 libdnf4,但整体性能更好)、更快的安装速度以及更好的并行下载能力。
    • 注意: 在 CentOS 9 中,yum 命令依然存在,但它只是指向 dnf 的一个软链接或脚本包装器,不再是一个独立的二进制程序。

2. 软件源架构与生命周期 (关键区别)

这是两者最本质的区别,直接影响用户如何获取软件包。

  • CentOS 8 (已停止维护):

    • 原本计划提供长期的稳定版支持,但在 2021 年底提前结束生命周期 (EOL)。
    • 官方仓库被迁移至 vault.centos.org,这意味着所有旧版本的软件包都被归档,无法再通过常规方式获取最新的补丁或安全更新。
    • 用户必须手动修改 /etc/yum.repos.d/ 中的 baseurl 指向 vault 地址才能继续使用。
  • CentOS 9 (Stream 模式):

    • CentOS 9 是 CentOS Stream 的一部分,它不再是“下游”的静态发布版(即 RHEL 的完全克隆),而是变成了 RHEL 的“上游”滚动预览版。
    • 无 EOL 恐慌: 只要订阅仍在有效期内,用户可以持续获得更新。
    • 仓库结构变化: 默认启用了 BaseOS、AppStream 和 CR (Crucial Release) 等模块化的仓库结构。软件包的版本更新频率比 CentOS 8 更快,更接近 RHEL 的开发进度。

3. 模块化 (Modularity) 的差异

两者都支持模块化,但实现细节不同:

  • CentOS 8: 模块化功能已经非常完善,允许用户通过 module list 查看和切换不同的软件流(例如选择不同的 PostgreSQL 或 Node.js 版本)。
  • CentOS 9: 进一步增强了模块化管理。
    • 默认情况下,某些核心组件(如 Python, PHP, Ruby)在 CentOS 9 中被强制为模块化,非模块化安装可能受限。
    • 引入了更细粒度的控制,允许用户在同一个系统上共存多个版本的同一软件(通过命名空间区分),而不会像过去那样发生冲突。

4. 默认软件包版本与兼容性

由于 CentOS 9 基于更新的 RHEL 9 内核和库,其默认安装的软件包版本普遍高于 CentOS 8:

  • GCC: CentOS 8 默认 GCC 8,CentOS 9 默认 GCC 11。
  • Python: CentOS 8 默认 Python 3.6/3.8,CentOS 9 默认 Python 3.9。
  • 影响: 这导致许多为 CentOS 8 编译的二进制包(RPM)在 CentOS 9 上无法直接运行,因为缺少对应的 glibc 或其他系统库支持。反之亦然。

5. 命令行为的细微差别

特性 CentOS 8 CentOS 9
搜索优化 dnf search 较慢,结果排序一般 搜索结果更精准,排序逻辑优化
事务模拟 dnf install --assumeno 表现正常 改进的事务检查机制,能更早发现冲突
插件支持 部分旧插件可能不兼容新 API 对旧插件兼容性要求更高,需适配新版 libdnf
清理缓存 dnf clean all 常用 同上,但增加了更多智能清理选项

总结与建议

维度 CentOS 8 CentOS 9
当前状态 已结束生命周期 (EOL),仅适合离线或特定历史环境 活跃维护,作为 RHEL 的上游测试平台
软件源 需手动配置 Vault 仓库,获取的是旧版本 自动连接官方实时仓库,获取较新版本
适用场景 遗留系统维护(需自行打补丁或迁移) 开发测试、需要较新软件栈的生产环境(需注意稳定性)
包兼容性 较低版本的 glibc/C++ 标准库 较高版本的 glibc/C++ 标准库

重要提示:如果您正在规划新项目,不建议再选择 CentOS 8,因为它已经不再接收任何安全更新。对于生产环境,建议考虑 AlmaLinux 9 或 Rocky Linux 9(它们是 RHEL 的 1:1 下游克隆,保留了传统 CentOS 的稳定性和长期支持策略),或者直接使用 CentOS Stream 9(如果您希望尽早体验 RHEL 的新特性并接受潜在的微小不稳定性)。

云服务器