第3章 高度なトピック
本章では、Software Collections のパッケージ化に関する高度なトピックを説明します。
3.1. NFS での Software Collections の使用
一部の環境では、この要件には、ユーザーが希望するアプリケーションやツールのバージョンをインストールするのではなく、アプリケーションやツールがどのように配布されるかについての集中型モデルが必要になることがよくあります。このようにして NFS は、集中管理されたソフトウェアをマウントする一般的な方法です。
NFS 経由で Software Collection を使用する
nfsmountable
には、Software Collection マクロを定義する必要があります。Software Collection の構築時にマクロが定義されている場合には、生成される Software Collection には、Software Collection の /opt
ファイルシステム階層外にある状態ファイルと設定ファイルがあります。これにより、NFS に /opt
ファイルシステム階層を読み取り専用としてマウントできます。また、状態ファイルと設定ファイルの管理が容易になります。
NFS を介した Software Collections のサポートが必要ない場合は、
nfsmountable
の使用は任意ですが推奨されます。
nfsmountable
マクロを定義するには、Software Collection のメタパッケージの spec ファイルに以下の行が含まれていることを確認してください。
%global nfsmountable 1 %scl_package %scl
上記のように、
nfsmountable
マクロを定義する前に %scl_package
マクロを定義する必要があります。これは、nfsmountable
マクロが定義されているかどうかに応じて、%scl_package
マクロが、_sysconfdir
、_sharedstatedir
、_localstatedir
のマクロを再定義するためです。再定義されたマクロで nfsmountable
が変更する値は、以下の表で説明されています。
マクロ
|
元の定義
|
元の定義に対する拡張された値
|
変更された定義
|
元の定義に対する拡張された値
|
---|---|---|---|---|
_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 コマンドの実行時にファイルの所有権を設定します。
たとえば、定義された
nfsmountable
マクロを持つ software_collection という名前の Software Collection のディレクトリー構造は、以下のようになります。
$
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 ツールに認識させる必要があります。
Software Collection の登録は、以下の scl register コマンドを実行して行います。
$
scl register /opt/provider/software_collection
/opt/provider/software_collection は、登録する Software Collection のファイルシステム階層への絶対パスです。パスのディレクトリーに、有効な Software Collection ファイルシステム階層と見なされる
enable
スクリプトレットと root/
ディレクトリーに含まれる必要があります。
Software Collection の登録解除は、scl ツールが登録済み Software Collection を認識させないようにする際に実行する逆の操作です。
Software Collection の登録を解除するには、scl コマンドの実行時に
deregister
スクリプトレットを呼び出します。
$
scl deregister software_collection
ここで、software_collection は、登録を解除する Software Collection の名前に置き換えます。
3.1.2.1. Software Collection Metapackage での (de)register スクリプトレットの使用
Software Collection メタパッケージで (de)register スクリプトレットの有効化方法と同様に、(de)register スクリプトレットを指定できます。スクリプトセットを指定する場合は、メタパッケージ spec ファイルの
%file
セクションに明示的に追加するようにしてください。
(de)register スクリプトセットの指定例は、以下のサンプルコードを参照してください。
%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 スクリプトレットでは、
/etc/opt/
や /var/opt/
にファイルを作成するコマンドなど、Software Collection の登録時に実行するコマンドをオプションで指定できます。