読者です 読者をやめる 読者になる 読者になる

Linux における alternatives java の設定

CentOS 5.x をインストールする際に java パッケージをインストールすると、デフォルトの java インタプリタとして gcj がインストールされてしまいます。sun java をインストールしてもそのままでは使用できないため、対処方法を調べました。
自分メモとして以下に記録します。


alternativesとは:
同じ機能をもつ複数のプログラムを一つのシステムにインストールして、共存させることを可能とする仕組みとのこと。

使い方:

# alternatives
alternatives バージョン 1.3.30.1 - Copyright (C) 2001 Red Hat, Inc.
これは GNU 一般公有使用許諾書の規定の元で自由に再配布することができます。

使用法: alternatives --install <リンク> <名前> <パス> <優先度>
                    [--initscript <サービス>]

                    [--slave <リンク> <名前> <パス>]*
       alternatives --remove <名前> <パス>
       alternatives --auto <名前>
       alternatives --config <名前>
       alternatives --display <名前>
       alternatives --set <名前> <パス>


sun java をダウンロード、インストールした後の状態です。現在の状況を調べてみます。

# alternatives --display java
java - ステータスは手動です。
リンクは現在 /usr/lib/jvm/jre-1.4.2-gcj/bin/java を指しています。
/usr/lib/jvm/jre-1.4.2-gcj/bin/java - 優先項目 1420
 スレーブ jre: /usr/lib/jvm/jre-1.4.2-gcj
 スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.4.2-gcj
 スレーブ keytool: /usr/lib/jvm/jre-1.4.2-gcj/bin/keytool
 スレーブ rmiregistry: /usr/lib/jvm/jre-1.4.2-gcj/bin/rmiregistry
現在の「最適」バージョンは /usr/lib/jvm/jre-1.4.2-gcj/bin/java です。

続いて切替を試みてみます。

# alternatives --config java

1 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

ね?インストールしたのに、登録されていない。これは手動で登録が必要ということだと理解しました。

参考リンクを読むと、登録の際に --slave オプションを付けることで、関連プログラムを纏めて変更できるそうなので、javac 周りも一緒に登録します。

# alternatives --display javac
javac - ステータスは手動です。
リンクは現在 /usr/lib/jvm/java-1.4.2-gcj/bin/javac を指しています。
/usr/lib/jvm/java-1.4.2-gcj/bin/javac - 優先項目 1420
 スレーブ jar: /usr/lib/jvm/java-1.4.2-gcj/bin/jar
 スレーブ jarsigner: /usr/lib/jvm/java-1.4.2-gcj/bin/jarsigner
 スレーブ javadoc: /usr/lib/jvm/java-1.4.2-gcj/bin/javadoc
 スレーブ javah: /usr/lib/jvm/java-1.4.2-gcj/bin/javah
 スレーブ rmic: /usr/lib/jvm/java-1.4.2-gcj/bin/rmic
 スレーブ java_sdk_exports: /usr/lib/jvm-exports/java-1.4.2-gcj
 スレーブ java_sdk: /usr/lib/jvm/java-1.4.2-gcj
現在の「最適」バージョンは /usr/lib/jvm/java-1.4.2-gcj/bin/javac です。

また、沢山あるなぁ・・・w

とりあえず java だけ --install してみます。

# alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_18/bin/java 16018
(数値が大きいほど優先度が上がるので 16018 とバージョンを記載してみました。)

# alternatives --display java
java - ステータスは手動です。
リンクは現在 /usr/lib/jvm/jre-1.4.2-gcj/bin/java を指しています。
/usr/lib/jvm/jre-1.4.2-gcj/bin/java - 優先項目 1420
 スレーブ keytool: /usr/lib/jvm/jre-1.4.2-gcj/bin/keytool
 スレーブ rmiregistry: /usr/lib/jvm/jre-1.4.2-gcj/bin/rmiregistry
 スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.4.2-gcj
 スレーブ jre: /usr/lib/jvm/jre-1.4.2-gcj
/usr/java/jdk1.6.0_18/bin/java - 優先項目 16018
 スレーブ keytool: (null)
 スレーブ rmiregistry: (null)
 スレーブ jre_exports: (null)
 スレーブ jre: (null)
現在の「最適」バージョンは /usr/java/jdk1.6.0_18/bin/java です。

登録されましたね。最適バージョンとして推奨もされています。スレーブが null になってしまっているのが気になりますので、--slave でスレーブを登録します。この際に javac も追加してみました。

# alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_18/bin/java 16018 \
--slave /usr/bin/keytool keytool /usr/java/jdk1.6.0_18/bin/keytool \
--slave /usr/bin/rmiregistry rmiregistry /usr/java/jdk1.6.0_18/bin/rmiregistry \
--slave /usr/bin/javac javac /usr/java/jdk1.6.0_18/bin/javac
# alternatives --display java
java - ステータスは手動です。
リンクは現在 /usr/lib/jvm/jre-1.4.2-gcj/bin/java を指しています。
/usr/lib/jvm/jre-1.4.2-gcj/bin/java - 優先項目 1420
 スレーブ javac: (null)
 スレーブ keytool: /usr/lib/jvm/jre-1.4.2-gcj/bin/keytool
 スレーブ rmiregistry: /usr/lib/jvm/jre-1.4.2-gcj/bin/rmiregistry
 スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.4.2-gcj
 スレーブ jre: /usr/lib/jvm/jre-1.4.2-gcj
/usr/java/jdk1.6.0_18/bin/java - 優先項目 16018
 スレーブ javac: /usr/java/jdk1.6.0_18/bin/javac
 スレーブ keytool: /usr/java/jdk1.6.0_18/bin/keytool
 スレーブ rmiregistry: /usr/java/jdk1.6.0_18/bin/rmiregistry
 スレーブ jre_exports: (null)
 スレーブ jre: (null)
現在の「最適」バージョンは /usr/java/jdk1.6.0_18/bin/java です。

続いて javac も --install します。

# alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_18/bin/javac 16018 \
--slave /usr/bin/jar jar /usr/java/jdk1.6.0_18/bin/jar \
--slave /usr/bin/jarsigner jarsigner /usr/java/jdk1.6.0_18/bin/jarsigner \
--slave /usr/bin/javadoc javadoc /usr/java/jdk1.6.0_18/bin/javadoc \
--slave /usr/bin/javah javah /usr/java/jdk1.6.0_18/bin/javah \
--slave /usr/bin/rmic rmic /usr/java/jdk1.6.0_18/bin/rmic
# alternatives --display javac
javac - ステータスは手動です。
リンクは現在 /usr/lib/jvm/java-1.4.2-gcj/bin/javac を指しています。
/usr/lib/jvm/java-1.4.2-gcj/bin/javac - 優先項目 1420
 スレーブ jar: /usr/lib/jvm/java-1.4.2-gcj/bin/jar
 スレーブ jarsigner: /usr/lib/jvm/java-1.4.2-gcj/bin/jarsigner
 スレーブ javadoc: /usr/lib/jvm/java-1.4.2-gcj/bin/javadoc
 スレーブ javah: /usr/lib/jvm/java-1.4.2-gcj/bin/javah
 スレーブ rmic: /usr/lib/jvm/java-1.4.2-gcj/bin/rmic
 スレーブ java_sdk_exports: /usr/lib/jvm-exports/java-1.4.2-gcj
 スレーブ java_sdk: /usr/lib/jvm/java-1.4.2-gcj
/usr/java/jdk1.6.0_18/bin/javac - 優先項目 16018
 スレーブ jar: /usr/java/jdk1.6.0_18/bin/jar
 スレーブ jarsigner: /usr/java/jdk1.6.0_18/bin/jarsigner
 スレーブ javadoc: /usr/java/jdk1.6.0_18/bin/javadoc
 スレーブ javah: /usr/java/jdk1.6.0_18/bin/javah
 スレーブ rmic: /usr/java/jdk1.6.0_18/bin/rmic
 スレーブ java_sdk_exports: (null)
 スレーブ java_sdk: (null)
現在の「最適」バージョンは /usr/java/jdk1.6.0_18/bin/javac です。

java と javac が登録されてことが確認できましたので、最後に java と javac を config します。

# alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
 + 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
*  2           /usr/java/jdk1.6.0_18/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
[root@localhost ~]# alternatives --config javac

2 プログラムがあり 'javac' を提供します。

  選択       コマンド
-----------------------------------------------
   1           /usr/lib/jvm/java-1.4.2-gcj/bin/javac
*+ 2           /usr/java/jdk1.6.0_18/bin/javac

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

java の slave に javac を登録しておいたので、javac も一緒に変更された模様です。

以上です。ありがとうございます。

  • java のスレーブである jrejre_exports の登録方法、および javac のスレーブである java_sdkjava_sdk_exports の登録方法が分かりません。ご存知の方がいらっしゃったらコメントいただけると嬉しいです。

参考リンク