搜索

2.7. 软件包布局

download PDF
每个 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
运行时子软件包: %name-runtime
Software Collection 中的 runtime 子软件包拥有 Software Collection 的文件系统,并提供 Software Collection 的 scriptlets。需要安装此软件包,以便用户可以使用 Software Collection。
例如,如果 Software Collection 的名称是 myorganization-ruby193,则 runtime 子宏被扩展为:
myorganization-ruby193-runtime
构建子软件包: %name-build
Software Collection 中的 build 子软件包提供 Software Collection 的构建配置。它包含将软件包构建到 Software Collection 所需的 RPM 宏。build 子软件包是可选的,可以在 Software Collection 中排除。
例如,如果 Software Collection 的名称是 myorganization-ruby193,则构建子宏被扩展为:
myorganization-ruby193-build
myorganization-ruby193-build 子软件包的内容如下所示:
$ cat /etc/rpm/macros.ruby193-config
%scl myorganization-ruby193
syspaths 子软件包: %name-syspaths
Software Collection 中的 syspaths 子软件包提供了一种可选的方式,可将方便的 shell 包装程序和符号链接安装到标准路径,从而更改基本系统安装,但在 Software Collection 软件包中使二进制文件更易于使用。
例如,如果 Software Collection 的名称是 myorganization-ruby193,则 syspaths 子宏被扩展为:
myorganization-ruby193-syspaths
有关 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
有关 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 如下所示,请参阅以下示例:
%global scl_name_prefix myorganization-
%global scl_name_base ruby
%global scl_name_version 193

%global scl %{scl_name_prefix}%{scl_name_base}%{scl_name_version}

# Optional but recommended: define nfsmountable
%global nfsmountable 1

%global _scl_prefix /opt/myorganization
%scl_package %scl

Summary: Package that installs %scl
Name: %scl_name
Version: 1
Release: 1%{?dist}
License: GPLv2+
Requires: %{scl_prefix}less
BuildRequires: scl-utils-build

%description
This is the main package for %scl Software Collection.

%package runtime
Summary: Package that handles %scl Software Collection.
Requires: scl-utils

%description runtime
Package shipping essential scripts to work with %scl Software Collection.

%package build
Summary: Package shipping basic build configuration
Requires: scl-utils-build

%description build
Package shipping essential configuration macros to build %scl Software Collection.

# This is only needed when you want to provide an optional scldevel subpackage
%package scldevel
Summary: Package shipping development files for %scl

%description scldevel
Package shipping development files, especially useful for development of
packages depending on %scl Software Collection.

%prep
%setup -c -T

%install
%scl_install

cat >> %{buildroot}%{_scl_scripts}/enable << EOF
export PATH="%{_bindir}:%{_sbindir}\${PATH:+:\${PATH}}"
export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"
export MANPATH="%{_mandir}:\${MANPATH:-}"
export PKG_CONFIG_PATH="%{_libdir}/pkgconfig\${PKG_CONFIG_PATH:+:\${PKG_CONFIG_PATH}}"
EOF

# This is only needed when you want to provide an optional scldevel subpackage
cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF
%%scl_%{scl_name_base} %{scl}
%%scl_prefix_%{scl_name_base} %{scl_prefix}
EOF

# Install the generated man page
mkdir -p %{buildroot}%{_mandir}/man7/
install -p -m 644 %{scl_name}.7 %{buildroot}%{_mandir}/man7/

%files

%files runtime -f filelist
%scl_files

%files build
%{_root_sysconfdir}/rpm/macros.%{scl}-config

%files scldevel
%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel

%changelog
* Fri Aug 30 2013 John Doe &lt;jdoe@example.com&gt; 1-1
- Initial package
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.