<!doctype linuxdoctr system>

<article>

<title>Java-Linux HOWTO
<author>Karl Asha, <tt/karl@blackdown.org/
<date>v1.6.0, 1 January 1997
<trans>西お郁彦, <tt/nishio@nexus.rim.or.jp/
<tdate>5 January 1997

<abstract>
この文書では Linux 用 JDK 1.0.2 を利用するためにはどのような設定およ
び外部のライブラリが必要であるかを説明しています。
</abstract>

<toc>

<sect>JDK 1.0.2 のインストール
<sect1>概要
<p>
Linux 用 Java Developer's Kit (以下 JDK ) を使うにあたり，あなたの 
linux のインストール方法によってはシステム全体にわたるいくつかの変更が
必要になります。
<p>
最近の Linux での開発では <ref id="ELF" name="ELF"> と呼ばれる新しいバ
イナリフォーマットが使われています。ELF は動的ローディングや共有ライブ
ラリの容易な作成を可能とします。Linux 用 JDK はこれらの特徴に依存して
おり，結果として，あなたのシステムは ELF バイナリのカーネルサポートお
よびいくつかのサポートライブラリが必要になります。
<p>
Linux の環境は常に変化しており，時には，これらの変更によってプログラム
が実行できなくなることもあります。この文書では Java アプリケーションの
実行・開発に理想的なシステム構成を示します。
</sect1>

<sect1>ELF に関する情報<label id = "ELF">
<p>
Linux 用 JDK は ELF 実行形式をサポートしたカーネルと <ref
id="libraries" name="ELF をサポートしたライブラリ">を必要とします。
<p>
ELF に関する詳細な情報は <url
url="http://www.blackdown.org/elf/elf.html">にある Daniel Barlow の 
HOWTO から得られます。
<p>
<url url="http://www.redhat.com" name="Redhat Software"> および
<url url = "http://www.cdrom.com/titles/os/slack96.htm" name ="Slackware"> 
は ELF 形式の Linux を配布しています。
</sect1>

<sect1>必要な ELF ライブラリ<label id = "libraries">
<p>
Linux 用 JDK の利用にはいくつかの ELF 共有ライブラリを含んだ3つのパッケー
ジが必要になります。
<descrip>
<tag/必要なパッケージ/
<p>
<itemize>
<item>The Standard C Library ("<bf>libc</bf>")
<item>The Linux Dynamic Loader Library ("<bf>ld.so</bf>")
<item>The XFree86 Libraries ("<bf>XFree86</bf>")
</itemize>
<p>
<tag/必要なパッケージのバージョン/
<itemize>
<item><bf>libc</bf> バージョン 5.2.18 以上
<item><bf>ld.so</bf> バージョン 1.7.14 以上 (1.8.2 を除く)
<item><bf>XFree86</bf> バージョン 3.1.2 以上
</itemize>
<p>
</descrip>
libc パッケージは <url
url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/"> にあります。パッケー
ジの名前は libc-5.<bf>x</bf>.<bf>y</bf>.bin.tar.gz のようになっていま
す。
<p>
ld.so パッケージは <url
url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/"> にあります。パッケー
ジ名は ld.so-1.<bf>x</bf>.<bf>y</bf>.tar.gz となっています。
<p>
XFree86 パッケージは <url
url="ftp://tsx-11.mit.edu/pub/linux/packages/X11/"> にあります。
XFree86 distribution に関する詳しい情報はそこにある README ファイルを
見てください。XFree86 はグラフィカルユーザインタフェースを持った
Java アプリケーションの実行に必要です。テキスト表示のアプリケーショ
ンの場合，このパッケージなしで JDK を使うこともできます
(<ref id = "getting" name = "Linux 用 JDK の入手">をみてください)。
<p>
これらのパッケージの技術的な話題，プログラミング情報，インストール方法
についてはこの文書の範囲外です。
</sect1>

<sect1>Linux 用 JDK の入手<label id = "getting">
<p>
Linux 用 Java Developer's Kit はミラーサイトにのみ置いてあります。
<p>
現時点でのミラーサイトのリストは<url
url="http://www.blackdown.org/java-linux/Mirrors.html"> にあります。こ
れらのサイトには標準アーカイブと RPM フォーマットの2つの形式のパッケージ
があります。
<p>
Linux 用 JDK は GUI 機能の大半に Motif ライブラリを使っています。Motif 
ライブラリは商用のため， JDK は 'static'と 'shared' の形式で配布されて
います。サードパーティから Motif ライブラリを購入しているならば 'shared' 
の方を使うことでその ELF Motif 共有ライブラリ(バージョン 2.0 のみ)を利
用できます。
<p>
<bf>注意:</bf> 'shared' 形式を使えば XFree86 をインストールせずにテキスト
表示のアプリケーションに対して JDK を利用することもできます。
<p>
Motif を持っておらず，GUI 表示のアプリケーションを動かしたい場合には
'static' バージョンの JDK を使う必要があります。
<p>
<descrip>
<tag/必要なファイルの選択/
<descrip>
<tag/標準アーカイブ形式/
標準アーカイブ形式のパッケージは2つに分かれています。
<bf>common</bf>アーカイブと，Motifの利用状況に応じて
<bf>shared</bf>か<bf>static</bf>のどちらかが必要となります。
<p>
<tag/RPM 形式/
RPM 形式のパッケージは1つにまとまったアーカイブです。
<bf>shared</bf> か <bf>static</bf> のどちらかを選択するだけです。
<p>
</descrip>
</p>
</descrip>
<p>
RPMパッケージは<bf>/usr/local/java/</bf>にインストールされます。RPMと
の一貫性を保つため，標準アーカイブの2つは<bf>/usr/local/</bf>に展開す
るのがよいでしょう。
</sect1>

<sect1>システム設定
<p>
<descrip>
<tag/CLASSPATH の設定/
CLASSPATH 環境変数は JDK がクラスを探す場所を示すのに使われます。設定
を誤ると JDK のツールは正常に実行できません。JDK を使って何か問題が生
じたら java, javac や appletviewer を実行してみる前に CLASSPATH 変数が
設定されていないことを確認してください。
<p>
</descrip>
<p>
<descrip>
<tag/デバイス・パーミション/
JDK を使う前に，/dev/zero デバイスが全ユーザから読み書き可能となって
いることを確認してください。読み書き可能にするためには，次のコマン
ドをスーパユーザで実行してください。
<p>
<bf>chmod 666 /dev/zero</bf>
<p>
</descrip>
<p>
<descrip>
<tag/スワップ領域/
JDK は実行されると広大なメモリ領域をあらかじめ割り当てようとします。JDK
に含まれるツールの実行にはスワップ領域に少なくとも20メガバイトの空きが
必要です。
<p>
</descrip>
</sect1>

<sect1>問題点とバグの報告
<p>Linux 用 JDK を使用していて，バグを発見したら
<htmlurl url="mailto:chapman@wilbursoft.com"
name="chapman@wilbursoft.com"> または <htmlurl
url="mailto:karl@blackdown.org" name="karl@blackdown.org"> までメール
を送ってください。
<p>
バグレポートと一緒に 'ldconfig -v' の出力とインストールしているカー
ネルのバージョンも送ってください。
<p>
現在までに分かっている問題点のリストは
<url url="http://www.blackdown.org/java-linux/bugs.html"> にあります。
</sect1>

<sect1>Further Reading
<p>
最新の HOWTO，メーリングリスト，サポートされた製品リストおよび，その
他の Java-Linux サービスは <url url =
"http://www.blackdown.org/java-linux.html" name = "The Blackdown
Organization"> を御覧ください。
<p>
Java の豊富な情報は <url url = "http://www.javasoft.com" name =
"JavaSoft"> から直接得られます。
</sect1>
</sect>

<sect>JDK-1.0.2 リリースノート
<p>
<sect1>XFree86 と libXt.so.6.0
<p>
いくつかの XFree86-3.1.2 ditribution に含まれる libXt.so.6.0 ではある 
Java アプリケーションで問題が起こることが報告されています。<url
url="http://www.blackdown.org/java-linux/downloads/libXt.tar.gz"> にあ
る libXt に置き換えてください。
</sect1>
<sect1>Motif Distributions
<p>
サードパーティからの Motif のうち <bf>Moteeth</bf> と <bf>UIUC
Motif</bf> では共有版の JDK を使ったとき正しく動きません。
<p>
<bf>Redhat Motif</bf>, <bf>Mootif</bf>, および <bf>Xinside Motif</bf> で
は正しく動作します。
</sect1>
<sect1>jdb
<p>
JDK 付属のデバッガ("<bf>jdb</bf>")の動作にはアクティブネットワークイン
タフェースが必要です。この問題はあなたのマシンのホスト名を
<bf>localhost</bf> に変更することで解決できますが，よりよい解決方法と
しては /etc/hosts に設定したあなたのマシン名とアドレスに対応した 
<bf>dummy device</bf> を使うことです。
</sect1>
</sect>
<sect>Linux カーネルでの Java バイナリ形式のサポート
<p>
<sect1>カーネルの設定
<p>
Linux の Java バイナリ形式サポートを利用するためには，カーネルを'Kernel
support for ELF binaries' に設定しておく必要があります。
<p>
<descrip>
<tag/カーネルに組み込まれた Java サポート/
<itemize>
<item>Java サポートをモジュールとしてコンパイルしない場合，Java アプリ
ケーションの場所は Linux システムコントロールインタフェースを使って指
定することができます。あるいは，<bf>java</bf> および 
<bf>appletviewer</bf> は <bf>/usr/bin</bf> に置かれている必要がありま
す。
<verb>
echo "/usr/local/java/bin/java" > /proc/sys/kernel/java-interpreter
echo "/usr/local/java/bin/appletviewer" > /proc/sys/kernel/java-appletviewer
</verb>
</itemize>
<p>
</descrip>
<descrip>
<tag/モジュール化された Java サポート/
<itemize>
<item>モジュールとして Java サポートをコンパイルした場合，モジュールは
<bf>java</bf> および <bf>appletviewer</bf> は <bf>/usr/bin</bf> にある
という前提で動作します。この問題に対処するためには 
<bf>/usr/src/linux/fs/binfmt_java.c</bf> を編集し，次の定義をあなたの
設定に合わせて修正します。
<verb>
              #define _PATH_JAVA      "/usr/bin/java"            
              #define _PATH_APPLET    "/usr/bin/appletviewer"    
</verb>
</itemize>
<p>
</descrip>
</sect1>
<sect1>Java バイナリサポートの利用
<p>
Java バイナリサポートの利用にはコンパイルされた Java コードに対して以
下の手順が必要です。
<p>
<itemize>
<item>java のソースを通常通りコンパイルする。
<item><bf>chmod</bf> コマンドでコンパイルされたクラスファイルの実行許
可ビットを立てる。
<item>他の実行形式と同様にしてそのクラスファイルを実行する。
</itemize>
<p>
</sect1>
<sect1>Further Reading
<p>
Linux カーネルでの Java バイナリ形式のサポートに関するリリースノートは
<url url = "file:///usr/src/linux/Documentation/java.txt"> にあります。
<p>
</sect1>
</sect>
<sect>Netscape 3.0 と java の設定方法
<p>
<sect1>環境の正しい設定
<p>
Netscape 3.0, java, linux の組合せでの根本的な問題は dl-malloc を使っ
てコンパイルされた標準 C ライブラリの使用にあります。ラッパスクリプト
と古い gnumalloc を使うことで java によってブラウザがクラッシュしない
ようにすることができます。
<p>
スクリプトでは単純な CLASSPATH も設定しています。CLASSPATH の設定によっ
ては Netscape を混乱させクラッシュすることもあり，古い Netscape のク
ラスライブラリが残っていてクラッシュすることもあるので注意してください。
<p>
<code>
#!/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. 
</code>
<p>
正しく動作させるためには，以下の手順に従ってください。
<itemize>
<item>Netscape をインストールする
<item>Netscape のアーカイブに含まれているファイル java_30 を 
/usr/local/netscape/java/classes/ にコピーする。
<item>gnumalloc.so を /lib へコピーする
<item>あなたの環境設定にあわせてスクリプトを編集する
</itemize>
<p>
gnumalloc.so は <url
url="http://www.blackdown.org/java-linux/downloads/gnumalloc.tar.gz"
name="http://www.blackdown.org/java-linux/downloads/gnumalloc.tar.gz"> 
にあります。Thanks to Doug Ridgway (ridgway@routh.UCSD.EDU) for this tip. 
<p>
最近 <em>libXext.so.6.0</em> よりも新しいバージョンの 
<em>libXext.so</em> を使うと Java アプレットで netscape がクラッシュす
ると報告されています。これは libXext.so.6.0 を <bf>/lib/509/</bf> のよ
うなディレクトリにコピーして適切なシンボリックリンクを張り，そのディレ
クトリをまず見にいくように LD_LIBRARY_PATH を設定すれば解決できます。
</sect1>
</sect>
<sect>Marimba 社の Tuner, Transmitter, Bongo
<p>
<sect1>インストール手順
<p>
Marimba 社の Tuner, Transmitter および Bongo の正式な Linux 版は <url
url = "http://www.blackdown.org/java-linux/Products.html"> にあります。
インストールは単にあなたの好きなディレクトリでこれらのアーカイブを展開
し， <bf>bin</bf> サブディレクトリにあるスクリプトを実行するだけです。
<p>
これらのアプリケーションの実行には JDK-1.0.2-pl2 以上が必要です。これ
は別に <url url = "http://www.blackdown.org/java-linux/Mirrors.cgi"> 
から配布されています。
</sect1>
<sect1>インストールの問題
<p>
Tuner を実行して次のようなエラーが起きたならば libXt.so.6.0 をアップデー
トする必要があります。置き換えるバージョンは <url url =
"http://www.blackdown.org/java-linux/downloads/libXt.tar.gz" name =
"http://www.blackdown.org/java-linux/downloads/libXt.tar.gz"> にありま
す。

<verb>
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)
</verb>
</sect1>
</sect>
</article>
