第 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
更改的值。
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_install
和 scl_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/
中创建文件的命令。