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

印刷ビューの終了

更新: 2016 年 11 月
 
 

複数のアプリケーション実装の配布

次のような特性を持つ、特定のアプリケーションの複数の実装を配布することが必要な場合があります。

  • すべて実装がイメージ内で使用できます。

  • 検出しやすいように、/usr/bin などの共通ディレクトリからいずれかの実装が使用可能です。

  • 管理者は、パッケージの追加や削除を行わずに、共通ディレクトリから使用可能な実装を容易に変更できます。

Oracle Solaris 11 には、Java や Python など各種アプリケーションの複数の実装が用意されています。/usr/bin などの共通ディレクトリから使用可能な実装を指定し、管理者がその選択を容易に変更できるようにするには、調停されたリンクを使用します。

調停されたリンクは、アプリケーションの複数の実装を 1 つのイメージで管理します。調停されたリンクは、mediator 属性が設定されたシンボリックリンクです (調停されたリンクの属性を参照)。mediator 属性を持つ link アクションでパッケージ化されたソフトウェアは、調停の参加要素です。/usr/bin などの共通ディレクトリから使用可能な調停参加要素は、優先バージョンと呼ばれます。調停の優先バージョンは、次のいずれかの方法で決定します。

パッケージマニフェストでの指定

調停の参加要素ごとに、バージョン (mediator-version) またはバージョン管理された実装 (mediator-implementation) を指定できます。競合が発生する場合に備えてオーバーライド優先度 (mediator-priority) を指定できます。

システムによる選択

調停の参加要素に優先度が指定されている場合、優先度がもっとも高い参加要素が優先実装として選択されます。

優先度が指定されている調停の参加要素が存在せず、参加要素にバージョンが指定されている場合は、もっとも高い値のバージョンが指定されている参加要素が優先実装として選択されます。

調停の参加要素に優先度もバージョンも指定されていない場合、任意の参加要素が優先実装として選択されます。選択されている参加要素の mediator-implementation にバージョン文字列が含まれている場合、その mediator-implementation にもっとも高い値のバージョン文字列が指定されている参加要素が優先実装となります。

管理者による指定

管理者は pkg set-mediator コマンドを使用して優先実装を設定できます。Oracle Solaris 11.3 ソフトウェアの追加と更新 の デフォルトのアプリケーション実装の指定を参照してください。

特定の調停のインスタンスが 1 つだけイメージにインストールされる場合、そのインスタンスはその調停の優先実装として自動的に選択されます。パッケージのインストール後に優先実装がシステム管理者により設定される場合、この同じ調停に追加の参加要素をインストールしても、管理者によって設定された優先実装は変更されません。

調停されたリンクの属性

次の属性を link アクションで設定すると、調停されたリンクの配布方法を制御できます。

mediator

特定の調停グループに参加しているすべてのパス名で共有されている調停名前空間内のエントリを指定します。例としては、javapython、および ruby などがあります。

mediator 属性を持つすべてのリンクには、mediator-version 属性または mediator-implementation 属性も必要です。特定のパス名に対する仲介リンクはすべて、同じ mediator を指定する必要があります。ただし、すべてのメディエータバージョンおよび実装が、特定のパスでリンクを提供する必要はありません。調停参加要素がリンクを提供しない場合、その参加要素が優先実装として選択されるとそのリンクが削除されます。

mediator-version

mediator 属性によって記述されるインタフェースのバージョンを指定します。この属性は、mediator が指定され、mediator-implementation が指定されていない場合に必要です。mediator-version の値は、整数のドットで区切られた並びです。操作を容易にするため、指定する値は、そのリンクを配布するパッケージのバージョンに一致している必要があります。たとえば runtime/ruby-19 パッケージは mediator-version=1.9 を指定する必要があります。バージョン値を適切に設定することで、管理者は調停に参加しているソフトウェア、そのソフトウェアを配布するパッケージ、および優先バージョンとして現在設定されているソフトウェアのバージョンを判別できます。mediator-priority が設定されている調停の参加要素がない場合、IPS は、mediator-version の値がもっとも高い調停参加要素を優先実装として選択します。

mediator-implementation

mediator 属性によって記述されるインタフェースの実装を指定します。この属性は、mediator が指定され、mediator-version は指定されていない場合に必要です。実装の文字列は順序付けられているとはみなされません。mediator-version または mediator-priority 属性が設定されている調停の参加要素がない場合、IPS によって優先実装として任意の実装が選択されます。

mediator-implementation の値は、英数字と空白で構成された任意の長さの文字列にすることができます。実装自体をバージョン管理できる合は、文字列の最後の記号 (@) のあとにバージョンを指定します。このバージョンは、整数のドットで区切られた並びです。実装のバージョンが複数存在する場合は、最上位バージョンの実装が選択されます。たとえば値が 4DB@12mediator-implementation は、値が 4DB@11mediator-implementation よりも優先して選択されます。

mediator-priority

mediator 属性によって記述されるインタフェースの優先度を指定します。mediator-version または mediator-implementation も指定する必要があります。たとえば、調停の 1 つの参加要素の mediator-version に値 1.6 が設定されており、別の参加要素の mediator-version に値 1.7 が設定されている場合、mediator-version の値が 1.6 の参加要素を優先実装として指定するには、mediator-priority 属性を割り当てます。

mediator-priority 属性は、次のいずれかの値を持ちます。

vendor

このリンクは、mediator-priority が指定されていないリンクより優先されます。

site

このリンクは、mediator-priority が指定されていないリンクと、mediator-priority の値が vendor であるリンクよりも優先されます。

調停されたリンクの指定

次のコマンドは、現在選択されている Python、Ruby、および Secure Shell の優先実装を表示します。

$ pkg mediator python ruby ssh
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
python      vendor    2.6     vendor
ruby        system    1.9     system
ssh         vendor            vendor     sunssh

次のコマンドは、各調停の参加要素をすべて表示します。

$ pkg mediator -a python ruby ssh
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
python      vendor    2.6     vendor
python      system    2.7     system
ruby        system    1.9     system
ruby        system    1.8     system
ssh         vendor            vendor     sunssh

下位バージョンがシステムにより優先 Python 実装として選択されていますが、これは、VER. SRC. および IMPL. SRC. と次のコマンドによって示されるように、このバージョンには mediator-priority が指定されているためです。

$ pkg contents -Ho action.raw -t link -a path=usr/bin/python 'runtime/python*'
link mediator=python mediator-version=2.7 path=usr/bin/python pkg.linted.pkglint
.dupaction010.2=true target=python2.7
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
python target=python2.6

-a オプションの引数として mediator=python を指定すると、出力では python 調停にさらに多くのリンクが表示されます。調停に必要なすべてのパスを含めることを忘れないでください。

$ pkg contents -Ho action.raw -t link -a mediator=python runtime/python-26
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
2to3 target=2to3-2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
python target=python2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
pydoc target=pydoc-2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
idle target=idle-2.6
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
python-config target=python2.6-config
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
amd64/python target=python2.6 variant.arch=i386
link mediator=python mediator-priority=vendor mediator-version=2.6 path=usr/bin/
amd64/python-config target=python2.6-config variant.arch=i386
link facet.doc.man=all mediator=python mediator-priority=vendor mediator-version
=2.6 path=usr/share/man/man1/python.1 target=python2.6.1

runtime/python-27 パッケージ内の調停されたリンク usr/bin/pythonpkg.linted.pkglint.dupaction010.2=true 属性は、/usr/bin/python リンクが複数のパッケージによって配布されており、有効な調停されたリンクであることを示します。調停されたリンクは、アクションを配布できるのは 1 つのパッケージだけであるという規則の例外です。pkglint ユーティリティーが、重複するアクションの有無を確認します。pkg.linted.check.idtrue に設定すると、そのアクションの check.id の確認が省略されます。パッケージを検証するおよびpkglint(1) のマニュアルページを参照してください。pkglint が実行するチェックの完全なリストを表示するには、pkglint -L コマンドを使用します。pkglint.dupaction010 チェックの説明は「調停されたリンクは有効である」です。

システムにより、上位バージョンが優先 Ruby 実装として選択されます。

$ pkg contents -Ho action.raw -t link -a path=usr/bin/ruby runtime/ruby-19
link mediator=ruby mediator-version=1.9 path=usr/bin/ruby pkg.linted.pkglint.dup
action010.2=true target=./ruby19

ssh 調停の参加要素は 1 つだけです。追加のアプリケーション実装を配布することを予定している場合は、ほかの実装が配布される場合に元のパッケージが調停の参加要素となるように、元のパッケージで調停を定義します。このようにしないと、元のパッケージに対する更新を配布する必要が生じます。更新を配布しないと、ユーザーが元の実装を優先実装として選択できなくなります。

次のコマンドは、リンクアクションのほかに、このアクションが定義されているパッケージの名前も表示します。

$ pkg contents -o pkg.name,action.raw -t link -a path=usr/bin/ssh '*'
PKG.NAME    ACTION.RAW
network/ssh link mediator=ssh mediator-implementation=sunssh mediator-priority=
vendor path=usr/bin/ssh target=../lib/sunssh/bin/ssh

mediator-implementation を指定する調停されたリンクは、mediator-versionmediator-priority、またはこの両方も指定できます。調停のすべての参加要素が mediator-implementation だけを指定している場合、システムは優先実装を任意に選択します。選択された mediator-implementation がバージョン管理されている場合、次のコマンドに示すように最上位バージョンが選択されます。

$ pkg mediator -a myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     db@12
myapp       system            system     db@11
myapp       system            system     db
$ pkg mediator myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     db@12

調停に別の実装が追加されると、次のコマンドにより示されるように、システムによってその実装が選択されることがあります。

$ pkg mediator -a myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     aa
myapp       system            system     db@12
myapp       system            system     db@11
myapp       system            system     db
$ pkg mediator myapp
MEDIATOR    VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION
myapp       system            system     aa

調停されたリンクのベストプラクティス

同じパスを、あるパッケージではリンクとして配布し、別のパッケージではディレクトリまたはファイルとして配布することはしないでください。一般に、同じパスを 2 回以上配布しないでください。同じリンクパスを 2 回以上配布する場合は、各インスタンスで異なるターゲットが指定され、各インスタンスが同じ調停に参加しているようにします。

調停に必要なすべてのパスを含めることを忘れないでください。ライブラリ、構成ファイル、マニュアルページ、およびその他のファイルシステムオブジェクトは、実装によって異なる可能性があります。

追加のアプリケーション実装を配布することを予定している場合は、ほかの実装が配布される場合に元のパッケージが調停の参加要素となるように、元のパッケージで調停を定義します。このようにしないと、元のパッケージに対する更新を配布する必要が生じます。更新を配布しないと、ユーザーが元の実装を優先実装として選択できなくなります。

調停に参加しているソフトウェアに対し、ほかのソフトウェアが依存関係を持つ場合、およびそのソフトウェアのいずれかのバージョンが依存関係を満たす場合は、require-any 依存関係を使用します。require-any 依存関係については、依存アクションを参照してください。

操作しやすいように、mediator-version には、リンクを配布するパッケージのバージョンと一致する値を指定してください。バージョン値を適切に設定することで、管理者は調停に参加しているソフトウェア、そのソフトウェアを配布するパッケージ、および優先バージョンとして現在設定されているソフトウェアのバージョンを判別できます。