--------------------------------------------------------------
Java Linux Mini HOW-TO     by Daniel Marks     Sat 2 Dec 1995
                           (dmarks@ais.net)
日本語訳                   by 藤原輝嘉         Sun 17 Dec 1995
                           (fujiwara@cim.pe.u-tokyo.ac.jp)
--------------------------------------------------------------
原著者である Daniel Marks 氏は日本語で書かれたメッセージ及び質
問には返答できないので注意して下さい。
また、誤訳などは訳者の藤原までメールで知らせて下さい。
--------------------------------------------------------------

このドキュメント及び Java に貢献している人々に感謝します。

Arthur van Hoff 氏 (avh@eng.sun.com)
     - Java の実装と質問への辛抱強い回答に。
Tim Lindholm 氏 (lindholm@eng.sun.com)
     - Java の実装と Linux への移植に際しての非常に貴重な情報
     の提供に。
Sun Java チームのみなさん (java@java.sun.com)
     - 彼らの素晴らしい仕事に。
Linus Torvalds 氏 (Linus.Torvalds@cs.helsinki.fi)
     - Linux の作者。Linux カーネルをメンテナンスしている。
H. J. Lu 氏 (hjl@nynexst.com)
     - libc and ELF サポートの設計者。
David Engel 氏 (david@ods.com)
     - ld.so (ダイナミックリンクエディタ)の作者。
Randy Chapman 氏 (chapman@u.washington.edu)
     - Java の Linux への移植とこの文書の校正。
Daniel Barlow 氏 (daniel.barlow@sjc.ox.ac.uk)
     - ELF HOWTO の著者。
Karl Asha 氏 (karl@blackdown.org)
     - Java α版 API の net, awt のサポートと WWW サイトやメー
     リングリストなどの提供、そして Java-Linux プロジェクトに。

そして、何か動かないものがある時にははっきりと知らせてくれた 
Java-Linux メーリングリストの人々に感謝します。

--------------------------------------------------------------
目次

I.   Java とは何か?
     a.  Java とは何か?
     b.  Java-Linux project とは何か?
     c.  Linux で現在 Java を利用できる ソフトウェアは?
     d.  Java API のα版とβ版の相違点は?

II.  Java の入手方法
     a. Linux で Java を利用するのに必要なものは?
     b. LessTif で Java-Linux は利用できるか?
     c. Linux 版 Java 開発キットの入手
     d. Linux 版 Netscape 2.0b3 の入手

III. Java のインストール
     a. Linux 版 β API JDK(Java Development Kit) のインストール
        インストールについての Q&A
     b. Linux 版 Netscape 2.0b3 のインストール
        インストールについての Q&A

IV. Java-Linux における現在の制限及びバグ

V. Java-Linux の移植はどこで行われているか

I.   Java とは何か?

     a.  Java とは何か?

  Java は Sun MicroSystems 社からリリースされた新しいコンピュー
タ言語です。Java の見ためは C++ に似ています。Java は機種及び
プラットホームに依存しません。---Java を実行可能なシステムなら
ば同じ Java の"バイナリ" が実行できます。Java には組み込みのセ
キュリティ機能があります。---信頼できない人の書いたプログラム
を実行することによってデータの完全性を損なわれてしまうことはあ
りません。Java はコンパイラ言語のスピードを持ちつつ、プログラ
マを C言語 や C++言語における動的メモリアロケーションやポイン
タの取扱いによる負担から解放できるという特徴を持ちます。
組み込みガベージコレクションを持つこととポインタを使わないこと
により、Jave プログラムでは dangling pointer やメモリリークと
いう問題が起こりません。Java プログラムは機械語ではなく、バイ
トコードに変換されます。このバイトコードは Java 仮想マシンによっ
てほぼ機械語と同じくらい高速に実行することができます。

  Java はもともとは interactive TV に用いるために開発されたも
のですが、最近は WWW のための "アプレット(Applet)" を記述する
ために用いられることで有名になりました。アプレットとは WWW ブ
ラウザ内で実行される Java のプログラムで、動かない HTML 文書に
追加機能を与えることができます。点滅する文字、スクロールする文
字列、動く3次元物体や対話的なゲームなどが今までに Java で書か
れています。Java はどのようなアーキテクチャに対しても共通のグ
ラフィックス、ネットワーク、ファイルをサポートするので、Java 
は一般のコンパイラ言語と同じことができます。組み込みセキュリティ
機能はアプレットがホストコンピュータに害を与えないことを保証し
ます。

