23.3. 重要的 RPM 特性和变化


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

主要特性包括:

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

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

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

      例如:

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

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

    • 元(未排序)依赖项

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

      例如:

      Requires(meta): <pkgname>
      Copy to Clipboard Toggle word wrap
    • 表达式中的原生版本比较

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

      例如:

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

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

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

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

    • %autopatch 现在接受补丁范围

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

    • %patchlist%sourcelist 部分

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

    • 一个声明构建条件的更直观的方法

      从 RHEL 9.2 开始,您可以使用新的 %bcond 宏来构建条件。%bcond 宏使用构建条件名称和默认值作为参数。与旧的 %bcond_with%bcond_without 宏相比,%bcond 更易于理解,并可让您在构建时计算默认值。默认值可以是任意数字表达式。

      例如:

      • 要创建 gnutls 构建条件,默认启用的:

        %bcond gnutls 1
        Copy to Clipboard Toggle word wrap
      • 要创建 bootstrap 构建条件,默认禁用的:

        %bcond bootstrap 0
        Copy to Clipboard Toggle word wrap
      • 要创建 openssl 构建条件,默认与 gnutls 相反:

        %bcond openssl %{without gnutls}
        Copy to Clipboard Toggle word wrap
    • %patch N 不再应用补丁号 0

      在以前的版本中,当您使用 %patch N 语法时,其中 N 是补丁的数量,除了 N 指定补丁外,语法还会应用补丁号 0 (Patch0)。

      在 RHEL 9.6 中,%patch N 语法已被修复,仅应用补丁号 N

      重要

      如果您使用 %patch 指令没有指定补丁号,作为 %patch 0 的缩写,则会应用Patch0。但是,会输出警告信息,建议您使用显式语法,例如 %patch 0%patch -P 0 而不是 %patch 来应用 补丁。

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

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

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

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat