Menu Close

第 7 章 软件管理

本章列出了 RHEL 8 和 RHEL 9 之间软件管理的最显著更改。

7.1. 软件管理的主要变化

使用 DNF/YUM 进行软件包管理

在 Red Hat Enterprise Linux 9 中,使用 DNF 确保软件安装 。红帽继续支持使用 yum 术语,以便与以前的 RHEL 主版本保持一致。如果您键入 dnf 而不是 yum,则命令按预期运行,因为它们都是兼容性的别名。

虽然 RHEL 8 和 RHEL 9 基于 DNF,但它们与 RHEL 7 中使用的 YUM 兼容。

如需更多信息,请参阅使用 DNF 工具管理软件

重要的 RPM 特性和变化

Red Hat Enterprise Linux 9 带有 RPM 版本 4.16。与之前的版本相比,这个版本引入了很多改进。

主要特性包括:

  • 新的 SPEC 功能,最重要的是:

    • 快速基于宏的依赖关系生成器

      现在可以将依赖项生成器定义为常规 RPM 宏。这在使用嵌入式 Lua 解释器时非常有用 (%{lua:…​}),因为它启用了编写复杂的快速生成器,并避免冗余分叉和执行 shell 脚本。

      例如:

      %__foo_provides()    %{basename:%{1}}
    • 启用生成动态构建依赖项的 %generate_buildrequires 部分

      现在,可以使用新可用的 %generate_buildrequires 部分,以编程方式生成额外的构建依赖项。这在使用特殊实用程序编写的语言打包软件时很有用,它用于确定运行时或构建运行时依赖项,如 Rust、Node.js、Ruby、Python 或 Haskell。

    • 元(未排序)依赖项

      新的名为 meta 的依赖项限定器,可以用来指定不特定于安装时或运行时依赖项的依赖项。这可用于避免因正常依赖关系顺序而产生的不必要的依赖关系循环,比如在指定 meta 软件包的依赖项时。

      例如:

      Requires(meta): <pkgname>
    • 表达式中的原生版本比较

      现在,可以使用新支持的格式来比较表达式中的任意版本字符串 v"…​" 格式。

      例如:

      %if v"%{python_version}" < v"3.9"
    • 尖号( ^ ) 操作符,与波形符( ~ )相反

      新的 caret(^)运算符,可用于指定高于基本版本的版本。它是一个与现有波形符(~)运算符的补充,其具有相反语义。

    • %elif%elifos%elifarch 语句
    • 可选的自动补丁和源编号

      Patch:Source: 标签现在根据列出的顺序自动为没有数字编号。

    • %autopatch 现在接受补丁范围

      %autopatch 宏现在接受 -m-M 参数,以分别限制要应用的最小和最大补丁号。

    • %patchlist%sourcelist 部分

      现在,可以通过使用新添加的 %patchlist%sourcelist 部分,列出补丁和源文件,而无需之前带有相应 Patch: 和 Source: 标签。

  • RPM 数据库现在基于 sqlite 库。为迁移和查询目的保留了对 BerkeleyDB 数据库的只读支持。
  • 一个新的 rpm-plugin-audit 插件,用于发出交易的审计日志事件,之前内置在 RPM 自身中
  • 增加了软件包构建的并行性

    对软件包构建过程进行并行化的方式有大量改进。这些改进涉及各种 buildroot 策略脚本和健全性检查、文件分类和子软件包创建和排序。因此,在多处理器系统上构建软件包,特别是对于大型软件包,现在应该更快且效率更高。

  • 构建时强制进行标头数据的 UTF-8 验证
  • RPM 现在支持 Zstandard (zstd) 压缩算法

    在 RHEL 9 中,默认的 RPM 压缩算法已切换到 Zstandard(zstd)。因此,软件包现在可以更快地安装,这在大型环境中会特别明显。