23.3. 重要的 RPM 特性和变化
Red Hat Enterprise Linux 9 带有 RPM 版本 4.16。与之前的版本相比,这个版本引入了很多改进。
主要特性包括:
新的 SPEC 功能,最重要的是:
快速基于宏的依赖关系生成器
现在可以将依赖项生成器定义为常规 RPM 宏。这在使用嵌入式 Lua 解释器时非常有用 (
%{lua:…}
),因为它启用了编写复杂的快速生成器,并避免冗余分叉和执行 shell 脚本。例如:
%__foo_provides() %{basename:%{1}}
%__foo_provides() %{basename:%{1}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用生成动态构建依赖项的
%generate_buildrequires
部分现在,可以使用新可用的
%generate_buildrequires
部分,以编程方式生成额外的构建依赖项。这在使用特殊实用程序编写的语言打包软件时很有用,它用于确定运行时或构建运行时依赖项,如 Rust、Node.js、Ruby、Python 或 Haskell。元(未排序)依赖项
新的名为
meta
的依赖项限定器,可以用来指定不特定于安装时或运行时依赖项的依赖项。这可用于避免因正常依赖关系顺序而产生的不必要的依赖关系循环,比如在指定 meta 软件包的依赖项时。例如:
Requires(meta): <pkgname>
Requires(meta): <pkgname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 表达式中的原生版本比较
现在,可以使用新支持的格式来比较表达式中的任意版本字符串
v"…"
格式。例如:
%if v"%{python_version}" < v"3.9"
%if v"%{python_version}" < v"3.9"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尖号( ^ ) 操作符,与波形符( ~ )相反
新的 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
%bcond gnutls 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建
bootstrap
构建条件,默认禁用的:%bcond bootstrap 0
%bcond bootstrap 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建
openssl
构建条件,默认与gnutls
相反:%bcond openssl %{without gnutls}
%bcond openssl %{without gnutls}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
%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
)。因此,软件包现在可以更快地安装,这在大型环境中会特别明显。