ソフトウェアには、オプションのコンポーネントや、相互に排他的なコンポーネントが含まれることがあります。オプションのコンポーネントの例には、ロケールやドキュメントがあります。相互に排他的なコンポーネントの例には、SPARC または x86 アーキテクチャーが含まれます。オプションのコンポーネントはファセットと呼ばれ、相互に排他的なコンポーネントはバリアントと呼ばれます。
ファセットとバリアントのどちらも次の 2 つのコンポーネントで構成されます。
イメージに設定されたプロパティー
パッケージマニフェスト内のアクションに設定されたタグ
パッケージマニフェスト内のアクションに設定されたファセットおよびバリアントタグの値と、イメージに設定されたファセットおよびバリアントプロパティーの値の比較により、そのアクションがインストール可能かどうかを判別します。
ファセットとバリアントのプロパティーとタグにはそれぞれ名前と値があります。1 つのパッケージアクションに複数のファセットタグおよびバリアントタグを付けることができます。
ファセットとバリアントのプロパティーとタグの値は明示的に設定する必要はありません。値はデフォルト値または継承された値を指定できます。たとえば、非大域ゾーンはその親の大域ゾーンから値を継承できます。一部のバリアントプロパティー値は、システムの初期インストール時にイメージに設定され、変更できません。
次のアルゴリズムは、イメージに設定されたファセットおよびバリアントのプロパティー値が、特定のアクションがインストールされるかどうかにどのように影響するかを示しています。値については、以降のセクションで詳しく説明します。
パッケージマニフェストにファセットタグまたはバリアントタグがないアクションは常にインストールされます。
パッケージマニフェストにファセットタグがあるアクションは、イメージに次の条件が存在する場合にインストールされます。
アクションのファセットタグのうち、値 all を持つものはすべて、デフォルトまたは明示的な設定によって、イメージ内で true のファセットプロパティー値を持ちます。
アクションのファセットタグのいずれかが値 true を持つ場合、それらのファセットプロパティー値の少なくとも 1 つは、デフォルトまたは明示的な設定によってイメージ内でも true です。
次の例で、ファイル test.txt は、イメージ内で devel と optional.test の両方が true であり、イメージ内で doc.info または doc.help のいずれかが true である場合にのみインストールされます。
file path=usr/share/doc/test.txt facet.devel=all facet.optional.test=all facet.doc.info=true facet.doc.help=true
パッケージマニフェスト内にバリアントタグのあるアクションは、すべてのバリアントタグの値がイメージに設定されている対応するバリアントプロパティーの値と同じ場合にのみインストールされます。
次の例では、ファイル x86test.txt はインストールされません。次のパッケージマニフェストの抜粋は、ファイル x86test.txt に 2 つのバリアントタグが設定されていることを示しています。
file path=usr/share/doc/x86test.txt variant.arch=i386 variant.debug.osnet=true
次のコマンドは、イメージ内のこれらのバリアントプロパティーの値を示しています。
$ pkg variant arch debug.osnet VARIANT VALUE arch i386 debug.osnet false
ファセットタグとバリアントタグの両方があるアクションは、ファセットとバリアントの両方のプロパティー値でアクションのインストールが許可されている場合にインストールされます。
ほとんどのバリアントは説明的な値を持ちます。たとえば、variant.arch の値は、i386 や sparc などになります。アクションがインストールされるには、パッケージマニフェスト内のそのアクションのバリアントタグの値が、イメージ内の対応するバリアントプロパティーの値と一致している必要があります。arch および zone バリアントプロパティー値は、イメージを作成し、その初期コンテンツをインストールするプログラムによって設定されます。これらの値は変更できません。
variant.debug.* バリアントの値と不明なバリアントの値は true または false のみ指定でき、デフォルトでイメージ内で false です。不明なバリアントとは、パッケージマニフェスト内のアクションのバリアントタグとして導入され、イメージの作成時には不明だったバリアントです。
アクションのデバッグバージョンと非デバッグバージョンの両方を配布する場合、次の例に示すように、両方のバージョンに該当する debug バリアントタグが明示的に設定されている必要があります。この例では、debug.osnet がイメージ内で false の場合は、このファイルの非デバッグバージョンがインストールされ、debug.osnet がイメージ内で true の場合は、このファイルのデバッグバージョンがインストールされます。通常ファイルのデバッグバージョンは variant.arch タグも付けられます。
file payload chash=hash group=sys mode=0644 overlay=allow owner=root path=etc/motd pkg.csize=116 pkg.size=106 preserve=true variant.debug.osnet=true file payload chash=hash group=sys mode=0644 overlay=allow owner=root path=etc/motd pkg.csize=70 pkg.size=50 preserve=true variant.debug.osnet=false
イメージに設定されているバリアントプロパティーの値を表示するには、pkg variant コマンドを使用します。
$ pkg variant VARIANT VALUE arch i386 opensolaris.zone global
イメージに明示的に設定されたすべてのバリアントとインストール済みパッケージに設定されたすべてのバリアントの値を表示するには、-a オプションを使用します。
$ pkg variant -a VARIANT VALUE arch i386 debug.container false debug.osnet false opensolaris.zone global
インストール済みパッケージに設定できるすべてのバリアント値を表示するには、-v オプションを使用します。
$ pkg variant -v VARIANT VALUE arch i386 arch sparc debug.container false debug.container true debug.osnet false debug.osnet true opensolaris.zone global opensolaris.zone nonglobal
バリアントプロパティーの値を変更するには、pkg change-variant コマンドを使用します。設定する値を選択するには、pkg variant -v コマンドを使用します。
次のコマンドでは、新しい BE が作成されます。BE が作成される状況については、ブート環境ポリシーイメージのプロパティーを参照してください。新しい BE が作成されても、現在の BE は変更されません。この例ではデバッグファイルを使用するように、新しい BE でブートします。-n オプションを使用すると、この操作を -n なしで実行した場合に何が変更されるかが表示されますが、コマンドによって実際の変更は行われません。この例では新しい BE は作成されていません。
$ pkg change-variant -nv variant.debug.osnet=true Packages to change: 232 Variants/Facets to change: 1 Estimated space available: 306.74 GB Estimated space to be consumed: 1.49 GB Create boot environment: Yes Activate boot environment: Yes Create backup boot environment: No Rebuild boot archive: Yes Changed variants/facets: variant debug.osnet: true Changed packages: solaris ... Editable files to change: Update: etc/motd
ファセットプロパティーは、イメージにデフォルト値があり、明示的に設定する必要はありません。facet.debug または facet.optional で始まる名前を持つファセットプロパティーは、デフォルトで false の値を持ちます。ほかのすべてのファセットプロパティーは、デフォルトで true の値を持ちます。
パッケージマニフェスト内のアクションのファセットタグは、true または all の値のみ指定できます。説明と例については、ファセットおよびバリアントの値がパッケージのインストールに与える影響を参照してください。facet.debug または facet.optional で始まる名前を持つファセットでタグ付けされたアクションは、デフォルトでインストールされません。そのようなアクションをインストールするには、イメージ内のファセットプロパティー値を true に変更する必要があります。ほかのすべてのファセットでタグ付けされたアクションは、デフォルトでインストールされます。そのようなアクションのインストールを避けるには、イメージ内のファセットプロパティー値を false に変更する必要があります。
version-lock ファセットの値 (version-lock.package-name) を変更しても、アクションはインストールまたはアンインストールされません。代わりに、version-lock ファセットは、incorporate タイプの depend アクションを有効または無効にします。制約パッケージによって制約されたパッケージの更新を参照してください。
ファセットプロパティー値には、次の 3 つのいずれかのソースがあります。これらのソース名は、pkg facet コマンド出力の SRC 列に表示されます。
system – システムによって割り当てられた値。これらの値は、通常システムパッケージに指定されたファセットタグの値です。
local – pkg change-facet コマンドを使用するか、IPS API を使用して設定された値。
parent – 親イメージから継承された値。たとえば、非大域ゾーンは大域ゾーンからのファセット設定を継承します。
このイメージにローカルで設定されたか、親イメージから継承されたすべてのファセットプロパティーの現在の値とその値のソースを表示するには、pkg facet コマンドを使用します。
イメージに明示的に設定されたすべてのファセットとインストール済みパッケージに設定されたすべてのファセットの値を表示するには、pkg facet -a コマンドを使用します。
次の pkg facet コマンドは、ローカルに設定されているか継承された doc. ファセットプロパティーがないことを示しています。
$ pkg facet doc.* FACET VALUE SRC pkg facet: no matching facets found $ pkg facet -a doc.* FACET VALUE SRC doc.help True system doc.html True system doc.info True system doc.man True system doc.pdf True system doc.ps True system
ファセットプロパティーの値を変更するには、pkg change-facet コマンドを使用します。ファセットプロパティー値には、true、false、または none を設定できます。ファセットプロパティーを none に設定すると、そのファセットにシステムデフォルト値 (true または false のいずれか) が適用され、ソースは system として表示されます。
イメージに設定されるファセットは、doc.man などの完全なファセットか、locale.* などのパターンになります。この柔軟性は、ファセット名前空間の一部を無効にし、その名前空間内の個々のファセットのみを有効にする場合に役立ちます。たとえば、次の例に示すように、すべてのロケールを無効にしてから、1 つか 2 つの特定のロケールのみを有効にすることができます。
$ pkg change-facet locale.*=false locale.en_US=true
次の pkg change-facet コマンドでは、新しい BE が作成されませんでしたが、バックアップ BE が作成されています。BE が作成される状況については、ブート環境ポリシーイメージのプロパティーを参照してください。バックアップ BE が作成されると、元のイメージがバックアップに保存され、現在の BE が変更されます。「Changed variants/facets」の下の None の元の値は、前述の pkg facet コマンドによって示されるように、このコマンドの実行前にローカル設定が存在せず、システム設定しか存在していなかったことを示します。
$ pkg change-facet -v doc.*=false doc.man=true Packages to change: 97 Variants/Facets to change: 2 Services to change: 1 Estimated space available: 306.34 GB Estimated space to be consumed: 936.87 MB Create boot environment: No Create backup boot environment: Yes Rebuild boot archive: No Changed variants/facets: facet doc.* (local): None -> False facet doc.man (local): None -> True Changed packages: solaris ... Services: restart_fmri: svc:/application/texinfo-update:default PHASE ITEMS ...
次の pkg facet コマンドは、pkg change-facet コマンドの結果の doc. ファセットプロパティーの変更を示しています。
$ pkg facet doc.* FACET VALUE SRC doc.* False local doc.man True local $ pkg facet -a doc.* FACET VALUE SRC doc.* False local doc.help False local doc.html False local doc.info False local doc.man True local doc.pdf False local doc.ps False local