第 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 子软件包

  1. 在 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 及其宏的版本可用,如以下步骤中指定的。
  2. 在 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 子软件包

  1. 考虑在 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}
  2. 在 metapackage 中添加以下构建要求:
    BuildRequires: %{scl_prefix_ruby}scldevel
    通过指定此构建要求,您可以确保 scldevel 子软件包位于构建根目录中,并且默认值不在使用中。省略此软件包可能会导致后续软件包构建时出现问题。
  3. 确保 metapackage 的 spec 文件的 %package runtime 部分包含以下行:
    %package runtime
    Summary: Package that handles %scl Software Collection.
    Requires: scl-utils
    Requires: %{scl_prefix_ruby}runtime
  4. 考虑在 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 子软件包提供的宏。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.