14 March 2009

(Linux) RHELのGNU JavaからSunのJavaに切り替える

CentOS 5.2 (RHEL 5.2相当)で、標準でインストールされているJRE(GNU Java)は、SunのJavaと完全互換性が無いので、動作しないアプリケーションがある。

一時的にSunのJREを用いるようにシステム設定を変更する方法。

まず、現在のjavaコマンドで起動するJREを知っておく


[root@localhost ~]# java --version
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20071124 (Red Hat 4.1.2-42)

Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@localhost ~]# which java
/usr/bin/java

また、rpmパッケージ管理システムでインストールされているGNU javaとSun javaのパッケージ名等の情報を得ておく。


[root@localhost ~]# rpm -qa | grep java
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

[root@localhost ~]# rpm -qa | grep jre
jre-1.6.0_12-fcs

[root@localhost ~]# rpm -q -l jre | grep \/bin\/java
/usr/java/jre1.6.0_12/bin/java ← 実行ファイルの場所
/usr/java/jre1.6.0_12/bin/java_vm
/usr/java/jre1.6.0_12/bin/javaws

Linuxのシンボル管理ソフトalternativesでの設定状況を確認する。


[root@localhost ~]# 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 です。

SunのJREを、alternativesコマンドで選択肢に加える処理をする。
(priority = 200 は、てきとうな値を入れておけばよい)


[root@localhost ~]# alternatives --install /usr/bin/java java /usr/java/jre1.6.0_12/bin/java 200

シンボリックリンクを、Sun JREに変更して、変更状況を確認する。


[root@localhost ~]# alternatives --config java

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

選択 コマンド
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java
2 /usr/java/jre1.6.0_12/bin/java ← こちらに切り替える

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

[root@localhost ~]# java -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)

先日、とある企業のシステム構築しているSEが、「そんなの /usr/bin/javaのシンボリックリンクを無理矢理書き換えていますよ…」と言っていたが、もうちょっとLinuxを勉強しろよと思った… (後を引き継いだSEは大変だろうね)