第4章 Red Hat Software Collections の再構築
本章では、Red Hat Software Collections オファリングの一部である Software Collections の一部を拡張する方法を説明します。
4.1. scldevel サブパッケージの提供
scldevel サブパッケージの目的は、多くの汎用マクロファイルを提供することにより、依存する Software Collections の作成プロセスを簡素化することです。パッケージャーは、既存の Software Collections を拡張するときにこれらのマクロファイルを使用します。scldevel は、Software Collection メタパッケージのサブパッケージとして提供されます。
4.1.1. scldevel サブパッケージの作成
次のセクションでは、ruby193 および ruby200 の 2 つの例の Ruby Software Collections の scldevel サブパッケージを作成する方法を説明します。
手順4.1 独自の scldevel サブパッケージを提供
- Software Collection のメタパッケージで、名前、要約、および説明を定義して scldevel サブパッケージを追加します。
%package scldevel Summary: Package shipping development files for %scl Provides: scldevel(%{scl_name_base}) %description scldevel Package shipping development files, especially useful for development of packages depending on %scl Software Collection.
依存する Software Collections のパッケージを構築する際には、仮想Provides: scldevel(%{scl_name_base})
を使用することが推奨されます。これにより、以下の手順で指定されているように、%{scl_name_base}
Software Collection とそのマクロのバージョンが利用できるようになります。 - Software Collection のメタパッケージの
%install
セクションで、scldevel サブパッケージに含まれるmacros.%{scl_name_base}-scldevel
ファイルを作成し、以下を追加します。cat >> %{buildroot}%{_root_sysconfdir}/rpm/macros.%{scl_name_base}-scldevel << EOF %%scl_%{scl_name_base} %{scl} %%scl_prefix_%{scl_name_base} %{scl_prefix} EOF
同じ%{scl_name_base}
名を共有するすべての Software Collections の間で、提供されるmacros.%{scl_name_base}-scldevel
ファイルが競合する必要があることに注意してください。これにより、複数のバージョンの%{scl_name_base}
Software Collections のインストールは許可されません。たとえば、ruby193-scldevel サブパッケージがインストールされている場合は、ruby200-scldevel サブパッケージをインストールすることができません。
4.1.2. 依存する Software Collection での scldevel サブパッケージの使用
ruby200 Software Collection に依存する Software Collection で scldevel サブパッケージを使用するには、以下のように、依存する Software Collection のメタパッケージを更新します。
手順4.2 依存するソフトウェアコレクションで独自の scldevel サブパッケージの使用
- メタパッケージの spec ファイルの最初に以下を追加することを検討してください。
%{!?scl_ruby:%global scl_ruby ruby200} %{!?scl_prefix_ruby:%global scl_prefix_ruby %{scl_ruby}-}
これら 2 行は任意です。これは、依存する Software Collection が ruby200 Software Collection に依存するように設計されている視覚的なヒントとしてのみ意図されています。ビルドルートで利用できる scldevel サブパッケージが他にない場合は、ruby200-scldevel サブパッケージがビルド要件として使用されます。これらの行を以下の行に置き換えることができます。%{?scl_prefix_ruby}
- 以下のビルド要件をメタパッケージに追加します。
BuildRequires: %{scl_prefix_ruby}scldevel
このビルド要件を指定すると、scldevel サブパッケージがビルドルートにあり、デフォルト値が使用されていないことを確認します。このパッケージを省略すると、後続のパッケージのビルド時間で要求が破損する可能性があります。 - メタパッケージの spec ファイルの
%package runtime
に以下の行が含まれていることを確認します。%package runtime Summary: Package that handles %scl Software Collection. Requires: scl-utils Requires: %{scl_prefix_ruby}runtime
- メタパッケージの spec ファイルの
%package build
に、以下の行を含めることを検討してください。%package build Summary: Package shipping basic build configuration Requires: %{scl_prefix_ruby}scldevel
Requires: %{scl_prefix_ruby}scldevel
を指定すると、Software Collection のすべてのパッケージでマクロが利用可能になります。これを追加することは、依存する Software Collection のパッケージが scldevel サブパッケージが提供するマクロを使用するなど、特定のユースケースでRequires
のみ有効であることに注意してください。