ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 での Image Packaging System を使用したソフトウェアのパッケージ化および配布 Oracle Solaris 11.1 Information Library (日本語) |
IPS では、パッケージのすべて依存関係が満たされないかぎり、パッケージをインストールすることはできません。IPS では、パッケージは相互に依存し合う (循環型依存関係を持つ) ことができます。IPS では、パッケージは同時に同じパッケージへのさまざまな種類の依存関係を持つこともできます。
この章の各セクションには、depend アクションがパッケージの作成中にマニフェスト内に指定されているときの例が含まれています。
依存関係のもっとも基本的なタイプは require 依存関係です。これらの依存関係は通常、ライブラリやインタプリタ (Python や Perl など) などの機能依存性を表現するために使用します。
パッケージ A@1.0 にパッケージ B@2 への require 依存関係が含まれている場合、A@1.0 をインストールしたら、バージョン 2 以上の B パッケージもインストールする必要があります。この上位バージョンのパッケージの受け入れは、既存のパッケージのより新しいバージョンにバイナリ互換性があることへの暗黙の期待を反映しています。
depend アクションに指定されたパッケージのどのバージョンも受け入れ可能である場合は、指定された FMRI のバージョン部分を省略できます。
require 依存関係の例は次のとおりです。
depend fmri=pkg:/system/library type=require
require-any 依存関係は、複数のパッケージが機能要件を満たすことできる場合に使用します。依存関係がまだ満たされていない場合、IPS はそれらのパッケージのいずれかを選んでインストールします。
たとえば、require-any 依存関係を使用して、Perl の少なくとも 1 つのバージョンがシステムに確実にインストールされるようできます。バージョン管理は、require 依存関係の場合と同じように処理されます。
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 依存関係が含まれるため、2 つのパッケージの互換のないバージョンをインストールすることはできません。optional 依存関係でバージョンを省略すると、その依存関係は意味がなくなりますが、許可されます。
optional 依存関係の例は次のとおりです。
depend fmri=pkg:/x11/server/xorg@1.9.99 type=optional
conditional 依存関係には、predicate 属性と fmri 属性があります。predicate 属性の値で指定されたパッケージが指定されたバージョン以上でシステムに存在する場合、conditional 依存関係は fmri 属性のパッケージへの require 依存関係として扱われます。predicate 属性で指定したパッケージがシステムに存在しないか、下位バージョンで存在する場合、conditional 依存関係は無視されます。
conditional 依存関係は、必須の基本パッケージがシステムに存在する場合にオプションの拡張機能をパッケージにインストールするためにもっともよく使用します。
たとえば、X11 バージョンと端末バージョンの両方を持つエディタパッケージは、X11 バージョンを別個のパッケージに入れ、必須の X クライアントライブラリパッケージが predicate として存在するテキストバージョンから X11 バージョンへの conditional 依存関係を含めることができます。
conditional 依存関係の例は次のとおりです。
depend type=conditional fmri=library/python-2/pycurl-26 \ predicate=runtime/python-26
group 依存関係は、パッケージのグループを構築するために使用します。
group 依存関係は指定されたバージョンを無視します。指定されたパッケージのどのバージョンもこの依存関係を満たします。
指定されたパッケージは、そのパッケージが次のいずれかの処理の対象になっていないかぎり必要です。
パッケージが回避リスト上に置かれました。回避リストについては、pkg(1) のマニュアルページを参照してください。
パッケージが 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
origin 依存関係は、中間移行が必要となるアップグレード問題を解決するために存在します。デフォルトの動作では、更新中のシステムに存在している必要のある最小バージョンのパッケージ (インストール済みの場合) を指定します。
たとえば、典型的な使用法として、データベースパッケージのバージョン 5 で、バージョン 3 以上からのアップグレードをサポートし、それより前のバージョンからのアップグレードはサポートしない場合があげられます。この場合、バージョン 5 にはバージョン 3 でのそれ自身への origin 依存関係があります。このため、バージョン 5 が新たにインストールされた場合、インストールは続行します。ただし、バージョン 1 のパッケージがインストールされていた場合、そのパッケージをバージョン 5 に直接アップグレードすることはできません。この場合、pkg update database-package はバージョン 5 を選択せず、アップグレードする可能な最新バージョンとして代わりにバージョン 3 を選択します。
origin 依存関係の動作は、root-image 属性を true にすることで変更できます。この場合、指定されたパッケージは、それが更新中のイメージではなく実行中のシステムに存在する場合、指定のバージョンまたはそれ以上にする必要があります。これは通常、ブートブロックインストーラへの依存関係など、オペレーティングシステムの問題に使用されます。
origin 依存関係の例は次のとおりです。
depend fmri=pkg:/database/mydb@3.0 type=origin
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 依存関係は、ゾーンまたはほかの子イメージに使用します。この場合、その依存関係は子イメージでのみチェックされ、親イメージまたは大域ゾーンに存在している必要のあるパッケージとバージョンを指定します。指定されたバージョンは、指定されたレベルの精度に一致する必要があります。
たとえば、親の依存関係が A@2.1 にある場合、2.1 から始まる A のすべてのバージョンが一致します。この依存関係は、パッケージが非大域ゾーンと大域ゾーンの間で同期した状態に保たれる必要があるときによく使用します。ショートカットとして、この依存関係を含むパッケージの正確なバージョンの同義語として特別なパッケージ名 feature/package/dependency/self が使用されます。
parent 依存関係は、非大域ゾーンにインストールされた主要なオペレーティングシステムコンポーネント (libc.so.1 など) を、大域ゾーンにインストールされたカーネルと同期した状態に維持するために使用されます。parent 依存関係については、第 10 章非大域ゾーンの処理でも説明されています。
parent 依存関係の例は次のとおりです。
depend type=parent fmri=feature/package/dependency/self \ variant.opensolaris.zone=nonglobal
exclude 依存関係を含むパッケージは、依存するパッケージが指定されたバージョンレベル以上でイメージにインストールされる場合はインストールできません。
exclude 依存関係の FMRI からバージョンを省いた場合、依存関係を指定するパッケージと同時にインストールできる、除外されたパッケージのバージョンはありません。
exclude 依存関係はほとんど使用されません。これらの制約は、管理者の負担になることがあるため、可能であれば回避するようにしてください。
exclude 依存関係の例は次のとおりです。
depend fmri=pkg:/x11/server/xorg@1.10.99 type=exclude