Java-Linux HOWTO Karl Asha, karl@blackdown.org v1.6.0, 1 January 1997 西お郁彦, nishio@nexus.rim.or.jp 5 January 1997 この文書では Linux 用 JDK 1.0.2 を利用するためにはどのような設定および 外部のライブラリが必要であるかを説明しています。 ______________________________________________________________________ 目次 1. JDK 1.0.2 のインストール 1.1 概要 1.2 ELF に関する情報 1.3 必要な ELF ライブラリ 1.4 Linux 用 JDK の入手 1.5 システム設定 1.6 問題点とバグの報告 1.7 Further Reading 2. JDK-1.0.2 リリースノート 2.1 XFree86 と libXt.so.6.0 2.2 Motif Distributions 2.3 jdb 3. Linux カーネルでの Java バイナリ形式のサポート 3.1 カーネルの設定 3.2 Java バイナリサポートの利用 3.3 Further Reading 4. Netscape 3.0 と java の設定方法 4.1 環境の正しい設定 5. Marimba 社の Tuner, Transmitter, Bongo 5.1 インストール手順 5.2 インストールの問題 ______________________________________________________________________ 1. JDK 1.0.2 のインストール 1.1. 概要 Linux 用 Java Developer's Kit (以下 JDK ) を使うにあたり,あなたの linux のインストール方法によってはシステム全体にわたるいくつかの変更が 必要になります。 最近の Linux での開発では ``ELF'' と呼ばれる新しいバイナリフォーマット が使われています。ELF は動的ローディングや共有ライブラリの容易な作成を 可能とします。Linux 用 JDK はこれらの特徴に依存しており,結果として, あなたのシステムは ELF バイナリのカーネルサポートおよびいくつかのサポ ートライブラリが必要になります。 Linux の環境は常に変化しており,時には,これらの変更によってプログラム が実行できなくなることもあります。この文書では Java アプリケーションの 実行・開発に理想的なシステム構成を示します。 1.2. ELF に関する情報 Linux 用 JDK は ELF 実行形式をサポートしたカーネルと ``ELF をサポート したライブラリ''を必要とします。 ELF に関する詳細な情報は にあ る Daniel Barlow の HOWTO から得られます。 Redhat Software および Slackware は ELF 形式の Linux を配 布しています。 1.3. 必要な ELF ライブラリ Linux 用 JDK の利用にはいくつかの ELF 共有ライブラリを含んだ3つのパッ ケージが必要になります。 必要なパッケージ o The Standard C Library ("libc") o The Linux Dynamic Loader Library ("ld.so") o The XFree86 Libraries ("XFree86") 必要なパッケージのバージョン o libc バージョン 5.2.18 以上 o ld.so バージョン 1.7.14 以上 (1.8.2 を除く) o XFree86 バージョン 3.1.2 以上 libc パッケージは にあ ります。パッケージの名前は libc-5.x.y.bin.tar.gz のようになっていま す。 ld.so パッケージは に あります。パッケージ名は ld.so-1.x.y.tar.gz となっています。 XFree86 パッケージは にあります。 XFree86 distribution に関する詳しい情報はそこにある README ファイルを見てください。XFree86 はグラフィカルユーザインタフェ ースを持った Java アプリケーションの実行に必要です。テキスト表示のアプ リケーションの場合,このパッケージなしで JDK を使うこともできます (``Linux 用 JDK の入手''をみてください)。 これらのパッケージの技術的な話題,プログラミング情報,インストール方法 についてはこの文書の範囲外です。 1.4. Linux 用 JDK の入手 Linux 用 Java Developer's Kit はミラーサイトにのみ置いてあります。 現時点でのミラーサイトのリストは にあります。これらのサイトには標準アーカイブと RPM フォーマットの2つの形式のパッケージがあります。 Linux 用 JDK は GUI 機能の大半に Motif ライブラリを使っています。Motif ライブラリは商用のため, JDK は 'static'と 'shared' の形式で配布されて います。サードパーティから Motif ライブラリを購入しているならば 'shared' の方を使うことでその ELF Motif 共有ライブラリ(バージョン 2.0 のみ)を利用できます。 注意: 'shared' 形式を使えば XFree86 をインストールせずにテキスト表示の アプリケーションに対して JDK を利用することもできます。 Motif を持っておらず,GUI 表示のアプリケーションを動かしたい場合には 必要なファイルの選択 標準アーカイブ形式 標準アーカイブ形式のパッケージは2つに分かれています。 commonアーカイブと,Motifの利用状況に応じて sharedかstaticの どちらかが必要となります。 RPM 形式 RPM 形式のパッケージは1つにまとまったアーカイブです。 shared か static のどちらかを選択するだけです。 RPMパッケージは/usr/local/java/にインストールされます。RPMとの一貫性を 保つため,標準アーカイブの2つは/usr/local/に展開するのがよいでしょう。 1.5. システム設定 CLASSPATH の設定 CLASSPATH 環境変数は JDK がクラスを探す場所を示すのに使われま す。設定を誤ると JDK のツールは正常に実行できません。JDK を使っ て何か問題が生じたら java, javac や appletviewer を実行してみる 前に CLASSPATH 変数が設定されていないことを確認してください。 デバイス・パーミション JDK を使う前に,/dev/zero デバイスが全ユーザから読み書き可能と なっていることを確認してください。読み書き可能にするためには,次 のコマンドをスーパユーザで実行してください。 chmod 666 /dev/zero スワップ領域 JDK は実行されると広大なメモリ領域をあらかじめ割り当てようとしま す。JDK に含まれるツールの実行にはスワップ領域に少なくとも20メガ バイトの空きが必要です。 1.6. 問題点とバグの報告 Linux 用 JDK を使用していて,バグを発見したら chapman@wilbursoft.com または karl@blackdown.org までメールを送ってください。 バグレポートと一緒に 'ldconfig -v' の出力とインストールしているカーネ ルのバージョンも送ってください。 現在までに分かっている問題点のリストは にあります。 1.7. Further Reading 最新の HOWTO,メーリングリスト,サポートされた製品リストおよび,その他 の Java-Linux サービスは The Blackdown Organization を御覧ください。 Java の豊富な情報は JavaSoft から直接得られ ます。 2. JDK-1.0.2 リリースノート 2.1. XFree86 と libXt.so.6.0 いくつかの XFree86-3.1.2 ditribution に含まれる libXt.so.6.0 ではある Java アプリケーションで問題が起こることが報告されています。 にある libXt に置き換えてください。 2.2. Motif Distributions サードパーティからの Motif のうち Moteeth と UIUC Motif では共有版の JDK を使ったとき正しく動きません。 Redhat Motif, Mootif, および Xinside Motif では正しく動作します。 2.3. jdb JDK 付属のデバッガ("jdb")の動作にはアクティブネットワークインタフェー スが必要です。この問題はあなたのマシンのホスト名を localhost に変更す ることで解決できますが,よりよい解決方法としては /etc/hosts に設定した あなたのマシン名とアドレスに対応した dummy device を使うことです。 3. Linux カーネルでの Java バイナリ形式のサポート 3.1. カーネルの設定 Linux の Java バイナリ形式サポートを利用するためには,カーネル を'Kernel support for ELF binaries' に設定しておく必要があります。 カーネルに組み込まれた Java サポート o Java サポートをモジュールとしてコンパイルしない場合,Java アプリ ケーションの場所は Linux システムコントロールインタフェースを 使って指定することができます。あるいは,java および appletviewer は /usr/bin に置かれている必要があります。 echo "/usr/local/java/bin/java" > /proc/sys/kernel/java-interpreter echo "/usr/local/java/bin/appletviewer" > /proc/sys/kernel/java-appletviewer モジュール化された Java サポート o モジュールとして Java サポートをコンパイルした場合,モジュールは java および appletviewer は /usr/bin にあるという前提で動作しま す。この問題に対処するためには /usr/src/linux/fs/binfmt_java.c を編集し,次の定義をあなたの設定に合わせて修正します。 #define _PATH_JAVA "/usr/bin/java" #define _PATH_APPLET "/usr/bin/appletviewer" 3.2. Java バイナリサポートの利用 Java バイナリサポートの利用にはコンパイルされた Java コードに対して以 下の手順が必要です。 o java のソースを通常通りコンパイルする。 o chmod コマンドでコンパイルされたクラスファイルの実行許可ビットを立 てる。 o 他の実行形式と同様にしてそのクラスファイルを実行する。 3.3. Further Reading Linux カーネルでの Java バイナリ形式のサポートに関するリリースノートは にあります。 4. Netscape 3.0 と java の設定方法 4.1. 環境の正しい設定 Netscape 3.0, java, linux の組合せでの根本的な問題は dl-malloc を使っ てコンパイルされた標準 C ライブラリの使用にあります。ラッパスクリプト と古い gnumalloc を使うことで java によってブラウザがクラッシュしない ようにすることができます。 スクリプトでは単純な CLASSPATH も設定しています。CLASSPATH の設定に よっては Netscape を混乱させクラッシュすることもあり,古い Netscape の クラスライブラリが残っていてクラッシュすることもあるので注意してくださ い。 ______________________________________________________________________ #!/bin/sh export CLASSPATH="/usr/local/netscape/java/classes/java_30:." export LD_PRELOAD="/lib/gnumalloc.so" /opt/netscape/bin/netscape $* # NOTE! This must be the path to the real netscape executable. ______________________________________________________________________ 正しく動作させるためには,以下の手順に従ってください。 o Netscape をインストールする o Netscape のアーカイブに含まれているファイル java_30 を /usr/local/netscape/java/classes/ にコピーする。 o gnumalloc.so を /lib へコピーする o あなたの環境設定にあわせてスクリプトを編集する gnumalloc.so は http://www.blackdown.org/java- linux/downloads/gnumalloc.tar.gz にあります。Thanks to Doug Ridgway (ridgway@routh.UCSD.EDU) for this tip. 最近 libXext.so.6.0 よりも新しいバージョンの libXext.so を使うと Java アプレットで netscape がクラッシュすると報告されています。これは libXext.so.6.0 を /lib/509/ のようなディレクトリにコピーして適切なシン ボリックリンクを張り,そのディレクトリをまず見にいくように LD_LIBRARY_PATH を設定すれば解決できます。 5. Marimba 社の Tuner, Transmitter, Bongo 5.1. インストール手順 Marimba 社の Tuner, Transmitter および Bongo の正式な Linux 版は にあります。インス トールは単にあなたの好きなディレクトリでこれらのアーカイブを展開し, bin サブディレクトリにあるスクリプトを実行するだけです。 これらのアプリケーションの実行には JDK-1.0.2-pl2 以上が必要です。これ は別に から配布され ています。 5.2. インストールの問題 Tuner を実行して次のようなエラーが起きたならば libXt.so.6.0 をアップデ ートする必要があります。置き換えるバージョンは http://www.blackdown.org/java-linux/downloads/libXt.tar.gz にありま す。 SIGSEGV 11* segmentation violation Full thread dump: "AWT-Motif" (TID:0x404b8c68, sys_thread_t:0x41=5 java.lang.Thread.run(Thread.java) "AWT-Input" (TID:0x404b8c40, sys_thread_t:0x412c3f2c) prio=5 "Finalizer thread" (TID:0x404b8368, sys_thread_t:0x4129ff2c) prio=1 "Idle thread" (TID:0x404b8320, sys_thread_t:0x4127df2c) prio=0 "clock handler" (TID:0x404b81f8, sys_thread_t:0x4125bf2c) prio=11 "main" (TID:0x404b80a0, sys_thread_t:0x817dd30) prio=5 *current thread* sun.awt.motif.MComponentPeer.dispose(MComponentPeer.java:175) sun.awt.motif.MFramePeer.dispose(MFramePeer.java:82)