Linuxへ JDK6u18をインストールしてみました。

今日もgcjにやられたので、改めてRedhat系のLinuxへのSUN*1 JDKのインストール方法をメモしておきます。
最近のRed Hat Enterprise Linux Server(RHES)では、alternativesコマンドにより javaの実装を切り替えられるようになっているようです。デフォルトでは gcjになっています。
そこで、以下のコマンドで最新のJavaへ切り替えられるように頑張ってみた結果のメモです。環境によってはうまく行かない可能性があると思いますが、ご了承下さい。

 # /usr/sbin/alternatives --config java

JDKのインストール

まずは、http://java.sun.com/javase/downloads/widget/jdk6.jsp よりJavaの最新版rpmをダウンロードしてきて、rootで実行すればインストール完了です。JDK 6u18*2ですと、以下のディレクトリにインストールされます。

 /usr/java/jdk1.6.0_18/

JPackageのソースRPMをインストール

次に、id:ao3:20080802 を参考に以下のソースRPMをダウンロード&インストールします。

ftp://jpackage.hmdc.harvard.edu/JPackage/1.7/generic/SRPMS.non-free/java-1.6.0-sun-compat-1.6.0.06-1jpp.src.rpm

ソースrpmをインストールすると、以下のディレクトリ以下に入ります。

 /usr/src/redhat/

JPackageにパッチをあてる

インストールした SPECファイルを書き換えます。

$ cd /usr/src/redhat/SPECS/
$ sudo vi java-1.6.0-sun-compat.spec

書き換える内容は以下の通りです。

@@ -1,7 +1,7 @@
 %define origin          sun
-%define priority        1603
+%define priority        1618
 %define javaver         1.6.0
-%define buildver        06
+%define buildver        18
 %define upstreamrel     fcs
 
 %define name            java-%{javaver}-%{origin}-compat
@@ -346,7 +346,7 @@
 --slave %{_mandir}/man1/unpack200.1$ext    unpack200.1$ext             %{_mandir}/man1/unpack200-%{name}.1$ext \
 %if %{has_javaws}
 --slave %{_mandir}/man1/javaws.1$ext       javaws.1$ext                %{_mandir}/man1/javaws-%{name}.1$ext \
---slave %{_datadir}/javaws                 javaws                      %{_jvmdir}/%{jrelnk}/javaws
+--slave %{_bindir}/javaws                  javaws                      %{_jvmdir}/%{jrelnk}/javaws
 %endif
 
 update-alternatives --install %{_jvmdir}/jre-%{origin} jre_%{origin} %{_jvmdir}/%{jrelnk} %{priority} \
@@ -559,6 +559,7 @@
 %dir %{jvmjardir}
 %{_jvmdir}/%{jredir}/lib/fonts
 %dir %{_jvmdir}/%{jredir}/lib/security
+%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/blacklist
 %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/cacerts
 %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/java.policy
 %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/java.security
@@ -589,6 +590,9 @@
 
 
 %changelog
+* Tue Mar 16 2010 Horiuchi_H <horiuchi.g@gmail.com> - 0:1.6.0.18-1jpp
+- 1.6.0_18.
+
 * Sat Apr 26 2008 Ville Skytta <scop at jpackage.org> - 0:1.6.0.06-1jpp
 - 1.6.0_06.
 

書き換えが終わったら、rpmのパッケージを作成します。

 $ sudo rpmbuild -bb java-1.6.0-sun-compat.spec

作成したRPMをインストールして、Javaを切り替える。

出来上がった rpmをインストールします。

 $ cd /usr/src/redhat/RPM/i586/
 $ sudo rpm -ivh java-1.6.0-sun-compat-1.6.0.18-1jpp.i586.rpm

あとは、以下のコマンドを実行して javaコマンドを切り替えるだけです。

 $ sudo /usr/sbin/alternatives --config java

環境の違いなどで、rpmbuild辺りでエラーが出るかもしれませんが、自己責任でお願いします。。。
自分も、id:ao3:20080802 を参考に現行のバージョンで動くようにしただけですので。ただ、x86_64環境では specファイルの 29行目を以下のようにしないと rpmbuildでエラーになっていました。アドホックすぎるので正しいとは思えないですけどね。

%define has_javaws      1

*1:Oracleと書いた方がいいのかな?

*2:2010/3/16現在最新