ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 での Image Packaging System を使用したソフトウェアのパッケージ化および配布 Oracle Solaris 11.1 Information Library (日本語) |
次のような特性を持つ、ある特定のアプリケーションの複数の実装を配布することが必要な場合があります。
すべて実装がイメージ内で使用できます。
実装のいずれかが優先される実装として指定されます。
優先される実装には、発見しやすくするために /usr/bin などの一般的なディレクトリにインストールされたそのバイナリへのシンボリックリンクが含まれています。
管理者は、パッケージの追加や削除を行わずに、必要に応じて優先される実装を変更できます。
複数のアプリケーション実装を配布する例の 1 つに GCC があります。Oracle Solaris では GCC の複数のバージョンを提供しており、各バージョンは独自のパッケージに含まれ、/usr/bin/gcc は優先されるバージョンを指します。
IPS では、調停されたリンクを使用して、1 つのイメージ内で複数のアプリケーション実装を管理します。調停されたリンクとは、pkg set-mediator および pkg unset-mediator コマンドによって制御されるシンボリックリンクです。さまざまなアプリケーション実装を配布するパッケージ内の link アクションは、調停に参加していると考えられています。pkg mediator コマンドはイメージ内の調停を一覧表示します。mediator コマンドについては、pkg(1) のマニュアルページを参照してください。
次の属性を link アクションで設定すると、調停されたリンクの配布方法を制御できます。
特定の調停グループ (python など) に参加しているすべてのパス名によって共有されている調停名前空間内のエントリを指定します。
リンクの調停は mediator-version および mediator-implementation に基づいて行うことができます。特定のパス名に対する仲介リンクはすべて、同じ mediator を指定する必要があります。ただし、すべてのメディエータバージョンおよび実装が、特定のパスでリンクを提供する必要はありません。調停がリンクを提供していない場合は、その調停が選択されたときにリンクが削除されます。
特定のバージョンまたは実装、あるいはその両方と組み合わせたメディエータは、パッケージシステムで使用するために選択できる調停を表します。
mediator 属性で記述されたインタフェースのバージョン (負でない整数のドットで区切られた並びとして表現) を指定します。この属性は、mediator が指定され、mediator-implementation は指定されていない場合に必要です。ローカルシステム管理者は、使用するバージョンを明示的に設定できます。指定した値は一般に、そのリンクを配布するパッケージのバージョンに一致するようにしてください。たとえば、runtime/python-26 は mediator-version=2.6 を使用するようにします (ただし、これは必須ではありません)。
メディエータの実装を指定します。この属性は、mediator-version 属性に加えて、またはその代わりに指定できます。実装の文字列は順序付けられているとはみなされません。システム管理者によって明示的に指定されていない場合は、pkg(5) によって文字列が任意に選択されます。
mediator-implementation の値は、英数字と空白で構成された任意の長さの文字列にすることができます。実装自体をバージョン管理できるか、または実際にバージョン管理されている場合は、文字列の最後の @ 記号のあとにバージョンを指定します。このバージョンは、負でない整数のドットで区切られた並びです。実装の複数のバージョンが存在する場合、デフォルトの動作では、最上位バージョンを持つ実装が選択されます。
特定のパスにある実装調停リンクのインスタンスが 1 つしかシステムにインストールされていない場合は、それが自動的に選択されます。このパスにある将来のリンクがインストールされても、ベンダー、サイト、またはローカルのオーバーライドが適用されないかぎり、またはいずれかのリンクがバージョン仲介である場合、このリンクは切り替えられません。
調停されたリンクの競合を解決する場合、pkg(5) は可能なかぎり、mediator-version の最大の値を持つリンクを選択します。それが不可能な場合、pkg(5) は mediator-implementation に基づいてリンクを選択します。mediator-priority 属性は、正常な競合解決処理のためのオーバーライドを指定するために使用されます。mediator-priority 属性が指定されていない場合は、デフォルトのメディエータ選択ロジックが適用されます。
mediator-priority 属性は、次のいずれかの値を持ちます。
このリンクは、mediator-priority が指定されていないリンクより優先されます。
このリンクは、vendor の値を持つリンクや、mediator-priority が指定されていないリンクより優先されます。
ローカルシステム管理者は、上で説明した選択ロジックをオーバーライドできます。
マニフェスト例からの次の 2 つの抜粋では、リンク /usr/bin/myapp の調停に参加しています。実装 1 はバージョン 5.8.4 です。
set name=pkg.fmri value=pkg://test/myapp-impl-1@1.0,5.11:20120721T035233Z file path=usr/myapp/5.8.4/bin/myapp group=sys mode=0755 owner=root link path=usr/bin/myapp target=usr/myapp/5.8.4/bin/myapp mediator=myapp mediator-version=5.8.4
実装 2 はバージョン 5.12 です。
set name=pkg.fmri value=pkg://test/myapp-impl-2@1.0,5.11:20120721T035239Z file path=usr/myapp/5.12/bin/myapp group=sys mode=0755 owner=root link path=usr/bin/myapp target=usr/myapp/5.12/bin/myapp mediator=myapp mediator-version=5.12
これらのパッケージの両方を同じイメージにインストールできます。
$ pkg list myapp-impl-1 myapp-impl-2 NAME (PUBLISHER) VERSION IFO myapp-impl-1 1.0 i-- myapp-impl-2 1.0 i--
pkg mediator コマンドを使用して、使用中の調停を表示します。
$ pkg mediator MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION myapp local 5.12 system $ ls -al usr/bin/myapp lrwxrwxrwx 1 root sys 23 Jul 21 16:58 usr/bin/myapp -> usr/myapp/5.12/bin/myapp
pkg search コマンドを使用して、myapp 調停に参加しているほかのパッケージを調べます。
$ pkg search -ro path,target,mediator,mediator-version,pkg.shortfmri ::mediator:myapp PATH TARGET MEDIATOR MEDIATOR-VERSION PKG.SHORTFMRI usr/bin/myapp usr/myapp/5.12/bin/myapp myapp 5.12 pkg:/myapp-impl-2@1.0 usr/bin/myapp usr/myapp/5.8.4/bin/myapp myapp 5.8.4 pkg:/myapp-impl-1@1.0
pkg set-mediator コマンドを使用して、その調停を変更します。次の例では、優先バージョンにする myapp のバージョンを変更します。
# pkg set-mediator -V 5.8.4 myapp Packages to update: 2 Mediators to change: 1 Create boot environment: No Create backup boot environment: No PHASE ITEMS Removing old actions 2/2 Updating modified actions 2/2 Updating image state Done Creating fast lookup database Done Reading search index Done Updating search index 2/2 # ls -al usr/bin/myapp lrwxrwxrwx 1 root sys 24 Jul 21 17:02 usr/bin/myapp -> usr/myapp/5.8.4/bin/myapp