0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

64bit Linuxに、32bit用のJava 1.4をインストールする

Posted at

はじめに

本稿の筆者は、一般企業でJava/.NET向けの自社プロダクトを開発しています。
Enterprise向けとなると、Java1.4への対応もいまだに求められる状況で、Java1.4での開発環境構築を
行わないと自社製品の開発ができません。

で、WindowsのJava1.4向けのインストーラは、代々受け継がれてきたものがある&32bit版でも、
Windows上ではちゃんと動いている(ように見える)のですが、Linux版ではそうはいかず、
いろいろな記事を見回ってみたものの、すべての情報がまとめられた環境はなかったので、
だれか困っている人の助けになればと思い執筆しました。(そんな人いないか・・・?)

TL;DR

  • OracleのJava Archive ダウンロードサイトから、バイナリを取得
  • ld-linux.so.2をインストール
  • バイナリを実行し、ライセンスを読み、agreeするとインストールが始まる
  • JAVA_HOMEとか設定して、あとはいつも通り使うだけ。

実行環境

試行錯誤で環境が汚れるのがいやなので、Dockerを使います。

  • OS: CentOS 7.7.1908 (Docker on CentOS on VirtualBox)
  • docker version: 19.03.5

失敗編

準備するもの

OracleのJava Archive ダウンロードサイトから、バイナリを取得します。

  • j2sdk-1_4_2_19-linux-i586.bin

インストール手順

  • バイナリを、任意のフォルダに展開します。
$ mkdir /usr/local/java/
$ unzip j2sdk-1_4_2_19-linux-i586.bin -d /usr/local/java/

※デフォルトのCentOSイメージの場合、unzipコマンドが入ってないと思うので、インストールしてください。

  • 定番のJAVA_HOMEを設定します
$ export JAVA_HOME=/usr/local/java/j2sdk1.4.2_19
# ついでにPATHも指定します
$ export PATH=${PATH}:${JAVA_HOME}/bin

さて、実行してみましょう!

$ java -version
$ bash: /usr/local/java/j2sdk1.4.2_19/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

あれあれ・・・?

エラーの原因(/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory)

32bit向けにビルドされたバイナリを実行するために必要な、glibcの互換ライブラリらしいです。
これがないと、64bit Linuxでは動かない。

glibcをインストールします

$ yum install -y ld-linux.so.2

さて、実行してみましょう!(2回目)

$ java -version
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

はいクソー

エラーの原因(java/lang/NoClassDefFoundError: java/lang/Object)

${JAVA_HOME$}/lib/rt.jarがない、もしくはその中にjava/lang/Object.classがないのが原因っぽいのですが、
なんとダウンロードしてきたバイナリの中に、rt.jarが含まれていません。。。

$ cd ${JAVA_HOME}/lib
$ ls -al | grep rt.jar -c
0

いろいろな情報を読み漁りましたが、いい感じの方法は見つかりませんでした。

成功編

$ mkdir /usr/local/java/
# /tmpにバイナリをおいてます
$ chmod +x /tmp/j2sdk-1_4_2_19-linux-i586.bin
$ cd /usr/local/java/
# バイナリを実行
$ /tmp/j2sdk-1_4_2_19-linux-i586.bin
 ・
 ・
 ・
 ライセンスが長々と続く
 ・
 ・
  Do you agree to the above license terms? [yes or no]
  # この文章が出たら、ライセンス規約に同意できる場合のみyesを入力してenterでインストールが始まる。
# JAVA_HOMEを設定
$ export JAVA_HOME=/usr/local/java/j2sdk1.4.2_19
# ついでにPATHも指定します
$ export PATH=${PATH}:${JAVA_HOME}/bin

無事、実行できるようになりました。

$ java -version
java version "1.4.2_19"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_19-b04)
Java HotSpot(TM) Client VM (build 1.4.2_19-b04, mixed mode)

念のため、ビルド~実行までを試してみましょう。

Hello.java
public class Hello {
        public static void main(String[] args) {
                System.out.println("Hello, World");
        }
}

親の顔より見たHello, World・・・

$ javac Hello.java
$ java Hello
Hello, World

なんとかなったんじゃないでしょうか

感想

最近のJavaは、バイナリをインストールしてきてPATHさえ通せば使える感じなので、こなれたやり方でやろうとしたら失敗した感じです。。。
バイナリインストールは楽でいいですね!

インストールした後実行ファイル(JAVA_HOME)を別環境にもっていくと、ld-linux.so.2さえあれば動くぞ・・・!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?