第 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 子软件包:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 建议您在依赖 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} EOFcat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF %%scl_%{scl_name_base} %{scl} %%scl_prefix_%{scl_name_base} %{scl_prefix} EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,在所有共享相同%{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}-}%{!?scl_ruby:%global scl_ruby ruby200} %{!?scl_prefix_ruby:%global scl_prefix_ruby %{scl_ruby}-}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这两个行是可选的。它们仅被称为一个可视化提示,依赖 Software Collection 设计为依赖于 ruby200 Software Collection。如果构建 root 中没有其他 scldevel 子软件包,则 ruby200-scldevel 子软件包将用作构建要求。您可以使用以下行替换这些行:%{?scl_prefix_ruby}%{?scl_prefix_ruby}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 metapackage 中添加以下构建要求:
BuildRequires: %{scl_prefix_ruby}scldevelBuildRequires: %{scl_prefix_ruby}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定此构建要求,您可以确保 scldevel 子软件包位于构建根目录中,并且默认值不在使用中。省略此软件包可能会导致后续软件包构建时出现问题。 - 确保 metapackage 的 spec 文件的
%package runtime部分包含以下行:%package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils Requires: %{scl_prefix_ruby}runtime%package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils Requires: %{scl_prefix_ruby}runtimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 考虑在 metapackage 的 spec 文件的
%package build部分包括以下行:%package build Summary: Package shipping basic build configuration Requires: %{scl_prefix_ruby}scldevel%package build Summary: Package shipping basic build configuration Requires: %{scl_prefix_ruby}scldevelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定Requires: %{scl_prefix_ruby}scldevel可确保宏在 Software Collection 的所有软件包中可用。请注意,添加这个Requires仅在特定用例中有意义,比如依赖 Software Collection 中的软件包使用 scldevel 子软件包提供的宏。