QuickVPS上のDebian EtchにJDK5.0をいれる

色々はまりまくったんですが、インストールする方法はみっけれたので備忘録までにメモ。
気をつけないといけないのは2つ。

  • OpenVZ上のLinuxJavaを動かす場合、Hostが贅沢な環境だとServer VMが動く
  • i386系列のマシンにSunのJavaをインストールする際、起動最適化を行おうとする


んで、QuickVPS上のDebian Etchだと上記2つのせいで apt-get でのインストールが一筋縄ではいきません。
というわけで激しく力技で回避します。
回避方法としては

  • Server VM を Client VM に置き換えちゃう
  • 起動時間のロスを甘んじて受け入れる = 起動最適化をすっ飛ばす


です。

まずは下準備をします。
JavaDoc周りをインストールしたい場合、インストールの途中で Sun からzipファイル落としてきて /tmp に入れろや!と言われる為、先に /tmp に置いちゃった方が楽です。
実際に言われる内容は

This package is an installer package, it does not actually contain the
J2SDK documentation.  You will need to go download one of the
archives:

    jdk-1_5_0-doc.zip jdk-1_5_0-doc-ja.zip

(choose the non-update version if this is the first installation).
Please visit

    http://java.sun.com/j2se/1.5.0/download.html

now and download.  The file should be owned by root.root and be copied
to /tmp.

なのでこれに従う感じですね。
ここまで準備が出来たら apt-get で一式入れます。

# apt-get install sun-java5-jdk sun-java5-demo sun-java5-source sun-java5-doc sun-java5-plugin sun-java5-fonts

すると

・・・
sun-java5-bin (1.5.0-10-3) を設定しています ...
Could not create the Java virtual machine.
dpkg: sun-java5-bin の処理中にエラーが発生しました (--configure):
・・・

という感じで怒られてインストールが失敗します。
そしたら力業の出番です。
まずは Server VM を Client VM に置き換えます。

# cd /usr/lib/jvm/java-1.5.0-sun/jre/lib/i386
# mv server server.original
# ln -s client server

これで Server VM が起動しようとしても実際に動くのは Client VM になります。
次に、apt-get のインストールで呼ばれる postinst ファイルを書き換えます。

vi /var/lib/dpkg/info/sun-java5-bin.postinst

して

# activate class data sharing
case i386 in i386|sparc)
    rm -f $basedir/jre/lib/i386/client/classes.jsa
    $basedir/bin/java -client -Xshare:dump > /dev/null
esac

という箇所があるので、それを

# activate class data sharing
case i386 in i386|sparc)
    rm -f $basedir/jre/lib/i386/client/classes.jsa
    #$basedir/bin/java -client -Xshare:dump > /dev/null (ここをコメントアウト
esac

に書き換えます。
そしたら後はインストールが途中で止まってる apt-get を再度動かしてやるだけです。

# apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
7 個のパッケージが完全にインストールまたは削除されていません。
0B のアーカイブを取得する必要があります。
展開後に追加で 0B のディスク容量が消費されます。
続行しますか [Y/n]? y
sun-java5-jre (1.5.0-10-3) を設定しています ...
sun-java5-bin (1.5.0-10-3) を設定しています ...
sun-java5-jdk (1.5.0-10-3) を設定しています ...
sun-java5-demo (1.5.0-10-3) を設定しています ...
sun-java5-fonts (1.5.0-10-3) を設定しています ...
sun-java5-plugin (1.5.0-10-3) を設定しています ...
sun-java5-source (1.5.0-10-3) を設定しています ...

きたー! (`・ω・´)
この状態で java を実行すると

# java -version
java version "1.5.0_10"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_10-b03)
Java HotSpot(TM) Client VM (build 1.5.0_10-b03, mixed mode)

となります、やっと動いたー!