第 4 章 自定义软件包管理


本章提供如何构建通过红帽网络成功发布的软件包。标题覆盖面包括为什么要使用 RPM?如何为红帽网络构建软件包?以及如何正确签署软件包。

4.1. 为红帽网络构建软件包

红帽网络使用 RPM 软件包管理程序(RPM Package ManagerRPM)技术来决定每个客户端系统可应用的软件附加组件和更新。在红帽网络搜索到的软件包通常是 RPM 格式,而在红帽网络网站的「软件」标签页中提供的是完整 ISO 映像,但在 Red Hat Satellite 服务器 安装中无效。如果您的 Satellite 启用了对 Solaris 的支持,您可以使用红帽网络 Push将 Solaris 软件包上传到 Solaris 客户端使用的自定义频道中。
RPM 是一个为用户提供简单安装、卸载、升级和验证软件包的工具。它还允许软件开发者为最终用户和开发者提供源码和编译版本打包文件。

4.1.1. RPM 的优点

RPM 有以下的优点:
容易升级
使用 RPM,您可以单独升级系统的组件而不用完全重新安装。当红帽发布红帽企业版 Linux 的新版本时,用户不需要重新安装就可以进行升级。RPM 允许智能、全自动、本地升级您的系统。在升级的过程中可保留软件包中的配置文件,因此用户不会丢失他们特定的配置。安装和升级软件包的时候使用同一个 RPM 文件,因此更新软件包时不需要特殊的升级文件。
软件包查询
RPM 提供的查询选项允许您在整个 RPM 数据库中查询所有软件包或只查询特定的文件。您还可以轻松地找到文件所属软件包以及该软件包的来源。软件包中的文件位于一个压缩归档中,这个文件有一个包括这个软件包信息及其内容的自定义二进制标头。RPM 可以快速、方便地查询软件包的标头信息。
系统验证
RPM 的另一个功能是可以进行软件包验证。如果您怀疑与一个软件包关联的文件已经被删除,您可以通过检查这个软件包来确定这个文件的状态。这个验证的过程会提示您所有异常情况。如果存在错误,您可以轻松地重新安装这个文件。在重新安装的过程中将保留配置文件。
Pristine 源
RPM 的一个重要的功能就是允许使用 pristine 软件源码,它是由这个软件的原始开发者提供的。使用 RPM 可将 pristine 源码及其使用的补丁程序以及完整构建说明打包。这个功能是非常重要的。例如,当发行一个新版本时,您不需要从头开始来编译它。您可以查看补丁来决定您可能需要做什么。使用此项技术,您可以方便地查看正确构建软件所需的所有编译的默认设置和修改。
保留源 pristine 看起来可能只对开发人员有用,但实际上它也可以为最终用户提供高质量的软件。

4.1.2. 红帽网络 RPM 指南

RPM 的优势在于可以准确定义依赖关系并发现冲突。红帽网络使用 RPM 的这个功能来处理软件的依赖关系。红帽网络提供了一个自动环境,这意味着在安装一个软件包的过程中不需要人工参与。因此,当为那些需要通过红帽网络发布的软件包构建 RPM 时,以下的原则非常重要:
  1. 了解 RPM。要正确地构建软件包,了解 RPM 的基本功能是非常重要的。有关 RPM 的信息请参考以下资源:
  2. 当为一个子频道构建 RPM 时, 请在新安装的、与子频道的基本频道使用同一版本的红帽企业版 Linux 中构建软件包。请确定首先从红帽网络中应用所有更新。
  3. 在安装 RPM 软件包时一定不能使用 --force--nodeps 选项。如果您无法在您构建的系统中“干净”地安装 RPM,红帽网络将不能在系统中自动安装它。
  4. RPM 软件包的文件名必须是 NVR[name(名称)、version(版本)、release(发行)]格式且必须包括这个软件包的体系结构。正确的格式应该是 name-version-release.arch.rpm。例如,一个有效的 RPM 软件包文件名是 pkgname-0.84-1.i386.rpm,它的名称是 pkgname,版本是 0.84,发行本是 1,构架是 i386
  5. RPM 软件包应该由其维护者签注。虽然未签注的软件包也可以通过红帽网络发布,但必须将 Red Hat Update Agent 配置为强制接受它们。我们强烈推荐使用经过签注的软件包,相关的内容请参考 第 4.2 节 “红帽网络软件包的电子签名”
  6. 如果软件包被修改(包括修改了签名或重新被编译),就必须相应增大版本或发行号。换句话说,通过红帽网络发布的每个 RPM 的 NVRA(包括体系结构)必须与其唯一构建对应以避免混淆。
  7. RPM 软件包不能自己作废。
  8. 如果一个软件包被分成多个单独的软件包,需要格外小心其相依性。除非由于编译的问题,否则请不要分割现有软件包。
  9. 软件包不能接受交互式的预安装(pre-install)、安装后(post-install)、预卸载(pre-uninstall)和卸载后(post-uninstall)脚本。如果软件包需要用户的直接参与,这个软件包将无法在红帽网络中工作。
  10. 在预安装、安装后、预卸载和卸载后脚本中不要写入任何 stderr 或 stdout 内容。如果不必要,请将信息重新输出到 /dev/null,否则请将它们写入一个文件中。
  11. 创建 spec 文件时,使用 /usr/share/doc/rpm-<version>/GROUPS 中的组定义。如果没有完全匹配的项,选择最接近的一个。
  12. 使用 RPM 的相依性性能确定此程序在安装后可正常运行。

重要

请不要通过归档来创建 RPM,然后再在安装后脚本中恢复它们。这违背了 RPM 的初衷。
如果文件列表中不包含归档中的文件,您将无法验证或检查它们之间的冲突。在大多数情况下,RPM 本身可以有效地将文件打包或解压缩。例如,如果您无法或者不会没有在 %postun 项中清除,就请不要在 %post 中创建文件。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat