Change punctuation style and fix some typos.
Submitted by: Hideyuki KURASHINA <rushani@jp.FreeBSD.org> References: [doc-jp-work 471]
This commit is contained in:
parent
b88d2f1133
commit
599e9f17b8
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=13818
4 changed files with 1116 additions and 1116 deletions
File diff suppressed because it is too large
Load diff
|
@ -3,7 +3,7 @@
|
|||
The FreeBSD Japanese Documentation Project
|
||||
|
||||
Original revision: 1.33
|
||||
$FreeBSD: doc/ja_JP.eucJP/books/handbook/kerneldebug/chapter.sgml,v 1.13 2001/04/29 17:51:27 hrs Exp $
|
||||
$FreeBSD$
|
||||
-->
|
||||
|
||||
<chapter id="kerneldebug">
|
||||
|
@ -20,99 +20,99 @@
|
|||
<para>ここではクラッシュダンプ (crash dump : 訳注 この文脈では
|
||||
kernel 自身
|
||||
の異常によって停止した場合に出力されるイメージを指します)
|
||||
によるカー ネルデバッグの方法を示します.</para>
|
||||
によるカーネルデバッグの方法を示します。</para>
|
||||
|
||||
<para>ここではダンプするための十分なスワップ
|
||||
(swap) の容量があるものとします.
|
||||
もし複数のスワップパーティションを持ち,
|
||||
(swap) の容量があるものとします。
|
||||
もし複数のスワップパーティションを持ち、
|
||||
最初のパーティションがダンプ
|
||||
を保持するのに十分な大きさを持たない場合は
|
||||
別のダンプデバイスを使うよ
|
||||
うに (<literal>config kernel</literal> 行で)
|
||||
カーネルのコンフィグをおこなうか, &man.dumpon.8;
|
||||
コマンドを使って別のデバイスを示すことができます. &man.dumpon.8;
|
||||
カーネルのコンフィグをおこなうか、&man.dumpon.8;
|
||||
コマンドを使って別のデバイスを示すことができます。&man.dumpon.8;
|
||||
を使うもっともよい方法は変数 <literal>dumpdev</literal> を
|
||||
<filename>/etc/rc.conf</filename> で設定することです. 一般的には
|
||||
<filename>/etc/rc.conf</filename> で設定することです。一般的には
|
||||
<filename>/etc/fstab</filename> で設定されているスワップデバイスが
|
||||
使われるでしょう.
|
||||
スワップに使えないデバイスへのダンプ,
|
||||
使われるでしょう。
|
||||
スワップに使えないデバイスへのダンプ、
|
||||
例えばテープへのダンプは現在サポートさ
|
||||
れていません. カーネルのコンフィグは
|
||||
<command>config <option>-g</option></command> によって行ってください.
|
||||
れていません。カーネルのコンフィグは
|
||||
<command>config <option>-g</option></command> によって行ってください。
|
||||
<link linkend="kernelconfig"> FreeBSD
|
||||
カーネルのコンフィグレーション </link>
|
||||
には FreeBSD のカーネルの設定の詳細がありますので
|
||||
参照してください.</para>
|
||||
参照してください。</para>
|
||||
|
||||
<para>&man.dumpon.8; コマンドを使ってどこへダンプするか
|
||||
カーネルに伝えてください
|
||||
(&man.swapon.8; によってそのパーティションが
|
||||
スワップとして設定された
|
||||
後でなければならないことに注意してください). これは普通は
|
||||
後でなければならないことに注意してください)。これは普通は
|
||||
<filename>/etc/rc.conf</filename> や <filename>/etc/rc</filename>
|
||||
で設定されます. あるいは
|
||||
で設定されます。あるいは
|
||||
別の方法としてカーネルコンフィグレーションファイルの
|
||||
<literal>config</literal> 行の <literal>dump</literal> 節 で
|
||||
ダンプデバイスをハードコードすることができます.
|
||||
<literal>config</literal> 行の <literal>dump</literal> 節で
|
||||
ダンプデバイスをハードコードすることができます。
|
||||
この方法はあまりよくは
|
||||
ありません. カーネルがブート時に crash
|
||||
ありません。カーネルがブート時に crash
|
||||
する場合のクラッシュダンプを取り
|
||||
たい時だけ使うべきです.</para>
|
||||
たい時だけ使うべきです。</para>
|
||||
|
||||
<note>
|
||||
<para>以下では <command>gdb</command>という用語は
|
||||
<command>gdb</command>
|
||||
を<quote>カーネルデバッグモード</quote>で動かしていることを意味します.
|
||||
を<quote>カーネルデバッグモード</quote>で動かしていることを意味します。
|
||||
<command>gdb</command> を
|
||||
<option>-k</option>オプションをつけて起動することで,
|
||||
このモードになります.
|
||||
カーネルデバッグモードでは, プロンプトが
|
||||
<prompt>(kgdb)</prompt> に変わります.</para>
|
||||
<option>-k</option>オプションをつけて起動することで、
|
||||
このモードになります。
|
||||
カーネルデバッグモードでは、プロンプトが
|
||||
<prompt>(kgdb)</prompt> に変わります。</para>
|
||||
</note>
|
||||
|
||||
<tip>
|
||||
<para>FreeBSD 3 およびそれ以前のシステムを使っているなら,
|
||||
<para>FreeBSD 3 およびそれ以前のシステムを使っているなら、
|
||||
巨大なデバッグカーネルをそのままインストールするのではなく
|
||||
strip されたデバッグ用カーネルをつくるべきでしょう.</para>
|
||||
strip されたデバッグ用カーネルをつくるべきでしょう。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cp kernel kernel.debug</userinput>
|
||||
&prompt.root; <userinput>strip -g kernel</userinput></screen>
|
||||
|
||||
<para>この手順は必須ではありませんが, ぜひ行なうことをおすすめします
|
||||
(FreeBSD 4 およびそれ以降では, カーネルの <command>make</command>
|
||||
の段階で自動的にこれが行なわれます).
|
||||
自動的に, あるいは上のコマンドを手動で実行してカーネルが strip
|
||||
されたら, 普通に <command>make install</command>
|
||||
と実行し, カーネルをインストールして構いません.</para>
|
||||
<para>この手順は必須ではありませんが、ぜひ行なうことをおすすめします
|
||||
(FreeBSD 4 およびそれ以降では、カーネルの <command>make</command>
|
||||
の段階で自動的にこれが行なわれます)。
|
||||
自動的に、あるいは上のコマンドを手動で実行してカーネルが strip
|
||||
されたら、普通に <command>make install</command>
|
||||
と実行し、カーネルをインストールして構いません。</para>
|
||||
|
||||
<para>FreeBSD の古いリリース (3.1 を含まない以前のもの) は,
|
||||
標準で a.out カーネルを使っていることに注意してください.
|
||||
これはシンボルテーブルが常に物理メモリ上に存在することを要求するため,
|
||||
strip されていないデバッグカーネルに含まれる大きなシンボルテーブルは非常に無駄になります.
|
||||
ELF カーネルを使った FreeBSD の最近のリリースでは,
|
||||
そのような問題がなくなりました.</para>
|
||||
<para>FreeBSD の古いリリース (3.1 を含まない以前のもの) は、
|
||||
標準で a.out カーネルを使っていることに注意してください。
|
||||
これはシンボルテーブルが常に物理メモリ上に存在することを要求するため、
|
||||
strip されていないデバッグカーネルに含まれる大きなシンボルテーブルは非常に無駄になります。
|
||||
ELF カーネルを使った FreeBSD の最近のリリースでは、
|
||||
そのような問題がなくなりました。</para>
|
||||
</tip>
|
||||
|
||||
<para>カーネルを作った時にそのコピーを
|
||||
<filename>kernel.debug</filename> という名前で作りましょう.
|
||||
また, オリジナルに対して <command>strip
|
||||
-g</command>を実行します.
|
||||
オリジナルを普通にインストールします. また strip
|
||||
していないカーネル も同様にインストールすることができますが,
|
||||
<filename>kernel.debug</filename> という名前で作りましょう。
|
||||
また、オリジナルに対して <command>strip
|
||||
-g</command>を実行します。
|
||||
オリジナルを普通にインストールします。また strip
|
||||
していないカーネルも同様にインストールすることができますが、
|
||||
シンボルテーブルの参照時間
|
||||
がいくつかのプログラムでは劇的に増加するでしょう. また,
|
||||
カーネル全体 はブート時に読み込まれ
|
||||
がいくつかのプログラムでは劇的に増加するでしょう。また、
|
||||
カーネル全体はブート時に読み込まれ
|
||||
スワップアウトされないため数メガバイトの物理メ
|
||||
モリが無駄になります.</para>
|
||||
モリが無駄になります。</para>
|
||||
|
||||
<para>例えばブートプロンプトで
|
||||
新しいカーネルの名前をタイプすることによって,
|
||||
新しいカーネルをテストした場合で,
|
||||
新しいカーネルの名前をタイプすることによって、
|
||||
新しいカーネルをテストした場合で、
|
||||
再びシステムを動かすのに別のカーネ
|
||||
ルで立ち上げることが必要な場合はブートプロンプトで
|
||||
<option>-s</option>フラグ
|
||||
を使いシングルユーザの状態にしてください.
|
||||
そして以下のような操作をおこな います.</para>
|
||||
を使いシングルユーザの状態にしてください。
|
||||
そして以下のような操作をおこないます。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>fsck -p</userinput>
|
||||
&prompt.root; <userinput>mount -a -t ufs</userinput> # /var/crash 用のファイルシステムを書き込み可能にする
|
||||
|
@ -120,33 +120,33 @@
|
|||
&prompt.root; <userinput>exit</userinput> # ...マルチユーザモードへ移行</screen>
|
||||
|
||||
<para>ここに示した &man.savecore.8; は (現在動いているものとは別の)
|
||||
カーネルのシンボル名の抽出をおこなうために使っています.
|
||||
カーネルのシンボル名の抽出をおこなうために使っています。
|
||||
抽出はデフォルトで
|
||||
は現在動いているカーネルに対しておこなわれ,
|
||||
は現在動いているカーネルに対しておこなわれ、
|
||||
クラッシュダンプとカーネルシンボ
|
||||
ルのくい違いのためにまったく何もしません
|
||||
(訳注:そのためにオプション
|
||||
で実際にダンプをおこしたカーネルを指定します).</para>
|
||||
(訳注: そのためにオプション
|
||||
で実際にダンプをおこしたカーネルを指定します)。</para>
|
||||
|
||||
<para>クラッシュダンプの起きた後に
|
||||
<filename>/sys/compile/WHATEVER</filename>へ行き
|
||||
<command>gdb</command>を動かします. <command>gdb</command>
|
||||
より次のようにします.</para>
|
||||
<command>gdb</command>を動かします。<command>gdb</command>
|
||||
より次のようにします。</para>
|
||||
|
||||
<screen><userinput>symbol-file kernel.debug</userinput>
|
||||
<userinput>exec-file /var/crash/kernel.0</userinput>
|
||||
<userinput>core-file /var/crash/vmcore.0</userinput></screen>
|
||||
|
||||
<para>こうすると,
|
||||
<para>こうすると、
|
||||
クラッシュダンプを使ってカーネルソースを他のプログラムと同様に
|
||||
デバッグすることができます.</para>
|
||||
デバッグすることができます。</para>
|
||||
|
||||
<para>次に <command>gdb</command>
|
||||
での手順のセッションのログを示します. 長い行は読
|
||||
みやすくするために改行しました. また,
|
||||
参照のために行番号を入れてあり ます. ただし, これは実際の
|
||||
pcvtコンソールドライバの開発中の実際のエ
|
||||
ラーのトレースです.</para>
|
||||
での手順のセッションのログを示します。長い行は読
|
||||
みやすくするために改行しました。また、
|
||||
参照のために行番号を入れてあります。ただし、これは実際の
|
||||
pcvt コンソールドライバの開発中の実際のエ
|
||||
ラーのトレースです。</para>
|
||||
|
||||
<screen> 1:Script started on Fri Dec 30 23:15:22 1994
|
||||
2:&prompt.root; <userinput>cd /sys/compile/URIAH</userinput>
|
||||
|
@ -230,52 +230,52 @@
|
|||
79:
|
||||
80:Script done on Fri Dec 30 23:18:04 1994</screen>
|
||||
|
||||
<para>上の出力についてのコメントをします.</para>
|
||||
<para>上の出力についてのコメントをします。</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry><term>line 6:</term>
|
||||
<listitem>
|
||||
<para>これは DDB (後述) からのダンプです. このため
|
||||
<para>これは DDB (後述) からのダンプです。このため
|
||||
<quote>because you said to!</quote> という
|
||||
panicコメントがつき, ページフォルトのト ラップによって
|
||||
DDBに入ったことが原因の, やや長いスタックトレー
|
||||
スがあります.</para>
|
||||
panicコメントがつき、ページフォルトのトラップによって
|
||||
DDBに入ったことが原因の、やや長いスタックトレー
|
||||
スがあります。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>line 20:</term>
|
||||
<listitem>
|
||||
<para>スタックトレースでのこれは
|
||||
<function>trap()</function>関数の位置で す.</para>
|
||||
<function>trap()</function>関数の位置です。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>line 36:</term>
|
||||
<listitem>
|
||||
<para>新しいスタックフレームを使用するように指定しています.
|
||||
ただし, ここでこれを指定する必要ありません.
|
||||
trap の場合, スタックフレームは正しい場所を指していると考えられるからです.
|
||||
ソースコードの 403 行を見ると, <quote>tp</quote>
|
||||
ポインタのアクセスが失敗しているか,
|
||||
配列のアクセスが範囲外である可能性が高いことがわかります.</para>
|
||||
<para>新しいスタックフレームを使用するように指定しています。
|
||||
ただし、ここでこれを指定する必要ありません。
|
||||
trap の場合、スタックフレームは正しい場所を指していると考えられるからです。
|
||||
ソースコードの 403 行を見ると、<quote>tp</quote>
|
||||
ポインタのアクセスが失敗しているか、
|
||||
配列のアクセスが範囲外である可能性が高いことがわかります。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>line 52:</term>
|
||||
<listitem>
|
||||
<para>怪しいポインタですが,
|
||||
アクセスは正常におこなえました.</para>
|
||||
<para>怪しいポインタですが、
|
||||
アクセスは正常におこなえました。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>line 56:</term>
|
||||
<listitem>
|
||||
<para>ところが, 明らかにポインタはゴミを指しています. これで
|
||||
<para>ところが、明らかにポインタはゴミを指しています。これで
|
||||
エラーを見つけました! (ここのコードの部分からはよくわかり
|
||||
ませんが,
|
||||
ませんが、
|
||||
<literal>tp->t_line</literal>はコンソールデバイスの規定
|
||||
する行を参照しているので,
|
||||
もっと小さな整数でなければなりませ ん. )</para>
|
||||
する行を参照しているので、
|
||||
もっと小さな整数でなければなりません。)</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
@ -285,15 +285,15 @@
|
|||
<title>DDD によるクラッシュダンプのデバッグ</title>
|
||||
|
||||
<para>カーネルのクラッシュダンプは <command>ddd</command>
|
||||
のようなグラフィカルなデバッガで調べることもできます.
|
||||
のようなグラフィカルなデバッガで調べることもできます。
|
||||
通常はコマンドラインで <option>-k</option> オプションをつけて
|
||||
<command>ddd</command> を起動します. たとえば:</para>
|
||||
<command>ddd</command> を起動します。たとえば:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>ddd -k /var/crash/kernel.0 /var/crash/vmcore.0</userinput></screen>
|
||||
|
||||
<para>クラッシュダンプを <command>ddd</command>
|
||||
のグラフィカルなインターフェースを使って
|
||||
見ることができます.</para>
|
||||
見ることができます。</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
|
@ -302,43 +302,43 @@
|
|||
<para>カーネルが予想もしない時にコアダンプして <command>config
|
||||
-g</command>
|
||||
を行ってコンパイルされていなかった場合にはどうしたら
|
||||
よいでしょう. すべてが失われるわけではありません.
|
||||
パニックを起こさないでください.</para>
|
||||
よいでしょう。すべてが失われるわけではありません。
|
||||
パニックを起こさないでください。</para>
|
||||
|
||||
<para>もちろん, クラッシュダンプを使えるようにする必要があります.
|
||||
使い方は前述の部分を見てください.</para>
|
||||
<para>もちろん、クラッシュダンプを使えるようにする必要があります。
|
||||
使い方は前述の部分を見てください。</para>
|
||||
|
||||
<para>カーネルのコンパイルディレクトリ
|
||||
(<filename>/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>)
|
||||
で, 設定ファイルを編集します. 以下の行のコメントを外します
|
||||
で、設定ファイルを編集します。以下の行のコメントを外します
|
||||
(行が存在しなければ追加します):</para>
|
||||
|
||||
<programlisting>makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols</programlisting>
|
||||
|
||||
<para>カーネルを再構築しましょう.
|
||||
Makefileのタイムスタンプの変更により, 例えば <!-- kuriyama -
|
||||
<para>カーネルを再構築しましょう。
|
||||
Makefileのタイムスタンプの変更により、例えば <!-- kuriyama -
|
||||
should be filename --> <emphasis remap=tt> trap.o
|
||||
</emphasis>などのいくつかの他のオブジェクトファイルも作り直さ
|
||||
れます. 少しの幸運があれば,
|
||||
れます。少しの幸運があれば、
|
||||
<option>-g</option>オプションが追加されても作ら
|
||||
れるコードは変更されず, いくらかのデバッグシンボル以外には
|
||||
れるコードは変更されず、いくらかのデバッグシンボル以外には
|
||||
問題を
|
||||
起こしたコードとそっくりな新しいカーネルを手に入れることが
|
||||
できます. 少なくとも &man.size.1;
|
||||
コマンドで古い方と新しい方のサイズを比較すべ きです.
|
||||
これが食い違っていれば,
|
||||
多分あきらめなければならないでしょう.</para>
|
||||
できます。少なくとも &man.size.1;
|
||||
コマンドで古い方と新しい方のサイズを比較すべきです。
|
||||
これが食い違っていれば、
|
||||
多分あきらめなければならないでしょう。</para>
|
||||
|
||||
<para>ダンプを使って前述のように動かして調べます.
|
||||
デバッグシンボルは 必ずしも十分ではありません.
|
||||
<para>ダンプを使って前述のように動かして調べます。
|
||||
デバッグシンボルは 必ずしも十分ではありません。
|
||||
上の例ではスタックトレースでいくつかの関
|
||||
数の行番号や引数リストが表示されないかもしれません.
|
||||
もしより多くのデ バッグシンボルが必要であれば,十分になるまで
|
||||
数の行番号や引数リストが表示されないかもしれません。
|
||||
もしより多くのデバッグシンボルが必要であれば、十分になるまで
|
||||
適切なオブジェクトファイ ルを消して (makeして)
|
||||
<command>gdb <option>-k</option></command>セッションを繰り返してください.</para>
|
||||
<command>gdb <option>-k</option></command> セッションを繰り返してください。</para>
|
||||
|
||||
<para>これは必ずしもうまく動くと保証はできません.
|
||||
しかしほとんどの場合でう まくいくでしょう.</para>
|
||||
<para>これは必ずしもうまく動くと保証はできません。
|
||||
しかしほとんどの場合でうまくいくでしょう。</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
|
@ -346,110 +346,110 @@
|
|||
|
||||
<para><command>gdb <option>-k</option></command>
|
||||
は非常に高レベルのユーザインタフェースを提
|
||||
供するオフラインデバッガですが, いくつかのことはできません.
|
||||
供するオフラインデバッガですが、いくつかのことはできません。
|
||||
(できないことの中で)
|
||||
極めて重要なことはカーネルコードへのブレークポイ
|
||||
ントの設定とシングルステップ実行です.</para>
|
||||
ントの設定とシングルステップ実行です。</para>
|
||||
|
||||
<para>カーネルの低レベルデバッグが必要であれば, DDBと呼ばれる
|
||||
on-lineデバッ ガが使えます. ブレークポイントの設定,
|
||||
シングルステップのカーネルの実 行,
|
||||
変数の検査と変更などができます.
|
||||
ただし,これはカーネルのソースファ
|
||||
イルにアクセスすることはできません.
|
||||
<para>カーネルの低レベルデバッグが必要であれば、DDBと呼ばれる
|
||||
on-lineデバッガが使えます。ブレークポイントの設定、
|
||||
シングルステップのカーネルの実行、
|
||||
変数の検査と変更などができます。
|
||||
ただし、これはカーネルのソースファ
|
||||
イルにアクセスすることはできません。
|
||||
<command>gdb</command>のようにすべてのデ
|
||||
バッグ情報にはアクセスできず, globalと
|
||||
staticのシンボルにアクセス することができるだけです.</para>
|
||||
バッグ情報にはアクセスできず、global と
|
||||
static のシンボルにアクセスすることができるだけです。</para>
|
||||
|
||||
<para>カーネルに DDB
|
||||
を含めるためにはコンフィグファイルに次のようなオプショ
|
||||
ンを加えて,</para>
|
||||
ンを加えて、</para>
|
||||
|
||||
<programlisting>options DDB</programlisting>
|
||||
|
||||
<para>再構築をおこないます. (
|
||||
FreeBSDのカーネルの設定の詳細については<link
|
||||
linkend="kernelconfig"> FreeBSD
|
||||
<para>再構築をおこないます。(
|
||||
FreeBSD のカーネルの設定の詳細については <link
|
||||
linkend="kernelconfig">FreeBSD
|
||||
カーネルのコンフィグレーション</link>を参照してくださ
|
||||
い.</para>
|
||||
い。</para>
|
||||
|
||||
<note>
|
||||
<para>古いバージョンの起動ブロックを使っている場合,ですと,
|
||||
デバッガのシンボルが完全にはロードされないかもしれません.
|
||||
その時は起動ブロックを最新のものに更新してください.
|
||||
新しい起動ブロックは, DDB シンボルを自動的にロードします.</para>
|
||||
<para>古いバージョンの起動ブロックを使っている場合、ですと、
|
||||
デバッガのシンボルが完全にはロードされないかもしれません。
|
||||
その時は起動ブロックを最新のものに更新してください。
|
||||
新しい起動ブロックは、DDB シンボルを自動的にロードします。</para>
|
||||
</note>
|
||||
|
||||
<para>DDB カーネルの実行において,
|
||||
DDBに入るいくつかの方法があります. 最初 の,
|
||||
<para>DDB カーネルの実行において、
|
||||
DDB に入るいくつかの方法があります。最初の、
|
||||
最も早い方法はブートプロンプトが出ている時に
|
||||
<option>-d</option>のブート フラグをタイプすることです.
|
||||
カーネルはデバッグモードで起動し, デバ イスのプローブ以前に
|
||||
DDBに入ります. したがって, デバイスのプローブ/初期
|
||||
設定ファンクションのデバッグができます.</para>
|
||||
<option>-d</option>のブートフラグをタイプすることです。
|
||||
カーネルはデバッグモードで起動し、デバイスのプローブ以前に
|
||||
DDB に入ります。したがって、デバイスのプローブ/初期
|
||||
設定ファンクションのデバッグができます。</para>
|
||||
|
||||
<para>2つ目のシナリオはキーボードのホットキーで, 通常は
|
||||
Ctrl-Alt-ESCです. syscons ではホットキーは再設定することができ,
|
||||
配付されているいくつかの キーマッピングでは別のキーに
|
||||
再設定されていますので確認しておいてください. シリアルラインの
|
||||
BREAKを使って シリアルコンソールから DDBへ入ることを可
|
||||
<para>2 つ目のシナリオはキーボードのホットキーで、通常は
|
||||
Ctrl-Alt-ESC です。syscons ではホットキーは再設定することができ、
|
||||
配付されているいくつかのキーマッピングでは別のキーに
|
||||
再設定されていますので確認しておいてください。シリアルラインの
|
||||
BREAK を使ってシリアルコンソールから DDB へ入ることを可
|
||||
能にするオプションもあります
|
||||
(カーネルコンフィグレーションファイルの <literal>options
|
||||
BREAK_TO_DEBUGGER</literal>). これは 多くのつまらないシリ
|
||||
アルアダプタが, 例えばケーブルを引き抜いた時に
|
||||
BREAK状態を意味もなく
|
||||
作り出してしまうのでデフォルトでは無効になっています.</para>
|
||||
BREAK_TO_DEBUGGER</literal>)。これは多くのつまらないシリ
|
||||
アルアダプタが、例えばケーブルを引き抜いた時に
|
||||
BREAK 状態を意味もなく
|
||||
作り出してしまうのでデフォルトでは無効になっています。</para>
|
||||
|
||||
<para>3つ目は, DDB
|
||||
<para>3つ目は、DDB
|
||||
を使うようになっているカーネルがパニック状態になると DDB
|
||||
へ入るというものです. このため,
|
||||
無人運転するマシンのカーネルにDDBを
|
||||
入れるのは賢明ではありません.</para>
|
||||
へ入るというものです。このため、
|
||||
無人運転するマシンのカーネルに DDB を
|
||||
入れるのは賢明ではありません。</para>
|
||||
|
||||
<para>DDB のコマンドはおおまかには <command>gdb</command>
|
||||
のいくつかのコマンドと似て
|
||||
います. おそらく最初にブレークポイントを
|
||||
設定する必要があるでしょう.</para>
|
||||
います。おそらく最初にブレークポイントを
|
||||
設定する必要があるでしょう。</para>
|
||||
|
||||
<screen><userinput>b function-name</userinput>
|
||||
<userinput>b address</userinput></screen>
|
||||
|
||||
<para>数値はデフォルトでは16進数で,
|
||||
シンボル名とはまったく異なります. 16進数で <literal>a-f</literal>
|
||||
の文字で始まる場合は, 先頭に <literal>0x</literal>
|
||||
<para>数値はデフォルトでは 16 進数で、
|
||||
シンボル名とはまったく異なります。16 進数で <literal>a-f</literal>
|
||||
の文字で始まる場合は、先頭に <literal>0x</literal>
|
||||
をつける必要があります(それ以外の数字の場合はどちらでもか
|
||||
まいません). <literal>function-name +
|
||||
0x103</literal>のような単純な式を使うこ とができます.</para>
|
||||
まいません)。<literal>function-name +
|
||||
0x103</literal>のような単純な式を使うことができます。</para>
|
||||
|
||||
<para>割り込みされたカーネルから処理を続行するためには, </para>
|
||||
<para>割り込みされたカーネルから処理を続行するためには、</para>
|
||||
|
||||
<screen><userinput>c</userinput></screen>
|
||||
|
||||
<para>とタイプするだけです.
|
||||
<para>とタイプするだけです。
|
||||
スタックのトレースには</para>
|
||||
|
||||
<screen><userinput>trace</userinput></screen>
|
||||
|
||||
<para>とします.</para>
|
||||
<para>とします。</para>
|
||||
|
||||
<note>
|
||||
<para>DDB にホットキーで入った場合は, カーネルはその
|
||||
<para>DDB にホットキーで入った場合は、カーネルはその
|
||||
(ホットキーの) 割り込み
|
||||
の処理を行っていますのでスタックトレースは
|
||||
あまり役にたたないことに注 意してください.</para>
|
||||
あまり役にたたないことに注意してください。</para>
|
||||
</note>
|
||||
|
||||
<para>ブレークポイントを削除したい場合は,</para>
|
||||
<para>ブレークポイントを削除したい場合は、</para>
|
||||
|
||||
<screen><userinput>del</userinput>
|
||||
<userinput>del address-expression</userinput></screen>
|
||||
|
||||
<para>とします.
|
||||
最初の形式はブレークポイントにヒットしたすぐ後で使うことが でき,
|
||||
現在のブレークポイントを削除します. 2番目の形式では任意のブレー
|
||||
クポイントを削除することができますが,
|
||||
<para>とします。
|
||||
最初の形式はブレークポイントにヒットしたすぐ後で使うことができ、
|
||||
現在のブレークポイントを削除します。2 番目の形式では任意のブレー
|
||||
クポイントを削除することができますが、
|
||||
次の形式で得られるような正確な
|
||||
アドレスを与えることが必要です.</para>
|
||||
アドレスを与えることが必要です。</para>
|
||||
|
||||
<screen><userinput>show b</userinput></screen>
|
||||
|
||||
|
@ -457,150 +457,150 @@
|
|||
|
||||
<screen><userinput>s</userinput></screen>
|
||||
|
||||
<para>としてみてください. これは関数呼出し先までステップ実行 (step
|
||||
into function) するでしょう.
|
||||
次のステートメントが終了するまでのDDBトレースは</para>
|
||||
<para>としてみてください。これは関数呼出し先までステップ実行 (step
|
||||
into function) するでしょう。
|
||||
次のステートメントが終了するまでの DDBトレースは</para>
|
||||
|
||||
<screen><userinput>n</userinput></screen>
|
||||
|
||||
<para>によっておこなうことができます.</para>
|
||||
<para>によっておこなうことができます。</para>
|
||||
|
||||
<note>
|
||||
<para>これは <command>gdb</command> の <command>next</command>
|
||||
命令とは異ります. <command>gdb</command>の
|
||||
<command>finish</command>命令と似ています.</para>
|
||||
命令とは異ります。<command>gdb</command>の
|
||||
<command>finish</command> 命令と似ています。</para>
|
||||
</note>
|
||||
|
||||
<para>メモリ上のデータを調べるには (例として) 次のようにします.
|
||||
<para>メモリ上のデータを調べるには (例として) 次のようにします。
|
||||
|
||||
<screen><userinput>x/wx 0xf0133fe0,40</userinput>
|
||||
<userinput>x/hd db_symtab_space</userinput>
|
||||
<userinput>x/bc termbuf,10</userinput>
|
||||
<userinput>x/s stringbuf</userinput></screen>
|
||||
|
||||
word/halfword/byte 単位でアクセスをおこない, hex (16進)
|
||||
word/halfword/byte 単位でアクセスをおこない、hex (16進)
|
||||
/dec (10進) /
|
||||
char (文字) /string (文字列) で表示します.
|
||||
char (文字) /string (文字列) で表示します。
|
||||
カンマの後ろの数字はオブジェク
|
||||
トカウントです. 次の 0x10個の要素を表示するには, 単純に</para>
|
||||
トカウントです。次の 0x10 個の要素を表示するには、単純に</para>
|
||||
|
||||
<screen><userinput>x ,10</userinput></screen>
|
||||
|
||||
<para>とします. 同様に次のように使うことができます.
|
||||
<para>とします。同様に次のように使うことができます。
|
||||
|
||||
<screen><userinput>x/ia foofunc,10</userinput></screen>
|
||||
|
||||
<function>foofunc</function>
|
||||
の最初の 0x10個の命令語をディスアセンブルし,
|
||||
の最初の 0x10 個の命令語をディスアセンブルし、
|
||||
<function>foofunc</function>
|
||||
の先頭からのオフセットとともに表示します.</para>
|
||||
の先頭からのオフセットとともに表示します。</para>
|
||||
|
||||
<para>メモリの内容を変更するには writeコマンドを使います.</para>
|
||||
<para>メモリの内容を変更するには write コマンドを使います。</para>
|
||||
|
||||
<screen><userinput>w/b termbuf 0xa 0xb 0</userinput>
|
||||
<userinput>w/w 0xf0010030 0 0</userinput></screen>
|
||||
|
||||
<para>コマンドモディファイアの
|
||||
(<literal>b</literal>/<literal>h</literal>/<literal>w</literal>)
|
||||
はデータを 書くサイズを定義し,
|
||||
これに続く最初の式は書き込むアドレス, 残りがこれ
|
||||
に続く連続するメモリアドレスに書き込まれるデータになります.
|
||||
はデータを 書くサイズを定義し、
|
||||
これに続く最初の式は書き込むアドレス、残りがこれ
|
||||
に続く連続するメモリアドレスに書き込まれるデータになります。
|
||||
</para>
|
||||
|
||||
<para>現在のレジスタ群の内容を知りたい場合は</para>
|
||||
|
||||
<screen><userinput>show reg</userinput></screen>
|
||||
|
||||
<para>とします. また, 単一のレジスタの値を表示するには, 例えば
|
||||
<para>とします。また、単一のレジスタの値を表示するには、例えば
|
||||
|
||||
<screen><userinput>p $eax</userinput></screen>
|
||||
|
||||
とします. また値の変更は</para>
|
||||
とします。また値の変更は</para>
|
||||
|
||||
<screen><userinput>set $eax new-value</userinput></screen>
|
||||
|
||||
<para>とします.</para>
|
||||
<para>とします。</para>
|
||||
|
||||
<para>DDBからカーネルの関数を呼び出す必要がある場合は, 単に</para>
|
||||
<para>DDBからカーネルの関数を呼び出す必要がある場合は、単に</para>
|
||||
|
||||
<screen><userinput>call func(arg1, arg2, ...)</userinput></screen>
|
||||
|
||||
<para>とします. return 値が出力されます.</para>
|
||||
<para>とします。return 値が出力されます。</para>
|
||||
|
||||
<para>動いているプロセスの &man.ps.1; スタイルの概要は</para>
|
||||
|
||||
<screen><userinput>ps</userinput></screen>
|
||||
|
||||
<para>です.</para>
|
||||
<para>です。</para>
|
||||
|
||||
<para>カーネルの失敗の原因の調査が終わったら, ここで再起動すべきです.
|
||||
それまでの不具合により, カーネルのすべての部分が期待するような
|
||||
動作をしているわけではないということを忘れないでください.
|
||||
以下のうちいずれかの方法でシステムのシャットダウンおよび再起動を行ってください.</para>
|
||||
<para>カーネルの失敗の原因の調査が終わったら、ここで再起動すべきです。
|
||||
それまでの不具合により、カーネルのすべての部分が期待するような
|
||||
動作をしているわけではないということを忘れないでください。
|
||||
以下のうちいずれかの方法でシステムのシャットダウンおよび再起動を行ってください。</para>
|
||||
|
||||
<screen><userinput>panic</userinput></screen>
|
||||
|
||||
<para>カーネルをコアダンプしてリブートしますので, 後で
|
||||
<command>gdb</command>によってコアの高 レベル解析をすることができます.
|
||||
このコマンドは通常, 一度
|
||||
<para>カーネルをコアダンプしてリブートしますので、後で
|
||||
<command>gdb</command>によってコアの高レベル解析をすることができます。
|
||||
このコマンドは通常、一度
|
||||
<command>continue</command>命令を使った後に
|
||||
使うことになるでしょう.</para>
|
||||
使うことになるでしょう。</para>
|
||||
|
||||
<screen><userinput>call boot(0)</userinput></screen>
|
||||
|
||||
<para> は動いているシステムを `clean' に shut
|
||||
downするよい方法です. すべて のディスクを
|
||||
<function>sync()</function>して最後にリブートします.
|
||||
down するよい方法です。すべてのディスクを
|
||||
<function>sync()</function> して最後にリブートします。
|
||||
ディスクとカー
|
||||
ネルのファイルシステムインタフェースが破損していない限り,
|
||||
ほぼ完全 に `clean'にシャットダウンするよい方法でしょう.</para>
|
||||
ネルのファイルシステムインタフェースが破損していない限り、
|
||||
ほぼ完全に `clean' にシャットダウンするよい方法でしょう。</para>
|
||||
<!-- kuriyama - ldquo? -->
|
||||
|
||||
<screen><userinput>call cpu_reset()</userinput></screen>
|
||||
|
||||
<para>は大惨事を防ぐための最後の手段で 「赤い大きなボタン」
|
||||
を押すのとほとんど 同じです.(訳注:
|
||||
リセットボタンを押すのとほぼ同じであるという意味です)</para>
|
||||
を押すのとほとんど同じです (訳注:
|
||||
リセットボタンを押すのとほぼ同じであるという意味です)。</para>
|
||||
|
||||
<para>短いコマンドの要約は</para>
|
||||
|
||||
<screen><userinput>help</userinput></screen>
|
||||
|
||||
<para>をタイプします. ただし, デバッグセッションのために
|
||||
<para>をタイプします。ただし、デバッグセッションのために
|
||||
&man.ddb.4; の
|
||||
マニュアルページのプリントアウトを用意しておくことを
|
||||
強くお奨めします.
|
||||
強くお奨めします。
|
||||
カーネルのシングルステップ中にオンラインマニュアルを
|
||||
読むことは難しい ということを覚えておいてください.</para>
|
||||
読むことは難しいということを覚えておいてください。</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>リモート GDB を使ったオンラインカーネルデバッグ</title>
|
||||
|
||||
<para>この機能は FreeBSD 2.2 からサポートされました.
|
||||
これは本当にすばらし い機能です.</para>
|
||||
<para>この機能は FreeBSD 2.2 からサポートされました。
|
||||
これは本当にすばらし い機能です。</para>
|
||||
|
||||
<para>GDB はすでにかなり以前より
|
||||
<emphasis>リモートデバッグ</emphasis> をサポートしてい ます.
|
||||
これはシリアル回線を使い非常に単純なプロトコルで行ないます.
|
||||
もちろん, この方法では今までに示した方法とは違い,
|
||||
2台のマシンが必 要になります. 1台はデバッグ環境のためのホストで,
|
||||
<emphasis>リモートデバッグ</emphasis> をサポートしてい ます。
|
||||
これはシリアル回線を使い非常に単純なプロトコルで行ないます。
|
||||
もちろん、この方法では今までに示した方法とは違い、
|
||||
2 台のマシンが必要になります。1 台はデバッグ環境のためのホストで、
|
||||
すべてのソースとす
|
||||
べてのシンボルを含んだバイナリのコピーを持っています. もう 1台は
|
||||
ターゲットマシンで, 同一のカーネルのコピー (ただしデバッグ情報は
|
||||
取り除いてあるもの) を単に実行するためのものです.</para>
|
||||
べてのシンボルを含んだバイナリのコピーを持っています。もう 1 台は
|
||||
ターゲットマシンで、同一のカーネルのコピー (ただしデバッグ情報は
|
||||
取り除いてあるもの) を単に実行するためのものです。</para>
|
||||
|
||||
<para>この場合, カーネルのコンフィグレーションは <command>config
|
||||
-g</command> で行な い, <option>DDB</option>
|
||||
を含めなくてはなりません. そうして通常通りコンパイルし ます.
|
||||
<para>この場合、カーネルのコンフィグレーションは <command>config
|
||||
-g</command> で行な い、<option>DDB</option>
|
||||
を含めなくてはなりません。そうして通常通りコンパイルし ます。
|
||||
こうして作ったバイナリファイルはデバッグ情報のために非常に大き
|
||||
くなります. このカーネルをターゲットマシンにコピーして
|
||||
<command>strip -x</command> でデバッグシンボルを取り除きます.
|
||||
そして <option>-d</option> ブートオプションを使いブートします.
|
||||
くなります。このカーネルをターゲットマシンにコピーして
|
||||
<command>strip -x</command> でデバッグシンボルを取り除きます。
|
||||
そして <option>-d</option> ブートオプションを使いブートします。
|
||||
sio デバイスにフラグ 0x80 が設定されているターゲットマシンの
|
||||
シリアル回線を, デバッグホストのいずれかのシリアル回線に
|
||||
つないでください.
|
||||
それからデバッグ(訳注:ホスト)マシン上で, ターゲットとなって
|
||||
シリアル回線を、デバッグホストのいずれかのシリアル回線に
|
||||
つないでください。
|
||||
それからデバッグ (訳注:ホスト) マシン上で、ターゲットとなって
|
||||
いるカーネルのコンパイルディレクトリで <command>gdb</command> を起動します:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>gdb -k kernel</userinput>
|
||||
|
@ -612,8 +612,8 @@ Copyright 1996 Free Software Foundation, Inc...
|
|||
<prompt>(kgdb)</prompt> </screen>
|
||||
|
||||
<para>リモートデバッグセッションの初期化
|
||||
(1番目のシリアルポートを使用する ことの設定)
|
||||
を以下のように行ないます.</para>
|
||||
(1 番目のシリアルポートを使用することの設定)
|
||||
を以下のように行ないます。</para>
|
||||
|
||||
<screen><prompt>(kgdb)</prompt> <userinput>target remote /dev/cuaa0</userinput></screen>
|
||||
|
||||
|
@ -624,15 +624,15 @@ Copyright 1996 Free Software Foundation, Inc...
|
|||
Stopped at Debugger+0x35: movb $0, edata+0x51bc
|
||||
<prompt>db></prompt> <userinput>gdb</userinput></screen>
|
||||
|
||||
<para>DDB は次のような出力を返すでしょう. </para>
|
||||
<para>DDB は次のような出力を返すでしょう。</para>
|
||||
|
||||
<screen>Next trap will enter GDB remote protocol mode</screen>
|
||||
|
||||
<para><command>gdb</command>と入力するたびに リモート GDB
|
||||
とローカル DDB が交互に切り替わ ります.
|
||||
トラップをすぐに起こすために単に ``s'' (step) と入力して下 さい.
|
||||
<para><command>gdb</command>と入力するたびにリモート GDB
|
||||
とローカル DDB が交互に切り替わります。
|
||||
トラップをすぐに起こすために単に ``s'' (step) と入力して下さい。
|
||||
そうするとホストの GDB はターゲットのカーネルの制御を行なうよ
|
||||
うになります.</para>
|
||||
うになります。</para>
|
||||
|
||||
<screen>Remote debugging using /dev/cuaa0
|
||||
Debugger (msg=0xf01b0383 "Boot flags requested debugger")
|
||||
|
@ -641,27 +641,27 @@ Debugger (msg=0xf01b0383 "Boot flags requested debugger")
|
|||
|
||||
<para>このセッションではソースコードへのフルアクセスや Emacs の
|
||||
window 上 の gud-mode (これは別の Emacs window
|
||||
に自動的にソースコードを表示し ます) で動かすなど, 通常の GDB
|
||||
セッションでできることのほとんどのこ とができます.</para>
|
||||
に自動的にソースコードを表示します) で動かすなど、通常の GDB
|
||||
セッションでできることのほとんどのことができます。</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>GDB を使ったローダブルモジュールのデバッグ</title>
|
||||
|
||||
<para>モジュール内部で発生する panic のデバッグや,
|
||||
<para>モジュール内部で発生する panic のデバッグや、
|
||||
動的モジュールを使っているマシンを GDB
|
||||
でリモートデバッグしている場合,
|
||||
でリモートデバッグしている場合、
|
||||
モジュールのシンボル情報を得る方法を
|
||||
GDB に伝える必要があります.</para>
|
||||
GDB に伝える必要があります。</para>
|
||||
|
||||
<para>まず, モジュールをデバッグ情報を含めて構築する必要があります.</para>
|
||||
<para>まず、モジュールをデバッグ情報を含めて構築する必要があります。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /sys/modules/linux</userinput>
|
||||
&prompt.root; <userinput>make clean; make COPTS=-g</userinput></screen>
|
||||
|
||||
<para>リモート GDB を使っている場合は,
|
||||
<para>リモート GDB を使っている場合は、
|
||||
ターゲットマシンで <command>kldstat</command> を実行することで
|
||||
モジュールがどこにロードされたか調べることが可能です.</para>
|
||||
モジュールがどこにロードされたか調べることが可能です。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>kldstat</userinput>
|
||||
Id Refs Address Size Name
|
||||
|
@ -670,29 +670,29 @@ Id Refs Address Size Name
|
|||
3 1 0xc0ad7000 2000 warp_saver.ko
|
||||
4 1 0xc0adc000 11000 linux.ko</screen>
|
||||
|
||||
<para>クラッシュダンプをデバッグしている場合,
|
||||
<para>クラッシュダンプをデバッグしている場合、
|
||||
<literal>linker_files->tqh_first</literal> から始まる
|
||||
<literal>linker_files</literal> リストを調べ,
|
||||
<literal>linker_files</literal> リストを調べ、
|
||||
探している <literal>filename</literal> が見つかるまで
|
||||
<literal>link.tqe_next</literal> ポインタをたどる必要があります.
|
||||
エントリ中の <literal>address</literal> メンバが,
|
||||
モジュールのロードアドレスです.</para>
|
||||
<literal>link.tqe_next</literal> ポインタをたどる必要があります。
|
||||
エントリ中の <literal>address</literal> メンバが、
|
||||
モジュールのロードアドレスです。</para>
|
||||
|
||||
<para>次に, モジュール内の text セクションのオフセットを調べます.</para>
|
||||
<para>次に、モジュール内の text セクションのオフセットを調べます。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>objdump --section-headers /sys/modules/linux/linux.ko | grep text</userinput>
|
||||
3 .rel.text 000016e0 000038e0 000038e0 000038e0 2**2
|
||||
10 .text 00007f34 000062d0 000062d0 000062d0 2**2</screen>
|
||||
|
||||
<para>必要なのは <literal>.text</literal> セクションで,
|
||||
上の例では 10 にあたります. その 4 番目の 16 進数フィールド
|
||||
(全部で 6 フィールドあります) が, ファイル中の text
|
||||
セクションのオフセットになります.
|
||||
そして, このオフセットをモジュールのロードアドレスに加算すると
|
||||
モジュールのコードの再配置アドレスを求めることができます.
|
||||
この例では 0xc0adc000 + 0x62d0 = 0xc0ae22d0 です.
|
||||
GDB コマンド <command>add-symbol-file</command> を使い,
|
||||
得られたモジュールの情報をデバッガに伝えるには, 次のようにします.</para>
|
||||
<para>必要なのは <literal>.text</literal> セクションで、
|
||||
上の例では 10 にあたります。その 4 番目の 16 進数フィールド
|
||||
(全部で 6 フィールドあります) が、ファイル中の text
|
||||
セクションのオフセットになります。
|
||||
そして、このオフセットをモジュールのロードアドレスに加算すると
|
||||
モジュールのコードの再配置アドレスを求めることができます。
|
||||
この例では 0xc0adc000 + 0x62d0 = 0xc0ae22d0 です。
|
||||
GDB コマンド <command>add-symbol-file</command> を使い、
|
||||
得られたモジュールの情報をデバッガに伝えるには、次のようにします。</para>
|
||||
|
||||
<screen><prompt>(kgdb)</prompt> <userinput>add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0</userinput>
|
||||
add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0?
|
||||
|
@ -700,20 +700,20 @@ add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22
|
|||
Reading symbols from /sys/modules/linux/linux.ko...done.
|
||||
<prompt>(kgdb)</prompt></screen>
|
||||
|
||||
<para>これで, モジュール内のすべてのシンボルにアクセスできるようになります.</para>
|
||||
<para>これで、モジュール内のすべてのシンボルにアクセスできるようになります。</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>コンソールドライバのデバッグ</title>
|
||||
|
||||
<para>DDBを動かすためにはコンソールドライバが必要ですから,
|
||||
コンソールドラ イバ自身に不具合のある場合は複雑になります.
|
||||
<para>DDBを動かすためにはコンソールドライバが必要ですから、
|
||||
コンソールドラ イバ自身に不具合のある場合は複雑になります。
|
||||
シリアルコンソールを利 用する方法 (ブートブロックを変更するか
|
||||
<prompt>Boot:</prompt>プロンプトで
|
||||
<option>-h</option>と入力する) を思い出してください.
|
||||
そして標準ター ミナルを最初のシリアルポートに設定します. DDBは,
|
||||
もちろんシリアルコ ンソールを含むいずれの
|
||||
コンソールドライバの設定でも動作します.</para>
|
||||
<option>-h</option>と入力する) を思い出してください。
|
||||
そして標準ター ミナルを最初のシリアルポートに設定します。DDBは、
|
||||
もちろんシリアルコンソールを含むいずれの
|
||||
コンソールドライバの設定でも動作します。</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
|
|
|
@ -9,41 +9,41 @@
|
|||
<chapter id="linuxemu">
|
||||
<title>Linux バイナリ互換機能</title>
|
||||
|
||||
<para><emphasis>オリジナルは Brian N. Handy <email>handy@sxt4.physics.montana.edu</email> と &a.rich; によるものですが,
|
||||
&a.jim; が 2000 年 3 月 22 日に再構成と一部の更新を行ないました.</emphasis></para>
|
||||
<para><emphasis>オリジナルは Brian N. Handy <email>handy@sxt4.physics.montana.edu</email> と &a.rich; によるものですが、
|
||||
&a.jim; が 2000 年 3 月 22 日に再構成と一部の更新を行ないました。</emphasis></para>
|
||||
|
||||
<para><emphasis>訳: &a.jp.kiroh;, 1996 年 9 月 24 日.</emphasis></para>
|
||||
<para><emphasis>訳: &a.jp.kiroh;、1996 年 9 月 24 日</emphasis></para>
|
||||
|
||||
<sect1>
|
||||
<title>この章では</title>
|
||||
|
||||
<para>この章では FreeBSD における Linux バイナリとの互換機能について,
|
||||
インストール方法やその仕組みを解説します.</para>
|
||||
<para>この章では FreeBSD における Linux バイナリとの互換機能について、
|
||||
インストール方法やその仕組みを解説します。</para>
|
||||
|
||||
<para>現時点では, 一体なぜ FreeBSD が Linux
|
||||
<para>現時点では、一体なぜ FreeBSD が Linux
|
||||
バイナリを実行できるようにならなければならないのか自問しているのではないでしょうか?
|
||||
答えはきわめて簡単です.
|
||||
答えはきわめて簡単です。
|
||||
Linux は現在コンピュータの世界では最も<quote>ホットなモノ</quote>なのでたくさんの会社や開発者たちが
|
||||
Linux のためだけに開発を行なっています. そのため, 残された私たち
|
||||
FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです.
|
||||
問題は, FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない,
|
||||
ということであり, そのため Linux 版のみを開発しているということなのです.
|
||||
そこで FreeBSD では Linux バイナリ互換機能が役に立つのです.</para>
|
||||
Linux のためだけに開発を行なっています。そのため、残された私たち
|
||||
FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです。
|
||||
問題は、FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない、
|
||||
ということであり、そのため Linux 版のみを開発しているということなのです。
|
||||
そこで FreeBSD では Linux バイナリ互換機能が役に立つのです。</para>
|
||||
|
||||
<para>簡単に言ってしまえば, この機能により全ての Linux アプリケーションの
|
||||
90 % が修正なしに FreeBSD 上で起動できます.
|
||||
この中には Star Office や Linux 版の Netscape, Adobe Acrobat, RealPlayer 5 と 7,
|
||||
VMWare, Oracle, WordPerfect, Doom, Quake などがあります.
|
||||
また, ある状況においては Linux バイナリを Linux で動かすよりも
|
||||
FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります.</para>
|
||||
<para>簡単に言ってしまえば、この機能により全ての Linux アプリケーションの
|
||||
90% が修正なしに FreeBSD 上で起動できます。
|
||||
この中には Star Office や Linux 版の Netscape、Adobe Acrobat、RealPlayer 5 と 7、
|
||||
VMWare、Oracle、WordPerfect、Doom、Quake などがあります。
|
||||
また、ある状況においては Linux バイナリを Linux で動かすよりも
|
||||
FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります。</para>
|
||||
|
||||
<para>しかしながら, いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません.
|
||||
例えば, Linux の <filename>/proc</filename> ファイルシステムを過度に使うような
|
||||
<para>しかしながら、いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません。
|
||||
例えば、Linux の <filename>/proc</filename> ファイルシステムを過度に使うような
|
||||
Linux バイナリは FreeBSD では動きません (FreeBSD の <filename>/proc</filename>
|
||||
ファイルシステムとは異なるのです) し,
|
||||
仮想 8086 モードを有効にするような i386 特有の呼び出しも動きません.</para>
|
||||
ファイルシステムとは異なるのです) し、
|
||||
仮想 8086 モードを有効にするような i386 特有の呼び出しも動きません。</para>
|
||||
|
||||
<para>Linux バイナリ互換モードのインストールに関しては<link linkend="linuxemu-lbc-install">次のセクション</link>をご覧ください.</para>
|
||||
<para>Linux バイナリ互換モードのインストールに関しては<link linkend="linuxemu-lbc-install">次のセクション</link>をご覧ください。</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="linuxemu-lbc-install">
|
||||
|
@ -51,17 +51,17 @@
|
|||
|
||||
<para>3.0-RELEASE以降であればカーネルのコンフィギュレーションファイルに
|
||||
<literal>options LINUX</literal> や <literal>options COMPAT_LINUX</literal>
|
||||
といった行を加える必要はありません.</para>
|
||||
といった行を加える必要はありません。</para>
|
||||
|
||||
<para>Linux バイナリ互換機能は今は KLD オブジェクト (<quote>Kernel LoaDable object</quote>)
|
||||
として実現されており, リブートしなくても
|
||||
<quote>on-the-fly</quote> で組み込むことができるのですが,
|
||||
<filename>/etc/rc.conf</filename>に次の行を加える必要があります.</para>
|
||||
として実現されており、リブートしなくても
|
||||
<quote>on-the-fly</quote> で組み込むことができるのですが、
|
||||
<filename>/etc/rc.conf</filename> に次の行を加える必要があります。</para>
|
||||
|
||||
<programlisting>linux_enable=<quote>YES</quote></programlisting>
|
||||
|
||||
<para>この設定により, <filename>/etc/rc.i386</filename>
|
||||
では次のような操作が行なわれます.</para>
|
||||
<para>この設定により、<filename>/etc/rc.i386</filename>
|
||||
では次のような操作が行なわれます。</para>
|
||||
|
||||
<programlisting># Start the Linux binary compatibility if requested.
|
||||
#
|
||||
|
@ -73,7 +73,7 @@ esac
|
|||
</programlisting>
|
||||
|
||||
<para>望みの KLD モジュールがロードされているか確認したい時には
|
||||
<command>kldstat</command> を利用します.</para>
|
||||
<command>kldstat</command> を利用します。</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>kldstat</userinput>
|
||||
Id Refs Address Size Name
|
||||
|
@ -81,92 +81,92 @@ Id Refs Address Size Name
|
|||
7 1 0xc24db000 d000 linux.ko</screen>
|
||||
|
||||
<para>
|
||||
何らかの理由で Linux KLD をロードしたくない,
|
||||
あるいはロードできないような場合には,
|
||||
何らかの理由で Linux KLD をロードしたくない、
|
||||
あるいはロードできないような場合には、
|
||||
<literal>options LINUX</literal>
|
||||
をカーネルの設定ファイルに指定して,
|
||||
Linux バイナリ互換機能をカーネルにスタティックリンクしてください.
|
||||
そして, <link linkend="kernelconfig">FreeBSD カーネルのコンフィギュレーション</link>
|
||||
の記述にしたがって新しいカーネルをインストールしてください.</para>
|
||||
をカーネルの設定ファイルに指定して、
|
||||
Linux バイナリ互換機能をカーネルにスタティックリンクしてください。
|
||||
そして、<link linkend="kernelconfig">FreeBSD カーネルのコンフィギュレーション</link>
|
||||
の記述にしたがって新しいカーネルをインストールしてください。</para>
|
||||
|
||||
<sect2>
|
||||
<title>Linux ランタイムライブラリのインストール</title>
|
||||
|
||||
<para>これは, <link linkend="linuxemu-libs-port">linux_base</link>
|
||||
の port を用いるか, もしくは <link linkend="linuxemu-libs-manually">手動で</link>インストールします.</para>
|
||||
<para>これは、<link linkend="linuxemu-libs-port">linux_base</link>
|
||||
の port を用いるか、もしくは<link linkend="linuxemu-libs-manually">手動で</link>インストールします。</para>
|
||||
|
||||
<sect3 id="linuxemu-libs-port">
|
||||
<title>linux_base の port を用いたインストール</title>
|
||||
|
||||
<para>ランタイムライブラリをインストールするには最も簡単な方法です.
|
||||
<para>ランタイムライブラリをインストールするには最も簡単な方法です。
|
||||
<ulink url="../ports/">ports コレクション</ulink>から他の port
|
||||
をインストールするのと全く同じようにできます.</para>
|
||||
をインストールするのと全く同じようにできます。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base</userinput>
|
||||
&prompt.root; <userinput>make install distclean</userinput></screen>
|
||||
|
||||
<para>これで Linux バイナリ互換機能が使えるはずです.
|
||||
いつかのプログラムはシステムライブラリのマイナーバージョンが違うと文句を言うかもしれませんが一般的には大した問題ではありません.</para>
|
||||
<para>これで Linux バイナリ互換機能が使えるはずです。
|
||||
いつかのプログラムはシステムライブラリのマイナーバージョンが違うと文句を言うかもしれませんが一般的には大した問題ではありません。</para>
|
||||
</sect3>
|
||||
|
||||
<sect3 id="linuxemu-libs-manually">
|
||||
<title>手動でのライブラリのインストール</title>
|
||||
|
||||
<para><quote>ports</quote>コレクションをインストールしていない場合,
|
||||
代わりに手動でライブラリをインストールすることができます.
|
||||
プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です.
|
||||
また Linux ライブラリ用の <quote>shadow root</quote> ディレクトリ,
|
||||
<filename>/compat/linux</filename>, を作成する必要があります.
|
||||
FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは,
|
||||
まずこのファイルツリーから検索されます. 例えば,
|
||||
<para><quote>ports</quote> コレクションをインストールしていない場合、
|
||||
代わりに手動でライブラリをインストールすることができます。
|
||||
プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です。
|
||||
また Linux ライブラリ用の <quote>shadow root</quote> ディレクトリ、
|
||||
<filename>/compat/linux</filename> を作成する必要があります。
|
||||
FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは、
|
||||
まずこのファイルツリーから検索されます。例えば、
|
||||
Linux のプログラムが <filename>/lib/libc.so</filename>
|
||||
をロードしようとした場合には, FreeBSD はまず
|
||||
をロードしようとした場合には、FreeBSD はまず
|
||||
<filename>/compat/linux/lib/libc.so</filename>
|
||||
を開こうとします. これが存在しなかった場合には, 次に
|
||||
<filename>/lib/libc.so</filename> を試します.
|
||||
シェアードライブラリは, Linux の <command>ld.so</command>
|
||||
が報告するパスではなく,
|
||||
を開こうとします。これが存在しなかった場合には、次に
|
||||
<filename>/lib/libc.so</filename> を試します。
|
||||
シェアードライブラリは、Linux の <command>ld.so</command>
|
||||
が報告するパスではなく、
|
||||
<filename>/compat/linux/lib</filename>
|
||||
以下にインストールする 必要があります.</para>
|
||||
以下にインストールする必要があります。</para>
|
||||
|
||||
<para>Linux のプログラムが必要とする
|
||||
シェアードライブラリを探す必要があるのは, FreeBSD
|
||||
シェアードライブラリを探す必要があるのは、FreeBSD
|
||||
のシステムに Linux
|
||||
のプログラムをインストールする最初の数回だけでしょう.
|
||||
それが過ぎれば, 十分な Linux のシェアードライブラリがシステムにインストールされ,
|
||||
新しくインストールした Linux のバイナリも余計な作業をせずに動作させることができるようになります.</para>
|
||||
のプログラムをインストールする最初の数回だけでしょう。
|
||||
それが過ぎれば、十分な Linux のシェアードライブラリがシステムにインストールされ、
|
||||
新しくインストールした Linux のバイナリも余計な作業をせずに動作させることができるようになります。</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>シェアードライブラリの追加</title>
|
||||
|
||||
<para><filename>linux_base</filename> port をインストールした後に,
|
||||
<para><filename>linux_base</filename> port をインストールした後に、
|
||||
アプリケーションが必要なライブラリが存在しないというエラーを出したらどうしたらよいでしょうか?
|
||||
Linux のバイナリがどのシェアードライブラリを必要とし,
|
||||
そしてどこで入手できるか, どのように探したらよいでしょうか?
|
||||
基本的には, 以下の 2 種類の方法があります (以下の手順に従う場合には,
|
||||
Linux のバイナリがどのシェアードライブラリを必要とし、
|
||||
そしてどこで入手できるか、どのように探したらよいでしょうか?
|
||||
基本的には、以下の 2 種類の方法があります (以下の手順に従う場合には、
|
||||
必要なインストール作業をおこなう FreeBSD システム上で root
|
||||
として作業をおこなう必要があります).</para>
|
||||
として作業をおこなう必要があります)。</para>
|
||||
|
||||
<para>Linux システムにアクセス可能ならば,
|
||||
そのアプリケーションがどういうシェアードライブラリを必要としているのか調べ,
|
||||
単に FreeBSD にそのライブラリをコピーするだけです.
|
||||
次の例を見てみましょう.</para>
|
||||
<para>Linux システムにアクセス可能ならば、
|
||||
そのアプリケーションがどういうシェアードライブラリを必要としているのか調べ、
|
||||
単に FreeBSD にそのライブラリをコピーするだけです。
|
||||
次の例を見てみましょう。</para>
|
||||
|
||||
<informalexample>
|
||||
<para>FTP を使って Doom の Linux バイナリを取ってきて,
|
||||
アクセスできる Linux システムに置いたとしましょう.
|
||||
次のように <command>ldd linuxdoom</command> とするだけでどのシェアードライブラリが必要かチェックできます.</para>
|
||||
<para>FTP を使って Doom の Linux バイナリを取ってきて、
|
||||
アクセスできる Linux システムに置いたとしましょう。
|
||||
次のように <command>ldd linuxdoom</command> とするだけでどのシェアードライブラリが必要かチェックできます。</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>ldd linuxxdoom</userinput>
|
||||
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</screen>
|
||||
|
||||
<para>最後のカラムに表示されているすべてのファイルを持って来て,
|
||||
<filename>/compat/linux</filename> の下に置き,
|
||||
最初のカラムに示されるファイル名にシンボリックリンクを張ります.
|
||||
すなわち, FreeBSD システムでは以下のようなファイルが必要となります.</para>
|
||||
<para>最後のカラムに表示されているすべてのファイルを持って来て、
|
||||
<filename>/compat/linux</filename> の下に置き、
|
||||
最初のカラムに示されるファイル名にシンボリックリンクを張ります。
|
||||
すなわち、FreeBSD システムでは以下のようなファイルが必要となります。</para>
|
||||
|
||||
<screen>/compat/linux/usr/X11/lib/libXt.so.3.1.0
|
||||
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
|
||||
|
@ -177,26 +177,26 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen>
|
|||
<blockquote>
|
||||
<note>
|
||||
<para>最初のカラムに表示されているファイルとメジャーバージョンが同じ
|
||||
Linux シェアードライブラリを既にインストールしている場合は,
|
||||
新たにコピーする 必要はありません.
|
||||
既にあるライブラリで動作するはずです.
|
||||
ただ, 新しいバージョンのものをコピーすることをお奨めします.
|
||||
新しいライブラリにシンボリックリンクを変更したら,
|
||||
古いライブラリは削除してかまいません. </para>
|
||||
Linux シェアードライブラリを既にインストールしている場合は、
|
||||
新たにコピーする 必要はありません。
|
||||
既にあるライブラリで動作するはずです。
|
||||
ただ、新しいバージョンのものをコピーすることをお奨めします。
|
||||
新しいライブラリにシンボリックリンクを変更したら、
|
||||
古いライブラリは削除してかまいません。</para>
|
||||
|
||||
<screen>/compat/linux/lib/libc.so.4.6.27
|
||||
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27</screen>
|
||||
|
||||
<para>従って, 以上のようなライブラリがインストールされており,
|
||||
<para>従って、以上のようなライブラリがインストールされており、
|
||||
新しいバイナリに対する <command>ldd</command>
|
||||
の出力が以下のようになる場合を考えます.</para>
|
||||
の出力が以下のようになる場合を考えます。</para>
|
||||
|
||||
<screen>libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29</screen>
|
||||
|
||||
<para>このように最後の番号が1つか2つ古いだけならば, 普通は
|
||||
<para>このように最後の番号が 1 つか 2 つ古いだけならば、普通は
|
||||
<filename>/lib/libc.so.4.6.29</filename>
|
||||
をコピーする必要はありません. わずかに古いライブラリでもプログラムは動作するはずだからです.
|
||||
もちろん, 以下のように新しいライブラリと置き換えても構いません.</para>
|
||||
をコピーする必要はありません。わずかに古いライブラリでもプログラムは動作するはずだからです。
|
||||
もちろん、以下のように新しいライブラリと置き換えても構いません。</para>
|
||||
|
||||
<screen>/compat/linux/lib/libc.so.4.6.29
|
||||
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29</screen>
|
||||
|
@ -206,9 +206,9 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen>
|
|||
<blockquote>
|
||||
<note>
|
||||
<para>シンボリックリンクのメカニズムは Linux
|
||||
バイナリに<emphasis>のみ</emphasis>必要なことに注意してください.
|
||||
FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので,
|
||||
ユーザが気にする必要はありません.</para>
|
||||
バイナリに<emphasis>のみ</emphasis>必要なことに注意してください。
|
||||
FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので、
|
||||
ユーザが気にする必要はありません。</para>
|
||||
</note>
|
||||
</blockquote>
|
||||
</informalexample>
|
||||
|
@ -218,50 +218,50 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen>
|
|||
<sect2>
|
||||
<title>Linux の ELF バイナリのインストール</title>
|
||||
|
||||
<para>ELF のバイナリを使うためには,
|
||||
<quote>マークをつける (branding)</quote> 作業が必要になります.
|
||||
マークのない ELF バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう.</para>
|
||||
<para>ELF のバイナリを使うためには、
|
||||
<quote>マークをつける (branding)</quote> 作業が必要になります。
|
||||
マークのない ELF バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう。</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>./my-linux-elf-binary</userinput>
|
||||
ELF binary type not known
|
||||
Abort</screen>
|
||||
|
||||
<para>カーネルが FreeBSD の ELF バイナリと Linux のバイナリとを
|
||||
見分けられるようにするためには, &man.brandelf.1;
|
||||
ユーティリティを以下のようにして使ってください.</para>
|
||||
見分けられるようにするためには、&man.brandelf.1;
|
||||
ユーティリティを以下のようにして使ってください。</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>brandelf -t Linux my-linux-elf-binary</userinput></screen>
|
||||
|
||||
<para>今ではGNU のツールたちが
|
||||
ELF バイナリに自動的に適切なマークを付加するようになったので,
|
||||
今後はこの作業もだんだんと必要なくなってゆくでしょう.</para>
|
||||
<para>今では GNU のツールたちが
|
||||
ELF バイナリに自動的に適切なマークを付加するようになったので、
|
||||
今後はこの作業もだんだんと必要なくなってゆくでしょう。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>ホストネームリゾルバの設定</title>
|
||||
|
||||
<para>DNS がうまく動作しなかったり,
|
||||
<para>DNS がうまく動作しなかったり、
|
||||
以下のようなエラーメッセージが表示され
|
||||
る場合は, <filename>/compat/linux/etc/host.conf</filename>
|
||||
ファイルを設定する必要があります.</para>
|
||||
る場合は、<filename>/compat/linux/etc/host.conf</filename>
|
||||
ファイルを設定する必要があります。</para>
|
||||
|
||||
<screen>resolv+: "bind" is an invalid keyword resolv+:
|
||||
"hosts" is an invalid keyword</screen>
|
||||
|
||||
<para>ファイルの内容を以下のように設定してください.</para>
|
||||
<para>ファイルの内容を以下のように設定してください。</para>
|
||||
|
||||
<programlisting>order hosts, bind
|
||||
multi on</programlisting>
|
||||
|
||||
<para>ここで, order は <filename>/etc/hosts</filename> を最初に検索し,
|
||||
次にDNSを検索するように指定します.
|
||||
<para>ここで、order は <filename>/etc/hosts</filename> を最初に検索し、
|
||||
次に DNS を検索するように指定します。
|
||||
<filename>/compat/linux/etc/host.conf</filename>
|
||||
がインストールされていない場合,
|
||||
がインストールされていない場合、
|
||||
Linux アプリケーションは FreeBSD の
|
||||
<filename>/etc/host.conf</filename> を使用しようとして,
|
||||
文法の違いによる警告を出力します.
|
||||
<filename>/etc/resolv.conf</filename> を利用してネームサーバの設定をしていない場合には,
|
||||
<literal>bind</literal> を削除してください.</para>
|
||||
<filename>/etc/host.conf</filename> を使用しようとして、
|
||||
文法の違いによる警告を出力します。
|
||||
<filename>/etc/resolv.conf</filename> を利用してネームサーバの設定をしていない場合には、
|
||||
<literal>bind</literal> を削除してください。</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
|
@ -269,28 +269,28 @@ multi on</programlisting>
|
|||
<title>Mathematica のインストール</title>
|
||||
|
||||
<para><emphasis>Mathematica 4.x 用に &a.murray;
|
||||
がアップデートし, Bojan Bistrovic <email>bojanb@physics.odu.edu</email>
|
||||
がマージしました.</emphasis></para>
|
||||
がアップデートし、Bojan Bistrovic <email>bojanb@physics.odu.edu</email>
|
||||
がマージしました。</emphasis></para>
|
||||
|
||||
<para>この章では, Mathematica 4.X Linux 版の FreeBSD
|
||||
へのインストールについて説明します.</para>
|
||||
<para>この章では、Mathematica 4.X Linux 版の FreeBSD
|
||||
へのインストールについて説明します。</para>
|
||||
|
||||
<para>Linux 版の Mathematica は FreeBSD においても完璧に動きます.
|
||||
ただ, 実行する際に Linux ABI を用いる必要があることを
|
||||
FreeBSD に教えるために, Wolfram によって出荷されているバイナリにマーク付け
|
||||
(branded) をする必要があります.</para>
|
||||
<para>Linux 版の Mathematica は FreeBSD においても完璧に動きます。
|
||||
ただ、実行する際に Linux ABI を用いる必要があることを
|
||||
FreeBSD に教えるために、Wolfram によって出荷されているバイナリにマーク付け
|
||||
(branded) をする必要があります。</para>
|
||||
|
||||
<para>Mathematica や Mathematica for Students の Linux 版は Wolfram
|
||||
(<ulink url="http://www.wolfram.com/">http://www.wolfram.com/</ulink>)
|
||||
から直接注文することができます.</para>
|
||||
から直接注文することができます。</para>
|
||||
|
||||
<sect2>
|
||||
<title>Linux バイナリへのマーク付け (branding)</title>
|
||||
|
||||
<para>Linux 用バイナリは Wolfram の Mathematica CD-ROM の
|
||||
<filename>Unix</filename> ディレクトリにあります.
|
||||
インストーラーを起動する前にこのディレクトリをローカルディスクにコピーし,
|
||||
&man.brandelf.1; により Linux バイナリにマークを付けます.</para>
|
||||
<filename>Unix</filename> ディレクトリにあります。
|
||||
インストーラーを起動する前にこのディレクトリをローカルディスクにコピーし、
|
||||
&man.brandelf.1; により Linux バイナリにマークを付けます。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>mount /cdrom</userinput>
|
||||
&prompt.root; <userinput>cp -rp /cdrom/Unix/ /localdir/</userinput>
|
||||
|
@ -303,70 +303,70 @@ multi on</programlisting>
|
|||
&prompt.root; <userinput>cd /localdir/Installers/Linux/</userinput>
|
||||
&prompt.root; <userinput>./MathInstaller</userinput></screen>
|
||||
|
||||
<para>また以下のようにすると, マーク付けされていない
|
||||
ELF バイナリすべての扱いを, デフォルトで Linux
|
||||
バイナリとすることが可能です.</para>
|
||||
<para>また以下のようにすると、マーク付けされていない
|
||||
ELF バイナリすべての扱いを、デフォルトで Linux
|
||||
バイナリとすることが可能です。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>sysctl -w kern.fallback_elf_brand=3</userinput>
|
||||
</screen>
|
||||
|
||||
<para>これは FreeBSD システムに対して,
|
||||
<para>これは FreeBSD システムに対して、
|
||||
マーク付けされていない ELF バイナリが
|
||||
Linux ABI を利用するように設定します. こうすることで,
|
||||
CDROM から直接インストーラを実行することが可能になります.</para>
|
||||
Linux ABI を利用するように設定します。こうすることで、
|
||||
CDROM から直接インストーラを実行することが可能になります。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Mathematica パスワードの取得</title>
|
||||
|
||||
<para>Mathematica を起動する前に Wolfram から自分の
|
||||
<quote>マシン ID</quote> に対応したパスワードを取得しなければいけません.</para>
|
||||
<quote>マシン ID</quote> に対応したパスワードを取得しなければいけません。</para>
|
||||
|
||||
<para>一旦 Linux 互換ランタイムライブラリをインストールし,
|
||||
<para>一旦 Linux 互換ランタイムライブラリをインストールし、
|
||||
Mathematica を展開すれば Install ディレクトリにある
|
||||
<command>mathinfo</command> プログラムを起動して
|
||||
<quote>マシン ID</quote> を得ることができます.
|
||||
このマシン ID は, 最初に見つかったイーサネットカードの MAC アドレスをベースに生成されます.</para>
|
||||
<quote>マシン ID</quote> を得ることができます。
|
||||
このマシン ID は、最初に見つかったイーサネットカードの MAC アドレスをベースに生成されます。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /localdir/Files/SystemFiles/Installation/Binaries/Linux</userinput>
|
||||
&prompt.root; <userinput>mathinfo</userinput>
|
||||
disco.example.com 7115-70839-20412</screen>
|
||||
|
||||
<para>電子メールや電話, FAXなどでWolfram に登録する時にはこの
|
||||
<quote>マシン ID</quote> を渡します.
|
||||
するといくつかの数字から構成されるパスワードが返されるので,
|
||||
<para>電子メールや電話、FAX などで Wolfram に登録する時にはこの
|
||||
<quote>マシン ID</quote> を渡します。
|
||||
するといくつかの数字から構成されるパスワードが返されるので、
|
||||
他の Mathematica プラットホームでするのと全く同じように最初に
|
||||
Mathematica を立ち上げる時にその情報を入力します.</para>
|
||||
Mathematica を立ち上げる時にその情報を入力します。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>ネットワーク経由での Mathematica フロントエンドの起動</title>
|
||||
|
||||
<para>
|
||||
Mathematica は標準フォントセットにない特別な記号 (積分記号, 総和記号,
|
||||
ギリシャ文字など) を表示するために特殊なフォントを使用します.
|
||||
X プロトコルは,
|
||||
これらのフォントが<emphasis>ローカルマシンに</emphasis>インストールされていることを要求します.
|
||||
これはつまり, ローカルマシンに (CD-ROM や Mathematica
|
||||
がインストールされているホストマシンから) そのフォントをコピーしなければならないということです.
|
||||
これらのフォントは通常, CD-ROM の
|
||||
<filename>/cdrom/Unix/Files/SystemFiles/Fonts</filename> か, もしくはハードディスクの
|
||||
Mathematica は標準フォントセットにない特別な記号 (積分記号、総和記号、
|
||||
ギリシャ文字など) を表示するために特殊なフォントを使用します。
|
||||
X プロトコルは、
|
||||
これらのフォントが<emphasis>ローカルマシンに</emphasis>インストールされていることを要求します。
|
||||
これはつまり、ローカルマシンに (CD-ROM や Mathematica
|
||||
がインストールされているホストマシンから) そのフォントをコピーしなければならないということです。
|
||||
これらのフォントは通常、CD-ROM の
|
||||
<filename>/cdrom/Unix/Files/SystemFiles/Fonts</filename> か、もしくはハードディスクの
|
||||
<filename>/usr/local/mathematica/SystemFiles/Fonts</filename>
|
||||
に置かれており, 実際に使用されるフォントは <filename>Type1</filename> と
|
||||
<filename>X</filename> のサブディレクトリに格納されています.
|
||||
これらを利用するには次のような二つ方法があります.</para>
|
||||
に置かれており、実際に使用されるフォントは <filename>Type1</filename> と
|
||||
<filename>X</filename> のサブディレクトリに格納されています。
|
||||
これらを利用するには次のような二つ方法があります。</para>
|
||||
|
||||
<para>一つは, フォントファイルをすべて
|
||||
<para>一つは、フォントファイルをすべて
|
||||
<filename>/usr/X11R6/lib/X11/fonts/</filename>
|
||||
以下にある既存のフォントディレクトリにコピーする方法です.
|
||||
この場合, <filename>fonts.dir</filename> にフォント名を追加し,
|
||||
先頭行のフォント総数を変更することも必要になります.
|
||||
あるいは, フォントをコピーしたディレクトリで
|
||||
<command>mkfontdir</command> を実行するだけでもかまいません.</para>
|
||||
以下にある既存のフォントディレクトリにコピーする方法です。
|
||||
この場合、<filename>fonts.dir</filename> にフォント名を追加し、
|
||||
先頭行のフォント総数を変更することも必要になります。
|
||||
あるいは、フォントをコピーしたディレクトリで
|
||||
<command>mkfontdir</command> を実行するだけでもかまいません。</para>
|
||||
|
||||
<para>もう一つの方法は,
|
||||
<para>もう一つの方法は、
|
||||
<filename>/usr/X11R6/lib/X11/fonts/</filename>
|
||||
にフォントディレクトリごとコピーする方法です.</para>
|
||||
にフォントディレクトリごとコピーする方法です。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd /usr/X11R6/lib/X11/fonts</userinput>
|
||||
&prompt.root; <userinput>mkdir X</userinput>
|
||||
|
@ -379,21 +379,21 @@ disco.example.com 7115-70839-20412</screen>
|
|||
&prompt.root; <userinput>cd ../MathType1</userinput>
|
||||
&prompt.root; <userinput>mkfontdir</userinput</screen>
|
||||
|
||||
<para>そして, フォントパスに新しいフォントディレクトリを追加します.</para>
|
||||
<para>そして、フォントパスに新しいフォントディレクトリを追加します。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/X</userinput>
|
||||
&prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/MathType1</userinput>
|
||||
&prompt.root; <userinput>xset fp rehash</userinput></screen>
|
||||
|
||||
<para>XFree86 サーバを使用しているなら,
|
||||
<filename>/etc/XF86Config</filename> に加えることでこれらのフォントを自動的に読み込むことができます.</para>
|
||||
<para>XFree86 サーバを使用しているなら、
|
||||
<filename>/etc/XF86Config</filename> に加えることでこれらのフォントを自動的に読み込むことができます。</para>
|
||||
|
||||
<para>
|
||||
<filename>/usr/X11R6/lib/X11/fonts/Type1</filename> という
|
||||
ディレクトリが<emphasis>存在していない</emphasis>場合には,
|
||||
ディレクトリが<emphasis>存在していない</emphasis>場合には、
|
||||
上記例の <filename>MathType1</filename> を
|
||||
<filename>Type1</filename>
|
||||
とすることができます.</para>
|
||||
とすることができます。</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
|
@ -406,51 +406,51 @@ disco.example.com 7115-70839-20412</screen>
|
|||
<sect2>
|
||||
<title>はじめに</title>
|
||||
<para>このドキュメントでは Oracle 8.0.5 と Oracle 8.0.5.1 Enterprise Edition
|
||||
の Linux 版を FreeBSD にインストールするための手順を解説します.</para>
|
||||
の Linux 版を FreeBSD にインストールするための手順を解説します。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Linux 環境のインストール</title>
|
||||
|
||||
<para>まずは Ports Collection から <filename>linux_base</filename> と
|
||||
<filename>linux_devtools</filename> をインストールしてください.
|
||||
これらの ports は FreeBSD 3.2 のリリース後にコレクションに加えられました.
|
||||
<filename>linux_devtools</filename> をインストールしてください。
|
||||
これらの ports は FreeBSD 3.2 のリリース後にコレクションに加えられました。
|
||||
もし FreeBSD 3.2 もしくはそれよりも古いものを使っている場合は
|
||||
ports コレクションをアップデートしましょう. ついでに FreeBSD
|
||||
をアップデートするのもいいでしょう. もし <filename>linux_base-6.1</filename>
|
||||
ports コレクションをアップデートしましょう。ついでに FreeBSD
|
||||
をアップデートするのもいいでしょう。もし <filename>linux_base-6.1</filename>
|
||||
や <filename>linux_devtools-6.1</filename> でうまくいかなければ
|
||||
5.2 を試してみてください.</para>
|
||||
5.2 を試してみてください。</para>
|
||||
|
||||
<para>もし賢いエージェント (intelligent agent) を起動したいなら
|
||||
Red Hat TCL パッケージ <filename>tcl-8.0.3-20.i386.rpm</filename>
|
||||
もインストールする必要があるでしょう.
|
||||
公式の RPM パッケージをインストールするには一般的に次のようにします.</para>
|
||||
もインストールする必要があるでしょう。
|
||||
公式の RPM パッケージをインストールするには一般的に次のようにします。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm <replaceable>package</replaceable></userinput></screen>
|
||||
|
||||
<para>パッケージのインストール時にエラーが出てはいけません.</para>
|
||||
<para>パッケージのインストール時にエラーが出てはいけません。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Oracle 環境の構築</title>
|
||||
|
||||
<para>Oracleをインストールする前に, 適切な環境を設定する必要があります.
|
||||
このドキュメントでは,
|
||||
<para>Oracleをインストールする前に、適切な環境を設定する必要があります。
|
||||
このドキュメントでは、
|
||||
Oracle のインストールガイドに書いてあるようなことではなく
|
||||
FreeBSD で Linux 用 Oracle
|
||||
を動かすために<emphasis>特別に</emphasis>必要なことのみを解説します.</para>
|
||||
を動かすために<emphasis>特別に</emphasis>必要なことのみを解説します。</para>
|
||||
|
||||
<sect3 id="linuxemu-kernel-tuning">
|
||||
<title>カーネルのチューニング</title>
|
||||
|
||||
<para>Oracle インストールガイドにあるように,
|
||||
シェアードメモリーの最大サイズを設定しなければいけません.
|
||||
FreeBSD では <literal>SHMMAX</literal> を使わないようにしてください.
|
||||
<para>Oracle インストールガイドにあるように、
|
||||
シェアードメモリーの最大サイズを設定しなければいけません。
|
||||
FreeBSD では <literal>SHMMAX</literal> を使わないようにしてください。
|
||||
<literal>SHMMAX</literal> は単に <literal>SHMMAXPGS</literal>
|
||||
と <literal>PGSIZE</literal> から計算されるだけなのです.
|
||||
従って, <literal>SHMMAXPGS</literal> を使うようにしましょう.
|
||||
インストールガイドに記述されている他のオプションは使えます.
|
||||
例えば以下のようにします.</para>
|
||||
と <literal>PGSIZE</literal> から計算されるだけなのです。
|
||||
従って、<literal>SHMMAXPGS</literal> を使うようにしましょう。
|
||||
インストールガイドに記述されている他のオプションは使えます。
|
||||
例えば以下のようにします。</para>
|
||||
|
||||
<programlisting>options SHMMAXPGS=10000
|
||||
options SHMMNI=100
|
||||
|
@ -459,10 +459,10 @@ options SEMMNS=200
|
|||
options SEMMNI=70
|
||||
options SEMMSL=61</programlisting>
|
||||
|
||||
<para>これらのオプションを意図した Oracle の使い方に合わせて設定してください.</para>
|
||||
<para>これらのオプションを意図した Oracle の使い方に合わせて設定してください。</para>
|
||||
|
||||
<para>また,
|
||||
次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します.</para>
|
||||
<para>また、
|
||||
次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します。</para>
|
||||
|
||||
<programlisting>options SYSVSHM #SysV shared memory
|
||||
options SYSVSEM #SysV semaphores
|
||||
|
@ -473,17 +473,17 @@ options SYSVMSG #SysV interprocess communication</programlisting>
|
|||
|
||||
<title>Oracle 用アカウント</title>
|
||||
|
||||
<para>他のアカウントを作るのと同じように Oracle 用のアカウントを作ります.
|
||||
Oracle 用のアカウントに特別なのは Linux のシェルを割り当てるところだけです.
|
||||
<para>他のアカウントを作るのと同じように Oracle 用のアカウントを作ります。
|
||||
Oracle 用のアカウントに特別なのは Linux のシェルを割り当てるところだけです。
|
||||
<filename>/etc/shells</filename> に <literal>/compat/linux/bin/bash</literal>
|
||||
を加え, Oracle 用のアカウントに設定します.</para>
|
||||
を加え、Oracle 用のアカウントに設定します。</para>
|
||||
</sect3>
|
||||
|
||||
<sect3 id="linuxemu-environment">
|
||||
<title>環境設定</title>
|
||||
|
||||
<para><envar>ORACLE_HOME</envar> や <envar>ORACLE_SID</envar>
|
||||
といった通常の Oracle 用の変数の他に次の変数も設定しなければなりません.</para>
|
||||
といった通常の Oracle 用の変数の他に次の変数も設定しなければなりません。</para>
|
||||
|
||||
<informaltable frame="none">
|
||||
<tgroup cols="2">
|
||||
|
@ -525,8 +525,8 @@ $ORACLE_HOME/bin</literal></entry>
|
|||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<para>全ての環境変数は <filename>.profile</filename> で設定することをお勧めします.
|
||||
完璧なサンプルは以下の通りです.</para>
|
||||
<para>全ての環境変数は <filename>.profile</filename> で設定することをお勧めします。
|
||||
完璧なサンプルは以下の通りです。</para>
|
||||
|
||||
<programlisting>ORACLE_BASE=/oracle; export ORACLE_BASE
|
||||
ORACLE_HOME=/oracle; export ORACLE_HOME
|
||||
|
@ -544,17 +544,17 @@ export PATH</programlisting>
|
|||
<sect2>
|
||||
<title>Oracle のインストール</title>
|
||||
|
||||
<para>インストーラーを起動する前に, <filename>/var/tmp</filename>
|
||||
に <filename>.oracle</filename> という名前のディレクトリを作る必要がありますが,
|
||||
これは Linux エミュレーターにおけるちょっとした不整合のためです.
|
||||
このディレクトリは誰でもが書けるか, もしくは oracle ユーザーのものにしておきます.
|
||||
これで特に問題なく Oracle がインストールできるでしょう.
|
||||
もし問題が起こったら, まずは Oracle の配布物や設定をチェックしてください.
|
||||
Oracle のインストールが終わったら次の二つのサブセクションで解説するパッチを当てます.</para>
|
||||
<para>インストーラーを起動する前に、<filename>/var/tmp</filename>
|
||||
に <filename>.oracle</filename> という名前のディレクトリを作る必要がありますが、
|
||||
これは Linux エミュレーターにおけるちょっとした不整合のためです。
|
||||
このディレクトリは誰でもが書けるか、もしくは oracle ユーザーのものにしておきます。
|
||||
これで特に問題なく Oracle がインストールできるでしょう。
|
||||
もし問題が起こったら、まずは Oracle の配布物や設定をチェックしてください。
|
||||
Oracle のインストールが終わったら次の二つのサブセクションで解説するパッチを当てます。</para>
|
||||
|
||||
<para>よくあるトラブルは, TCP プロトコルアダプターが正しくインストールされていないことです.
|
||||
そのため, 一切 TCP リスナーを起動することができないのです.
|
||||
次の操作はこの問題を解決するのに役立ちます.</para>
|
||||
<para>よくあるトラブルは、TCP プロトコルアダプターが正しくインストールされていないことです。
|
||||
そのため、一切 TCP リスナーを起動することができないのです。
|
||||
次の操作はこの問題を解決するのに役立ちます。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>cd $ORACLE_HOME/network/lib</userinput>
|
||||
&prompt.root; <userinput>make -f ins_network.mk ntcontab.o</userinput>
|
||||
|
@ -568,13 +568,13 @@ export PATH</programlisting>
|
|||
<sect3 id="linuxemu-patch-root">
|
||||
<title>root.sh へのパッチ</title>
|
||||
|
||||
<para>Oracle をインストールする時, <username>root</username>
|
||||
<para>Oracle をインストールする時、<username>root</username>
|
||||
で行なう必要のあるいくつかの操作は <filename>root.sh</filename>
|
||||
と呼ばれるシェルスクリプトに記録されます.
|
||||
と呼ばれるシェルスクリプトに記録されます。
|
||||
<filename>root.sh</filename> は <filename>orainst</filename>
|
||||
ディレクトリにあります. 次のパッチを root.sh に当てて
|
||||
正しい場所にある chown コマンドを使うようにするか,
|
||||
代わりに Linux ネイティブなシェルのもとでスクリプトを走らせましょう.</para>
|
||||
ディレクトリにあります。次のパッチを root.sh に当てて
|
||||
正しい場所にある chown コマンドを使うようにするか、
|
||||
代わりに Linux ネイティブなシェルのもとでスクリプトを走らせましょう。</para>
|
||||
|
||||
<programlisting>*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998
|
||||
--- orainst/root.sh Mon Dec 28 15:58:53 1998
|
||||
|
@ -595,17 +595,17 @@ export PATH</programlisting>
|
|||
# Define variables to be used in this script</programlisting>
|
||||
|
||||
<para>CD-ROM からのインストールでない場合は <filename>root.sh</filename>
|
||||
のソースにパッチを当ててもいいでしょう.
|
||||
のソースにパッチを当ててもいいでしょう。
|
||||
<filename>rthd.sh</filename> という名前でソースツリーの
|
||||
<filename>orainst</filename> というディレクトリにあります.</para>
|
||||
<filename>orainst</filename> というディレクトリにあります。</para>
|
||||
</sect3>
|
||||
|
||||
<sect3 id="linuxemu-patch-tcl">
|
||||
<title>genclntsh へのパッチ</title>
|
||||
|
||||
<para>genclntsh スクリプトは一つの共有クライアントライブラリを生成するのに用いられます.
|
||||
これはデモを作る時に使われます.
|
||||
PATH の定義をコメントアウトするために次のパッチを当ててください.</para>
|
||||
<para>genclntsh スクリプトは一つの共有クライアントライブラリを生成するのに用いられます。
|
||||
これはデモを作る時に使われます。
|
||||
PATH の定義をコメントアウトするために次のパッチを当ててください。</para>
|
||||
|
||||
<programlisting>*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998
|
||||
--- bin/genclntsh Tue Dec 22 15:36:49 1998
|
||||
|
@ -630,153 +630,153 @@ export PATH</programlisting>
|
|||
<sect2>
|
||||
<title>Oracle の起動</title>
|
||||
|
||||
<para>インストラクションに従えば, Linux でと同じように
|
||||
Oracle を起動できるでしょう.</para>
|
||||
<para>インストラクションに従えば、Linux でと同じように
|
||||
Oracle を起動できるでしょう。</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>高度なトピックス</title>
|
||||
|
||||
<para>Linux バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください.
|
||||
<para>Linux バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください。
|
||||
以下の文章で説明されていることのほとんどは &a.chat; に投稿された
|
||||
Terry Lambert (<email>tlambert@primenet.com</email>) 氏のメール
|
||||
(Message ID: <literal><199906020108.SAA07001@usr09.primenet.com></literal>).
|
||||
をもとにしています.</para>
|
||||
(Message ID: <literal><199906020108.SAA07001@usr09.primenet.com></literal>)
|
||||
をもとにしています。</para>
|
||||
|
||||
<sect2>
|
||||
<title>どのように動くのでしょう?</title>
|
||||
|
||||
<para>FreeBSD は, “実行クラスローダ(execution class loader)”
|
||||
と呼ばれる抽象的な機構を持っています. これは &man.execve.2
|
||||
システムコールへの楔という形で実装されています.
|
||||
<para>FreeBSD は、“実行クラスローダ (execution class loader) ”
|
||||
と呼ばれる抽象的な機構を持っています。これは &man.execve.2
|
||||
システムコールへの楔という形で実装されています。
|
||||
</para>
|
||||
|
||||
<para>FreeBSD は, シェルインタプリタやシェルスクリプトを実行するための
|
||||
<literal>#!</literal> ローダを持った単一のプログラムローダではなく,
|
||||
ローダのリストを持っているのです.
|
||||
<para>FreeBSD は、シェルインタプリタやシェルスクリプトを実行するための
|
||||
<literal>#!</literal> ローダを持った単一のプログラムローダではなく、
|
||||
ローダのリストを持っているのです。
|
||||
</para>
|
||||
|
||||
<para>歴史的には, UNIX プラットフォーム上の唯一のローダーがマジックナンバー
|
||||
<para>歴史的には、UNIX プラットフォーム上の唯一のローダーがマジックナンバー
|
||||
(一般的にはファイルの先頭の 4 ないし 8 バイトの部分)
|
||||
の検査を行ないシステムで実行できるバイナリかどうかを検査し,
|
||||
もしそうならバイナリローダーを呼び出すというようになっていました.</para>
|
||||
の検査を行ないシステムで実行できるバイナリかどうかを検査し、
|
||||
もしそうならバイナリローダーを呼び出すというようになっていました。</para>
|
||||
|
||||
<para>もし, そのシステム用のバイナリでない場合には,
|
||||
&man.execve.2; システムコールの呼び出しは失敗の戻り値を返し,
|
||||
シェルがシェルコマンドとして実行しようと試みていたわけです.
|
||||
<para>もし、そのシステム用のバイナリでない場合には、
|
||||
&man.execve.2; システムコールの呼び出しは失敗の戻り値を返し、
|
||||
シェルがシェルコマンドとして実行しようと試みていたわけです。
|
||||
</para>
|
||||
|
||||
<para>この仮定は<quote>現在利用しているシェルがどのようなものであっても</quote>変わりません.</para>
|
||||
<para>この仮定は<quote>現在利用しているシェルがどのようなものであっても</quote>変わりません。</para>
|
||||
|
||||
<para>後に &man.sh.1; に変更が加えられ, 先頭の 2 バイトを検査した結果
|
||||
<literal>:\n</literal> であれば代わりに &man.csh.1; を呼び出す,
|
||||
というようになりました(この変更は SCO が最初に行なったと思われます).</para>
|
||||
<para>後に &man.sh.1; に変更が加えられ、先頭の 2 バイトを検査した結果
|
||||
<literal>:\n</literal> であれば代わりに &man.csh.1; を呼び出す、
|
||||
というようになりました (この変更は SCO が最初に行なったと思われます)。</para>
|
||||
|
||||
<para>現在の FreeBSD は, プログラムローダリストを走査します.
|
||||
その際, 空白文字までの文字列をインタプリタとして認識する,
|
||||
通常の <literal>#!</literal> ローダを用いるため,
|
||||
該当するものが存在しなければ最終的に /bin/sh がロードされます.</para>
|
||||
<para>現在の FreeBSD は、プログラムローダリストを走査します。
|
||||
その際、空白文字までの文字列をインタプリタとして認識する、
|
||||
通常の <literal>#!</literal> ローダを用いるため、
|
||||
該当するものが存在しなければ最終的に /bin/sh がロードされます。</para>
|
||||
|
||||
<para>Linux ABI をサポートするため, FreeBSD は
|
||||
ELF バイナリを示すマジックナンバを確認します.
|
||||
(ただし, この段階では FreeBSD, Solaris, Linux, そしてその他の
|
||||
ELF イメージ形式を使っている OS を区別することはできません).</para>
|
||||
<para>Linux ABI をサポートするため、FreeBSD は
|
||||
ELF バイナリを示すマジックナンバを確認します。
|
||||
(ただし、この段階では FreeBSD、Solaris、Linux、そしてその他の
|
||||
ELF イメージ形式を使っている OS を区別することはできません)。</para>
|
||||
|
||||
<para>ELF ローダは, 特殊な<emphasis>マーク (brand)</emphasis> があるかどうか探します.
|
||||
このマークとは, ELF イメージのコメントセクションのことです.
|
||||
SVR4/Solaris の ELF バイナリには, このセクションは存在しません.</para>
|
||||
<para>ELF ローダは、特殊な<emphasis>マーク (brand)</emphasis> があるかどうか探します。
|
||||
このマークとは、ELF イメージのコメントセクションのことです。
|
||||
SVR4/Solaris の ELF バイナリには、このセクションは存在しません。</para>
|
||||
|
||||
<para>Linux バイナリを実行するためには,
|
||||
<para>Linux バイナリを実行するためには、
|
||||
ELF バイナリに &man.brandelf.1; で説明されている
|
||||
<literal>Linux</literal> のマークが<emphasis>付けられて</emphasis>いなければなりません.</para>
|
||||
<literal>Linux</literal> のマークが<emphasis>付けられて</emphasis>いなければなりません。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen>
|
||||
|
||||
<para>上のようにすることで, 指定されたファイルは
|
||||
<literal>Linux</literal> のマークが付けられ,
|
||||
ELF ローダが認識できるようになります.</para>
|
||||
<para>上のようにすることで、指定されたファイルは
|
||||
<literal>Linux</literal> のマークが付けられ、
|
||||
ELF ローダが認識できるようになります。</para>
|
||||
|
||||
<para>ELF ローダが <literal>Linux</literal> マークを確認すると,
|
||||
<para>ELF ローダが <literal>Linux</literal> マークを確認すると、
|
||||
ローダは <literal>proc</literal> 構造体内の
|
||||
ある一つのポインタを置き換えます. システムコールは全て,
|
||||
ある一つのポインタを置き換えます。システムコールは全て、
|
||||
このポインタ (伝統的な UNIX システムではこれは構造体の配列 <literal>sysent[]</literal>
|
||||
で, システムコールが含まれています) を通してインデックスされます.
|
||||
さらに, そのプロセスには Linux カーネルモジュールに必要な
|
||||
シグナルトランポリンコード(訳注:
|
||||
シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や,
|
||||
他の(細かな)調整のための設定が行なわれます.</para>
|
||||
で、システムコールが含まれています) を通してインデックスされます。
|
||||
さらに、そのプロセスには Linux カーネルモジュールに必要な
|
||||
シグナルトランポリンコード (訳注:
|
||||
シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、
|
||||
他の (細かな) 調整のための設定が行なわれます。</para>
|
||||
|
||||
<para>Linux システムコールベクタは,
|
||||
<para>Linux システムコールベクタは、
|
||||
さまざまなデータに加えて <literal>sysent[]</literal>
|
||||
エントリーのリストを含んでおり, それらのアドレスはカーネルモジュール内にあります.</para>
|
||||
エントリーのリストを含んでおり、それらのアドレスはカーネルモジュール内にあります。</para>
|
||||
|
||||
<para>Linux バイナリがシステムコールを発行する際, トラップコードは
|
||||
<para>Linux バイナリがシステムコールを発行する際、トラップコードは
|
||||
<literal>proc</literal> 構造体を用いてシステムコール関数ポインタを
|
||||
解釈します. そして FreeBSD ではなく
|
||||
Linux 用のシステムコールエントリポイントを得るわけです.</para>
|
||||
解釈します。そして FreeBSD ではなく
|
||||
Linux 用のシステムコールエントリポイントを得るわけです。</para>
|
||||
|
||||
<para>さらに, Linux モードは状況に応じて<emphasis>ファイルシステム本来のルートマウントポイントを置き換えて</emphasis>ファイルの参照を行ないます.
|
||||
これは, <literal>union</literal> オプションを指定してマウントされたファイルシステム
|
||||
(unionfs では<emphasis>ありません!</emphasis>)が行なっていることと同じです.
|
||||
<para>さらに、Linux モードは状況に応じて<emphasis>ファイルシステム本来のルートマウントポイントを置き換えて</emphasis>ファイルの参照を行ないます。
|
||||
これは、<literal>union</literal> オプションを指定してマウントされたファイルシステム
|
||||
(unionfs では<emphasis>ありません!</emphasis>)が行なっていることと同じです。
|
||||
ファイルを検索する際にはまず
|
||||
<filename>/compat/linux/<replaceable>original-path</replaceable></filename>
|
||||
ディレクトリを, <emphasis>それから</emphasis>見つけられなかったときにのみ,
|
||||
ディレクトリを、<emphasis>それから</emphasis>見つけられなかったときにのみ、
|
||||
<filename>/<replaceable>original-path</replaceable></filename>
|
||||
を調べます.
|
||||
こうすることで, 他のバイナリを要求するバイナリの実行を可能にしています
|
||||
(したがって, Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです).
|
||||
またこれは, もし対応する Linux バイナリが存在しない場合に
|
||||
Linux バイナリが FreeBSD バイナリをロードしたり, 実行したりすることが可能であること,
|
||||
を調べます。
|
||||
こうすることで、他のバイナリを要求するバイナリの実行を可能にしています
|
||||
(したがって、Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです)。
|
||||
またこれは、もし対応する Linux バイナリが存在しない場合に
|
||||
Linux バイナリが FreeBSD バイナリをロードしたり、実行したりすることが可能であること、
|
||||
その Linux バイナリに自分自身が Linux 上で実行されていないことを
|
||||
気付かせないようにする目的で, &man.uname.1; コマンドを
|
||||
<filename>/compat/linux</filename> ディレクトリに置くことができる,
|
||||
ということを意味します.
|
||||
気付かせないようにする目的で、&man.uname.1; コマンドを
|
||||
<filename>/compat/linux</filename> ディレクトリに置くことができる、
|
||||
ということを意味します。
|
||||
</para>
|
||||
|
||||
<para>要するに, Linux カーネルが FreeBSD カーネルの内部に存在しているわけです.
|
||||
<para>要するに、Linux カーネルが FreeBSD カーネルの内部に存在しているわけです。
|
||||
カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は
|
||||
FreeBSD システムコールテーブルエントリと
|
||||
Linux システムコールテーブルエントリの両方で共通に利用されています.
|
||||
これらにはファイルシステム処理, 仮想メモリ処理, シグナル伝送, System V IPC
|
||||
などが含まれますが,
|
||||
Linux システムコールテーブルエントリの両方で共通に利用されています。
|
||||
これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、System V IPC
|
||||
などが含まれますが、
|
||||
FreeBSD バイナリは FreeBSD <emphasis>グルー</emphasis> (訳注: glue;
|
||||
二者の間を仲介するという意味) 関数群,
|
||||
そして Linux バイナリは Linux <emphasis>グルー</emphasis>関数群を用いる,
|
||||
という点だけが異なります(過去に存在したほとんどの OS は,
|
||||
自分自身のための<emphasis>グルー</emphasis>関数群しか備えていません.
|
||||
前述したように, システムコールを発行する際,
|
||||
各々のプロセスの <literal>proc</literal> 構造体内にある,
|
||||
ローダによって動的に初期化されるポインタを参照してアドレスを得る代わりに,
|
||||
二者の間を仲介するという意味) 関数群、
|
||||
そして Linux バイナリは Linux <emphasis>グルー</emphasis>関数群を用いる、
|
||||
という点だけが異なります (過去に存在したほとんどの OS は、
|
||||
自分自身のための<emphasis>グルー</emphasis>関数群しか備えていません。
|
||||
前述したように、システムコールを発行する際、
|
||||
各々のプロセスの <literal>proc</literal> 構造体内にある、
|
||||
ローダによって動的に初期化されるポインタを参照してアドレスを得る代わりに、
|
||||
静的でグローバルな <literal>sysent[]</literal> 構造体の配列に
|
||||
システムコール関数のアドレスが直接格納されているのです).</para>
|
||||
システムコール関数のアドレスが直接格納されているのです)。</para>
|
||||
|
||||
<para>さて, どちらを本来の FreeBSD ABI (訳注: Applications Binary Interface;
|
||||
<para>さて、どちらを本来の FreeBSD ABI (訳注: Applications Binary Interface;
|
||||
同じ CPU を利用したコンピュータ間でバイナリを共有するための規約のこと)
|
||||
と呼ぶべきなのでしょうか?
|
||||
実は, どちらが本来のものであるかということを論ずることに意味はありません.
|
||||
基本的に, FreeBSD <emphasis>グルー</emphasis>関数群はカーネルの中に静的にリンクされていて,
|
||||
Linux <emphasis>グルー</emphasis>関数群は静的にリンクすることも,
|
||||
カーネルモジュールを介して利用することもできるようになっている,
|
||||
という違いがあるだけ (ただしこれは現時点においての話であり,
|
||||
将来のリリースで変更される可能性がありますし,
|
||||
おそらく実際に変更されるでしょう) です.</para>
|
||||
実は、どちらが本来のものであるかということを論ずることに意味はありません。
|
||||
基本的に、FreeBSD <emphasis>グルー</emphasis>関数群はカーネルの中に静的にリンクされていて、
|
||||
Linux <emphasis>グルー</emphasis>関数群は静的にリンクすることも、
|
||||
カーネルモジュールを介して利用することもできるようになっている、
|
||||
という違いがあるだけ (ただしこれは現時点においての話であり、
|
||||
将来のリリースで変更される可能性がありますし、
|
||||
おそらく実際に変更されるでしょう) です。</para>
|
||||
|
||||
<para>あ, 「でもこれは本当にエミュレーションと呼べるのか」って?
|
||||
答えは「いいえ」です. これは ABI の実装であり,
|
||||
エミュレーションとは異なります. エミュレータが呼び出されているわけではありません
|
||||
(シミュレータでもないことをあらかじめ断っておきましょう).</para>
|
||||
<para>あ、「でもこれは本当にエミュレーションと呼べるのか」って?
|
||||
答えは「いいえ」です。これは ABI の実装であり、
|
||||
エミュレーションとは異なります。エミュレータが呼び出されているわけではありません
|
||||
(シミュレータでもないことをあらかじめ断っておきましょう)。</para>
|
||||
|
||||
<para>では, これがよく <quote>Linux エミュレーション</quote>と呼ばれるのは何故でしょうか?
|
||||
それはもちろん FreeBSD の売りにするため <!-- smiley -->8-) でもあるのですが,
|
||||
実際には, 次のような理由によります.
|
||||
この機能が初めて実装された頃,
|
||||
動作原理を説明する以外にこの機能を表現する言葉はありませんでした.
|
||||
しかし, コードをコンパイルしたりモジュールをロードしない場合,
|
||||
「FreeBSD 上で Linux バイナリを実行する」という表現は,
|
||||
厳密に考えると適切ではありません.
|
||||
そこで, その際にロードされているもの自身を表現する言葉—すなわち
|
||||
<quote>Linux エミュレータ</quote>が必要だったのです.</para>
|
||||
<para>では、これがよく <quote>Linux エミュレーション</quote>と呼ばれるのは何故でしょうか?
|
||||
それはもちろん FreeBSD の売りにするため <!-- smiley -->8-) でもあるのですが、
|
||||
実際には、次のような理由によります。
|
||||
この機能が初めて実装された頃、
|
||||
動作原理を説明する以外にこの機能を表現する言葉はありませんでした。
|
||||
しかし、コードをコンパイルしたりモジュールをロードしない場合、
|
||||
「FreeBSD 上で Linux バイナリを実行する」という表現は、
|
||||
厳密に考えると適切ではありません。
|
||||
そこで、その際にロードされているもの自身を表現する言葉 — すなわち
|
||||
<quote>Linux エミュレータ</quote>が必要だったのです。</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
|
@ -34,21 +34,21 @@
|
|||
<indexterm><primary>email</primary></indexterm>
|
||||
<indexterm><primary>電子メール</primary></indexterm>
|
||||
|
||||
<para>電子メール, emailとしてのほうが知られているでしょう,
|
||||
は現代で最も広く利用されているコミュニケーション手段の一つです.
|
||||
何百万人という人が毎日 email を使っており,
|
||||
この文章を偶然にもオンラインで読んでいるという人はこのカテゴリーに入るでしょうし,
|
||||
複数の email アドレスを持っていたりもするかもしれません.</para>
|
||||
<para>電子メール、email としてのほうが知られているでしょう、
|
||||
は現代で最も広く利用されているコミュニケーション手段の一つです。
|
||||
何百万人という人が毎日 email を使っており、
|
||||
この文章を偶然にもオンラインで読んでいるという人はこのカテゴリーに入るでしょうし、
|
||||
複数の email アドレスを持っていたりもするかもしれません。</para>
|
||||
|
||||
<para>電子メールの設定は多くの<link linkend="bibliography">システム管理</link>書籍のテーマになっています.
|
||||
もし自分のネットワーク用に一つメールホストを設定することよりもさらに高度なことをしようとするなら,
|
||||
しっかりとしたヘルプが必要でしょう.</para>
|
||||
<para>電子メールの設定は多くの<link linkend="bibliography">システム管理</link>書籍のテーマになっています。
|
||||
もし自分のネットワーク用に一つメールホストを設定することよりもさらに高度なことをしようとするなら、
|
||||
しっかりとしたヘルプが必要でしょう。</para>
|
||||
<indexterm><primary>DNS</primary></indexterm>
|
||||
|
||||
<para>email の設定におけるいくつかの部分は Domain Name System (DNS)
|
||||
の管理下にあります. 自分の DNS サーバーを立ち上げようと思っているなら,
|
||||
の管理下にあります。自分の DNS サーバーを立ち上げようと思っているなら、
|
||||
必ず <filename>/etc/namedb</filename> と
|
||||
<command>man -k named</command> を一通り読むようにしてください.</para>
|
||||
<command>man -k named</command> を一通り読むようにしてください。</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="mail-using">
|
||||
|
@ -56,28 +56,28 @@
|
|||
<indexterm><primary>POP</primary></indexterm>
|
||||
<indexterm><primary>IMAP</primary></indexterm>
|
||||
|
||||
<para>email の交換には 5 つの主要な部分があります.
|
||||
それらは <link linkend="mail-mua">ユーザープログラム</link>,
|
||||
<link linkend="mail-mta">サーバーデーモン</link>,
|
||||
<link linkend="mail-dns">DNS</link>,
|
||||
<link linkend="mail-receive">POP もしくは IMAP のデーモン</link>,
|
||||
そしてもちろん <link linkend="mail-host">メールホスト</link>です.</para>
|
||||
<para>email の交換には 5 つの主要な部分があります。
|
||||
それらは <link linkend="mail-mua">ユーザープログラム</link>、
|
||||
<link linkend="mail-mta">サーバーデーモン</link>、
|
||||
<link linkend="mail-dns">DNS</link>、
|
||||
<link linkend="mail-receive">POP もしくは IMAP のデーモン</link>、
|
||||
そしてもちろん <link linkend="mail-host">メールホスト</link>です。</para>
|
||||
|
||||
<sect2 id="mail-mua">
|
||||
<title>ユーザープログラム</title>
|
||||
|
||||
<para>いくつか名前を挙げれば,
|
||||
<application>mutt</application>, <application>pine</application>,
|
||||
<application>elm</application>, そして
|
||||
<application>mail</application>,
|
||||
<para>いくつか名前を挙げれば、
|
||||
<application>mutt</application>、<application>pine</application>、
|
||||
<application>elm</application>、そして
|
||||
<application>mail</application>、
|
||||
といったコマンドラインプログラムや
|
||||
<application>balsa</application>,
|
||||
<application>balsa</application>、
|
||||
<application>xfmail</application> のような
|
||||
GUI プログラム, WWW ブラウザーのようにさらに<quote>洗練された</quote>ものまであります.
|
||||
これらのプログラムは, email の処理を
|
||||
GUI プログラム、WWW ブラウザーのようにさらに<quote>洗練された</quote>ものまであります。
|
||||
これらのプログラムは、email の処理を
|
||||
<link linkend="mail-mta">server daemons</link> を呼び出したり
|
||||
TCP 経由で渡したり, といった手段でローカルの
|
||||
<link linkend="mail-host"><quote>メールホスト</quote></link>に任せるだけです.</para>
|
||||
TCP 経由で渡したり、といった手段でローカルの
|
||||
<link linkend="mail-host"><quote>メールホスト</quote></link>に任せるだけです。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="mail-mta">
|
||||
|
@ -99,41 +99,41 @@
|
|||
<secondary><application>exim</application></secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>通常, これは <application>sendmail</application>
|
||||
(FreeBSD のデフォルト) や <application>qmail</application>,
|
||||
<application>postfix</application>, もしくは
|
||||
<para>通常、これは <application>sendmail</application>
|
||||
(FreeBSD のデフォルト) や <application>qmail</application>、
|
||||
<application>postfix</application>、もしくは
|
||||
<application>exim</application>
|
||||
といった他のメールサーバーデーモンの一つです.
|
||||
他にもあるのですが、以上のものが広く使われています.</para>
|
||||
といった他のメールサーバーデーモンの一つです。
|
||||
他にもあるのですが、以上のものが広く使われています。</para>
|
||||
|
||||
<para>サーバーデーモンは通常 2 つの機能 —
|
||||
やってくるメールを受け取るのと出ていくメールを配送する,
|
||||
を持っています. メールを読むために POP や IMAP で接続する,
|
||||
ということはできません.
|
||||
そのためにはもう一つ<link linkend="mail-receive">デーモン</link>が必要なのです.</para>
|
||||
やってくるメールを受け取るのと出ていくメールを配送する、
|
||||
を持っています。メールを読むために POP や IMAP で接続する、
|
||||
ということはできません。
|
||||
そのためにはもう一つ<link linkend="mail-receive">デーモン</link>が必要なのです。</para>
|
||||
|
||||
<para>いくつかの古いバージョンの <application>sendmail</application>
|
||||
には深刻なセキュリティー問題がありますが,
|
||||
現在のバージョンを使っているおれば特に問題ないことに注意してください.
|
||||
例のごとく,
|
||||
どんなソフトウェアを利用する時にも最新の状態にしておくのが大事なのです.</para>
|
||||
には深刻なセキュリティー問題がありますが、
|
||||
現在のバージョンを使っているおれば特に問題ないことに注意してください。
|
||||
例のごとく、
|
||||
どんなソフトウェアを利用する時にも最新の状態にしておくのが大事なのです。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="mail-dns">
|
||||
<title>Email and DNS</title>
|
||||
|
||||
<para>Domain Name System (DNS) とそのデーモンである
|
||||
<command>named</command> は email の配送において大変重要な役割を担ってます.
|
||||
あなたのサイトからもう一つのサイトへメールを配送するためには,
|
||||
サーバーデーモンは DNS からそのサイトを探し,
|
||||
メールの受け取り先のホストを決定します.</para>
|
||||
<command>named</command> は email の配送において大変重要な役割を担ってます。
|
||||
あなたのサイトからもう一つのサイトへメールを配送するためには、
|
||||
サーバーデーモンは DNS からそのサイトを探し、
|
||||
メールの受け取り先のホストを決定します。</para>
|
||||
|
||||
<para>メールがあなたに送られた場合にも同じような仕組みになっています.
|
||||
DNS にはホスト名と IP アドレス, ホスト名とメールホストをマッピングするデータベースがあります.
|
||||
IP アドレスは A レコードで指定されます.
|
||||
MX (Mail eXchanger) レコードはあなた宛のメールを受け取るホストを指定します.
|
||||
あなたのホスト名に対する MX レコードがない場合には,
|
||||
メールは直接あなたのホストに配送されます.</para>
|
||||
<para>メールがあなたに送られた場合にも同じような仕組みになっています。
|
||||
DNS にはホスト名と IP アドレス、ホスト名とメールホストをマッピングするデータベースがあります。
|
||||
IP アドレスは A レコードで指定されます。
|
||||
MX (Mail eXchanger) レコードはあなた宛のメールを受け取るホストを指定します。
|
||||
あなたのホスト名に対する MX レコードがない場合には、
|
||||
メールは直接あなたのホストに配送されます。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="mail-receive">
|
||||
|
@ -143,26 +143,26 @@
|
|||
<secondary>受け取り</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>メールはメールホストが受け取ります.
|
||||
このホストは送られてきたメールを集め,
|
||||
(ユーザーが) 読んだりピックアップしたりするために保存します.
|
||||
保存されているメールをピックアップするにはメールホストに接続する必要があります.
|
||||
これは POP や IMAP を用いて行なわれます.
|
||||
メールホスト上で直接メールを読みたい時は POP や IMAP のサーバーは必要ありません.</para>
|
||||
<para>メールはメールホストが受け取ります。
|
||||
このホストは送られてきたメールを集め、
|
||||
(ユーザーが) 読んだりピックアップしたりするために保存します。
|
||||
保存されているメールをピックアップするにはメールホストに接続する必要があります。
|
||||
これは POP や IMAP を用いて行なわれます。
|
||||
メールホスト上で直接メールを読みたい時は POP や IMAP のサーバーは必要ありません。</para>
|
||||
|
||||
<indexterm><primary>POP</primary></indexterm>
|
||||
<indexterm><primary>IMAP</primary></indexterm>
|
||||
<para>POP や IMAP のサーバーを走らせるためには 2 つのことをやらなければいけません.</para>
|
||||
<para>POP や IMAP のサーバーを走らせるためには 2 つのことをやらなければいけません。</para>
|
||||
|
||||
<procedure>
|
||||
<step>
|
||||
<!-- XXX: kuriyama: English version points as /ports/mail.html. -->
|
||||
<!-- XXX: kuriyama: This should be related path. -->
|
||||
<para>POP や IMAP のデーモンを<ulink url="../ports/mail.html">ports コレクション</ulink>からインストールします.</para>
|
||||
<para>POP や IMAP のデーモンを<ulink url="../ports/mail.html">ports コレクション</ulink>からインストールします。</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><filename>/etc/inetd.conf</filename> を修正して POP や IMAP のサーバーが起動されるように設定します.</para>
|
||||
<para><filename>/etc/inetd.conf</filename> を修正して POP や IMAP のサーバーが起動されるように設定します。</para>
|
||||
</step>
|
||||
</procedure>
|
||||
</sect2>
|
||||
|
@ -171,8 +171,8 @@
|
|||
<title>メールホスト</title>
|
||||
<indexterm><primary>メールホスト</primary></indexterm>
|
||||
|
||||
<para>メールホストとは責任をもってメールを配送したり,
|
||||
あなたのホストや, もしかするネットワークも, に宛てたメールを受け取ったりするホストに与えられる名前です.</para>
|
||||
<para>メールホストとは責任をもってメールを配送したり、
|
||||
あなたのホストや、もしかするネットワークも、に宛てたメールを受け取ったりするホストに与えられる名前です。</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
|
@ -183,8 +183,8 @@
|
|||
<secondary>トラブルシューティング</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>ここには、いくつかのよく聞かれる質問とその答があります.
|
||||
それらは <ulink url="../FAQ/">FAQ</ulink> からこちらに移りました.</para>
|
||||
<para>ここには、いくつかのよく聞かれる質問とその答があります。
|
||||
それらは <ulink url="../FAQ/">FAQ</ulink> からこちらに移りました。</para>
|
||||
|
||||
<qandaset>
|
||||
<qandaentry>
|
||||
|
@ -193,27 +193,27 @@
|
|||
</question>
|
||||
|
||||
<answer>
|
||||
<para>恐らく, そのホストは実際には別のドメインにあるのでしょう.
|
||||
例えば <hostid role="fqdn">foo.bar.edu</hostid> ドメインにいて,
|
||||
<para>恐らく、そのホストは実際には別のドメインにあるのでしょう。
|
||||
例えば <hostid role="fqdn">foo.bar.edu</hostid> ドメインにいて、
|
||||
<hostid role="domainname">bar.edu</hostid> というドメイン内の
|
||||
<hostid>mumble</hostid> というホストにアクセスしたいとします.
|
||||
<hostid>mumble</hostid> というホストにアクセスしたいとします。
|
||||
この時は単に <hostid>mumble</hostid> ではなく
|
||||
<hostid role="fqdn">mumble.bar.edu</hostid> と FQDN で参照しなければなりません.</para>
|
||||
<hostid role="fqdn">mumble.bar.edu</hostid> と FQDN で参照しなければなりません。</para>
|
||||
|
||||
<indexterm><primary>BIND</primary></indexterm>
|
||||
<para>そもそも, BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが,
|
||||
<para>そもそも、BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが、
|
||||
FreeBSD に入っている最新版の <application>BIND</application>
|
||||
では自分のドメイン以外に対する FQDN でない省略形は許されません.
|
||||
では自分のドメイン以外に対する FQDN でない省略形は許されません。
|
||||
従ってホストを <hostid>mumble</hostid> と曖昧に指定した場合は
|
||||
<hostid role="fqdn">mumble.foo.bar.edu</hostid> という名前があればそれになり,
|
||||
そうでなければ root ドメインから検索されます.</para>
|
||||
<hostid role="fqdn">mumble.foo.bar.edu</hostid> という名前があればそれになり、
|
||||
そうでなければ root ドメインから検索されます。</para>
|
||||
|
||||
<para>これは,
|
||||
<para>これは、
|
||||
<hostid>mumble.bar.edu</hostid> と
|
||||
<hostid>mumble.edu</hostid>
|
||||
ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです.
|
||||
ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです。
|
||||
このような事が悪い例もしくはセキュリティホールとみなされる理由については
|
||||
RFC 1535 を見てください.</para>
|
||||
RFC 1535 を見てください。</para>
|
||||
|
||||
<para><filename>/etc/resolv.conf</filename> で
|
||||
|
||||
|
@ -223,42 +223,42 @@
|
|||
|
||||
<programlisting>search foo.bar.edu bar.edu</programlisting>
|
||||
|
||||
と書き換えることで上のようなことができます.
|
||||
しかし, RFC 1535 にあるように検索順序が<quote>内部 (local)
|
||||
と外部 (public) の管理の境界</quote>をまたがないようにしてください.</para>
|
||||
と書き換えることで上のようなことができます。
|
||||
しかし、RFC 1535 にあるように検索順序が<quote>内部 (local)
|
||||
と外部 (public) の管理の境界</quote>をまたがないようにしてください。</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>sendmail が <errorname>mail loops back to
|
||||
myself</errorname> というメッセージを出すのですが.</para>
|
||||
myself</errorname> というメッセージを出すのですが。</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>sendmail FAQ に次のように書いてあります.</para>
|
||||
<para>sendmail FAQ に次のように書いてあります。</para>
|
||||
|
||||
<programlisting>* <quote>Local configuration error</quote> というメッセージが出ます. 例えば,
|
||||
<programlisting>* <quote>Local configuration error</quote> というメッセージが出ます。例えば、
|
||||
|
||||
553 relay.domain.net config error: mail loops back to myself
|
||||
554 <user@domain.net>... Local configuration error
|
||||
|
||||
のような感じですが, どうしたら解決できますか?
|
||||
のような感じですが、どうしたら解決できますか?
|
||||
|
||||
これは, 例えば domain.net のようなドメイン宛てのメールを
|
||||
これは、例えば domain.net のようなドメイン宛てのメールを
|
||||
<literal>MX</literal> レコードで特定のホスト(ここでは
|
||||
relay.domain.net) に送ろうとしたのに,
|
||||
relay.domain.net) に送ろうとしたのに、
|
||||
そのホストでは domain.net
|
||||
宛てのメールを受け取れるような設定になっていない場合です.
|
||||
宛てのメールを受け取れるような設定になっていない場合です。
|
||||
設定の際に
|
||||
FEATURE(use_cw_file) を指定してある場合には
|
||||
/etc/sendmail.cw の中に domain.net を追加してください.
|
||||
もしくは, /etc/sendmail.cf の中に <quote>Cw domain.net</quote>
|
||||
を追加してください.</programlisting>
|
||||
/etc/sendmail.cw の中に domain.net を追加してください。
|
||||
もしくは、/etc/sendmail.cf の中に <quote>Cw domain.net</quote>
|
||||
を追加してください。</programlisting>
|
||||
|
||||
<para>sendmail FAQ は
|
||||
<filename>/usr/src/usr.sbin/sendmail</filename> にありますので,
|
||||
メールの設定に<quote>おかしなこと</quote>があれば常に読んでください.</para>
|
||||
<filename>/usr/src/usr.sbin/sendmail</filename> にありますので、
|
||||
メールの設定に<quote>おかしなこと</quote>があれば常に読んでください。</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
|
@ -269,90 +269,90 @@ FEATURE(use_cw_file)
|
|||
</question>
|
||||
|
||||
<answer>
|
||||
<para>LAN 上にある FreeBSD マシンを,
|
||||
インターネットに接続したいとします. FreeBSD マシンは, その
|
||||
LAN でのメールゲートウェイになります. FreeBSD
|
||||
<para>LAN 上にある FreeBSD マシンを、
|
||||
インターネットに接続したいとします。FreeBSD マシンは、その
|
||||
LAN でのメールゲートウェイになります。FreeBSD
|
||||
マシンは専用線接続ではありません
|
||||
(訳注:ダイアルアップ接続など).</para>
|
||||
(訳注: ダイアルアップ接続など)。</para>
|
||||
|
||||
<para>これには, 少なくとも二つの方法があります.</para>
|
||||
<para>これには、少なくとも二つの方法があります。</para>
|
||||
|
||||
<indexterm><primary>UUCP</primary></indexterm>
|
||||
<para>一つは UUCP を使うことです.</para>
|
||||
<para>一つは UUCP を使うことです。</para>
|
||||
|
||||
<para>このとき鍵になるのは, あなたのドメインに対するセカンダリ
|
||||
MX サービスを提供してくれるインターネットサイトをみつけることです.
|
||||
例えば以下のように.</para>
|
||||
<para>このとき鍵になるのは、あなたのドメインに対するセカンダリ
|
||||
MX サービスを提供してくれるインターネットサイトをみつけることです。
|
||||
例えば以下のように。</para>
|
||||
|
||||
<programlisting>bigco.com. MX 10 bigco.com.
|
||||
MX 20 smalliap.com.</programlisting>
|
||||
|
||||
<para>最終的なメール受信先としては,
|
||||
<para>最終的なメール受信先としては、
|
||||
一つのホストだけが定義されるべきです (bigco.com 上の
|
||||
<filename>/etc/sendmail.cf</filename> ファイルに, <literal>Cw
|
||||
bigco.com</literal> を追加します).</para>
|
||||
<filename>/etc/sendmail.cf</filename> ファイルに、<literal>Cw
|
||||
bigco.com</literal> を追加します)。</para>
|
||||
|
||||
<para>送信側の <command>sendmail</command> が,
|
||||
メールを配送しようとしている時, モデムの接続を
|
||||
介してあなたのところに接続しようとします. 大抵の場合,
|
||||
あなたのマシンがオンラインでないために, 接続はタイムアウト
|
||||
してしまうでしょう. <command>sendmail</command> は自動的に,
|
||||
<para>送信側の <command>sendmail</command> が、
|
||||
メールを配送しようとしている時、モデムの接続を
|
||||
介してあなたのところに接続しようとします。大抵の場合、
|
||||
あなたのマシンがオンラインでないために、接続はタイムアウト
|
||||
してしまうでしょう。<command>sendmail</command> は自動的に、
|
||||
メールをセカンダリの MX サイト に
|
||||
(あなたのインターネットプロバイダ) に配送します. セカンダリ MX
|
||||
サイトは, (<filename>/etc/rc.conf</filename> ファイル に
|
||||
(あなたのインターネットプロバイダ) に配送します。セカンダリ MX
|
||||
サイトは、(<filename>/etc/rc.conf</filename> ファイル に
|
||||
<literal>sendmail_flag = "-bd
|
||||
-q15m"</literal>と書かれている場合) 15 分ごとに,
|
||||
プライマリ MX サイトにメールを配送しようと,
|
||||
あなたのホストに接続しに いきます.</para>
|
||||
-q15m"</literal>と書かれている場合) 15 分ごとに、
|
||||
プライマリ MX サイトにメールを配送しようと、
|
||||
あなたのホストに接続しに いきます。</para>
|
||||
|
||||
<para>ログインスクリプトとして,
|
||||
このようなものを使うとよいでしょう. </para>
|
||||
<para>ログインスクリプトとして、
|
||||
このようなものを使うとよいでしょう。</para>
|
||||
|
||||
<programlisting>#!/bin/sh
|
||||
# Put me in /usr/local/bin/pppbigco
|
||||
( sleep 60 ; /usr/sbin/sendmail -q ) &
|
||||
/usr/sbin/ppp -direct pppbigco</programlisting>
|
||||
|
||||
<para>ユーザごとにログインスクリプトを作りたい場合には, 上記
|
||||
のスクリプトの代わりに, <command>sendmail
|
||||
-qRbigco.com</command> を使用する こともできます.
|
||||
このようにすると, キューの中の bigco.com に対する
|
||||
すべてのメールは, すぐに強制的に処理されます.</para>
|
||||
<para>ユーザごとにログインスクリプトを作りたい場合には、上記
|
||||
のスクリプトの代わりに、<command>sendmail
|
||||
-qRbigco.com</command> を使用する こともできます。
|
||||
このようにすると、キューの中の bigco.com に対する
|
||||
すべてのメールは、すぐに強制的に処理されます。</para>
|
||||
|
||||
<para>さらに, 次のような改良もできます.</para>
|
||||
<para>さらに、次のような改良もできます。</para>
|
||||
|
||||
<para>以下は, &a.isp;
|
||||
メイリングリストから抜粋してきたメッセージです. </para>
|
||||
<para>以下は、&a.isp;
|
||||
メイリングリストから抜粋してきたメッセージです。</para>
|
||||
|
||||
<programlisting>> 私たちはお客様に対して, セカンダリ MX を提供しています.
|
||||
> お客様は一日に何回か私たちのサービスに接続し, メールを彼らのプライマリ MX
|
||||
> に受け取ります (彼らのドメインに対するメールが到着した時には,
|
||||
> 私たちは彼らのサイトを呼び出しません).
|
||||
> 私たちの sendmail は, 30 分ごとにメールキューに溜っているメールを配送します.
|
||||
> ちょうどその時に, すべてのメールがプライマリ MX に送られたかどうかを確かめるためには,
|
||||
> 彼らは 30 分は オンラインでいなければなりません.
|
||||
<programlisting>> 私たちはお客様に対して、セカンダリ MX を提供しています。
|
||||
> お客様は一日に何回か私たちのサービスに接続し、メールを彼らのプライマリ MX
|
||||
> に受け取ります (彼らのドメインに対するメールが到着した時には、
|
||||
> 私たちは彼らのサイトを呼び出しません)。
|
||||
> 私たちの sendmail は、30 分ごとにメールキューに溜っているメールを配送します。
|
||||
> ちょうどその時に、すべてのメールがプライマリ MX に送られたかどうかを確かめるためには、
|
||||
> 彼らは 30 分は オンラインでいなければなりません。
|
||||
>
|
||||
> すべてのメールを今すぐ送るために sendmail を初期化するコマンドはあるでしょうか?
|
||||
> もちろん私たちのマシン上には, ユーザはルート (root) 権限を持っていません.
|
||||
> もちろん私たちのマシン上には、ユーザはルート (root) 権限を持っていません。
|
||||
|
||||
sendmail.cf の <quote>privacy flags</quote> セクションに,
|
||||
Opgoaway,restrictqrun の定義があります.
|
||||
sendmail.cf の <quote>privacy flags</quote> セクションに、
|
||||
Opgoaway,restrictqrun の定義があります。
|
||||
|
||||
root 以外のユーザがキューを処理できるようにするには,
|
||||
restrictqrun を削除してください. また, MX の再調整が必要かもしれません.
|
||||
あなたがたは, 顧客のサイトに対する一番優先度の高い MX なので,
|
||||
root 以外のユーザがキューを処理できるようにするには、
|
||||
restrictqrun を削除してください。また、MX の再調整が必要かもしれません。
|
||||
あなたがたは、顧客のサイトに対する一番優先度の高い MX なので、
|
||||
次のように定義します:
|
||||
|
||||
# If we are the best MX for a host, try directly instead of generating
|
||||
# local config error.
|
||||
OwTrue
|
||||
|
||||
このようにすると, リモートサイトからのメールが,
|
||||
顧客のマシンと接続しようとせず, 直接あなたがたのホストマシンに配送されるようになります.
|
||||
ホストマシンに配送されたメールは, 続いて顧客のマシンに送られます.
|
||||
これはホスト名にのみ有効なので, 顧客のメールマシンに,
|
||||
<quote>host.customer.com</quote> とは別に, <quote>customer.com</quote>も定義する必要があります.
|
||||
DNS 上で, <quote>customer.com</quote>に対する A レコードを定義してください.</programlisting>
|
||||
このようにすると、リモートサイトからのメールが、
|
||||
顧客のマシンと接続しようとせず、直接あなたがたのホストマシンに配送されるようになります。
|
||||
ホストマシンに配送されたメールは、続いて顧客のマシンに送られます。
|
||||
これはホスト名にのみ有効なので、顧客のメールマシンに、
|
||||
<quote>host.customer.com</quote> とは別に、<quote>customer.com</quote>も定義する必要があります。
|
||||
DNS 上で、<quote>customer.com</quote>に対する A レコードを定義してください。</programlisting>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
</qandaset>
|
||||
|
@ -361,8 +361,8 @@ DNS
|
|||
<sect1 id="mail-advanced">
|
||||
<title>先進的なトピックス</title>
|
||||
|
||||
<para>これからのセクションでは,
|
||||
メールの設定やドメイン全体のためのメールの設定といったさらに突込んだ話題について触れます.</para>
|
||||
<para>これからのセクションでは、
|
||||
メールの設定やドメイン全体のためのメールの設定といったさらに突込んだ話題について触れます。</para>
|
||||
|
||||
<sect2 id="mail-config">
|
||||
<title>基本事項</title>
|
||||
|
@ -371,51 +371,51 @@ DNS
|
|||
<secondary>設定</secondary>
|
||||
</indexterm>
|
||||
|
||||
<para>あなたのマシンに FreeBSD を普通にインストールして,
|
||||
<filename>/etc/resolv.conf</filename> ファイルを設定するか,
|
||||
またはネームサーバを走らせれば,
|
||||
他のホストへ電子メールを送ることができるようになります.
|
||||
あなたのホスト宛のメールを特定のホストに配送するようにしたい場合には,
|
||||
次の二つの方法があります.</para>
|
||||
<para>あなたのマシンに FreeBSD を普通にインストールして、
|
||||
<filename>/etc/resolv.conf</filename> ファイルを設定するか、
|
||||
またはネームサーバを走らせれば、
|
||||
他のホストへ電子メールを送ることができるようになります。
|
||||
あなたのホスト宛のメールを特定のホストに配送するようにしたい場合には、
|
||||
次の二つの方法があります。</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>自身でネームサーバーを実行し,
|
||||
自分のドメインを持つ. 例えば
|
||||
<hostid role="domainname">FreeBSD.org</hostid>.</para>
|
||||
<para>自身でネームサーバーを実行し、
|
||||
自分のドメインを持つ。例えば
|
||||
<hostid role="domainname">FreeBSD.org</hostid>。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>あなたのホストへ直接メールが配送されるようにする.
|
||||
<para>あなたのホストへ直接メールが配送されるようにする。
|
||||
これはメールがあなたのマシンの現在の
|
||||
DNS 名に直接配送されるようにすることにより実現できます.
|
||||
たとえば <hostid role="fqdn">example.FreeBSD.org</hostid>.</para>
|
||||
DNS 名に直接配送されるようにすることにより実現できます。
|
||||
たとえば <hostid role="fqdn">example.FreeBSD.org</hostid>。</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<indexterm><primary>SMTP</primary></indexterm>
|
||||
<para>上のどちらを選ぶ場合でも, 自分のホストに直接メールが配送されるようにするには恒久的
|
||||
(静的) な IP アドレス (動的な PPP ダイアルアップではない) を持っていなければなりません.
|
||||
もしファイアーウォールの中にいるならば, SMTP トラフィックが通過してくれないといけません.
|
||||
もし自分のホストでメールを受け取りたいならば,
|
||||
次の二つのうちの一つができていることを確認してください.</para>
|
||||
<para>上のどちらを選ぶ場合でも、自分のホストに直接メールが配送されるようにするには恒久的
|
||||
(静的) な IP アドレス (動的な PPP ダイアルアップではない) を持っていなければなりません。
|
||||
もしファイアーウォールの中にいるならば、SMTP トラフィックが通過してくれないといけません。
|
||||
もし自分のホストでメールを受け取りたいならば、
|
||||
次の二つのうちの一つができていることを確認してください。</para>
|
||||
|
||||
<itemizedlist>
|
||||
<indexterm><primary>MX レコード</primary></indexterm>
|
||||
<listitem>
|
||||
<para>自分のドメインでの MX レコードが自分のホストの
|
||||
IP アドレスを差していることを確認する.</para>
|
||||
IP アドレスを差していることを確認する。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>自分のドメインの中に自分のホスト用の MX がないことを確認する.</para>
|
||||
<para>自分のドメインの中に自分のホスト用の MX がないことを確認する。</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>上のどちらかが設定されていれば,
|
||||
自分のホストでメールを受け取ることができるでしょう.</para>
|
||||
<para>上のどちらかが設定されていれば、
|
||||
自分のホストでメールを受け取ることができるでしょう。</para>
|
||||
|
||||
<para>次のコマンドを実行してみてください.</para>
|
||||
<para>次のコマンドを実行してみてください。</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>hostname</userinput>
|
||||
example.FreeBSD.org
|
||||
|
@ -423,29 +423,29 @@ example.FreeBSD.org
|
|||
example.FreeBSD.org has address 204.216.27.XX</screen>
|
||||
|
||||
|
||||
<para>もしあなたのマシンが上記のメッセージだけを出力したならば,
|
||||
<para>もしあなたのマシンが上記のメッセージだけを出力したならば、
|
||||
<email>yourlogin@example.FreeBSD.org</email>
|
||||
へのメールは問題なく配送されるでしょう.</para>
|
||||
へのメールは問題なく配送されるでしょう。</para>
|
||||
|
||||
<para>上記のメッセージの代わりに, </para>
|
||||
<para>上記のメッセージの代わりに、</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>host example.FreeBSD.org</userinput>
|
||||
example.FreeBSD.org has address 204.216.27.XX
|
||||
example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org</screen>
|
||||
|
||||
<para>というメッセージが出力された場合は,
|
||||
<para>というメッセージが出力された場合は、
|
||||
あなたのホスト (<hostid role="fqdn">example.FreeBSD.org</hostid>)
|
||||
に宛てたメールは全て直接配送されずに <hostid>hub</hostid>
|
||||
上の同じユーザー名に配送されます.</para>
|
||||
上の同じユーザー名に配送されます。</para>
|
||||
|
||||
<para>上の情報は DNS サーバーが扱います.
|
||||
メールルーティング情報をもつ DNS レコードは,
|
||||
<emphasis>M</emphasis>ail e<emphasis>X</emphasis>change エントリーです.
|
||||
MX エントリが存在しない場合には, IP アドレスにしたがって,
|
||||
直接宛先ホストに配送されます.</para>
|
||||
<para>上の情報は DNS サーバーが扱います。
|
||||
メールルーティング情報をもつ DNS レコードは、
|
||||
<emphasis>M</emphasis>ail e<emphasis>X</emphasis>change エントリーです。
|
||||
MX エントリが存在しない場合には、IP アドレスにしたがって、
|
||||
直接宛先ホストに配送されます。</para>
|
||||
|
||||
<para><hostid role="fqdn">freefall.FreeBSD.org</hostid>
|
||||
の現時点での MX エントリは, 次のようになっています.</para>
|
||||
の現時点での MX エントリは、次のようになっています。</para>
|
||||
|
||||
<programlisting>freefall MX 30 mail.crl.net
|
||||
freefall MX 40 agora.rdrop.com
|
||||
|
@ -453,90 +453,90 @@ freefall MX 10 freefall.FreeBSD.org
|
|||
freefall MX 20 who.cdrom.com</programlisting>
|
||||
|
||||
<para><hostid>freefall</hostid> は多くの MX
|
||||
エントリを持っています. もっとも MX の値が小さいホストが最終的にメールを受け取ります.
|
||||
エントリを持っています。もっとも MX の値が小さいホストが最終的にメールを受け取ります。
|
||||
もし <hostid>freefall</hostid>
|
||||
が他の処理で忙しかったり, ダウンしているような場合には,
|
||||
他のホストが一時的にメールをキューにいれます.</para>
|
||||
が他の処理で忙しかったり、ダウンしているような場合には、
|
||||
他のホストが一時的にメールをキューにいれます。</para>
|
||||
|
||||
<para>使い勝手をよくするためには, 代替の MX サイトは, それぞれ
|
||||
別の経路でインターネットへ接続しているとよいでしょう.
|
||||
インターネットプロバイダまたは他の関連サイトが, このサービスを
|
||||
提供することができます.</para>
|
||||
<para>使い勝手をよくするためには、代替の MX サイトは、それぞれ
|
||||
別の経路でインターネットへ接続しているとよいでしょう。
|
||||
インターネットプロバイダまたは他の関連サイトが、このサービスを
|
||||
提供することができます。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="mail-domain">
|
||||
<title>あなたのドメインに対するメール設定</title>
|
||||
|
||||
<para><quote>メールホスト</quote> (メールサーバーとしても知られています)
|
||||
をセットアップするためには,
|
||||
いろいろなワークステーションに宛てた全てのメールを受ける必要があります.
|
||||
基本的には, あなたのドメイン (この場合だと
|
||||
をセットアップするためには、
|
||||
いろいろなワークステーションに宛てた全てのメールを受ける必要があります。
|
||||
基本的には、あなたのドメイン (この場合だと
|
||||
<hostid role="fqdn">*.FreeBSD.org</hostid>)
|
||||
宛ての全てのメールを<quote>ハイジャック</quote>し,
|
||||
そのメールをあなたのメールサーバーに配送し,
|
||||
ユーザーが POP を通じてあるいはサーバー上で直接, メールをチェックできるようにします.</para>
|
||||
宛ての全てのメールを<quote>ハイジャック</quote>し、
|
||||
そのメールをあなたのメールサーバーに配送し、
|
||||
ユーザーが POP を通じてあるいはサーバー上で直接、メールをチェックできるようにします。</para>
|
||||
|
||||
<indexterm><primary>DNS</primary></indexterm>
|
||||
<para>話を簡単にするために, あるユーザーのアカウントはどのマシンでも同じ<emphasis>ユーザー名</emphasis>にすべきです.
|
||||
そのためには <command>adduser</command> を使ってください.</para>
|
||||
<para>話を簡単にするために、あるユーザーのアカウントはどのマシンでも同じ<emphasis>ユーザー名</emphasis>にすべきです。
|
||||
そのためには <command>adduser</command> を使ってください。</para>
|
||||
|
||||
<para>使用する予定のメールホストは,
|
||||
<para>使用する予定のメールホストは、
|
||||
各ワークステーションごとにメール交換が
|
||||
できるように設定されていなければなりません. これは, DNS
|
||||
(すなわち BIND や named) の設定で次のように行なうことができます.</para>
|
||||
できるように設定されていなければなりません。これは、DNS
|
||||
(すなわち BIND や named) の設定で次のように行なうことができます。</para>
|
||||
|
||||
<programlisting>example.FreeBSD.org A 204.216.27.XX ; ワークステーション
|
||||
MX 10 hub.FreeBSD.org ; メールホスト</programlisting>
|
||||
|
||||
<para>これは, ワークステーションの A レコードがどこを指していようとも
|
||||
そのワークステーション宛てのメールをメールホストに転送する, というものです.</para>
|
||||
<para>これは、ワークステーションの A レコードがどこを指していようとも
|
||||
そのワークステーション宛てのメールをメールホストに転送する、というものです。</para>
|
||||
|
||||
<para>自前で DNS サーバを運用しているのでなければ,
|
||||
この作業は自分では行なえおこなえません. 自分で DNS
|
||||
サーバを運用しないとかできないという場合は,
|
||||
インターネットプロバイダ等に依頼して作業をおこなってもらってください.</para>
|
||||
<para>自前で DNS サーバを運用しているのでなければ、
|
||||
この作業は自分では行なえおこなえません。自分で DNS
|
||||
サーバを運用しないとかできないという場合は、
|
||||
インターネットプロバイダ等に依頼して作業をおこなってもらってください。</para>
|
||||
|
||||
<para>この作業により, このワークステーション宛のメールは, MX
|
||||
(メールエクスチェンジャ) ホストに送られるようになります. A
|
||||
レコードがどのマシンを指しているかどいうことには関係なく,
|
||||
メールは MX ホストに送られます.</para>
|
||||
<para>この作業により、このワークステーション宛のメールは、MX
|
||||
(メールエクスチェンジャ) ホストに送られるようになります。A
|
||||
レコードがどのマシンを指しているかどいうことには関係なく、
|
||||
メールは MX ホストに送られます。</para>
|
||||
|
||||
<para>もしバーチャル電子メールホストを運用するなら次の情報が役に立つでしょう.
|
||||
例として,あなたには自分のドメイン, ここでは
|
||||
<hostid role="domainname">customer1.org</hostid>,
|
||||
を持っている顧客がいるとしましょう.
|
||||
<para>もしバーチャル電子メールホストを運用するなら次の情報が役に立つでしょう。
|
||||
例として、あなたには自分のドメイン、ここでは
|
||||
<hostid role="domainname">customer1.org</hostid>、
|
||||
を持っている顧客がいるとしましょう。
|
||||
あなたは <hostid role="domainname">customer1.org</hostid> 宛ての全てのメールを
|
||||
<hostid role="fqdn">mail.myhost.com</hostid> という名前のメールホストに集めたいとします.
|
||||
DNS エントリーは次のようになるでしょう.</para>
|
||||
<hostid role="fqdn">mail.myhost.com</hostid> という名前のメールホストに集めたいとします。
|
||||
DNS エントリーは次のようになるでしょう。</para>
|
||||
|
||||
<programlisting>customer1.org MX 10 mail.myhost.com</programlisting>
|
||||
|
||||
<para>そのドメインに対して電子メールを送りたいだけなら, A
|
||||
レコードは必要ありません.</para>
|
||||
<para>そのドメインに対して電子メールを送りたいだけなら、A
|
||||
レコードは必要ありません。</para>
|
||||
|
||||
<note>
|
||||
<para>これは, <hostid role="domainname">customer1.org</hostid>
|
||||
に対して ping を実行しても,
|
||||
A レコードが存在しない限りうまくいかないことに留意しておいてください.</para>
|
||||
<para>これは、<hostid role="domainname">customer1.org</hostid>
|
||||
に対して ping を実行しても、
|
||||
A レコードが存在しない限りうまくいかないことに留意しておいてください。</para>
|
||||
</note>
|
||||
|
||||
<para>やらなければいけない最後のことは,
|
||||
<para>やらなければいけない最後のことは、
|
||||
メールホスト上の <application>sendmail</application>
|
||||
に対してどんあドメインやホスト宛のメールを受け取るのか,
|
||||
を教えることです. いくつかの方法がありますが次のどちらかでいいでしょう.</para>
|
||||
に対してどんあドメインやホスト宛のメールを受け取るのか、
|
||||
を教えることです。いくつかの方法がありますが次のどちらかでいいでしょう。</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>FEATURE(use_cw_file)</literal> を使っているなら,
|
||||
<filename>/etc/sendmail.cw</filename> ファイルにホストを加えます.
|
||||
<para><literal>FEATURE(use_cw_file)</literal> を使っているなら、
|
||||
<filename>/etc/sendmail.cw</filename> ファイルにホストを加えます。
|
||||
もし sendmail 8.10 かそれ以降のものであれば該当ファイルは
|
||||
<filename>/etc/mail/local-host-names</filename> です.</para>
|
||||
<filename>/etc/mail/local-host-names</filename> です。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><filename>/etc/sendmail.cf</filename> もしくは
|
||||
sendmail 8.10 以降なら <filename>/etc/mail/sendmail.cf</filename>
|
||||
といったファイルに <literal>Cwyour.host.com</literal> という行を加えます.</para>
|
||||
といったファイルに <literal>Cwyour.host.com</literal> という行を加えます。</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
|
|
Loading…
Reference in a new issue