4.2. 关于 spec 文件


spec 文件是一个包含 rpmbuild 工具用来构建 RPM 软件包的指令的文件。此文件通过在一系列部分中定义指令,为构建系统提供必要的信息。这些部分在 spec 文件的 PreambleBody 部分中定义:

  • Preamble 部分包含一系列在 Body 部分中使用的元数据项。
  • Body 部分代表说明的主要部分。

4.2.1. Preamble 项

以下是您一些可以在 RPM spec 文件的 Preamble 部分中使用的指令。

Expand
表 4.2. Preamble 部分指令
指令定义

Name

软件包的基本名称必须与 spec 文件名匹配。

Version

软件的上游版本号。

发布

软件包版本发布的次数。

将初始值设置为 1%{?dist},并随着软件包的每次新发布而增加该值。当构建软件的新 版本 时,重置为 1

Summary

软件包的一行简短摘要。

License

被打包的软件的许可证。

如何在 spec 文件中标记 License 的确切格式随您遵循的基于 RPM 的 Linux 发行版准则(例如 GPLv3+)而异。

URL

有关软件的更多信息的完整 URL,例如,打包软件的上游项目网站。

Source

到压缩的未打补丁的上游源代码的存档的路径或 URL。此链接必须指向存档的可访问且可靠的存储,例如上游页面,不是打包程序的本地存储。

您可以在指令名称的末尾使用或不使用号码应用 Source 指令。如果没有给定号码,则会在内部将号码分配给条目。您也可以明确提供号码,例如 Source0Source1Source2Source3 等。

Patch

应用到源代码的第一个补丁的名称(如有必要)。

您可以在指令名称的末尾使用或不使用号码应用 Patch 指令。如果没有给定号码,则会在内部将号码分配给条目。您也可以明确提供号码,如 Patch0,Patch1,Patch2,Patch3 等。

您可以使用 %patch0%patch1%patch2 宏等单独应用补丁。宏在 RPM spec 文件的 Body 部分中的 %prep 指令中应用。或者,您可以使用 %autopatch 宏,其按它们在 spec 文件中的顺序自动应用所有补丁。

BuildArch

将为之构建软件的架构

如果软件不依赖于架构,例如,如果您完全使用解释型编程语言编写软件,请将值设为 BuildArch: noarch。如果没有设置这个值,软件会自动继承构建它的机器的架构,例如 x86_64

BuildRequires

构建使用编译语言编写的程序所需的逗号或空格分开的软件包的列表。BuildRequires 可以有多个条目,每个条目都在 SPEC 文件中的独立的行中。

Requires

安装之后,软件需要以逗号或空格分开的软件包列表。可以有多个 Requires 条目,每个条目在 spec 文件中各有一行。

ExcludeArch

如果软件的一部分无法在特定的处理器架构上运行,您可以在 ExcludeArch 指令中排除此架构。

Conflicts

不必安装在系统上,以便您的软件在安装时可以正常工作的用逗号或空格分开的软件包的列表。可以有多个 Conflicts 条目,每个条目在 spec 文件中各占一行。

Obsoletes

Obsoletes 指令根据以下因素更改更新的工作方式:

  • 如果您直接在命令行上使用 rpm 命令,它会删除与正在安装的软件包的过时版本匹配的所有软件包,或者通过更新或依赖项解决程序执行更新。
  • 如果您使用更新或依赖项解决程序(DNF),则包含匹配 Obsoletes: 的软件包会被作为更新添加,并替换匹配的软件包。

Provides

如果您向软件包中添加了 Provides 指令,则这个软件包可以通过依赖项,而不是其名称引用。

NameVersionRelease (NVR)指令以 名称-版本-发行版本 格式组成 RPM 软件包的文件名。

您可以使用 rpm 命令查询 RPM 数据库来显示特定软件包的 NVR 信息,例如:

# rpm -q bash
bash-4.4.19-7.el8.x86_64

在这里,bash 是软件包名称,4.4.19 是版本,7el8 是发行版本。x86_64 标记是软件包架构。与 NVR 不同,架构标记不在 RPM 打包程序的直接控制之下,而是由 rpmbuild 构建环境定义。这种情况的例外是独立于架构的 noarch 软件包。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部