第 4 章 扩展 Red Hat Software Collections
本章论述了扩展作为 Red Hat Software Collections 产品一部分的一些 Software Collections。
4.1. 提供 scldevel 子软件包
scldevel 子软件包的目的是通过提供多个通用宏文件来简化创建依赖 Software Collections 的过程。软件包器然后在扩展现有 Software Collections 时使用这些宏文件。scldevel 作为软件集合的 metapackage 的子软件包提供。
4.1.1. 创建 scldevel 子软件包
下面的部分描述了为 Ruby Software Collections、ruby193 和 ruby200 的两个示例创建一个 scldevel 子软件包。
过程 4.1. 提供您自己的 scldevel 子软件包
- 在 Software Collection 的 metapackage 中,通过定义其名称、概述和描述来添加 scldevel 子软件包:
%package scldevel Summary: Package shipping development files for %scl Provides: scldevel(%{scl_name_base}) %description scldevel Package shipping development files, especially useful for development of packages depending on %scl Software Collection.
建议您在依赖 Software Collections 的软件包构建过程中使用虚拟Provides: scldevel(%{scl_name_base})
。这将确保%{scl_name_base}
Software Collection 及其宏的版本可用,如以下步骤中指定的。 - 在 Software Collection 的 metapackage 的
%install
部分,创建宏.%{scl_name_base}-scldevel
文件,该文件是 scldevel 子软件包的一部分,其中包含:cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF %%scl_%{scl_name_base} %{scl} %%scl_prefix_%{scl_name_base} %{scl_prefix} EOF
请注意,在所有共享相同%{scl_name_base}
名称的 Software Collections 之间,提供的macros.%{scl_name_base}-scldevel
文件必须冲突。这是禁止安装多个%{scl_name_base}
Software Collections 版本。例如,当安装了 ruby200-scldevel 子软件包时,无法安装 ruby193-scldevel 子软件包。
4.1.2. 在依赖软件集合中使用 scldevel 子软件包
要在依赖于 ruby200 Software Collection 的软件集合中使用 scldevel 子软件包,请更新依赖 Software Collection 的 metapackage,如下所述。
过程 4.2. 在依赖软件集合中使用您自己的 scldevel 子软件包
- 考虑在 metapackage 的 spec 文件的开头添加以下内容:
%{!?scl_ruby:%global scl_ruby ruby200} %{!?scl_prefix_ruby:%global scl_prefix_ruby %{scl_ruby}-}
这两个行是可选的。它们仅被称为一个可视化提示,依赖 Software Collection 设计为依赖于 ruby200 Software Collection。如果构建 root 中没有其他 scldevel 子软件包,则 ruby200-scldevel 子软件包将用作构建要求。您可以使用以下行替换这些行:%{?scl_prefix_ruby}
- 在 metapackage 中添加以下构建要求:
BuildRequires: %{scl_prefix_ruby}scldevel
通过指定此构建要求,您可以确保 scldevel 子软件包位于构建根目录中,并且默认值不在使用中。省略此软件包可能会导致后续软件包构建时出现问题。 - 确保 metapackage 的 spec 文件的
%package runtime
部分包含以下行:%package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils Requires: %{scl_prefix_ruby}runtime
- 考虑在 metapackage 的 spec 文件的
%package build
部分包括以下行:%package build Summary: Package shipping basic build configuration Requires: %{scl_prefix_ruby}scldevel
指定Requires: %{scl_prefix_ruby}scldevel
可确保宏在 Software Collection 的所有软件包中可用。请注意,添加这个Requires
仅在特定用例中有意义,比如依赖 Software Collection 中的软件包使用 scldevel 子软件包提供的宏。