2.7. 软件包布局
每个 Software Collection 的布局都由 metapackage 组成,它安装其它软件包的子集,以及软件集合命名空间中的多个软件包,它们安装在 Software Collection 命名空间中。
2.7.1. Metapackage 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
每个 Software Collection 都会包括一个 metapackage,它安装一个 Software Collection 的软件包子集,这是用户使用 Software Collection 执行最常见任务所必需的。例如,基本软件包可以提供 Perl 语言解释器,但不能提供 Perl 扩展模块。metapackage 包含基本的文件系统层次结构,并提供多个 Software Collection 的 scriptlets。
metapackage 的目的是确保软件集合中的所有基本软件包都已正确安装,并可启用 Software Collection。
metapackage 会生成以下软件包,它们也是 Software Collection 的一部分:
- 主软件包: %name
- Software Collection 中的主要软件包包含基本软件包的依赖项,它们包含在 Software Collection 中。主软件包不包含任何文件。当为您的 Software Collection 软件包指定依赖项时,请确保 Software Collection 中没有其它软件包取决于主软件包。主软件包的目的是仅安装那些对用户使用 Software Collection 执行大多数常见任务所需的软件包。通常,主软件包没有指定任何构建时间依赖项(例如,仅构建另一个 Software Collection 软件包依赖项的软件包)。例如,如果 Software Collection 的名称是
myorganization-ruby193
,则主软件包宏被扩展为:myorganization-ruby193
myorganization-ruby193
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 运行时子软件包: %name-runtime
- Software Collection 中的 runtime 子软件包拥有 Software Collection 的文件系统,并提供 Software Collection 的 scriptlets。需要安装此软件包,以便用户可以使用 Software Collection。例如,如果 Software Collection 的名称是
myorganization-ruby193
,则 runtime 子宏被扩展为:myorganization-ruby193-runtime
myorganization-ruby193-runtime
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 构建子软件包: %name-build
- Software Collection 中的 build 子软件包提供 Software Collection 的构建配置。它包含将软件包构建到 Software Collection 所需的 RPM 宏。build 子软件包是可选的,可以在 Software Collection 中排除。例如,如果 Software Collection 的名称是
myorganization-ruby193
,则构建子宏被扩展为:myorganization-ruby193-build
myorganization-ruby193-build
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myorganization-ruby193-build
子软件包的内容如下所示:cat /etc/rpm/macros.ruby193-config %scl myorganization-ruby193
$ cat /etc/rpm/macros.ruby193-config %scl myorganization-ruby193
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - syspaths 子软件包: %name-syspaths
- Software Collection 中的 syspaths 子软件包提供了一种可选的方式,可将方便的 shell 包装程序和符号链接安装到标准路径,从而更改基本系统安装,但在 Software Collection 软件包中使二进制文件更易于使用。例如,如果 Software Collection 的名称是
myorganization-ruby193
,则 syspaths 子宏被扩展为:myorganization-ruby193-syspaths
myorganization-ruby193-syspaths
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 syspaths 子软件包的详情请参考 第 3.3 节 “提供 syspaths Subpackages”。 - scldevel 子软件包: %name-scldevel
- %name Software Collection 中的 scldevel 子软件包包含开发文件,这些文件在开发依赖于 %name Software Collection 的另一个 Software Collection 的软件包时非常有用。scldevel 子软件包是可选的,可以从 %name Software Collection 中排除。例如,如果 Software Collection 的名称是
myorganization-ruby193
,scldevel 子软件包宏将扩展为:myorganization-ruby193-scldevel
myorganization-ruby193-scldevel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 scldevel 子软件包的详情请参考 第 4.1 节 “提供 scldevel 子软件包”。
2.7.2. 创建 Metapackage 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在创建新 metapackage 时:
- 在
%scl_package
宏之上定义 metapackage spec 文件顶部的以下宏:scl_name_prefix
指定用作软件集合名称中的前缀的供应商名称,如 myorganization-。这与_scl_prefix
不同,它指定了软件集合的根目录,但也使用供应商的名称。请参阅 第 2.4 节 “Software Collection Prefix” 了解更多信息。scl_name_base
指定 Software Collection 的基本名称,如 ruby。scl_name_version
指定 Software Collection 的版本,例如 193。
- 建议您定义一个 Software Collection 宏
nfsmountable
,它更改配置和状态文件的位置,并使软件集合通过 NFS 提供。如需更多信息,请参阅 第 3.1 节 “通过 NFS 使用 Software Collections”。 - 考虑指定 Software Collection 作为 metapackage 的依赖项,它们对 Software Collection 运行非常重要的所有软件包。这样,您可以确保使用 Software Collection metapackage 安装软件包。
- 建议您在 构建 子软件包中添加
Requires: scl-utils-build
。 - 您不需要在 metapackage 中使用特定于 Software Collection 的宏的条件。
- 在
enable
scriptlet 中包含 Software Collection 中软件包可能需要的任何路径撤销。有关常用路径重新definitions的详情,请参考 第 2.9 节 “常用的路径 Redefinitions”。 - 始终确保 metapackage 在
%prep
部分包含 %setup 宏,否则构建软件集合将失败。如果您不需要在%setup
宏中使用特定选项,请将%setup -c -T
命令添加到%prep
部分。这是因为 %setup 宏定义并创建%buildsubdir
目录,它通常用于在构建时存储临时文件。如果您没有在 Software Collection 软件包中定义 %setup,则%buildsubdir
目录中的文件会被覆盖,从而导致构建失败。 - 将您需要使用的任何宏添加到 构建 子软件包中的
macros.%{scl}-config
文件中。
Metapackage 示例
要了解名为 myorganization-ruby193 的软件集合的典型 metapackage 如下所示,请参阅以下示例: