Oracle® Solaris 11.2 での Image Packaging System を使用したソフトウェアのパッケージ化と配布

印刷ビューの終了

更新: 2014 年 7 月
 
 

相互に排他的なソフトウェアコンポーネント

Oracle Solaris は複数のアーキテクチャーをサポートしており、SVR4 パッケージシステムで起きる一般的なエラーの 1 つが、間違ったアーキテクチャー用のパッケージを誤ってインストールすることでした。サポートされているアーキテクチャーごとに別個の IPS ソフトウェアリポジトリを保持するというのは、ISV にとっては魅力がなく、ソフトウェアユーザーにとってはエラーを起こしやすくなります。結果として、IPS は複数のアーキテクチャーでの単一パッケージのインストールをサポートしています。

この機能を実装するメカニズムは、バリアントと呼ばれます。バリアントを使用すると、実際にインストールされるソフトウェアコンポーネントをターゲットイメージのプロパティーで決定できます。

バリアントには、その名前と使用可能な値のリストの 2 つの部分があります。Oracle Solaris 11 で定義されているバリアントを次の表に示します。

バリアント名
使用可能な値
variant.arch
sparci386
variant.opensolaris.zone
globalnonglobal
variant.debug.*
truefalse

バリアントは、パッケージ内の次の 2 つの場所に出現します。

  • set アクションはバリアントの名前を指定し、このパッケージに適用される値を定義します。

  • set アクションに指定されたバリアント値のサブセットに対してのみインストールできるアクションにはどれも、そのバリアントの名前と、このアクションがインストールされるときの値を指定するタグが含まれています。

たとえば、シンボリックリンク /var/ld/64 を配布するパッケージには次の定義を含めることができます。

set name=variant.arch value=sparc value=i386
dir group=bin mode=0755 owner=root path=var/ld
dir group=bin mode=0755 owner=root path=var/ld/amd64 \
    variant.arch=i386
dir group=bin mode=0755 owner=root path=var/ld/sparcv9 \
    variant.arch=sparc
link path=var/ld/32 target=.
link path=var/ld/64 target=sparcv9 variant.arch=sparc
link path=var/ld/64 target=amd64 variant.arch=i386

SPARC と x86 の両方に配布されるコンポーネントはバリアントタグを受け取りませんが、一方または他方のアーキテクチャーに配布されるコンポーネントは適切なタグを受け取ることに注意してください。アクションには、さまざまなバリアント名の複数のタグを含めることができます。たとえば、1 つのパッケージに SPARC と x86 の両方のデバッグバイナリと非デバッグバイナリの両方を含めることができます。

Oracle Solaris では、カーネルコンポーネントは非大域ゾーン内では役に立たないため、通常、ゾーンにインストールされたパッケージから取り除かれます。このため、カーネルコンポーネントは、非大域ゾーンにインストールされないように、global に設定された opensolaris.zone バリアントでマーク付けされます。これは通常、pkgmogrify(1) 規則を使用することで、発行中にマニフェスト内で行われます。i386 および sparc ビルドからのパッケージはゾーン用としてマーク付けされ、その後 pkgmerge(1) によって sparc および i386 ビルドからのパッケージがマージされます。これは、そのようなパッケージを手動で構築しようとするよりもはるかに信頼性が高く、迅速です。

パッケージ開発者は、カスタム variant.debug.* バリアント以外の新しいバリアントを定義しないようにしてください。バリアントがコンポーネントに割り当てられ、イメージではそのバリアントにデフォルト値がない場合、そのパッケージのインストールは失敗します。バリアント名前空間の variant.debug.* 部分は、デフォルト値 false を持つように事前定義されています。パッケージ開発者は、コンポーネントのデバッグバージョンを用意し、それらのコンポーネントにカスタム variant.debug.* バリアントをタグ付けできます。そのあとで問題が発生した場合に、ユーザーはそのバリアントを選択できます。バリアントはイメージごとに設定されることを念頭に置き、必ずソフトウェアのその要素に適した解決で一意になる適切な名前を選択するようにしてください。

バリアントタグは、マージ中にアーキテクチャー間で異なるすべてのアクション (依存関係や set アクションを含む) に適用されます。現在のイメージのバリアント値のいずれかをサポートしないとしてマーク付けされているパッケージは、インストールの対象とみなされません。

pkgmerge(1) のマニュアルページには、パッケージをマージする例がいくつか記載されています。pkgmerge コマンドは、必要に応じて、同時に複数の異なるバリアントにわたってマージします。