より詳しい情報を得るためには以下の URL を参照して下さい。
     http://java.sun.com      - Java, プログラミング言語のリファ
                                レンスなどについての情報
     http://www.gamelan.com   - Java アプレットの例
     http://www.blackdown.org - Sun のJava のページのミラーおよび 
                                Java-Linux プロジェクトホームページ

訳注:
日本国内では以下の URL などが参照できます。
     http://www.glocom.ac.jp/mirror/java.sun.com - Sun のページのミラー
     http://www.sun.co.jp/smi.jp/tech/java/      -日本 Sun のページ
     http://www.webcity.co.jp/info/andoh/java/javafaq.html
                                                 - HotJava/Java 日本語 FAQ

     b.  Java-Linux project とは何か?

  Java-Linux プロジェクトの目的は Sunによる Java 開発キット(β
版API)を Linux に移植することです。現在、移植したものの初期バー
ジョンが利用できます。HotJava と呼ばれる Javaベースのブラウザ
は α版 API に対応したものしか Sun よりリリースされていません。
β版 API に対応した HotJava がリリースされれば Java-Linux プロ
ジェクトの人達によって移植されるでしょう。

Java-Linux メーリングリストを購読するためには

subscribe java-linux

という内容のメールを

java-linux-request@java.blackdown.org

まで送って下さい。

訳注: 原文では majordomo@substance.blackdown.org となっていま
すが、著者の Daniel Marks 氏からアドレスの変更の連絡を受けまし
たので新しいものに修正してあります。

  また、http://homer.ncm.com には Linux 関係の主だったメーリン
グリストのほとんど (linux-gcc, java-linux を含む) のアーカイブ
へのリンクがあります。使われないメールアドレスによる負担を減ら
すため、メールを読むだけが目的ならばこちらのアーカイブを利用し
て下さい。

     c.  Linux で現在 Java を利用できる ソフトウェアは?

  Linux 上で Java を実行可能なソフトウェアは現在2つあります。
一つは、Sun の Java 開発キットに含まれる appletviewer で、アプ
レットを(WWWブラウザ上でなく)単独で実行するために使われます。
もう一つは、Netscape 2.0b3(有効期限が1996年1月31日までのβ版)
で、ブラウザ内でアプレットを実行することができます。

     d.  Java API のα版とβ版の相違点は?

  Java の API はコンピュータのリソース(グラフィックス、サウン
ド、ネットワークなど)へのインタフェースとなるクラスの集合です。
β版API の初期バージョンにおいて Javaのクラスには大幅な変更が
加えられたため、β版API にはα版API との互換性はありません。
Java-Linux プロジェクトによってリリースされた最新の JDK(Java
Development Kit) はβ版 API 対応ですが、Sun によってリリースさ
れている最新の HotJava はα版 API 対応のものです。しかし、
Netscape 2.0b3 はβ版 API に対応しています。これから Java を始
める人にはβ版 API から始めることを勧めます。最新の Linux JDK 
と Netscape 2.0b3 を入手しましょう。β版 API 対応の HotJava は
完成するのを待ちましょう。α版API対応の HotJava が使われている
唯一の理由はα版 API で書かれた有名なアプレットを見ることだけ
です。

II.  Java の入手方法

     a. Linux で Java を利用するのに必要なものは?

     Linux 1.2.x (x >= 1)
          もし、1.2.x のカーネルを使っているなら、JDK のインス
	  トールの項のパッチを見てください。
     または
     Linux 1.3.x (x >= 40) 
        Intel アーキテクチャのみ対応(DEC Alpa への移植ももうす
	ぐです。以下を見てください)

     ELF ld.so and shared libraries (a MUST)

        libc.so.5.2.x  (x >= 16)
            you can get libc.so.5.2.16 (the last public release
            of libc) from ftp://tsx-11.mit.edu/pub/linux/packages/GCC
            NOTE: libc.so.5.0.9 is not supported with the JDK port
            anymore, and won't work.

     ELF 版 ld.so とシェアードライブラリ(必須)
        libc.so.5.2.x  (x >= 16)
            ftp://tsx-11.mit.edu/pub/linux/packages/GCC より 
	    libc.so.5.2.16 (最新の公開版)が入手できます。
            注意: libc.so.5.0.9 はサポートされていません。おそ
	    らく動かないでしょう。
        ld-linux.so.1.7.x  (x = 9) または (x >= 11)

     メモリ 8 MB(X を使うため) - 16 MB 以上が強く求められます

     XFree 3.1.1 or 3.1.2
     8 bpp (256色モード) の X server 
         (16 bpp や 32 bpp は含みません。後に説明があります。)

     Daniel Barlow 氏の書かれた ELF HOWTO は a.out から ELF ヘ
     アップグレードするための非常に良い解説文です。

     b. LessTif で Java-Linux は利用できるか?
 
使えません。
この文書を書いている時点では LessTif は Java-Linux を動かすた
めには全然機能が不足しています。しかし、やがてきっと動くように
なるでしょう。スタティックリンク版の JDK を入手する場合は、ダ
ウンロードに時間はかかりますが、Motif のシェアードライブラリは
必要ありません。

     c. Linux 版 Java 開発キットの入手

Linux 版 JDK は以下のサイトで入手して下さい。
     ELF 版の Motif 2.0 シェアードライブラリを持っている場合:
         ftp://www.blackdown.org/pub/Java/linux.jdk.pre2.tar.gz
     それ以外の場合:
         ftp://www.blackdown.org/pub/Java/linux.jdk.pre2.static-motif.tar.gz

     先程説明したバージョンの ld.so を持っていない場合にはさら
     に ftp.ods.com などで必要なバージョンのものを入手して下さ
     い。

     注意: 新しいバージョンの libc や ld.so をインストールする
     時にパッケージの指示にきちんと従わなかった場合、あなたの 
     Linux マシンは操作できなくなってしまうかも知れません。
     ブートフロッピーディスクを用意するのを忘れないようにしま
     しょう。

     d. Linux 版 Netscape 2.0b3 の入手

Linux 版Netscape 2.0b3 は以下の場所で入手できます。

     ftp://ftp7.netscape.com/2.0b3/unix/
         netscape-v20b3-export.i486-unknown-linux.tar.Z

     全ての Netscape の ftp サイト(ftp.netscape.com,
     ftp2.netscape.com など)に Netscape 2.0b3 はあります。また、
     ミラーサイトも多数あります。

     訳注: 日本では以下の場所から入手するのが良いでしょう。
           (Netscape の公式ミラーサイトです。)
     ftp://ftp.leo.chubu.ac.jp/pub/WWW/netscape/2.0beta/beta3/unix/
         netscape-v20b3-export.i486-unknown-linux.tar.gz
     ftp://sunsite.sut.ac.jp/pub/archives/WWW/netscape2.0b3/unix/
         netscape-v20b3-export.i486-unknown-linux.tar.gz
     ftp://ftp.riken.go.jp/pub/WWW/netscape/2.0b3/unix/
         netscape-v20b3-export.i486-unknown-linux.tar.gz
     ftp://ftp.pu-toyama.ac.jp/pub/netscape/2.0beta/beta3/unix/
         netscape-v20b3-export.i486-unknown-linux.tar.gz
     ftp://ftp.nc.nihon-u.ac.jp/pub/network/WWW/client/netscape/2.0beta/beta3/unix
         netscape-v20b3-export.i486-unknown-linux.tar.gz

III. Java のインストール

     a. Linux 版 β API JDK(Java Development Kit) のインストール

  この説明では JDK は /usr/local/java にインストールするものと
します。(これが FSSTND に従うものかどうかはよくわかりません。)
  もし、他のディレクトリにインストールするのなら 
/usr/local/java の部分を変更してください。また、このパッケージ
をインストールするためにはルートでなければなりません。

ステップA: アーカイブの展開。linux.jdk.pre2.tar.gz か 
linux.jdk.pre2.static-motif.tar.gz のうち適当な方を /usr/local 
で展開します。 Linux JDK は 'java ' ディレクトリに展開されるの
で、JDK のディレクトリは /usr/local/java になります。

パッケージを展開するコマンドは以下のようになります:

cd /usr/local
tar xvvvfz linux.jdk.pre2.tar.gz
           (or linux.jdk.pre2.static-motif.tar.gz)

ステップB: ファイル /usr/local/java/bin/appletviewer を編集します:

1.  先頭の行を "#!/bin/sh" にします。

2.
    #
    #  Determine JAVA_HOME
    #
    の行の後に
    JAVA_HOME="/usr/local/java"
    を追加します。

次に /usr/local/java/bin/.java_wrapper を修正します。

1. 先頭の行を "#!/bin/sh" にします。

2.   次の2つの行の先頭に "#" を挿入します。

     PRG=`whence $0` >/dev/null 2>&1
     J_HOME=`dirname $PRG`/..

     それから、 J_HOME〜 の行の後に
     J_HOME="/usr/local/java"
     という行を追加します。

これで全てのパスが変更されました。
(元のものは Solaris では動作するが Linux では動作しません。)

ステップ E: 準備はできました。appletviewer のテストをするため
以下のように入力して下さい:

1.   cd /usr/local/java/demo/Blink
2.   /usr/local/java/bin/appletviewer example1.html

インストールについての Q&A:

Q: appletviewer や javac を実行すると "Segmentation Violation" 
   と出力されます。

A: 古いバージョンの ld.so を使っていると思われます。ld.so を既
   に説明したバージョンにバージョンアップして下さい。
   (今のところ version 1.7.11 が良いでしょう)

Q: JDK が "libXm.so.2" ライブラリが見つけられないと文句を言います。

A: スタティック版の Motif JDK をインストールするべきところに 
   シェアード版のものをインストールしていると思われます。
   スタティック版のJDK をインストールして下さい。

Q: JDK がシンボル "__libc_malloc" が見つけられないと文句を言います。

A: Java-Linux JDK ではサポートされていない libc.so.5.0.9 を使っ
   ていると思われます。libc.so.5.2.16 にバージョンアップして下
   さい。これは既に説明していますので、そちらを参照してください。

Q: "/usr/local/java/bin/i586/java" が見つからないと言われます。

A: Step C で必要とされるリンクを張っていないと思われます。JDK 
   は Pentium でコンパイルされているので、あなたのマシンが 
   Pentium でない場合にはバイナリにパスを通すためにリンクを張
   る必要があるのです。

   あるいは、Step Bで説明した2つのスクリプトの修正をきちんと行っ
   ていないという可能性もあります。appletviewer スクリプトでは 
   JAVA_HOME="/usr/local/java" 、.java_wrapper スクリプトでは 
   J_HOME="/usr/local/java" を指定して下さい。

Q:  ライブラリ(libawt.so, libagent.so, libdatagram.so, libjpeg.so,
     libmmedia.so のどれか) が見つからないと言われます。

A: これらのファイルが /usr/local/java/lib/i586 に無いか、ある
   いは /usr/local/java/lib/`arch` と /usr/local/java/lib/i586 
   の間にきちんとシンボリックリンクを張らなかったからです。
   2つのディレクトリ間にシンボリックリンクを張って下さい。
   ('arch' の部分はコマンド "arch" の結果で置き換えて下さい)
     
   また、α版JDK がインストールされている場合には、古いライブ
   ラリがパスに入っているということも考えられます。
   /etc/ld.so.conf から古いパスを削除して、/sbin/ldconfig を実
   行して下さい。

   もし、JDK がライブラリ "libXm.so.2" を見つけられない場合に
   は Motif ライブラリをスタティックリンクした版の JDK をイン
   ストールして下さい。

Q: /dev/zero が無いと言われます。

A: ルートになって、/dev/zero を作って下さい。
   以下のように行います。

     mknod /dev/zero c 1 5
     chown root.sys /dev/zero
     chmod a+rw /dev/zero

A: カーネル 1.2.13 には map.c に問題があります。以下のパッチを
   当てて下さい。

*** mmap.c.save Tue Nov 28 23:23:03 1995
- --- mmap.c      Tue Nov 28 23:23:21 1995
***************
*** 199,204 ****
- --- 199,205 ----
                if (fd >= NR_OPEN || !(file = current->files->fd[fd]))
                        return -EBADF;
        }
+         flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
        return do_mmap(file, get_fs_long(buffer), get_fs_long(buffer+1),
                get_fs_long(buffer+2), flags, get_fs_long(buffer+5));
  }

