アプリケーションまたはツールの複数のバージョンが同じイメージから利用できる場合があります。ユーザーはフルパスを指定することによって、アプリケーションの各バージョンを利用できます。使いやすくするために、優先バージョンと呼ばれる 1 つのバージョンが、/usr/bin などの共通ディレクトリから利用できます。以下に示すように、すべてのバージョンが同じメディエーションに入っている場合、優先バージョンであるバージョンを簡単に設定し直すことができます。この管理上の選択は、パッケージの更新後も保持されます。
メディエーションとは、セット内のすべてのリンクでリンクパスが同じで、各リンクのターゲットが異なるリンクのセットです。たとえば、リンクパスが /usr/bin/myapp で、リンクのターゲットが /usr/myapp/myapp1/bin/myapp および /usr/myapp/myapp2/bin/myapp を含む場合があります。メディエーションの各リンクは、メディエーションの参加者と呼ばれます。/usr/bin/myapp が現在 myapp1 を呼び出す場合、/usr/bin/myapp が myapp2 を呼び出すように選択を簡単に変更することができます。現在リンクのターゲットであるソフトウェアのバージョンは、優先バージョンです。
イメージ内のすべてのメディエーション対象リンクの優先バージョンを表示するには、pkg mediator コマンドを使用します。
次の出力で、MEDIATOR は、同じ優先リンクパスを共有するリンクのセットの名前です。VER. SRC. および IMPL. SRC. は、優先バージョンが、システムによって選択されたか、割り当て済みの優先度に応じて選択されたか (vendor または site)、管理者によって設定されたか (local) を表示します。VERSION は、選択されたメディエーション参加者のバージョンで、リンクが表すソフトウェアのバージョンに類似しているはずです。VERSION はパッケージ開発者によって設定されます。IMPLEMENTATION は、バージョンストリングに加えて、あるいはバージョンストリングの代わりにパッケージ開発者によって設定できるストリングです。
$ pkg mediator MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION gcc-runtime system 4.7 system java system 1.7 system php system 5.2 system python vendor 2.6 vendor ruby system 1.9 system
-a オプションは、すべてのメディエーション参加者を表します。異なる優先バージョンを選択する場合、このオプションを使用して、選択内容を表示します。次の例は、java メディエーションのすべての参加者を示しています。system キーワードは、このメディエーションの優先バージョンがパッケージの優先設定で指定されておらず、管理者によって設定されなかったことを示します。パッケージシステムは、高い VERSION 値を持つバージョンを優先バージョンとして選択しました。
$ pkg mediator -a java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java system 1.7 system java system 1.6 system
次の出力では、2 つの異なるバージョンの Java Runtime Environment がこのイメージにインストールされ、バージョン 1.7.0_51 が現在選択されている優先バージョンであることを確認できます。
$ pkg list -s '*jre*' NAME (PUBLISHER) SUMMARY runtime/java/jre-6 Java(TM) Platform Standard Edition Runtime Environment (1.6.0_71-b12) runtime/java/jre-7 Java Platform Standard Edition Runtime Environment (1.7.0_51-b13) $ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) Server VM (build 24.51-b03, mixed mode)
jre-6 パッケージと jre-7 パッケージの両方に、パスが /usr/bin/java であるシンボリックリンクが定義されています。jre-6 パッケージでは、リンクのターゲットは jdk1.6.0 です。jre-7 パッケージでは、リンクのターゲットは jdk1.7.0 です。上記の pkg mediator コマンドおよび java -version コマンドによって、現在の優先バージョンはバージョン 1.7 で、/usr/bin/java リンクのターゲットであることが表示されています。
指定したメディエーションのデフォルトまたは優先のバージョンを設定し直すには、pkg set-mediator コマンドを使用します。
pkg mediator -a からの出力を使用して、-V 引数に対するバージョンか、-I 引数に対する実装を選択します。タイプミスをしたか、現在入手できないメディエータのバージョンまたは実装を指定した場合、指定されたメディエータを使用するリンクは削除されます。
バックアップ BE が作成されるかどうかを表示するには、set-mediator サブコマンドに -n オプションを使用します。バックアップ BE が作成されない場合、set-mediator サブコマンドに --require-backup-be オプションを指定することができます。メディエータの変更が現在の BE で行われます。メディエータの変更後に現在の BE に問題がないことが確認できたら、beadm destroy を使用してバックアップ BE を破棄できます。
前回の出力では、現在選択されている java メディエーションの優先バージョンがバージョン 1.7 であると表示されました。次のコマンドは、バージョン 1.6 を優先バージョンとして設定することを示し、つまり /usr/bin/java を呼び出すと JRE バージョン 1.6 が呼び出されることを意味します。ユーザーが JRE version 1.7 のフルパスを指定すれば、このバージョンも引き続きシステムで使用可能です。2 つの pkg mediator コマンドの出力を比較してください。メディエーションの優先バージョンを変更すると、VER. SRC. も local に変更され、選択が管理者によって指定されたことを示しています。この選択は、リブートおよびパッケージ更新後も持続します。
$ pkg mediator java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java system 1.7 system $ pkg mediator -a java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java system 1.7 system java system 1.6 system $ pkg set-mediator -V 1.6 java Packages to update: 3 Mediators to change: 1 Create boot environment: No Create backup boot environment: No PHASE ITEMS Removing old actions 2/2 Updating modified actions 3/3 Updating image state Done Creating fast lookup database Done Reading search index Done Updating search index 3/3 $ pkg mediator java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java local 1.6 system
この管理上の選択は、選択された実装がインストールされていなくても、パッケージの更新後も保持されます。選択された実装がインストールされていない場合、メディエーションされたリンクのターゲットは存在しません。優先される実装をリセットするには、次のいずれかの方法を使用します。
pkg set-mediator コマンドをふたたび使用して、pkg mediator -a によって表示された更新済みリストから別の実装を選択します。
pkg unset-mediator コマンドを使用して、システムが新しい実装を選択できるようにします。
$ pkg unset-mediator java