id:torutk:20090301 の最後で少し言及したJPackage、これは少々理解が間違っていたようです。SunのJDK(RPMバイナリ)をLinuxにインストールした後、JPackage(RPM)をインストールすると、alternativesの仕組みに沿ってJDKの切り替えができるようになります。
Linux(CentOS 5)では、GCCのJava(JDK1.4.2相当)が標準でインストールされているため、/usr/binの下に、java, javacなどのコマンドが入っています。SunのJDKは通常/usr/java/jdk1.6.0_15/といったディレクトリに入るため、環境変数PATH次第でGCCのJavaとSunのJDKとどちらが実行されるか変わってしまうといううれしくない状況です。
そこで、alternativesという仕掛けで一つのプラットフォーム上に同一コマンドを使う複数の実装系を切り替えて使用する方法があります。しかし、SunのJDKは、alternativesにより切り替えに対応していないため、手作業で設定する必要がありました。このあたりは、id:torutk:20090628に書いています。
JPackageを使うと、SunのJDKに対して手作業で実施していたalternatives対応を行ってくれます。
ところが、JPackageのサイトで公開されているJPackageは、最新のJDKのリビジョンに対応していません。JDK1.6.0の場合、今日時点で提供されているJPacakgeはJDK-1.6.0_6までであり、最新のJDK-1.6.0_15には未対応です。これは先のid:torutk:20090301で言及しています。
しかし、JPackageをほんのちょっと修正するだけで、JDK-1.6.0_15などの未対応版にも対応できるようになります。以下の日記で修正する内容が紹介されていました。
http://d.hatena.ne.jp/ao3/20080802
ここを参考に、JDK-1.6.0_15対応を試してみました。
JPackageを修正し最新のSun JDK 1.6.0 Update15に対応する
まず、SunのJDK 1.6.0 Update15のLinux用RPMバイナリをインストールします。
次に、CentOS 5にjpackage-utils-1.7.3(以上)をインストールしておきます。(CentOS 5.3ではOS標準パッケージに含まれる)
JPackageのSRPMダウンロードサイト(以下URL)から、java-1.6.0-sun-compatの最新src.rpmを入手します。
ftp://jpackage.hmdc.harvard.edu/JPackage/1.7/generic/SRPMS.non-free/
このsrc.rpmの中身を取り出します。
$ rpm2cpio java-1.6.0-sun-compat-1.6.0.06-1jpp.src.rpm | cpio -i :
3つのファイルが含まれています。
- java-1.6.0-sun-compat-register-java-fonts.xsl
- java-1.6.0-sun-compat-unregister-java-fonts.xsl
- java-1.6.0-sun-compat.spec
1.と2.の2つのファイルを~/rpm/SOURCESに、3.のファイルを~/rpm/SPECSにコピーします。
3.のspecファイルを修正します。
@@ -1,7 +1,7 @@ %define origin sun -%define priority 1603 +%define priority 1615 %define javaver 1.6.0 -%define buildver 06 +%define buildver 15 %define upstreamrel fcs %dir %{_jvmdir}/%{jredir}/lib/security +%config(noreplace) %{_jvmdir}/%{jredir}/lib/security/blacklist %config(noreplace) %{_jvmdir}/%{jredir}/lib/security/cacerts %changelog +* Sat Aug 29 2009 Toru Takahashi <torutk@gmail.com> - 0:1.6.0.15-1jpp +- 1.6.0_15 +
rpmbuildを実行して、修正したjava-1.6.0-sun-compatパッケージを生成します。できた、java-1.6.0-sun-compat-1.6.0.15-1jpp.i586.rpm をインストール
$ sudo rpm -ivh ~/rpm/RPMS/i586/java-1.6.0-sun-compat-1.6.0.15-1jpp.i586.rpm :
すると、alternativesにjdk1.6.0が追加されます。
$ alternatives --config java 2 プログラムがあり 'java' を提供します。 選択 コマンド ----------------------------------------------- 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java *+ 2 /usr/lib/jvm/jre-1.6.0-sun/bin/java Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: