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

印刷ビューの終了

更新: 2016 年 11 月
 
 

依存関係の種類

IPS では、パッケージのすべて依存関係が満たされないかぎり、パッケージをインストールすることはできません。IPS では、パッケージは相互に依存し合う (循環型依存関係を持つ) ことができます。IPS では、パッケージは同時に同じパッケージへのさまざまな種類の依存関係を持つこともできます。

この章の各セクションには、depend アクションがパッケージの作成中にマニフェスト内に指定されているときの例が含まれています。依存関係の指定は、パブリッシャーの名前を含みません。可能性のある競合については、パッケージ内容の競合の回避を参照してください。

require 依存関係

依存関係のもっとも基本的なタイプは require 依存関係です。これらの依存関係は通常、ライブラリやインタプリタ (Python や Perl など) などの機能依存性を表現するために使用します。

パッケージ pkg-a@1.0 にパッケージ pkg-b@2 への require 依存関係が含まれている場合、pkg-a@1.0 をインストールしたら、バージョン 2 以上の pkg-b パッケージもインストールする必要があります。この上位バージョンのパッケージの受け入れは、既存のパッケージのより新しいバージョンにバイナリ互換性があることへの暗黙の期待を反映しています。

depend アクションに指定されたパッケージのどのバージョンも受け入れ可能である場合は、指定された FMRI のバージョン部分を省略できます。

require 依存関係の例は次のとおりです。

depend fmri=pkg:/system/library type=require

require-any 依存関係

複数の fmri 属性によって指定される複数のターゲットパッケージのいずれか 1 つが依存関係を満たす場合、require-any 依存関係が使用されます。依存関係がまだ満たされていない場合、IPS はそれらのパッケージのいずれかを選んでインストールします。

たとえば、require-any 依存関係を使用して、Perl の少なくとも 1 つのバージョンがシステムに確実にインストールされるようできます。バージョン管理は、require 依存関係の場合と同じように処理されます。

require-any 依存関係にパッケージが一覧表示される順序は、依存関係を満たすために選択されるパッケージに影響しません。たとえば、先頭に一覧表示されているパッケージがほかのどれよりも優先されるわけではありません。例外は、すでにインストールされており、pkg 操作のほかの部分によって削除されないパッケージは、まだインストールされていないパッケージより優先されることです。

require-any 依存関係の例は次のとおりです。

depend type=require-any fmri=pkg:/editor/gnu-emacs/gnu-emacs-gtk \
    fmri=pkg:/editor/gnu-emacs/gnu-emacs-no-x11 \
    fmri=pkg:/editor/gnu-emacs/gnu-emacs-x11

optional 依存関係

optional 依存関係は、指定されたパッケージをインストールする場合に、それが指定のバージョン以上である必要があることを指定します。

このタイプの依存関係は通常、パッケージが内容を転送する場合に対処するために使用します。この場合、転送後のパッケージの各バージョンには、他方のパッケージの転送後のバージョンへの optional 依存関係が含まれるため、2 つのパッケージの互換のないバージョンをインストールすることはできません。optional 依存関係でバージョンを省略すると、その依存関係は意味がなくなりますが、許可されます。

optional 依存関係の例は次のとおりです。

depend fmri=pkg:/x11/server/xorg@1.9.99 type=optional

conditional 依存関係

conditional 依存関係には、predicate 属性と fmri 属性があります。predicate 属性の値に指定されたパッケージが、指定されたバージョン以上でシステムに存在する場合、conditional 依存関係は fmri 属性のパッケージへの require 依存関係として扱われます。predicate 属性で指定したパッケージがシステムに存在しないか、下位バージョンで存在する場合、conditional 依存関係は無視されます。

conditional 依存関係は、必須の基本パッケージがシステムに存在する場合にオプションの拡張機能をパッケージにインストールするためにもっともよく使用します。

たとえば、X11 バージョンと端末バージョンの両方を持つエディタパッケージは、X11 バージョンを別個のパッケージに入れ、必須の X クライアントライブラリパッケージが predicate として存在するテキストバージョンから X11 バージョンへの conditional 依存関係を含めることができます。

次の例の conditional 依存関係では、指定されたパッケージがすでに十分にバージョン制約されているため、パッケージバージョン番号は必要ありません。

depend fmri=library/python/pycurl-27 predicate=runtime/python-27 type=conditional

group 依存関係

group 依存関係は、パッケージのグループを構築するために使用します。

group 依存関係は指定されたバージョンを無視します。指定されたパッケージのどのバージョンもこの依存関係を満たします。

指定されたパッケージは、そのパッケージが次のいずれかの操作の対象になっていないかぎり必要です。

  • パッケージが回避リスト上に置かれました。回避リストについては、pkg(1) のマニュアルページを参照してください。

  • fmri 値に一致するパッケージが不明です。

  • パッケージが pkg install --reject で拒否されました。

  • パッケージが pkg uninstall でアンインストールされました。

