diff --git a/ja_JP.eucJP/books/handbook/backups/chapter.sgml b/ja_JP.eucJP/books/handbook/backups/chapter.sgml index 8b0175b603..865053cfac 100644 --- a/ja_JP.eucJP/books/handbook/backups/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/backups/chapter.sgml @@ -1,978 +1,978 @@ バックアップ この章では この章ではデータのバックアップ方法とバックアップの作成に - 使われるプログラムについて扱います. + 使われるプログラムについて扱います。 テープメディア テープメディア(tape media) - 一般的なテープメディアには 4mm, 8mm, QIC, ミニカートリッジ, - DLT があります. + 一般的なテープメディアには 4mm、8mm、QIC、ミニカートリッジ、 + DLT があります。 4mm (DDS: Digital Data Storage) テープメディア(tape media) DDS (4mm) テープ テープメディア(tape media) QIC テープ 4mm テープはワークステーションのバックアップメディアとして - QIC から置き換えられつつあります. この傾向は - QICドライブの製造のリーダであった Archiveを Connerが買収し - QICドライブの製造を中止したことで加速しました. - 4mmドライブは小型で静かですが 8mm - ドライブの持っているような信頼性の評判はありません. - カートリッジは 8mmカートリッジよりも安価で小型 (3 x 2 x 0.5 - インチ; 76 x 51 x 12 mm) です. 4mmドライブ は - 8mm同様にヘリカルスキャン (訳注: - VTRと同様の回転ヘッドを使う方式) - を使用しているという理由でヘッドの寿命は短いです. + QIC から置き換えられつつあります。この傾向は + QIC ドライブの製造のリーダであった Archive を Conner が買収し + QIC ドライブの製造を中止したことで加速しました。 + 4mm ドライブは小型で静かですが 8mm + ドライブの持っているような信頼性の評判はありません。 + カートリッジは 8mm カートリッジよりも安価で小型 (3 x 2 x 0.5 + インチ; 76 x 51 x 12 mm) です。4mm ドライブ は + 8mm 同様にヘリカルスキャン (訳注: + VTR と同様の回転ヘッドを使う方式) + を使用しているという理由でヘッドの寿命は短いです。 これらのドライブのデータスループットは - 150kB/s程度から最大で500kB/s程度の範囲です. データ容量は - 1.3GBから 2.0GBです. ハードウェア圧縮が多くのドライブで可能で, - およそ 2倍の容量になります. - マルチドライブテープライブラリユニットは1つの筐体に - 6ドライブを持つことができ自動的にテープを交換します. - ライブラリの容量は 240GBに達します. - - 現在の DDS-3 規格では, 12GB (圧縮時 24GB) - までのテープ容量をサポートしています. + 150kB/s 程度から最大で 500kB/s 程度の範囲です。データ容量は + 1.3GB から 2.0GB です。ハードウェア圧縮が多くのドライブで可能で、 + およそ 2 倍の容量になります。 + マルチドライブテープライブラリユニットは 1 つの筐体に + 6 ドライブを持つことができ自動的にテープを交換します。 + ライブラリの容量は 240GB に達します。 + + 現在の DDS-3 規格では、12GB (圧縮時 24GB) + までのテープ容量をサポートしています。 - 4mmドライブは 8mmドライブ同様にヘリカルスキャンを使います. + 4mm ドライブは 8mm ドライブ同様にヘリカルスキャンを使います。 ヘリカルスキャンの利点と欠点は 4mm ドライブ と 8mm - ドライブ共通です. + ドライブ共通です。 テープの寿命は 2000 回のパスあるいは 100 - 回のフルバックアップです. + 回のフルバックアップです。 8mm (Exabyte) テープメディア(tape media) Exabyte (8mm) テープ 8mm テープは SCSI - テープドライブとして最もよく使われているもので, - データ交換用として最良の選択です. ほとんどのサイトには Exabyte + テープドライブとして最もよく使われているもので、 + データ交換用として最良の選択です。ほとんどのサイトには Exabyte の 2GB 8mm テープドライブがあるでしょう (訳注: Unix ワークステーションを何台も置いているようなサイトには 1 - 台くらいはあるというような意味です). 8mm - ドライブは信頼性が高く, 使いやすく, 静かです. - カートリッジは安価で小型です (4.8 x3.3 x 0.6 インチ; 122 x 84 - x 15 mm). 欠点は, テープとヘッドの相対的な速度が高速なために - 比較的ヘッドとテープの寿命が短いことです. + 台くらいはあるというような意味です)。8mm + ドライブは信頼性が高く、使いやすく、静かです。 + カートリッジは安価で小型です (4.8 x 3.3 x 0.6 インチ; 122 x 84 + x 15 mm)。欠点は、テープとヘッドの相対的な速度が高速なために + 比較的ヘッドとテープの寿命が短いことです。 データスループットは 250kB/s 程度から 500kB/s - 程度の範囲です. データ容量は 300MB から 7GB です. - ハードウェア圧縮が多くのドライブで可能で,およそ 2 - 倍の容量になります. 単一のユニットのドライブから, 1 + 程度の範囲です。データ容量は 300MB から 7GB です。 + ハードウェア圧縮が多くのドライブで可能で、およそ 2 + 倍の容量になります。単一のユニットのドライブから、1 つの筐体に 6 台のドライブと 120 巻のテープを持ったマルチドライブテープライブラリまで - 利用することができます. ライブラリではテープはユニットにより - 自動的に交換されます. ライブラリの容量は 840GB - 以上に達します. + 利用することができます。ライブラリではテープはユニットにより + 自動的に交換されます。ライブラリの容量は 840GB + 以上に達します。 - Exabyte 社製の Mammoth というモデルは, - テープ一本あたり 12GB (圧縮時 24GB) をサポートしています. - このドライブの価格は, 通常のテープドライブの約 2 倍です. + Exabyte 社製の Mammoth というモデルは、 + テープ一本あたり 12GB (圧縮時 24GB) をサポートしています。 + このドライブの価格は、通常のテープドライブの約 2 倍です。 - データはヘリカルスキャンを使ってテープに記録されます. + データはヘリカルスキャンを使ってテープに記録されます。 ヘリカルスキャン方式ではヘッドはメディアに対してある傾き - (約6度) に配置されます. テープはヘッドのある円筒の周の - 270度にわたって接触します. テープが円筒面を走行する間, - 円筒は回転しています. この結果, - 高密度のデータのつまったトラックは, - 狭い間隔でテープの上端と下端の間を斜めに横切ります. + (約 6 度) に配置されます。テープはヘッドのある円筒の周の + 270 度にわたって接触します。テープが円筒面を走行する間、 + 円筒は回転しています。この結果、 + 高密度のデータのつまったトラックは、 + 狭い間隔でテープの上端と下端の間を斜めに横切ります。 QIC - テープメディア(tape media) + テープメディア (tape media) QIC-150 QIC-150 テープとドライブはたぶん最も一般的に使われている - ドライブとメディアでしょう. QIC + ドライブとメディアでしょう。QIC テープドライブは現実的なバックアップドライブとして - 少なくとも高価なものではありません. - 欠点はメディアのコストです. QIC テープは 8mm や 4mm - テープに比較して GB あたりのデータの保存で 5 倍ほど高価です. - しかしあなたの必要とする量が半ダース程のテープで十分であれば, - QICは正しい選択となるかもしれません. QIC は - 最も一般的なテープドライブです. - すべてのサイトに QICドライブのどれかの容量のものがあります. - 問題は, QIC は同じようなテープ (まったく同じ場合もある) - に多様な記録密度があることです. QIC - ドライブは静かではありません. これらのドライブはデータ記録を - 開始する前に音をたててシークしますし, リード, ライト, - シークの時にはっきりと聞こえる音を出します. QIC - テープの大きさは (6 x 4 x 0.7 インチ; 152 x 102 x 17 mm). + 少なくとも高価なものではありません。 + 欠点はメディアのコストです。QIC テープは 8mm や 4mm + テープに比較して GB あたりのデータの保存で 5 倍ほど高価です。 + しかしあなたの必要とする量が半ダース程のテープで十分であれば、 + QIC は正しい選択となるかもしれません。QIC は + 最も一般的なテープドライブです。 + すべてのサイトに QIC ドライブのどれかの容量のものがあります。 + 問題は、QIC は同じようなテープ (まったく同じ場合もある) + に多様な記録密度があることです。QIC + ドライブは静かではありません。これらのドライブはデータ記録を + 開始する前に音をたててシークしますし、リード、ライト、 + シークの時にはっきりと聞こえる音を出します。QIC + テープの大きさは (6 x 4 x 0.7 インチ; 152 x 102 x 17 mm)。 ミニカートリッジ - で使われている 1/4 インチ幅のテープについては別に議論します. - テープライブラリやチェンジャはありません. + で使われている 1/4 インチ幅のテープについては別に議論します。 + テープライブラリやチェンジャはありません。 - データスループットは 150kB/s から 500kB/s の範囲です. - データ容量の範囲は 40MB から 15GB です. ハードウェア圧縮が - 最近の多くのドライブで使えるようになっています. QIC ドライブは - DAT ドライブに置き換えられつつあり, - あまり頻繁には利用されなくなっています. + データスループットは 150kB/s から 500kB/s の範囲です。 + データ容量の範囲は 40MB から 15GB です。ハードウェア圧縮が + 最近の多くのドライブで使えるようになっています。QIC ドライブは + DAT ドライブに置き換えられつつあり、 + あまり頻繁には利用されなくなっています。 - データは複数のトラックにわかれてテープに記録されます. + データは複数のトラックにわかれてテープに記録されます。 トラックはテープメディアの - 長さ方向の一端からもう一方の端までです. (訳注: 1トラックの + 長さ方向の一端からもう一方の端までです。(訳注: 1 トラックの read/write が終わるとテープの走行方向を反転させ次のトラックの - read/write を行います) トラックの数と, - それに対応するトラックの幅はテープの容量によって変わります. + read/write を行います) トラックの数と、 + それに対応するトラックの幅はテープの容量によって変わります。 すべてではありませんがほとんどの最近のドライブは 少なくとも読み出しについては (場合によっては書き込みも) - 下位互換性があります. QIC + 下位互換性があります。QIC はデータの安全性についてはよいといわれています - (ヘリカルスキャンドライブに比べて機構は単純でより丈夫です). + (ヘリカルスキャンドライブに比べて機構は単純でより丈夫です)。 - テープは 5000回のバックアップで寿命となるでしょう. + テープは 5000 回のバックアップで寿命となるでしょう。 XXX* ミニカートリッジ DLT テープメディア(tape media) DLT - DLTはここに示したドライブのタイプの中で - 最高速のデータ転送レートです. 1/2 インチ (12.5mm) + DLT はここに示したドライブのタイプの中で + 最高速のデータ転送レートです。1/2 インチ (12.5mm) テープが単リールのカートリッジ (4 x 4 x 1 インチ; 100 x 100 x - 25 mm) に入っています. - カートリッジのひとつの側面全体がスイングゲートになっています. - ドライブの機構がこのゲートを開け, テープリーダを引き出します. - テープリーダには楕円形の穴があり, - ドライブがテープを引っ掛けるのに使います. - 巻き取りのためのリールはドライブの中にあります. - ここに挙げた他のカートリッジはすべて ( 9 - トラックテープはただ1つの例外です) + 25 mm) に入っています。 + カートリッジのひとつの側面全体がスイングゲートになっています。 + ドライブの機構がこのゲートを開け、テープリーダを引き出します。 + テープリーダには楕円形の穴があり、 + ドライブがテープを引っ掛けるのに使います。 + 巻き取りのためのリールはドライブの中にあります。 + ここに挙げた他のカートリッジはすべて (9 + トラックテープはただ一つの例外です) 送りだしリールと巻き取りリールの両方がカートリッジの中に - あります. + あります。 - データスループットは約1.5MB/sで, 4mm, 8mm, QIC - テープドライブの3倍です. データ容量は単一のドライブで 10GBから - 20GBの範囲です. - マルチテープチェンジャ,マルチテープドライブ,5から - 900巻のテープを1から20ドライブで扱う - マルチドライブテープライブラリがあり, 50GB から 9TB - の容量が得られます. + データスループットは約 1.5MB/s で、4mm、8mm、QIC + テープドライブの 3 倍です。データ容量は単一のドライブで 10GB から + 20GB の範囲です。 + マルチテープチェンジャ、マルチテープドライブ、5 から + 900 巻のテープを 1 から 20 ドライブで扱う + マルチドライブテープライブラリがあり、50GB から 9TB + の容量が得られます。 - 圧縮機能により, DLT Type IV フォーマットは - 70GB までの容量をサポートします. + 圧縮機能により、DLT Type IV フォーマットは + 70GB までの容量をサポートします。 データは ( QIC テープのように) - テープの走行方向と並行に複数あるトラックへ記録されます. 2 - つのトラックに同時書き込みを行います. Read/Write - ヘッドの寿命は比較的長いと言えます. + テープの走行方向と並行に複数あるトラックへ記録されます。2 + つのトラックに同時書き込みを行います。Read/Write + ヘッドの寿命は比較的長いと言えます。 テープの走行が止まればヘッドと - テープの間の相対運動はありません. + テープの間の相対運動はありません。 AIT テープメディア(tape media) AIT - AIT は, Sony が発表した新しいフォーマットで, - テープ一本あたり 50GB(圧縮時) の容量を持っています. - テープには, 記録データ内容の索引情報が記録可能な - メモリチップが内蔵されています. ドライブがこの索引情報を読みとることで, + AIT は、Sony が発表した新しいフォーマットで、 + テープ一本あたり 50GB (圧縮時) の容量を持っています。 + テープには、記録データ内容の索引情報が記録可能な + メモリチップが内蔵されています。ドライブがこの索引情報を読みとることで、 テープのどの部分にどのファイルが存在するかを - 高速に調べることができるようになっています. - 従来のドライブは, この処理に数分の時間を必要としていました. + 高速に調べることができるようになっています。 + 従来のドライブは、この処理に数分の時間を必要としていました。 直接テープのメモリチップと通信することでテープ内容を画面表示する - SAMS:Alexandria のようなソフトウェアを使うことで, 40 を超える - ATI テープライブラリを操作できるのはもちろんのこと, - どのテープのどこに, どのファイルがバックアップされているのか調べたり, - 正しいテープをセットしたり, - テープ上のデータをリストアしたりすることが可能です. + SAMS:Alexandria のようなソフトウェアを使うことで、40 を超える + ATI テープライブラリを操作できるのはもちろんのこと、 + どのテープのどこに、どのファイルがバックアップされているのか調べたり、 + 正しいテープをセットしたり、 + テープ上のデータをリストアしたりすることが可能です。 - このようなテープライブラリにかかる費用は $20,000 台です. - 業務用でないものはもう少し安価でしょう. + このようなテープライブラリにかかる費用は $20,000 台です。 + 業務用でないものはもう少し安価でしょう。 新品のテープを最初に使う場合 新品の完全な空テープを読もうとしたり書き込もうとすると処理 - は失敗するでしょう. - 次のようなコンソールメッセージが出るでしょう. + は失敗するでしょう。 + 次のようなコンソールメッセージが出るでしょう。 sa0(ncr1:4:0): NOT READY asc:4,1 st0(ncr1:4:0): Logical unit is in process of becoming ready テープに識別ブロック (Identifire Block:block number 0) - がありません.QIC-525標準の採用されている - QICテープドライブのすべてで識別ブロックをテープに書きます. - 2つの解決方法があります. + がありません。QIC-525 標準の採用されている + QIC テープドライブのすべてで識別ブロックをテープに書きます。 + 2 つの解決方法があります。 - (訳注: 方法1)mt fsf 1 - によってテープドライブは識別ブロックをテープに書きます. + (訳注: 方法 1)mt fsf 1 + によってテープドライブは識別ブロックをテープに書きます。 (訳注: - 方法2)フロントパネルのボタンを押してテープをとりだします. + 方法 2) フロントパネルのボタンを押してテープをとりだします。 - 再びテープを入れ,データをテープに dump します. + 再びテープを入れ、データをテープに dump します。 dump はそのうちに DUMP: End of tape - detected と表示し, コンソールには + detected と表示し、コンソールには HARDWARE FAILURE info:280 - asc:80,96と表示されるでしょう. + asc:80,96 と表示されるでしょう。 mt - rewindを使ってテープを巻戻します. + rewind を使ってテープを巻戻します。 - この次からはテープの操作は成功するでしょう. + この次からはテープの操作は成功するでしょう。 バックアッププログラム バックアッププログラム(backup software) - よく使われる3つのプログラムは &man.dump.8;, &man.tar.1;, - &man.cpio.1; です. + よく使われる3つのプログラムは &man.dump.8;、&man.tar.1;、 + &man.cpio.1; です。 dump と restore バックアッププログラム(backup software) dump / restore dump restore - Unixで古くから使われているバックアッププログラムは - dumprestore です. - これらはディスクドライブをディスクブロックの集まりとして, - ファイルシステム上につくられるファイル, - リンク, ディレクトリといった概念よりも低レベルで扱います. - dump はデバイスやファイルシステム全体をバックアップするもので, - ファイルシステムの一部や, + Unix で古くから使われているバックアッププログラムは + dumprestore です。 + これらはディスクドライブをディスクブロックの集まりとして、 + ファイルシステム上につくられるファイル、 + リンク、ディレクトリといった概念よりも低レベルで扱います。 + dump はデバイスやファイルシステム全体をバックアップするもので、 + ファイルシステムの一部や、 複数のファイルシステムにまたがるディレクトリツリーの一部だけを - バックアップすることはできません. - dump はファイルやディレクトリではなく, - ファイルやディレクトリを構成する生のデータブロックをテープに記録します. + バックアップすることはできません。 + dump はファイルやディレクトリではなく、 + ファイルやディレクトリを構成する生のデータブロックをテープに記録します。 - ルートディレクトリで dump を使った場合, - /home/usr など, - 他の多くのディレクトリはバックアップされません. - これは, 上にあげたようなディレクトリが通常, - 他のファイルシステムへのマウントポイントであったり, - 他のファイルシステムへのシンボリックリンクとなっているためです. + ルートディレクトリで dump を使った場合、 + /home/usr など、 + 他の多くのディレクトリはバックアップされません。 + これは、上にあげたようなディレクトリが通常、 + 他のファイルシステムへのマウントポイントであったり、 + 他のファイルシステムへのシンボリックリンクとなっているためです。 dump には初期の ATT UNIX のバージョン 6 (1975 - 年ごろ) に由来する癖が残っています. + 年ごろ) に由来する癖が残っています。 デフォルトのパラメータは 9 トラックテープ (6250 bpi) - に適したものになっていて, - 現在の高密度メディア (最大 62,182 ftpi) に適していません. - 現在のテープドライブの容量を有効に利用するため, - これらのデフォルト値をコマンドラインで必ず置き換える必要があります. + に適したものになっていて、 + 現在の高密度メディア (最大 62,182 ftpi) に適していません。 + 現在のテープドライブの容量を有効に利用するため、 + これらのデフォルト値をコマンドラインで必ず置き換える必要があります。 rhosts - また, rdumprrestore を用いると, - 他のコンピュータに接続されたテープドライブを使い, - ネットワーク経由でデータをバックアップすることも可能です. + また、rdumprrestore を用いると、 + 他のコンピュータに接続されたテープドライブを使い、 + ネットワーク経由でデータをバックアップすることも可能です。 どちらのプログラムもリモートテープドライブにアクセスするために - rcmdruserok に依存しています. + rcmdruserok に依存しています。 このためユーザがバックアップを実行するためには - rhosts によるリモートアクセスが必要です. + rhosts によるリモートアクセスが必要です。 rdumprrestore - の引数はリモートコンピュータに適切なものを用います. + の引数はリモートコンピュータに適切なものを用います。 (例えば FreeBSD コンピュータより komodo という名前の Sun に接続されている Exabyte テープドライブへ /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nrsa8 /dev/rda0a 2>&1 として - rdumpしたような場合の restoreに使います) + rdumpしたような場合の restore に使います) 警告: セキュリティは - rhostsの管理にかかっています. - あなたの状況を注意深く調べてください. + rhosts の管理にかかっています。 + あなたの状況を注意深く調べてください。 ssh を用いると rdumprrestore - をより安全な形で利用することができます. + をより安全な形で利用することができます。 <application>ssh</application> 経由で <command>rdump</command> を使う &prompt.root; /sbin/dump -0uan -f - /usr | gzip -2 | ssh1 -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz <command>tar</command> - バックアッププログラム(backup software) + バックアッププログラム (backup software) tar - tar AT&T Unix のバージョン 6 (1975ごろ) - にさかのぼる事ができます. tar - はファイルシステムと協調して機能し, - ファイルやディレクトリをテープに書きます. tar は + tar AT&T Unix のバージョン 6 (1975 ごろ) + にさかのぼる事ができます。tar + はファイルシステムと協調して機能し、 + ファイルやディレクトリをテープに書きます。tar は &man.cpio.1; で使えるようなフルレンジのオプションは持ちませんが cpio - で使うような奇妙なコマンドパイプラインは必要ありません. + で使うような奇妙なコマンドパイプラインは必要ありません。 tar 大部分の tar - にはネットワーク経由のバックアップの機能はありませんが, - FreeBSD で使用されている GNU の tar は, + にはネットワーク経由のバックアップの機能はありませんが、 + FreeBSD で使用されている GNU の tar は、 rdump - とおなじ構文でリモートデバイスを扱うことができます. + とおなじ構文でリモートデバイスを扱うことができます。 komodo というホスト名の Sun に繋いである Exabyte - のテープデバイスに対して tar を実行するには, - 次のようにします. - /usr/bin/tar cf komodo:/dev/nrsa8 . + のテープデバイスに対して tar を実行するには、 + 次のようにします。 + /usr/bin/tar cf komodo:/dev/nrsa8 。 2>&1 リモートデバイスをサポートしていない tar - を使用している場合は, パイプラインと rsh を使うことで, - リモートテープデバイスにデータを送る事ができます. + を使用している場合は、パイプラインと rsh を使うことで、 + リモートテープデバイスにデータを送る事ができます。 &prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20b もしあなたがネットワークを越えるバックアップのセキュリティに - 困っているなら &man.rsh.1; の代わりに &man.ssh.1; を使うべきです. + 困っているなら &man.rsh.1; の代わりに &man.ssh.1; を使うべきです。 <command>cpio</command> - バックアッププログラム(backup software) + バックアッププログラム (backup software) cpio - &man.cpio.1; は本来, Unix - ファイルを磁気メディアで交換するためのプログラムです. - cpio はバイトスワッピング, + &man.cpio.1; は本来、Unix + ファイルを磁気メディアで交換するためのプログラムです。 + cpio はバイトスワッピング、 多くの異なるアーカイブフォーマットの書き込みのオプション - (それ以外にも多数のオプションがあります)があり, - パイプで他のプログラムにデータを渡す事もできます. - この最後に挙げた特徴により, cpio - はインストールメディアについては優れた選択です. cpio - は stdin からの入力でなければならず, + (それ以外にも多数のオプションがあります) があり、 + パイプで他のプログラムにデータを渡す事もできます。 + この最後に挙げた特徴により、cpio + はインストールメディアについては優れた選択です。cpio + は stdin からの入力でなければならず、 ディレクトリツリーの探索や - ファイルリストについての機能はありません. + ファイルリストについての機能はありません。 cpio &man.cpio.1; - はネットワーク経由のバックアップの機能はありません. + はネットワーク経由のバックアップの機能はありません。 リモートテープドライブにはパイプラインと &man.rsh.1; - を使って送る事ができます. + を使って送る事ができます。 &prompt.root; for f in directory_list; do find $f >> backup.list done &prompt.root; cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device" directory_list - にはバックアップしたいディレクトリのリスト, + にはバックアップしたいディレクトリのリスト、 user@host - にはバックアップを実行するユーザ/ホスト名の組合せ, + にはバックアップを実行するユーザ/ホスト名の組合せ、 backup_device には バックアップ内容を保存する場所 - (たとえば /dev/nrsa0) を指定します. + (たとえば /dev/nrsa0) を指定します。 <command>pax</command> - バックアッププログラム(backup software) + バックアッププログラム (backup software) pax pax POSIX IEEE &man.pax.1; は tar と - cpio に対する IEEE/POSIX の回答です. - 長年の間, 様々なバージョンの tar や - cpio は, - 互いにわずかながら非互換性を有していました. - 各々をしらみ潰しに標準化する代わりに, POSIX - は新しいアーカイブユーティリティを作ることにしました. + cpio に対する IEEE/POSIX の回答です。 + 長年の間、様々なバージョンの tar や + cpio は、 + 互いにわずかながら非互換性を有していました。 + 各々をしらみ潰しに標準化する代わりに、POSIX + は新しいアーカイブユーティリティを作ることにしました。 pax - は専用に開発された新しいフォーマットに加えて, いくつもの cpio - や tar のフォーマットの読み書きに対応しようと試みています. + は専用に開発された新しいフォーマットに加えて、いくつもの cpio + や tar のフォーマットの読み書きに対応しようと試みています。 コマンド群は tar よりも - cpio の方にいくぶん似ています. + cpio の方にいくぶん似ています。 <application>Amanda</application> - バックアッププログラム(backup software) + バックアッププログラム (backup software) Amanda Amanda Amanda (Advanced Maryland Network Disk Archiver) は単一のプログラムではなくクライアント / - サーバ型のバックアップシステムです. Amanda サーバは, Amanda + サーバ型のバックアップシステムです。Amanda サーバは、Amanda クライアントであるネットワークで サーバに接続された複数のコンピュータから - 一つのテープドライブへバックアップをおこないます. + 一つのテープドライブへバックアップをおこないます。 このような場合の一般的な問題はいくつもの大容量の ディスクからデータディレクトリをテープにバックアップするには - 時間がかかりすぎてしまうという事です. Amanda - はこの問題を解決します. Amanda + 時間がかかりすぎてしまうという事です。Amanda + はこの問題を解決します。Amanda は同時に複数のファイルシステムのバックアップをおこなう時に - 「ホールディングディスク」を使う事ができます. - Amandaの設定ファイルに書いたすべてのファイルシステムの + 「ホールディングディスク」を使う事ができます。 + Amanda の設定ファイルに書いたすべてのファイルシステムの フルバックアップを特定の間隔でとるために「アーカイブセット」 - と呼ばれるテープグループを作ります. + と呼ばれるテープグループを作ります。 これには夜間に作られるすべてのファイルシステムの増分 - (あるいは差分として) のバックアップも含みます. + (あるいは差分として) のバックアップも含みます。 障害の起きたファイルシステムの回復には最も新しい - フルバックアップと増分のバックアップが必要です. + フルバックアップと増分のバックアップが必要です。 設定ファイルでバックアップのコントロールと Amanda - によるネットワークトラフィック量を設定します. Amanda + によるネットワークトラフィック量を設定します。Amanda はデータをテープに書くのにバックアッププログラムの - いずれかを使うでしょう. Amanda - はその一部分でもパッケージでも利用可能ですが, - デフォルトではインストールされません. + いずれかを使うでしょう。Amanda + はその一部分でもパッケージでも利用可能ですが、 + デフォルトではインストールされません。 何もしない 何もしない - というのはコンピュータのプログラムではありませんが, - バックアップの戦略として最も広く採用されている物です. - これには初期投資が必要ありません. - したがわなければならないバックアップスケジュールもありません. - ただ何もしないだけです. もしデータに何かが起きたら, - 苦笑いして耐えてください. + というのはコンピュータのプログラムではありませんが、 + バックアップの戦略として最も広く採用されている物です。 + これには初期投資が必要ありません。 + したがわなければならないバックアップスケジュールもありません。 + ただ何もしないだけです。もしデータに何かが起きたら、 + 苦笑いして耐えてください。 あなたにとって時間やデータの価値が少ないか あるいはまったくないのであれば 何もしない のはあなたのコンピュータに最も適した - バックアッププログラムでしょう. しかし注意してください. Unix - は便利なツールです. 6 ヶ月も使っていれば価値のあるファイルの - 山ができ上がっているでしょう. + バックアッププログラムでしょう。しかし注意してください。Unix + は便利なツールです。6 ヶ月も使っていれば価値のあるファイルの + 山ができ上がっているでしょう。 何もしないこと は - /usr/obj など, + /usr/obj など、 コンピュータが同じものをもう一度作り直すことのできる - ディレクトリツリーに対して適した方法です. - 一つの例として, このハンドブックの HTML 版, PostScript - 版を構成するファイルが考えられます. - これらは両方とも SGML ファイルから生成されたものなので, - HTML 版と PostScript 版のバックアップをとる必要はありません. - 一方, SGML ファイルは定期的にバックアップが行なわれています. + ディレクトリツリーに対して適した方法です。 + 一つの例として、このハンドブックの HTML 版、PostScript + 版を構成するファイルが考えられます。 + これらは両方とも SGML ファイルから生成されたものなので、 + HTML 版と PostScript 版のバックアップをとる必要はありません。 + 一方、SGML ファイルは定期的にバックアップが行なわれています。 どのバックアッププログラムが最適でしょう? LISA - 定期的に dump しましょう. + 定期的に dump しましょう。 Elizabeth D. Zwicky はここで検討したプログラムすべてについて - 拷問的なテストをおこないました. すべてのデータと + 拷問的なテストをおこないました。すべてのデータと Unixファイルシステムの状態すべてを保存するには明らかに - &man.dump.8; でしょう. Elizabeth + &man.dump.8; でしょう。Elizabeth は大きく変化に富んだ異常な状態 (いくつかはあまり異常でもない状態のものもあります) - になっているファイルシステムで, + になっているファイルシステムで、 それぞれのプログラムでファイルシステムの - バックアップとリストアを行ってテストしました. - 特色のある状態には, ホールを持つファイル, - ホールとヌルブロックを持つファイル, - 奇妙な文字をファイル名に持つファイル, 読み出し不可, - 書き込み不可のファイル, デバイスファイル, - バックアップ中にファイルのサイズを変更する, - バックアップ中にファイルの作成/削除をおこなうなどがあります. - 彼女は1991年10月の LISA Vで結果の発表をしています.torture-testing Backup and Archive Programs を参照してください. + バックアップとリストアを行ってテストしました。 + 特色のある状態には、ホールを持つファイル、 + ホールとヌルブロックを持つファイル、 + 奇妙な文字をファイル名に持つファイル、読み出し不可、 + 書き込み不可のファイル、デバイスファイル、 + バックアップ中にファイルのサイズを変更する、 + バックアップ中にファイルの作成/削除をおこなうなどがあります。 + 彼女は 1991 年 10 月の LISA V で結果の発表をしています。torture-testing Backup and Archive Programs を参照してください。 緊急時のリストア手順 災難の起きる前に 起き得るどのような災難に対しても以下の - 4ステップだけが必要な準備です. + 4 ステップだけが必要な準備です。 disklabel - ステップ 1では, - ファイルシステムテーブル(/etc/fstab) + ステップ 1 では、 + ファイルシステムテーブル (/etc/fstab) や起動メッセージで示されるすべてのディスクの - disklabelをそれぞれ2コピーづつプリント (例えば + disklabel をそれぞれ 2 コピーづつプリント (例えば disklabel da0 | lpr を実行します) - します. + します。 fix-it floppies - ステップ 2では, boot.flp と + ステップ 2 では、boot.flpfixit.flp にそのシステムのすべてのデバイスドライバが - 含まれているか確認します. 最も簡単な確認の方法は, - フロッピディスクをドライブに入れて再起動し, - 起動メッセージを確認することです. - あなたのシステムのデバイスがすべて含まれ, 機能していれば, - step 3へ飛んでください. - - そうでないなら, - そのシステムのすべてのディスクをマウントでき, + 含まれているか確認します。最も簡単な確認の方法は、 + フロッピディスクをドライブに入れて再起動し、 + 起動メッセージを確認することです。 + あなたのシステムのデバイスがすべて含まれ、機能していれば、 + step 3 へ飛んでください。 + + そうでないなら、 + そのシステムのすべてのディスクをマウントでき、 テープドライブにもアクセスできる - 2種類のカスタム起動フロッピディスクを作る必要があります. - これらのフロッピディスクには fdisk, disklabel, - newfs, mount, + 2 種類のカスタム起動フロッピディスクを作る必要があります。 + これらのフロッピディスクには fdiskdisklabel、 + newfsmount、 と利用したいバックアッププログラムが - 入っていなければなりません. + 入っていなければなりません。 これらのプログラムはスタティックリンクされた - プログラムである必要があります. dump + プログラムである必要があります。dump を使うのであればフロッピディスクに restore - を入れる必要があります. + を入れる必要があります。 - ステップ 3では, 通常の方法でバックアップを作ります. + ステップ 3 では、通常の方法でバックアップを作ります。 最新のバックアップの後でおこなわれた変更は - 回復することはできません. - バックアップテープにライトプロテクトをしてください. + 回復することはできません。 + バックアップテープにライトプロテクトをしてください。 - ステップ 4では, フロッピディスク + ステップ 4 では、フロッピディスク (boot.flpfixit.flp あるいはステップ - 2で作った2枚のカスタム起動フロッピディスクです) - とバックアップテープのテストをします. - 手順のノートを作りましょう. - このノートは起動フロッピディスク, - バックアップテープに入れておきプリントアウトしておきます. + 2 で作った 2 枚のカスタム起動フロッピディスクです) + とバックアップテープのテストをします。 + 手順のノートを作りましょう。 + このノートは起動フロッピディスク、 + バックアップテープに入れておきプリントアウトしておきます。 あなたがリストアをおこなうような時は おそらく錯乱状態でしょうからこのノートはバックアップを 破壊してしまうようなことを防ぐのに役立つでしょう (どのようにして破壊するって? tar xvf /dev/rsa0 とするかわりに偶然 tar cvf /dev/rsa0 とタイプしてバックアップテープに上書きしてしまうかも - しれません). + しれません)。 - 訳注: 上書きはライトプロテクトをしておけば防げますが, - なんらかの原因でプロテクトがはずれているかもしれません. + 訳注: 上書きはライトプロテクトをしておけば防げますが、 + なんらかの原因でプロテクトがはずれているかもしれません。 ちなみに訳者の経験から言えば上のようなミスタイプは - 結構起きます. + 結構起きます。 - 安全性を増すために, - 毎回起動フロッピディスクを作り, 2 - 巻のバックアップテープを取ります. - 一方を離れた場所に保管します. - 離れた場所は同じ建物の地下室ではいけません. + 安全性を増すために、 + 毎回起動フロッピディスクを作り、2 + 巻のバックアップテープを取ります。 + 一方を離れた場所に保管します。 + 離れた場所は同じ建物の地下室ではいけません。 世界貿易センタービルにあった数多くの会社は - 苦い経験よりこの教訓を得ました. + 苦い経験よりこの教訓を得ました。 離れた場所とはコンピュータやディスクドライブから - かなり離れていて物理的に分離されていなければなりません. + かなり離れていて物理的に分離されていなければなりません。 起動フロッピディスクを作るスクリプトの一例 /mnt/sbin/init gzip -c -best /sbin/fsck > /mnt/sbin/fsck gzip -c -best /sbin/mount > /mnt/sbin/mount gzip -c -best /sbin/halt > /mnt/sbin/halt gzip -c -best /sbin/restore > /mnt/sbin/restore gzip -c -best /bin/sh > /mnt/bin/sh gzip -c -best /bin/sync > /mnt/bin/sync cp /root/.profile /mnt/root cp -f /dev/MAKEDEV /mnt/dev chmod 755 /mnt/dev/MAKEDEV chmod 500 /mnt/sbin/init chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt chmod 555 /mnt/bin/sh /mnt/bin/sync chmod 6555 /mnt/sbin/restore # # create the devices nodes デバイスノードを作る # cd /mnt/dev ./MAKEDEV std ./MAKEDEV sd0 ./MAKEDEV sd1 ./MAKEDEV sd2 ./MAKEDEV st0 ./MAKEDEV pty0 cd / # # create minimum filesystem table 最小限のファイルシステムテーブル # cat > /mnt/etc/fstab < /mnt/etc/passwd < /mnt/etc/master.passwd < 災難の後に - 重要な問題は, ハードウェアが生き残ったかどうかです. + 重要な問題は、ハードウェアが生き残ったかどうかです。 定期的なバックアップを取っていれば - ソフトウェアについて心配する必要はありません. + ソフトウェアについて心配する必要はありません。 - ハードウェアがダメージを受けていたら, - 最初にそのダメージを受けた部品を交換してください. + ハードウェアがダメージを受けていたら、 + 最初にそのダメージを受けた部品を交換してください。 - ハードウェアに問題がなければ, - フロッピディスクをチェックしてください. + ハードウェアに問題がなければ、 + フロッピディスクをチェックしてください。 カスタム起動フロッピディスクを使っているのであれば シングルユーザ(boot: プロンプトの出た時に -s とタイプしてください) - で起動してください. それから次の - 「ファイルシステムを1つずつ回復する」 - を読んでください. + で起動してください。それから次の + 「ファイルシステムを 1 つずつ回復する」 + を読んでください。 boot.flpfixit.flp - を使っているのであればこのまま読み続けてください. - boot.flp を入れて起動してください. - 本来のインストールメニューが表示されるはずです. (ここで) + を使っているのであればこのまま読み続けてください。 + boot.flp を入れて起動してください。 + 本来のインストールメニューが表示されるはずです。(ここで) Fixit--Repair mode with CDROM or - floppy.オプションを選びます. 指示の通り - fixit.flp を入れてください. + floppy. オプションを選びます。指示の通り + fixit.flp を入れてください。 restore とその他の必要なプログラムは - /mnt2/standに置かれています. + /mnt2/stand に置かれています。 ファイルシステムを一つずつ回復する mount root partition disklabel newfs - 最初のディスクのrootパーティションを mount + 最初のディスクの root パーティションを mount (例えば mount /dev/da0a /mnt のように) - マウントしてみてください. + マウントしてみてください。 ディスクラベルが破壊されている場合は disklabel を使ってあらかじめプリントしておいた通りに - パーティションを作り直しラベルをつけてセーブしてください. - newfs を使いファイルシステムを作り直します. + パーティションを作り直しラベルをつけてセーブしてください。 + newfs を使いファイルシステムを作り直します。 ルートパーティションを読み書き可能にマウント (mount - -u -o rw /mnt) しなおします. + -u -o rw /mnt) しなおします。 バックアッププログラムとバックアップテープを使って このファイルシステムのデータを回復します (例えば - restore vrf /dev/sa0とします). + restore vrf /dev/sa0 とします)。 ファイルシステムをアンマウント (umount - /mntなど) して, + /mnt など) して、 障害を受けたファイルシステムそれぞれについて - 繰り返してください. + 繰り返してください。 - システムが動き出したら, - 新しいテープにデータをバックアップしてください. + システムが動き出したら、 + 新しいテープにデータをバックアップしてください。 どのような理由で再び事故が起きたりデータが - 失われるかはわかりません. これに時間を費す事で, - 後々の災難から救われる事になります. + 失われるかはわかりません。これに時間を費す事で、 + 後々の災難から救われる事になります。 - * 災難対策をしていませんでした. + <title>* 災難対策をしていませんでした。 どうしたらいいでしょう? ]]> フロッピディスクへのバックアップはどうですか? データをフロッピディスクにバックアップすることはできますか? backup floppies floppy disks - 実はフロッピディスクはバックアップ向きのメディアとは言えません. + 実はフロッピディスクはバックアップ向きのメディアとは言えません。 というのは: - 特に長期間に渡って保存する場合, 信頼性が低い. + 特に長期間に渡って保存する場合、信頼性が低い。 - バックアップ, リストアがとても遅い. + バックアップ、リストアがとても遅い。 - 容量が小さい(ハードディスク全体の日々のバックアップに - 1ダース, 長期間なら本当にたくさん). + 容量が小さい (ハードディスク全体の日々のバックアップに + 1 ダース、長期間なら本当にたくさん)。 - けれども, データをバックアップする他の手段がない場合には, + けれども、データをバックアップする他の手段がない場合には、 まったくバックアップをしないよりもフロッピディスクを使うほうが良い - でしょう. + でしょう。 - これを行う場合には, 高品質のものを使うようにしてください. - まわりに何年も転がっていたフロッピディスクは使わない方よいでしょう. - 評判のよいメーカの新品を使うことが理想です. + これを行う場合には、高品質のものを使うようにしてください。 + まわりに何年も転がっていたフロッピディスクは使わない方よいでしょう。 + 評判のよいメーカの新品を使うことが理想です。 どうやってデータをフロッピディスクにバックアップ するのですか? フロッピディスクへバックアップする最も良い方法は tar tar コマンドに (マルチ・ボリューム) - オプションを付けて, 複数のフロッピディスクにまたがるバックアップも - できるようにする方法です. + オプションを付けて、複数のフロッピディスクにまたがるバックアップも + できるようにする方法です。 カレントディレクトリのすべてのファイルとサブディレクトリを - バックアップするには, 以下のようにします (root で): + バックアップするには、以下のようにします (root で): &prompt.root; tar Mcvf /dev/fd0 * - 1枚目のフロッピディスクがいっぱいになると tar は - 次のボリュームを入れるようプロンプトを表示します. - ( tar は, さまざまなメディアを扱えるので - ボリュームと表示します. ここではフロッピディスクのことです) + 1 枚目のフロッピディスクがいっぱいになると tar は + 次のボリュームを入れるようプロンプトを表示します。 + ( tar は、さまざまなメディアを扱えるので + ボリュームと表示します。ここではフロッピディスクのことです) Prepare volume #2 for /dev/fd0 and hit return: - これは(ボリューム番号が増えながら) 指定されたすべてのファイルが - 保存されるまで繰り返されます. + これは (ボリューム番号が増えながら) 指定されたすべてのファイルが + 保存されるまで繰り返されます。 バックアップを圧縮することはできませんか? tar gzip 圧縮 - 残念ながら, tar はマルチ・ボリュームに保存する場合は - オプションを使うことができません. - もちろん, すべてのファイルを gzip してから, フロッピディスクに - tar して, ファイルを gunzip + 残念ながら、tar はマルチ・ボリュームに保存する場合は + オプションを使うことができません。 + もちろん、すべてのファイルを gzip してから、フロッピディスクに + tar して、ファイルを gunzip することはできます! リストアはどうしますか? 保存したファイルすべてをリストアするには: &prompt.root; tar Mxvf /dev/fd0 - 特定のファイルのみをリストアする方法は二つあります. - まず, 一枚目のフロッピディスクを挿入して次のようにします. + 特定のファイルのみをリストアする方法は二つあります。 + まず、一枚目のフロッピディスクを挿入して次のようにします。 &prompt.root; tar Mxvf /dev/fd0 filename - tar は, 必要なファイルを見つけるまで, 続きのフロッピディスクを - セットするよう表示します. + tar は、必要なファイルを見つけるまで、続きのフロッピディスクを + セットするよう表示します。 - 別の方法として, どのフロッピディスクにファイルが入っているのかが - 分かっているなら, そのフロッピディスクを挿入して上記と同じコマンドを - 使うこともできます. 最初のファイルが前のフロッピディスクから続いて - いる場合は, tar は, 頼みもしないのに, そのファイルはリストア + 別の方法として、どのフロッピディスクにファイルが入っているのかが + 分かっているなら、そのフロッピディスクを挿入して上記と同じコマンドを + 使うこともできます。最初のファイルが前のフロッピディスクから続いて + いる場合は、tar は、頼みもしないのに、そのファイルはリストア できないと警告します! diff --git a/ja_JP.eucJP/books/handbook/kerneldebug/chapter.sgml b/ja_JP.eucJP/books/handbook/kerneldebug/chapter.sgml index 1866df8e19..e5a0f4b3f8 100644 --- a/ja_JP.eucJP/books/handbook/kerneldebug/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/kerneldebug/chapter.sgml @@ -1,729 +1,729 @@ カーネルデバッグ 原作 &a.paul; and &a.joerg; 訳: &a.jp.yoshiaki;. 1997 年 3 月 18 日. <command>gdb</command> によるカーネルのクラッシュダンプのデバッグ ここではクラッシュダンプ (crash dump : 訳注 この文脈では kernel 自身 の異常によって停止した場合に出力されるイメージを指します) - によるカー ネルデバッグの方法を示します. + によるカーネルデバッグの方法を示します。 ここではダンプするための十分なスワップ - (swap) の容量があるものとします. - もし複数のスワップパーティションを持ち, + (swap) の容量があるものとします。 + もし複数のスワップパーティションを持ち、 最初のパーティションがダンプ を保持するのに十分な大きさを持たない場合は 別のダンプデバイスを使うよ うに (config kernel 行で) - カーネルのコンフィグをおこなうか, &man.dumpon.8; - コマンドを使って別のデバイスを示すことができます. &man.dumpon.8; + カーネルのコンフィグをおこなうか、&man.dumpon.8; + コマンドを使って別のデバイスを示すことができます。&man.dumpon.8; を使うもっともよい方法は変数 dumpdev を - /etc/rc.conf で設定することです. 一般的には + /etc/rc.conf で設定することです。一般的には /etc/fstab で設定されているスワップデバイスが - 使われるでしょう. - スワップに使えないデバイスへのダンプ, + 使われるでしょう。 + スワップに使えないデバイスへのダンプ、 例えばテープへのダンプは現在サポートさ - れていません. カーネルのコンフィグは - config によって行ってください. + れていません。カーネルのコンフィグは + config によって行ってください。 FreeBSD カーネルのコンフィグレーション には FreeBSD のカーネルの設定の詳細がありますので - 参照してください. + 参照してください。 &man.dumpon.8; コマンドを使ってどこへダンプするか カーネルに伝えてください (&man.swapon.8; によってそのパーティションが スワップとして設定された - 後でなければならないことに注意してください). これは普通は + 後でなければならないことに注意してください)。これは普通は /etc/rc.conf/etc/rc - で設定されます. あるいは + で設定されます。あるいは 別の方法としてカーネルコンフィグレーションファイルの - config 行の dump 節 で - ダンプデバイスをハードコードすることができます. + config 行の dump 節で + ダンプデバイスをハードコードすることができます。 この方法はあまりよくは - ありません. カーネルがブート時に crash + ありません。カーネルがブート時に crash する場合のクラッシュダンプを取り - たい時だけ使うべきです. + たい時だけ使うべきです。 以下では gdbという用語は gdb - をカーネルデバッグモードで動かしていることを意味します. + をカーネルデバッグモードで動かしていることを意味します。 gdb を - オプションをつけて起動することで, - このモードになります. - カーネルデバッグモードでは, プロンプトが - (kgdb) に変わります. + オプションをつけて起動することで、 + このモードになります。 + カーネルデバッグモードでは、プロンプトが + (kgdb) に変わります。 - FreeBSD 3 およびそれ以前のシステムを使っているなら, + FreeBSD 3 およびそれ以前のシステムを使っているなら、 巨大なデバッグカーネルをそのままインストールするのではなく - strip されたデバッグ用カーネルをつくるべきでしょう. + strip されたデバッグ用カーネルをつくるべきでしょう。 &prompt.root; cp kernel kernel.debug &prompt.root; strip -g kernel - この手順は必須ではありませんが, ぜひ行なうことをおすすめします - (FreeBSD 4 およびそれ以降では, カーネルの make - の段階で自動的にこれが行なわれます). - 自動的に, あるいは上のコマンドを手動で実行してカーネルが strip - されたら, 普通に make install - と実行し, カーネルをインストールして構いません. - - FreeBSD の古いリリース (3.1 を含まない以前のもの) は, - 標準で a.out カーネルを使っていることに注意してください. - これはシンボルテーブルが常に物理メモリ上に存在することを要求するため, - strip されていないデバッグカーネルに含まれる大きなシンボルテーブルは非常に無駄になります. - ELF カーネルを使った FreeBSD の最近のリリースでは, - そのような問題がなくなりました. + この手順は必須ではありませんが、ぜひ行なうことをおすすめします + (FreeBSD 4 およびそれ以降では、カーネルの make + の段階で自動的にこれが行なわれます)。 + 自動的に、あるいは上のコマンドを手動で実行してカーネルが strip + されたら、普通に make install + と実行し、カーネルをインストールして構いません。 + + FreeBSD の古いリリース (3.1 を含まない以前のもの) は、 + 標準で a.out カーネルを使っていることに注意してください。 + これはシンボルテーブルが常に物理メモリ上に存在することを要求するため、 + strip されていないデバッグカーネルに含まれる大きなシンボルテーブルは非常に無駄になります。 + ELF カーネルを使った FreeBSD の最近のリリースでは、 + そのような問題がなくなりました。 カーネルを作った時にそのコピーを - kernel.debug という名前で作りましょう. - また, オリジナルに対して strip - -gを実行します. - オリジナルを普通にインストールします. また strip - していないカーネル も同様にインストールすることができますが, + kernel.debug という名前で作りましょう。 + また、オリジナルに対して strip + -gを実行します。 + オリジナルを普通にインストールします。また strip + していないカーネルも同様にインストールすることができますが、 シンボルテーブルの参照時間 - がいくつかのプログラムでは劇的に増加するでしょう. また, - カーネル全体 はブート時に読み込まれ + がいくつかのプログラムでは劇的に増加するでしょう。また、 + カーネル全体はブート時に読み込まれ スワップアウトされないため数メガバイトの物理メ - モリが無駄になります. + モリが無駄になります。 例えばブートプロンプトで - 新しいカーネルの名前をタイプすることによって, - 新しいカーネルをテストした場合で, + 新しいカーネルの名前をタイプすることによって、 + 新しいカーネルをテストした場合で、 再びシステムを動かすのに別のカーネ ルで立ち上げることが必要な場合はブートプロンプトで フラグ - を使いシングルユーザの状態にしてください. - そして以下のような操作をおこな います. + を使いシングルユーザの状態にしてください。 + そして以下のような操作をおこないます。 &prompt.root; fsck -p &prompt.root; mount -a -t ufs # /var/crash 用のファイルシステムを書き込み可能にする &prompt.root; savecore -N /kernel.panicked /var/crash &prompt.root; exit # ...マルチユーザモードへ移行 ここに示した &man.savecore.8; は (現在動いているものとは別の) - カーネルのシンボル名の抽出をおこなうために使っています. + カーネルのシンボル名の抽出をおこなうために使っています。 抽出はデフォルトで - は現在動いているカーネルに対しておこなわれ, + は現在動いているカーネルに対しておこなわれ、 クラッシュダンプとカーネルシンボ ルのくい違いのためにまったく何もしません - (訳注:そのためにオプション - で実際にダンプをおこしたカーネルを指定します). + (訳注: そのためにオプション + で実際にダンプをおこしたカーネルを指定します)。 クラッシュダンプの起きた後に /sys/compile/WHATEVERへ行き - gdbを動かします. gdb - より次のようにします. + gdbを動かします。gdb + より次のようにします。 symbol-file kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0 - こうすると, + こうすると、 クラッシュダンプを使ってカーネルソースを他のプログラムと同様に - デバッグすることができます. + デバッグすることができます。 次に gdb - での手順のセッションのログを示します. 長い行は読 - みやすくするために改行しました. また, - 参照のために行番号を入れてあり ます. ただし, これは実際の - pcvtコンソールドライバの開発中の実際のエ - ラーのトレースです. + での手順のセッションのログを示します。長い行は読 + みやすくするために改行しました。また、 + 参照のために行番号を入れてあります。ただし、これは実際の + pcvt コンソールドライバの開発中の実際のエ + ラーのトレースです。 1:Script started on Fri Dec 30 23:15:22 1994 2:&prompt.root; cd /sys/compile/URIAH 3:&prompt.root; gdb -k kernel /var/crash/vmcore.1 4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel ...done. 5:IdlePTD 1f3000 6:panic: because you said to! 7:current pcb at 1e3f70 8:Reading in symbols for ../../i386/i386/machdep.c...done. 9:(kgdb) where 10:#0 boot (arghowto=256) (../../i386/i386/machdep.c line 767) 11:#1 0xf0115159 in panic () 12:#2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698) 13:#3 0xf010185e in db_fncall () 14:#4 0xf0101586 in db_command (-266509132, -266509516, -267381073) 15:#5 0xf0101711 in db_command_loop () 16:#6 0xf01040a0 in db_trap () 17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723) 18:#8 0xf019d2eb in trap_fatal (...) 19:#9 0xf019ce60 in trap_pfault (...) 20:#10 0xf019cb2f in trap (...) 21:#11 0xf01932a1 in exception:calltrap () 22:#12 0xf0191503 in cnopen (...) 23:#13 0xf0132c34 in spec_open () 24:#14 0xf012d014 in vn_open () 25:#15 0xf012a183 in open () 26:#16 0xf019d4eb in syscall (...) 27:(kgdb) up 10 28:Reading in symbols for ../../i386/i386/trap.c...done. 29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\ 30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\ 31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\ 32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\ 33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\ 34:ss = -266427884}) (../../i386/i386/trap.c line 283) 35:283 (void) trap_pfault(&frame, FALSE); 36:(kgdb) frame frame->tf_ebp frame->tf_eip 37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done. 38:#0 0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\ 39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403) 40:403 return ((*linesw[tp->t_line].l_open)(dev, tp)); 41:(kgdb) list 42:398 43:399 tp->t_state |= TS_CARR_ON; 44:400 tp->t_cflag |= CLOCAL; /* cannot be a modem (:-) */ 45:401 46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200) 47:403 return ((*linesw[tp->t_line].l_open)(dev, tp)); 48:404 #else 49:405 return ((*linesw[tp->t_line].l_open)(dev, tp, flag)); 50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */ 51:407 } 52:(kgdb) print tp 53:Reading in symbols for ../../i386/i386/cons.c...done. 54:$1 = (struct tty *) 0x1bae 55:(kgdb) print tp->t_line 56:$2 = 1767990816 57:(kgdb) up 58:#1 0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\ 59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126) 60: return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p)); 61:(kgdb) up 62:#2 0xf0132c34 in spec_open () 63:(kgdb) up 64:#3 0xf012d014 in vn_open () 65:(kgdb) up 66:#4 0xf012a183 in open () 67:(kgdb) up 68:#5 0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\ 69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\ 70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \ 71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \ 72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673) 73:673 error = (*callp->sy_call)(p, args, rval); 74:(kgdb) up 75:Initial frame selected; you cannot go up. 76:(kgdb) quit 77:&prompt.root; exit 78:exit 79: 80:Script done on Fri Dec 30 23:18:04 1994 - 上の出力についてのコメントをします. + 上の出力についてのコメントをします。 line 6: - これは DDB (後述) からのダンプです. このため + これは DDB (後述) からのダンプです。このため because you said to! という - panicコメントがつき, ページフォルトのト ラップによって - DDBに入ったことが原因の, やや長いスタックトレー - スがあります. + panicコメントがつき、ページフォルトのトラップによって + DDBに入ったことが原因の、やや長いスタックトレー + スがあります。 line 20: スタックトレースでのこれは - trap()関数の位置で す. + trap()関数の位置です。 line 36: - 新しいスタックフレームを使用するように指定しています. - ただし, ここでこれを指定する必要ありません. - trap の場合, スタックフレームは正しい場所を指していると考えられるからです. - ソースコードの 403 行を見ると, tp - ポインタのアクセスが失敗しているか, - 配列のアクセスが範囲外である可能性が高いことがわかります. + 新しいスタックフレームを使用するように指定しています。 + ただし、ここでこれを指定する必要ありません。 + trap の場合、スタックフレームは正しい場所を指していると考えられるからです。 + ソースコードの 403 行を見ると、tp + ポインタのアクセスが失敗しているか、 + 配列のアクセスが範囲外である可能性が高いことがわかります。 line 52: - 怪しいポインタですが, - アクセスは正常におこなえました. + 怪しいポインタですが、 + アクセスは正常におこなえました。 line 56: - ところが, 明らかにポインタはゴミを指しています. これで + ところが、明らかにポインタはゴミを指しています。これで エラーを見つけました! (ここのコードの部分からはよくわかり - ませんが, + ませんが、 tp->t_lineはコンソールデバイスの規定 - する行を参照しているので, - もっと小さな整数でなければなりませ ん. ) + する行を参照しているので、 + もっと小さな整数でなければなりません。) DDD によるクラッシュダンプのデバッグ カーネルのクラッシュダンプは ddd - のようなグラフィカルなデバッガで調べることもできます. + のようなグラフィカルなデバッガで調べることもできます。 通常はコマンドラインで オプションをつけて - ddd を起動します. たとえば: + ddd を起動します。たとえば: &prompt.root; ddd -k /var/crash/kernel.0 /var/crash/vmcore.0 クラッシュダンプを ddd のグラフィカルなインターフェースを使って - 見ることができます. + 見ることができます。 突然ダンプした場合の解析 カーネルが予想もしない時にコアダンプして config -g を行ってコンパイルされていなかった場合にはどうしたら - よいでしょう. すべてが失われるわけではありません. - パニックを起こさないでください. + よいでしょう。すべてが失われるわけではありません。 + パニックを起こさないでください。 - もちろん, クラッシュダンプを使えるようにする必要があります. - 使い方は前述の部分を見てください. + もちろん、クラッシュダンプを使えるようにする必要があります。 + 使い方は前述の部分を見てください。 カーネルのコンパイルディレクトリ (/usr/src/sys/arch/conf) - で, 設定ファイルを編集します. 以下の行のコメントを外します + で、設定ファイルを編集します。以下の行のコメントを外します (行が存在しなければ追加します): makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols - カーネルを再構築しましょう. - Makefileのタイムスタンプの変更により, 例えば trap.o などのいくつかの他のオブジェクトファイルも作り直さ - れます. 少しの幸運があれば, + れます。少しの幸運があれば、 オプションが追加されても作ら - れるコードは変更されず, いくらかのデバッグシンボル以外には + れるコードは変更されず、いくらかのデバッグシンボル以外には 問題を 起こしたコードとそっくりな新しいカーネルを手に入れることが - できます. 少なくとも &man.size.1; - コマンドで古い方と新しい方のサイズを比較すべ きです. - これが食い違っていれば, - 多分あきらめなければならないでしょう. + できます。少なくとも &man.size.1; + コマンドで古い方と新しい方のサイズを比較すべきです。 + これが食い違っていれば、 + 多分あきらめなければならないでしょう。 - ダンプを使って前述のように動かして調べます. - デバッグシンボルは 必ずしも十分ではありません. + ダンプを使って前述のように動かして調べます。 + デバッグシンボルは 必ずしも十分ではありません。 上の例ではスタックトレースでいくつかの関 - 数の行番号や引数リストが表示されないかもしれません. - もしより多くのデ バッグシンボルが必要であれば,十分になるまで + 数の行番号や引数リストが表示されないかもしれません。 + もしより多くのデバッグシンボルが必要であれば、十分になるまで 適切なオブジェクトファイ ルを消して (makeして) - gdb セッションを繰り返してください. + gdb セッションを繰り返してください。 - これは必ずしもうまく動くと保証はできません. - しかしほとんどの場合でう まくいくでしょう. + これは必ずしもうまく動くと保証はできません。 + しかしほとんどの場合でうまくいくでしょう。 DDBを使ったオンラインカーネルデバッグ gdb は非常に高レベルのユーザインタフェースを提 - 供するオフラインデバッガですが, いくつかのことはできません. + 供するオフラインデバッガですが、いくつかのことはできません。 (できないことの中で) 極めて重要なことはカーネルコードへのブレークポイ - ントの設定とシングルステップ実行です. - - カーネルの低レベルデバッグが必要であれば, DDBと呼ばれる - on-lineデバッ ガが使えます. ブレークポイントの設定, - シングルステップのカーネルの実 行, - 変数の検査と変更などができます. - ただし,これはカーネルのソースファ - イルにアクセスすることはできません. + ントの設定とシングルステップ実行です。 + + カーネルの低レベルデバッグが必要であれば、DDBと呼ばれる + on-lineデバッガが使えます。ブレークポイントの設定、 + シングルステップのカーネルの実行、 + 変数の検査と変更などができます。 + ただし、これはカーネルのソースファ + イルにアクセスすることはできません。 gdbのようにすべてのデ - バッグ情報にはアクセスできず, globalと - staticのシンボルにアクセス することができるだけです. + バッグ情報にはアクセスできず、global と + static のシンボルにアクセスすることができるだけです。 カーネルに DDB を含めるためにはコンフィグファイルに次のようなオプショ - ンを加えて, + ンを加えて、 options DDB - 再構築をおこないます. ( - FreeBSDのカーネルの設定の詳細については FreeBSD + 再構築をおこないます。( + FreeBSD のカーネルの設定の詳細については FreeBSD カーネルのコンフィグレーションを参照してくださ - い. + い。 - 古いバージョンの起動ブロックを使っている場合,ですと, - デバッガのシンボルが完全にはロードされないかもしれません. - その時は起動ブロックを最新のものに更新してください. - 新しい起動ブロックは, DDB シンボルを自動的にロードします. + 古いバージョンの起動ブロックを使っている場合、ですと、 + デバッガのシンボルが完全にはロードされないかもしれません。 + その時は起動ブロックを最新のものに更新してください。 + 新しい起動ブロックは、DDB シンボルを自動的にロードします。 - DDB カーネルの実行において, - DDBに入るいくつかの方法があります. 最初 の, + DDB カーネルの実行において、 + DDB に入るいくつかの方法があります。最初の、 最も早い方法はブートプロンプトが出ている時に - のブート フラグをタイプすることです. - カーネルはデバッグモードで起動し, デバ イスのプローブ以前に - DDBに入ります. したがって, デバイスのプローブ/初期 - 設定ファンクションのデバッグができます. - - 2つ目のシナリオはキーボードのホットキーで, 通常は - Ctrl-Alt-ESCです. syscons ではホットキーは再設定することができ, - 配付されているいくつかの キーマッピングでは別のキーに - 再設定されていますので確認しておいてください. シリアルラインの - BREAKを使って シリアルコンソールから DDBへ入ることを可 + のブートフラグをタイプすることです。 + カーネルはデバッグモードで起動し、デバイスのプローブ以前に + DDB に入ります。したがって、デバイスのプローブ/初期 + 設定ファンクションのデバッグができます。 + + 2 つ目のシナリオはキーボードのホットキーで、通常は + Ctrl-Alt-ESC です。syscons ではホットキーは再設定することができ、 + 配付されているいくつかのキーマッピングでは別のキーに + 再設定されていますので確認しておいてください。シリアルラインの + BREAK を使ってシリアルコンソールから DDB へ入ることを可 能にするオプションもあります (カーネルコンフィグレーションファイルの options - BREAK_TO_DEBUGGER). これは 多くのつまらないシリ - アルアダプタが, 例えばケーブルを引き抜いた時に - BREAK状態を意味もなく - 作り出してしまうのでデフォルトでは無効になっています. + BREAK_TO_DEBUGGER)。これは多くのつまらないシリ + アルアダプタが、例えばケーブルを引き抜いた時に + BREAK 状態を意味もなく + 作り出してしまうのでデフォルトでは無効になっています。 - 3つ目は, DDB + 3つ目は、DDB を使うようになっているカーネルがパニック状態になると DDB - へ入るというものです. このため, - 無人運転するマシンのカーネルにDDBを - 入れるのは賢明ではありません. + へ入るというものです。このため、 + 無人運転するマシンのカーネルに DDB を + 入れるのは賢明ではありません。 DDB のコマンドはおおまかには gdb のいくつかのコマンドと似て - います. おそらく最初にブレークポイントを - 設定する必要があるでしょう. + います。おそらく最初にブレークポイントを + 設定する必要があるでしょう。 b function-name b address - 数値はデフォルトでは16進数で, - シンボル名とはまったく異なります. 16進数で a-f - の文字で始まる場合は, 先頭に 0x + 数値はデフォルトでは 16 進数で、 + シンボル名とはまったく異なります。16 進数で a-f + の文字で始まる場合は、先頭に 0x をつける必要があります(それ以外の数字の場合はどちらでもか - まいません). function-name + - 0x103のような単純な式を使うこ とができます. + まいません)。function-name + + 0x103のような単純な式を使うことができます。 - 割り込みされたカーネルから処理を続行するためには, + 割り込みされたカーネルから処理を続行するためには、 c - とタイプするだけです. + とタイプするだけです。 スタックのトレースには trace - とします. + とします。 - DDB にホットキーで入った場合は, カーネルはその + DDB にホットキーで入った場合は、カーネルはその (ホットキーの) 割り込み の処理を行っていますのでスタックトレースは - あまり役にたたないことに注 意してください. + あまり役にたたないことに注意してください。 - ブレークポイントを削除したい場合は, + ブレークポイントを削除したい場合は、 del del address-expression - とします. - 最初の形式はブレークポイントにヒットしたすぐ後で使うことが でき, - 現在のブレークポイントを削除します. 2番目の形式では任意のブレー - クポイントを削除することができますが, + とします。 + 最初の形式はブレークポイントにヒットしたすぐ後で使うことができ、 + 現在のブレークポイントを削除します。2 番目の形式では任意のブレー + クポイントを削除することができますが、 次の形式で得られるような正確な - アドレスを与えることが必要です. + アドレスを与えることが必要です。 show b カーネルをシングルステップ実行させるには s - としてみてください. これは関数呼出し先までステップ実行 (step - into function) するでしょう. - 次のステートメントが終了するまでのDDBトレースは + としてみてください。これは関数呼出し先までステップ実行 (step + into function) するでしょう。 + 次のステートメントが終了するまでの DDBトレースは n - によっておこなうことができます. + によっておこなうことができます。 これは gdbnext - 命令とは異ります. gdbの - finish命令と似ています. + 命令とは異ります。gdbの + finish 命令と似ています。 - メモリ上のデータを調べるには (例として) 次のようにします. + メモリ上のデータを調べるには (例として) 次のようにします。 x/wx 0xf0133fe0,40 x/hd db_symtab_space x/bc termbuf,10 x/s stringbuf - word/halfword/byte 単位でアクセスをおこない, hex (16進) + word/halfword/byte 単位でアクセスをおこない、hex (16進) /dec (10進) / - char (文字) /string (文字列) で表示します. + char (文字) /string (文字列) で表示します。 カンマの後ろの数字はオブジェク - トカウントです. 次の 0x10個の要素を表示するには, 単純に + トカウントです。次の 0x10 個の要素を表示するには、単純に x ,10 - とします. 同様に次のように使うことができます. + とします。同様に次のように使うことができます。 x/ia foofunc,10 foofunc - の最初の 0x10個の命令語をディスアセンブルし, + の最初の 0x10 個の命令語をディスアセンブルし、 foofunc - の先頭からのオフセットとともに表示します. + の先頭からのオフセットとともに表示します。 - メモリの内容を変更するには writeコマンドを使います. + メモリの内容を変更するには write コマンドを使います。 w/b termbuf 0xa 0xb 0 w/w 0xf0010030 0 0 コマンドモディファイアの (b/h/w) - はデータを 書くサイズを定義し, - これに続く最初の式は書き込むアドレス, 残りがこれ - に続く連続するメモリアドレスに書き込まれるデータになります. + はデータを 書くサイズを定義し、 + これに続く最初の式は書き込むアドレス、残りがこれ + に続く連続するメモリアドレスに書き込まれるデータになります。 現在のレジスタ群の内容を知りたい場合は show reg - とします. また, 単一のレジスタの値を表示するには, 例えば + とします。また、単一のレジスタの値を表示するには、例えば p $eax - とします. また値の変更は + とします。また値の変更は set $eax new-value - とします. + とします。 - DDBからカーネルの関数を呼び出す必要がある場合は, 単に + DDBからカーネルの関数を呼び出す必要がある場合は、単に call func(arg1, arg2, ...) - とします. return 値が出力されます. + とします。return 値が出力されます。 動いているプロセスの &man.ps.1; スタイルの概要は ps - です. + です。 - カーネルの失敗の原因の調査が終わったら, ここで再起動すべきです. - それまでの不具合により, カーネルのすべての部分が期待するような - 動作をしているわけではないということを忘れないでください. - 以下のうちいずれかの方法でシステムのシャットダウンおよび再起動を行ってください. + カーネルの失敗の原因の調査が終わったら、ここで再起動すべきです。 + それまでの不具合により、カーネルのすべての部分が期待するような + 動作をしているわけではないということを忘れないでください。 + 以下のうちいずれかの方法でシステムのシャットダウンおよび再起動を行ってください。 panic - カーネルをコアダンプしてリブートしますので, 後で - gdbによってコアの高 レベル解析をすることができます. - このコマンドは通常, 一度 + カーネルをコアダンプしてリブートしますので、後で + gdbによってコアの高レベル解析をすることができます。 + このコマンドは通常、一度 continue命令を使った後に - 使うことになるでしょう. + 使うことになるでしょう。 call boot(0) は動いているシステムを `clean' に shut - downするよい方法です. すべて のディスクを - sync()して最後にリブートします. + down するよい方法です。すべてのディスクを + sync() して最後にリブートします。 ディスクとカー - ネルのファイルシステムインタフェースが破損していない限り, - ほぼ完全 に `clean'にシャットダウンするよい方法でしょう. + ネルのファイルシステムインタフェースが破損していない限り、 + ほぼ完全に `clean' にシャットダウンするよい方法でしょう。 call cpu_reset() は大惨事を防ぐための最後の手段で 「赤い大きなボタン」 - を押すのとほとんど 同じです.(訳注: - リセットボタンを押すのとほぼ同じであるという意味です) + を押すのとほとんど同じです (訳注: + リセットボタンを押すのとほぼ同じであるという意味です)。 短いコマンドの要約は help - をタイプします. ただし, デバッグセッションのために + をタイプします。ただし、デバッグセッションのために &man.ddb.4; の マニュアルページのプリントアウトを用意しておくことを - 強くお奨めします. + 強くお奨めします。 カーネルのシングルステップ中にオンラインマニュアルを - 読むことは難しい ということを覚えておいてください. + 読むことは難しいということを覚えておいてください。 リモート GDB を使ったオンラインカーネルデバッグ - この機能は FreeBSD 2.2 からサポートされました. - これは本当にすばらし い機能です. + この機能は FreeBSD 2.2 からサポートされました。 + これは本当にすばらし い機能です。 GDB はすでにかなり以前より - リモートデバッグ をサポートしてい ます. - これはシリアル回線を使い非常に単純なプロトコルで行ないます. - もちろん, この方法では今までに示した方法とは違い, - 2台のマシンが必 要になります. 1台はデバッグ環境のためのホストで, + リモートデバッグ をサポートしてい ます。 + これはシリアル回線を使い非常に単純なプロトコルで行ないます。 + もちろん、この方法では今までに示した方法とは違い、 + 2 台のマシンが必要になります。1 台はデバッグ環境のためのホストで、 すべてのソースとす - べてのシンボルを含んだバイナリのコピーを持っています. もう 1台は - ターゲットマシンで, 同一のカーネルのコピー (ただしデバッグ情報は - 取り除いてあるもの) を単に実行するためのものです. + べてのシンボルを含んだバイナリのコピーを持っています。もう 1 台は + ターゲットマシンで、同一のカーネルのコピー (ただしデバッグ情報は + 取り除いてあるもの) を単に実行するためのものです。 - この場合, カーネルのコンフィグレーションは config - -g で行な い, - を含めなくてはなりません. そうして通常通りコンパイルし ます. + この場合、カーネルのコンフィグレーションは config + -g で行な い、 + を含めなくてはなりません。そうして通常通りコンパイルし ます。 こうして作ったバイナリファイルはデバッグ情報のために非常に大き - くなります. このカーネルをターゲットマシンにコピーして - strip -x でデバッグシンボルを取り除きます. - そして ブートオプションを使いブートします. + くなります。このカーネルをターゲットマシンにコピーして + strip -x でデバッグシンボルを取り除きます。 + そして ブートオプションを使いブートします。 sio デバイスにフラグ 0x80 が設定されているターゲットマシンの - シリアル回線を, デバッグホストのいずれかのシリアル回線に - つないでください. - それからデバッグ(訳注:ホスト)マシン上で, ターゲットとなって + シリアル回線を、デバッグホストのいずれかのシリアル回線に + つないでください。 + それからデバッグ (訳注:ホスト) マシン上で、ターゲットとなって いるカーネルのコンパイルディレクトリで gdb を起動します: &prompt.user; gdb -k kernel GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.16 (i386-unknown-freebsd), Copyright 1996 Free Software Foundation, Inc... (kgdb) リモートデバッグセッションの初期化 - (1番目のシリアルポートを使用する ことの設定) - を以下のように行ないます. + (1 番目のシリアルポートを使用することの設定) + を以下のように行ないます。 (kgdb) target remote /dev/cuaa0 次にターゲットマシン (デバイスのプローブ直前で DDB に入っています) で次のように入力します: Debugger("Boot flags requested debugger") Stopped at Debugger+0x35: movb $0, edata+0x51bc db> gdb - DDB は次のような出力を返すでしょう. + DDB は次のような出力を返すでしょう。 Next trap will enter GDB remote protocol mode - gdbと入力するたびに リモート GDB - とローカル DDB が交互に切り替わ ります. - トラップをすぐに起こすために単に ``s'' (step) と入力して下 さい. + gdbと入力するたびにリモート GDB + とローカル DDB が交互に切り替わります。 + トラップをすぐに起こすために単に ``s'' (step) と入力して下さい。 そうするとホストの GDB はターゲットのカーネルの制御を行なうよ - うになります. + うになります。 Remote debugging using /dev/cuaa0 Debugger (msg=0xf01b0383 "Boot flags requested debugger") at ../../i386/i386/db_interface.c:257 (kgdb) このセッションではソースコードへのフルアクセスや Emacs の window 上 の gud-mode (これは別の Emacs window - に自動的にソースコードを表示し ます) で動かすなど, 通常の GDB - セッションでできることのほとんどのこ とができます. + に自動的にソースコードを表示します) で動かすなど、通常の GDB + セッションでできることのほとんどのことができます。 GDB を使ったローダブルモジュールのデバッグ - モジュール内部で発生する panic のデバッグや, + モジュール内部で発生する panic のデバッグや、 動的モジュールを使っているマシンを GDB - でリモートデバッグしている場合, + でリモートデバッグしている場合、 モジュールのシンボル情報を得る方法を - GDB に伝える必要があります. + GDB に伝える必要があります。 - まず, モジュールをデバッグ情報を含めて構築する必要があります. + まず、モジュールをデバッグ情報を含めて構築する必要があります。 &prompt.root; cd /sys/modules/linux &prompt.root; make clean; make COPTS=-g - リモート GDB を使っている場合は, + リモート GDB を使っている場合は、 ターゲットマシンで kldstat を実行することで - モジュールがどこにロードされたか調べることが可能です. + モジュールがどこにロードされたか調べることが可能です。 &prompt.root; kldstat Id Refs Address Size Name 1 4 0xc0100000 1c1678 kernel 2 1 0xc0a9e000 6000 linprocfs.ko 3 1 0xc0ad7000 2000 warp_saver.ko 4 1 0xc0adc000 11000 linux.ko - クラッシュダンプをデバッグしている場合, + クラッシュダンプをデバッグしている場合、 linker_files->tqh_first から始まる - linker_files リストを調べ, + linker_files リストを調べ、 探している filename が見つかるまで - link.tqe_next ポインタをたどる必要があります. - エントリ中の address メンバが, - モジュールのロードアドレスです. + link.tqe_next ポインタをたどる必要があります。 + エントリ中の address メンバが、 + モジュールのロードアドレスです。 - 次に, モジュール内の text セクションのオフセットを調べます. + 次に、モジュール内の text セクションのオフセットを調べます。 &prompt.root; objdump --section-headers /sys/modules/linux/linux.ko | grep text 3 .rel.text 000016e0 000038e0 000038e0 000038e0 2**2 10 .text 00007f34 000062d0 000062d0 000062d0 2**2 - 必要なのは .text セクションで, - 上の例では 10 にあたります. その 4 番目の 16 進数フィールド - (全部で 6 フィールドあります) が, ファイル中の text - セクションのオフセットになります. - そして, このオフセットをモジュールのロードアドレスに加算すると - モジュールのコードの再配置アドレスを求めることができます. - この例では 0xc0adc000 + 0x62d0 = 0xc0ae22d0 です. - GDB コマンド add-symbol-file を使い, - 得られたモジュールの情報をデバッガに伝えるには, 次のようにします. + 必要なのは .text セクションで、 + 上の例では 10 にあたります。その 4 番目の 16 進数フィールド + (全部で 6 フィールドあります) が、ファイル中の text + セクションのオフセットになります。 + そして、このオフセットをモジュールのロードアドレスに加算すると + モジュールのコードの再配置アドレスを求めることができます。 + この例では 0xc0adc000 + 0x62d0 = 0xc0ae22d0 です。 + GDB コマンド add-symbol-file を使い、 + 得られたモジュールの情報をデバッガに伝えるには、次のようにします。 (kgdb) add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0 add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0? (y or n) y Reading symbols from /sys/modules/linux/linux.ko...done. (kgdb) - これで, モジュール内のすべてのシンボルにアクセスできるようになります. + これで、モジュール内のすべてのシンボルにアクセスできるようになります。 コンソールドライバのデバッグ - DDBを動かすためにはコンソールドライバが必要ですから, - コンソールドラ イバ自身に不具合のある場合は複雑になります. + DDBを動かすためにはコンソールドライバが必要ですから、 + コンソールドラ イバ自身に不具合のある場合は複雑になります。 シリアルコンソールを利 用する方法 (ブートブロックを変更するか Boot:プロンプトで - と入力する) を思い出してください. - そして標準ター ミナルを最初のシリアルポートに設定します. DDBは, - もちろんシリアルコ ンソールを含むいずれの - コンソールドライバの設定でも動作します. + と入力する) を思い出してください。 + そして標準ター ミナルを最初のシリアルポートに設定します。DDBは、 + もちろんシリアルコンソールを含むいずれの + コンソールドライバの設定でも動作します。 diff --git a/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml b/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml index 86e63452ea..6275294899 100644 --- a/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml @@ -1,793 +1,793 @@ Linux バイナリ互換機能 - オリジナルは Brian N. Handy handy@sxt4.physics.montana.edu と &a.rich; によるものですが, - &a.jim; が 2000 年 3 月 22 日に再構成と一部の更新を行ないました. + オリジナルは Brian N. Handy handy@sxt4.physics.montana.edu と &a.rich; によるものですが、 + &a.jim; が 2000 年 3 月 22 日に再構成と一部の更新を行ないました。 - 訳: &a.jp.kiroh;, 1996 年 9 月 24 日. + 訳: &a.jp.kiroh;、1996 年 9 月 24 日 この章では - この章では FreeBSD における Linux バイナリとの互換機能について, - インストール方法やその仕組みを解説します. + この章では FreeBSD における Linux バイナリとの互換機能について、 + インストール方法やその仕組みを解説します。 - 現時点では, 一体なぜ FreeBSD が Linux + 現時点では、一体なぜ FreeBSD が Linux バイナリを実行できるようにならなければならないのか自問しているのではないでしょうか? - 答えはきわめて簡単です. + 答えはきわめて簡単です。 Linux は現在コンピュータの世界では最もホットなモノなのでたくさんの会社や開発者たちが - Linux のためだけに開発を行なっています. そのため, 残された私たち - FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです. - 問題は, FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない, - ということであり, そのため Linux 版のみを開発しているということなのです. - そこで FreeBSD では Linux バイナリ互換機能が役に立つのです. - - 簡単に言ってしまえば, この機能により全ての Linux アプリケーションの - 90 % が修正なしに FreeBSD 上で起動できます. - この中には Star Office や Linux 版の Netscape, Adobe Acrobat, RealPlayer 5 と 7, - VMWare, Oracle, WordPerfect, Doom, Quake などがあります. - また, ある状況においては Linux バイナリを Linux で動かすよりも - FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります. - - しかしながら, いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません. - 例えば, Linux の /proc ファイルシステムを過度に使うような + Linux のためだけに開発を行なっています。そのため、残された私たち + FreeBSD ユーザは彼らに対して FreeBSD ネイティブなアプリケーションも出すように言うしかないのです。 + 問題は、FreeBSD バージョンも出した場合にどれくらいの数のユーザーが使うのかわからない、 + ということであり、そのため Linux 版のみを開発しているということなのです。 + そこで FreeBSD では Linux バイナリ互換機能が役に立つのです。 + + 簡単に言ってしまえば、この機能により全ての Linux アプリケーションの + 90% が修正なしに FreeBSD 上で起動できます。 + この中には Star Office や Linux 版の Netscape、Adobe Acrobat、RealPlayer 5 と 7、 + VMWare、Oracle、WordPerfect、Doom、Quake などがあります。 + また、ある状況においては Linux バイナリを Linux で動かすよりも + FreeBSD で動かすほうが良いパフォーマンスが出るという報告もあります。 + + しかしながら、いくつかの Linux に特有な OS の機能は FreeBSD ではサポートされていません。 + 例えば、Linux の /proc ファイルシステムを過度に使うような Linux バイナリは FreeBSD では動きません (FreeBSD の /proc - ファイルシステムとは異なるのです) し, - 仮想 8086 モードを有効にするような i386 特有の呼び出しも動きません. + ファイルシステムとは異なるのです) し、 + 仮想 8086 モードを有効にするような i386 特有の呼び出しも動きません。 - Linux バイナリ互換モードのインストールに関しては次のセクションをご覧ください. + Linux バイナリ互換モードのインストールに関しては次のセクションをご覧ください。 インストール 3.0-RELEASE以降であればカーネルのコンフィギュレーションファイルに options LINUXoptions COMPAT_LINUX - といった行を加える必要はありません. + といった行を加える必要はありません。 Linux バイナリ互換機能は今は KLD オブジェクト (Kernel LoaDable object) - として実現されており, リブートしなくても - on-the-fly で組み込むことができるのですが, - /etc/rc.confに次の行を加える必要があります. + として実現されており、リブートしなくても + on-the-fly で組み込むことができるのですが、 + /etc/rc.conf に次の行を加える必要があります。 linux_enable=YES - この設定により, /etc/rc.i386 - では次のような操作が行なわれます. + この設定により、/etc/rc.i386 + では次のような操作が行なわれます。 # Start the Linux binary compatibility if requested. # case ${linux_enable} in [Yy][Ee][Ss]) echo -n ' linux'; linux > /dev/null 2>&1 ;; esac 望みの KLD モジュールがロードされているか確認したい時には - kldstat を利用します. + kldstat を利用します。 &prompt.user; kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko - 何らかの理由で Linux KLD をロードしたくない, - あるいはロードできないような場合には, + 何らかの理由で Linux KLD をロードしたくない、 + あるいはロードできないような場合には、 options LINUX - をカーネルの設定ファイルに指定して, - Linux バイナリ互換機能をカーネルにスタティックリンクしてください. - そして, FreeBSD カーネルのコンフィギュレーション - の記述にしたがって新しいカーネルをインストールしてください. + をカーネルの設定ファイルに指定して、 + Linux バイナリ互換機能をカーネルにスタティックリンクしてください。 + そして、FreeBSD カーネルのコンフィギュレーション + の記述にしたがって新しいカーネルをインストールしてください。 Linux ランタイムライブラリのインストール - これは, linux_base - の port を用いるか, もしくは 手動でインストールします. + これは、linux_base + の port を用いるか、もしくは手動でインストールします。 linux_base の port を用いたインストール - ランタイムライブラリをインストールするには最も簡単な方法です. + ランタイムライブラリをインストールするには最も簡単な方法です。 ports コレクションから他の port - をインストールするのと全く同じようにできます. + をインストールするのと全く同じようにできます。 &prompt.root; cd /usr/ports/emulators/linux_base &prompt.root; make install distclean - これで Linux バイナリ互換機能が使えるはずです. - いつかのプログラムはシステムライブラリのマイナーバージョンが違うと文句を言うかもしれませんが一般的には大した問題ではありません. + これで Linux バイナリ互換機能が使えるはずです。 + いつかのプログラムはシステムライブラリのマイナーバージョンが違うと文句を言うかもしれませんが一般的には大した問題ではありません。 手動でのライブラリのインストール - portsコレクションをインストールしていない場合, - 代わりに手動でライブラリをインストールすることができます. - プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です. - また Linux ライブラリ用の shadow root ディレクトリ, - /compat/linux, を作成する必要があります. - FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは, - まずこのファイルツリーから検索されます. 例えば, + ports コレクションをインストールしていない場合、 + 代わりに手動でライブラリをインストールすることができます。 + プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です。 + また Linux ライブラリ用の shadow root ディレクトリ、 + /compat/linux を作成する必要があります。 + FreeBSD で動作する Linux プログラムが使用するシェアードライブラリは、 + まずこのファイルツリーから検索されます。例えば、 Linux のプログラムが /lib/libc.so - をロードしようとした場合には, FreeBSD はまず + をロードしようとした場合には、FreeBSD はまず /compat/linux/lib/libc.so - を開こうとします. これが存在しなかった場合には, 次に - /lib/libc.so を試します. - シェアードライブラリは, Linux の ld.so - が報告するパスではなく, + を開こうとします。これが存在しなかった場合には、次に + /lib/libc.so を試します。 + シェアードライブラリは、Linux の ld.so + が報告するパスではなく、 /compat/linux/lib - 以下にインストールする 必要があります. + 以下にインストールする必要があります。 Linux のプログラムが必要とする - シェアードライブラリを探す必要があるのは, FreeBSD + シェアードライブラリを探す必要があるのは、FreeBSD のシステムに Linux - のプログラムをインストールする最初の数回だけでしょう. - それが過ぎれば, 十分な Linux のシェアードライブラリがシステムにインストールされ, - 新しくインストールした Linux のバイナリも余計な作業をせずに動作させることができるようになります. + のプログラムをインストールする最初の数回だけでしょう。 + それが過ぎれば、十分な Linux のシェアードライブラリがシステムにインストールされ、 + 新しくインストールした Linux のバイナリも余計な作業をせずに動作させることができるようになります。 シェアードライブラリの追加 - linux_base port をインストールした後に, + linux_base port をインストールした後に、 アプリケーションが必要なライブラリが存在しないというエラーを出したらどうしたらよいでしょうか? - Linux のバイナリがどのシェアードライブラリを必要とし, - そしてどこで入手できるか, どのように探したらよいでしょうか? - 基本的には, 以下の 2 種類の方法があります (以下の手順に従う場合には, + Linux のバイナリがどのシェアードライブラリを必要とし、 + そしてどこで入手できるか、どのように探したらよいでしょうか? + 基本的には、以下の 2 種類の方法があります (以下の手順に従う場合には、 必要なインストール作業をおこなう FreeBSD システム上で root - として作業をおこなう必要があります). + として作業をおこなう必要があります)。 - Linux システムにアクセス可能ならば, - そのアプリケーションがどういうシェアードライブラリを必要としているのか調べ, - 単に FreeBSD にそのライブラリをコピーするだけです. - 次の例を見てみましょう. + Linux システムにアクセス可能ならば、 + そのアプリケーションがどういうシェアードライブラリを必要としているのか調べ、 + 単に FreeBSD にそのライブラリをコピーするだけです。 + 次の例を見てみましょう。 - FTP を使って Doom の Linux バイナリを取ってきて, - アクセスできる Linux システムに置いたとしましょう. - 次のように ldd linuxdoom とするだけでどのシェアードライブラリが必要かチェックできます. + FTP を使って Doom の Linux バイナリを取ってきて、 + アクセスできる Linux システムに置いたとしましょう。 + 次のように ldd linuxdoom とするだけでどのシェアードライブラリが必要かチェックできます。 &prompt.user; ldd linuxxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29 - 最後のカラムに表示されているすべてのファイルを持って来て, - /compat/linux の下に置き, - 最初のカラムに示されるファイル名にシンボリックリンクを張ります. - すなわち, FreeBSD システムでは以下のようなファイルが必要となります. + 最後のカラムに表示されているすべてのファイルを持って来て、 + /compat/linux の下に置き、 + 最初のカラムに示されるファイル名にシンボリックリンクを張ります。 + すなわち、FreeBSD システムでは以下のようなファイルが必要となります。 /compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
最初のカラムに表示されているファイルとメジャーバージョンが同じ - Linux シェアードライブラリを既にインストールしている場合は, - 新たにコピーする 必要はありません. - 既にあるライブラリで動作するはずです. - ただ, 新しいバージョンのものをコピーすることをお奨めします. - 新しいライブラリにシンボリックリンクを変更したら, - 古いライブラリは削除してかまいません. + Linux シェアードライブラリを既にインストールしている場合は、 + 新たにコピーする 必要はありません。 + 既にあるライブラリで動作するはずです。 + ただ、新しいバージョンのものをコピーすることをお奨めします。 + 新しいライブラリにシンボリックリンクを変更したら、 + 古いライブラリは削除してかまいません。 /compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27 - 従って, 以上のようなライブラリがインストールされており, + 従って、以上のようなライブラリがインストールされており、 新しいバイナリに対する ldd - の出力が以下のようになる場合を考えます. + の出力が以下のようになる場合を考えます。 libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29 - このように最後の番号が1つか2つ古いだけならば, 普通は + このように最後の番号が 1 つか 2 つ古いだけならば、普通は /lib/libc.so.4.6.29 - をコピーする必要はありません. わずかに古いライブラリでもプログラムは動作するはずだからです. - もちろん, 以下のように新しいライブラリと置き換えても構いません. + をコピーする必要はありません。わずかに古いライブラリでもプログラムは動作するはずだからです。 + もちろん、以下のように新しいライブラリと置き換えても構いません。 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
シンボリックリンクのメカニズムは Linux - バイナリにのみ必要なことに注意してください. - FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので, - ユーザが気にする必要はありません. + バイナリにのみ必要なことに注意してください。 + FreeBSD のランタイムリンカはメジャーリビジョン番号の一致したライブラリを検索するので、 + ユーザが気にする必要はありません。
Linux の ELF バイナリのインストール - ELF のバイナリを使うためには, - マークをつける (branding) 作業が必要になります. - マークのない ELF バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう. + ELF のバイナリを使うためには、 + マークをつける (branding) 作業が必要になります。 + マークのない ELF バイナリを実行しようとすると以下のようなエラーメッセージを受けとってしまうことでしょう。 &prompt.user; ./my-linux-elf-binary ELF binary type not known Abort カーネルが FreeBSD の ELF バイナリと Linux のバイナリとを - 見分けられるようにするためには, &man.brandelf.1; - ユーティリティを以下のようにして使ってください. + 見分けられるようにするためには、&man.brandelf.1; + ユーティリティを以下のようにして使ってください。 &prompt.user; brandelf -t Linux my-linux-elf-binary - 今ではGNU のツールたちが - ELF バイナリに自動的に適切なマークを付加するようになったので, - 今後はこの作業もだんだんと必要なくなってゆくでしょう. + 今では GNU のツールたちが + ELF バイナリに自動的に適切なマークを付加するようになったので、 + 今後はこの作業もだんだんと必要なくなってゆくでしょう。 ホストネームリゾルバの設定 - DNS がうまく動作しなかったり, + DNS がうまく動作しなかったり、 以下のようなエラーメッセージが表示され - る場合は, /compat/linux/etc/host.conf - ファイルを設定する必要があります. + る場合は、/compat/linux/etc/host.conf + ファイルを設定する必要があります。 resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword - ファイルの内容を以下のように設定してください. + ファイルの内容を以下のように設定してください。 order hosts, bind multi on - ここで, order は /etc/hosts を最初に検索し, - 次にDNSを検索するように指定します. + ここで、order は /etc/hosts を最初に検索し、 + 次に DNS を検索するように指定します。 /compat/linux/etc/host.conf - がインストールされていない場合, + がインストールされていない場合、 Linux アプリケーションは FreeBSD の - /etc/host.conf を使用しようとして, - 文法の違いによる警告を出力します. - /etc/resolv.conf を利用してネームサーバの設定をしていない場合には, - bind を削除してください. + /etc/host.conf を使用しようとして、 + 文法の違いによる警告を出力します。 + /etc/resolv.conf を利用してネームサーバの設定をしていない場合には、 + bind を削除してください。
Mathematica のインストール Mathematica 4.x 用に &a.murray; - がアップデートし, Bojan Bistrovic bojanb@physics.odu.edu - がマージしました. + がアップデートし、Bojan Bistrovic bojanb@physics.odu.edu + がマージしました。 - この章では, Mathematica 4.X Linux 版の FreeBSD - へのインストールについて説明します. + この章では、Mathematica 4.X Linux 版の FreeBSD + へのインストールについて説明します。 - Linux 版の Mathematica は FreeBSD においても完璧に動きます. - ただ, 実行する際に Linux ABI を用いる必要があることを - FreeBSD に教えるために, Wolfram によって出荷されているバイナリにマーク付け - (branded) をする必要があります. + Linux 版の Mathematica は FreeBSD においても完璧に動きます。 + ただ、実行する際に Linux ABI を用いる必要があることを + FreeBSD に教えるために、Wolfram によって出荷されているバイナリにマーク付け + (branded) をする必要があります。 Mathematica や Mathematica for Students の Linux 版は Wolfram (http://www.wolfram.com/) - から直接注文することができます. + から直接注文することができます。 Linux バイナリへのマーク付け (branding) Linux 用バイナリは Wolfram の Mathematica CD-ROM の - Unix ディレクトリにあります. - インストーラーを起動する前にこのディレクトリをローカルディスクにコピーし, - &man.brandelf.1; により Linux バイナリにマークを付けます. + Unix ディレクトリにあります。 + インストーラーを起動する前にこのディレクトリをローカルディスクにコピーし、 + &man.brandelf.1; により Linux バイナリにマークを付けます。 &prompt.root; mount /cdrom &prompt.root; cp -rp /cdrom/Unix/ /localdir/ &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Kernel/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/FrontEnd/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Installation/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Graphics/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/Converters/Binaries/Linux/* &prompt.root; brandelf -t Linux /localdir/Files/SystemFiles/LicenseManager/Binaries/Linux/mathlm &prompt.root; cd /localdir/Installers/Linux/ &prompt.root; ./MathInstaller - また以下のようにすると, マーク付けされていない - ELF バイナリすべての扱いを, デフォルトで Linux - バイナリとすることが可能です. + また以下のようにすると、マーク付けされていない + ELF バイナリすべての扱いを、デフォルトで Linux + バイナリとすることが可能です。 &prompt.root; sysctl -w kern.fallback_elf_brand=3 - これは FreeBSD システムに対して, + これは FreeBSD システムに対して、 マーク付けされていない ELF バイナリが - Linux ABI を利用するように設定します. こうすることで, - CDROM から直接インストーラを実行することが可能になります. + Linux ABI を利用するように設定します。こうすることで、 + CDROM から直接インストーラを実行することが可能になります。 Mathematica パスワードの取得 Mathematica を起動する前に Wolfram から自分の - マシン ID に対応したパスワードを取得しなければいけません. + マシン ID に対応したパスワードを取得しなければいけません。 - 一旦 Linux 互換ランタイムライブラリをインストールし, + 一旦 Linux 互換ランタイムライブラリをインストールし、 Mathematica を展開すれば Install ディレクトリにある mathinfo プログラムを起動して - マシン ID を得ることができます. - このマシン ID は, 最初に見つかったイーサネットカードの MAC アドレスをベースに生成されます. + マシン ID を得ることができます。 + このマシン ID は、最初に見つかったイーサネットカードの MAC アドレスをベースに生成されます。 &prompt.root; cd /localdir/Files/SystemFiles/Installation/Binaries/Linux &prompt.root; mathinfo disco.example.com 7115-70839-20412 - 電子メールや電話, FAXなどでWolfram に登録する時にはこの - マシン ID を渡します. - するといくつかの数字から構成されるパスワードが返されるので, + 電子メールや電話、FAX などで Wolfram に登録する時にはこの + マシン ID を渡します。 + するといくつかの数字から構成されるパスワードが返されるので、 他の Mathematica プラットホームでするのと全く同じように最初に - Mathematica を立ち上げる時にその情報を入力します. + Mathematica を立ち上げる時にその情報を入力します。 ネットワーク経由での Mathematica フロントエンドの起動 - Mathematica は標準フォントセットにない特別な記号 (積分記号, 総和記号, - ギリシャ文字など) を表示するために特殊なフォントを使用します. - X プロトコルは, - これらのフォントがローカルマシンにインストールされていることを要求します. - これはつまり, ローカルマシンに (CD-ROM や Mathematica - がインストールされているホストマシンから) そのフォントをコピーしなければならないということです. - これらのフォントは通常, CD-ROM の - /cdrom/Unix/Files/SystemFiles/Fonts か, もしくはハードディスクの + Mathematica は標準フォントセットにない特別な記号 (積分記号、総和記号、 + ギリシャ文字など) を表示するために特殊なフォントを使用します。 + X プロトコルは、 + これらのフォントがローカルマシンにインストールされていることを要求します。 + これはつまり、ローカルマシンに (CD-ROM や Mathematica + がインストールされているホストマシンから) そのフォントをコピーしなければならないということです。 + これらのフォントは通常、CD-ROM の + /cdrom/Unix/Files/SystemFiles/Fonts か、もしくはハードディスクの /usr/local/mathematica/SystemFiles/Fonts - に置かれており, 実際に使用されるフォントは Type1 と - X のサブディレクトリに格納されています. - これらを利用するには次のような二つ方法があります. + に置かれており、実際に使用されるフォントは Type1 と + X のサブディレクトリに格納されています。 + これらを利用するには次のような二つ方法があります。 - 一つは, フォントファイルをすべて + 一つは、フォントファイルをすべて /usr/X11R6/lib/X11/fonts/ - 以下にある既存のフォントディレクトリにコピーする方法です. - この場合, fonts.dir にフォント名を追加し, - 先頭行のフォント総数を変更することも必要になります. - あるいは, フォントをコピーしたディレクトリで - mkfontdir を実行するだけでもかまいません. + 以下にある既存のフォントディレクトリにコピーする方法です。 + この場合、fonts.dir にフォント名を追加し、 + 先頭行のフォント総数を変更することも必要になります。 + あるいは、フォントをコピーしたディレクトリで + mkfontdir を実行するだけでもかまいません。 - もう一つの方法は, + もう一つの方法は、 /usr/X11R6/lib/X11/fonts/ - にフォントディレクトリごとコピーする方法です. + にフォントディレクトリごとコピーする方法です。 &prompt.root; cd /usr/X11R6/lib/X11/fonts &prompt.root; mkdir X &prompt.root; mkdir MathType1 &prompt.root; cd /cdrom/Unix/Files/SystemFiles/Fonts &prompt.root; cp X/* /usr/X11R6/lib/X11/fonts/X &prompt.root; cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; cd /usr/X11R6/lib/X11/fonts/X &prompt.root; mkfontdir &prompt.root; cd ../MathType1 &prompt.root; mkfontdir - そして, フォントパスに新しいフォントディレクトリを追加します. + そして、フォントパスに新しいフォントディレクトリを追加します。 &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/X &prompt.root; xset fp+ /usr/X11R6/lib/X11/fonts/MathType1 &prompt.root; xset fp rehash - XFree86 サーバを使用しているなら, - /etc/XF86Config に加えることでこれらのフォントを自動的に読み込むことができます. + XFree86 サーバを使用しているなら、 + /etc/XF86Config に加えることでこれらのフォントを自動的に読み込むことができます。 /usr/X11R6/lib/X11/fonts/Type1 という - ディレクトリが存在していない場合には, + ディレクトリが存在していない場合には、 上記例の MathType1Type1 - とすることができます. + とすることができます。 Oracle のインストール Marcel Moolenaar 寄贈 marcel@cup.hp.com はじめに このドキュメントでは Oracle 8.0.5 と Oracle 8.0.5.1 Enterprise Edition - の Linux 版を FreeBSD にインストールするための手順を解説します. + の Linux 版を FreeBSD にインストールするための手順を解説します。 Linux 環境のインストール まずは Ports Collection から linux_base と - linux_devtools をインストールしてください. - これらの ports は FreeBSD 3.2 のリリース後にコレクションに加えられました. + linux_devtools をインストールしてください。 + これらの ports は FreeBSD 3.2 のリリース後にコレクションに加えられました。 もし FreeBSD 3.2 もしくはそれよりも古いものを使っている場合は - ports コレクションをアップデートしましょう. ついでに FreeBSD - をアップデートするのもいいでしょう. もし linux_base-6.1 + ports コレクションをアップデートしましょう。ついでに FreeBSD + をアップデートするのもいいでしょう。もし linux_base-6.1linux_devtools-6.1 でうまくいかなければ - 5.2 を試してみてください. + 5.2 を試してみてください。 もし賢いエージェント (intelligent agent) を起動したいなら Red Hat TCL パッケージ tcl-8.0.3-20.i386.rpm - もインストールする必要があるでしょう. - 公式の RPM パッケージをインストールするには一般的に次のようにします. + もインストールする必要があるでしょう。 + 公式の RPM パッケージをインストールするには一般的に次のようにします。 &prompt.root; rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package - パッケージのインストール時にエラーが出てはいけません. + パッケージのインストール時にエラーが出てはいけません。 Oracle 環境の構築 - Oracleをインストールする前に, 適切な環境を設定する必要があります. - このドキュメントでは, + Oracleをインストールする前に、適切な環境を設定する必要があります。 + このドキュメントでは、 Oracle のインストールガイドに書いてあるようなことではなく FreeBSD で Linux 用 Oracle - を動かすために特別に必要なことのみを解説します. + を動かすために特別に必要なことのみを解説します。 カーネルのチューニング - Oracle インストールガイドにあるように, - シェアードメモリーの最大サイズを設定しなければいけません. - FreeBSD では SHMMAX を使わないようにしてください. + Oracle インストールガイドにあるように、 + シェアードメモリーの最大サイズを設定しなければいけません。 + FreeBSD では SHMMAX を使わないようにしてください。 SHMMAX は単に SHMMAXPGS - と PGSIZE から計算されるだけなのです. - 従って, SHMMAXPGS を使うようにしましょう. - インストールガイドに記述されている他のオプションは使えます. - 例えば以下のようにします. + と PGSIZE から計算されるだけなのです。 + 従って、SHMMAXPGS を使うようにしましょう。 + インストールガイドに記述されている他のオプションは使えます。 + 例えば以下のようにします。 options SHMMAXPGS=10000 options SHMMNI=100 options SHMSEG=10 options SEMMNS=200 options SEMMNI=70 options SEMMSL=61 - これらのオプションを意図した Oracle の使い方に合わせて設定してください. + これらのオプションを意図した Oracle の使い方に合わせて設定してください。 - また, - 次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します. + また、 + 次のオプションがカーネルのコンフィギュレーションファイルにあることも確認します。 options SYSVSHM #SysV shared memory options SYSVSEM #SysV semaphores options SYSVMSG #SysV interprocess communication Oracle 用アカウント - 他のアカウントを作るのと同じように Oracle 用のアカウントを作ります. - Oracle 用のアカウントに特別なのは Linux のシェルを割り当てるところだけです. + 他のアカウントを作るのと同じように Oracle 用のアカウントを作ります。 + Oracle 用のアカウントに特別なのは Linux のシェルを割り当てるところだけです。 /etc/shells/compat/linux/bin/bash - を加え, Oracle 用のアカウントに設定します. + を加え、Oracle 用のアカウントに設定します。 環境設定 ORACLE_HOMEORACLE_SID - といった通常の Oracle 用の変数の他に次の変数も設定しなければなりません. + といった通常の Oracle 用の変数の他に次の変数も設定しなければなりません。 変数 LD_LIBRARY_PATH $ORACLE_HOME/lib CLASSPATH $ORACLE_HOME/jdbc/lib/classes111.zip PATH /compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin - 全ての環境変数は .profile で設定することをお勧めします. - 完璧なサンプルは以下の通りです. + 全ての環境変数は .profile で設定することをお勧めします。 + 完璧なサンプルは以下の通りです。 ORACLE_BASE=/oracle; export ORACLE_BASE ORACLE_HOME=/oracle; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH ORACLE_SID=ORCL; export ORACLE_SID ORACLE_TERM=386x; export ORACLE_TERM CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip export CLASSPATH PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:$ORACLE_HOME/bin export PATH Oracle のインストール - インストーラーを起動する前に, /var/tmp - に .oracle という名前のディレクトリを作る必要がありますが, - これは Linux エミュレーターにおけるちょっとした不整合のためです. - このディレクトリは誰でもが書けるか, もしくは oracle ユーザーのものにしておきます. - これで特に問題なく Oracle がインストールできるでしょう. - もし問題が起こったら, まずは Oracle の配布物や設定をチェックしてください. - Oracle のインストールが終わったら次の二つのサブセクションで解説するパッチを当てます. - - よくあるトラブルは, TCP プロトコルアダプターが正しくインストールされていないことです. - そのため, 一切 TCP リスナーを起動することができないのです. - 次の操作はこの問題を解決するのに役立ちます. + インストーラーを起動する前に、/var/tmp + に .oracle という名前のディレクトリを作る必要がありますが、 + これは Linux エミュレーターにおけるちょっとした不整合のためです。 + このディレクトリは誰でもが書けるか、もしくは oracle ユーザーのものにしておきます。 + これで特に問題なく Oracle がインストールできるでしょう。 + もし問題が起こったら、まずは Oracle の配布物や設定をチェックしてください。 + Oracle のインストールが終わったら次の二つのサブセクションで解説するパッチを当てます。 + + よくあるトラブルは、TCP プロトコルアダプターが正しくインストールされていないことです。 + そのため、一切 TCP リスナーを起動することができないのです。 + 次の操作はこの問題を解決するのに役立ちます。 &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk ntcontab.o &prompt.root; cd $ORACLE_HOME/lib &prompt.root; ar r libnetwork.a ntcontab.o &prompt.root; cd $ORACLE_HOME/network/lib &prompt.root; make -f ins_network.mk install もう一度 root.sh を起動するのを忘れないように! root.sh へのパッチ - Oracle をインストールする時, root + Oracle をインストールする時、root で行なう必要のあるいくつかの操作は root.sh - と呼ばれるシェルスクリプトに記録されます. + と呼ばれるシェルスクリプトに記録されます。 root.shorainst - ディレクトリにあります. 次のパッチを root.sh に当てて - 正しい場所にある chown コマンドを使うようにするか, - 代わりに Linux ネイティブなシェルのもとでスクリプトを走らせましょう. + ディレクトリにあります。次のパッチを root.sh に当てて + 正しい場所にある chown コマンドを使うようにするか、 + 代わりに Linux ネイティブなシェルのもとでスクリプトを走らせましょう。 *** orainst/root.sh.orig Tue Oct 6 21:57:33 1998 --- orainst/root.sh Mon Dec 28 15:58:53 1998 *************** *** 31,37 **** # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/bin/chown # # Define variables to be used in this script --- 31,37 ---- # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/usr/sbin/chown # # Define variables to be used in this script CD-ROM からのインストールでない場合は root.sh - のソースにパッチを当ててもいいでしょう. + のソースにパッチを当ててもいいでしょう。 rthd.sh という名前でソースツリーの - orainst というディレクトリにあります. + orainst というディレクトリにあります。 genclntsh へのパッチ - genclntsh スクリプトは一つの共有クライアントライブラリを生成するのに用いられます. - これはデモを作る時に使われます. - PATH の定義をコメントアウトするために次のパッチを当ててください. + genclntsh スクリプトは一つの共有クライアントライブラリを生成するのに用いられます。 + これはデモを作る時に使われます。 + PATH の定義をコメントアウトするために次のパッチを当ててください。 *** bin/genclntsh.orig Wed Sep 30 07:37:19 1998 --- bin/genclntsh Tue Dec 22 15:36:49 1998 *************** *** 32,38 **** # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst --- 32,38 ---- # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst Oracle の起動 - インストラクションに従えば, Linux でと同じように - Oracle を起動できるでしょう. + インストラクションに従えば、Linux でと同じように + Oracle を起動できるでしょう。 高度なトピックス - Linux バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください. + Linux バイナリ互換機能がどのような仕組みなのか興味がある人はこのセクションを読んでください。 以下の文章で説明されていることのほとんどは &a.chat; に投稿された Terry Lambert (tlambert@primenet.com) 氏のメール - (Message ID: <199906020108.SAA07001@usr09.primenet.com>). - をもとにしています. + (Message ID: <199906020108.SAA07001@usr09.primenet.com>) + をもとにしています。 どのように動くのでしょう? - FreeBSD は, “実行クラスローダ(execution class loader)” - と呼ばれる抽象的な機構を持っています. これは &man.execve.2 - システムコールへの楔という形で実装されています. + FreeBSD は、“実行クラスローダ (execution class loader) ” + と呼ばれる抽象的な機構を持っています。これは &man.execve.2 + システムコールへの楔という形で実装されています。 - FreeBSD は, シェルインタプリタやシェルスクリプトを実行するための - #! ローダを持った単一のプログラムローダではなく, - ローダのリストを持っているのです. + FreeBSD は、シェルインタプリタやシェルスクリプトを実行するための + #! ローダを持った単一のプログラムローダではなく、 + ローダのリストを持っているのです。 - 歴史的には, UNIX プラットフォーム上の唯一のローダーがマジックナンバー + 歴史的には、UNIX プラットフォーム上の唯一のローダーがマジックナンバー (一般的にはファイルの先頭の 4 ないし 8 バイトの部分) - の検査を行ないシステムで実行できるバイナリかどうかを検査し, - もしそうならバイナリローダーを呼び出すというようになっていました. + の検査を行ないシステムで実行できるバイナリかどうかを検査し、 + もしそうならバイナリローダーを呼び出すというようになっていました。 - もし, そのシステム用のバイナリでない場合には, - &man.execve.2; システムコールの呼び出しは失敗の戻り値を返し, - シェルがシェルコマンドとして実行しようと試みていたわけです. + もし、そのシステム用のバイナリでない場合には、 + &man.execve.2; システムコールの呼び出しは失敗の戻り値を返し、 + シェルがシェルコマンドとして実行しようと試みていたわけです。 - この仮定は現在利用しているシェルがどのようなものであっても変わりません. + この仮定は現在利用しているシェルがどのようなものであっても変わりません。 - 後に &man.sh.1; に変更が加えられ, 先頭の 2 バイトを検査した結果 - :\n であれば代わりに &man.csh.1; を呼び出す, - というようになりました(この変更は SCO が最初に行なったと思われます). + 後に &man.sh.1; に変更が加えられ、先頭の 2 バイトを検査した結果 + :\n であれば代わりに &man.csh.1; を呼び出す、 + というようになりました (この変更は SCO が最初に行なったと思われます)。 - 現在の FreeBSD は, プログラムローダリストを走査します. - その際, 空白文字までの文字列をインタプリタとして認識する, - 通常の #! ローダを用いるため, - 該当するものが存在しなければ最終的に /bin/sh がロードされます. + 現在の FreeBSD は、プログラムローダリストを走査します。 + その際、空白文字までの文字列をインタプリタとして認識する、 + 通常の #! ローダを用いるため、 + 該当するものが存在しなければ最終的に /bin/sh がロードされます。 - Linux ABI をサポートするため, FreeBSD は - ELF バイナリを示すマジックナンバを確認します. - (ただし, この段階では FreeBSD, Solaris, Linux, そしてその他の - ELF イメージ形式を使っている OS を区別することはできません). + Linux ABI をサポートするため、FreeBSD は + ELF バイナリを示すマジックナンバを確認します。 + (ただし、この段階では FreeBSD、Solaris、Linux、そしてその他の + ELF イメージ形式を使っている OS を区別することはできません)。 - ELF ローダは, 特殊なマーク (brand) があるかどうか探します. - このマークとは, ELF イメージのコメントセクションのことです. - SVR4/Solaris の ELF バイナリには, このセクションは存在しません. + ELF ローダは、特殊なマーク (brand) があるかどうか探します。 + このマークとは、ELF イメージのコメントセクションのことです。 + SVR4/Solaris の ELF バイナリには、このセクションは存在しません。 - Linux バイナリを実行するためには, + Linux バイナリを実行するためには、 ELF バイナリに &man.brandelf.1; で説明されている - Linux のマークが付けられていなければなりません. + Linux のマークが付けられていなければなりません。 &prompt.root; brandelf -t Linux file - 上のようにすることで, 指定されたファイルは - Linux のマークが付けられ, - ELF ローダが認識できるようになります. + 上のようにすることで、指定されたファイルは + Linux のマークが付けられ、 + ELF ローダが認識できるようになります。 - ELF ローダが Linux マークを確認すると, + ELF ローダが Linux マークを確認すると、 ローダは proc 構造体内の - ある一つのポインタを置き換えます. システムコールは全て, + ある一つのポインタを置き換えます。システムコールは全て、 このポインタ (伝統的な UNIX システムではこれは構造体の配列 sysent[] - で, システムコールが含まれています) を通してインデックスされます. - さらに, そのプロセスには Linux カーネルモジュールに必要な - シグナルトランポリンコード(訳注: - シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や, - 他の(細かな)調整のための設定が行なわれます. + で、システムコールが含まれています) を通してインデックスされます。 + さらに、そのプロセスには Linux カーネルモジュールに必要な + シグナルトランポリンコード (訳注: + シグナルの伝播を実現するコード) 用の特殊なトラップベクタの設定や、 + 他の (細かな) 調整のための設定が行なわれます。 - Linux システムコールベクタは, + Linux システムコールベクタは、 さまざまなデータに加えて sysent[] - エントリーのリストを含んでおり, それらのアドレスはカーネルモジュール内にあります. + エントリーのリストを含んでおり、それらのアドレスはカーネルモジュール内にあります。 - Linux バイナリがシステムコールを発行する際, トラップコードは + Linux バイナリがシステムコールを発行する際、トラップコードは proc 構造体を用いてシステムコール関数ポインタを - 解釈します. そして FreeBSD ではなく - Linux 用のシステムコールエントリポイントを得るわけです. + 解釈します。そして FreeBSD ではなく + Linux 用のシステムコールエントリポイントを得るわけです。 - さらに, Linux モードは状況に応じてファイルシステム本来のルートマウントポイントを置き換えてファイルの参照を行ないます. - これは, union オプションを指定してマウントされたファイルシステム - (unionfs ではありません!)が行なっていることと同じです. + さらに、Linux モードは状況に応じてファイルシステム本来のルートマウントポイントを置き換えてファイルの参照を行ないます。 + これは、union オプションを指定してマウントされたファイルシステム + (unionfs ではありません!)が行なっていることと同じです。 ファイルを検索する際にはまず /compat/linux/original-path - ディレクトリを, それから見つけられなかったときにのみ, + ディレクトリを、それから見つけられなかったときにのみ、 /original-path - を調べます. - こうすることで, 他のバイナリを要求するバイナリの実行を可能にしています - (したがって, Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです). - またこれは, もし対応する Linux バイナリが存在しない場合に - Linux バイナリが FreeBSD バイナリをロードしたり, 実行したりすることが可能であること, + を調べます。 + こうすることで、他のバイナリを要求するバイナリの実行を可能にしています + (したがって、Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです)。 + またこれは、もし対応する Linux バイナリが存在しない場合に + Linux バイナリが FreeBSD バイナリをロードしたり、実行したりすることが可能であること、 その Linux バイナリに自分自身が Linux 上で実行されていないことを - 気付かせないようにする目的で, &man.uname.1; コマンドを - /compat/linux ディレクトリに置くことができる, - ということを意味します. + 気付かせないようにする目的で、&man.uname.1; コマンドを + /compat/linux ディレクトリに置くことができる、 + ということを意味します。 - 要するに, Linux カーネルが FreeBSD カーネルの内部に存在しているわけです. + 要するに、Linux カーネルが FreeBSD カーネルの内部に存在しているわけです。 カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は FreeBSD システムコールテーブルエントリと - Linux システムコールテーブルエントリの両方で共通に利用されています. - これらにはファイルシステム処理, 仮想メモリ処理, シグナル伝送, System V IPC - などが含まれますが, + Linux システムコールテーブルエントリの両方で共通に利用されています。 + これらにはファイルシステム処理、仮想メモリ処理、シグナル伝送、System V IPC + などが含まれますが、 FreeBSD バイナリは FreeBSD グルー (訳注: glue; - 二者の間を仲介するという意味) 関数群, - そして Linux バイナリは Linux グルー関数群を用いる, - という点だけが異なります(過去に存在したほとんどの OS は, - 自分自身のためのグルー関数群しか備えていません. - 前述したように, システムコールを発行する際, - 各々のプロセスの proc 構造体内にある, - ローダによって動的に初期化されるポインタを参照してアドレスを得る代わりに, + 二者の間を仲介するという意味) 関数群、 + そして Linux バイナリは Linux グルー関数群を用いる、 + という点だけが異なります (過去に存在したほとんどの OS は、 + 自分自身のためのグルー関数群しか備えていません。 + 前述したように、システムコールを発行する際、 + 各々のプロセスの proc 構造体内にある、 + ローダによって動的に初期化されるポインタを参照してアドレスを得る代わりに、 静的でグローバルな sysent[] 構造体の配列に - システムコール関数のアドレスが直接格納されているのです). + システムコール関数のアドレスが直接格納されているのです)。 - さて, どちらを本来の FreeBSD ABI (訳注: Applications Binary Interface; + さて、どちらを本来の FreeBSD ABI (訳注: Applications Binary Interface; 同じ CPU を利用したコンピュータ間でバイナリを共有するための規約のこと) と呼ぶべきなのでしょうか? - 実は, どちらが本来のものであるかということを論ずることに意味はありません. - 基本的に, FreeBSD グルー関数群はカーネルの中に静的にリンクされていて, - Linux グルー関数群は静的にリンクすることも, - カーネルモジュールを介して利用することもできるようになっている, - という違いがあるだけ (ただしこれは現時点においての話であり, - 将来のリリースで変更される可能性がありますし, - おそらく実際に変更されるでしょう) です. + 実は、どちらが本来のものであるかということを論ずることに意味はありません。 + 基本的に、FreeBSD グルー関数群はカーネルの中に静的にリンクされていて、 + Linux グルー関数群は静的にリンクすることも、 + カーネルモジュールを介して利用することもできるようになっている、 + という違いがあるだけ (ただしこれは現時点においての話であり、 + 将来のリリースで変更される可能性がありますし、 + おそらく実際に変更されるでしょう) です。 - あ, 「でもこれは本当にエミュレーションと呼べるのか」って? - 答えは「いいえ」です. これは ABI の実装であり, - エミュレーションとは異なります. エミュレータが呼び出されているわけではありません - (シミュレータでもないことをあらかじめ断っておきましょう). - - では, これがよく Linux エミュレーションと呼ばれるのは何故でしょうか? - それはもちろん FreeBSD の売りにするため 8-) でもあるのですが, - 実際には, 次のような理由によります. - この機能が初めて実装された頃, - 動作原理を説明する以外にこの機能を表現する言葉はありませんでした. - しかし, コードをコンパイルしたりモジュールをロードしない場合, - 「FreeBSD 上で Linux バイナリを実行する」という表現は, - 厳密に考えると適切ではありません. - そこで, その際にロードされているもの自身を表現する言葉—すなわち - Linux エミュレータが必要だったのです. + あ、「でもこれは本当にエミュレーションと呼べるのか」って? + 答えは「いいえ」です。これは ABI の実装であり、 + エミュレーションとは異なります。エミュレータが呼び出されているわけではありません + (シミュレータでもないことをあらかじめ断っておきましょう)。 + + では、これがよく Linux エミュレーションと呼ばれるのは何故でしょうか? + それはもちろん FreeBSD の売りにするため 8-) でもあるのですが、 + 実際には、次のような理由によります。 + この機能が初めて実装された頃、 + 動作原理を説明する以外にこの機能を表現する言葉はありませんでした。 + しかし、コードをコンパイルしたりモジュールをロードしない場合、 + 「FreeBSD 上で Linux バイナリを実行する」という表現は、 + 厳密に考えると適切ではありません。 + そこで、その際にロードされているもの自身を表現する言葉 — すなわち + Linux エミュレータが必要だったのです。
diff --git a/ja_JP.eucJP/books/handbook/mail/chapter.sgml b/ja_JP.eucJP/books/handbook/mail/chapter.sgml index b076b7b637..33e77e5c9a 100644 --- a/ja_JP.eucJP/books/handbook/mail/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/mail/chapter.sgml @@ -1,555 +1,555 @@ Bill Lloyd 原作: Jim Mock 改訂: 電子メール 訳: &a.jp.mihoko;. 14 January 1997. この章では email 電子メール - 電子メール, emailとしてのほうが知られているでしょう, - は現代で最も広く利用されているコミュニケーション手段の一つです. - 何百万人という人が毎日 email を使っており, - この文章を偶然にもオンラインで読んでいるという人はこのカテゴリーに入るでしょうし, - 複数の email アドレスを持っていたりもするかもしれません. - - 電子メールの設定は多くのシステム管理書籍のテーマになっています. - もし自分のネットワーク用に一つメールホストを設定することよりもさらに高度なことをしようとするなら, - しっかりとしたヘルプが必要でしょう. + 電子メール、email としてのほうが知られているでしょう、 + は現代で最も広く利用されているコミュニケーション手段の一つです。 + 何百万人という人が毎日 email を使っており、 + この文章を偶然にもオンラインで読んでいるという人はこのカテゴリーに入るでしょうし、 + 複数の email アドレスを持っていたりもするかもしれません。 + + 電子メールの設定は多くのシステム管理書籍のテーマになっています。 + もし自分のネットワーク用に一つメールホストを設定することよりもさらに高度なことをしようとするなら、 + しっかりとしたヘルプが必要でしょう。 DNS email の設定におけるいくつかの部分は Domain Name System (DNS) - の管理下にあります. 自分の DNS サーバーを立ち上げようと思っているなら, + の管理下にあります。自分の DNS サーバーを立ち上げようと思っているなら、 必ず /etc/namedb と - man -k named を一通り読むようにしてください. + man -k named を一通り読むようにしてください。 電子メールを使う POP IMAP - email の交換には 5 つの主要な部分があります. - それらは ユーザープログラム, - サーバーデーモン, - DNS, - POP もしくは IMAP のデーモン, - そしてもちろん メールホストです. + email の交換には 5 つの主要な部分があります。 + それらは ユーザープログラム、 + サーバーデーモン、 + DNS、 + POP もしくは IMAP のデーモン、 + そしてもちろん メールホストです。 ユーザープログラム - いくつか名前を挙げれば, - mutt, pine, - elm, そして - mail, + いくつか名前を挙げれば、 + muttpine、 + elm、そして + mail、 といったコマンドラインプログラムや - balsa, + balsaxfmail のような - GUI プログラム, WWW ブラウザーのようにさらに洗練されたものまであります. - これらのプログラムは, email の処理を + GUI プログラム、WWW ブラウザーのようにさらに洗練されたものまであります。 + これらのプログラムは、email の処理を server daemons を呼び出したり - TCP 経由で渡したり, といった手段でローカルの - メールホストに任せるだけです. + TCP 経由で渡したり、といった手段でローカルの + メールホストに任せるだけです。 メールホストサーバデーモン メールサーバデーモン sendmail メールサーバデーモン postfix メールサーバデーモン qmail メールサーバデーモン exim - 通常, これは sendmail - (FreeBSD のデフォルト) や qmail, - postfix, もしくは + 通常、これは sendmail + (FreeBSD のデフォルト) や qmail、 + postfix、もしくは exim - といった他のメールサーバーデーモンの一つです. - 他にもあるのですが、以上のものが広く使われています. + といった他のメールサーバーデーモンの一つです。 + 他にもあるのですが、以上のものが広く使われています。 サーバーデーモンは通常 2 つの機能 — - やってくるメールを受け取るのと出ていくメールを配送する, - を持っています. メールを読むために POP や IMAP で接続する, - ということはできません. - そのためにはもう一つデーモンが必要なのです. + やってくるメールを受け取るのと出ていくメールを配送する、 + を持っています。メールを読むために POP や IMAP で接続する、 + ということはできません。 + そのためにはもう一つデーモンが必要なのです。 いくつかの古いバージョンの sendmail - には深刻なセキュリティー問題がありますが, - 現在のバージョンを使っているおれば特に問題ないことに注意してください. - 例のごとく, - どんなソフトウェアを利用する時にも最新の状態にしておくのが大事なのです. + には深刻なセキュリティー問題がありますが、 + 現在のバージョンを使っているおれば特に問題ないことに注意してください。 + 例のごとく、 + どんなソフトウェアを利用する時にも最新の状態にしておくのが大事なのです。 Email and DNS Domain Name System (DNS) とそのデーモンである - named は email の配送において大変重要な役割を担ってます. - あなたのサイトからもう一つのサイトへメールを配送するためには, - サーバーデーモンは DNS からそのサイトを探し, - メールの受け取り先のホストを決定します. - - メールがあなたに送られた場合にも同じような仕組みになっています. - DNS にはホスト名と IP アドレス, ホスト名とメールホストをマッピングするデータベースがあります. - IP アドレスは A レコードで指定されます. - MX (Mail eXchanger) レコードはあなた宛のメールを受け取るホストを指定します. - あなたのホスト名に対する MX レコードがない場合には, - メールは直接あなたのホストに配送されます. + named は email の配送において大変重要な役割を担ってます。 + あなたのサイトからもう一つのサイトへメールを配送するためには、 + サーバーデーモンは DNS からそのサイトを探し、 + メールの受け取り先のホストを決定します。 + + メールがあなたに送られた場合にも同じような仕組みになっています。 + DNS にはホスト名と IP アドレス、ホスト名とメールホストをマッピングするデータベースがあります。 + IP アドレスは A レコードで指定されます。 + MX (Mail eXchanger) レコードはあなた宛のメールを受け取るホストを指定します。 + あなたのホスト名に対する MX レコードがない場合には、 + メールは直接あなたのホストに配送されます。 メールの受け取り email 受け取り - メールはメールホストが受け取ります. - このホストは送られてきたメールを集め, - (ユーザーが) 読んだりピックアップしたりするために保存します. - 保存されているメールをピックアップするにはメールホストに接続する必要があります. - これは POP や IMAP を用いて行なわれます. - メールホスト上で直接メールを読みたい時は POP や IMAP のサーバーは必要ありません. + メールはメールホストが受け取ります。 + このホストは送られてきたメールを集め、 + (ユーザーが) 読んだりピックアップしたりするために保存します。 + 保存されているメールをピックアップするにはメールホストに接続する必要があります。 + これは POP や IMAP を用いて行なわれます。 + メールホスト上で直接メールを読みたい時は POP や IMAP のサーバーは必要ありません。 POP IMAP - POP や IMAP のサーバーを走らせるためには 2 つのことをやらなければいけません. + POP や IMAP のサーバーを走らせるためには 2 つのことをやらなければいけません。 - POP や IMAP のデーモンをports コレクションからインストールします. + POP や IMAP のデーモンをports コレクションからインストールします。 - /etc/inetd.conf を修正して POP や IMAP のサーバーが起動されるように設定します. + /etc/inetd.conf を修正して POP や IMAP のサーバーが起動されるように設定します。 メールホスト メールホスト - メールホストとは責任をもってメールを配送したり, - あなたのホストや, もしかするネットワークも, に宛てたメールを受け取ったりするホストに与えられる名前です. + メールホストとは責任をもってメールを配送したり、 + あなたのホストや、もしかするネットワークも、に宛てたメールを受け取ったりするホストに与えられる名前です。 トラブルシュート email トラブルシューティング - ここには、いくつかのよく聞かれる質問とその答があります. - それらは FAQ からこちらに移りました. + ここには、いくつかのよく聞かれる質問とその答があります。 + それらは FAQ からこちらに移りました。 どうして自分のサイトのホストなのに FQDN を使わなければいけないのですか? - 恐らく, そのホストは実際には別のドメインにあるのでしょう. - 例えば foo.bar.edu ドメインにいて, + 恐らく、そのホストは実際には別のドメインにあるのでしょう。 + 例えば foo.bar.edu ドメインにいて、 bar.edu というドメイン内の - mumble というホストにアクセスしたいとします. + mumble というホストにアクセスしたいとします。 この時は単に mumble ではなく - mumble.bar.edu と FQDN で参照しなければなりません. + mumble.bar.edu と FQDN で参照しなければなりません。 BIND - そもそも, BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが, + そもそも、BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが、 FreeBSD に入っている最新版の BIND - では自分のドメイン以外に対する FQDN でない省略形は許されません. + では自分のドメイン以外に対する FQDN でない省略形は許されません。 従ってホストを mumble と曖昧に指定した場合は - mumble.foo.bar.edu という名前があればそれになり, - そうでなければ root ドメインから検索されます. + mumble.foo.bar.edu という名前があればそれになり、 + そうでなければ root ドメインから検索されます。 - これは, + これは、 mumble.bar.edumumble.edu - ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです. + ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです。 このような事が悪い例もしくはセキュリティホールとみなされる理由については - RFC 1535 を見てください. + RFC 1535 を見てください。 /etc/resolv.confdomain foo.bar.edu と書いてある行を search foo.bar.edu bar.edu - と書き換えることで上のようなことができます. - しかし, RFC 1535 にあるように検索順序が内部 (local) - と外部 (public) の管理の境界をまたがないようにしてください. + と書き換えることで上のようなことができます。 + しかし、RFC 1535 にあるように検索順序が内部 (local) + と外部 (public) の管理の境界をまたがないようにしてください。 sendmail が mail loops back to - myself というメッセージを出すのですが. + myself というメッセージを出すのですが。 - sendmail FAQ に次のように書いてあります. + sendmail FAQ に次のように書いてあります。 - * Local configuration error というメッセージが出ます. 例えば, + * Local configuration error というメッセージが出ます。例えば、 553 relay.domain.net config error: mail loops back to myself 554 <user@domain.net>... Local configuration error -のような感じですが, どうしたら解決できますか? +のような感じですが、どうしたら解決できますか? -これは, 例えば domain.net のようなドメイン宛てのメールを +これは、例えば domain.net のようなドメイン宛てのメールを MX レコードで特定のホスト(ここでは -relay.domain.net) に送ろうとしたのに, +relay.domain.net) に送ろうとしたのに、 そのホストでは domain.net -宛てのメールを受け取れるような設定になっていない場合です. +宛てのメールを受け取れるような設定になっていない場合です。 設定の際に FEATURE(use_cw_file) を指定してある場合には -/etc/sendmail.cw の中に domain.net を追加してください. -もしくは, /etc/sendmail.cf の中に Cw domain.net -を追加してください. +/etc/sendmail.cw の中に domain.net を追加してください。 +もしくは、/etc/sendmail.cf の中に Cw domain.net +を追加してください。 sendmail FAQ は - /usr/src/usr.sbin/sendmail にありますので, - メールの設定におかしなことがあれば常に読んでください. + /usr/src/usr.sbin/sendmail にありますので、 + メールの設定におかしなことがあれば常に読んでください。 PPP ダイアルアップ PPP ホストで電子メールを使うにはどうしたらいいの? - LAN 上にある FreeBSD マシンを, - インターネットに接続したいとします. FreeBSD マシンは, その - LAN でのメールゲートウェイになります. FreeBSD + LAN 上にある FreeBSD マシンを、 + インターネットに接続したいとします。FreeBSD マシンは、その + LAN でのメールゲートウェイになります。FreeBSD マシンは専用線接続ではありません - (訳注:ダイアルアップ接続など). + (訳注: ダイアルアップ接続など)。 - これには, 少なくとも二つの方法があります. + これには、少なくとも二つの方法があります。 UUCP - 一つは UUCP を使うことです. + 一つは UUCP を使うことです。 - このとき鍵になるのは, あなたのドメインに対するセカンダリ - MX サービスを提供してくれるインターネットサイトをみつけることです. - 例えば以下のように. + このとき鍵になるのは、あなたのドメインに対するセカンダリ + MX サービスを提供してくれるインターネットサイトをみつけることです。 + 例えば以下のように。 bigco.com. MX 10 bigco.com. MX 20 smalliap.com. - 最終的なメール受信先としては, + 最終的なメール受信先としては、 一つのホストだけが定義されるべきです (bigco.com 上の - /etc/sendmail.cf ファイルに, Cw - bigco.com を追加します). - - 送信側の sendmail が, - メールを配送しようとしている時, モデムの接続を - 介してあなたのところに接続しようとします. 大抵の場合, - あなたのマシンがオンラインでないために, 接続はタイムアウト - してしまうでしょう. sendmail は自動的に, + /etc/sendmail.cf ファイルに、Cw + bigco.com を追加します)。 + + 送信側の sendmail が、 + メールを配送しようとしている時、モデムの接続を + 介してあなたのところに接続しようとします。大抵の場合、 + あなたのマシンがオンラインでないために、接続はタイムアウト + してしまうでしょう。sendmail は自動的に、 メールをセカンダリの MX サイト に - (あなたのインターネットプロバイダ) に配送します. セカンダリ MX - サイトは, (/etc/rc.conf ファイル に + (あなたのインターネットプロバイダ) に配送します。セカンダリ MX + サイトは、(/etc/rc.conf ファイル に sendmail_flag = "-bd - -q15m"と書かれている場合) 15 分ごとに, - プライマリ MX サイトにメールを配送しようと, - あなたのホストに接続しに いきます. + -q15m"と書かれている場合) 15 分ごとに、 + プライマリ MX サイトにメールを配送しようと、 + あなたのホストに接続しに いきます。 - ログインスクリプトとして, - このようなものを使うとよいでしょう. + ログインスクリプトとして、 + このようなものを使うとよいでしょう。 #!/bin/sh # Put me in /usr/local/bin/pppbigco ( sleep 60 ; /usr/sbin/sendmail -q ) & /usr/sbin/ppp -direct pppbigco - ユーザごとにログインスクリプトを作りたい場合には, 上記 - のスクリプトの代わりに, sendmail - -qRbigco.com を使用する こともできます. - このようにすると, キューの中の bigco.com に対する - すべてのメールは, すぐに強制的に処理されます. + ユーザごとにログインスクリプトを作りたい場合には、上記 + のスクリプトの代わりに、sendmail + -qRbigco.com を使用する こともできます。 + このようにすると、キューの中の bigco.com に対する + すべてのメールは、すぐに強制的に処理されます。 - さらに, 次のような改良もできます. + さらに、次のような改良もできます。 - 以下は, &a.isp; - メイリングリストから抜粋してきたメッセージです. + 以下は、&a.isp; + メイリングリストから抜粋してきたメッセージです。 - > 私たちはお客様に対して, セカンダリ MX を提供しています. -> お客様は一日に何回か私たちのサービスに接続し, メールを彼らのプライマリ MX -> に受け取ります (彼らのドメインに対するメールが到着した時には, -> 私たちは彼らのサイトを呼び出しません). -> 私たちの sendmail は, 30 分ごとにメールキューに溜っているメールを配送します. -> ちょうどその時に, すべてのメールがプライマリ MX に送られたかどうかを確かめるためには, -> 彼らは 30 分は オンラインでいなければなりません. + > 私たちはお客様に対して、セカンダリ MX を提供しています。 +> お客様は一日に何回か私たちのサービスに接続し、メールを彼らのプライマリ MX +> に受け取ります (彼らのドメインに対するメールが到着した時には、 +> 私たちは彼らのサイトを呼び出しません)。 +> 私たちの sendmail は、30 分ごとにメールキューに溜っているメールを配送します。 +> ちょうどその時に、すべてのメールがプライマリ MX に送られたかどうかを確かめるためには、 +> 彼らは 30 分は オンラインでいなければなりません。 > > すべてのメールを今すぐ送るために sendmail を初期化するコマンドはあるでしょうか? -> もちろん私たちのマシン上には, ユーザはルート (root) 権限を持っていません. +> もちろん私たちのマシン上には、ユーザはルート (root) 権限を持っていません。 -sendmail.cf の privacy flags セクションに, -Opgoaway,restrictqrun の定義があります. +sendmail.cf の privacy flags セクションに、 +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 -このようにすると, リモートサイトからのメールが, -顧客のマシンと接続しようとせず, 直接あなたがたのホストマシンに配送されるようになります. -ホストマシンに配送されたメールは, 続いて顧客のマシンに送られます. -これはホスト名にのみ有効なので, 顧客のメールマシンに, -host.customer.com とは別に, customer.comも定義する必要があります. -DNS 上で, customer.comに対する A レコードを定義してください. +このようにすると、リモートサイトからのメールが、 +顧客のマシンと接続しようとせず、直接あなたがたのホストマシンに配送されるようになります。 +ホストマシンに配送されたメールは、続いて顧客のマシンに送られます。 +これはホスト名にのみ有効なので、顧客のメールマシンに、 +host.customer.com とは別に、customer.comも定義する必要があります。 +DNS 上で、customer.comに対する A レコードを定義してください。 先進的なトピックス - これからのセクションでは, - メールの設定やドメイン全体のためのメールの設定といったさらに突込んだ話題について触れます. + これからのセクションでは、 + メールの設定やドメイン全体のためのメールの設定といったさらに突込んだ話題について触れます。 基本事項 email 設定 - あなたのマシンに FreeBSD を普通にインストールして, - /etc/resolv.conf ファイルを設定するか, - またはネームサーバを走らせれば, - 他のホストへ電子メールを送ることができるようになります. - あなたのホスト宛のメールを特定のホストに配送するようにしたい場合には, - 次の二つの方法があります. + あなたのマシンに FreeBSD を普通にインストールして、 + /etc/resolv.conf ファイルを設定するか、 + またはネームサーバを走らせれば、 + 他のホストへ電子メールを送ることができるようになります。 + あなたのホスト宛のメールを特定のホストに配送するようにしたい場合には、 + 次の二つの方法があります。 - 自身でネームサーバーを実行し, - 自分のドメインを持つ. 例えば - FreeBSD.org. + 自身でネームサーバーを実行し、 + 自分のドメインを持つ。例えば + FreeBSD.org - あなたのホストへ直接メールが配送されるようにする. + あなたのホストへ直接メールが配送されるようにする。 これはメールがあなたのマシンの現在の - DNS 名に直接配送されるようにすることにより実現できます. - たとえば example.FreeBSD.org. + DNS 名に直接配送されるようにすることにより実現できます。 + たとえば example.FreeBSD.org SMTP - 上のどちらを選ぶ場合でも, 自分のホストに直接メールが配送されるようにするには恒久的 - (静的) な IP アドレス (動的な PPP ダイアルアップではない) を持っていなければなりません. - もしファイアーウォールの中にいるならば, SMTP トラフィックが通過してくれないといけません. - もし自分のホストでメールを受け取りたいならば, - 次の二つのうちの一つができていることを確認してください. + 上のどちらを選ぶ場合でも、自分のホストに直接メールが配送されるようにするには恒久的 + (静的) な IP アドレス (動的な PPP ダイアルアップではない) を持っていなければなりません。 + もしファイアーウォールの中にいるならば、SMTP トラフィックが通過してくれないといけません。 + もし自分のホストでメールを受け取りたいならば、 + 次の二つのうちの一つができていることを確認してください。 MX レコード 自分のドメインでの MX レコードが自分のホストの - IP アドレスを差していることを確認する. + IP アドレスを差していることを確認する。 - 自分のドメインの中に自分のホスト用の MX がないことを確認する. + 自分のドメインの中に自分のホスト用の MX がないことを確認する。 - 上のどちらかが設定されていれば, - 自分のホストでメールを受け取ることができるでしょう. + 上のどちらかが設定されていれば、 + 自分のホストでメールを受け取ることができるでしょう。 - 次のコマンドを実行してみてください. + 次のコマンドを実行してみてください。 &prompt.root; hostname example.FreeBSD.org &prompt.root; host example.FreeBSD.org example.FreeBSD.org has address 204.216.27.XX - もしあなたのマシンが上記のメッセージだけを出力したならば, + もしあなたのマシンが上記のメッセージだけを出力したならば、 yourlogin@example.FreeBSD.org - へのメールは問題なく配送されるでしょう. + へのメールは問題なく配送されるでしょう。 - 上記のメッセージの代わりに, + 上記のメッセージの代わりに、 &prompt.root; host example.FreeBSD.org example.FreeBSD.org has address 204.216.27.XX example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org - というメッセージが出力された場合は, + というメッセージが出力された場合は、 あなたのホスト (example.FreeBSD.org) に宛てたメールは全て直接配送されずに hub - 上の同じユーザー名に配送されます. + 上の同じユーザー名に配送されます。 - 上の情報は DNS サーバーが扱います. - メールルーティング情報をもつ DNS レコードは, - Mail eXchange エントリーです. - MX エントリが存在しない場合には, IP アドレスにしたがって, - 直接宛先ホストに配送されます. + 上の情報は DNS サーバーが扱います。 + メールルーティング情報をもつ DNS レコードは、 + Mail eXchange エントリーです。 + MX エントリが存在しない場合には、IP アドレスにしたがって、 + 直接宛先ホストに配送されます。 freefall.FreeBSD.org - の現時点での MX エントリは, 次のようになっています. + の現時点での MX エントリは、次のようになっています。 freefall MX 30 mail.crl.net freefall MX 40 agora.rdrop.com freefall MX 10 freefall.FreeBSD.org freefall MX 20 who.cdrom.com freefall は多くの MX - エントリを持っています. もっとも MX の値が小さいホストが最終的にメールを受け取ります. + エントリを持っています。もっとも MX の値が小さいホストが最終的にメールを受け取ります。 もし freefall - が他の処理で忙しかったり, ダウンしているような場合には, - 他のホストが一時的にメールをキューにいれます. + が他の処理で忙しかったり、ダウンしているような場合には、 + 他のホストが一時的にメールをキューにいれます。 - 使い勝手をよくするためには, 代替の MX サイトは, それぞれ - 別の経路でインターネットへ接続しているとよいでしょう. - インターネットプロバイダまたは他の関連サイトが, このサービスを - 提供することができます. + 使い勝手をよくするためには、代替の MX サイトは、それぞれ + 別の経路でインターネットへ接続しているとよいでしょう。 + インターネットプロバイダまたは他の関連サイトが、このサービスを + 提供することができます。 あなたのドメインに対するメール設定 メールホスト (メールサーバーとしても知られています) - をセットアップするためには, - いろいろなワークステーションに宛てた全てのメールを受ける必要があります. - 基本的には, あなたのドメイン (この場合だと + をセットアップするためには、 + いろいろなワークステーションに宛てた全てのメールを受ける必要があります。 + 基本的には、あなたのドメイン (この場合だと *.FreeBSD.org) - 宛ての全てのメールをハイジャックし, - そのメールをあなたのメールサーバーに配送し, - ユーザーが POP を通じてあるいはサーバー上で直接, メールをチェックできるようにします. + 宛ての全てのメールをハイジャックし、 + そのメールをあなたのメールサーバーに配送し、 + ユーザーが POP を通じてあるいはサーバー上で直接、メールをチェックできるようにします。 DNS - 話を簡単にするために, あるユーザーのアカウントはどのマシンでも同じユーザー名にすべきです. - そのためには adduser を使ってください. + 話を簡単にするために、あるユーザーのアカウントはどのマシンでも同じユーザー名にすべきです。 + そのためには adduser を使ってください。 - 使用する予定のメールホストは, + 使用する予定のメールホストは、 各ワークステーションごとにメール交換が - できるように設定されていなければなりません. これは, DNS - (すなわち BIND や named) の設定で次のように行なうことができます. + できるように設定されていなければなりません。これは、DNS + (すなわち BIND や named) の設定で次のように行なうことができます。 example.FreeBSD.org A 204.216.27.XX ; ワークステーション MX 10 hub.FreeBSD.org ; メールホスト - これは, ワークステーションの A レコードがどこを指していようとも - そのワークステーション宛てのメールをメールホストに転送する, というものです. + これは、ワークステーションの A レコードがどこを指していようとも + そのワークステーション宛てのメールをメールホストに転送する、というものです。 - 自前で DNS サーバを運用しているのでなければ, - この作業は自分では行なえおこなえません. 自分で DNS - サーバを運用しないとかできないという場合は, - インターネットプロバイダ等に依頼して作業をおこなってもらってください. + 自前で DNS サーバを運用しているのでなければ、 + この作業は自分では行なえおこなえません。自分で DNS + サーバを運用しないとかできないという場合は、 + インターネットプロバイダ等に依頼して作業をおこなってもらってください。 - この作業により, このワークステーション宛のメールは, MX - (メールエクスチェンジャ) ホストに送られるようになります. A - レコードがどのマシンを指しているかどいうことには関係なく, - メールは MX ホストに送られます. + この作業により、このワークステーション宛のメールは、MX + (メールエクスチェンジャ) ホストに送られるようになります。A + レコードがどのマシンを指しているかどいうことには関係なく、 + メールは MX ホストに送られます。 - もしバーチャル電子メールホストを運用するなら次の情報が役に立つでしょう. - 例として,あなたには自分のドメイン, ここでは - customer1.org, - を持っている顧客がいるとしましょう. + もしバーチャル電子メールホストを運用するなら次の情報が役に立つでしょう。 + 例として、あなたには自分のドメイン、ここでは + customer1.org、 + を持っている顧客がいるとしましょう。 あなたは customer1.org 宛ての全てのメールを - mail.myhost.com という名前のメールホストに集めたいとします. - DNS エントリーは次のようになるでしょう. + mail.myhost.com という名前のメールホストに集めたいとします。 + DNS エントリーは次のようになるでしょう。 customer1.org MX 10 mail.myhost.com - そのドメインに対して電子メールを送りたいだけなら, A - レコードは必要ありません. + そのドメインに対して電子メールを送りたいだけなら、A + レコードは必要ありません。 - これは, customer1.org - に対して ping を実行しても, - A レコードが存在しない限りうまくいかないことに留意しておいてください. + これは、customer1.org + に対して ping を実行しても、 + A レコードが存在しない限りうまくいかないことに留意しておいてください。 - やらなければいけない最後のことは, + やらなければいけない最後のことは、 メールホスト上の sendmail - に対してどんあドメインやホスト宛のメールを受け取るのか, - を教えることです. いくつかの方法がありますが次のどちらかでいいでしょう. + に対してどんあドメインやホスト宛のメールを受け取るのか、 + を教えることです。いくつかの方法がありますが次のどちらかでいいでしょう。 - FEATURE(use_cw_file) を使っているなら, - /etc/sendmail.cw ファイルにホストを加えます. + FEATURE(use_cw_file) を使っているなら、 + /etc/sendmail.cw ファイルにホストを加えます。 もし sendmail 8.10 かそれ以降のものであれば該当ファイルは - /etc/mail/local-host-names です. + /etc/mail/local-host-names です。 /etc/sendmail.cf もしくは sendmail 8.10 以降なら /etc/mail/sendmail.cf - といったファイルに Cwyour.host.com という行を加えます. + といったファイルに Cwyour.host.com という行を加えます。