アプリケーションまたはツールの複数のバージョンが同じイメージから利用できる場合があります。ユーザーはフルパスを指定することによって、アプリケーションの各バージョンを利用できます。使いやすくするために、優先バージョンと呼ばれる 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 apache system 2.4 system apr-1-config system 1.5 system apu-1-config system 1.5 system csh vendor vendor suncsh gcc system 5 system java system 1.8 system openssl vendor vendor default perl vendor 5.22 vendor python local 2.7 vendor ruby vendor 2.1 vendor sendmail vendor vendor sendmail which vendor vendor gnu
-a オプションは、すべてのメディエーション参加者を表します。異なる優先バージョンを選択する場合、このオプションを使用して、選択内容を表示します。次の例は、java メディエーションのすべての参加者を示しています。system キーワードは、このメディエーションの優先バージョンがパッケージの優先設定で指定されておらず、管理者によって設定されなかったことを示します。パッケージシステムは、高い VERSION 値を持つバージョンを優先バージョンとして選択しました。
$ pkg mediator -a java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java system 1.8 system java system 1.7 system
次の出力は、java メディエーションを提供するすべてのパッケージを示しています。
$ pkg search -lo pkg.name,mediator-version link:mediator:java PKG.NAME MEDIATOR-VERSION runtime/java/jre-7 1.7 runtime/java/jre-8 1.8
次の出力では、2 つの異なるバージョンの Java Runtime Environment がこのイメージにインストールされ、バージョン 1.8.0_112 が現在選択されている優先バージョンであることを確認できます。
$ pkg list -s '*jre*' NAME (PUBLISHER) SUMMARY runtime/java/jre-7 Java Platform Standard Edition Runtime Environment (1.7.0_131-b12) runtime/java/jre-8 Java Platform Standard Edition Runtime Environment (1.8.0_121-b13) $ java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
次の出力は、メディエーションされたリンク (PATH) およびリンク先 (TARGET) を示しています。
$ pkg contents -o mediator-version,path,target -t link -a mediator=java jre-8 jre-7 MEDIATOR-VERSION PATH TARGET 1.7 usr/java jdk/jdk1.7.0_131 1.8 usr/java jdk/jdk1.8.0_121 1.7 usr/jdk/jdk1.7.0_131 instances/jdk1.7.0 1.8 usr/jdk/jdk1.8.0_121 instances/jdk1.8.0 1.7 usr/jdk/latest jdk1.7.0_131 1.8 usr/jdk/latest jdk1.8.0_121 $ ls -l /usr/java lrwxrwxrwx 1 root root 16 Mar 23 16:11 /usr/java -> jdk/jdk1.8.0_121/
jre-8 パッケージと jre-7 パッケージの両方に、パスが /usr/bin/java であるシンボリックリンクが定義されています。jre-7 パッケージでは、リンクのターゲットは jdk1.6.0 です。jre-8 パッケージでは、リンクのターゲットは jdk1.7.0 です。上記の pkg mediator コマンドおよび java -version コマンドによって、現在の優先バージョンはバージョン 1.8 で、/usr/bin/java リンクのターゲットであることが表示されています。
次の出力は、openssl メディエーション内で現在利用できるすべての参加者を示しています。
$ pkg mediator -a openssl MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION openssl vendor vendor default
次の出力は、openssl-fips-140 パッケージまたは apache-ssl-fips-140 パッケージをインストールしたあとで、openssl の fips-140 実装が利用可能になることを示しています (apache-ssl-fips-140 パッケージが openssl-fips-140 パッケージをインストールします)。
$ pkg search -o pkg.name,mediator-implementation link:mediator:openssl PKG.NAME MEDIATOR-IMPLEMENTATION web/server/apache-24/module/apache-ssl default web/server/apache-24/module/apache-ssl-fips-140 fips-140 library/security/openssl default library/security/openssl/openssl-fips-140 fips-140
次の出力は、perl コマンドについてはこのイメージで 1 つの実装のみが利用できることを示しています。
$ pkg mediator -a perl MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION perl vendor 5.22 vendor perl system 5.12 system
利用できる実装は 1 つだけですが、パスは依然としてメディエーションされたリンクです。
$ which perl /usr/bin/perl $ ls -l /usr/bin/perl lrwxrwxrwx 1 root root 22 Mar 23 16:06 /usr/bin/perl -> ../perl5/5.12/bin/perl
新しいバージョンが存在することがわかっているため、次のコマンドを入力して新しいバージョンを指定するリンクを更新します。次のコマンドは、指定されたバージョンがこのイメージで現在利用できないバージョンであるため正しくありません。
$ pkg set-mediator -vV 5.22 perl Packages to change: 2 Mediators to change: 1 Estimated space available: 867.06 GB Estimated space to be consumed: 241.78 MB Create boot environment: No Create backup boot environment: Yes Rebuild boot archive: No Changed mediators: mediator perl: version: 5.12 (vendor default) -> 5.22 (local default) ...
pkg mediator コマンドは、更新された設定を表示します。
$ pkg mediator perl MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION perl local 5.22 system
ところが、pkg mediator -a コマンドでは、現在の設定が利用できないことが示されています。
$ pkg mediator -a perl MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION perl vendor 5.12 vendor
バージョン指定が正しくないため、メディエーションされたリンクが削除されています。
$ which perl no perl in /usr/sbin /usr/bin $ ls -l /usr/bin/perl /usr/bin/perl: No such file or directory
この問題は、コマンドへのフルパス (/usr/perl5/5.12/bin/perl) を指定することによって回避できます。ターゲットパスは影響を受けません。メディエーションされたリンクのみが削除されます。
この問題は、次のいずれかのアクションによって修正されます。
優先バージョンを利用可能な元のバージョンに戻す。
$ pkg set-mediator -V 5.12 perl
pkg unset-mediator コマンドを使用して、システムが利用可能な実装から新しい実装を選択できるようにします。
$ pkg unset-mediator perl
必要な更新済みバージョンを提供するパッケージをインストールする。
次のコマンドの出力は、perl のメディエーションされたリンクを提供したパッケージを表示します。
$ pkg search -o pkg.name,mediator-version link:mediator:perl
runtime/perl-522 パッケージおよび terminal/cssh-522 パッケージによって、バージョン 5.22 の perl のメディエーションされたリンクが提供されます。terminal/cssh-522 パッケージによって runtime/perl-522 パッケージがインストールされます。問題を修正するために必要なことは、terminal/cssh-522 をインストールすることだけです。
$ pkg install terminal/cssh-522
問題を修正または回避できない場合、pkg set-mediator コマンドを使用したときに作成されたバックアップ BE にリブートしてください。
指定したメディエーションのデフォルトまたは優先のバージョンを設定し直すには、pkg set-mediator コマンドを使用します。
pkg mediator -a からの出力を使用して、-V 引数に対するバージョンか、-I 引数に対する実装を選択します。pkg mediator -a によって表示されないメディエーション参加者を指定しないでください。
![]() | 注意 - タイプミスをしたか、現在利用できないメディエータのバージョンまたは実装を指定した場合、指定されたメディエータを使用するリンクは使用できない優先パスの設定: 結果と回復に示すように削除されます。 |
バックアップ BE が作成されるかどうかを表示するには、set-mediator サブコマンドに -n オプションを使用します。バックアップ BE が作成されない場合、set-mediator サブコマンドに --require-backup-be オプションを指定することができます。メディエータの変更が現在の BE で行われます。メディエータの変更後に現在の BE に問題がないことが確認できたら、beadm destroy を使用してバックアップ BE を破棄できます。
次の出力では、java メディエーションの現在選択されている優先バージョンがバージョン 1.8 であること、およびバージョン 1.7 もこのイメージで利用可能であることが示されています。
$ pkg mediator java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java system 1.8 system $ pkg mediator -a java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java system 1.8 system java system 1.7 system
次のコマンドは、バージョン 1.7 を優先バージョンとして設定することを示し、つまり /usr/bin/java を呼び出すと JRE バージョン 1.7 が呼び出されることを意味します。ユーザーが JRE version 1.8 のフルパスを指定すれば、このバージョンも引き続きシステムで使用可能です。2 つの pkg mediator コマンドの出力を比較してください。メディエーションの優先バージョンを変更すると、VER. SRC. も local に変更され、選択が管理者によって指定されたことを示しています。この選択は、リブートおよびパッケージ更新後も持続します。
$ pkg set-mediator -v -V 1.7 java Packages to change: 3 Mediators to change: 1 Estimated space available: 867.06 GB Estimated space to be consumed: 238.26 MB Create boot environment: No Create backup boot environment: Yes Rebuild boot archive: No ... $ pkg mediator java MEDIATOR VER. SRC. VERSION IMPL. SRC. IMPLEMENTATION java local 1.7 system
この管理上の選択は、選択された実装がインストールされていなくても、パッケージの更新後も保持されます。選択された実装がインストールされていない場合、メディエーションされたリンクのターゲットは存在しません。優先される実装をリセットするには、次のいずれかの方法を使用します。
pkg set-mediator コマンドをふたたび使用して、pkg mediator -a によって表示された更新済みリストから別の実装を選択します。
pkg unset-mediator コマンドを使用して、システムが新しい実装を選択できるようにします。