これらの 3 つのオプションを使用すると、管理者は group 依存関係の対象になっているパッケージを選択解除できます。これらの 3 つのオプションのいずれかが使用された場合、IPS ではパッケージが別の依存関係で引き続き必要とされた場合を除き、更新中にそのパッケージを再インストールしません。新しい依存関係がそれに続く別の操作で削除された場合、そのパッケージは再度アンインストールされます。

廃止されたパッケージは、暗黙のうちにグループの依存関係を満たし、実質的に依存関係を無視します。

これらの依存関係の使用方法のよい例は、システムの通常の使用に必要とされるパッケージへの group 依存関係を含むパッケージを構築することです。いくつかの例として、solaris-large-server solaris-desktop、または developer-gnu があげられます。Oracle Solaris グループパッケージには、group 依存関係を配布する一連の Oracle Solaris パッケージが示されています。

グループパッケージをインストールすると、この OS の新しいバージョンへの以降の更新のすべてにわたって、適切なパッケージがシステムに確実に追加されるようになります。

group 依存関係の例は次のとおりです。

depend fmri=package/pkg type=group

group-any 依存関係

複数の fmri 属性によって指定される複数のターゲットパッケージのいずれか 1 つが依存関係を満たす場合、group-any 依存関係が使用されます。依存関係がまだ満たされていない場合、IPS はそれらのパッケージのいずれかを選んでインストールします。廃止されていないパッケージシステムが廃止されたパッケージシステムよりも優先されるという点を除き、group 依存関係に適用されるものと同じ規則が group-any 依存関係に対して適用されます。

group-any 依存関係にパッケージが一覧表示される順序は、依存関係を満たすために選択されるパッケージに影響しません。たとえば、先頭に一覧表示されているパッケージがほかのどれよりも優先されるわけではありません。次の選択された設定は存在しません。

  • すでにインストールされており、pkg 操作のほかの部分によって削除されないパッケージは、まだインストールされていないパッケージより優先されます。

  • 一部のターゲットパッケージが回避された場合、依存関係を満たすために別のターゲットを使用します。すべてのターゲットパッケージが回避された場合、依存関係は無視されます。

  • 一部のターゲットパッケージが廃止された場合、依存関係を満たすために別のターゲットを使用します。すべてのターゲットパッケージが廃止された場合、依存関係は無視されます。

group 依存関係の例は次のとおりです。

depend type=group-any \
    fmri=runtime/python-26 \
    fmri=runtime/python-27

origin 依存関係

origin 依存関係は、中間移行が必要となるアップグレード問題を解決するために存在します。デフォルトの動作では、更新中のイメージに存在している必要のある最小バージョンのパッケージ (インストール済みの場合) を指定します。root-image 属性の値が true である場合、このパッケージをインストールするには、/をルートとするイメージ上にパッケージが存在する必要があります。

たとえば、典型的な使用法として、データベースパッケージのバージョン 5 で、バージョン 3 以上からのアップグレードをサポートし、それより前のバージョンからのアップグレードはサポートしない場合があげられます。この場合、バージョン 5 にはバージョン 3 でのそれ自身への origin 依存関係があります。このため、バージョン 5 が新たにインストールされた場合、インストールは続行します。ただし、バージョン 1 のパッケージがインストールされていた場合、そのパッケージをバージョン 5 に直接アップグレードすることはできません。この場合、pkg update database-package はバージョン 5 を選択せず、アップグレードする可能な最新バージョンとして代わりにバージョン 3 を選択します。

root-image 属性の値が true の場合、依存関係のターゲットは、更新中のイメージではなく実行中のシステムに存在する場合には、指定されたバージョン以上でなければなりません。この形式の origin 依存関係は通常、ブートブロックインストーラへの依存関係など、オペレーティングシステムの問題に使用されます。

origin 依存関係の例は次のとおりです。

depend fmri=pkg:/database/mydb@3.0 type=origin

ファームウェアが手動で保守されるデバイスドライバ

デバイスドライバはそのファームウェアを管理する必要があります。ファームウェアはドライバパッケージで配布され、管理者が pkg update コマンドを使用してドライバを更新するときに更新される必要があります。ドライバの設計については、Oracle Solaris 11.2 デバイスドライバの記述 の ファームウェア互換性を参照してください。また、一部の新機能がサポートされていない場合でも、ドライバは引き続き downrev ファームウェアを使用して機能する必要があります。

いくつかのドライバでは、pkg update の実行によるドライバの更新とは別にデバイスファームウェアを更新するために手動での介入が必要です。ファームウェアが手動で保守されるドライバのいくつかは、古いバージョンのファームウェアと互換性がなく、ファームウェアに関する最小バージョン要件があります。現在インストールされているファームウェアとの互換性がないドライバのインストールを防ぐには、origin 依存関係を使用できます。このようなドライバのインストールによりシステムアップグレードが行われず、その結果システムが部分的に機能しなくなることがあります。

