<!-- $Id: linuxemu.sgml,v 1.7 1997/02/25 04:56:46 hanai Exp $ -->
<!-- The FreeBSD Japanese Documentation Project -->
<!-- Original revision: 1.19 -->

<chapt><heading>Linux エミュレーション<label id="linuxemu"></heading>

<p><em>原作: &a.handy and &a.rich;</em>
<p><em>訳: &a.kiroh;.<newline>24 September 1996.</em>

<sect><heading>Linux エミュレータのインストール</heading>

<p>
FreeBSD での Linux エミュレーションは, 大部分の Linux バイナリ(a.out 
および ELF フォーマット)を実行できる状態になっています. 2.1-STABLE ブラン
チでのエミュレーションでは, Linux DOOM や Mathematica が実行できます.
FreeBSD 2.2-RELEASE でのエミュレーションは, さらに強化されており, Linux 用
の Quake, Abuse, IDL, netrek など, 多数のソフトウェアが実行できます.

Linux オペレーティングシステムには、特有の機能がいくつかあり, FreeBSD 
でサポートされていないものもあります. Linux の /proc ファイルシステム
を使ったバイナリは, FreeBSD では実行できません (FreeBSD で使用可能な 
/proc ファイルシステムとは仕様が異なっているためです). また仮想8086モー
ドを有効にするなど, i386 に特有なシステムコールを使っている場合も実行
できません.

<p>
カーネルが Linux エミュレーションを使用するように構築されているかを調
べるには, Linux のバイナリを実行してみるのが簡単です.
<tscreen>
<verb>
linux-executable: Exec format error. Wrong Architecture.
</verb>
</tscreen>
このようなエラーメッセージが表示されるようであれば, Linux との互換性は
サポートされていません. カーネルを再構築してインストールする必要があり
ます.

Linux エミュレーションの設定方法は, 使用している FreeBSD のバージョン
によって多少異なっています.

<sect1><heading>2.1-STABLE への Linux エミュレーションのインストール</heading>

<p>2.1-STABLE の GENERIC カーネルは, Linux との互換性を保つように構築
されていません. カーネルの再構築が必要です. 再構築をおこなうには, 2つの方
法があります. 1つは, エミュレータをカーネル自体にスタティックリンクす
る方法. もう1つは, 動的に Linux ローダブルカーネルモジュール(LKM)をロー
ドするようにする方法です.

<p>エミュレータを有効にするには, 以下をコンフィグレーションファイル
 (/sys/i386/conf/LINT など) に追加します.
<tscreen>
<verb>
options COMPAT_LINUX
</verb>
</tscreen>
Linux DOOM などのアプリケーションを実行したい場合は, 共有メモリも有効
にしておかなければなりません. 以下を追加します.
<tscreen>
<verb>
options SYSVSHM
</verb>
</tscreen>
Linux のシステムコールを使用するには, 4.3BSD のシステムコールとの互換
性が保たれていることが必要です. 以下の行が含まれていることを確認してく
ださい.
<tscreen>
<verb>
options "COMPAT_43"
</verb>
</tscreen>

LKM を使用せずエミュレータをカーネルにスタティックにリンクしたい場合は,
以下の行を追加します.
<tscreen>
<verb>
options  LINUX
</verb>
</tscreen>
<ref id="kernelconfig" name="FreeBSDカーネルのコンフィグレーション">の節の記述に
したがって config と, 新しいカーネルのインストールをおこなってください.

LKM を使用する場合は, ローダブルモジュールをインストールしなければなり
ません. カーネルとローダブルモジュールのバージョンが異なると, カーネル
がクラッシュする場合がありますので, 安全を期すためには, カーネルをイン
ストールするごとに, LKM も再インストールしてください.
<tscreen>
<verb>
% cd /usr/src/lkm/linux
% make all install
</verb>
</tscreen>
カーネルと LKM のインストールが終了したら, root で `linux' コマンドを
実行することで LKM をロードできます.
<tscreen>
<verb>
% linux
Linux emulator installed
Module loaded as ID 0
%
</verb>
</tscreen>
LKM がロードされたかどうかを確認するには, `modstat' を実行します.
<tscreen>
<verb>
% modstat
Type     Id Off Loadaddr Size Info     Rev Module Name
EXEC      0   3 f0baf000 0018 f0bb4000   1 linux_emulator
%
</verb>
</tscreen>
システムブート時に, LKM をロードするようにするには, 2つの方法がありま
す. FreeBSD 2.2-RELEASE または 2.1-STABLE では, /etc/sysconfig を,
<tscreen>
<verb>
linux=YES
</verb>
</tscreen>
のように, NO を YES に変更してください. FreeBSD 2.1 RELEASE およびそれ以
前のバージョンでは, そのような行はありませんので, /etc/rc.local に以下
の行を追加する必要があります.
<tscreen>
<verb>
linux
</verb>
</tscreen>

<sect1><heading>2.2-RELEASE への Linux エミュレーションのインストール
</heading>

<p>``options LINUX'' や ``options COMPAT_LINUX'' を指定する必要
はなくなりました. Linux エミュレーションは LKM(「ローダブルカーネルモジュール」)
を使用して, リブートせず簡単にインストールできます. スタートアッ
プファイルで以下のように指定します.
<enum>
<item>/etc/sysconfig に以下の行が必要です.
<tscreen>
<verb>
linux=YES
</verb>
</tscreen>
<item> これは結果的に, /etc/rc.i386 の以下の指定を有効にします.
<tscreen>
<verb>
# Start the Linux binary emulation if requested.
if [ "X${linux}" = X"YES" ]; then
        echo -n ' ';            linux
        # XXX BOGUS - Linux script shouldn't make any output on success
fi
</verb>
</tscreen>
</enum>

<p>実行されたかどうかを確認するには, modstat を使用します.
<tscreen>
<verb>
% modstat
Type     Id Off Loadaddr Size Info     Rev Module Name
EXEC      0   4 f09e6000 001c f09ec010   1 linux_mod
%
</verb>
</tscreen>
2.2-RELEASE とそれ以降のシステムの中には, modstat の実行がうまくいかない
ものがあるという報告もあります. 何らかの理由で, Linux LKM がロードできな
い場合は,
<tscreen>
<verb>
options  LINUX
</verb>
</tscreen>
をカーネルの設定ファイルに指定して, エミュレータをスタティックにリンク
してください. <ref id="kernelconfig" name="FreeBSDカーネルのコンフィグレーション">
の節の記述にしたがって config と, 新しいカーネルのインストールをおこ
なってください.

<sect1><heading>Linux ランタイムライブラリのインストール</heading>

<sect2><heading>linux_lib port を使用してのインストール</heading>

<p>多くの Linux アプリケーションはシェアードライブラリを使用しますので,
シェアードライブラリのインストールが終了しなければ, エミュレータのイン
ストールは終わったことになりません. 手動でもインストールできますが,
linux_lib port を使用するのが簡単です.
<tscreen>
<verb>
% cd /usr/ports-current/emulators/linux_lib
% make all install
</verb>
</tscreen>

これで, Linux エミュレータが動作するようになったはずです. 伝説(とメー
ルのアーカイブ :-) によれば, Linux エミュレーションは, ZMAGIC ライブラ
リとリンクされている Linux バイナリに対して, 最もうまく動作するようで
す.  Slackware V2.0 などに使われている QMAGIC ライブラリだと, エミュレー
タが胸やけするかもしれません. これを書いている時点(1996年5月)で, ELF 
エミュレーションは依然実験段階ですが, かなりうまく動作しているようです. 
マイナーバージョンの不一致などを報告するプログラムもありますが, 普通は
問題にならないようです.

<sect2><heading>手動でのライブラリのインストール</heading>

<p>``ports'' ディストリビューションが手元にない場合は, 手動でライブラ
リをインストールする必要があります. プログラムが必要とする Linux のシェ
アードライブラリとラインタイムリンカが必要です. また Linux ライブラリ
の用の``shadow root'' ディレクトリ, /compat/linux, を作成する必要があ
ります.  FreeBSD で動作する Linux のプログラムが使用するシェアードライ
ブラリは,まずこのファイルツリーから検索されます. 例えば, Linux のプロ
グラムが/lib/libc.so をロードしようとした場合には, FreeBSD は, まず
/compat/linux/lib/libc.so を開こうとします. 存在にしなかった場合には,
次に /lib/libc.so を試します. シェアードライブラリは, Linux の ld.so 
が参照するライブラリではなく, /compat/linux/lib 以下にインストールする
必要があります.

FreeBSD 2.2-RELEASE 以降では, /compat/linux にかかわる動作が多少異なりま
す. -CURRENT では, ライブラリだけでなくすべてのファイルが, ``shadow
root'' /compat/linux から検索されます.

Linux のプログラムが必要とするシェアードライブラリを探す必要があるのは,
FreeBSD のシステムに Linux のプログラムをインストールする最初の数回だ
けでしょう. それが過ぎれば, 十分な Linux のシェアードライブラリがシス
テムにインストールされ, 新しくインストールした Linux のバイナリも, 余
計な作業をせずに動作させることができるようになります.

<sect2><heading>シェアードライブラリの追加</heading>

<p>
linux_port をインストールした後に, アプリケーションが必要なライブラリ
が存在しないというエラーを出したらどうしたらよいでしょうか? Linux のバ
イナリがどのシェアードライブラリを必要とし, そしてどこで入手できるか,
どのように探したらよいでしょうか? 基本的には, 以下の2種類の方法があり
ます(以下の手順にしたがう場合には, 必要なインストール作業をおこなう FreeBSD シ
ステム上で root として作業をおこなう必要があります).

<p>Linux システムを使用でき, 必要なシェアードライブラリが調べられる場
合には, 単に FreeBSD のシステムにそのライブラリをコピーするだけで
す. 例えば, DOOM の Linux バイナリを ftp で持ってきたとします. 使用で
きる Linux システムの上に転送して, `ldd linuxxdoom' とやれば, 必要とす
るシェアードライブラリがチェックできます.

<tscreen>
<verb>
% ldd linuxxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
</verb>
</tscreen>

<p>
最後のカラムに表示されているすべてのファイルを持って来て, /compat/linux の下
に置き, 最初のカラムに示されるファイル名からシンボリックリンクを張る必
要があります. すなわち, FreeBSD のシステムで, 以下のようなファイルが必
要となります.
<tscreen>
<verb>
/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
</verb>
</tscreen>

<p>
最初のカラムに表示されているファイルと, メジャーバージョンの同じ Linux
シェアードライブラリを既にインストールしている場合は, 新たにコピーする
必要はありません. 既にあるライブラリで動作するはずです. ただ, 新しいバー
ジョンのシェアードライブラリがある場合は, 新しいものをコピーすることを
お奨めします. 新しいライブラリにシンボリックリンクを変更したら, 古いラ
イブラリは削除してかまいません.
<tscreen>
<verb>
/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27
</verb>
</tscreen>
以上のようなライブラリがインストールされており, 新しいバイナリに対する 
ldd の出力が以下のようになる場合を考えます。
<tscreen>
<verb>
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
</verb>
</tscreen>

このように最後の番号が1つか2つ古いだけならば, 普通は
/lib/libc.so.4.6.29 をコピーする必要はありません. わずかに古いライブラ
リでも, プログラムは動作するはずだからです. もちろん, 新しいライブラリ
と置き換えて, 以下のようにしても構いません.
<tscreen>
<verb>
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29
</verb>
</tscreen>

<p>シンボリックリンクのメカニズムは, Linux バイナリに<em>のみ</em>必要
なことに注意してください. FreeBSD のランタイムリンカは, メジャーリビジョ
ン番号の一致したライブラリを検索しますから, ユーザが気にする必要はあり
ません.

<sect2><heading>ld.so の設定 -- FreeBSD 2.2-RELEASE のみ</heading>

<p>このセクションは, FreeBSD 2.2-CURRENT 以降にのみ当てはまります.
2.1-STABLE を使用している方は, 飛ばしてください.

<p>
最後に, FreeBSD 2.2-RELEASE を使われている場合は, Linux のランタイムリンカと
その設定ファイルがシステムに導入されていることを確認してください.
これらのファイルは, FreeBSD システムの適切な位置(/compat/linux ツリー以
下)にコピーされている必要があります.

<tscreen>
<verb>
/compat/linux/lib/ld.so
/compat/linux/etc/ld.so.config
</verb>
</tscreen>

<p>使用できる Linux システムがない場合は, 必要なファイルは近くの FTP サイ
トから入手してください. 各種ファイルの入手先についての情報を, 後に付
けておきます. ここでは, 必要なファイルの入手先がわかっているものとしま
す.

<p>
以下のファイルを取得します(バージョンの不一致を避けるために, すべて同一
の FTP サイトから入手してください). 取得したファイルを /compat/linux 
以下にインストールしてください(例えば, /foo/bar は,
/compat/linux/foo/bar にインストールされます).

<tscreen>
<verb>
/sbin/ldconfig
/usr/bin/ldd
/lib/libc.so.x.y.z
/lib/ld.so
</verb>
</tscreen>

<p>ldconfig と ldd は, /compat/linux の下にある必要はありません. システム
のどこにあっても構いません. ただ, FreeBSD の同名のコマンドと間違えないように
注意してください. /usr/local/bin の中に, ldconfig-linux, ldd-linux とし
てインストールするのもよいアイディアでしょう.
<p>
/compat/linux/etc/ld.so.conf ファイルを作成し, Linux ラインタイムリンカ
がシェアードライブラリを検索するディレクトリを記述してください. このファ
イルはプレインテキストファイルで, それぞれの行にディレクトリ名を含みま
す. /lib と /usr/lib は標準ですから, 以下のようなディレクトリが追加できま
す.
<tscreen>
<verb>
/usr/X11/lib
/usr/local/lib
</verb>
</tscreen>

<p>
Linux バイナリが, /lib/libc.so というライブラリを開いた場合, エミュレー
タは内部で, ファイル名を /compat/linux/lib/libc.so にマップします. エ
ミュレータがライブラリを検索するために, すべての Linux のライブラリ
(/compat/linux/lib/libc.so, /compat/linux/usr/X11/lib/libX11.so など)
は, /compat/linux 以下にインストールされていなければなりません.

<p>FreeBSD 2.2-RELEASE を使用している場合は, Linux の ldconfig プログラム
を実行する必要があります.
<tscreen>
<verb>
% cd /compat/linux/lib
% /compat/linux/sbin/ldconfig
</verb>
</tscreen>

<p>
ldconfig はスタティックリンクされていますから, 実行するのにシェアードラ
イブラリを必要としません. ldconfig は, /compat/linux/etc/ld.so.cache 
ファイルを作成し, すべてのシェアードライブラリの名前を格納します. ライ
ブラリの追加をおこなった場合には, ldconfig を再実行して, このファイルを作り
直さなければなりません.

2.1-STABLE では, /compat/linux/etc/ld.so.cache をインストールしたり,
ldconfig を実行したりしないでください. 2.1-STABLE では, システムコー
ルの実装方法が異なるため, ldconfig は使用されません.

<p>
これで, libc シェアードライブラリを必要とする Linux バイナリを実行する設
定が終了しました. ldd を ldd 自身に実行してテストしてください.
ldd-linux としてインストールしている場合は, 以下のような結果になるはず
です.

<tscreen>
<verb>
% ldd-linux `which ldd-linux`
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
</verb>
</tscreen>

<p>ここまで終了すれば, 新しい Linux のバイナリをインストールできます.
新しい Linux バイナリをインストールするときは, それがシェアードライブ
ラリを必要とするかどうか確認してください. 必要とする場合は,
/compat/linux 以下にインストールされているかどうか確認してください. こ
れは, Linux の ldd を新しいプログラムに対して実行し, 出力を確認するこ
とによりおこなえます. ldd(ldd(1)マニュアルページも参照してください)は, プ
ログラムが必要とするシェアードライブラリのリストを, majorname
(jumpversion) => fullname という形式で出力します.

<p>
fullname のかわりに ``not found'' と出力される場合は, ライブラリの追加をす
る必要があります. 必要なライブラリの名前は, majorname に
libXXXX.so.N.mm という形式で示されています. Linux の FTP サイトで
libXXXX.so.N.mm を探し, インストールしてください. XXXX(名前)とN(メジャー
リビジョン番号)は一致している必要があります. マイナー番号 mm は, それほ
ど重要ではありませんが, なるべく最新のものをインストールするようにして
ください.

<sect1><heading>ホストネームリゾルバの設定</heading>

<p>DNS がうまく動作しなかったり, 以下のようなエラーメッセージが表示され
る場合は, /compat/linux/etc/host.conf ファイルを設定する必要があります.
<tscreen>
<verb>
resolv+: "bind" is an invalid keyword
resolv+: "hosts" is an invalid keyword
</verb>
</tscreen>
ファイルの内容を以下のように設定してください.
<tscreen>
<verb>
order hosts, bind
multi on
</verb>
</tscreen>
ここで, order は /etc/hosts を最初に検索し, 次にDNSを検索するように指定
します. /compat/linux/etc/host.conf がインストールされていない場合は,
Linux のアプリケーションは, FreeBSD の /etc/host.conf を使用しようとして,
文法の違いによる警告を表示します. /etc/resolv.conf を使用してネームサー
バを設定していない場合には, `bind' を削除してください.

<p>最後になりますが, 2.1-STABLE を使用している場合は,
RESOLV_HOST_CONF 環境変数を指定して, アプリケーションにホストテーブル
の検索方法を指定する必要があります. FreeBSD 2.2-RELEASE を使用している場合
は, スキップしてください. /bin/csh を使っている場合は, 以下のようにし
ます.
<tscreen>
<verb>
setenv RESOLV_HOST_CONF /compat/linux/etc/host.conf
</verb>
</tscreen>

/bin/shの場合は, 以下のようにします.
<tscreen>
<verb>
RESOLV_HOST_CONF=/compat/linux/etc/host.conf; export RESOLV_HOST_CONF
</verb>
</tscreen>

<sect1><heading>必要なファイルを探すには</heading>

<p>
注意: 以下の情報は, この文書が書かれた時点では有効ですが, FTP サイトの
名前, ディレクトリ, 配布ファイル名などは, 変更されている可能性がありま
す.
<p>
訳注: ここに取り上げられている FTP サイトは, 日本国内にもミラーサイト
が多数存在します。なるべく近くの FTP サイトからファイルを入手してくだ
さい.

<p>
Linux は, いくつかのグループが, それぞれ独自のバイナリ配布セットを作成
して配布しています. 配布セットは, ``Slackware'' や ``Yggdrasil'' など
の名前がつけられています. これらの配布セットは, 多くの FTP サイトから
入手できます. ファイルが展開されており, 必要なファイルのみを取得できる
場合もありますが, 通常は圧縮された配布セットの形で入手できます. 配布
セットは, いくつかのサブディレクトリに, gzip で圧縮された tar ファイル
として格納されています. それぞれの配布セットの一次配布先は, 以下の通り
です.
<verb>
sunsite.unc.edu:/pub/Linux/distributions
tsx-11.mit.edu:/pub/linux/distributions
</verb>

<p>
ヨーロッパのミラーサイトの例:
<verb>
ftp.luth.se:/pub/linux/distributions
ftp.demon.co.uk:/pub/linux/distributions
src.doc.ic.ac.uk:/packages/linux/distributions
</verb>

<p>
混乱を避けるために, ここでは Slackware だけを取り上げます. この配布セッ
トは, 多くのサブディレクトリ内にある別々のパッケージから構成されていま
す.  通常, パッケージはインストールプログラムにより自動的に制御されま
すが, ``手動で''おこなうことも可能です. まず配布セットの中の,
``contents'' サブディレクトリの内容を書くにしてください. ここには多く
の小さなテキストファイルが含まれおり, それぞれのパッケージの内容が記述
されています. 必要なファイルを探している場合は, まず contents 内のテキ
ストファイルを取得し, そのファイルの中から grep を使用して検索するのが, 
最も速い方法でしょう. 以下に必要となるであろうファイルを, grep を使用
して検索した例を示します.
<tabular ca=ll>
Library		<colsep>Package		<rowsep>
ld.so		<colsep>ldso   		<rowsep>
ldconfig	<colsep>ldso   		<rowsep>
ldd		<colsep>ldso   		<rowsep>
libc.so.4	<colsep>shlibs 		<rowsep>
libX11.so.6.0	<colsep>xf_lib 		<rowsep>
libXt.so.6.0	<colsep>xf_lib 		<rowsep>
libX11.so.3	<colsep>oldlibs		<rowsep>
libXt.so.3	<colsep>oldlibs		<rowsep>
</tabular>

<p>
この場合は, ldso, shlibs, xf_lib, oldlibs というパッケージが必要なこと
がわかります. それぞれのcontentsファイルの中で, ``PACKAGE LOCATION'' 
と書いてある行を探してください. その行に, パッケージが含まれているディ
スク, 今回の場合はサブディレクトリ名が書かれています. たとえば, 以下の
ようになります.
<tabular ca=ll>
Package                 <colsep>Location	<rowsep>
ldso                    <colsep>diska2		<rowsep>
shlibs                  <colsep>diska2		<rowsep>
oldlibs                 <colsep>diskx6		<rowsep>
xf_lib                  <colsep>diskx9		<rowsep>
</tabular>

<p>``diskXX'' というのは, 配布セットの ``slackware/XX'' サブディレクトリ
を示します. それ以外の場合は, ``contrib'' サブディレクトリに格納されて
います. 今回の場合は, 以下のファイルを取得すればいいことがわかります
(ファイル名は, 配布セットのルートディレクトリからの相対パスで示してあ
ります).
<tscreen>
<verb>
slakware/a2/ldso.tgz
slakware/a2/shlibs.tgz
slakware/x6/oldlibs/tgz
slakware/x9/xf_lib.tgz
</verb>
</tscreen>

<p>
gzip で圧縮された tar ファイルから必要なファイルを /compat/linux ディ
レクトリに格納してください(必要なファイルのみを展開するか, あるいは必
要でないファイルを後で削除してください). これで作業は終了です.

<p><bf>参照:</bf>
<verb>
ftp.freebsd.org:pub/FreeBSD/2.0.5-RELEASE/xperimnt/linux-emu/README

/usr/src/sys/i386/ibcs2/README.iBCS2
</verb>

<sect><heading>FreeBSD への Mathematica のインストール<label id="mathematica"></heading>

<p><em>原作: &a.rich and &a.chuck</em>
<p><em>訳: &a.kiroh;.</em>

この文書は, Mathematica 2.2 の Linux バイナリディストリビューションを,
FreeBSD 2.1 にインストールする方法について説明します.

<p>
Mathematica は, そのままでは FreeBSD をサポートしていませんが, Linux は
サポートしています. ですから, Linux エミュレータの設定が終わってしまえ
ば, Mathematica を動作させる環境はほとんど整ったことになります.

<p>
DOS 用のスチューデント版 Mathematica から Linux バージョンへのアップグレー
ド価格は, 執筆時点 (1996年5月) では, &dollar;45.00 です.
直接 Wolfram(電話番号(217) 398-6500)に注文して, 支払いはクレジットカー
ドでおこなえます。

<sect1><heading>Mathematica ディストリビューションの展開</heading>
<p>
バイナリは, Wolfram から CDROM で配布されています. CDROM には, 1ダー
スほどの tar ファイルが含まれており, それぞれサポートされているアーキテ
クチャに対応しています. Linux 用のファイルは, LINUX.TAR です. 例えば 
/usr/local/Mathematica 以下にインストールする場合は, 以下のようにしま
す.
<tscreen>
<verb>
% cd /usr/local
% mkdir Mathematica
% cd Mathematica
% tar -xvf /cdrom/LINUX.TAR
</verb>
</tscreen>

<sect1><heading>Mathematica パスワードの取得</heading>
<p>
Mathematica を実行する前に, 使用するマシンに対応した `machine ID' を 
Wolfram から取得する必要があります.

<p>
Linux 互換ランタイムライブラリがインストールされており, mathematica の展
開が終了したら, Install ディレクトリで `mathinfo' プログラムを使用す
ることで `machine ID' を得ることができます.
<tscreen>
<verb>
% cd /usr/local/Mathematica/Install
% mathinfo
LINUX: 'ioctl' fd=5, typ=0x89(), num=0x27 not implemented
richc.isdn.bcm.tmc.edu   9845-03452-90255
%
</verb>
</tscreen>
ここで, `richc' の `machine ID' は, `9845-03452-90255' となります.
ioctl のメッセージは無視してください. まだ FreeBSD では実装されていません.
Mathematica を実行するたびに同様のメッセージが表示されますが, 実際の使
用に問題はありませんので, 無視してかまいません.

<p>電子メールや電話, ファックスなどで Wolfram に `machine ID' を知らせ
て登録すると, いくつかの番号のグループからなるパスワードが送り返されて
きます.  パスワードを, マシン名, ライセンス番号とともに, mathpass ファ
イルに追加します.

追加は, 以下のようにおこないます.
<tscreen>
<verb>
% cd /usr/local/Mathematica/Install
% math.install
</verb>
</tscreen>
ライセンス番号と, Wolfram から送られてきたパスワードを入力を求めます.
入力を間違えたりして, math.install の実行が失敗しても大丈夫です.
`mathpass' ファイルを手動で編集して, 情報を訂正してください.

<p>
パスワードの入力後, math.install では, インストール方法を, デフォルト
設定でのインストールか、自分で方法を指定するインストールから選ぶことが
できます. 筆者のようにインストールプログラムを信用していない場合は, 自
分でディレクトリを指定する方を選択するでしょう. 自分で指定するインストー
ルを選んだ場合, math.install 自身ではディレクトリの作成はおこないません.
注意してください. 別のウィンドウでシェルを開いて, 指定するディレクトリ
を作成してください. 存在しないディレクトリを指定して, math.install が
インストールに失敗した場合には, ディレクトリを作成し, math.install を
再び実行してください. 筆者らがインストール先に選んだディレクトリは, 以
下の通りです. くれぐれもあらかじめ作成してから, math.install で指定す
るようにしてください.
<tscreen>
<verb>
/usr/local/Mathematica/bin       バイナリファイル
/usr/local/Mathematica/man/man1  マニュアルページ
/usr/local/Mathematica/lib/X11   XKeysymbファイル
</verb>
</tscreen>
また, システムレコードファイルとして, /tmp/math.record を使用するように
設定することもできます. このファイルには, セッションのログが記録されま
す. この設定が終了すると, math.install は残りのファイルを展開して, 必
要な場所に格納します.

<p>
Mathematica ノートブックの機能は, X フロントエンドとして本体とは別に含
まれています. X フロントエンドを正しくインストールするには,
/usr/local/Mathematica/FrontEnd ディレクトリに移動し, ./xfe.install シェ
ルスクリプトを実行します. インストール先を指定しなければなりませんが,
あらかじめ作成する必要はありません. 必要なディレクトリは, すべて
math.install によって作成されているからです. インストールが終了したら,
/usr/local/Mathematica/bin ディレクトリに, ``mathematica'' という名前の
シェルスクリプトが新たに作成されているはずです.

<p>最後に, Mathematica がインストールしたシェルスクリプトを修正する必要
があります. /usr/local/Mathematica/bin に含まれるすべてのシェルスクリプ
トの先頭部分に以下の行を追加します.
<tscreen>
<verb>
XKEYSYMDB=/usr/local/Mathematica/lib/X11/XKeysymDB; export XKEYSYMDB
</verb>
</tscreen>
これは, Mathematica が使用する Mathematica バージョンのキーマップファイル
XKeysymDB の場所を指定するものです.

2.1-STABLE を使用している場合は, 以下の行も追加してください.
<tscreen>
<verb>
RESOLV_HOST_CONF=/compat/linux/etc/host.conf; export RESOLV_HOST_CONF
</verb>
</tscreen>
これは, Mathematica に Linux バージョンの host.conf を使用するように指定し
ます. FreeBSD の host.conf の文法は, Linux のものと異なっているため, この
指定をおこなわないと, /etc/host.conf に関わるエラーが発生します.

<p>
新しいマニュアルページを利用したい場合は, さらに /etc/manpath.config ファイ
ルを修正する必要があります. また自分の~/.cshrcを変更して, 
/usr/local/Mathematica/bin をパスに追加してください.

<p>
これでインストール作業はすべて終了です. ``mathematica'' とタイプすれば,
見栄えのする Mathematica ノートブックが表示されるはずです. Mathematica 
には, Motif ユーザインタフェースが含まれますが, スタティックにリンクさ
れているため, Motif のライブラリは必要ありあません. 頑張って 
Mathematica をインストールしてください.

<sect1><heading>バグ</heading>

<p>
ノートブックフロントエンドは, 以下のようなエラーメッセージを表示して,
ハングすることがあることが知られています.
<tscreen>
<verb>
File .../Untitled-1.mb appears to be broken for OMPR.257.0
</verb>
</tscreen>

今のところ原因はわかっていませんが, このバグが影響を及ぼすのは, ノートブッ
クの X window フロントエンドのみです. Mathematica エンジン本体に影響は
ありません. そのため, ``math'' によって起動されるコマンドラインのインタ
フェースを使用している場合は, このバグは関係ありません.

<sect1><heading>謝辞</heading>

<p>&a.sosと&a.peterに深く感謝します. Linuxエミュレーションが現在の形に
あるのは, 彼らのおかげです. そして, 彼ら二人にハッパをかけて, 犬のよう
に働かせた Michael Smithに. 今やLinuxエミュレーションは, linuxよりうま
くlinuxバイナリを実行できます！ :-)

