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 &lt;jdoe@example.com&gt; 1-1
- Initial package