ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 での Image Packaging System を使用したソフトウェアのパッケージ化および配布 Oracle Solaris 11.1 Information Library (日本語) |
Oracle Solaris では複数のアーキテクチャーをサポートしており、SVR4 パッケージシステムで起きる一般的なエラーの 1 つが、間違ったアーキテクチャー用のパッケージを誤ってインストールすることでした。サポートされているアーキテクチャーごとに別個の IPS ソフトウェアリポジトリを保持するというのは、ISV にとっては魅力がなく、ソフトウェアユーザーにとってはエラーを起こしやすくなります。結果として、IPS は複数のアーキテクチャーでの単一パッケージのインストールをサポートしています。
この機能を実装するメカニズムは、バリアントと呼ばれます。バリアントを使用すると、実際にインストールされるソフトウェアコンポーネントをターゲットイメージのプロパティーで決定できます。
バリアントには、その名前と使用可能な値のリストの 2 つの部分があります。Oracle Solaris 11 で定義されているバリアントを次の表に示します。
|
バリアントは、パッケージ内の次の 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 を持つように事前定義されています。バリアントはイメージごとに設定されることを念頭に置き、必ずソフトウェアのその要素に適した解決で一意になる適切な名前を選択するようにしてください。
バリアントタグは、マージ中にアーキテクチャー間で異なるすべてのアクション (依存関係や set アクションを含む) に適用されます。現在のイメージのバリアント値のいずれかをサポートしないとしてマーク付けされているパッケージは、インストールの対象とみなされません。
pkgmerge(1) のマニュアルページには、パッケージをマージする例がいくつか記載されています。pkgmerge コマンドは、必要に応じて、同時に複数の異なるバリアントにわたってマージします。