例えば、javaにはOpenJavaやSun Javaといった同じ機能を提供するが、提供元が異なるものがある。
両者を異なる場所にインストールして、パスの順序で制御してもいいんだけど、
javaみたいにCLASSPATH等のパス以外の環境変数がかかわってくるケースだと非常に煩わしい。
他にもsendmail と Postfixなんてもの代表的な切換えが面倒なソフトだ。
そのため、RedHat系にalternativesというコマンドがインストールされており、こういったケースに対応できるようになっている。
[root@hdp01 ~]# which java
/usr/bin/java
[root@hdp01 ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 7月 22 21:12 /usr/bin/java -> /etc/alternatives/java
[root@hdp01 ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 39 7月 22 21:12 /etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
こんな感じでjavaは/usr/bin配下にあるようにみえるが、実態はalternatvesのシンボリックリンクを経由した先にある。
この状態を調べるには、
[root@hdp01 ~]# alternatives --display java
java -ステータスは自動です。
リンクは現在 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java を指しています。
/usr/lib/jvm/jre-1.6.0-openjdk/bin/java - 優先項目 16000
スレーブ keytool: /usr/lib/jvm/jre-1.6.0-openjdk/bin/keytool
スレーブ orbd: /usr/lib/jvm/jre-1.6.0-openjdk/bin/orbd
スレーブ pack200: /usr/lib/jvm/jre-1.6.0-openjdk/bin/pack200
スレーブ rmid: /usr/lib/jvm/jre-1.6.0-openjdk/bin/rmid
スレーブ rmiregistry: /usr/lib/jvm/jre-1.6.0-openjdk/bin/rmiregistry
スレーブ servertool: /usr/lib/jvm/jre-1.6.0-openjdk/bin/servertool
スレーブ tnameserv: /usr/lib/jvm/jre-1.6.0-openjdk/bin/tnameserv
スレーブ unpack200: /usr/lib/jvm/jre-1.6.0-openjdk/bin/unpack200
スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.6.0-openjdk
スレーブ jre: /usr/lib/jvm/jre-1.6.0-openjdk
スレーブ java.1.gz: /usr/share/man/man1/java-java-1.6.0-openjdk.1.gz
スレーブ keytool.1.gz: /usr/share/man/man1/keytool-java-1.6.0-openjdk.1.gz
スレーブ orbd.1.gz: /usr/share/man/man1/orbd-java-1.6.0-openjdk.1.gz
スレーブ pack200.1.gz: /usr/share/man/man1/pack200-java-1.6.0-openjdk.1.gz
スレーブ rmid.1.gz: /usr/share/man/man1/rmid-java-1.6.0-openjdk.1.gz
スレーブ rmiregistry.1.gz: /usr/share/man/man1/rmiregistry-java-1.6.0-openjdk.1.gz
スレーブ servertool.1.gz: /usr/share/man/man1/servertool-java-1.6.0-openjdk.1.gz
スレーブ tnameserv.1.gz: /usr/share/man/man1/tnameserv-java-1.6.0-openjdk.1.gz
スレーブ unpack200.1.gz: /usr/share/man/man1/unpack200-java-1.6.0-openjdk.1.gz
/usr/lib/jvm/jre-1.4.2-gcj/bin/java - 優先項目 1420
スレーブ keytool: /usr/lib/jvm/jre-1.4.2-gcj/bin/keytool
スレーブ orbd: (null)
スレーブ pack200: (null)
スレーブ rmid: (null)
スレーブ rmiregistry: /usr/lib/jvm/jre-1.4.2-gcj/bin/rmiregistry
スレーブ servertool: (null)
スレーブ tnameserv: (null)
スレーブ unpack200: (null)
スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.4.2-gcj
スレーブ jre: /usr/lib/jvm/jre-1.4.2-gcj
スレーブ java.1.gz: (null)
スレーブ keytool.1.gz: (null)
スレーブ orbd.1.gz: (null)
スレーブ pack200.1.gz: (null)
スレーブ rmid.1.gz: (null)
スレーブ rmiregistry.1.gz: (null)
スレーブ servertool.1.gz: (null)
スレーブ tnameserv.1.gz: (null)
スレーブ unpack200.1.gz: (null)
現在の「最適」バージョンは /usr/lib/jvm/jre-1.6.0-openjdk/bin/java です。
こんな感じだ。
デフォルトではこんな感じになっている。
[root@hdp01 ~]# alternatives --config java
2 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.6.0-openjdk/bin/java
2 /usr/lib/jvm/jre-1.4.2-gcj/bin/java
open java と Gnu Javaがインストールされていて、Open Javaが選択されている。
メッセージに従い、番号を選択すると切り替えが行われる。
自分で追加もできるけど結構面倒くさい。
OS標準で、添付されるパッケージについてはほとんどこういった切り替えが可能。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