バリアントは、パッケージ内の次の 2 つの場所に出現します。
set アクションはバリアントの名前を指定し、このパッケージに適用される値を定義します。
set アクションに指定されたバリアント値のサブセットに対してのみインストールできるアクションにはどれも、そのバリアントの名前と、このアクションがインストールされるときの値を指定するタグが含まれています。
相互に排他的なコンポーネントの 1 つの例はシステムアーキテクチャーです。アクションには、さまざまなバリアント名の複数のタグを含めることができます。たとえば、1 つのパッケージに SPARC と x86 の両方のデバッグバイナリと非デバッグバイナリの両方を含めることができます。
バリアントには、その名前と使用可能な値のリストの 2 つの部分があります。pkg variant -v コマンドは、インストール済みパッケージに設定できるすべてのバリアント値を表示します。
$ pkg variant -v VARIANT VALUE arch i386 arch sparc debug.osnet false debug.osnet true opensolaris.zone global opensolaris.zone nonglobal
IPS は、異なるアーキテクチャー用のアクションに異なるバリアントタグ値を指定することによって、単一パッケージ内で複数のアーキテクチャーをサポートします。バリアントタグは、アーキテクチャー間で異なるすべてのアクションに適用されます。SPARC および x86 の両方に提供されるコンポーネントはバリアントタグを受け取りません。たとえば、シンボリックリンク /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
相互に排他的なもう 1 つのコンポーネントは大域ゾーンまたは非大域ゾーンです。カーネルコンポーネントは通常は非大域ゾーンに含まれません。カーネルコンポーネントが非大域ゾーンにインストールされるのを防ぐために、opensolaris.zone バリアントタグを値をそれらの各アクションに適用し、値を global に設定します。
pkgmogrify 規則を使用して、発行中にマニフェストにバリアントタグを適用します。pkgmogrify コマンドの使用方法については、プログラムによるパッケージマニフェストの変更で詳しく説明しています。次に、pkgmerge を使用して SPARC および x86 ビルドからのパッケージをマージします。pkgmerge コマンドは、必要に応じて、同時に複数の異なるバリアントにわたってマージします。詳細は、pkgmogrify(1) および pkgmerge(1) のマニュアルページを参照してください。
不明なバリアントプロパティー値は、デフォルトでイメージ内で false です。したがって、新しいバリアントタグ名を導入する場合、そのバリアントの値は true または false のみに設定できます。アクションのバリアントタグを true に設定し、そのアクションをインストールするために、管理者に pkg change-variant コマンドを使用してイメージ内のバリアントプロパティーの値を true に変更するよう通知します。
名前が variant.debug. で始まるバリアントは、デフォルトでイメージ内で false です。ユーザーは、コンポーネントのデバッグバージョンを用意し、それらのコンポーネントにカスタムの variant.debug. バリアントをタグ付けできます。