第 3 章 高级主题


本章讨论打包 Software Collections 的高级主题。

3.1. 通过 NFS 使用 Software Collections

在某些环境中,要求通常是以集中模型来分布应用程序和工具,而不是允许用户安装他们喜欢的应用程序或工具版本。这样,NFS 是挂载集中管理软件的通用方法。
您需要定义 Software Collection 宏 nfsmountable 以通过 NFS 使用 Software Collection。如果在构建 Software Collection 时定义了宏,则生成的 Software Collection 具有软件集合的 /opt 文件系统层次结构之外的状态文件和配置文件。这可让您以只读形式通过 NFS 挂载 /opt 文件系统层次结构。它还使状态文件和配置文件更易于管理。
如果您不需要通过 NFS 支持 Software Collections,请使用 nfsmountable 是可选的,但推荐使用。
要定义 nfsmountable 宏,请确保 Software Collection metapackage spec 文件包含以下行:
%global nfsmountable 1

%scl_package %scl
如上所示,必须在定义 nfsmountable 宏前定义 %scl_package 宏。这是因为 %scl_package 宏重新定义 _sysconfdir_sharedstatedir_localstatedir 宏,具体取决于是否定义了 nfsmountable 宏。下表中详细介绍了 nfsmountable 更改的值。
表 3.1. 更改 Software Collection Macros 的值
Macro
原始定义
原始定义的扩展值
更改了定义
为更改后的定义展开值
_sysconfdir
%{_scl_root}/etc
/opt/provider/%{scl}/root/etc
%{_root_sysconfdir}%{_scl_prefix}/%{scl}
/etc/opt/provider/%{scl}
_sharedstatedir
%{_scl_root}/var/lib
/opt/provider/%{scl}/root/var/lib
%{_root_localstatedir}%{_scl_prefix}/%{scl}/lib
/var/opt/provider/%{scl}/lib
_localstatedir
%{_scl_root}/var
/opt/provider/%{scl}/root/var
%{_root_localstatedir}%{_scl_prefix}/%{scl}
/var/opt/provider/%{scl}

3.1.1. 更改了目录结构和文件所有权

nfsmountable 宏还会影响 scl_installscl_files 宏创建目录结构,并在运行 rpmbuild 命令时设置文件所有权。
例如,名为 software_collection 的软件集合的目录结构,其定义的 nfsmountable 宏如下所示:
$ rpmbuild -ba software_collection.spec --define 'scl software_collection'
...
$ rpm -qlp software_collection-runtime-1-1.el6.x86_64
/etc/opt/provider/software_collection
/etc/opt/provider/software_collection/X11
/etc/opt/provider/software_collection/X11/applnk
/etc/opt/provider/software_collection/X11/fontpath.d
...
/opt/provider/software_collection/root/usr/src
/opt/provider/software_collection/root/usr/src/debug
/opt/provider/software_collection/root/usr/src/kernels
/opt/provider/software_collection/root/usr/tmp
/var/opt/provider/software_collection
/var/opt/provider/software_collection/cache
/var/opt/provider/software_collection/db
/var/opt/provider/software_collection/empty
...

3.1.2. 注册和取消注册 Software Collections

如果 Software Collection 通过 NFS 共享但没有在本地安装,则需要通过注册该 Software Collection 来了解它。
运行 scl register 命令注册 Software Collection:
$ scl register /opt/provider/software_collection
其中 /opt/provider/software_collection 是您要注册的 Software Collection 的文件系统层次结构的绝对路径。该路径的目录必须包含 enable scriptlet 和 root/ 目录,才能被视为有效的 Software Collection 文件系统层次结构。
取消注册 Software Collection 是一个反向操作,当您不再希望 scl 工具了解注册的软件集合时,您可以执行的操作。
在运行 scl 命令时调用 deregister scriptet 来取消注册软件集合:
$ scl deregister software_collection
其中 software_collection 是您要取消注册的软件集合的名称。

3.1.2.1. 在 Software Collection Metapackage 中使用(de) register Scriptlets

您可以在 Software Collection metapackage 中指定(de) register scriptlets 与如何指定 enable scriptlets 类似。当指定 scriptets 时,请记住将它们显式包括在 metapackage spec 文件的 %file 部分。
有关指定(de) register scriptets 的示例,请参见以下示例代码:
%install
%scl_install

cat >> %{buildroot}%{_scl_scripts}/enable << EOF
# Contents of the enable scriptlet goes here
...
EOF

cat >> %{buildroot}%{_scl_scripts}/register << EOF
# Contents of the register scriptlet goes here
...
EOF

cat >> %{buildroot}%{_scl_scripts}/deregister << EOF
# Contents of the deregister scriptlet goes here
...
EOF
...
%files runtime -f filelist
%scl_files
%{_scl_scripts}/register
%{_scl_scripts}/deregister
在 register scriptlet 中,您可以选择性地指定注册 Software Collection 时要运行的命令,例如:要在 /etc/opt//var/opt/ 中创建文件的命令。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.