19.3.2. 改进了打包体验


支持动态 spec 生成

现在,您可以通过将包含 spec 部分的文件放在预定义的位置,来在构建过程中添加子软件包。如需更多信息,请参阅 动态 Spec 生成

rpmspec 命令行工具中的新 --shell 选项

这个选项运行交互式 RPM 宏解释器,可用来在 spec 文件上下文之内或之外开发和测试 RPM 宏。如需更多信息,请参阅您系统上的 rpmspec (8) 手册页。

支持在 %autopatch 中应用单个补丁

现在,您可以将特定的补丁号列为位置参数,例如 %autopatch 1 4 6 以应用补丁号 1、4 和 6。

%files 部分中正确的类似 shell 的通配符和转义字符

文件名中的通配符模式和转义字符(如反斜杠和引号)现在以更常规的方式解释,镜像 shell 解释器(如 Bash)的行为。在以前的版本中,对这些规则的未记录的限制和例外可能会导致意外的结果,并可能会阻止在 spec 文件的 %files 部分中使用更复杂的模式。

源 RPM 软件包中的一个新标签,其中包含 spec 文件的解析和扩展的内容

为了帮助分析打包问题,现在一个新的 RPMTAG_SPEC 标签已添加到源 RPM 软件包中。此标签包括扩展的 spec 文件的内容,其格式为构建期间使用的形式。您可以通过执行 rpm --qf ‘%{spec}’ -q /path/to/my/src.rpm 命令来查看此标签。

构建并行性现在会考虑系统资源

在估算构建软件包时要使用的并行进程和线程数量时,RPM 现在会考虑可用的物理内存和地址空间。这有助于防止性能问题或在具有受限资源的系统(如有大量 CPU ,但内存有限的系统)上的构建失败。

您可以通过分别定义 %_smp_tasksize_proc%_smp_tasksize_thread 宏来指定单个进程或线程在构建时所需的内存量,来调整这些估计值。这两个宏的默认值为 512 MB。例如,如果您的系统有性能问题,您可以提高 RPM 的这些值,以便为构建分配较少的 CPU。同样,如果您的系统得到充分利用,您可以减少 RPM 的这些值来分配更多的 CPU。

如需更多信息,请参阅 控制构建并行性的宏

使用 zstd 的有效负载压缩现在支持多线程

zstdio 压缩方法现在接受一个可选的 T 参数,该参数指定在构建期间压缩有效负载时要使用的线程数。这有助于缩短大型软件包的构建时间。要启用此功能,请相应地设置 %_binary_payload%_source_payload 宏。如需更多信息,请参阅 /usr/lib/rpm/macros 文件中相关的注释块,以及 预期的格式表

新的可选 %conf spec 文件部分

您可以使用此部分配置用于构建的解包源,而不是在 spec 文件的 %prep%build 部分中配置它们。

lua 原生宏集成

嵌入的 Lua 解释器已更新,来包含以下改进:

  • 通过 Lua 表轻松访问选项和参数。

    在以前的版本中,您必须使用 rpm.expand () 函数来访问参数化 Lua 宏的选项和参数。有了此增强,这些宏分别以 optarg 本地表来接收其选项和参数。

  • 全局宏上下文.

    现在可以通过全局 Lua 环境中的 macros 表访问宏。此表还可用于调用参数化宏,包括所有内置宏。

  • RPM 版本对象和 I/O 流的新绑定。

    现在,您可以使用新的 rpm.ver() 函数从 RPM 版本字符串创建对象。您可以使用这些对象执行以下操作:

    • 分别通过 evr 字段获取各个预解析的 EVR 组件。
    • 相互比较 RPM 版本字符串。

    您还可以使用新的 rpm.open() 函数打开使用 RPM 的 I/O 功能的文件流,如透明压缩和解压缩。

如需更多信息,请参阅 RPM 中的 Lua

用于在 Lua 中实施方便字符串操作的新宏

现在,您可以使用 RPM 宏执行基本字符串操作,如提取子字符串或获取长度,而无需执行 shell 子进程。如需更多信息,请参阅 字符串操作

用于内置和用户定义的宏的统一调用约定

用于调用宏的 %foo arg,%{foo arg}%{foo:arg} 表示法现在等效。但请注意,可能仍有细微的例外和不同。

多个新内置宏

现在提供了多个新内置宏,最重要的是:

  • %{rpmversion} 用于获取系统上安装的 RPM 版本。
  • %{exists:…​} 用于测试文件是否存在。
  • %{shescape:…​} 用于将字符串括在单引号('')里,以便在需要单个参数的 shell 命令中使用。

新的 %preuntrans%postuntrans scriptlet

%preuntrans%postuntrans uninstall-time scriptlets 补充现有的 install-time %pretrans%posttrans scriptlet:

  • %preuntrans scriptlets 在此事务要删除的软件包的事务之前执行。
  • %postuntrans scriptlet 在此事务删除的软件包的事务之后执行。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部