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

CentOS 5.XにJavaをインストールする

CentOS Java

SunのJDKダウンロードページからRPMを取得してインストールすればいいと思っていたが、どうやらそれはトーシローのやり方で、JPackageを使うものらしい。

上記のページに書いてある通りだが、RPMをビルドする環境を整えた上で、

$ yum install jpackage-utils

のようにjpackage-utilsをインストールする。

現時点でのJDKの最新バージョンはUpdate 16。SunのJDKダウンロードページからリンクをたどって、x86_64環境にインストールするならばjdk-6u16-linux-x64.bin、x86環境にインストールするならばjdk-6u16-linux-i586.binをダウンロードする。

$ cd ~/rpmbuild/SOURCES
$ curl -L -O "ダウンロードページにあるhttp://cds.sun.com/...FileName=/jdk-6u16-linux-x64.binのようなURL"

その上で、JPackageからjava-1.6.0-sunのSRPMを取得し再ビルドする。ただし、実際に取得できるのがJDK Update 11のSRPMなので、まずspecファイルを書き換える。

$ cd ~/rpmbuild/SRPMS
$ curl -L -O http://mirrors.dotsrc.org/jpackage/1.7/generic/SRPMS.non-free/java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm
$ cd ~/rpmbuild
$ rpm -Uvh SRPMS/java-1.6.0-sun-1.6.0.11-1jpp.nosrc.rpm

のようにして、SRPMを展開した後、

$ patch -p0 << _END
--- SPECS/java-1.6.0-sun.spec.orig      2008-12-31 18:37:18.000000000 +0900
+++ SPECS/java-1.6.0-sun.spec   2009-10-21 02:01:50.000000000 +0900
@@ -34,7 +34,7 @@
 %define priority        1600
 %define javaver         1.6.0
 %define cvsver          6
-%define buildver        11
+%define buildver        16

 # TODO: Think about using conditionals for version variants.
 %define cvsversion     %{cvsver}u%{buildver}
@@ -702,6 +702,7 @@
 %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/cacerts
 %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/java.policy
 %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/java.security
+%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/blacklist
 %ifnarch x86_64
 %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/javaws.policy
 %endif
_END

のようにSPEC/java-1.6.0-sun.specを変更。buildverを16にしてあるのと、%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/blacklistを追加してある。

あとは、

$ rpmbuild --define="_unpackaged_files_terminate_build 0" -bb SPECS/java-1.6.0-sun.spec

で再ビルド。CentOSのWikiには「Sunのサイトからアーキテクチャーにあわせたバイナリをダウンロードせよ」と書かれているのに対して、JPackageのインストールガイドには「x86_64版をインストールするな」と書いているのは、x86_64だと一部のRPMパッケージの作成を省略しているので、"_unpackaged_files_terminate_build 0"でRPMをビルドしないと失敗することも一因だと思われる。

再ビルドが完了すると、RPMS/{i586,x86_64}のようなパスにRPMが出来ているので、

$ sudo yum --nogpgcheck localinstall RPMS/x86_64/{java-1.6.0-sun,java-1.6.0-sun-devel}-1.6.0.16-1jpp.x86_64.rpm

でインストールする。

$ java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)

x86_64版の方は不安だけど、ちゃんと動いているっぽい。