Red Hat Training
A Red Hat training course is available for RHEL 8
5.8. 如何使用 Perls 脚本处理 RPM 软件包
从 RHEL 8 开始,默认 buildroot 中不包含 Perl 编程语言。因此,包含 Perl 脚本的 RPM 软件包必须使用 RPM SPEC 文件中的 BuildRequires:
指令明确指明 Perl 的依赖项。
5.8.1. 与 Perl 相关的常见依赖项
BuildRequires
中使用的与 Perl 相关的构建依赖项是 :
perl-generators
为已安装的 Perl 文件自动生成运行时
Requires
和Provides
。安装 Perl 脚本或 Perl 模块时,必须包含针对这个软件包的构建依赖项。perl-interpreter
如果以任何方式(通过
perl
软件包或%__perl
宏),或作为软件包构建系统的一部分,则必须将 Perl 解释器列为构建依赖项。perl-devel
提供 Perl 的 header 文件。如果构建特定于架构的代码,该代码链接到
libperl.so
库,如 XS Perl 模块,则必须包括BuildRequires: perl-devel
。
5.8.2. 使用特定的 Perl 模块
如果构建时需要特定的 Perl 模块,请使用以下步骤:
流程
在您的 RPM SPEC 文件中应用以下语法:
BuildRequires: perl(MODULE)
注意另外,将此语法应用到 Perl 核心模块,因为它们可能会随时间推移和移出
perl
软件包。
5.8.3. 将软件包限制为特定的 Perl 版本
要将软件包限制为特定的 Perl 版本,请按照以下步骤执行:
流程
使用 RPM SPEC 文件中的
perl(:VERSION)
依赖项与所需的版本约束:例如,要将软件包限制为 Perl 版本 5.22 及更新的版本,请使用:
BuildRequires: perl(:VERSION) >= 5.22
不要使用与 perl
软件包版本的比较,因为它会包括 epoch 号。
5.8.4. 确保软件包使用正确的 Perl 解释器
红帽提供了多个 Perl 解释器,它们不完全兼容。因此,任何提供 Perl 模块的软件包都必须在运行时使用在构建时所用的 Perl 解释器。
要确定这一点,请按照以下步骤执行:
流程
对于提供 Perl 模块的任何软件包,在 RPM SPEC 文件中包括版本化的
MODULE_COMPAT
Requires
:Requires: perl(:MODULE_COMPAT_%(eval `perl -V:version`; echo $version))