torutkのブログ

ソフトウェア・エンジニアのブログ

Sun JDKをalternativesに登録するJPackage Project

id:torutk:20090301 の最後で少し言及したJPackage、これは少々理解が間違っていたようです。SunのJDKRPMバイナリ)をLinuxにインストールした後、JPackage(RPM)をインストールすると、alternativesの仕組みに沿ってJDKの切り替えができるようになります。

Linux(CentOS 5)では、GCCJava(JDK1.4.2相当)が標準でインストールされているため、/usr/binの下に、java, javacなどのコマンドが入っています。SunのJDKは通常/usr/java/jdk1.6.0_15/といったディレクトリに入るため、環境変数PATH次第でGCCJavaと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のLinuxRPMバイナリをインストールします。

次に、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/

  • java-1.6.0-sun-compat-1.6.0.06-1jpp.src.rpm

このsrc.rpmの中身を取り出します。

$ rpm2cpio java-1.6.0-sun-compat-1.6.0.06-1jpp.src.rpm | cpio -i
  :

3つのファイルが含まれています。

  1. java-1.6.0-sun-compat-register-java-fonts.xsl
  2. java-1.6.0-sun-compat-unregister-java-fonts.xsl
  3. 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 を押して現在の選択 [+] を保持するか、選択番号を入力します:

これで、デフォルトパス(/usr/bin/java)で実行されるjavaが、SunのJDKのものになりました。