Q: XFree 3.1.x で???を使っているのですが、appletviewer を起動
   するとグラフィックスが全ておかしくなってしまいます。

A: Linux JDK では 8bpp モード(256色)しかをサポートしていません。
   理由は知りません。(コード内に バイト/ピクセルについて決め打
   ちしている部分があるのだと思います。)今のところは、8bpp モー
   ドを利用できるように XF85Config を変更してから Java を実行
   して下さい。


     b. Linux 版 Netscape 2.0b3 のインストール

  Netscape 2.0b3 は /usr/local/netscape にインストールしなけれ
ばなりません。(絶対そうというわけではありませんが、そうしてお
いた方が後々楽でしょう。)

警告: このようにすると、既に存在する Netscape の Xdefaults ファ
イルを壊すかもしれません。(bookmarks は大丈夫です)

     mkdir /usr/local/netscape
     cd /usr/local/netscape
     tar xvvvvfz netscape-v20b3-export.i486-unknown-linux.tar.Z
     cp Netscape.ad /usr/X386/lib/X11/app-defaults/Netscape
     cp XKeysymDB /usr/X386/lib/X11
     cp -r nls /usr/X386/lib/X11/nls
     mkdir -p /usr/local/netscape/java/classes
     ln -s /usr/local/netscape/moz2_0.car /usr/local/netscape/java/classes
     
以下のようなリンクを張る必要があるかもしれません。

     ln -s /var/X11R6/lib /usr/X386/lib/X11

     Note: depending your your distribution, you may have to use the
     path "/var/X11R6/lib/" instead of "/usr/X386/lib/X11."  However,
     Netscape expects to find the files in /usr/X386/lib/X11, so
     you must at least have a link between them.

     注意: あなたの使っているディストリビューションによっては 
     /usr/X386/lib/X11 ではなく /usr/X11R6/lib を使わなければ
     ならないかもしれません。しかし、Netscape は 
     /usr/X386/lib/X11 を探そうとするので少なくともこのディレ
     クトリ間にはシンボリックリンクを張らなければなりません。

  これで、Netscape 2.0 を使う準備ができました。
/usr/local/netscape/netscape を実行して下さい。

インストールについての Q&A :
Q: Netscape 2.0 を実行すると、正しい X resource が無いと言われ
   ます。

A: Netscape 2.0 用の Netscape.ad を 
   /usr/X386/lib/X11/app-defaults 置いたことを確認して下さい。
   Netscape 2.0 は Netscape 1.x の Netscape.ad では動きません。

Q: Netscape に対してペーストを行おうとすると Netscape が落ちて
   しまいます。

A: Netscape と一緒に配布されている nls ディレクトリを 
   /usr/X386/lib/X11 に置いたこと、XKeysymDB ファイルを 
   /usr/X386/lib/X11 に置いたことを確認して下さい。
  これは Netscape がリンクされている X11R5ライブラリのバグです。

Q: Java アプレットを動かそうとすると Netscape がクラッシュしてしまいます。

A: /usr/local/netscape/java/classes/moz2_0.car (これがリンクな
   らその実体)が Netscape 2.0 パッケージに含まれていたものかどう
   か確認して下さい。

訳注: 訳者の環境では Netscape 2.0b2 の mos2_0.car は Netscape
      2.0b3 では利用できませんでした。

Q: カーネル 1.2.13 などで、/dev/zero, mmap の問題が起きます。

A: JDK インストールの Q&A の方に説明があります。そちらを見て下さい。

IV. Java-Linux における現在の制限及びバグ  

     JDK pre1 では UDP データグラムのサポート部分は壊れています。

     Netscape 2.0b3 はJava アプレットを 5〜10分走らせると、な
     ぜか落ちます。

     他にももっとあると思います。

V. Java-Linux の移植はどこで行われているか

  Java-Linux プロジェクトは Linux 用のパッチが Sun の Java
ports tree に入るように活動しています。また、Borland が Java 
製品で Linux をサポートするよう運動しています。

  Java-Linux プロジェクトはβ版API 対応の HotJava のリリースを
待っています。

  Java-Linux メーリングリストではあなたのバグレポートおよびパッ
チを待っています。

  Randy Chapman 氏は Linux JDK の DEC Alpha アーキテクチャへの
移植を行っています。

--------------------------------------------------------------
