2.7. パッケージレイアウト
各ソフトウェアコレクションのレイアウトは、他のパッケージのサブセットをインストールするメタパッケージと、Software Collection の名前空間内にインストールされる多数の Software Collection のパッケージで設定されます。
2.7.1. メタパッケージ
各 Software Collection にはメタパッケージが含まれており、ユーザーは Software Collection で最も一般的なタスクを実行するために必要な Software Collection パッケージのサブセットをインストールします。たとえば、必須パッケージは Perl 言語インタープリターを提供しますが、Perl 拡張モジュールはありません。メタパッケージには、基本的なファイルシステム階層が含まれており、Software Collection のスクリプトレットを多数提供します。
メタパッケージの目的は、Software Collection の必須パッケージをすべて適切にインストールし、Software Collection を有効にすることができるようにすることです。
メタパッケージは、Software Collection の一部でもある次のパッケージを生成します。
- メインパッケージ: %name
- Software Collection のメインパッケージには、Software Collection に含まれるベースパッケージの依存関係が含まれています。main パッケージにはファイルが含まれません。Software Collection のパッケージの依存関係を指定する場合は、Software Collection の他のパッケージがメインパッケージに依存していないことを確認してください。メインパッケージの目的は、ユーザーが Software Collection で最も一般的なタスクを実行するために必要なパッケージのみをインストールすることです。通常、メインパッケージはビルド時の依存関係 (たとえば、別の Software Collection のパッケージのビルド時間依存関係のみのパッケージ) を指定しないようにします。たとえば、Software Collection の名前が
myorganization-ruby193
の場合、メインパッケージマクロは以下に展開されます。myorganization-ruby193
- ランタイムサブパッケージ: %name-runtime
- Software Collection の runtime サブパッケージは Software Collection のファイルシステムを所有し、Software Collection のスクリプトレットを配布します。ユーザーが Software Collection を使用できるようにするには、このパッケージをインストールする必要があります。たとえば、Software Collection の名前が
myorganization-ruby193
の場合、ランタイムパッケージマクロは以下に展開されます。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 サブパッケージは、便利なシェルラッパーとシンボリックリンクを標準パスにインストールして、ベースシステムのインストールを変更するオプションの方法を提供します。ただし、Software Collection パッケージでバイナリーファイルをより簡単に作成できます。たとえば、Software Collection の名前が
myorganization-ruby193
の場合、syspaths パッケージマクロは以下に展開されます。myorganization-ruby193-syspaths
syspaths サブパッケージの詳細は、「syspaths サブパッケージの提供」を参照してください。 - 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 サブパッケージの詳細は、「scldevel サブパッケージの提供」 を参照してください。
2.7.2. メタパッケージの作成
新しいメタパッケージを作成する場合は、以下を行います。
%scl_package
マクロの上に、メタパッケージ仕様ファイルの先頭に以下のマクロを定義します。scl_name_prefix
Software Collection 名の接頭辞として使用するプロバイダーの名前を指定します (例: myorganization-)。これは_scl_prefix
とは異なるもので、Software Collection の root を指定しますが、プロバイダーの名前も使用します。詳細は、「Software Collection 接頭辞」 を参照してください。scl_name_base
Software Collection のベース名を指定します (例: ruby)。scl_name_version
Software Collection のバージョンを指定します (例: 193)。
- 設定ファイルと状態ファイルの場所を変更して、NFS で Software Collection を使用できるようにする Software Collection マクロを定義する
nfsmountable
ことが推奨されます。詳細は、「NFS での Software Collections の使用」 を参照してください。 - Software Collection のランタイムに不可欠なすべてのパッケージをメタパッケージの依存関係として指定することを検討してください。これにより、Software Collection メタパッケージでパッケージがインストールされているようになります。
- build サブパッケージに
Requires: scl-utils-build
を追加することが推奨されます。 - メタパッケージで、Software Collection 固有のマクロに条件を使用する必要はありません。
- Software Collection のパッケージが
enable
スクリプトレットで必要となる可能性があるパスの再定義を含めます。一般的に使用されるパスの再定義に関する情報は、「一般的に使用されるパスの再定義」 を参照してください。 - メタパッケージに
%prep
セクションに %setup マクロが含まれていることを確認してください。そうしないと、Software Collection の構築に失敗します。%setup
マクロで特定のオプションを使用する必要がない場合は、%setup -c -T
コマンドを%prep
セクションに追加します。これは、%setup マクロが%buildsubdir
ディレクトリーを定義し、作成するためです。これは通常、ビルド時に一時ファイルを保存するために使用されます。Software Collection パッケージで %setup を定義しない場合は、%buildsubdir
ディレクトリー内のファイルは上書きされ、ビルドは失敗します。 - build サブパッケージの
macros.%{scl}-config
ファイルに使用するマクロを追加します。
メタパッケージの例
myorganization-ruby193 と呼ばれる Software Collection の典型的なメタパッケージを理解するには、以下の例を参照してください。
%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 <jdoe@example.com> 1-1 - Initial package