Red Hat Training
A Red Hat training course is available for RHEL 8
4.2. 什么是 SPEC 文件
您可以将 SPEC 文件作为 rpmbuild
实用程序用来构建 RPM 的配方。SPEC 文件通过定义一系列部分中的说明,为构建系统提供必要信息。这些部分在 Preamble 和 Body 部分中定义。Preamble 部分包含一系列在 Body 部分中使用的元数据项。Body 部分代表说明的主要部分。
以下小节描述了 SPEC 文件的每个部分。
4.2.1. Preamble 项
下表介绍了 RPM SPEC 文件的 Preamble 部分中经常使用的一些指令。
表 4.1. RPM SPEC 文件的 Preamble
部分中使用的项目
SPEC 指令 | 定义 |
---|---|
| 软件包的基本名称,应该与 SPEC 文件名匹配。 |
| 软件的上游版本。 |
|
发布此软件版本的次数。通常,将初始值设为 1%{?dist},并在每个新版软件包中递增。当软件的一个新 |
| 软件包的一个简短总结. |
| 所打包的软件许可证。 |
| 有关程序的更多信息的完整 URL。大多数情况下,这是所打包软件的上游项目网站。 |
| 上游源代码的压缩存档的路径或 URL(未修补,补丁会在其他位置处理)。这应该指向该存档的可访问且可靠的存储,例如上游页面而不是打包程序的本地存储。如果需要,可以添加更多 SourceX 指令,每次都增加数字,例如 Source1、Source2、Source3 等。 |
| 应用于源代码的第一个补丁的名称(如有必要)。 该指令可以通过两种方式应用:带有或不带补丁末尾的数字。 如果没有指定数字,则会在内部分配一个条目。也可以使用 Patch0, Patch1, Patch2, Patch3 明确提供数字。 这些补丁可以通过使用 %patch0、%patch1、%patch2 宏等应用。宏在 RPM SPEC 文件的 Body 部分中的 %prep 指令中应用。或者,您可以使用 %autopatch 宏,以 SPEC 文件中提供的顺序自动应用所有补丁。 |
|
如果软件包没有架构依赖,例如,如果完全使用解释编程语言编写,则将其设置为 |
|
使用编译语言构建程序所需的逗号或空格分开的软件包列表。 |
|
安装之后,软件需要以逗号或空格分开的软件包列表。 |
| 如果某一软件不能在特定处理器架构上运行,您可以在此处排除该架构。 |
|
|
|
这个指令会改变更新的工作方式,具体取决于 |
|
如果向软件包添加了 |
Name
、Version
和 Release
指令包含 RPM 软件包的文件名。RPM 软件包维护者和系统管理员经常调用这三个指令 N-V-R 或 NVR,因为 RPM 软件包文件名具有 NAME-VERSION-RELEASE
格式。
以下示例演示了如何通过查询 rpm
命令获取特定软件包的 NVR 信息。
例 4.1. 查询 rpm 为 bash 软件包提供 NVR 信息
# rpm -q bash bash-4.4.19-7.el8.x86_64
在这里,bash
是软件包名称,4.4.19
是版本,7el8
是发行版本。最后的标记是 x86_64
,它向架构发出信号。与 NVR 不同,架构标记不直接控制 RPM 打包程序,而是由 rpmbuild
构建环境进行定义。这种情况的例外是独立于架构的 noarch
软件包。
4.2.2. 正文项
以下是 RPM SPEC 文件的 Body 部分中使用
的项目。
表 4.2. RPM SPEC 文件的 Body 部分中使用的项目
SPEC 指令 | 定义 |
---|---|
| RPM 中打包的软件的完整描述。此描述可跨越多行,并且可以分为几个段落。 |
|
用于准备要构建的软件的命令或一系列命令,例如,在 |
| 将软件构建成机器码(对于编译语言)或字节码(对于某些解释语言)的命令或一系列命令。 |
|
命令或一系列命令,用于将所需的构建工件从 |
| 用于测试软件的命令或一系列命令。这通常包括单元测试等内容。 |
| 包括在最终用户系统中的文件列表。 |
|
在不同 |
4.2.3. 高级 items
SPEC 文件还可以包含高级项目,如 Scriptlets 或 Triggers。
它们在安装过程中对最终用户系统而不是构建过程的不同点生效。