前述の依存関係タイプを慎重に使用することによって、パッケージのアップグレードを許可する方法を制約できます。
incorporate 依存関係により、まとめて更新するサポートされているソフトウェアサーフェスを定義できます。
凍結により、管理者はサーフェスやその他のソフトウェアを特定のバージョンに維持できます。
バージョンロックファセットにより、管理者はサーフェスの一部のコンポーネントに対するバージョン制約を無効にできます。
一般に、システムにインストールされた一連のパッケージのサポートやアップグレードはまとめて行われるのが望ましいことです (セット内のパッケージがすべて更新されるか、セット内のパッケージがどれも更新されないかのどちらか)。パッケージをセットとしてこのように扱うには、incorporate 依存関係を使用します。
Oracle Solaris 11.3 ソフトウェアの追加と更新 の カスタム Incorporation のインストールに、インストール可能な pkg:/entire incorporation のバージョンを制約するためのカスタム incorporation の作成例を示します。このセクションの以降の部分では、結合についての一般的な説明を示します。
次の 3 つの部分的なパッケージマニフェストは、pkg-a および pkg-b パッケージと myincorp 結合パッケージの関係を示しています。
次に、pkg-a パッケージマニフェストからの抜粋を示します。
set name=pkg.fmri value=pkg-a@1.0 dir path=opt/tool-a owner=root group=bin mode=0755 depend fmri=myincorp type=require
次に、pkg-b パッケージマニフェストからの抜粋を示します。
set name=pkg.fmri value=pkg-b@1.0 dir path=opt/tool-b owner=root group=bin mode=0755 depend fmri=myincorp type=require
次に、myincorp パッケージマニフェストからの抜粋を示します。
set name=pkg.fmri value=myincorp@1.0 depend fmri=pkg-a@1.0 type=incorporate depend fmri=pkg-b@1.0 type=incorporate
pkg-a および pkg-b パッケージの両方に、myincorp 結合への require 依存関係が含まれています。myincorp パッケージには、次の方法で pkg-a および pkg-b パッケージを制約する incorporate 依存関係が含まれています。
pkg-a および pkg-b パッケージは、最大でもバージョン 1.0 (依存関係に指定されたバージョン番号で定義された精度レベル) にしかアップグレードできません。
pkg-a および pkg-b パッケージをインストールする場合、それらはバージョン 1.0 以上である必要があります。
バージョン 1.0 への incorporate 依存関係では、バージョン 1.0.1 や 1.0.2.1 などは許可されますが、バージョン 1.1、2.0、0.9 などは許可されません。incorporate 依存関係を上位バージョンで指定する、更新済みの結合パッケージがインストールされると、pkg-a および pkg-b パッケージはその上位バージョンに更新することを許可されます。
pkg-a および pkg-b パッケージの両方に、myincorp パッケージへの require 依存関係が含まれているため、pkg-a または pkg-b のいずれかがインストールされている場合に結合パッケージがインストールされます。
前のセクションで、パッケージマニフェストを変更することでパッケージのオーサリングプロセス中に適用される制約について説明しました。管理者は、実行時に制約をシステムに適用することもできます。
pkg freeze コマンドを使用すると、管理者はある特定のパッケージが、現在インストールされているバージョン (タイムスタンプを含む)、またはコマンド行で指定したバージョンから変更されるのを防ぐことができます。この機能は事実上 incorporate 依存関係と同じです。
freeze コマンドの詳細については Oracle Solaris 11.3 ソフトウェアの追加と更新および pkg(1) のマニュアルページを参照してください。
さらに複雑な依存関係をイメージに適用するには、それらの依存関係を含むパッケージを作成してインストールします。
管理者は、依存関係のバージョン制約を無効にしなければならない場合があります。version-lock ファセットタグを提供して、管理者がそれらのタグ付き incorporate 依存関係を無効にできるようにします。管理者は、pkg change-facet コマンドを使用して、対応するファセットイメージプロパティーの値を false に設定できます。ファセットタグに関する一般的な情報については、バリエーションの許可を参照してください。
前の例を続けると、おそらく pkg-b は pkg-a と関係なく機能できますが、pkg-a を、結合の incorporate 依存関係によって定義された一連のバージョン内にとどめておく必要があります。myincorp パッケージマニフェストには、pkg-b 依存関係の version-lock ファセットタグなど、次の行を含めることができます。慣例的に、version-lock ファセットタグには facet.version-lock.package-name という名前が付けられます。ここで package-name は、その depend アクションの fmri に指定された、バージョンのない名前です。
set name=pkg.fmri value=myincorp@1.0 depend fmri=pkg-a@1.0 type=incorporate depend fmri=pkg-b@1.0 type=incorporate facet.version-lock.pkg-b=true
デフォルトで、この結合には pkg-b パッケージへの depend アクションが含まれており、pkg-b をバージョン 1.0 に制約しています。この制約は、次のコマンドによって緩和されます。
$ pkg change-facet version-lock.pkg-b=false
このコマンドの実行が成功したあとで、pkg-b パッケージは結合の制約から解放され、必要に応じて上位のバージョンにアップグレードできます。
次の例では、この結合で、java-8-incorporation パッケージをインストールする必要があり、それがバージョン 1.8.0.92.14-0 である必要があることを指定しています。ただし、指定された facet.version-lock ファセットにより、管理者は別のバージョンのインストールを試みることもできます。
depend fmri=consolidation/java-8/java-8-incorporation type=require depend facet.version-lock.consolidation/java-8/java-8-incorporation=true \ fmri=consolidation/java-8/java-8-incorporation@1.8.0.92.14-0 type=incorporate
おそらく上位バージョンの java-8-incorporation パッケージもこの結合で動作します。管理者は、pkg change-facet コマンドを使用して、version-lock.consolidation/java-8/java-8-incorporation ファセットプロパティーを false に設定し、結合の更新と別に、java-8-incorporation パッケージの更新を試みることができます。