origin 依存関係を使用すると、配布されるドライバのバージョンと互換性があるデバイスファームウェアの最小バージョンを指定できます。root-image 属性の値が true で、fmri 属性の値が pkg:/feature/firmware/ で始まる場合、fmri 値の残りの部分は、ファームウェアの依存関係を評価する /usr/lib/fwenum 内のコマンドとして扱われます。このタイプの依存関係を指定するパッケージを管理者が更新し、ファームウェア列挙子によってファームウェア依存関係が満たされていないと判断される場合、エラーメッセージが表示され、更新は実行されず、システムは変更されません。エラーメッセージには、このドライバにより管理されるデバイスに必要なファームウェアバージョンが表示されます。ファームウェアが更新されたら、管理者は pkg update を再試行できます。

次に、最小ファームウェアバージョン要件のある origin 依存関係の例を示します。

depend fmri=pkg:/feature/firmware/mpt_sas minimum-version=1.0.0.0 \
root-image=true type=origin variant.opensolaris.zone=global

pkg クライアントは、次の例に示すようにファームウェア列挙子を呼び出します。

/usr/lib/fwenum/mpt_sas minimum-version=1.0.0.0

次に示す pkg クライアントからのメッセージの例は、管理者に対し、mpt_sas ドライバが管理する 2 つのデバイスに、そのバージョンが最小要件を満たしていないファームウェアがあることを示しています。このメッセージには、ファームウェアの必要最小バージョン要件も示されます。

There are 2 instances of downrev firmware for the mpt_sas devices present on this system;
upgrade each to version 1.0.0.0 or greater to permit installation of this version of Solaris.

ドライバで複数ベンダーからの同じデバイスがサポートされている場合、依存関係には minimum-version 属性に加えて vendor 属性も指定できます。

incorporate 依存関係

incorporate 依存関係は、指定されたパッケージがインストールされる場合に、それが指定のバージョン (指定のバージョン精度) である必要があることを指定します。たとえば、依存する FMRI にバージョン 1.4.3 が含まれている場合、1.4.3 未満のバージョンも 1.4.4 以上のバージョンもこの依存関係を満たしません。バージョン 1.4.3.7 はこのサンプル依存関係を満たします。

incorporate 依存関係の一般的な使用方法は、それらの多くを同じパッケージに入れて、互換性のあるサーフェスをパッケージバージョン領域に定義することです。そのような incorporate 依存関係セットを含むパッケージは、しばしば結合と呼ばれます。結合は通常、同時に作成されるソフトウェアパッケージのセットを定義するために使用され、個別にバージョン管理されません。incorporate 依存関係は、ソフトウェアの互換性のあるバージョンがまとめてインストールされるようにするために Oracle Solaris でよく使用されます。

incorporate 依存関係の例は次のとおりです。

depend type=incorporate \
    fmri=pkg:/driver/network/ethernet/e1000g@0.5.11,5.11-0.175.0.0.0.2.1

parent 依存関係

parent 依存関係は、ゾーンまたはほかの子イメージに使用します。この場合、その依存関係は子イメージでのみチェックされ、親イメージまたは大域ゾーンに存在している必要のあるパッケージとバージョンを指定します。指定されたバージョンは、指定されたレベルの精度に一致する必要があります。

たとえば、親の依存関係が A@2.1 にある場合、2.1 から始まる A のすべてのバージョンが一致します。この依存関係は、パッケージが非大域ゾーンと大域ゾーンの間で同期した状態に保たれる必要があるときによく使用します。ショートカットとして、この依存関係を含むパッケージの正確なバージョンの同義語として特別なパッケージ名 feature/package/dependency/self が使用されます。

parent 依存関係は、非大域ゾーンにインストールされた主要なオペレーティングシステムコンポーネント (libc.so.1 など) を、大域ゾーンにインストールされたカーネルと同期した状態に維持するために使用されます。parent 依存関係については、非大域ゾーンの処理でも説明しています。

parent 依存関係の例は次のとおりです。

depend type=parent fmri=feature/package/dependency/self \
    variant.opensolaris.zone=nonglobal

exclude 依存関係

exclude 依存関係を含むパッケージは、依存するパッケージが指定されたバージョンレベル以上でイメージにインストールされる場合はインストールできません。

exclude 依存関係の FMRI からバージョンを省いた場合、依存関係を指定するパッケージと同時にインストールできる、除外されたパッケージのバージョンはありません。

exclude 依存関係はほとんど使用されません。これらの制約は、管理者の負担になることがあるため、可能であれば回避するようにしてください。

exclude 依存関係の例は次のとおりです。

depend fmri=pkg:/x11/server/xorg@1.10.99 type=exclude