diff --git a/ja_JP.eucJP/books/handbook/backups/chapter.sgml b/ja_JP.eucJP/books/handbook/backups/chapter.sgml index 6e5c0abb23..b96e6881f6 100644 --- a/ja_JP.eucJP/books/handbook/backups/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/backups/chapter.sgml @@ -1,862 +1,862 @@ バックアップ - 概要 + この章では この章ではデータのバックアップ方法とバックアップの作成に 使われるプログラムの説明をします. もしあなたがこの章に何かを 付け加えたいのなら, それを &a.doc; へ送ってください. テープメディア 一般的なテープメディアには 4mm, 8mm, QIC, ミニカートリッジ, DLT があります. 4mm (DDS: Digital Data Storage) 4mm テープはワークステーションのバックアップメディアとして 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) までのテープ容量をサポートしています. 4mmドライブは 8mmドライブ同様にヘリカルスキャンを使います. ヘリカルスキャンの利点と欠点は 4mm ドライブ と 8mm ドライブ共通です. テープの寿命は 2000 回のパスあるいは 100 回のフルバックアップです. 8mm (Exabyte) 8mm テープは SCSI テープドライブとして最もよく使われているもので, データ交換用として最良の選択です. ほとんどのサイトには Exabyte の 2GB 8mm テープドライブがあるでしょう (訳注: Unix ワークステーションを何台も置いているようなサイトには 1 台くらいはあるというような意味です). 8mm ドライブは信頼性が高く, 使いやすく, 静かです. カートリッジは安価で小型です (4.8 x3.3 x 0.6 インチ; 122 x 84 x 15 mm). 欠点は, テープとヘッドの相対的な速度が高速なために 比較的ヘッドとテープの寿命が短いことです. データスループットは 250kB/s 程度から 500kB/s 程度の範囲です. データ容量は 300MB から 7GB です. ハードウェア圧縮が多くのドライブで可能で,およそ 2 倍の容量になります. 単一のユニットのドライブから, 1 つの筐体に 6 台のドライブと 120 巻のテープを持ったマルチドライブテープライブラリまで 利用することができます. ライブラリではテープはユニットにより 自動的に交換されます. ライブラリの容量は 840GB 以上に達します. Exabyte 社製の Mammoth というモデルは, テープ一本あたり 12GB (圧縮時 24MB) をサポートしています. このドライブの価格は, 通常のテープドライブの約 2 倍です. データはヘリカルスキャンを使ってテープに記録されます. ヘリカルスキャン方式ではヘッドはメディアに対してある傾き (約6度) に配置されます. テープはヘッドのある円筒の周の 270度にわたって接触します. テープが円筒面を走行する間, 円筒は回転しています. この結果, 高密度のデータのつまったトラックは, 狭い間隔でテープの上端と下端の間を斜めに横切ります. QIC QIC-150 テープとドライブはたぶん最も一般的に使われている ドライブとメディアでしょう. QIC テープドライブは現実的なバックアップドライブとして 少なくとも高価なものではありません. 欠点はメディアのコストです. 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 インチ幅のテープについては別に議論します. テープライブラリやチェンジャはありません. データスループットは 150kB/s から 500kB/s の範囲です. データ容量の範囲は 40MB から 15GB です. ハードウェア圧縮が 最近の多くのドライブで使えるようになっています. QIC ドライブは DAT ドライブに置き換えられつつあり, あまり頻繁には利用されなくなっています. データは複数のトラックにわかれてテープに記録されます. トラックはテープメディアの 長さ方向の一端からもう一方の端までです. (訳注: 1トラックの read/write が終わるとテープの走行方向を反転させ次のトラックの read/write を行います) トラックの数と, それに対応するトラックの幅はテープの容量によって変わります. すべてではありませんがほとんどの最近のドライブは 少なくとも読み出しについては (場合によっては書き込みも) 下位互換性があります. QIC はデータの安全性についてはよいといわれています (ヘリカルスキャンドライブに比べて機構は単純でより丈夫です). テープは 5000回のバックアップで寿命となるでしょう. * ミニカートリッジ ]]> DLT DLTはここに示したドライブのタイプの中で 最高速のデータ転送レートです. 1/2 インチ (12.5mm) テープが単リールのカートリッジ (4 x 4 x 1 インチ; 100 x 100 x 25 mm) に入っています. カートリッジのひとつの側面全体がスイングゲートになっています. ドライブの機構がこのゲートを開け, テープリーダを引き出します. テープリーダには楕円形の穴があり, ドライブがテープを引っ掛けるのに使います. 巻き取りのためのリールはドライブの中にあります. ここに挙げた他のカートリッジはすべて ( 9 トラックテープはただ1つの例外です) 送りだしリールと巻き取りリールの両方がカートリッジの中に あります. データスループットは約1.5MB/sで, 4mm, 8mm, QIC テープドライブの3倍です. データ容量は単一のドライブで 10GBから 20GBの範囲です. マルチテープチェンジャ,マルチテープドライブ,5から 900巻のテープを1から20ドライブで扱う マルチドライブテープライブラリがあり, 50GB から 9TB の容量が得られます. 圧縮機能により, DLT Type IV フォーマットは 70GB までの容量をサポートします. データは ( QIC テープのように) テープの走行方向と並行に複数あるトラックへ記録されます. 2 つのトラックに同時書き込みを行います. Read/Write ヘッドの寿命は比較的長いと言えます. テープの走行が止まればヘッドと テープの間の相対運動はありません. AIT AIT は, Sony が発表した新しいフォーマットで, テープ一本あたり 50GB(圧縮時) の容量を持っています. テープには, 記録データ内容の索引情報が記録可能な メモリチップが内蔵されています. ドライブがこの索引情報を読みとることで, テープのどの部分にどのファイルが存在するかを 高速に調べることができるようになっています. 従来のドライブは, この処理に数分の時間を必要としていました. 直接テープのメモリチップと通信することでテープ内容を画面表示する SAMS:Alexandria のようなソフトウェアを使うことで, 40 を超える ATI テープライブラリを操作できるのはもちろんのこと, どのテープのどこに, どのファイルがバックアップされているのか調べたり, 正しいテープをセットしたり, テープ上のデータをリストアしたりすることが可能です. このようなテープライブラリにかかる費用は $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つの解決方法があります. (訳注: 方法1)mt fsf 1 によってテープドライブは識別ブロックをテープに書きます. (訳注: 方法2)フロントパネルのボタンを押してテープをとりだします. 再びテープを入れ,データをテープに &man.dump.8; します. &man.dump.8; はそのうちに DUMP: End of tape detected と表示し, コンソールには HARDWARE FAILURE info:280 asc:80,96と表示されるでしょう. mt rewindを使ってテープを巻戻します. この次からはテープの操作は成功するでしょう. バックアッププログラム よく使われる3つのプログラムは &man.dump.8;, &man.tar.1;, &man.cpio.1; です. ダンプとリストア &man.dump.8; と &man.restore.8; は伝統的な Unixのバックアッププログラムです. これらはドライブのファイルシステム上のファイル, リンク, ディレクトリをディスクブロックの集まりとして処理します. &man.dump.8; はデバイスやファイルシステム全体をバックアップし, 一部分のバックアップや, &man.ln.1; によるソフトリンクや 他のファイルシステムをマウントを行った, 1 つ以上のファイルシステムにまたがる ディレクトリツリーのバックアップはできません. &man.dump.8; はファイルやディレクトリを構成する データブロックをテープに書くだけで, ファイルやディレクトリをテープに書くことはありません. &man.dump.8; には初期の ATT UNIX のバージョン 6 (1975 年ごろ) に由来する癖が残っています. デフォルトのパラメタは 9 トラックテープ (6250 bpi) に適したものになっていて現在の高密度メディア (最大 62,182 ftpi) に適していません. 現在のテープドライブの容量を有効に利用するため, デフォルト値をコマンドラインで置き換えなければなりません. &man.rdump.8; と &man.rrestore.8; は他のコンピュータに接続されているテープドライブに ネットワーク経由でバックアップをします. どちらのプログラムもリモートテープドライブにアクセスするために &man.rcmd.3; と &man.ruserok.3; に依存しています. このためユーザがバックアップを実行するためには rhosts によるリモートアクセスが必要です. &man.rdump.8; と &man.rrestore.8; の引数はリモートコンピュータに適切なものを用います. &man.rrestore.8; はリモートコンピュータから使うのに適しています. (例えば FreeBSD コンピュータより komodo という名前の Sun に接続されている Exabyte テープドライブへ /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nrsa8 /dev/rda0a 2>&1 として rdumpしたような場合の restoreに使います) 警告: セキュリティは rhostsの管理にかかっています. あなたの状況を注意深く調べてください. Tar &man.tar.1; ATT Unix のバージョン 6 (1975ごろ) にさかのぼる事ができます. &man.tar.1; はファイルシステムと協調して機能し, ファイルやディレクトリをテープに書きます. &man.tar.1; は &man.cpio.1; で使えるようなフルレンジのオプションは持ちませんが &man.cpio.1; で使うような奇妙なコマンドパイプラインは必要ありません. 大部分の &man.tar.1; にはネットワーク経由のバックアップの機能はありませんが, FreeBSD で使用されている GNU の &man.tar.1; は, rdump とおなじ構文でリモートデバイスを扱うことができます. komodo というホスト名の Sun に繋いである Exabyte のテープデバイスに対して &man.tar.1; を実行するには, 次のようにします. /usr/bin/tar cf komodo:/dev/nrsa8 . 2>&1 リモートデバイスをサポートしていない tar を使用している場合は, パイプラインと &man.rsh.1; を使うことで, リモートテープデバイスにデータを送る事ができます. &prompt.root; tar cf - . | rsh hostname dd of=tape-device obs=20b もしあなたがネットワークを越えるバックアップのセキュリティに 困っているなら &man.rsh.1; の代わりに &man.ssh.1; を使うべきです. Cpio &man.cpio.1; は本来, Unix ファイルを磁気メディアで交換するためのプログラムです. &man.cpio.1; はバイトスワッピング, 多くの異なるアーカイブフォーマットの書き込みのオプション (それ以外にも多数のオプションがあります)があり, パイプで他のプログラムにデータを渡す事もできます. この最後に挙げた特徴により, &man.cpio.1; はインストールメディアについては優れた選択です. &man.cpio.1; は stdin からの入力でなければならず, ディレクトリツリーの探索や ファイルリストについての機能はありません. &man.cpio.1; はネットワーク経由のバックアップの機能はありません. リモートテープドライブにはパイプラインと &man.rsh.1; を使って送る事ができます. (コマンド使用例はまだです) Pax &man.pax.1; は tarcpio に対する IEEE/POSIX の回答です. 長年の間, 様々なバージョンの tarcpio は, 互いにわずかながら非互換性を有していました. 各々をしらみ潰しに標準化する代わりに, POSIX は新しいアーカイブユーティリティを作ることにしました. pax は専用に開発された新しいフォーマットに加えて, いくつもの cpio や tar のフォーマットの読み書きに対応しようと試みています. コマンド群は tar よりも cpio の方にいくぶん似ています. Amanda Amanda (Advanced Maryland Network Disk Archiver) は単一のプログラムではなくクライアント / サーバ型のバックアップシステムです. Amanda サーバは, Amanda クライアントであるネットワークで サーバに接続された複数のコンピュータから 一つのテープドライブへバックアップをおこないます. このような場合の一般的な問題はいくつもの大容量の ディスクからデータディレクトリをテープにバックアップするには 時間がかかりすぎてしまうという事です. Amanda はこの問題を解決します. Amanda は同時に複数のファイルシステムのバックアップをおこなう時に 「ホールディングディスク」を使う事ができます. Amandaの設定ファイルに書いたすべてのファイルシステムの フルバックアップを特定の間隔でとるために「アーカイブセット」 と呼ばれるテープグループを作ります. これには夜間に作られるすべてのファイルシステムの増分 (あるいは差分として) のバックアップも含みます. 障害の起きたファイルシステムの回復には最も新しい フルバックアップと増分のバックアップが必要です. 設定ファイルでバックアップのコントロールと Amanda によるネットワークトラフィック量を設定します. Amanda はデータをテープに書くのにバックアッププログラムの いずれかを使うでしょう. Amanda はその一部分でもパッケージでも利用可能ですが, デフォルトではインストールされません. 何もしない 何もしない というのはコンピュータのプログラムではありませんが, バックアップの戦略として最も広く採用されている物です. これには初期投資が必要ありません. したがわなければならないバックアップスケジュールもありません. ただ何もしないだけです. もしデータに何かが起きたら, 苦笑いして耐えてください. あなたにとって時間やデータの価値が少ないか あるいはまったくないのであれば 何もしない のはあなたのコンピュータに最も適した バックアッププログラムでしょう. しかし注意してください. Unix は便利なツールです. 6 ヶ月も使っていれば価値のあるファイルの 山ができ上がっているでしょう. 何もしない/usr/obj やその他の, コンピュータによってつくり出された ディレクトリツリーについては適切な方法です. 一つの例はこのハンドブックのファイルで, これらは SGML のファイルより生成された物です. HTML ファイルのバックアップを作る必要はありません. SGML のソースファイルは定期的にバックアップします. どのバックアッププログラムが最適でしょう? 定期的に &man.dump.8; しましょう. Elizabeth D. Zwicky はここで検討したプログラムすべてについて 拷問的なテストをおこないました. すべてのデータと Unixファイルシステムの状態すべてを保存するには明らかに &man.dump.8; でしょう. Elizabeth は大きく変化に富んだ異常な状態 (いくつかはあまり異常でもない状態のものもあります) になっているファイルシステムで, それぞれのプログラムでファイルシステムの バックアップとリストアを行ってテストしました. 特色のある状態には, ホールを持つファイル, ホールとヌルブロックを持つファイル, 奇妙な文字をファイル名に持つファイル, 読み出し不可, 書き込み不可のファイル, デバイスファイル, バックアップ中にファイルのサイズを変更する, バックアップ中にファイルの作成/削除をおこなうなどがあります. 彼女は1991年10月の LISA Vで結果の発表をしています.torture-testing Backup and Archive Programs を参照してください. 緊急時のリストア手順 災難の起きる前に 起き得るどのような災難に対しても以下の 4ステップだけが必要な準備です. ステップ 1では, ファイルシステムテーブル(/etc/fstab) やブートメッセージで示されるすべてのディスクの disklabelをそれぞれ2コピーづつプリント (例えば disklabel da0 | lpr を実行します) します. ステップ 2では, boot.flpfixit.flp にそのシステムのすべてのデバイスドライバが 含まれているか確認します. 最も簡単な確認の方法は, フロッピーをドライブに入れてリブートし, ブートメッセージを確認することです. あなたのシステムのデバイスがすべて含まれ, 機能していれば, step 3へ飛んでください. そうでないなら, そのシステムのすべてのディスクをマウントでき, テープドライブにもアクセスできる 2種類のカスタムブートフロッピーディスクを作る必要があります. これらのフロッピーには &man.fdisk.8;, &man.disklabel.8;, &man.newfs.8;, &man.mount.8;, と利用したいバックアッププログラムが 入っていなければなりません. これらのプログラムはスタティックリンクされた プログラムである必要があります. &man.dump.8; を使うのであればフロッピーに &man.restore.8; を入れる必要があります. ステップ 3では, 通常の方法でバックアップを作ります. 最新のバックアップの後でおこなわれた変更は 回復することはできません. バックアップテープにライトプロテクトをしてください. ステップ 4では, フロッピー (boot.flpfixit.flp あるいはステップ 2で作った2枚のカスタムブートフロッピーディスクです) とバックアップテープのテストをします. 手順のノートを作りましょう. このノートはブートフロッピーディスク, バックアップテープに入れておきプリントアウトしておきます. あなたがリストアをおこなうような時は おそらく錯乱状態でしょうからこのノートはバックアップを 破壊してしまうようなことを防ぐのに役立つでしょう (どのようにして破壊するって? tar xvf /dev/rsa0 とする替りに偶然 tar cvf /dev/rsa0 とタイプしてバックアップテープに上書きしてしまうかも しれません). 訳注: 上書きはライトプロテクトをしておけば防げますが, なんらかの原因でプロテクトがはずれているかもしれません. ちなみに訳者の経験から言えば上のようなミスタイプは 結構起きます. 安全性を増すために, 毎回ブートフロッピーディスクを作り, 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つずつ回復する」 を読んでください. boot.flpfixit.flp を使っているのであればこのまま読み続けてください. boot.flp を入れてブートしてください. 本来のインストールメニューが表示されるはずです. (ここで) Fixit--Repair mode with CDROM or floppy.オプションを選びます. 指示の通り fixit.flp を入れてください. restore とその他の必要なプログラムは /mnt2/standに置かれています. ファイルシステムを一つずつ回復する 最初のディスクのrootパーティションを &man.mount.8; (例えば mount /dev/da0a /mnt のように) マウントして見てください. ディスクラベルが破壊されている場合は &man.disklabel.8; を使ってあらかじめプリントしておいた通りに パーティションを作り直しラベルをつけてセーブしてください. &man.newfs.8; を使いファイルシステムを作り直します. ルートパーティションを読み書き可能にマウント (mount -u -o rw /mnt) しなおします. バックアッププログラムとバックアップテープを使って このファイルシステムのデータを回復します (例えば restore vrf /dev/sa0とします). ファイルシステムをアンマウント (umount /mntなど) して, 障害を受けたファイルシステムそれぞれについて 繰り返してください. システムが動き出したら, 新しいテープにデータをバックアップしてください. どのような理由で再び事故が起きたりデータが 失われるかはわかりません. これに時間を費す事で, 後々の災難から救われる事になります. * 災難対策をしていませんでした. どうしたらいいでしょう? ]]> フロッピーへのバックアップはどうですか? データをフロッピーにバックアップすることはできますか? 実はフロッピーはバックアップ向きのメディアとは言えません. というのは: 特に長期間に渡って保存する場合, 信頼性が低い. バックアップ, リストアがとても遅い. 容量が小さい(ハードディスク全体の日々のバックアップに 1ダース, 長期間なら本当にたくさん). けれども, データをバックアップする他の手段がない場合には, まったくバックアップをしないよりもフロッピーを使うほうが良い でしょう. これを行う場合には, 高品質のものを使うようにしてください. まわりに何年も転がっていたフロッピーは使わない方よいでしょう. 評判のよいメーカの新品を使うことが理想です. どうやってデータをフロッピーにバックアップ するのですか? フロッピーへバックアップする最も良い方法は tar &man.tar.1; コマンドに (マルチ・ボリューム)     オプションを付けて, 複数のフロッピーにまたがるバックアップも できるようにする方法です. カレントディレクトリの全てのファイルとサブディレクトリを バックアップするには, 以下のようにします (root で): &prompt.root; tar Mcvf /dev/rfd0 * 1枚目のフロッピーがいっぱいになると &man.tar.1; は 次のボリュームを入れるようプロンプトを表示します. ( &man.tar.1; は, さまざまなメディアを扱えるので ボリュームと表示します. ここではフロッピーのことです) Prepare volume #2 for /dev/rfd0 and hit return: これは(ボリューム番号が増えながら) 指定された全てのファイルが 保存されるまで繰り返されます. バックアップを圧縮することはできませんか? 残念ながら, &man.tar.1; はマルチ・ボリュームに保存する場合は オプションを使うことができません. もちろん, すべてのファイルを &man.gzip.1; してから, フロッピーに &man.tar.1; して, ファイルを &man.gunzip.1; することはできます! リストアはどうしますか? 保存したファイル全てをリストアするには: &prompt.root; tar Mxvf /dev/rfd0 指定したファイルのみをリストアするには1枚目のフロッピーを セットして: &prompt.root; tar Mxvf /dev/rfd0 filename &man.tar.1; は, 必要なファイルを見つけるまで, 続きのフロッピーを セットするよう表示します. 別の方法として, どのフロッピーにファイルが入っているのかが 分かっているなら, そのフロッピーをセットして上記と同じコマンドを 使うこともできます. 最初のファイルが前のフロッピーから続いて いる場合は, &man.tar.1; は, 頼みもしないのに, そのファイルはリストア できないと警告します! diff --git a/ja_JP.eucJP/books/handbook/basics/chapter.sgml b/ja_JP.eucJP/books/handbook/basics/chapter.sgml index 9c91e270c0..deb1fe7f2d 100644 --- a/ja_JP.eucJP/books/handbook/basics/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/basics/chapter.sgml @@ -1,590 +1,590 @@ Unix の基礎知識 訳: &a.jp.nakai;, 1996 年 10 月 12 日. - 概要 + この章では 改訂: Chris Shumway cshumway@cdrom.com, 2000 年 3 月 10 日. この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています. あなたが FreeBSD の初心者なら, 何か質問する前にこの章を読んでおいた方がきっといいはずです. 許可属性(permissions; パーミッション) FreeBSD は BSD UNIX を起源とする歴史を持ち, いくつかの鍵となる UNIX 思想にもとづいた基本設計がされています. まず最も際だった特徴として最初に言えるのは, FreeBSD がマルチユーザのオペレーティングシステムだということです. FreeBSD は同時に働いている複数のユーザすべてを, 完全に分離したタスク上で処理する能力を持っています. また FreeBSD は, ハードウェアデバイス, 周辺装置, メモリ, CPU 時間等への要求を, 各ユーザが平等に利用できるように適切に共有し, 管理する役割を担っています. システムがマルチユーザをサポートしているため, システムが管理する資源はすべて, 誰がその資源を読み・書き・実行できるかを支配する, 一組の許可属性を持っています. これらの許可属性は 3 つの部分からなる 8 進数の形で格納されています. それはそのファイルの所有者(owner)に対するもの, そのファイルが所属するグループ(group)に対するもの, その他(others)に対するものの 3 つです. これを数字を使って表現すると, 次のようになります. 許可属性 ディレクトリの表示 0 読み込み不可, 書き込み不可, 実行不可 --- 1 読み込み不可, 書き込み不可, 実行可能 --x 2 読み込み不可, 書き込み可能, 実行不可 -w- 3 読み込み不可, 書き込み可能, 実行可能 -wx 4 読み込み可能, 書き込み不可, 実行不可 r-- 5 読み込み可能, 書き込み不可, 実行可能 r-x 6 読み込み可能, 書き込み可能, 実行不可 rw- 7 読み込み可能, 書き込み可能, 実行可能 rwx ls -l で表示される詳細なディレクトリリストでは, ファイルの所有者, グループ, その他への許可属性を示す欄があるのがわかります. 次に示すのは, その部分だけ抜き出したものです. -rw-r--r-- 左から右へ見たときに最初にあたる文字は, それが 普通のファイルなのか, ディレクトリなのか, キャラクタ型のデバイス特殊ファイルなのか, ブロック型のデバイス特殊ファイルなのか, ソケットなのか, その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です. その次の rw- と書かれた 3 文字は, そのファイルの所有者に許可を与えるものです. その次の r-- の 3 文字は, そのファイルが所属しているグループに許可を与えます. 最後の r-- の 3 文字は, システムに存在するその他のユーザに許可を与えます. - は許可が与えられていないことを示します. このファイルの例では, ファイルの所有者はこのファイルを読み書きでき, ファイルの所属しているグループに属するユーザはファイルを読むことだけでき, そのどちらでもないユーザは, このファイルを読むだけできるように許可属性が与えられています. 上の表によれば, このファイルに与えられた許可属性は 644 となります. ここで各数字は, このファイルの許可属性の 3 つの部分を表しています. ファイルについてはここまでの説明で十分です. しかし, デバイスの場合の許可属性はどのようにコントロールされているのでしょうか? FreeBSD は, 大部分のハードウェアをファイルとして取り扱います. そのため, プログラムからは普通のファイルとまったく同じようにオープンし, データの読み書きができるようになっています. これらのデバイス特殊ファイルは /dev ディレクトリに収められています. ディレクトリもまた, ファイルと同様に扱われます. それは読み込み/書き込み/実行の許可属性を持ちます. ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます. ディレクトリが実行可能になっているとき, それはその中が探索できること, たとえば, そのディレクトリ中のファイルリストが参照できることを意味します. この他にも許可属性はありますが, いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます. ファイルの許可属性そのものについて, また, それらの設定のしかたに関する詳しい情報は, &man.chmod.1; マニュアルページを参照してください. ディレクトリ構造 FreeBSD の用いているファイルシステムは多くの基本的なシステム動作を決定するもので, その階層構造は極めて重要です. ディレクトリ構造に関する完全な記述が &man.hier.7; のマニュアルページにありますので, ここでは繰り返しません. 詳しい情報は, &man.hier.7; をご覧ください. 最も重要なディレクトリは, すべてのディレクトリの根(root)にあたる / ディレクトリです. このディレクトリは起動時に一番最初にマウントされ, 起動時に必要な基本システムが含まれています. また, ルートディレクトリには, 追加したい他のファイルシステムをマウントするためのマウントポイントも含まれます. マウントポイントとはルートファイルシステムに存在する, 追加のファイルシステムと接続するためのディレクトリのことです. 標準的なマウントポイントには /usr, /var, /mnt, /cdrom があります. 通常これらのディレクトリについては, /etc/fstab というファイル中のエントリが参照されます. /etc/fstab さまざまなファイルシステムとマウントポイントの表であり, システムが参照します. /etc/fstab に書かれたファイルシステムは オプションが指定されていなければ, 起動時に &man.rc.8; スクリプトによって自動的にマウントされます. /etc/fstab ファイルの書式やオプションに関しての詳細は &man.fstab.5; をご覧ください. シェル FreeBSD では日々の作業のほとんどは, 「シェル」と呼ばれるコマンドラインインタフェイスを通して行われます. シェルの主な仕事はコマンドを入力チャンネルから受け取り, そしてそれらを実行することです. 大部分のシェルはさらに組み込みの機能を持っていて, 日々の作業, ファイル管理やファイル名の展開, コマンドライン編集, コマンドマクロ, 環境変数などに便利です. FreeBSD には sh(Bourne Shell) や csh(C-shell) が含まれています. また, これ以外にもたくさんのシェルが FreeBSD Ports コレクションから利用可能です. tcsh や bash などの高機能なものは, これに含まれています. 「あなたは, どのシェルを使いますか?」という質問は, まったく趣味の問題です. あなたが C のプログラマだったとすれば, tcsh のような C 風のシェルの方が落ち着くかもしれません. Linux から来た人や UNIX のコマンドラインインタフェイスになじみがなければ, bash を試すのも良いでしょう. ポイントは, それぞれのシェルは, あなたの好みの作業環境で利用できる(もしくはできない)独自の機能を持っているということ, そして, どのシェルを使うことにするかを決めるのはあなた自身だということです. シェルの一般的な機能の一つに, ファイル名の補完があります. コマンドやファイル名の最初の数文字を与えて TAB キーを押すことで, シェルにコマンドやファイル名の残りの部分を自動的に補完させることができます. 例をあげましょう. 二つのファイル foobar, foo.bar が あったとします. foo.bar の方を削除しようとするとき rm fo[TAB].[TAB] と入力します. するとシェルは rm foo[BEEP].bar と出力するでしょう. [BEEP] のところはコンソールのベル(訳注: 通常はビープ音が鳴ります)です. これは複数のファイルがマッチしたため, ファイル名の補完を完全に行なえなかったことを伝えています. foobarfoo.bar は 両方とも fo ではじまりますが, foo までなら補完できます. ここで . を入力して TAB を押せば, シェルはファイル名の残りの部分を補完できます. もう一つあげられるシェルの機能として, 環境変数があります. 環境変数とは, シェルの環境変数空間におけるキーと値とのペアです. この変数空間は, そのシェルから起動されたプログラムから参照でき, それを利用してプログラムの設定を保存するのに利用されます. 下の表は, 一般的な環境変数とその意味を示したものです. 変数名 意味 USER 現在のログインユーザのユーザ名. PATH コロンで区切られた実行ファイル探索のための ディレクトリのリスト. DISPLAY 接続する X11 ディスプレイのネットワーク名(存在する場合のみ). SHELL 現在のシェル. TERM ユーザの端末名. 端末のケーパビリティを決定するのに使われる. TERMCAP 種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ. OSTYPE オペレーティングシステムの種別. たとえば FreeBSD. MACHTYPE システムが動作している CPU のアーキテクチャ. EDITOR ユーザの選んだテキストエディタ. PAGER ユーザの選んだテキストページャ. MANPATH コロンで区切られたマニュアルページ探索のための ディレクトリのリスト. 環境変数をセットしたりその値を見る方法は, それぞれのシェルごとに多少異なります. たとえば, csh や tcsh 等の C シェルでは setenv を使います. sh や bash 等の Bourne シェルでは setexport を使います. たとえば, EDITOR 環境変数の値を /usr/local/bin/emacs に セットするか変更するならば次のようにします. setenv EDITOR /usr/local/bin/emacs Bourne シェルでは次のようになります. export EDITOR="/usr/local/bin/emacs" ほとんどのシェルでは, コマンドライン中の変数名の前に $ 文字を置くことで, 環境変数を展開させることができます. たとえば, echo $TERM$TERM が セットされている内容を表示します. それはシェルが $TERM を展開して echo に渡しているからです. シェルはさまざまな特殊文字を, 特別なデータを表すものとして扱います. その特殊文字はメタキャラクタと呼ばれます. もっとも一般的なものは * で, これはファイル名に含まれる, あらゆる文字を表します. これらの特殊なメタキャラクタはファイル名の展開に使われます. たとえば, echo * と入力すると ls と入力したのとほとんど同じ結果を得られます. これはシェルが * とマッチするすべてのファイルを 受け取って echo のコマンドラインに渡し, 表示するからです. これらの特殊文字をシェルに解釈させないようにするため, 特殊文字の前にバックスラッシュ文字 (\) を置くことができます. echo $TERM は, あなたの端末が何にセットされているかを表示します. echo \$TERM$TERM と そのまま表示します. シェルの変更 シェルを変更する一番簡単な方法は chsh コマンドを使うことです. chsh を実行すると 環境変数 EDITOR で示されたエディタが立ち上がります. 環境変数をセットしていなかった時は vi が立ち上がります. Shell: の行を適宜変更してください. chsh オプションをつけると, エディタを起動せずにシェルを変更することが可能です. たとえば, シェルを bash に変えたいなら, 次のようにしてください. &prompt.user; chsh -s /usr/local/bin/bash chsh をパラメータなしで実行し, エディタでシェルを変更しても同じことができます. 使おうと思っているシェルは必ず /etc/shells 中に書かれているものでなければなりません. シェルを Ports コレクションから インストールしていたのであれば, すでにそれは行なわれていますが, 手動でインストールした場合は, それを忘れずに行ってください. たとえば, bash を手動で /usr/local/bin にインストールした場合 以下のようにする必要があります. &prompt.root; echo "/usr/local/bin/bash" >> /etc/shells そして chsh を実行してください. テキストエディタ さまざまな FreeBSD の設定は, テキストファイルを編集することで行われます. そのため, テキストエディタの扱いに慣れると良いでしょう. FreeBSD には, 基本システムの一部として二, 三提供されるものと, Ports collection から利用できる, たくさんのテキストエディタが用意されています. 最も学習が簡単なエディタは, easy editor の略で ee と呼ばれるものです. ee を立ち上げるには, コマンドラインから ee filename と入力します. ここで filename は, 編集しようとしているファイルの名前です. たとえば, /etc/rc.conf を編集するには ee /etc/rc.conf と入力します. 一旦 ee の中に入れば, エディタの機能を操作するコマンドはすべてディスプレイの上部に 表示されています. キャレット ^ 文字は キーボードのコントロールキーを意味しますので, ^e はコントロールキーと e を一緒に押すという意味になります. ee を終了するにはエスケープキーを押し, そして leave editor を選びます. ファイルが更新されていたときは, エディタは変更をセーブするかどうかプロンプトを出します. FreeBSD には, 基本システムの一部として vi, Ports コレクションの一部として emacsvim といった, より強力なテキストエディタが用意されています. これらのエディタはやや学習が複雑ですが, より強力で高い機能性を提供します. しかし, あなたが多量のテキストを編集することを考えているなら, vimemacs といった強力なエディタを習得することは, より多くの時間を節約することでしょう. さらに詳しい情報を得るには... オンラインマニュアル FreeBSD についてのもっとも包括的な文書は, マニュアルページの形式になっているものです. FreeBSD システム上のほとんどすべてのプログラムには, 基本的な操作方法とさまざまな引数を説明しているリファレンスマニュアルが添付されています. これらのマニュアルは man コマンドで見ることができます. man コマンドの使い方は簡単です. &prompt.user; man コマンド名 コマンド名 のところには, 知りたいコマンドの名前を入れます. たとえば ls コマンドについて知りたい場合には, 次のように入力します. &prompt.user; man ls オンラインマニュアルは, セクション番号で分類されています. ユーザコマンド システムコールとエラー番号 C のライブラリ関数 デバイスドライバ ファイル形式 ゲームや娯楽 さまざまな情報 システムの管理と操作のためのコマンド カーネル開発者のための情報 時折, 同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります. たとえば, chmod ユーザコマンドと chmod() システムコールの場合がそれに該当します. この場合, man コマンドにセクション番号を与えることで, どちらを参照したいかを指定することができます. &prompt.user; man 1 chmod 上のようにすれば, ユーザコマンド chmod のマニュアルページが表示されます. オンラインマニュアルの特定セクションへの参照は, 慣習的に書かれている文書で括弧の中に示されます. すなわち, &man.chmod.1; は chmod ユーザコマンドを, &man.chmod.2; はシステムコールの方を示しています. コマンドの名前を知っていて, 単純にその使い方を知りたい場合はここまでの説明で十分でしょう. しかし, もしコマンドの名前を思い出せない場合にはどうしたら良いのでしょうか? man に スイッチをつければ, コマンド解説(description)の文章から, 指定したキーワードを検索することができます. &prompt.user; man -k mail このコマンドにより, mail というキーワードをコマンド解説に含むコマンドの一覧が表示されます. 実際には, これは apropos コマンドを使う場合と同等の機能です. それでは, /usr/bin にあるさまざまなコマンドすべてを見ていて, それらが実際にどう働くのかが, まったく見当もつかないときには どうしたら良いでしょう? そのときは単純に, &prompt.user; cd /usr/bin; man -f * とするか, あるいは同じ働きをする &prompt.user; cd /usr/bin; whatis * としてください. GNU の Info ファイル FreeBSD には Free Software Foundation (FSF) によるアプリケーションや ユーティリティがたくさん含まれています. これらのプログラムには, マニュアルページに加えて info ファイルと呼ばれる ハイパーテキスト形式の文書が付属しています. この文書は info コマンド, あるいは emacs をインストールしているなら emacs の info モードで読むことができます. &man.info.1; コマンドを使うには, 単に次のように入力します. &prompt.user; info h と入力すると, 簡単な手引きを読むことができます. クイックコマンドリファレンスは ? を入力してください. diff --git a/ja_JP.eucJP/books/handbook/boot/chapter.sgml b/ja_JP.eucJP/books/handbook/boot/chapter.sgml index 800d9eed58..e1a3e38ca0 100644 --- a/ja_JP.eucJP/books/handbook/boot/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/boot/chapter.sgml @@ -1,569 +1,569 @@ FreeBSD の起動のプロセス - 概要 + この章では FreeBSD は通常, 起動(bootstrap)を三段階に分けて行ないます. これには基本的に, 互いに順番に呼び出される三つのプログラム(二つの 起動ブロック(boot block)と ローダ(loader))が使われています. これらのプログラムはそれぞれ, その前に呼び出されるプログラムの情報に基づいて動作し, より洗練された機能を提供します. その後カーネルが起動し, デバイスの検出と初期化を行ないます. そしてカーネルの起動が終わると, 制御はユーザープロセスの &man.init.8; へ移されます. &man.init.8; はまず ディスクが利用可能であることを確かめ, ファイルシステムのマウント, ネットワークで利用するネットワークカードのセットアップ, そして通常 FreeBSD システムで初期時に起動されるすべてのプロセスの起動, といったユーザーレベルでのリソース(資源)設定を行ないます. 起動ブロック: 起動ステージ 1 および 2 起動(bootstrap)とは, コンピュータが接続されたデバイスを検出, 初期化し, 必要となるプログラムを動作させることを指します. 起動には起動の際の動作が記録された, 特殊な読み出し専用メモリチップを利用します. その動作は通常, メモリテストやデバイスの設定を行なう他のチップに制御を渡し, そして設定された内容をプログラムに提供するというものです. 標準的な個人向けコンピュータでは, BIOS (起動を行なう部分) と CMOS (設定を記録する部分) によって起動を実現しています. これらはディスクが存在すること, そしてオペレーティングシステムをロードするためのプログラムが ディスク上のどこにあるのかを認識しています. この章では上に述べたような起動の初期の過程については扱いません. 焦点を合わせるのは, ディスク上のプログラムに制御が移された後の内容についてです. 起動ブロックは(通常), ローダを見つけて実行する役割を持っています. したがって, ファイルシステム上のプログラムを見つけること, 実行できること, そしてその動作に関して最低限の設定が可能である必要があります. boot0 まず実際に最初にあるのは boot0 と呼ばれる起動ブロックです. これは マスターブートレコード(MBR; Master Boot Record) という, システムが起動時にプログラムを検索するディスク上の特殊な部分に存在します. この部分は, 単に起動可能なスライスのリストが格納されています. boot0 は非常に単純なプログラムです. これは, MBR にあるプログラムは 512 バイトの大きさでなければならないという制限があるためです. boot0 は, 下のような出力をします. boot0 のスクリーンショット F1 DOS F2 FreeBSD F3 Linux F4 ?? F5 Drive 1 Default: F2 boot1 boot1 は起動スライス(slice)の起動セクタにあります. 起動セクタは boot0 が存在し, MBR にある他のプログラムが 起動のプロセスを続けるために必要なプログラムを探す部分です. boot1 も非常に単純なプログラムです. これは boot0 同様に, 512 バイトの大きさでなければならないという制限があるためです. boot1 は boot2 を検索し, 実行するため, そのスライスの情報を保持する FreeBSD のディスクラベル(disklabel) に関する最低限の情報を持っています. boot2 boot2 はもう少し高機能です. これは FreeBSDのファイルシステム上でファイルを見つける能力を持ち, 実行するカーネルやローダを指定するための簡単なインターフェイスを提供する事ができます. ローダ(loader)はさらに高機能なもので, 使いやすく簡単な起動設定が行なえる手段を提供します. boot2 は通常それを起動します. 以前の boot2 は, カーネルを直接起動する機能しかありませんでした. boot2 のスクリーンショット >> FreeBSD/i386 BOOT Default: 0:wd(0,a)/kernel boot: ローダ(loader): 起動ステージ 3 ローダは三段階の起動プロセスの最終段階です. ローダは通常, ファイルシステム上の /boot/loader として存在しています. /boot/boot0, /boot/boot1, /boot/boot2 というファイルがありますが, これらは MBR, 起動セクタ, ディスクラベルの実際のコピーではありません. ローダは, よりさまざまなコマンド群をサポートした 強力なインタープリタによって提供される簡易組み込みコマンド群を利用することで, ユーザが利用しやすい設定手段となるように設計されています. ローダプログラムの処理の流れ ローダは初期化の際にコンソールとディスクの検出を行ない, どのディスクから起動しているかを調べます. そして必要な変数を設定してからインタープリタを起動し, 簡易コマンドを解釈します. ローダは次に /boot/loader.rc を読み込み, 通常, 変数の標準値を定義した /boot/defaults/loader.conf と, そのマシンにローカルな変数を定義した /boot/loader.conf を読み込みます. loader.rc はそれらの変数にもとづき, 選択されたモジュールとカーネルをロードします. ローダは最後に, 標準設定で 10 秒のキー入力待ち時間を用意し, 入力がなければカーネルを起動します. 入力があった場合, 簡易コマンド群が使えるプロンプトが表示され, ユーザは変数を調整したり, すべてのモジュールをアンロードしたり, モジュールをロードしたりすることができます. その後, 最終的な起動や再起動へ移行します. この処理に関するより技術的な説明は &man.loader.8; にあります. ローダの組み込みコマンド 簡易コマンド群は, 次のようなもので構成されています. autoboot seconds seconds で与えられた時間内に入力がなければ, カーネルの起動へと進みます. カウントダウンを表示し, 標準設定では 10 秒間です. boot -options kernelname すぐにカーネルの起動へ進みます. オプション, カーネル名が指定されている場合は, それらが使われます. boot-conf すべてのモジュールの設定を, 起動時と同じように変数にもとづいて自動的に行ないます. このコマンドは, まず unload を行なって, 変数—普通 kernel など—を変更した場合にのみ有効に働きます. help topic /boot/loader.help を読み込み, ヘルプメッセージを表示します. topicindex 指定された場合, 利用可能な topic を表示します. include filename 指定されたファイル名のファイルを処理します. ローダはファイルを読み込み, 行単位で解釈します. エラーが発生した場合, include コマンドの実行はその時点で停止します. load type filename 指定されたファイル名のカーネル, カーネルモジュール, あるいは type に指定された種類のファイルをロードします. ファイル名以降に指定された引数はファイルへと渡されます. ls path 指定された path にあるファイルを表示します. path が指定されていなければ, ルートディレクトリを表示します. が指定されていればファイルサイズも表示されます. lsdev モジュールがロード可能なすべてのデバイスを表示します. もし が指定されていれば, より詳細な出力がされます. lsmod ロード済みのモジュールを表示します. が指定されていれば, より詳細な内容が出力されます. more filename LINES 単位でスクロールを停止しながら指定されたファイルを表示します. reboot すぐにシステムを再起動します. set variable set variable=value ローダの環境変数を設定します. unload すべてのロード済みモジュールを削除します. ローダの使用例 次にあげるのは, ローダの実践的な使用例です. 普段使っているカーネルをシングルユーザモードで起動します. boot -s 普段使っているカーネルとモジュールをアンロードし, 古い(もしくは別の)カーネルをロードします. unload load kernel.old kernel.GENERIC とすると, インストールディスクに入っていた generic カーネルを指定することができます. また, 直前にインストールされていたカーネル(たとえば, カーネルを自分で設定したり, アップグレードしたりした場合)を指定するには kernel.old とします. 普段のカーネルで使っているモジュールを 指定したカーネルでロードする場合は, 下のようにします. unload set kernel="kernel.old" boot-conf カーネルの設定スクリプト(通常, カーネル起動時に設定される内容を自動化するスクリプト)をロードします. load -t userconfig_script /boot/kernel.conf カーネル起動時の応答 カーネルがローダ(通常は) かboot2 (ローダを迂回して)によってロードされると, 起動フラグを調べます. もし起動フラグがあれば, それに応じて動作を調整します. カーネル起動フラグ 良く使われる起動フラグは次のとおりです. カーネル初期化中に, ルートファイルシステムとしてマウントするデバイスを尋ねます. CDROM から起動します. 起動時にカーネルコンフィグレーションを行なう UserConfig を実行します. シングルユーザモードで起動します. カーネル起動時により詳細な情報を表示します. 起動フラグはこの他にもあります. それらについては &man.boot.8; を参照してください. Init: プロセス制御の初期化 カーネルの起動が完了すると, init というユーザプロセスに制御が移されます. これは /sbin/init, もしくは loaderinit_path 変数で指定される場所にあります. 自動再起動(automatic reboot)の動作 自動再起動では, システム上で利用できるファイルシステムの一慣性を確認します. もしそれに問題があって fsck がその不一致を修復できなければ, 管理者に直接に処置させるため init はシステムをシングルユーザモードへと移行させます. シングルユーザモード このモードには, 自動再起動の処理中か, ユーザが起動時に を指定た場合, あるいは loaderboot_single 変数を設定することによって移行します. また, マルチユーザモードから 再起動オプション() や停止(halt)オプション()なしで shutdown を呼び出すとこのモードに移行します. /etc/ttys でシステムコンソール consoleinsecure に設定されている場合, システムはシングルユーザモードに移行する前に root のパスワードを入力するように求めます. /etc/ttys の insecure コンソール # name getty type status comments # # This entry needed for asking password when init goes to single-user mode # If you want to be asked for password, change "secure" to "insecure" here # # 訳) このエントリは init がシングルユーザモードへ移行する際にパスワードを要 # 求させるために必要です. もし, パスワードの要求を望む場合, ここの "secure" を # "insecure" へ変更してください. # console none unknown off insecure insecure コンソールとは, あなた自身, コンソールが物理的に安全でないと考えていて, root パスワードを知る人だけがシングルユーザモードを使えるようにしたいという意味であり, コンソールを安全でない状態で使いたいという意味ではありません. そのため, 安全性を求めるならば secure でなく insecure を選んでください. マルチユーザモード init がファイルシステムが正常であると判断するか, ユーザがシングルユーザモードを終了すると, システムはマルチユーザモードへ移行し, リソースの設定を始めます. リソース設定(rc) リソース設定システムはデフォルト設定を /etc/defaults/rc.conf から, そのシステム独自の細かな設定を /etc/rc.conf から読み込みます. そして /etc/fstab に記述されるシステムファイルシステムをマウントし, ネットワークサービスの開始, さまざまなシステムデーモンの開始, そして最後に, ローカルにインストールされた package の起動スクリプトの実行へと進みます. リソース設定システムのに関する参考資料は, &man.rc.8; にあります. これはスクリプトそのものを調べることと同じくらい優れたものです. シャットダウン動作 shutdown を用いてシステムを意図的にシャットダウンした場合, init/etc/rc.shutdown というスクリプトの実行を試みます. そして, すべてのプロセスへ終了(terminate)シグナルを送り, 続いてうまく終了できなかったプロセスへ 強制終了(kill)シグナルを送ります. diff --git a/ja_JP.eucJP/books/handbook/cutting-edge/chapter.sgml b/ja_JP.eucJP/books/handbook/cutting-edge/chapter.sgml index e79e2bb973..10b7e6da1c 100644 --- a/ja_JP.eucJP/books/handbook/cutting-edge/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/cutting-edge/chapter.sgml @@ -1,1879 +1,1879 @@ 開発の最前線 - 再構成, 再編成, 一部更新: &a.jim;, 2000 年 3 月. + 改訂: &a.jim;, 2000 年 3 月. 原作: &a.jkh;, &a.phk;, &a.jdp;, &a.nik;, およびたくさんのフィードバック. - 概要 + この章では あるリリースから次のリリースまでの期間にも, FreeBSD の開発は 休みなく続けられています. この開発の最前線に興味を持っている人のために, 手元のシステムを最新の開発ツリーに同期させておくための, とても使いやすい仕掛けが何種類も用意されています. 注意: 開発の最前線は, 誰でもが扱えるという性質のものではありません! もしもあなたが, 開発途中のシステムを追いかけようか, それともリリース バージョンのどれかを使い続けようかと迷っているのなら, きっとこの章が参考になるでしょう. - -CURRENT v.s.. -STABLE + -CURRENT v.s. -STABLE FreeBSD には二つの開発ブランチがあります. -CURRENT と -STABLE です. この章ではそれぞれについて少しだけ説明し, どのようにしてあなたの システムを対応するツリーに対して常に最新の状態にに保つかについて 記述します. まず -CURRENT を論じ, ついで -STABLE を論じます. 訳: &a.hanai;, 1996 年 11 月 6 日. 最新のFreeBSDを追いかける これを読むならば, 心に止めておいて欲しいことがあります. -CURRENT とは FreeBSD の開発における 切断面 であり, 故にあなたが FreeBSD を使い始めたばかりなら あなたはこれがすることについて十分検討を重ねた方がいいでしょう. FreeBSD-current ってなに? FreeBSD-CURRENT とは, 文字通りに, 日々変更されている FreeBSD のソース のスナップショット以外の何ものでもありません. 中には現在開発途上のソフトウェア, 実験的な変更, あるいは過渡的な機能などが含まれています. また, この中に入っている機能がすべて次の公式リリースに 入るとはかぎりません. FreeBSD-CURRENT をソースからほとんど毎日コンパイルしている人はたくさん いますが, 時期によっては FreeBSD-CURRENT はコンパイルさえできない状態になっていることもあります. これらの問題は一般的には可能な限り素早く解決されますが, FreeBSD-CURRENT のソースが不幸をもたらすか, それとも非常に 素晴らしい機能をもたらすかというのは文字通り, ある与えられた 24 時間の間 のどの部分であなたがソースを手に入れたか, による場合もあります. 誰が FreeBSD-current を必要としてるの? FreeBSD-CURRENT は, 主に次の三つの重要なグループを対象としています. ソースツリーのある部分に関して活発に作業している FreeBSD グループのメンバー. 彼らにとっては 最新のもの にしておくのが 絶対に必要なことなのです. 活発にテストをする FreeBSD グループのメンバー. 彼らは, FreeBSD-CURRENT を 健全である ことを出来るだけ確認するために種々の問題と戦うのに 時間を費やすのを厭わない人々です. 彼らはまた, 様々な変更に関する提案や FreeBSD の大まかな方向付けを行ないたいと思っている 人々でもあります. 単に, 様々な事に目を向け, 参考のために (例えば, 動かすためではなく 読むため に) 最新のソースを使いたいと思っている FreeBSD (または他の) グループのまわりにいるメンバー. これらの人々はまた, 時々コメントやコードを寄稿してくれます. FreeBSD-CURRENT に期待しては<emphasis>いけない</emphasis>ことは? なにか新しくカッコイイモノがあると聞き, 自分の周囲では 一番にそれを持ちたいがためにリリース前のコードの断片を 追いかけること. バグを修正するための素早い方法. 我々によって 公式にサポートされている こと. 私たちは 3 つの 公式な FreeBSD-CURRENT のグループの一つに実際に属する 人々を助けるのにベストを尽くしますが, 技術的なサポートを行なうには 単に「時間が足りない」のです. これは我々が外の人を助けるの好まない, ケチで意地悪い人間だと いうことではなく (もしそうなら FreeBSD なんかやっていません), 文字通り我々は一日に 400 ものメッセージに答え かつ FreeBSD の作業をすることなど出来ない! ということなのです. もし, たくさんの質問に答えるか, それとも FreeBSD を良くする作業を続けるかという選択が与えられた場合, あなた方のほとんどは後者を支持する, と私は確信しています. FreeBSD-CURRENT を使う &a.current;と&a.cvsall;に加わって下さい. これは単に良い考えであるというだけでなく, 必須のことなのです. もし FreeBSD-current メーリングリストに入っていなければ, 様々な人がシステムの現在の状態について 述べているコメントを決して見ることはありませんし, 従って他の人が既に見つけて解決している多くの問題に戸惑っ てあきらめてしまうでしょう. さらに言うと, システムを正常に保つための 重要な情報を見逃してしまう可能性もあります. &a.cvsall; メーリングリストでは, それぞれの変更についての commit ログを見ることができますし, それに関して起こり得る副作用の情報を得ることができ, もう一つの加わるに値するメーリングリストです. これらのメーリングリストに入るには, &a.majordomo; へ subscribe freebsd-current subscribe cvs-all と書いたメールを送って下さい. オプションとして本文に help と書けば, Majordomo はあなたへ我々がサポ ートする様々なメーリングリストに参加 / 脱退する方法に関する詳しい ヘルプを送ります. ftp.FreeBSD.org からのソースの入手. 以下の3つの方法で行なうこと が出来ます. 下に述べられているCTMを用いる. 均一なレートの, 良質の TCP/IP 接続を持っていない人には, これが一番いい方法でしょう. cvsup を この supfile を用いて使用する. これは 2 番目に推薦される方法です. なぜなら, cvsup によって一度全体を入手し, 後は変更されたところだけを入手することが 出来るからです. たくさんの人が自動的にソースを最新のもに保つために cvsup を cron から起動しています. これを行なうための非常に簡単な方法は, 単に
&prompt.root; pkg_add -f \ ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupit.tgz
とタイプすることです.
ftp を使う. FreeBSD-current のソースツリーは常に ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/公開 されています. 我々はまた全体を compress/tar して入手できる wu-ftpd を使っています. 例えば, usr.bin/lex があったとすると, ftp> cd usr.bin ftp> get lex.tar とすることにより, ディレクトリ全体(この場合, usr.bin/lex以下全体) を tar ファイルとして入手することができます.
以上のことをまとめると, 必要に応じて迅速なアクセスをする必要があり, 接続のバンド幅が問題ではなければ cvsupftp を使いましょう. そうではなければ CTM を使いましょう. もしソースを, 眺めるだけでなく走らせるために入手しているのであれば, 一部だけ選ぶのではなく, current の全体を手に入れてください. なぜなら, ソースの様々な部分が他の部分の更新に依存しており, 一部のみをコンパイルしようとすると, ほぼ間違いなくトラブルを起こすからです. current をコンパイルする前に /usr/src にある Makefile をよく読んでください. アップグレードの処理の一部として, 少なくとも一回は最初に make world を行なうべきでしょう. &a.current; を読めば, 次のリリースへ向けて, 時々必要になる 他のブートストラップの方法に関して 常に最新情報を得ることが出来ます. アクティブになって下さい! もし FreeBSD-CURRENT を走らせているなら我々はそれに関するコメント, 特に拡張やバグ潰しに関する提案, を欲しています. コードを伴う提案はもっとも歓迎されるものです!
FreeBSD の安定状態の持続 あなたが FreeBSD をプロダクション環境下で使っていて -CURRENT 系列からの修正の最新版を得ていることを確実にしたいなら -STABLE を使っていた方がいいでしょう. これは新しいリリースが まとめられた時 -RELEASE がこれから分岐するツリーです. たとえば, あなたが 3.4-RELEASE のコピーを持っていたとして, それは単に CD-ROM にまとめられた -STABLE 系列の snapshot に過ぎません. -RELEASE 以降に -STABLE にマージされた差分を入手するには -STABLE 系列を 追跡する必要があります. 訳: &a.jp.iwasaki;. FreeBSD-STABLE ってなに? FreeBSD-STABLE は, 次の本流のリリースを目指した新機能をあまり採り入 れない保守的な変更のための開発の支流です. 実験的またはテスト未完の変更はこの支流には取り入れられません (最新の FreeBSD を追いかける 参照). 誰が FreeBSD-STABLE を必要としているの? もしあなたが仕事で使用しているとか, なによりも FreeBSD システムの安定性を最重要視するなら, stable を追いかけることを考えるべきで しょう. stable の支流は前のリリースに関して効果的にバグフィックスされた 流れであるため, 最新のリリース ( &rel.current;-RELEASE 執筆時点) をインストールしているのであれば, 特にそうです. stable ツリーが常に完全に互換性があり安定するように努力し ていますが, たまに間違いがあることに注意してください (結局, 内容が吟味 されずに素早く送られた変更を含むソースがまだあるのです). また, currentstable へ移行する前に完璧なテストフィックスに最善を尽くしますが, 私たちのテストはすべてのケースを十分に網羅して いるとは限りません. もし何か stable で不具合があるようでしたら, 私たちにすぐに教えてください (次の節参照). FreeBSD-STABLE を使う &a.stable; へ加わってください. このメーリングリスト では, stable の構築に関連する事柄や, その他の注意すべき点 に関する情報が流れています. また開発者は議論の余地がある修正や変更を考えている場合に, このメーリングリストで公表し, 提案された変更に 関して問題が生じるかどうかを返答する機会を ユーザに与えます. また, &a.cvsall; メーリングリストでは, それぞれの変更がなされると 起こりうる副作用に関するすべての適切な情報と一緒に commit log を読むことができます. subscribe しておきたいもう一つのメーリングリストです. メーリングリストに参加するには, &a.majordomo へメッセージの本文に 次のように書いたメールを送ってください: subscribe freebsd-stable subscribe cvs-all オプションとして本文に `help' と書けば, Majordomo は私たちがサポートする様々なメーリングリストに参加 / 脱退する方法に関する詳しいヘルプを送付します. もし, あなたが新しいシステムをインストールしようとしていて それを可能な限り安定なものにしておきたいなら, 最新のブランチの snapshot を ftp://releng4.freebsd.org/pub/FreeBSD から取得し, これを一般のリリースのものと同様に インストールしてください. もし, 既に FreeBSD の以前のリリースが動いている場合で, これをソースからアップグレードしようとするならば, ftp.FreeBSD.org より簡単に これを行う事が出来ます. これには次の 3 つの方法があります. CTM 機能を使用する. 転送レートが安定している TCP/IP 接続でない場合は, この方法が適しています. cvsup を この supfile を用いて使用する. 一度コレクション全体を入手してしまえば, 前回からの変更部分だけですむので, 2 番目に推奨される方法です. 多くの人が cron から cvsup を実行し, 自動的にソースコードを最新の状態に保っています. これを簡単に扱うには次のようにタイプしてください.
&prompt.root; pkg_add -f \ ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupit.tgz
ftp を使用する. FreeBSD-STABLE 用のソースツリーは 常に次のところで公開されています: ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable/ 私たちはまた, tar/compress でツリー全体を入手できる wu-ftpd を使用しています. 例えば : usr.bin/lex に対して: ftp> cd usr.bin ftp> get lex.tar とすることにより, ディレクトリ全体を tar ファイルとして入手することができます.
基本的には, ソースに迅速でオンデマンドなアクセスが必要で, 接続のバンド幅が問題でなければ, cvsupftp を使いましょう. そうで ない場合は CTM を使いましょう. stable をコンパイルする前に, /usr/src にある Makefile をよ く読んでください. 少なくとも一回はアップグレードの処理の一部として最初に make world を実行するべきでしょう. &a.stable; を読めば, 次のリリースに移行する に当たって時々必要となる既存システムからの 新システムの構築手順に ついての最新情報が得られるでしょう.
あなたのソースを同期させる 訳: &a.jp.iwasaki;. 13 September 1997. インターネット接続 (または電子メール) を使用して, あなたの興味の対象によって FreeBSD プロジェクトのソースのある一部分または全体の最新を 追いかける方法は色々あります. 私たちが提供している基本的なサービスは Anonymous CVS, CVSup と CTM です: Anonymous CVSCVSuppull 同期モデルを採用しています. CVSup の場合, ユーザ (または cron スクリプト) が cvsup 起動し, どこかにある cvsupd サーバとやりとりしてファイルを 最新状態にします. 届けられる更新情報はその時点の最新のものであり, また必要な時にだけ取り寄せられます. 興味のある特定のファイルやディレクトリに 限定して更新することも簡単にできます. クライアント側のソースツリーの状態・ 設定ファイルの指定に従い, サーバによって更新情報が 素早く生成されます. Anonymous CVS は, このプログラムがリモートの CVS リポジトリから直接変更点を pull できるようにした &man.cvs.1; への拡張であるという点で, CVSup よりもずっと単純です. CVSup は効率の点ではるかにまさっていますが, Anonymous CVS の方が簡単に利用できます. 一方, CTM はあなたが持っているソースとマスタアーカイブ上に あるそれとの対話的な比較をおこないませんし, あるいは向こう側から変更点を pull したりもしません. そのかわりに, 前回の実行時からの変更を認識するスクリプトが マスタ CTM マシン上で一日に数回実行され, すべての変更を compress して通し番号を振り, さらに電子メールで転送できるようにエンコードします (印字可能な ASCII キャラクタのみです). 受信した後は, これらの CTM のデルタ は自動 的にデコード, 検査してユーザのソースのコピーに変更を適用する &man.ctm.rmail.1; によって処理可能となります. この処理は CVSupAnonymous CVS よりずっと効率 的であり, pull モデルというよりむしろ push モデルで あるため, 私たちのサーバ資源の負荷は軽くなります. もちろん他のトレードオフもあります. うっかりアーカイブ の一部を消してしまっても, CVSup は壊れた部分を検出して再構築してくれます. CTM はこれをやってくれませんし, Anonymous CVS はおそらく他の何よりも深く混乱してしまうことが多いでしょう. もしソースツリーの一部を消してしまったら, (最新の CVS ベースデルタから) 一からやり直し, CTM か anoncvs を使って悪い部分を消去し, 再同期させることによって すべてを再構築しなければなりません. Anonymous CVS, CTM, CVSup についての 詳しい情報については, 以下の節を参照してください. <command>make world</command> の利用 FreeBSD のどれか特定のバージョン (stable, current など) について, ローカルのソースツリーを同期させたら, そのソースツリーを使ってシステムを 再構築しなければなりません. バックアップを作成する システムを再構築する前にバックアップを 作成することの重要性は, いくら強調してもし過ぎると言うことはありません. システム全体の再構築とは (以降に書かれた手順に従っている限り)難しい作業ではありませんが, どんなに注意していたとしても, あなた自身, あるいはソースツリーで作業している他の人達に手違いがあった時には, システムが起動しなくなってしまう状態になることがあるのです. まず, バックアップがきちんと作成されていることを確認して下さい. そして, fix-it フロッピーを用意して下さい. 私は今までに, 一度もバックアップや fix-it フロッピーのお世話になったことはありませんし, これからもそうなるようなことはないと思っていますが, どういう場合であっても用意しておいて損はないでしょう. メーリングリストに参加する もともと, -STABLE と -CURRENT のコードブランチは, 開発中のものです. FreeBSD の作業に貢献してくださっている人達も人間ですから, 時にはミスをすることだってあるでしょう. そのような間違いは, 単に警告を示す見慣れない 診断メッセージをシステムが,表示するような, 全く害のないものであることもあれば, システムを起動できなくしたり, ファイルシステムを破壊してしまうような, 恐ろしい結果を招くものかも知れません. 万が一, このような問題が生じた場合, 問題の詳細と, どのようなシステムが影響を受けるかについて書かれた 注意(heads up)の記事が 適切なメーリングリストに投稿され, そして, その問題が解決されると, 問題解決(all clear)のアナウンス記事が同様に 投稿されます. -STABLE や -CURRENT ブランチを試したり, それらに 追随していくときに FreeBSD-stable@FreeBSD.ORGFreeBSD-current@FreeBSD.ORG を読まないというのは, 自ら災難を招くことになるでしょう. 訳注: これらのメーリングリストは英語でやりとりされているため, 日本語での投稿は歓迎されません. 英語でのやりとりができない人は, FreeBSD 友の会 の運営しているメーリングリストをあたってみるのがいいでしょう. <filename>/usr/src/UPDATING</filename> を読む 何を始めるにしろ, まず最初に /usr/src/UPDATING (もしくはあなたがソースコードを どこにコピーしたにせよそれに相当するファイル) を読みましょう. このファイルにはあなたが遭遇するかも知れない問題に対する重要な情報を 含んでいたり, あなたが特定のコマンドを実行しなければならなくなった時 その順序を指示したりするはずです. UPDATING があなたが読んだ事柄と矛盾している時は UPDATING が優先します. UPDATING を読むということは, 前述の 適切なメーリングリストを購読する代わりにはなりません. 二つの要求は相補的なもので排他的なものではないのです. <filename>/etc/make.conf</filename> の確認 まず, /etc/defaults/make.conf/etc/make.conf を調べてください. そこには 最初から標準的なものが (多くのものはコメントアウトされていますが) 含まれています. ソースからシステムを再構築するときに make が /etc/make.conf に付け加えられた設定を使用します. /etc/make.conf に追加された設定は make を実行したときに常に使われることを覚えておいてください. それらをあなたのシステムに合うように設定しておくとよいでしょう. ( FreeBSD 開発者でない) 標準的なユーザならおそらく /etc/defaults/make.confCFLAGSNOPROFILE の行を追加したいでしょう. 最初の状態では, すべてがコメントアウトされています. 必要だと思う項目のコメントをはずして下さい. (開発者でない)標準的なユーザならおそらく, CFLAGS と NOPROFILE のコメントをはずすことを考えると思います. もし, 浮動小数点演算ユニット(386DX, 486DX, Pentium と, それより上のクラスのマシン)がある場合には, HAVE_FPU の行のコメントをはずすことができます. </para> <!-- hrs:2000/01/13 386DX doesn't have FPU. --> <para>この定義は, FreeBSD 2.2.2 以降で廃止されました. </para> </note> <para>他の定義 (COPTFLAGS, NOPORTDOCS など) の定義行についても, コメントを外す必要があるかどうか調べておきましょう. </para> </sect2> <sect2> <title><filename>/etc/group</filename> の更新 /etc ディレクトリには, システム起動時に実行されるスクリプトだけでなく, あなたのシステムの設定に関連する情報の大部分が 含まれています. そのディレクトリに含まれる スクリプトは, FreeBSD のバージョンによって多少異なります. また, 設定ファイルのなかには, 稼働中のシステムが日々利用している ものもあります. 実際には, /etc/group などがそれに該当します. make world のインストールの段階では, 特定のユーザ名, あるいはグループが存在していることを 要求する場面があります. システムのアップグレードを行なう際には, それらのグループが削除, あるいは変更されて存在していない可能性が 考えられますが, そういった場合, システムのアップグレードを 行なっている間に, 問題が発生する原因になります. この種の例でもっとも記憶に新しいのは, ppp サブシステムがインストールされる時, そのサブシステムが利用する 解決方法は, /usr/src/etc/group を調べ, 自分のシステムのグループ名リストと比較することです. 最新のファイルに含まれていて, あなたのファイルに含まれていない グループ名があれば, あなたのファイルにそのグループ名をコピーして下さい. 同様に, 名前が異なるにも関わらず, /etc/group/usr/src/etc/group で同じ GID を持っているグループ名があれば, /etc/group に含まれる, 該当するすべてのグループ名を変更しておかなければなりません. もし, あなたがもっと神経質な人なら, あなたが名前を変更したり, 削除してしまったグループが所有しているファイルを, 次のようにして調べることもできます. &prompt.root; find / -group GID -print これは GID(グループ名もしくは数字で示されたグループ ID)で 指定されたグループが所有するすべてのファイルを表示します. コンパイルは, シングルユーザモードで行なった方が良いでしょう. そうすることで多少速度が向上する, というちょっとした利点が あるだけでなく, システムの再インストールは重要なシステムファイル, 標準コマンド, ライブラリ, インクルードファイルなどを操作します. 稼働中のシステムに(特に他のユーザがログインしている時に)そのような 変更を加えることは, トラブルを引き起こす原因となります. </para> <para>自信家の方は, このステップを省略しても構いません.</para> <note> <title>FreeBSD 2.2.5-RELEASE 以降の場合 以下に詳しく述べられているように, 2.2.5-RELEASE 以降, ビルド(システムの構築)とインストールの行程を分離して行なうことが可能になりました. そのため, マルチユーザモードで新しいシステムのビルドを行ない, その後, シングルユーザモードに移行してから インストールを行なうことができます. 稼働中のシステムでシングルユーザモードに移行するには, スーパユーザ(root)権限で次のコマンドを実行します. &prompt.root; あるいはシステムを再起動し, ブートプロンプトから フラグを設定することで, シングルユーザモードで システムを起動させることができます. 起動後, シェルプロンプトから 次のように実行して下さい. &prompt.root; fsck -p &prompt.root; mount -u / &prompt.root; mount -a -t ufs &prompt.root; swapon -a これはファイルシステムをチェックした後, / を読み書き可能にして再マウント, /etc/fstab に指定されている, それ以外の UFS ファイルシステムをすべてマウントしてから スワップを有効にします. <filename>/usr/obj</filename> の削除 システムが再構築される時, 構築されたものは(デフォルトで) /usr/obj 以下のディレクトリに格納され, そのディレクトリの下は /usr/src と同じ構造となります. このディレクトリをあらかじめ削除しておくことにより, make world の行程にかかる時間を短縮させ, 依存問題に悩まされるようなトラブルを回避することができます. /usr/obj 以下のファイルには, 変更不可(immutable)フラグ(詳細は &man.chflags.1; 参照)がセットされているものがあります. そのため, まず最初にそのフラグを変更しなければなりません. &prompt.root; cd /usr/obj &prompt.root; chflags -R noschg * &prompt.root; rm -rf * <title>全バージョンに共通すること まず, カレントディレクトリを /usr/src に 変更しなければなりません. 次のように実行して下さい. &prompt.root; cd /usr/src (もちろん, ソースコードが他のディレクトリにある場合には, /usr/src ではなく, ソースコードのあるディレクトリに移動して下さい). make world を行なうには, &man.make.1; コマンドを使用します. このコマンドは, Makefile というファイルから, FreeBSD を構成するプログラムの再構築方法や, どういう順番でそれらを構築すべきかといったような 指示を読み込みます. コマンドラインの一般的な書式は, 次のとおりです. &prompt.root; make この例では, が &man.make.1; に渡されるオプションになります. どのようなオプションが利用できるかについては, マニュアルページを 参照して下さい. は, Makefile に渡される変数であり, この変数は Makefile の動作をコントロールします. また, /etc/make.conf で設定される変数も 同様です. これは変数を設定するもう一つの方法として用意されています. &prompt.root; make -DNOPROFILE=true target は, プロファイル版のライブラリを構築しないことを指定する もう一つの記法で, /etc/make.conf 中の NOPROFILE= true # Avoid compiling profiled libraries の行に対応します. target は, &man.make.1; に どのように動作するのかを指示するためのものです. 各々の Makefile には, 数多くの異なる ターゲット(target) が定義されていて, 指定されたターゲットによって, 動作が決まります. Makefile に書かれているターゲットには, あなたが指定しても意味を持たないものも含まれます. これらは, システムの再構築に必要な段階を, 多くの さらに細かい段階に分割するため, 構築の過程で利用されるものです. 大抵の場合, &man.make.1; にパラメータを指定する必要はないでしょうから, コマンドラインは次のようなものになるでしょう. &prompt.root; make target 出力の保存 実行される &man.make.1; からの出力は, ファイルに保存すると良いでしょう. もし, 何か障害が発生した場合, エラーメッセージのコピーに加え, どの時点でそれが起こったのか, 完全なリストが手元に残ります. 何が悪かったのか, あなた自身がそれから理解することはできないかも 知れません. しかし, FreeBSD メーリングリストに投稿して, 誰か他の人からの助言を得るために利用することができます. ファイルに保存する最も簡単な方法は, &man.script.1; コマンドを 使い, 引数に出力を保存したいファイル名を指定することです. これを make world の直前に行ない, 再構築が終了してから exit と入力すると, 出力を保存することができます. &prompt.root; script /var/tmp/mw.out Script started, output file is /var/tmp/mw.out &prompt.root; make world … compile, compile, compile … &prompt.root; exit Script done, … 出力を保存する場合, /tmp ディレクトリの中に 保存してはいけません. このディレクトリは, 次の再起動で削除されてしまう可能性があります. 出力の保存には, (上の例のように)/var/tmproot のホームディレクトリが適しています. FreeBSD-2.2.2 と, それ以前のバージョン /usr/src/Makefile には, システム全体を再構築しインストールを行なう world ターゲットが含まれています. それを, 次のように使って下さい. &prompt.root; make world FreeBSD-2.2.5 と, それ以降のバージョン FreeBSD-2.2.5 から(実際には, -CURRENT ブランチで最初に作成され, 2.2.2 と 2.2.5 の間の時点で -STABLE に導入されたのですが), world ターゲットは buildworldinstallworld の二つに分割されました. その名前が示すように, buildworld/usr/obj 以下に新しい完全な ディレクトリツリーを構築し, installworld は, そのツリーを 現在のマシンにインストールします. これは, 二つの理由から非常に有用です. まず第一に, 稼働中のシステムに全く影響を与えることなく, 安全にシステムの構築作業を行えることです. 構築作業は何にも依存せず独立して行なわれるため, マルチユーザモードで稼働中のシステムでも, 何一つ 悪影響を与えずに buildworld を 実行することができます. ただし, installworld は シングルユーザモードで行なうことをおすすめします. 第二に, NFS マウントを利用することで, ネットワーク上の複数のマシンをアップグレードすることが 可能な点があげられます. 例えば三台のマシン, マシン A, マシン B, マシン C をアップグレードしたい場合には, まず マシン A で make buildworldmake installworld を実行します. それから, マシン B とマシン C で /usr/src を NFS マウントし, make installworld とすることで 構築済みのシステムを各マシンにインストールすることができるのです. 一方, world ターゲットも残されていますので, FreeBSD-2.2.2 の場合として示されている方法と同じように, このターゲットを利用することもできます. make world は, make buildworld に続けて make installworld を実行します. make buildworldmake installworld のコマンドを分けて実行する場合には, それぞれ同じ引数を &man.make.1; に渡さなければなりません. 次のように実行したとすると, &prompt.root; make -DNOPROFILE=true buildworld 構築されたシステムは次のようにしてインストールする必要があります. &prompt.root; make -DNOPROFILE=true installworld そうしないと, make buildworld の段階で 構築されていない, プロファイル版ライブラリのインストールを 試みることになります. (訳注: もちろん, それには失敗するのでエラーが発生します. ) -CURRENT と, それ以降 もし, -CURRENT を追跡しているなら, make コマンドに オプションを渡すことができます. このオプションにより, make は 同時に複数のプロセスを生成するようになります. これは, 実際に複数の CPU を備えているマシンに対して 非常に有効に働きます. また, コンパイルプロセスの大部分は CPU の処理ではなく入出力の処理に費やされるため, 単一の CPU を持つマシンでも同じように有効です. 単一の CPU を持つ典型的なマシンでは, 次のように実行します. &prompt.root; make -j4 target この時 &man.make.1; は, 最大 4 個までのプロセスを同時に実行します. メーリングリストに投稿された経験的な報告によると, 4 個という指定が最も良いパフォーマンスを示すようです. もし, 複数の CPU を備えたマシンで SMP 設定が行なわれたカーネルを 利用しているなら, 6 から 10 の間の値を設定し, 速度がどれくらい 向上するか確認してみて下さい. 注意して欲しいのですが, (この原稿を書いている時点では)この機能はまだ 実験段階です. そのため, ソースツリーへ変更が加えられたときに これが正常に機能しなくなる可能性があります. もし, このオプションを用いてシステムの構築に失敗した場合には, 障害を報告する前に, もう一度オプションを付けずに試してみて下さい. システムの構築にかかる時間 すべてが順調に進んでいたとしても, 一時間半から丸一日程度の時間がかかります. 一般的に言って, 200MHz の P6(訳注: Intel PentiumPro のこと) で 32MB 以上のメモリを搭載し, 標準的な SCSI ディスクドライブを利用していた とすると, make world の完了までに およそ一時間半の時間がかかります. この構成よりも性能が低ければ, それよりもさらに時間がかかるでしょう. <filename>/etc</filename> の更新 システムの再構築は, いくつかのディレクトリ ( 特に, /etc, や /var/usr) において, 新規に導入されたり, 変更された設定ファイルによる ファイルの更新は行なわれません. これは, あなた自身の手や目, そして適切な &man.diff.1; の使用をによって行なわなければなりません. 単にファイルを /usr/src/etc から /etc に コピーしただけでは正常に動作させることはできません. これらのファイルには, インストールという 手順を踏まなければならないものが含まれています. /usr/src/etc ディレクトリは /etc ディレクトリにそのまま置き換えられるような コピーではないからです. また, /etc にあるべきファイルのうちで /usr/src/etc にないものもあります. 一番簡単な方法は, ファイルを新しいディレクトリにインストールしてから, 以前のものと異なっている部分を調べて更新作業を行なうことです. 既存の <filename>/etc</filename> をバックアップする 理論的に考えて, このディレクトリが自動的に 処理されることはありませんが, 念には念を入れておいて 損はありません. たとえば以下のようにして, 既存の /etc ディレクトリを どこか安全な場所にコピーしておきましょう. &prompt.root; cp -Rp /etc /etc.old は再帰的なコピーを行ない, はファイルの更新時間や所有者などを保存します. また, 新しい /etc やその他のファイルを インストールするための, 仮のディレクトリを作っておく必要があります. 私はいつもこの仮のディレクトリを /var/tmp/root に置くことにしています. 同様に, 必要なサブディレクトリもこの下に置きます. &prompt.root; mkdir /var/tmp/root &prompt.root; cd /usr/src/etc &prompt.root; make DESTDIR=/var/tmp/root distrib-dirs distribution 上の例は, 必要なディレクトリ構造をつくり, ファイルをインストールします. /var/tmp/root 以下に作られる, たくさんの空のディレクトリは削除する必要があります. 一番簡単なやり方は, 次のとおりです. &prompt.root; cd /var/tmp/root &prompt.root; find -d . -type d | /usr/bin/perl -lne \ 'opendir(D,$_);@f=readdir(D);rmdir if $#f == 1;closedir(D);' これは深さ優先探索で各ディレクトリを走査し, 含まれるファイルの数が 2 個(スクリプト中の この段階の /var/tmp/root には, 本来 / 以下にあるべきファイルが すべて含まれています. 各ファイルを順に見て, 既存のファイルと異なる部分を 調べて下さい. /var/tmp/root 以下に インストールされているファイルの中には, /var/tmp/root/ と /var/tmp/root/root/ の中にある シェルスタートアップ ファイルだけですが, 他のものがあるかも知れません. (これは, あなたがこれをどの時点で読んでいるかに依存するので, もっとも簡単な方法は, 二つのファイルを比較するコマンド &man.diff.1; を使うことです. &prompt.root; diff /etc/shells /var/tmp/root/etc/shells これは, あなたの /etc/shells ファイルと 新しい /etc/shells ファイルの 異なる部分を表示します. これらを, あなたが書き換えたものに変更点をマージするか, それとも既存のファイルを新しいもので上書きするかを 判断する材料にして下さい. 新しい root ディレクトリ (<filename>/var/tmp/root</filename>) の名前に タイムスタンプを付けておくと, 異なるバージョン間の比較を楽に行なうことができます. 頻繁にシステムの再構築を行なうということは, /etc の更新もまた, 頻繁に行う必要がある ということです. これはちょっと手間のかかる作業です. この作業は, あなたが /etc にマージした, 新しく変更されたファイルの最新のセットのコピーを保存しておくことで 素早く行なうことができます. 下の手順は, それを実現するための一つの方法です. 普通に make world します. /etc や 他のディレクトリを更新したくなったときは, ターゲット ディレクトリに, そのときの日付に基づく名前をつけてください. たとえば 1998 年 2 月 14 日 だとすれば, 以下のようにします. &prompt.root; mkdir /var/tmp/root-19980214 &prompt.root; cd /usr/src/etc &prompt.root; make DESTDIR=/var/tmp/root-19980214 \ distrib-dirs distribution 上に説明されているように, このディレクトリから変更点をマージします. その作業が終了しても, /var/tmp/root-19980214 を 削除してはいけません. 最新版のソースをダウンロードして再構築したら, ステップ 1 にしたがって下さい. 今度は, /var/tmp/root-19980221 (更新作業が一週間おきだった場合) のような名前の, 新しいディレクトリをつくることになるでしょう. この段階で &man.diff.1; を使用し, 二つのディレクトリを比較する再帰的 diff を作成することで, 一週間の間に行なわれたソースへの変更による相違点を調べます. &prompt.root; cd /var/tmp &prompt.root; diff -r root-19980214 root-19980221 これによって報告される相違点は, 大抵の場合, /var/tmp/root-19980221/etc/etc との場合に比べて 非常に少ないものになります. 相違点が少ないため, 変更点を既存の /etc ディレクトリにマージすることは, 比較的容易になります. ここまで終了したら, /var/tmp/root-* の 二つのうち, 古い方のディレクトリは削除して構いません. &prompt.root; rm -rf /var/tmp/root-19980214 この工程を, /etc へ変更点をマージする 必要があるたび, 毎回繰り返します. ディレクトリ名の生成を自動化するには, &man.date.1; を利用することができます. &prompt.root; mkdir /var/tmp/root-`date "+%Y%m%d"` <filename>/dev</filename> の更新 DEVFS もし, DEVFS を利用しているなら, この作業はおそらく必要ないでしょう. 安全のため, これはいくつかの段階に分けて行ないます. /var/tmp/root/dev/MAKEDEV/dev にコピーします. &prompt.root; cp /var/tmp/root/dev/MAKEDEV /dev ここで, /dev のファイル一覧を記録しておきます. この一覧は, 各ファイルの許可属性, 所有者, メジャー番号, マイナー番号が 含まれている必要がありますが, タイムスタンプは含まれていてはいけません. これを行なう簡単な方法は, &man.awk.1; を使って, いくつかの情報を取り除くことです. &prompt.root; cd /dev &prompt.root; ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > /var/tmp/dev.out デバイスファイルをつくり直します. &prompt.root; もう一度, ディレクトリのファイル一覧を記録します. 今回は /var/tmp/dev2.out です. この段階で, この二つのファイル一覧を調べて 作成に失敗したデバイスを探して下さい. 違いは一つもないはずなのですが, 安全のために一応チェックして下さい. &prompt.root; diff /var/tmp/dev.out /var/tmp/dev2.out 次のようなコマンドを使用し, ディスクスライスエントリを 再作成することで, ディスクスライスの矛盾を検出することができます. &prompt.root; sh MAKEDEV sd0s1 適当な組み合わせは, 環境によって異なります. <filename>/stand</filename> の更新 この段階は, 完全な更新を行なう場合にだけ必要な内容を含んでいます. 悪影響はありませんので, 省略しても構いません. 完全な更新を行なうために, /stand にあるファイルも同じように 更新したいと考えるかも知れません. これらのファイルは, /stand/sysinstall という バイナリファイルへのハードリンクです. このバイナリファイルは, 他のファイルシステム(特に /usr)が マウントされていない場合にも動作できるよう, 静的にリンクされていなければなりません. &prompt.root; cd /usr/src/release/sysinstall &prompt.root; make all install 1998 年 4 月 2 日以前のソースの場合 もし, 1998 年 4 月 2 日より古いソースコードを使っているか, Makefile のバージョンが 1.68 以降(FreeBSD-CURRENT および FreeBSD-3.X の場合), 1.48.2.21 以降(FreeBSD-2.2.X の場合)でなければ, 次のように NOSHARED=yes オプションを追加する必要があります. &prompt.root; make NOSHARED=yes all install 新しいカーネルのコンパイルとインストール 新しいシステムにおけるアドバンテージを完全に得るために, カーネルの再コンパイルをすべきです. 再コンパイルは, ある種のメモリ構造が変更された時には必須です. その場合, &man.ps.1; や &man.top.1; のようなプログラムは, カーネルとソースコードのバージョンが一致しないと 正常に動作しないでしょう. 新しい kernel をコンパイルするには, FreeBSD ハンドブックの指示にしたがってください. 過去に自分で設定したカーネルを構築している場合には, LINT コンフィグレーションファイルを注意深く調べて, 利用できる新しいオプションがあるかどうか確かめて下さい. この文書の以前の版では, カーネルの再構築の前に再起動することを推奨していました. これは以下の点で誤りです. &man.ps.1;, や &man.ifconfig.8;, &man.sysctl.8; といったコマンドが動作しなくなる恐れがあります. そうなると, マシンがネットワークに接続できなくなってしまいます. &man.mount.8; のような基本的なユーティリティが機能しなくなり, //usr 等を マウントできなくなってしまうかも知れません. これは, -STABLE の候補を追いかけている場合には あまり発生することはありませんが, -CURRENT を追いかけていて, 大規模なマージが行なわれている間には良く起こります. ローダブルカーネルモジュール (FreeBSD-3.X 以前は LKM と呼ばれていましたが, FreeBSD-3.X 以降は KLD と呼んでいます)は world の一部として 構築されるため, 古いカーネルがクラッシュする可能性があります. これらの理由から, どんな場合においても, 再起動する前に新しいカーネルを再構築し, インストールすることが 最も良い手順になります. 新しいカーネルは, make world (あるいは make installworld) が完了した後で 構築しなければなりません. もし, そうしない場合には (おそらく, あなたはシステムを更新する前にカーネルが構築されることを 確認したいのでしょう) 問題が起こるかも知れません. それは, カーネルソースに対して &man.config.8; コマンドが古いことが原因です. その場合には, 新しいバージョンの &man.config.8; でカーネルを構築することができます. &prompt.root; /usr/obj/usr/src/usr.sbin/config/config KERNELNAME これは, いつもうまく行くとは限りませんので, 新しいをカーネルをコンパイルする前に make world (あるいは make installworld)を完了させることが推奨されています. これで, 作業はおしまいです. すべてがあるべき正しい場所に存在することをチェックしたら, システムを再起動します. これは, 単に &man.fastboot.8; を実行するだけです. </para> <screen>&prompt.root; <userinput>fastboot</userinput></screen> </sect2> <sect2> <title>作業の完了 ここまで来れば, FreeBSD システムのアップグレードは成功です. おめでとうございます. さて, この時点で, 今までの間違った操作による小さな問題に 気付くことがあるかも知れません. たとえば, 私はかつて /etc/magic をアップグレードの途中で削除し, そのまま /etc にマージしてしまったことがあります. その結果, file コマンドは動作しなくなってしまったのです. すぐに思いついたのは, これを修復するには &prompt.root; cd /usr/src/usr.bin/file &prompt.root; だけで十分ではないか, ということでした. <qandaentry> <question> <para>変更が行なわれたら, その度にシステムの再構築が必要になるのでしょうか?</para> </question> <answer> <para> それは変更の性質によるので, なんとも言えません. 例えば, CVSup を実行したとき, 最後に実行したときから比べて 次にあげるようなファイルが更新されていたとします.</para> <screen><filename>src/games/cribbage/instr.c</filename> <filename>src/games/sail/pl_main.c</filename> <filename>src/release/sysinstall/config.c</filename> <filename>src/release/sysinstall/media.c</filename> <filename>src/share/mk/bsd.port.mk</filename></screen> <para> このときには, 改めてシステムを再構築する必要はありません. わたしなら, 適切なサブディレクトリに移って <command>make all install</command> を行うと思います. しかし, もし何らかの大きな変更が行なわれているとき, 例えば <filename>src/lib/libc/stdlib</filename> が変更されている場合には, システムを再構築するか, もしくはそのうち, 少なくとも静的にリンクされているもの(と, わたしが追加した 他のプログラムのうち, 静的にリンクされたもの)を 作り直すことでしょう. </para> <para>結局のところ, どの時点で現在のシステムをアップグレードするかは あなたが決めることです. 2 週間ごとにシステムを再構築し, その 2 週間の変更を取り込めば 幸せかもしれませんし, 変更のあった部分だけ再構築し, 依存関係を確かめたいと考えるかも知れません. <!-- hrs:2000/02/15 What's "every fortnight say"? s/say/day/? --> </para> <para> もちろん, それらはどのくらいの頻度でアップグレードしたいか, そして -STABLE か -CURRENT のどちらを追いかけているのかによります. </para> </answer> </qandaentry> <qandaentry> <question> <para>signal 12(もしくは他のシグナル番号)のエラーがたくさん出て コンパイルが失敗します. 何が起こっているんでしょうか?</para> </question> <answer> <para> これは通常, ハードウェアに問題があることを示しています. システムの再構築は, ハードウェアに対する負荷耐久試験を行なうための 有効な手段の一つで, メモリに関係する問題がよく報告されます. その大部分は, コンパイラが奇妙なシグナルを受け取り, 不可解な異常終了となることで発見されます. </para> <para> 本当にこの問題によるものかどうかは, 再構築をもう一度実行し, 異なる段階で異常終了が発生するか, ということから確認できます. </para> <para> この場合には, マシンの部品を交換して, どの部分が悪いのかを 調べてみることくらいしかできることはありません. </para> </answer> </qandaentry> <qandaentry> <question> <para>終了したら <filename>/usr/obj</filename> を削除しても かまいませんか?</para> </question> <answer> <para> それはあなたが次の機会に, システムの再構築をどう行なうつもりなのかによります. </para> <para><filename>/usr/obj</filename> には, コンパイルの段階で生成された すべてのオブジェクトファイルが含まれています. 通常 <quote/make world/ の最初の段階では, このディレクトリを削除して新しくつくり直すようになっています. その場合には, 構築終了後の <filename>/usr/obj</filename> を保存しておいても, あまり意味はありません. 削除すれば, 大きなディスクスペースを (現在はだいたい 150MB あります) 解放することができます. </para> <para> しかし, もしあなたが何を行なおうとしているのか理解しているなら, この段階を省略して <quote/make world/ を行なうことができます. こうすると, ほとんどのソースは再コンパイルされないため, 構築はかなり高速化されます. これは裏をかえせば, デリケートな依存関係の問題によって, システムの構築が奇妙な失敗に終わる可能性があるということです. FreeBSD メーリングリストではしばしば, 構築の失敗が, この段階の省略によるものだということを理解せずに 不満の声をあげる人がいます. </para> <para> もし, このような危険を承知した上でシステムの再構築を行なう場合には, 次のように変数 <makevar>NOCLEAN</makevar> を定義して構築します. </para> <screen>&prompt.root; <userinput>make -DNOCLEAN world</userinput></screen> </answer> </qandaentry> <qandaentry> <question> <para>構築を中断した場合, その構築を途中から再開することはできますか?</para> </question> <answer> <para> それは, あなたが問題に気付く前に, どれだけの作業を終えているかによって変わります. </para> <para><emphasis>一般的に</emphasis> (そしてこれは確実でしっかりした 規則ではありませんが), <quote>make world</quote> の過程では, 基本的なツール ( &man.gcc.1;, や &man.make.1; のようなもの) や, システムライブラリの新しいコピーが作成されます. その後まず, これらのツールやライブラリはインストールされてから 自分自身の再構築に使われ, もう一度, インストールされます. 全体のシステム (ここでは &man.ls.1; や &man.grep.1; といった 標準的なユーザプログラムを含みます) は, その新しいシステムファイルを用いて作り直されることになります. </para> <para> もし, 再構築が最終段階に入っていること が(記録しておいた出力を見たりすることで)わかっていたら, (全く悪影響を与えることなく)次のようにすることができます, </para> <screen><emphasis>… fix the problem …</emphasis> &prompt.root; <userinput>cd /usr/src</userinput> &prompt.root; <userinput>make -DNOCLEAN all</userinput></screen> <para> これは, 前回の <quote>make world</quote> の作業をやり直しません. </para> <para>次のメッセージ <screen>-------------------------------------------------------------- Building everything.. --------------------------------------------------------------</screen> が <quote>make world</quote> の出力にある場合には, 上のようにしてもほとんど悪影響が現れることはありません. </para> <para> もしこのメッセージがないとか, よく分からないという場合には, 安全を確保し, 後悔するようなことがないよう, システムの再構築を最初からやり直しましょう. </para> </answer> </qandaentry> <qandaentry> <question> <para>あるマシンを <emphasis/マスタ/ として, 他の多くのマシンを (NFSで) アップグレードできますか?</para> </question> <answer> <para>すべてのコンパイル作業をあるマシンで行ない, 構築されたものを他のマシンにネットワークを経由で <command>make install</command> することができるかどうかは, よく FreeBSD メーリングリストで尋ねられます. </para> <para>これはわたしが行った作業ではありませんので, 下に書かれている提案は, 他の人々から頂いたか, Makefile から推論したものです.</para> <para>取るべき適切な方法については, 利用している FreeBSD のバージョンに依存します.</para> <para> アップグレードしたマシンでは, この作業を行った後に <filename>/etc</filename> や <filename>/dev</filename> の 更新を行わなくてはなりません.</para> <para>2.1.7 とそれより古いものについて, Antonio Bemfica は 次に示すような方法を教えてくれました. </para> <screen>Date: Thu, 20 Feb 1997 14:05:01 -0400 (AST) From: Antonio Bemfica <bemfica@militzer.me.tuns.ca> To: freebsd-questions@FreeBSD.org Message-ID: <Pine.BSI.3.94.970220135725.245C-100000@militzer.me.tuns.ca> Josef Karthauser は質問しました: > どなたかネットワークを通してマシンをアップグレードするよい方法は知りませんか まず, メインとなるマシンで make world などをします. そして次のように, リモートのマシンから / や /usr をマウントします: main_machine% mount remote_machine:/ /mnt main_machine% mount remote_machine:/usr /mnt/usr そして, /mnt をインストール先に指定して 'make install' とします: main_machine% make install DESTDIR=/mnt これをネットワーク上の他のマシンについても繰り返してください. わたしの場合には, これでうまくいきました. Antonio</screen> <para>この仕組みは (わたしの知る限り) NFS サーバ上の <filename>/usr/src</filename> が書き込み可能である場合にのみ きちんと動作します. FreeBSD-2.1.7 とそれ以前では, この作業に <maketarget>install</maketarget> ターゲットを使います. </para> <para>FreeBSD-2.1.7 と FreeBSD-2.2.0 の間で <quote>reinstall</quote> ターゲットが導入されました. 上にあげた FreeBSD-2.1.7 向けの方法に加え, <quote>install</quote> の代わりに <quote>reinstall</quote> を 使うことができます. </para> <para>この方法では, NFS サーバ上の <filename>/usr/src</filename> ディレクトリへの書き込み権限は必要 <emphasis>ありません</emphasis>.</para> <para>Makefile の 1.68 から 1.107 の間のバージョンには, このターゲットに関するバグがありました. それは NFS サーバへの書き込み権限が <emphasis>必要になる</emphasis> というもので, このバグは FreeBSD-2.2.0 がリリースされる前に修正されました. この時期の -STABLE が動いている古いサーバでは, 問題になるかも知れません. </para> <para>FreeBSD-2.2.5 以降のバージョンでは, <quote>buildworld</quote> と <quote>installworld</quote> ターゲットが利用できます. これらを使ってソースツリーを一つのマシンで構築し, <filename>/usr/src</filename> と <filename>/usr/obj</filename> をリモートマシンで NFS マウントして, そこからインストールすることができます.</para> </answer> </qandaentry> <qandaentry> <question> <para>どのようにすれば make world を高速化できますか?</para> <itemizedlist> <listitem> <para>シングルユーザモードで動かしてください.</para> </listitem> <listitem> <para><filename>/usr/src</filename> と <filename>/usr/obj</filename> ディレクトリを, 異なるディスク上の別のファイルシステムに置いてください. また可能ならば, 異なるディスクコントローラに接続された ディスクを使って下さい. </para> </listitem> <listitem> <para>さらに高速化するには, これらのファイルシステムを <quote>ccd</quote> (連結ディスクドライバ) デバイスを 使って, 別々なディスク上に置いてください.</para> </listitem> <listitem> <para>プロファイル版の作成を無効化して下さい. (<filename>/etc/make.conf</filename> で <quote>NOPROFILE=true</quote> をセットします) 普通, それが必要になることはありません. </para> </listitem> <listitem> <para>また, <filename>/etc/make.conf</filename> の中の <quote>CFLAGS</quote> を, <quote>-O -pipe</quote> のように指定しましょう. <quote>-O2</quote> の最適化はさらに多くの時間を必要とし, しかも <quote>-O</quote> と <quote>-O2</quote> の 最適化には, ほtんど差はありません. <quote>-pipe</quote> を指定することで, コンパイラはテンポラリファイルの代わりにパイプを利用します. その結果, (メモリの利用は増えますが)ディスクアクセスが減ります. </para> </listitem> <listitem> <para>(もしあなたが十分に最近のバージョンの FreeBSD を使っているなら) 複数のプロセスを並列に実行させるため, make に <option>-j<n></option> オプションを指定してください. これはプロセッサが単一か複数かによらず, どちらも同様に恩恵を得ることができます.</para> </listitem> <listitem><para><filename>/usr/src</filename> のある ファイルシステムを, <quote>noatime</quote> オプションを付けてマウント(もしくは再マウント)してください. これは, そのファイルシステムにおいて, 最後にアクセスされた時刻の書き込みを抑制します. おそらく, この情報が必要になることはないでしょう.</para> <note> <para><quote>noatime</quote> が利用可能なのは, FreeBSD-2.2.0 以降です.</para> </note> <screen>&prompt.root; <userinput>mount -u -o noatime /usr/src</userinput></screen> <warning> <para>上の例は, <filename>/usr/src</filename> 自身が独立したファイルシステムで あることを想定しています. もしそうでないときには (例えば <filename>/usr</filename> の 一部である場合には), <filename>/usr/src</filename> ではなく 適切なマウントポイントを指定する必要があります. </para> </warning> </listitem> <listitem> <para><filename>/usr/obj</filename> のあるファイルシステムを, <quote>async</quote> オプションをつけてマウント (もしくは 再マウント) してください. これによって, ディスクへの書き込みが非同期になります. つまり, 書き込み命令はすぐに完了するのに対し, 実際にデータがディスクに書き込まれるのは, その数秒後になります. これによって, 書き込み処理の一括化が可能になるため, 劇的なパフォーマンスの向上が期待できます. <!-- hrs:2000/02/15 (for ja-translators) "be clusterd togather" is translated into "clusterization" --> </para> <warning> <para> このオプションを指定すると, ファイルシステムは 壊れやすくなってしまうことに注意してください. このオプションを付けていて, 突然電源が落ちた場合には, 再起動後にファイルシステムが復旧不能になる可能性が 非常に高くなります. </para> <para>もし, <filename>/usr/obj</filename> 自身が独立した ファイルシステムであるならば, これは問題になりません. しかし, 同じファイルシステムに, 他の貴重なデータを置いているときには, このオプションを有効にする前に, バックアップをきちんと取っておきましょう.</para> </warning> <screen>&prompt.root; <userinput>mount -u -o async /usr/obj</userinput></screen> <warning> <para>もし <filename>/usr/obj</filename> 自身が ファイルシステムでない場合には, 適切なマウントポイントを指すように, 上の例の名前を置き換えて下さい. </para> </warning> </listitem> </itemizedlist> </question> </qandaentry> </qandaset> </sect2> </sect1> </chapter> <!-- Local Variables: mode: sgml sgml-declaration: "../chapter.decl" sgml-indent-data: t sgml-omittag: nil sgml-always-quote-attributes: t sgml-parent-document: ("../book.sgml" "part" "chapter") End: --> diff --git a/ja_JP.eucJP/books/handbook/introduction/chapter.sgml b/ja_JP.eucJP/books/handbook/introduction/chapter.sgml index 80d68ff4f9..12f277d90b 100644 --- a/ja_JP.eucJP/books/handbook/introduction/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/introduction/chapter.sgml @@ -1,806 +1,806 @@ <!-- The FreeBSD Documentation Project The FreeBSD Japanese Documentation Project Original revision: 1.30 - $FreeBSD: doc/ja_JP.eucJP/books/handbook/introduction/chapter.sgml,v 1.13 2000/07/18 02:51:10 kuriyama Exp $ + $FreeBSD: doc/ja_JP.eucJP/books/handbook/introduction/chapter.sgml,v 1.14 2000/07/18 15:24:38 hrs Exp $ --> <chapter id="introduction"> <title>はじめに 改訂: &a.jim;, 2000 年 1 月 17 日. - 概要 + この章では FreeBSD に興味を持って頂きありがとうございます! この章では FreeBSD の歴史, 目標, 開発モデルなど, FreeBSD プロジェクトに関する様々な事柄に言及しています. FreeBSD は, Intel アーキテクチャ (x86) と DEC Alpha ベースの システムのための 4.4BSD-Lite2 をベースとしたオペレーティング システムです. 他のアーキテクチャに対する移植も進行中です. FreeBSD の概要については, 次のセクション をご覧ください. FreeBSD の歴史 や, 現在のリリースについて も読むことができます. プロジェクトへの何らかの貢献 (ソースコード, ハードウェア, 資金の提供など) について興味があれば, FreeBSD への貢献 をご覧ください. FreeBSD へようこそ! もしまだここを読んでいるなら, FreeBSD がどんなものか, 何ができるのかを多少なりとも理解していると思います. もし FreeBSD について初心者なら, このまま読み続けてください. FreeBSD って何? 一般に, FreeBSD は 4.4BSD-Lite2 ベースのオペレーティング システムです. Intel アーキテクチャ (x86) ベースのコンピュータシステム上で 動作し, DEC Alpha アーキテクチャでも動作します. FreeBSD は, 以下のサイトを含む多くの Internet 上の最大クラスのサイトで利用されています: Yahoo! Hotmail Apache Be, Inc. Blue Mountain Arts Pair Networks Whistle Communications Walnut Creek CDROM などです. FreeBSD で何ができるの? FreeBSD には多くの注目すべき機能があります. 例を挙げれば以下のようになります: 優先度を動的に調節する機能を備えることで アプリケーションとユーザとの間で円滑かつ公平な コンピュータ資源共有を実現し, 特に高い負荷にも耐えることができる堅牢さを備えた プリエンプティブマルチタスキング. 多くの人々が 1 つの FreeBSD システムをさまざまな目的で同時に使うことを可能にする マルチユーザ機能. これは例えば, プリンタやテープデバイスといった システムの周辺機器が, そのシステムを利用する全てのユーザだけでなく ネットワーク経由においても自然な形で共有され, さらに重要なシステム資源の使い過ぎを防ぐために 個々の資源に対する制限がユーザ単位, グループ単位で 設定できる, というようなことを意味しています. SLIP や PPP, NFS, DHCP, NIS といった業界標準規格の サポートを含んだ 堅固な TCP/IP ネットワーキング. これによって, FreeBSD マシンが商用サーバと同じように相互に運用でき, NFS(リモートファイルアクセス)や, 電子メールサービスのような 極めて重要な機能を提供します. また, WWW や FTP, ルーティング, ファイアウォール (セキュリティ) サービスを用いてインターネットと 接続できます. アプリケーション (あるいはユーザ) がお互いに干渉できない ようにするメモリ保護機能. アプリケーションがクラッシュしても, どのような場合でも 他のアプリケーションには影響を与えません. FreeBSD は 32ビット のオペレーティングシステム(Alpha 版は 64 ビット)であり, 最初からそのようにこつこつと設計されました. 業界標準であるX Windowシステム (X11R6) は, 普通のVGAカードやモニタでグラフィカルユーザ インタフェース (GUI) を提供し, すべてのソースコードも一緒に提供されます. Linux や SCO, SVR4, BSDI, NetBSD 用に作られた多くの プログラムとのバイナリ互換性. 何千ものすぐに実行可能な アプリケーションが FreeBSD の portspackages コレクションで利用可能です. ここに用意されているものは ネットを探し回る必要がありません インターネット上で入手可能な, 移植が容易な 何千ものアプリケーションを追加できます. FreeBSD は最も評判の よい商用の Unix システムとソースコードレベルで互換性があります. このため, ほとんどのアプリケーションは, もしあったとしてもほんの 少しの変更でコンパイルすることができます. デマンドページング 仮想メモリ とそれに 付随の VM/buffer キャッシュの設計は, 多くのメモリを要求する アプリケーションに対して効率よくメモリを 与えるようにする一方で, 他のユーザに対しても対話的な応答を維持します. 複数の CPU を搭載したマシンにおける SMP 機能のサポート(Intel 版のみ). 完全な CC++, Fortran, Perlの 開発ツール. 進んだ研究や開発のための多くの他の言語も ports や packages コレクションで提供されています. システム全体の ソースコード が提供されているので, 要求に合わせて環境を最大限に適合させることができます. 真のオープンシステムが利用できるのですから, 所有権のある解決方法に 締めつけられ, ベンダのなすがままになる必要はありません. 膨大な量の オンラインドキュメント. もう書ききれません! FreeBSD はカリフォルニア大学バークレイ校のComputer Systems Research Group (CSRG) による4.4BSD-Lite2 リリースを基にしており, BSDシステムの開発の優れた伝統を守り続けています. CSRGによる素晴らしい活動に加えて, FreeBSDプロジェクトは何千時間もの時間を注ぎ込んで, 実際の使用の場において最大の性能と信頼性を 発揮するためにシステムのチューニングをおこなっています. 多くの大企業がPCオペレーティングシステムの分野で 実現しようと奮闘しているそのような機能や性能, 信頼性を FreeBSDは今すぐ提供できます! あなたの思いつく限りのアプリケーションは, 何でもFreeBSDで 実行できます. ソフトウェア開発から ファクトリオートメーション, 在庫制御から遠く離れた人工衛星の アンテナの方向調整まで; 商用UNIX製品でできることは, FreeBSDでも十分にできるのです! また, FreeBSDは世界中の研究センターや大学によって開発される 文字通り何千もの高品質で, たいていはほとんど無料で利用できる アプリケーションによる恩恵を得ることができます. 商用のアプリケーションも提供されており, 日々増え続けています. FreeBSDのソースコードは広く提供されているので, システムも特別なアプリケーションやプロジェクトに合わせて, いくらでもカスタマイズすることができます. これは 有名な商業ベンダから出ているほとんどのオペレーティング システムでは不可能なことです. 以下に現在FreeBSDを 使っている人々のアプリケーションの例をいくつか上げます: インターネットサービス: FreeBSDに組み込まれている 頑強なTCP/IP ネットワーキング機能は次のようなさまざまなインターネット サービスの理想的なプラットフォームになります: FTP サーバ World Wide Web サーバ(標準, もしくは安全な [SSL]) ファイアウォールと NAT (IP マスカレード) ゲートウェイ 電子メールサーバ USENET ニュースおよび電子掲示板システム さらにいろいろ... FreeBSD を利用すれば, 小規模で安価な 386 クラスの PC でも気軽に導入することができますし, 事業の成長に合わせてアップグレードした 4 つの Xeon プロセッサと RAID ストレージデバイスを 備えたシステムでも, 全くそのまま使うことができるのです. 教育: あなたは計算機科学または工学の学生ですか? オペレーティングシステムやコンピュータアーキテクチャ, ネットワーキングを学習するなら, FreeBSDを手に 経験するのが一番よい方法です. 自由に利用できるCADや数学, グラフィックデザインのパッケージもいくつもあり, コンピュータに関心を持った人が 他の人 の成果を 手に入れて利用するのにとても役に立ちます. 研究: システム全体のソースコードが利用できるため, FreeBSDはオペレーティングシステムの研究だけでなく, 計算機科学の他の部門においても優れたプラットフォームです. 自由に利用できるFreeBSDの特長は, オープンフォーラムで 議論される特別なライセンスの同意や制限について 心配することなく, 離れたグループでもアイディアや開発の共有に よる共同研究を可能にします. ネットワーキング: 新しいルータが必要? ネームサーバ (DNS) は? 内部のネットワークを人々から守る ファイアウォールは? FreeBSDはすみに眠っている使われていない386や486のPCを簡単に 洗練されたパケットフィルタリング機能を持つ高級なルータに 変えることができます. X Windowワークステーション: 自由に利用できるXFree86サーバやX Inside社から提供される 優れた商業サーバを使うことによって, 安価なX端末 としてFreeBSDを使うこともできます. X端末とは違ってFreeBSDは 多くのアプリケーションをローカルに走らせることもでき, 中心のサーバの負荷を軽減することも可能です. FreeBSDはディスクレスでもブート可能であり, 個々のワークステーションを安価で, 容易に管理することさえ 可能にします. ソフトウェア開発: 基本的なFreeBSDシステムには 有名なGNUのC/C++コンパイラやデバッガ含んだ完全な開発ツールが ついてきます. FreeBSD は CDROM または anonymous FTP によってソース, バイナリとも利用可能です. 詳しくは, FreeBSD の入手方法 を見てください. FreeBSD について 以下のセクションでは, 簡単な歴史やプロジェクトの目標, 開発モデルなど, 普段は表にでない話題を提供しています. FreeBSD 小史 原作: &a.jkh;. 訳: &a.jp.masaki;, &a.jp.hino;. 19 December 1996. FreeBSD プロジェクトは 1993年の始めに Unofficial 386BSD Patchkit の最後の 3人のまとめ役によって, 部分的に patchkit から派生する形で開始 されました. ここでの 3人のまとめ役というのは, Nate Williams と, Rod Grimes と, 私 (Jordan K. Hubbard) です. 私たちのもともとの目標は, patchkit という仕組みではもう十分に解 決できなくなってしまった 386BSD の数多くの問題を修正するための, 386BSD の暫定的なスナップショットを作成することでした. こういった経緯を経てい るので, このプロジェクトの初期の頃の名前が 386BSD 0.5 386BSD 暫定版 (Interim) であったということを覚えている人もいるでしょう. 386BSD は, Bill Jolitz が (訳注: バークレイ Net/2 テープを基に) 作成し たオペレーティングシステムです. 当時の 386BSD は, ほぼ一年にわたって放っ ておかれていた (訳注: 作者がバグの報告を受けても何もしなかった) という ひどい状況に苦しんでいました. 作者の代わりに問題を修正し続けていた patchkit は日を追うごとに不快なまでに膨張してしまっていました. このよ うな状況に対して, このままではいけない, 何か行動を起こさなければ, とい うことで異議を唱えるものは私たちのなかにはいませんでした. そして私たち は挑戦することを決断し, 暫定的なクリーンアップスナップショットを作 成することで Bill を手助けしようと決めたのです. しかし, この計画は唐突 に終了してしまいました. Bill Jolitz が, このプロジェクトに対する受け 入れ支持を取り下げることを突然決意し, なおかつこのプロジェクトの代わり に何をするのかを一切言明しなかったのです. たとえ Bill が支持してくれないとしても, われわれの目標には依然としてや る価値があると決心するのにさしたる時間はかかりませんでした. そこで David Greenman が考案した名称 FreeBSD を私たちのプロジェクトの名前 に採用し, 新たなスタートを切りました. この時点でのプロジェクトの初期目 標は, すでにこのシステム (訳注: 386BSD + Patchkit) を使っていた利用者 たちと相談して決められました. プロジェクトが実現に向けて軌道に乗ってき たことが明確になった時点で, 私は Walnut Creek CDROM 社に連絡してみまし た. CDROM を使って FreeBSD を配布することによって, インターネットに容 易に接続できない多くの人々が FreeBSD を簡単に入手できるようになると考 えたからです. Walnut Creek CDROM 社は FreeBSD を CD で配布するというア イデアを採用してくれたばかりか, 作業するためのマシンと高速なインターネッ ト回線を私たちのプロジェクトに提供してくれました. 当時は海のものとも山 のものともわからなかった私たちのプロジェクトに対して, Walnut Creek CDROM 社が信じられないほどの信頼を寄せてくれたおかげで, FreeBSD は短期 間のうちにここまで大きく成長したのです. CDROM による最初の配布 (そしてネットでの, ベータ版ではない最初の一般向 け配布) は FreeBSD 1.0 で, 1993年 12月に公開されました. これは カリフォ ルニア大学バークレイ校の 4.3BSD-Lite (Net/2) を基とし, 386BSD や Free Software Foundation からも多くの部分を取り入れたものです. これは 初めて公開したものとしては十分に成功しました. 続けて 1994年 5月に FreeBSD 1.1 を公開し, 非常に大きな成功を収めました. この時期, あまり予想していなかった嵐が遠くから接近してきていました. バー クレイ Net/2 テープの法的な位置づけについて, Novell 社と カリフォルニア大学バークレイ校との間の長期にわたる 法廷論争において和解が成立したの です. 和解の内容は, Net/2 のかなりの部分が権利つき (encumbered)コー ドであり, それは Novell 社の所有物である, というバークレイ校側が譲歩し たものでした. なお, Novell 社はこれらの権利を裁判が始まる少し前に AT&T 社から買収していました. 和解における譲歩の見返りにバークレイ 校が得たのは, 4.4BSD-Lite が最終的に発表された時点で, 4.4BSD-Lite は権 利つきではないと公式に宣言されること, そしてすべての既存の Net/2 の利 用者が 4.4BSD-Lite の利用へと移行することが強く奨励されること, という Novell 社からのありがたき天からの恵みでした. (訳注: 4.4BSD-Lite は その後 Novell 社のチェックを受けてから公開された.) FreeBSD も Net/2 を利 用していましたから, 1994年の 7月の終わりまでに Net/2 ベースの FreeBSD の出荷を停止するように言われました. ただし, このときの合意によって, 私 たちは締め切りまでに一回だけ最後の公開をすることを許されました. そして それは FreeBSD 1.1.5.1 となりました. それから FreeBSD プロジェクトは, まっさらでかなり不完全な 4.4BSD-Lite を基に, 文字どおり一から再度作り直すという, 難しくて大変な作業の準備を始めまし た. Lite バージョンは, 部分的には本当に軽くて, 中身がなかったので す. 起動し, 動作できるシステムを実際に作り上げるために必要となるプログ ラムコードのかなりの部分がバークレイ校 の CSRG (訳注: BSDを作っている グループ) によって (いろいろな法的要求のせいで) 削除されてしまっていた ということと, 4.4BSD の Intel アーキテクチャ対応が元々かなり不完全であっ たということがその理由です. この移行作業は結局 1994年の 11月までかかり ました. そしてその時点で FreeBSD 2.0 をネットと CDROM(12月末ごろ)を通じて公 開しました. これは, かなり粗削りなところが残っていたにもかかわらず, か なりの成功を収めました. そしてその後に, より信頼性が高く, そしてインス トールが簡単になった FreeBSD 2.0.5 が 1995年の 6月に公開されました. 私たちは 1996年の 8月に FreeBSD 2.1.5 を公開しました. この出来が非常に 良く, 特に業務で運用しているサイトや ISP での人気が高かったので, 私た ちは 2.1-STABLE 開発分流から更に公開をおこなうことにメリットがあると考 えました. それが FreeBSD 2.1.7.1 で, 2.1-STABLE 開発分流の最後を締めく くるものとして, 1997年の 2月に公開されました. 2.1-STABLE 開発分流 (RELENG_2_1_0) は現在, 保守のみをおこなう状態になっており, 今後は, セ キュリティの改善や他の何か重要なバグフィックスのみが おこなわれるでしょう. FreeBSD 2.2 の開発は, RELENG_2_2 開発ブランチとして, 開発の本流 (-CURRENT) から 1996 年 11 月に分岐し, そして 1997 年 4 月に最初のリリース(2.2.1)が行なわれました. 2.2 開発ブランチからは, さらに 97 年の夏と秋にリリースが行なわれ, 98 年 11 月に 2.2 開発ブランチの最終リリース(2.2.8)が 行なわれています. 1998 年 10 月に FreeBSD 3.0 最初の公式リリースが 行なわれ, 2.2 開発ブランチは開発の終了を迎えることになりました. 1999 年 1 月 20 日には, FreeBSD の開発ツリーが 4.0-CURRENT と 3.X-STABLE の各ブランチに再び分岐しました. 3.X-STABLE からは 3.1 が 1999 年 2 月 15 日に, 3.2 が 1999 年 5 月 15 日に, 3.3 が 1999 年 9 月 16 日にリリースされました. このブランチにおける現時点で最も新しいリリースは 3.4 で, 1999 年 12 月 20 日にリリースされています. 2000 年 3 月 13 日には 5.0-CURRENT の発生と, 4.X-STABLE ブランチの作成が行われました. これまでのところ, このブランチからの唯一のリリースは &rel.current;-RELEASE です. 長期的な開発プロジェクトは 5.0-CURRENT 開発ブランチで続けられ, 5.0 のスナップショットリリースが収録された CDROM (もちろん, ネットワーク上でも)は, 開発の進行状況に応じて 継続的に公開されています. FreeBSDプロジェクトの目的 原作: &a.jkh; 訳: &a.jp.kiroh; 24 September 1996. FreeBSD プロジェクトの目的は, いかなる用途にも使用でき, 何ら制限のない ソフトウェアを供給することです. 私たちの多くは, コード(そしてプロジェ クト)に対してかなりの投資をしてきており, これからも多少の無駄はあって も投資を続けて行くつもりです. ただ, 他の人達にも同じような負担をするよ うに主張しているわけではありません. FreeBSD に興味を持っている一人の残 らず全ての人々に, 目的を限定しないでコードを提供すること. これが, 私たちの最初のそして最大の 任務 であると信じています. そうすれば, コード は可能な限り広く使われ, 最大の恩恵をもたらすことができるでしょう. これ が, 私たちが熱烈に支持しているフリーソフトウェアの 最も基本的な目的であ ると, 私は信じています. 私たちのソースツリーに含まれるソースのうち, GNU 一般公有使用許諾(GPL)または GNU ライブラリ一般公有使用許諾(LGPL) に従っているものについては, 多少制限が課せられています. ただし, ソースコードへのアクセスの保証という, 一般の制限とはいわば逆の制限(訳注1)です. GPL ソフトウェアの商利用には, そのライセンスにある 複雑な側面が影響してくることがあります. ですから私たちは, そうすることが合理的であると判断されたときには, より制限の少ない, BSD 著作権表示を採用しているソフトウェアを 選択するようにしています. (訳注1) GPL では, 「ソースコードを実際に受け取るか, あるいは, 希望しさえすればそれを入手することが可能であること」 を求めています. FreeBSDの開発モデル 原作: &a.asami;. 18 October 1996. 訳: &a.asami;. 31 October 1996. FreeBSD の開発は非常に開かれた, 柔軟性のあるプロセスです. コントリビュータのリスト を見ていただければわかる とおり, FreeBSDは文字通り世界中の何百という人々の努力によって開発され ています. 新しい開発者はいつでも大歓迎ですので, &a.hackers; にメールを 送ってください. &a.announce; もありますので, 他のFreeBSDユーザに自分のやっ ていることを宣伝したい時にはどうぞ使ってください. あと, FreeBSD プロジェクトとその開発プロセスについて, どなたにも知って いていただきたいのは以下のようなことです. CVSリポジトリ FreeBSDのソースツリーは CVS (Concurrent Versions System) によってメンテナンスされています. CVSはソー スコード管理用のフリーソフトウェアで, FreeBSDのリリースにも含まれてい ます. FreeBSD の メインの CVS リポジトリ は米国カリフォルニア州のコンコルド市に存在 し, そこから世界中のたくさんのミラーサイトに コピーされています. CVSツ リーそのもの, そしてそのチェックアウトされたバージョンである -CURRENTと -STABLEはあな たのマシンにも簡単に取ってくることができます. これについては ソースツリーの同期 の章をご覧ください. ソースツリー管理者 ソースツリー管理者 はCVSツリーへの書き込み権限を持っている人, つまりFreeBSDのソースに変更を加えることができる人です. (CVSでリポジトリに変更を加えるには &man.cvs.1; commit というコマンドを使うので, これらの人々は英語では committers と呼ばれます.) 開発者にコードを送って見てもらうのに一番いい方法は &man.send-pr.1; コマンドを使うことです. もし, 何か問題があって send-pr が使えないならcvs-committers@FreeBSD.org にメールを送っていただいても結構です. FreeBSDコアチーム FreeBSD コアチームはFreeBSDプロジェク トが会社だとすると取締役会にあたるものです. コアチームとして一番重要 な役割は FreeBSD プロジェクトが全体としてよい方向に向かっていることを確 認することです. 責任感あふれる開発者を上記のソースツリー管理者として 招くこと, また仕事上の都合などでコアチームを やめた人たちの後任を見つけ ることもコアチームの役割です. 現在のコアチームのほとんどは最初は単な る一開発者としてプロジェクトに関わりはじめ, ずるずるといつのまにか深み にはまってしまった人です. コアチームのうち何人かは特定の 担当分野 を持っており, システムのうち一部に特に重点をおいて 面倒を見ています. 忘れてほしくないのはコアチームのほとんどは FreeBSD についてはボラ ンティアであり, FreeBSD プロジェクトからは何ら金銭的な支援を受けていな いということです. ですから, ここでの 責任保証されたサポート ではありません. そういう意味で, 上記の取締役会という例えはあまりよく ないかもしれません. むしろ, FreeBSDのために人生を棒に振ってしまった人 の集まりといった方が正しいかも.... ;-) その他のコントリビュータ 最後になりますが, もっとも重要で多数をしめる開発者はフィードバック やバグフィクスをどんどん送ってくれるユーザ自身です. FreeBSDの開発に外 郭から関わっていきたいという人は &a.hackers; ( メーリングリスト情報 を見てください) に参加するといいでしょう. FreeBSD のソースツリーに入っている何かを書いた人の リスト は日に日に長くなっています. あ なたも今日, 何か送ることからはじめてみませんか? :-) もちろんFreeBSD に貢献するにはコードを書くほかにもいろいろな方法があ ります. 助けが求められている分野については, このハンドブックの 貢献の仕方 の節を見てください. ひとことで言うと, FreeBSD の開発組織はゆるやかな同心円状になっています. ともすると中央集権的に見えがちなこの組織は, FreeBSDのユーザが きちんと管理されたコードベースを 容易に追いかけられるようにデザインされ ているもので, 貢献したいという人を締め出す意図は全くありません! 私た ちの目標は安定したオペレーティングシステムと 簡単にインストールして使う ことのできる アプリケーションを提供することであ り, この方法は結構うまくはたらくのです. これからFreeBSDの開発にたずさわろうという人に, 私たちが望むことはただ 一つです: FreeBSDの成功を継続的なものにするために, 現在の開発者と同じ ような情熱を持って接してください! 現在のリリースについて FreeBSD は自由に利用でき Intel i386, i486, Pentium, Pentium Pro, Celeron, Pentium II, Pentium III (とその互換 CPU) 及び DEC Alpha アーキテクチャのコンピュータシステムで動作する, 4.4BSD-Lite2 ベースの全ソー スつきのリリースです. これはもともとカリフォルニア大学バーク レイ校 CSRGグループのソフトウェアがベースとなっており, NetBSD, OpenBSD, 386BSD, そして Free Software Foundation の ソフトウェアなどにより拡張されています. 94 年末の FreeBSD 2.0 のリリースからみると, FreeBSD は性能, 機能, 安定性の面で劇的に改善されました. もっとも大きな変化は仮想メモリシステムに おける改良で, 統合化された VM/file バッファキャッシュを用いる ことで性能を向上させながらも FreeBSD のメモリの使用量を減らすことができたことです. そのおかげで, 最低 5MB メモリという制約上でも動作するようになりました. その他の拡張としては, NIS のクライアントとサーバの完全なサポート, トランザクション TCP のサポート, ダイヤルオンデマンド PPP, 統合された DHCP のサポート, 改良された SCSI サブシステム, ISDN, ATM, FDDI, Fast Ethernet や Gigabit Ethernet(1000Mbit) アダプタへの対応, 最新の Adaptec コントローラ対応の改良や, 数百件におよぶバグの修正などがあります. 私たちはたくさんのユーザからのコメントや 提案をまじめに受け取り, 私たちが正しいと考え, かつ導入の手順が分かりやすいものを提供しようと 努力しています. この (継続的に進化する) プロセスに対するあなたの意見を 心からお待ちしています. FreeBSD では基本配布セットに加え, 移植されたソフトウェア集 として 数千の人気の高いプログラムを提供しています. 2000 年 7 月 中旬の時点で 3000 以上の ports (移植ソフトウェア) が存在します. ports には http (WWW) サーバから, ゲーム, 言語, エディタまでありとあらゆるものが含まれています. portsはオリジナル ソースに対する差分という形で表現されており, すべての portsを 集めても 50MB程度にしかなりません. こうすることで ports の更新を 容易にし, portsに必要なディスクスペースを小さくすることができます. portsをコンパイルするには, インストールしたいと思っているプログラムの ディレクトリに移動し, make install とすると, あとはすべてシステムが やってくれます. どの portsもオリジナルの配布セットを動的に CDROM または近くの FTP サーバから取ってくるので, ディスクは 構築したいと思っている portsの分だけを準備しておけば十分です. ほとんどの portsは, すでにコンパイルされた状態で package として提供されており, ソースコードからコンパイルしたくない場 合, これを使うと (pkg_add というコマンドで) 簡単にインストー ルできます. FreeBSD 2.1 以降のマシンであれば, /usr/share/doc ディレクトリにインストールの手順や FreeBSD を利用する上で有用な ドキュメントがたくさんあります. これらのローカルにインストールされたドキュメントは, HTML ブラウザを使って, 以下の URL から 参照することができます. FreeBSD ハンドブック (英文オリジナル) file:/usr/share/doc/handbook/index.html FreeBSD に関する FAQ file:/usr/share/doc/faq/index.html また, http://www.FreeBSD.org/ にはマスタ (かなり頻繁に更新されます) がありますので, こちらも参照してください. 合衆国の輸出規制のため, FreeBSD のコア配布セットには DES のコードは 含まれていません. 合衆国国内に限り, DES を使うプログラムなどが, コア配布セットに加えるパッケージとして提供されています. 誰でも使えるパッケージは, 別途, 合衆国国外で提供されています. 合衆国国外からも自由に取得可能な DES の配布セットに関する 詳細は, FreeBSD FAQ にあります. FreeBSD 上で必要とされるセキュリティがパスワードだけであり, Sun や DEC などの別のホストから暗号化されたパスワードをコピーする必要が ないのであれば, FreeBSD の MD5 ベースのセキュリティで十分です. この標準のセキュリティモデルは DES よりも適していると私たちは思って いますし, また, やっかいな輸出規制にもひっかかることはありません. あなたが合衆国国外にいるなら (あるいは国内にいても) 一度試してみて ください!
diff --git a/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml b/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml index f6ddd1975f..429addbee7 100644 --- a/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml @@ -1,1870 +1,1871 @@ FreeBSD カーネルのコンフィグレーション 寄稿: &a.jehamby;, 1995 年 10 月 6 日. + 訳: &a.jp.tomo;, &a.jp.yoshiaki;. 1996 年 11 月 2 日. この章はシステムに合わせたカーネルの再構築の基礎について 述べたものです. この章は, システム管理の初心者から Unix システム管理に十分な経験を積んだ人までを対象としています. なぜカスタムカーネルを作るか? システムに合わせたカーネルの構築はすべての Unixシステム管理者が 避けて通ることのできない最も重要な通過儀礼の1つです. この作業は, 多くの時間を必要としますが, あなたの FreeBSD システムに多くの利益をもたらします. GENERICカーネルは, めったに使われることのないハードウェアをサポートするとともに, 考えられるすべての SCSIカードやネットワークカードをサポート しなければなりませんが, システムに合わせたカーネルは あなたの PC のハードウェアのみをサポートします. これは, 次にあげるような利益をもたらします. あなたが持っていない ハードウェアについては検出をおこなわな いので, ブートにかかる時間が短くなります. システムに合わせたカーネルは多くの場合メモリ使用量が 減ります. カーネルはいつもメモリ上に存在するので, 不必要なコードがあると本来プログラムが利用できるはずの RAM (実メモリ) を占めてしまいますのでこれは重要なことだ といえます. したがって, メモリが少ないシステムでは, カーネルの再構築は大変重要です. 必要に応じていくつかのカーネルオプションは調整すること ができ, またサウンドカードのような GENERICカーネルには ない デバイスドライバをカーネルに含めることが できます. カスタムカーネルの構築とインストール まず, カーネル再構築に必要なディレクトリをざっと見てみましょう. ここではディレクトリはすべて /usr/src/sys 以下の相対位置で示します. また, /sys からもアクセス可能です. ここには, カーネルの各部分を構成するサブディレクトリが いくつもあります. しかし, 私たちの目的で最も重要なのは arch/conf です. ここで, あなたの システムに合わせてカーネルコンフィグレーションを編集します. それから compileディレクトリ, ここはカーネルが作られる 場所です. arch は, i386, alpha, pc98(これは 日本で普及している PC のための開発ブランチです)のいずれかを表します. 各アーキテクチャのディレクトリ内部にあるファイルはすべて そのアーキテクチャでのみ使用され, 残りのコードは FreeBSD が他のプラットフォームに移植される際に共有されます. サポートされているデバイス, ファイルシステム, オプションが, それぞれ各々のサブディレクトリに分かれている, という論理的な構成に注意してください. もし, あなたのシステムに/usr/src/sys 以下のディレクトリがなければ, カーネルのソースが インストールされていません. もっとも簡単な方法は (rootで) /stand/sysinstall を用いて以下のようにします. 設定(Configure) を選んでから 配布ファイル(Distribution) を選択し, src の中の sys をインストールしてください. つぎに, arch/confに移動して, GENERIC コンフィグレーションファイルをカーネルに与えたい名前に コピーしてください. たとえば次のようにします. &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; cp GENERIC MYKERNEL 慣習として, この名前はすべて大文字でつづられます. もし, いくつかの異なるハードウェアの FreeBSDマシンを扱うなら, この名前にホスト名を含めるとよいでしょう. ここでは, 例として MYKERNEL と呼ぶことにします. この作業は root権限でおこなう必要があります. そうでなければ, permission deniedというエラーが出ます. では, MYKERNEL をあなたの好きなエディタで編集してください. もし, システムをインストールしたばかりならば, 利用できるエディタは viだけかもしれません. ここでは使い方 の説明はしませんが, 参考図書 にあるような多くの本で詳しく説明 されていますので, そちらを参照してください. FreeBSD にはより簡単なエディタとして “ee&rdquo があります. 初心者の方であればこちらをエディタ に選ぶとよいでしょう. まずファイルの最初の方のコメント行を編集し, あなたのコンフィグ レーションに合せて変更した点などを記述して GENERIC と区別がつく ようにしておきましょう. もし SunOSや他の BSDオペレーティングシステムでカーネルの 再構築をしたことがあれば, このファイルはとても親しみ やすいでしょう. しかし, DOSのようなその他の オペレーティングシステムしか知らない人から見れば, GENERIC コンフィグレーションファイルはとても なじみにくいものかもしれません. そのような場合は, コンフィグレーションファイル の節をゆっくりと注意深く読んでください. 古いバージョンの FreeBSD からアップグレードを おこなう場合, 新しいカーネルソースを得た場所より新しいバージョンの &man.config.8; を取ってくる必要があるかもしれません. これは /usr/src/usr.sbinにあります. したがってこれらのソースをダ ウンロードする必要があります. 次のコマンドを実行する前に (configを)作りインストールをしておいてください. 編集し終ったら, 次のコマンドによってコンパイル, インストール を行ってください. &prompt.root; /usr/sbin/config MYKERNEL &prompt.root; cd ../../compile/MYKERNEL &prompt.root; make depend &prompt.root; make &prompt.root; make install 新しいカーネルはルートディレクトリに /kernelという 名前でコピーされ, 今までのカーネルは /kernel.old という名前へ変更されます. では, システムをシャットダウン, リブー トして新しいカーネルを使ってください. うまく行かない場合は, この章の終りの 問題が起きた場合には を参照してください. この章の新しい カーネルがブートしない 場合のリカバリの方法を注意深く読んでおいてください. (サウンドカードのような)新しいデバイスを 追加した場合は, 使う前に /devディレクトリで デバイスノードを追加しなければならないかもしれません. 詳しくは, デバイスノード を読んでください. コンフィグレーション ファイル コンフィグレーション ファイルの一般的なフォーマット はとてもシンプルです. 各行は1つのキーワードと1つ以上の 引数を含んでいます. 見やすくするために, ほとんどのキーワードは 引数を1つしか書いてありません. #に続くものはすべてコメントとして扱われ, 無視されます. ここでは, それぞれのキーワードについて だいたい GENERIC に出てくる順番で説明します. しかし, お互いに関係のあるキーワードは, 実際には GENERIC ファイル上に バラバラに現れていても, (ネットワーキングのように)1つにまとめ てあります. おびただしい数の オプションの一覧が GENERICと同じディレクトリの LINT コンフィグ レーションファイルにあります. もし, ある行の目的や必要性に疑 問を持ったら最初に LINT をチェックしてください. 数字と二重引用符 FreeBSD 3.x と, それまでの全てのバージョンの FreeBSD における &man.config.8; は, コンフィグレーションファイル中の テキストとして使われる数字を含む文字列が 全て二重引用符で括られていなければならないという制限があります. 数字が文字列ではなく数字として使われている場所, 例えば maxusers 64 のような場合は, 二重引用符を付けてはいけません. この制限は, FreeBSD 4.x ブランチで取り除かれました. ここにある例は二重引用符(") が使われています. もし, -current のシステムでカーネルを構築する場合は, 引用符を削除しなければなりません. 必須キーワード ここにあるキーワードはカーネルの構築に必要不可欠です. machine arch 最初のキーワードは machineです. FreeBSD は Intel の 386(とその互換)チップ, DEC の alpha プロセッサ, そして PC98(訳注: NEC の PC-98 シリーズおよびその互換機のこと. 以下 PC98 という表現はすべてこれを指します)上でのみ動作するため, i386alpha を指定します. cpu "cpu_type" 次のキーワードは cpuです. FreeBSDでサポートしている CPUの中から記述します. i386 もしくは PC98 システムで cpu_type として指定可能な値は, 次のとおりです. I386_CPU I486_CPU I586_CPU I686_CPU Alpha システムでは指定可能な cpu_type は 次の通りです: EV4 EV5 GENERIC カーネルのように cpuの行の cpu_type が異なった値を持つものが 複数あってもかまいません. カスタムカーネルでは, あなたが持っている cpuを1つだけ指定するのが 一番です. 例えば, もし Intelの Pentiumを持っていれば, cpu_typeには, I586_CPU を使ってください. ident machine_name 次は, カーネルの識別名となる ident です. GENERIC からあなたがカーネルに与えたい名前に 変えてください. ここでは, MYKERNEL とします. ident に与えた名前はカーネルの ブート時に表示されるので, 普段のカーネルとは別に カーネルに違う名前を与えたいとき(例えば, 実験用のカーネルを作りたい時など)に便利でしょう. C コンパイラに スイッチで渡されるので, DEBUGのような名前にしたり, vax といった他のCPUの名前など紛らわしい名前にしないで ください. maxusers number これは, 重要なシステムテーブルのサイズを決めます. ここ で与えられる数字はマシンに同時にログインすると考えられ るおよそのユーザ数です. しかし, 通常の使用環境であれば, 特に X Window System を立ち上げたり, ソフトウェアを コンパイルするような使用であれば maxusers には少なくとも 4 以上を指定したほうがいいでしょう. その理由は, maxusers で決るテーブルで最も重要なものはプロセス の最大数であるからです. プロセス最大数は 20 + 16 * maxusersで与えられ, maxusers1 にすると 36 プロセスしか同時には持てません. この中にはブー ト時にシステムによって起動する18個ぐらいのプロセス, X を 起動する時の 15 程度のプロセスも含みます. マニュアルページを読むという 1 つのタスクでさえ, フィルタやファイル伸長, 表示のために 9 つのプロセスを起動します. maxusers64 にすれば, 同時に 1044 個のプロセスを持つことができるので, どんな人でも十分な数だといえるでしょう. それでも他のプログラムを起動した場合に, あるいは, (Walnut Creek CDROMのFTPサイトのように) 同時に多くのユーザを抱えるサーバを運用していて, proc table full というおぞましいエラーが起きる場合は, この値を増やしてカーネルを再構築してください. maxusers はあなたのマシン にログインできるユーザの数を制限するものでは ありません. 単に, あなたのシステムに ログインするユーザ数の最大値と各々のユーザが いくつのプロセスを走らせるかを考慮することに よってさまざまなテーブルの値を適切な値に設定 するだけです. これに対し, pseudo-device pty 16の remote logins というキーワードは 同時にリモートログインできるユーザ数を制限 します. config kernel_name root on root_device これはカーネルの位置と名前を特定します. 伝統的にカーネルは vmunixと呼ばれますが, FreeBSDでは kernelとふさわしい名前になりました. kernel_nameにはいつも kernel を 使ってください. 名前を変えると多くのシステム ユーティリティが使えなくなります. 2番目の部分は ルートファイルシステムとカーネルのあるディスクと パーティションを指定してください. SCSIドライブでなければ, wd0を, SCSIドライブならば da0です. 一般的なオプション 以下はカーネルのサポートするさまざまなファイルシステムおよ びその他のオプションです. カーネル構築の際, オプションに対応する各 #ifdef は, config コマンドによってコンパイルディレクトリに作成された opt_foo.h 宣言ファイルから指定されたオプションを認識します. config に有効なオプションは, 二つのファイルに存在します. アーキテクチャに依存しないものは /sys/conf/options であり, アーキテクチャ依存のものは /sys/archconf/options.arch です. 現在のオプション設定のための構成は, 3.x で導入されました. 伝統的に, コンフィグレーションファイルにある各オプションは, 単純にカーネルの Makefile 内の CFLAGS 行における オプションスイッチに変換されます. これは, 実際にどのオプションがどのファイルで参照されているのかという 情報を持たないため, 予期しないオプション設定(creeping optionism)を引き起こす可能性があります. options MATH_EMULATE これは, 数値演算コプロセッサがない コンピュータ (386や486SX) で数値演算コプロセッサ のエミュレーションを可能にします. もし, Pentiumや 486DX, あるいは387や487があれば, コメントアウト できます. FreeBSD付属の数値演算 コプロセッサエミュレータはあまり正確では ありません. 非常に正確な計算をおこないたい ならば, より優れた GNUのエミュレータである GPL_MATH_EMULATEに変えることを おすすめします. これはライセンスの関係でデフォルトでは 含まれていません. options "COMPAT_43" 4.3BSDとの互換性のためのオプションです. そのままにしておいてください. コメントアウトすると, いくつかのプログラムで動作がおかしくなります. options UCONSOLE ユーザがコンソールを横取り (grab) できるようにします. これは X Window System 上で便利です. 例えば, コ ンソール xtermを xterm -Cとタイプして作ると, そこに write, talk などのメッセージがカーネルからコ ンソールへ送られるメッセージと同じように表示されます. options SYSVSHM このオプションは System V の共有メモリを提供します. X Window System の XSHM拡張での利用がもっとも一般に見 られる例で, 多くのグラフィックを多用したプログラム (movie player の Xanimや Linux DOOMなど) ではこれを 利用することで速度が増加するというメリットがあります. X Window System を利用するのであればこれは間違いな く含めたくなるでしょう. options SYSVSEM System V のセマフォをサポートします. 一般的に利用される ことは少ないですがカーネルサイズの増加は数百バイトだ けです. options SYSVMSG System V のメッセージをサポートします. これを指定した場 合もカーネルサイズの増加は数百バイトだけです. &man.ipcs.1; コマンドは これらの System V の機構を利用しているプロセスを表示し ます. 訳注: 共有メモリ, セマフォ, メッセージ(メッ セージキュー) は System V系 で一般的なプロセス間通信の機 構です. くわしくは System Vのプロセス間通信に関する文 献, 「詳解 UNIXプログラミング」 (ソフトバンク) , 「UNIXネッ トワークプログラミング」 (トッパン) などを参照してくださ い. ファイルシステムオプション これらのオプションはさまざまなファイルシステムへのサポート を追加します. 少なくともブートするためのデバイスのサポートを含 める必要があります. 標準的にはハードディスクからブートするので あれば FFS , ディスクレスワークステーションとしてイー サネットからブートするのであれば NFSです. 一般的に利用される他のファイルシステムをカーネルに含め, あまり 利用しないファイルシステム (多分 MS-DOSファイルシステム?) のサポー トをコメントアウトすることができます. これは Kernel Module ディレクトリ /modules から, 最初にそのタイプのファイ ルシステムがマウントされる時に 動的にドライバがロードされるからです. options FFS 基本的なハードドライブ ファイルシステムです. ハードディ スクからブートする場合は残しておいてください. options NFS ネットワーク ファイルシステムです. Ethernet経由で Unixファ イルサーバからパーティションをマウントする予定がない場 合はコメントアウトすることができます. options MSDOSFS MS-DOS ファイルシステムです. ブート時に DOSフォーマット のハード ドライブをマウントする予定のない場合はコメン トアウトしても安全です. 先に示したように, DOSパーティ ションをマウントする時に自動的にロードされます. また (ports コレクションにある) mtools という素晴 らしいソフトウェアにより mount , unmountなしで DOSフロッ ピーにアクセスすることができます (これは MSDOSFSも必要 ありません). options "CD9660" CD-ROMのための ISO 9660 ファイルシステムです. CD-ROMを 持っていないか, 時々 データ CDをマウントするだけならコ メントアウトしましょう (データ CDを最初にマウントする 時に動的にロードされます). オーディオ CDはこのファイル システムは必要ありません. options PROCFS プロセス ファイルシステムです. これは疑似的なファイルシ ステムで /proc にマウントされ, &man.ps.1; などのプロ グラムがプロセスに関してより詳しい情報を与えてくれるよ うになります. options MFS メモリマップド ファイルシステムです. これは基本的に一時 ファイルを記憶するための高速な RAMディスクで, 大きな swap領域がある場合に有効です. MFSパーティションをマウ ントするに適した場所は多くのプログラムが一時ファイルを 置く /tmpです. MFS RAMディスクを /tmp にマウントするには以下の内容を /etc/fstabに追 加してリブートするか mount /tmpとタイプします. /dev/wd1s2b /tmp mfs rw 0 0 /dev/wd1s2bをあなたが使用して いるswap パーティションに置き換えてください. これは以 下のように /etc/fstab に書かれているでしょう. /dev/wd1s2b none swap sw 0 0 また, MFS ファ イルシステムは動的にロードすることは できません . したがって使いたい場合はコンパイル時に カーネルに 含める必要があります. options "EXT2FS" Linux のファイルシステム. ext2fs のサポートにより, Linux パーティションを読み書きすることができます. これは, FreeBSD と Linux のデュアルブートシステムにおいて 両者でデータを共有したい場合に有用です. options QUOTA ディスククォータを有効にします. アクセスが公開されてい るシステムで (一人のユーザが) /homeパーティショ ン (全体) をあふれさせることができないようにそれぞれのユーザ にディスククォータを発行することができます. ディスククォータについての詳しい内容はディスク クォータの章を見てください. 基本的なコントローラとデバイス この節では FreeBSDでサポートされているディスク, テー プ, CD-ROMコントローラについて示します. SCSI コントローラと ネットワーク カードについ ては別の節になっています. controller isa0 FreeBSD のサポートするすべての PCで必要です. IBM PS/2 (マイ クロチャネルアーキテクチャ) では現時点では FreeBSDは動 きません. controller eisa0 EISA バスを持つマザーボードの場合に追加して下さい. このオプションは, EISA バス上に存在する全てのデバイスの自動検出, 設定をサポートします. controller pci0 PCIバスを持つマザーボードの場合は含めます. これにより PCIカードの自動認識と PCIから ISAバスへのゲートウェイが 可能になります. controller fdc0 フロッピードライブコントローラです. fd0A: ドライブで fd1B: ドライブです. ft0 は フロッピーコントローラに接続する QIC-80 テープドライブで す. 対応するデバイスがない場合はそれぞれの行をコメント アウトしてください. QIC-80テープのサポートは別に &man.ft.8; というフィルタプログラムが必要です. くわしくはマニュアルページを見てください. controller wdc0 プライマリIDEコントローラです. wd0wd1はそれぞれマスタ, スレーブドライブで す. wdc1 は セカンダリの IDEコントローラで3台 目, 4台目のハードディスクまたは IDE CD-ROMのある場合に 使います. 利用しない行はコメントアウトしてください (例え ば, SCSIハードディスクのみを使う場合は6行全部をコメント アウトしてもよいかもしれません). device acd0 このデバイスは IDE CD-ROMのサポートをします. wdc0を有効にしておく必要があり, もし 2つ以上の IDE コントローラがあり, そのうちの 2つ目のカードに CD-ROMを接 続する場合 wdc1 も必要です. また options ATAPI を書いておく必要もあります. device npx0 at isa? port "IO_NPX" irq 13 vector npxintr npx0 は FreeBSD ハードウェアコプロセッサとソフト ウェアエミュレータ両方の浮動小数点演算ユニットへのインタ フェースです. これは 不可欠 です. device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr Wangtek と Archive の QIC-02/QIC-36 テープドライブのサポートです. Proprietary CD-ROM support 以下のようなドライブを proprietary(独自の) CD-ROM ドライブと呼ぶことにします. これらのドライブは専 用のコントローラを持つか, サウンドブラスタ16などのサウ ンドカードに接続します. これらは IDEでも SCSIでもあ りません. 多くの標準速や2倍速の古い CD-ROMはこれら のインタフェースを持っていますが, 新しいものはほとんど IDE か SCSI になっています. device mcd0 at isa? port 0x300 bio irq 10 vector mcdintr ミツミ製 CD-ROM (LU002, LU005, FX001D)です. device scd0 at isa? port 0x230 bio ソニー製 CD-ROM (CDU31,CDU33A)です. controller matcd0 at isa? port ? bio 松下/パナソニック製 CD-ROM (サウンドブラスタ用 クリエィティブ ラボ製として販売されていました) です. SCSI デバイスのサポート この節では FreeBSDのサポートするいろいろな SCSIコント ローラとデバイスのサポートについて書きます. SCSI コントローラ 以下の十数行は異る種類の SCSIコントローラのサポートです. 使用しているもの以外の部分は コメントアウトしてください. controller bt0 at isa? port "IO_BT0" bio irq ? vector btintr ほとんどの Buslogic社のコントローラです. controller uha0 at isa? port "IO_UHA0" bio irq ? drq 5 vector uhaintr UltraStor 14F と 34F です. controller ahc0 Adaptec 274x/284x/294x です. controller ahb0 at isa? bio irq ? vector ahbintr Adaptec 174x です. controller aha0 at isa? port "IO_AHA0" bio irq ? drq 5 vector ahaintr Adaptec 154x です. controller aic0 at isa? port 0x340 bio irq 11 vector aicintr Adaptec 152x や サウンドカードなどに使われている Adaptec AIC-6360 チップです. (slow!) controller nca0 at isa? port 0x1f88 bio irq 10 vector ncaintr NCR 5380を使っている ProAudioSpectrum や Trantor T130 で す. controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr Seagate ST01/02 8 ビットコントローラです. (slow!) controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr Western Digital WD7000コントローラです. controller ncr0 NCR 53C810, 53C815, 53C825, 53C860, 53C875 チップを使った PCI SCSI コントローラです. これにより Diamond FirePort コントローラも サポートします. options "SCSI_DELAY=15000" このオプションによりカーネルはそれぞれの SCSIデバイスをプローブする前に 15秒間待ちます. IDEドライブのみを使用している場合は無視して構いません. ブートを速くするためにこの数値を 5秒ぐらいまで小さくしたいでしょう. そうした場合, FreeBSDが SCSIデバイスを認識しにくくなるかもしれません. その時は, もちろんこのオプションの値は元に戻 さないといけません. controller scbus0 SCSIコントローラがある場合, この行で SCSI全般のサポー トを与えます. SCSIのない場合, この行と以下の3つの行をコメ ントにすることができます. device da0 SCSIハードディスクのサポートです. device sa0 SCSIテープドライブのサポートです. device cd0 SCSI CD-ROM のサポートです. device ch0 テープライブラリなどの SCSI メディアチェンジャのサポート. device pass0 CAM パススルードライバ. 上のエントリについている 0はいくらか誤解を招き やすいかもしれません. これらのデバイスはすべてカーネルが 見つけた時に割り当てがおこなわれ, SCSIバスに何台つながってい るか, ターゲット IDが何番であるかはここの記述とは関係あ りません. 明示的に “固定的な”ターゲット IDの特定のデバイスへの 割り当てをおこないたい場合は LINT カーネルコンフィグレーションファイルの 該当する部分の説明を参照してください. コンソール, バスマウス, キーボード, Xサーバのサポート 2 つのタイプのコンソールからどちらか 1 つを選ぶ必要があります. 標準ではない方の vt220 コンソールを選んだ場合, X Window System を利用するには XSERVER オプションを有効にする必要があります (訳注: sc0 には XSERVER オプション相当の機能が始めから入っています). またバスマウスと PS/2 マウスのオプションもあります. device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr sc0 はデフォルトのコンソールドライバで SCOコン ソールに似ています. このデバイス, あるいは VT220コンパ チブルドライバの vt0いずれを使う場合もほとんど のフルスクリーンプログラムは termcapなどのターミナルデータベース ライブラリを通してアクセスしますので, あまり違いはないでしょう. このコンソールを使う場合でフルスクリーンプログラムでト ラブルが起きる場合にはログインした時に TERM変数の値を “scoansi”にしてください. controller atkbdc0 at isa? port IO_KBD tty atkbdc はキーボードコントローラで ATキーボードと PS/2タイプのポインティングデバイスを サポートします. このコントローラはキーボードドライバの atkbd と PS/2 ポインティングデバイス ドライバのpsmが必要とします. options "KBD_RESETDELAY=X", options "KBD_MAXWAIT=Y" キーボードドライバの atkbd とポインティングデバイスドライバの psm はブート処理を行なっている 時にデバイスのリセットを行なうために atkbdc に要求を出すでしょう. デバイスがリセットコマンドに対して応答を返すまでに 長い時間がかかる場合があります. これらのオプション は atkbdc がどれだけの時間待つか を制御します — ドライバは最大 X * Y ミリ秒待ちます. もし, ドライバがデバイスを見つけることが できないようであれば, これらの値を増やすことが できます. デフォルト値は X が 200m秒で Y は5回です. options "KBDIO_DEBUG=N" デバッグレベルを N に設定します. デフォルト値は 0 で, デバッグ出力は全て抑制されます. atkbdcデバイスはシステム中 設定できるのは一つだけです. device atkbd0 at isa? tty irq 1 atkbd ドライバは, atkbdc コントローラと一緒に利用され, ATキーボードコントローラに接続された AT 84 キーボードや AT拡張キーボード のアクセスを提供します. device vt0 at isa? port "IO_KBD" tty irq 1 vector pcrint これはVT-220コンパチブルコンソールドライバで VT100/102の 上位互換です. これは sc0の使えない種類のラッ プトップ機でもうまく動きます. ログイン時に TERM変数の値 を>vt100vt220にしてください. また, このドラ イバはネットワークを介して多くの異るマシンから接続する 場合も便利です. sc0デバイスのための termcapterminfoエントリは必ずしも 利用できるわけではありませんが — vt100はいずれの プラットフォームでも利用可能でしょう. options "PCVT_FREEBSD=210" vt0 コンソールドライバを使う場合に必要で す. options XSERVER vt0 コンソールドライバを使う時のみ有効です. これは vt0 コンソールドライバのもとで XFree86 X サーバを動かすのに必要なコードを含めます. device mse0 at isa? port 0x23c tty irq 5 vector ms Logitech や ATIのバスマウス入力カードを利用する場合のデ バイスです. シリアルマウスを使う場合にはこれら2つ の行(バスマウスとPS/2マウスに関する行) は無視して, 代わりに シリアル ポート(おそらくはCOM1)を有効にしてくだ さい. device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr このデバイスは PS/2マウスポートにマウスを接続する場合に 使います. シリアル, パラレルポート ほとんどすべてのシステムにこれらはあります. プリンタを接続す る場合は プリンタの利用の章が非常 に役に立つでしょう. モデムを使う場合は ダイヤルアップ アクセス に非常に詳しいシリアルポートの設定とデ バイスの使い方があります. device sio0 at isa? port "IO_COM1" flags 0x10 tty irq 4 sio0からsio3は MS-DOSにおける COM1から COM4に相当する4本のシリアルポートです. COM4に内蔵モデムがあり COM2を使う場合, FreeBSDからアク セスするためにはモデムのIRQを2へ変更する必要があるとい うことを注意しておきます (技術的な理由より IRQ 2 = IRQ 9となります). マルチポートシリアルカードを使う場合にマニュアルページ の &man.sio.4; にはこのオプションで使う値などのよ り多くの情報があります. ビデオカードの中には (特に S3 チップベースのものには) IOアドレスの 0x*2e8から を利用するものがあり, また多くの安価なシリアルカードは IOアドレス空間を16-bitフルデコードしていませんので, こ れらのカードは衝突します. この場合 COM4ポートは実質上 利用できません. それぞれのシリアルポートは (割込みの共有をサポートした マルチポートカードを利用していないのであれば) 別々の IRQ を割り当てる必要がありますので COM3と COM4のデフォルトの IRQは利用できません. controller ppbus0 パラレルポートバスのサポートを提供します. device ppc0 at isa? port? tty irq 7 ISA バスのパラレルポートインターフェイスです. device lpt0 at ppbus? パラレルポートのプリンタのサポートを提供します. パラレルポートプリンタのサポートを有効化するには, 上記の三つの項目が全て指定されている必要があります. ネットワーク FreeBSDでは他の一般的な Unixと同様にネットワークが非常に 重視されています. イーサネットカードが なくても必須のオプションとダイヤルアップ ネットワークのサポー トに注意してください. options INET ネットワーキングのサポートです. ネットワークに接続する予定がな くても残しておいてください. 多くのプログラムは少なくともループ バックネットワーキングが必要です(つまり, PCの中でネットワーク コネクションをおこないます). したがってこのオプションは本質的 に不可欠です. Ethernet cards 以下にさまざまなイーサネットカードを 有効にするオプショ ンを示します. ネットワークカードがなければこれらすべてを コメントアウトすることができます. そうでなければ利用す る特定のイーサネットカードをサポートするオプションを残 しておきます. device cs0 IBM Etherjet 及び クリスタル・セミコンダクタ社 の CS89x0ベースのアダプタです. device de0 DECの DC21040, DC21041, DC21140チップを使った PCIイーサネットアダプタです. device fxp0 Intel EtherExpress Pro/100B 高速イーサネットカード です. device vx0 3Com の 3C590, 3C595です (いくらか bugがあります). device cx0 at isa? port 0x240 net irq 15 drq 7 vector cxintr Cronyx/Sigma の マルチポート同期/非同期カードです. (with Cisco or PPP framing) device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 vector edintr Western Digital と SMC の 80xx, 8216 Elite Ultra ; ノベル NE1000, NE2000; 3Com の 3C503; HPの PC Lan Plus (HP27247B とHP27252A) です. device el0 at isa? port 0x300 net irq 9 vector elintr 3Com の 3C501 です. (slow!) device eg0 at isa? port 0x310 net irq 5 vector egintr 3Com の 3C505です. device ep0 at isa? port 0x300 net irq 10 vector epintr 3Com の 3C509 です(バグがあります). device fe0 at isa? port 0x240 net irq ? vector feintr 富士通 MB86960A/MB86965A ベースのイーサネットカード です. device fea0 at isa? net irq ? vector feaintr DEC DEFEA EISA FDDI アダプタです. device ie0 at isa? port 0x360 net irq 7 iomem 0xd0000 vector ieintr AT&T StarLAN 10 と EN100; 3Com の 3C507; NI5210; Intel EtherExpress 16 です. device le0 at isa? port 0x300 net irq 5 iomem 0xd0000 vector le_intr DEC の EtherWorks 2 and EtherWorks 3 (DEPCA, DE100, DE101, DE200, DE201, DE202, DE203, DE204, DE205, DE422)です. device lnc0 at isa? port 0x300 net irq 10 drq 0 vector lncintr Lance/PCnet カード (Isolan, Novell NE2100, NE32-VL)です. device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr IBM/ナショナルセミコンダクタの PCMCIA イーサネット コントローラです. device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr 3Com の PCMCIA Etherlink III です. いくつかのカードでは (特に NE2000では) “標準値” がありませんので IOポートやIRQの値を変更す る必要がある場合があります. pseudo-device loop loop は TCP/IPの一般的なループバックデバイスで す. telnet や FTPを localhost (127.0.0.1) に対して行なうとこの疑似デバイスを通して帰ってきます. 不可欠です. pseudo-device ether ether はイーサネットカードがある場合のみ必要で 一般的なイーサネットプロトコルを含めます. pseudo-device sl number sl は SLIP (Serial Line Internet Protocol) をサポー トします. これはほとんど完全に, より簡単に設定ができ, モ デム to モデム接続に適した, よりパワフルな PPPに取って代 わられています. slの後の number は同 時にいくつの SLIPセッションをサポートするかを示します. SLIPの設定のより詳しい情報はこのハンドブックの 「PPPとSLIP」の章の SLIPクライアントのセットアップ と SLIP サーバのセットアップ方法 について書かれた節にあります. pseudo-device ppp number pppはダイヤルアップ インターネット接続のための カーネルモード PPP (Point-to-Point Protocol) をサポート します. ユーザアプリケーションとしてtun を 利用する PPPの実装もあり, こちらはより柔軟性がありデマ ンドダイアリング(プログラムが接続要求を出した時に自動 的にダイヤルをおこなう)などの機能もあります. それでもこ の PPPドライバを利用したい場合は カーネル PPP の設定 の節を読んでください. slデバイスと同じように numberは同時 に PPP接続できる数を示します. pseudo-device tun number tun はユーザモード PPPソフトウェアが利用しま す. このプログラムは設定が簡単で非常に高速です. また自動ダイヤル オン デマンドなどの機能を持ちます. tunの後のnumber は同時におこなうことのできる PPPセッションの数を示します. ユーザ PPP のセットアップ の節により多くの情報があ ります. pseudo-device bpfilter number バークレイ パケットフィルタです. この疑似デバイスはネッ トワークインタフェースを無差別 (promiscuous) モードにし てネットワーク (例えば単一のイーサネット) にブロードキャス トされるすべてのパケットを取り入れることを可能にします. こ れらのパケットはディスクに取り入れられたり &man.tcpdump.1; によって検査されます. この機能の実現 はネットワーク全体のセキュリティとの微妙な妥協点であるこ とに注意してください. bpffilter の後の numberは同時に検査することの できるインタフェースの数を示します. 危険の可能性について十分解っている場合を除いてこのオプ ションは奨めません. すべてのネットワークカードでこの機能 をサポートをしてはいません. サウンドカード ここは GENERIC カーネルに含まれていない最初のセクションです. サウンドカードのサポートをするためには LINT コンフィグレーショ ンファイル(これは すべての デバイスをサポートします)か ら以下のような適切な行をコピーする必要があります. controller snd0 サウンドドライバ一般のコードです. pcapcm, を除く以下のすべてのサウンドカードで必要で す. device pas0 at isa? port 0x388 irq 10 drq 6 vector pasintr ProAudioSpectrum のオーディオ と MIDI です. device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr SoundBlaster です. SoundBlaster の IRQが標準と異る値, 例えば 5になっている場合, irq 7irq 5に書き換え, キーワード conflictsを 削除してください. device sbxvi0 at isa? drq 5 SoundBlaster 16 の 16-bit オーディオです. SB16の DMAチャネルが標準と異っている( 例えば 6か7) 場合, キーワード drq 5 を適切な値に書き直してください. device sbmidi0 at isa? port 0x330 SoundBlaster 16 の MIDI インタフェースです. SoundBlaster 16を使う場合必ずこの行を含めてコンパイル してください. device gus0 at isa? port 0x220 irq 10 drq 1 vector gusintr Gravis Ultrasound です. device mss0 at isa? port 0x530 irq 10 drq 1 vector adintr Microsoft Sound System です. device opl0 at isa? port 0x388 conflicts AdLib FMシンセサイザオーディオです. AdLib, SoundBlaster, ProAudioSpectrum を使い playmidi (ports にあります) などのプログラムで MIDIの演奏をしたい場合にこの行を含めます. device mpu0 at isa? port 0x330 irq 6 drq 0 Roland MPU-401 カードです. device uart0 at isa? port 0x330 irq 5 vector "m6850intr" MIDIインタフェースの 6850 UART です. device pca0 at isa? port "IO_TIMER1" tty PC のスピーカーを使ったオーディオです. これは非常に品質 が悪く, CPUの性能, 負荷に強く依存します, と言っておき ます (サウンドカードは必要ありませんが). device pcm0 at isa? port ? tty irq 10 drq 1 flags 0x0 pcm ドライバは WSS/MSS, Sound Blaster Pro , Sound Blaster 16 などのいろいろな種類の ISA サウンドカードをサポートします. 詳細は, &man.pcm.4 のマニュアルページを参照して下さい. 追加のドキュメントが /usr/src/sys/i386/isa/sound//usr/src/sys/i386/isa/snd/ にあります. また, これらのデバイスを追加する場合は, サウンドデバイスノード を作る必要があり ます. 疑似デバイス 疑似デバイスドライバはデバイスドライバと同様に働きますがマ シン上に対応する実際のハードウェアがないカーネルの部分です. ネットワーク関連の 疑似デバイスはそちらのセクションに示しました. ここでは残りにつ いて示します. pseudo-device gzip gzipgzipによって圧縮された FreeBSDの プログラムを実行できるようにします. /standにあるプログ ラムは圧縮されているのでカーネルにこのオプションをつけ ておくのはいい考えでしょう. gzip は現在 a.out バイナリに 対してのみ動作します. pseudo-device pty number pty は“仮想ターミナル”や仮想ログインポート です. 外部からの telnetrloginセッ ション, xterm, emacsなどのアプリケーションが使います. numberは作ることのできる ptyの数を示 します. GENERICのデフォルトは16で, 同時の xtermウィンドウやリモー トログインのために増やす場合は最大で 64までです. pseudo-device snp number スヌープデバイスです. この疑似デバイスはあるターミナル セッションが &man.watch.8; command によって他のター ミナルを監視することを可能にします. この機能の実現はセ キュリティとプライバシに対して極めて微妙な関係があり ます. snp の後の number は同時におこなうことのでき るスヌープセッションの総数です. 選択可能です. pseudo-device vn V ノードドライバです. ファイルを &man.vnconfig.8; コマンドによって デバイスとして取り扱うことを可能にします. このドライバによりフロッピーディスクイメージを 操作したりファ イルをスワップデバイスとして (MS Windowsのスワッ プファイルなどを)用いることができます. 選択可能です. pseudo-device ccd number ccd (concatenated disk)デバイスはいくつかのディスクパーティ ションを融合して大きなディスクのように 見せることができます. ccdの後の number は同時に作ることのできる疑似ディスクの数です. (詳しいことは &man.ccd.4; と &man.ccdconfig.8; のマニュ アルを参照してください.) 選択可能です. ジョイスティック, スピーカー, その他 この節は FreeBSDのここまでに示した以外のハードウェア デバイスへのサポートについて示します. これらは GENERICカーネル には含まれませんのでこのハンドブックや LINT (このファイルには すべてのデバイスのサポートが含まれます) からコピーする必 要があります. device joy0 at isa? port "IO_GAME" PC のジョイスティックです. pseudo-device speaker IBM BASIC スタイルの PC内蔵スピーカーのサポートです. シェルスクリプトで簡単な演奏をする /usr/sbin/spkrtest やキーボードを使って単純なピ アノのように演奏することができる /usr/games/piano (gamesパッケージをイ ンストールした場合にはあります) のようないくつかのプロ グラムで使われます. また素晴らしいテキストロールプレイ ングゲームである NetHack (ports コレクションにあります) はゲーム中の楽器の演奏でこのデバイスを使うように設定を することができます (訳注:日本語化されたJNetHackもportsに あります). pca0 デバイスの 項も参照してください. デバイスノードを作る カーネル内のほとんどすべてのデバイスは対応する “node” エント リが /dev ディレクトリにあります. これらのノードは普 通のファイルのように見えますが, 実際にはプログラムがデバイスに アクセスするのに用いるカーネル内への特別なエントリです. シェルスクリプトである /dev/MAKEDEVはオペレーティング システムを最初にインストールする時に実行され, サポートされてい る大部分のデバイスのノードを作ります. しかし, すべての ノードが作られるわけではありませんので 新しいデバイスのサポートを加える時は対応するエントリがこのディ レクトリにあるかどうか確認してもしなければ, 作ってください. 以下に例を示します. IDE CD-ROMのサポートをカーネルに加えるとします. 次の行 を加えます. device acd0 これにしたがって, /devディレクトリに acd0で始ま るエントリを捜してください. 1文字が後ろにつくかもしれません. 後 ろについた文字が cであるか先に rのつくエントリは “raw”デバ イスを示します. それらのファイルがないことが明らかになったとします. そこで /dev ディレクトリに移動して次のようにタイプします. &prompt.root; sh MAKEDEV acd0 スクリプトの実行が終ったら /devacd0cracd0c エントリがあることを確認してください. これによ り正しく実行されたことがわかります. サウンドカードの場合のコマンドは次の通りです. &prompt.root; sh MAKEDEV snd0 これにより対応するエントリが作られます. サウンドカードのようなデバイスのノードを作る場合で, もし他 の人がマシンにアクセスするようであれば, そのデバイスを /etc/fbtab ファイルに追加して外部からのアクセスから 保護するのが望ましいでしょう. このファイルの詳細については man fbtab を参照してください. GENERIC に含まれていないデバイスはエントリがありませんから,以上 の簡単な手順をおこなうことになります. すべての SCSI コントローラは同じ /dev の エントリを使用しますのでノードを作る必要はありません. またネッ トワークカードと SLIP/PPP 疑似デバイスは /dev にはエント リがありませんのでこれらについても作る必要がありません. 問題が起きた場合には カスタムカーネルを作る場合に起きるトラブルは, 次の 4 種類に分けられます. Config コマンドの失敗 カーネルコンフィグレーションファイルに設定を行なってから config コマンドが失敗したのであれば, おそらくファイルのどこかに単純な間違いがあります. さいわい, config はトラブルの起きた行番号を出力しますので vi で素早く見つけることができます. 例えば, 次のように出力された場合 config: line 17: syntax error vi のコマンドモードで 17G とタイプすれば, 問題のところへ飛ぶことができます. GENERIC カーネルのファイルや, 他のリファレンスと比較して注意深く修正してください. Make コマンドの失敗 make コマンドが失敗した場合には, カーネル設定で config がとらえられなかったような間違いをしていることが多いようです. もう一度コンフィグレーションファイルを見直してください. それでも問題を解決することができなければ, &a.questions; へあなたのカーネルコンフィグレーションファイルをつけてメールしてください. 誰かが素早く間違いを見つけてくれるでしょう. カーネルが起動しない 新しいカーネルが起動しなかったり, デバイスの認識をしない場合でもあわてないでください! さいわい, BSDは 利用できないカーネルから復帰する 洗練されたメカニズムがあります. それは, FreeBSD のブートローダで起動したいカーネルを選択する (例えば boot kernel.old) だけです. カーネルの再設定をおこなう場合にはいつも, 確実に動くことが分かっているカーネルを用意しておくようにすると良いでしょう. 問題のないカーネルでブートした後に あなたのコンフィグレー ションファイルを調べ, 再び構築を試みてください. /var/log/messages ファイルにはすべての成功した ブートのカーネルのメッセージやその他の記録があり, これ は助けになる情報の一つでしょう. また, &man.dmesg.8; コマンドは現在のブート時のカーネルメッ セージを出力します. カーネルの構築中にトラブルが起きた時に使うために GENERICや他のカーネルを次の構築で消されない ように異る名前で保存するようにしてください. kernel.old は新しいカーネルをインストールする 時に, その一つ前にインストールしたうまく動かないかもしれ ないカーネルで上書きされてしまいますので当てにできませ ん. またできる限り早く動作しているカーネルを本来の kernelの位置に移動させてください. そうしないと &man.ps.1; のようなコマンドが正しく動きません. make でインストールされたカーネルのファイルを (別のカーネルに戻すために) “アンロック” するための特別 のコマンドは &prompt.root; chflags noschg /kernel です. また, 新しい置き換えたカーネルあるいは重要ファイ ルを動かしたり変更されないように “ロック” するには 次のようにします. &prompt.root; chflags schg /kernel カーネルは動くが ps は動かない! システムユーティリティと異る バージョンのカーネルをインストールした場合, 例えば 実験的に “FreeBSD 4.x” のカーネルを FreeBSD 3.x システム上にインストールするような場合, &man.ps.1; や &man.vmstat.8; のような多くの システムステータスコマンドは動かなくなります. libkvm を再コンパイルして, これらのユーティリティを作りなおす必要があります. これは, カーネルとそれ以外で異なるバージョンを組み合わせて オペレーティングシステムを使用することが推奨されない理由の 一つとなっています. diff --git a/ja_JP.eucJP/books/handbook/kernelopts/chapter.sgml b/ja_JP.eucJP/books/handbook/kernelopts/chapter.sgml index f0b10ea6ac..687b2645eb 100644 --- a/ja_JP.eucJP/books/handbook/kernelopts/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/kernelopts/chapter.sgml @@ -1,214 +1,213 @@ カーネルコンフィグレーションの 新しいオプションを追加する 原作: &a.joerg; - 訳: &a.jp.yoshiaki;. - 29 December 1996. + 訳: &a.jp.yoshiaki;, 1996 年 12 月 29 日. この章をお読みになる前に FreeBSD カーネルのコンフィグレーション の章の内容を 理解しておいてください. そもそも<emphasis>カーネル オプション</emphasis>って何? カーネルオプションの使い方は基本的には FreeBSD カーネルのコンフィグレーション の章に書いてあります. そこには伝統的な形式新しい形式のオプションの説明があります. すべてのカーネルのオプションを新しい形式のものに置き換え, コンフィグファイル を修正して &man.config.8; を実行した後に カーネルのコンパイルディレクトリで make depend を実行すれば, ビルドプロセスが自動的に変更された オプションを検出し, 必要なファイルだけを 再コンパイルするようにすることが 最終的な目的です. &man.config.8; を実行するたびに古いコンパイルディレクトリ を消してしまう現在のやりかたは, やがておこなわれなくなるでしょう. 基本的に, カーネルオプションはカーネルのコンパイルプロセスの C プリプロセッサのマクロの定義にすぎません. 実際に選択的に make できる ようにするためには, 対応する部分のカーネルソース (またはカーネルの .h ファイル) がオプションを使えるようにあらかじめ書かれていなければ なりません. つまりデフォルト値をコンフィグファイルのオプションで置き換え られるようになっていなければなりません. これは普通は次のようになっています. #ifndef THIS_OPTION #define THIS_OPTION (some_default_value) #endif /* THIS_OPTION */ この場合, 管理者がコンフィグファイルのオプションに別の値を記述すれば, デフォルトの設定を打ち消して新しい値に置き換えられます. 当然, 新しい値はプリプロセッサによってソースコード中で 置き換えられるため, デフォルトの値が使われていた場所において C の式として有効な値でなければ なりません. また, 単に特定のコードを有効にするか 無効にするかを設定するための 値を持たないオプションも作ることができます. #ifdef THAT_OPTION [あなたのコードが入ります] #endif コンフィグファイルに THAT_OPTION と記述するだけで (値の有無 にかかわらず) 対応する部分のコードが組み込まれます. C 言語にくわしい人であれば コンフィグオプションとされているもの は少なくとも一つの #ifdef で参照されているということはすぐに理解 できるでしょう. ところで, ごく一部の人たちは次のようなものを試して みようとするかもしれません. options notyet,notdef このようにコンフィグファイルをしておくと, カーネルのコンパイルは うまく行きません. :-) (訳注: たとえば MATH_EMULATE のように 有効/無効のためのパラメタを 持たないオプションの場合, 無効とするためのパラメタをつけて, オプション で「無効とする」と明示することはできないという意味です) 明らかに, 任意のオプション名がカーネルソースツリー全体でどのように 使われているかを追いかけることは非常に難しいことです. このことが 新しい形式 のオプションの機構を採り入れる理由の背景です. ここではそれぞれのオプションは カーネルコンパイルディレクトリにある別々の .h ファイルとなり, opt_foo.h という名前に されます. この方法では, 通常の Makefile の依存関係が適用され, make プログラムはオプションが変更された時に再コンパイルが必要な ものを見つけることができます. 古い形式のオプションの機構は, 局部的なオプションや実験的なオプション のような一時的に利用されると考えられるオプションにおいては 有効です. つまり #ifdef をカーネルのソースに追加するのは簡単であり, それがそのままカーネルコンフィグオプションになります. この場合, 管理者はオプションの利用において 依存関係を把握しておく責任があります (また, 手動でカーネルの一部分を 強制的に再コンパイルする必要があるかもしれません). サポートされている オプションのすべてについて一つでも変更があると, &man.config.8; は サポートされていないオプションがコンフィグファイルの中に あるという警告 を出しますが, カーネルの Makefile 内にはそれを含めます. ではどのようにして追加するのでしょう? 最初に sys/conf/options (または sys/<arch>/conf/options.<arch>, たとえば sys/i386/conf/options.i386) を編集し, 新しいオプション を含めるのに最適な opt_foo.h ファイルを選びます. 新しいオプションの必要がなくなったとしたら, これを取り除きます. たとえば, SCSI サブシステムに関するすべてのふるまいについてのオプション の変更は opt_scsi.h に入れられます. デフォルトでは, 適切 なオプションファイルに単に記述されます. たとえば FOO であれば 値は対応するファイルの opt_foo.h に格納されます. これは右端に別 のファイル名を書いて置き換えることができます. 新しいオプションを加えるのに使えそうな opt_foo.h がない場合は新しい名前を作ってください. 意味のある名前を作り options[.<arch>] ファイル に新しいセクションのコメントをつけてください. &man.config.8; は自動的 に変更を検出して, 次の実行からは (訳注: 新しい .h) ファイル を作ります. ほとんどのオプションはヘッダファイルに入れられます. 大量のオプションを一つの opt_foo.h にまとめると コンフィグファイルの一つのオプションを変更したときに 多くのファイルが 再コンパイルされる原因になります. 新しいオプションに依存するカーネルファイルは 最終的には見つけ出 されます. ただし, オプションを作っただけで対応するソースがどこにも ない場合は別です. &prompt.user; find /usr/src/sys -type f | xargs fgrep NEW_OPTION オプションに対応するソースを見つけるのに上記のコマンドは 便利です. 見つけたすべてのファイルで編集, 追加をおこないます. #include "opt_foo.h" ファイルの先頭の, すべての #include <xxx.h> より前に入れます. この場合, オプションによって次のようにしてデフォルト値 を持たせている標準のヘッダファイル内の値を置き換えるため, 順番は非常に 重要です. #ifndef NEW_OPTION #define NEW_OPTION (something) #endif システムヘッダファイル (たとえば /usr/include/sys/ にある ファイル) をオプションで置き換えることは, ほとんどの場合で失敗します. そうすると, ヘッダファイルを深刻な状態に破壊してしまうので, include しないとオプションの値によって 不整合が起きてしまう場合を除き, それらの ファイルに opt_foo.h を include しないでください. そう, 現在このような例がいくつか存在していますが, 必ずしも正しい方法 ではありません. diff --git a/ja_JP.eucJP/books/handbook/l10n/chapter.sgml b/ja_JP.eucJP/books/handbook/l10n/chapter.sgml index a4944515f7..919c4ef2f6 100644 --- a/ja_JP.eucJP/books/handbook/l10n/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/l10n/chapter.sgml @@ -1,993 +1,993 @@ 地域化 (localization) - I18N/L10N の利用/設定方法 寄稿: &a.ache; 改訂: Michael Chin-Yuan Wu keichii@mail.utexas.edu, 2000 年 3 月 6 日. - 概要 + この章では ハンドブックのこの章では, 様々な国の様々な設定に対する FreeBSD の国際化 (internationalization) と地域化 (localization) について解説します. システムのデフォルトである英語以外の言語を使いたい場合, ユーザはシステムを適切に設定しなければなりません. 各言語に対する言語サポートは, 対象によりずいぶん異なることに 注意してください. 各言語を担当している各国の FreeBSD ユーザグループに 問い合わせるといいでしょう. 訳注 原文に記述されているような, 各国語に対して責任を負っている ユーザグループは存在しませんが, 日本語に関する問題などは &a.jp.users-jp; などで質問するといいでしょう. FreeBSD の国際化に関して, 完全に説明することは不可能です. システム/アプリケーションの両方のレベルにおいて, 様々な段階の国際化の実装がなされているため, 各文書, マニュアルページ, README などを参照することをお勧めします. この章に関して質問や提案などがありましたら, 著者にメール してください. 基礎知識 i18n/l10n とは? 開発者たちはしばしば, internationalization を縮めて i18n と表記します. 18 は internationalization の最初と最後の間の 文字数です. l10n も同じ命名法を用いて "localization" を縮めています. これらを合わせて, i18n/l10n された (すなわち国際化/地域化された) 手法, プロトコル, アプリケーションは, 自分達の好みの言語を 使うことを可能にしてくれます. 国際化されたアプリケーションはライブラリとして国際化キット を用いてプログラミングされています. これは開発者が単純なファイルを書いて, 表示されるメニューやテキストを各国語に翻訳できるようにしてくれます. プログラマのみなさんには, これらの方法を利用することを強く推奨します. なぜ i18n/l10n を使わなければいけないの? 英語以外の言語を見たり, 入力したり, 処理したりする場合はいつでも, i18n/l10n が使われます. i18n で使えるようになる言語には何があるの? i18n や l10n は FreeBSD に限った話題ではありません. 現在では, 世界中の主要な言語のほとんどから選ぶことができます. 例えば中国語, ドイツ語, 日本語, フランス語, ロシア語などが ありますが, これらに限定されるわけではありません. 地域化の利用 i18n は FreeBSD に特有のものではなく, 一つの考え方です. 以下の慣習にしたがって FreeBSD を利用するようにしてください. 地域化の設定は言語コード, 国コード, エンコーディングという三つの用語を基本とします. ロケール名はこれらから以下のように構成されます: 言語コード_国コード.エンコーディング 言語コードと国コード FreeBSD (やその他の国際化をサポートした UNIX) を特定の言語に地域化するには, 国と言語を特定するためのコードを知る必要があります (Country Code はアプリケーションに指定された言語のどの変種 (variation) を用いれば良いかを教えてくれます). 加えて, ウェブブラウザ, SMTP/POP サーバ, ウェブサーバなどもこれらを元に様々な選択を行います. 以下は 言語/国コードの例です. 言語/国コード 説明 en_US 英語 (合衆国) ru_RU ロシア語 (ロシア) zh_TW Traditional Chinese (台湾) エンコーディング いくつかの言語では, 8-bit やワイド文字, 多バイト文字など ASCII とは異なったエンコード法を用います (&man.multibyte.3; 参照). 古いアプリケーションはこれらを認識せず, 誤ってコントロール文字として認識してしまいます. 最近のアプリケーションは, 大抵 8-bit 文字を認識します. 実装方法にも依りますが, アプリケーションのコンパイル時もしくは configure 時に, ワイド/多バイト文字のサポートを指定する必要があるかも知れません. ワイド/多バイト文字を入力したり処理したりすることを可能にするために, FreeBSD Ports Collection では各言語向けに異なったプログラムを提供しています. 各 FreeBSD port の国際化文書を参照してください. 特に, 正しく configure したり, configure/Makefile/ コンパイラに適切な値を渡すために, アプリケーションの 文書を良く読む必要があります. 心に留めておくべきことは: 言語固有の, C 言語の char で表現できる シングルバイトの文字セット (&man.multibyte.3; を参照), たとえば ISO_8859-1, KOI8-R, CP437. ワイド, 多バイトのエンコーディング, たとえば EUC, Big5. 現在有効な文字セットのリストに関しては IANA Registry をチェックしてください. 国際化アプリケーション FreeBSD の ports/packages システムでは, それとひと目でわかるように国際化アプリケーションには名前に i18n という文字が含まれています. ただし, それらのアプリケーションが常にあなたの望む言語を サポートしているとは限りません. ロケールの設定 理論的に必要なのは, 各ユーザの ~/.login_conf や, ログインシェルの設定ファイル (~/.profile, ~/.bashrc, ~/.cshrc) で LANG にロケール名を設定し, export することだけです. これによりロケールのサブセット (LC_CTYPE, LC_CTIME, など) のすべてが設定されます. 詳細に関しては, 各言語向けの FreeBSD 文書を参照してください. 以下の二つの値を設定ファイルで指定する必要があります. POSIX &man.setlocale.3; に属する関数のための LANG アプリケーション用の MIME 文字セットのための MM_CHARSET これにはユーザのシェルの設定, アプリケーション固有の設定, X11 の設定などが含まれます. ロケールを設定する方法 ロケールを設定するには以下で説明するように, 二つの方法があります. 一つは推奨される方法で, ログインクラス(login class) において環境変数に割り当てる方法. もう一つはシステムのシェル 初期化ファイル において環境変数の指定を追加する方法です. ログインクラスを用いる方法 この方法では, 各シェルの初期化ファイルに特定のシェル設定を追加する代わりに, すべてのシェルにおいて一度に必要なロケール名と MIME 文字セットを環境変数に割り当てることができます. ユーザの設定はユーザ自身で行なえますが, 管理者の設定にはスーパユーザの権限が必要となります. ユーザの設定 ユーザのホームディレクトリの .login_conf ファイルを用いて, 両方の変数に Latin-1 エンコーディングを設定する簡単な例: me:My Account:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO_8859-1: 詳細に関しては 管理者の設定 と &man.login.conf.5; を参照してください. 管理者の設定 /etc/login.conf において 正しい言語がユーザのクラスに指定されていることを確認してください. /etc/login.conf は, このようになります. language_name:accounts_title:\ :charset=MIME_charset:\ :lang=locale_name:\ :tc=default: 先ほどの例のように Latin-1 での設定はこのようになります. german:German Users Accounts:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO_8859-1:\ :tc=default: ログインクラスを &man.vipw.8; で変更します. 新しいユーザを追加するために vipw を用います. そして以下のようなエントリを作成します: user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh ログインクラスを &man.adduser.8; で変更します. 新しいユーザを追加するために adduser を用います. そして以下の手順を踏みます: /etc/adduser.confdefaultclass = language と設定します. この場合, 他の言語のユーザには default クラスを指定することを 忘れないでください. もうひとつの方法は, &man.adduser.8; が Enter login class: default []: と聞いてきたときに, 毎回言語を指定するやり方です. さらに別の方法は, 異なる言語を利用するユーザを 追加する際に, 以下のようにするやり方です: &prompt.root; adduser -class language ログインクラスを &man.pw.8; で変更します. 新しいユーザを追加するために &man.pw.8; を 用いる場合, 以下の形式で実行します: &prompt.root; pw useradd user_name -L language シェルの初期化ファイルによる方法 各ログインプログラムごとに異なった設定が必要なため, この方法は推奨されません. 代わりに ログインクラスを用いる方法を使ってください. ロケール名と MIME 文字コードを追加するには, /etc/profile/etc/csh.login などのシェル初期化ファイル に以下の二つの環境変数を設定します. 以下に示す例は, ドイツ語の設定です. /etc/profile では: LANG=de_DE.ISO_8859-1; export LANG MM_CHARSET=ISO-8859-1; export MM_CHARSET また /etc/csh.login では: setenv LANG de_DE.ISO_8859-1 setenv MM_CHARSET ISO-8859-1 もしくは, 上記のやり方を /usr/share/skel/dot.profile (/etc/profile と同形式) や /usr/share/skel/dot.login (/etc/csh.login と同形式) に追加することもできます. X11 では: $HOME/.xinitrc に: LANG=de_DE.ISO_8859-1; export LANG もしくは: setenv LANG de_DE.ISO_8859-1 を使用しているシェルに合った形式で指定します. コンソールの設定 C 言語の char で表現できるシングルバイトの文字セット用に, /etc/rc.conf でその言語に対応した適切なコンソールフォントを指定してください: font8x16=フォント名 font8x14=フォント名 font8x8=フォント名 ここで フォント名/usr/share/syscons/fonts ディレクトリ にあるフォントファイルから .fnt という拡張子を除いたものです. また, /stand/sysinstall を使って, C 言語の char で表現できるシングルバイトの文字セット用の正しい キーマップとスクリーンマップを指定するようにしてください. sysinstall では, Configure を選択し, Console を選択します. もしくは, /etc/rc.conf に以下の行を加えてください: scrnmap=スクリーンマップ名 keymap=キーマップ名 keychange="ファンクションキー番号の並び" ここで スクリーンマップ名/usr/share/syscons/scrnmaps ディレクトリ にあるマップファイルから .scm という拡張子を除いたものです. VGA アダプタが疑似グラフィクス領域のフォント文字マトリクスで bit 8 を bit 9 に拡張することに対処するために (例えばスクリーンフォントが bit 8 列を使っている時に文字をその領域から外に移動する場合), フォントに適切にマップされたスクリーンマップが必要となります. 以下の設定をする場合, リストの後で示される kernel config を 使う必要があります. コンソールが 8-bit 列フォント文字を使うスクリーンフォント を利用している. /etc/rc.conf に以下のように設定し moused デーモンを利用可能にしている: moused_enable="YES" 上記のような場合には, VGA アダプタが 8-bit を 9-bit に拡張することに対する 対処が必要となります. この方法では, sc0 コンソールドライバにおいて, マウスカーソルと重なるフォント文字に対して 8-bit から 9-bit への拡張を無効にします. この対処法を有効にするには, カーネルコンフィグファイルに以下の行を加えます. options SC_MOUSE_CHAR=0x03 キーマップ名/usr/share/syscons/keymaps ディレクトリにあるキーマップファイルから .kbd という拡張子を除いたものです. ファンクションキーの並びはキーマップにより定義されてはいないため, 端末タイプに合わせたファンクションキーを設定するために keychange が必要となります. また, /etc/ttys の中のすべての ttyv* において, 正しいコンソール端末タイプを設定するようにしてください. 現在の定義済の値は以下の通りです: 文字セット 端末タイプ ISO-8859-1 もしくは ISO-8859-15 cons25l1 ISO-8859-2 cons25l2 KOI8-R cons25r CP437 (ハードウェアのデフォルト) cons25 ワイド/多バイト文字の言語については, /usr/ports/language 内の適切な FreeBSD port を利用してください. いくつかの ports はシステムからシリアルの vtty のように見えるようにコンソールとして振る舞います. したがって, X11 と疑似シリアルコンソール用に充分な vtty を確保しておかなければなりません. コンソールで他の言語を使うためのアプリケーションのリストの 一部です: 言語 ports の位置 Traditional Chinese (BIG-5) /usr/ports/chinese/big5con 日本語 /usr/ports/japanese/ja-kon2-* or /usr/ports/japanese/Mule_Wnn 韓国語 /usr/ports/korean/ko-han X11 の設定 X11 は FreeBSD プロジェクトの一部ではありませんが, FreeBSD ユーザのための情報を記しておきます. 詳細に関しては, XFree86 ウェブサイトや, あなたの使っている X11 サーバのサイトを参照してください. ~/.Xresources を使うことで, アプリケーション固有の国際化の設定 (フォント, メニューなど) を追加することができます. フォントの表示 X11 True Type 共通サーバ (XTT-common) をインストールし, 言語の TrueType フォントをインストールします. ロケールを正しく設定すれば, 選んだ言語がメニューなどに表示されるはずです. 非英語の文字を入力する X11 Input Method (XIM) プロトコルはすべての X11 クライアント用の新たな標準規格です. すべての X11 アプリケーションは XIM 入力サーバからの入力を受け取る XIM クライアントとして書かれるべきです. 様々な言語用の XIM サーバが存在します. プリンタの設定 プリンタにはいくつかの C 言語の char で表現できる シングルバイトの文字セットがハードウェアに組み込まれています. ワイド/多バイトの文字セットでは特殊な設定が必要であり, apsfilter を使うことをお勧めします. 言語固有のコンバータを用いて, PostScript か PDF フォーマット に文書をコンバートする場合もあるでしょう. カーネルとファイルシステム FreeBSD の FFS ファイルシステムは 8-bit 透過であり, C 言語の char で表現できるいかなる文字セットも使うことが できます (&man.multibyte.3; を参照). しかし, ファイルシステム中には文字セットの名前は記録されていません. したがって, これは単なる 8-bit であり, エンコーディングに関しては何の情報もないのです. 公式には, FFS はまだいかなるワイド/マルチバイトの文字セットもサポートしていません. しかし FFS でそのようなサポートを行うためのパッチが, 多くのワイド/マルチバイトの文字セットに存在します. それらは単に一時的で汎用性のない解決策であり, わたしたちはそれらをソースツリーに含めないことを決めています. これらのパッチに関しては, 各言語のウェブサイトを参照してください. FreeBSD の MS-DOS ファイルシステムでは, MS-DOS, Unicode 文字セット, FreeBSD ファイルシステムの文字セット の間で変換を行うことが可能です. 詳細は &man.mount.msdos.8; を参照してください. より進んだ話題 国際化に対応したアプリケーションをコンパイルしたり, 作成することを考えているなら, このセクションを読んでみてください. 国際化に対応したプログラムのコンパイル 多くの FreeBSD ports はすでに国際化されています. いくつかには port の名前に -i18n と付いています. これらはもちろん, 他のプログラムも国際化への対応を組み込んだものがあり, それらはコンパイルに際して特に考慮するようなことはありません. しかし, MySQL のようなアプリケーションでは, 特定の文字セットを使うように Makefile に指示する必要があります. これは大抵 Makefile の中で 対処されているか, ソース中の configure に値を渡すことで対応しています. 国際化に対応したアプリケーションのプログラミング あなたのアプリケーションを, 他の言語を話す人たちにとっても有用なものにするには, 国際化に対応したものにするといいでしょう. GNU の gcc コンパイラ, QT や GTK などの GUI ライブラリは文字列を特別に扱うことで国際化をサポートしています. 国際化に対応したプログラムは簡単に作成できます. それにより, あなたのアプリケーションを提供者が素早く他の言語に対応することが可能になります. 詳細に関してはライブラリ固有の国際化文書を参照してください. 一般的な予想に反して, 国際化に対応したコードは簡単に書くことができます. 通常は文字列をライブラリ特有の関数でくくるだけです. また, ワイド/マルチバイト文字をサポートするようにしてください. 国際化のための団結の呼び掛け それぞれの国で個別の国際化/地域化への努力が独立して行われているということを, これ以上無視するわけにはいきません. わたしたちは, 何度も性懲りもなく車輪を再発明してきました. 国際化の舞台における主要なグループが集まって, コアチームのように一つのグループとして活動できることを望んでいます. 現状では, あなたが国際化に対応したプログラムを書くか移植した場合, テストのために各国の FreeBSD メーリングリストに送ってくれることを望んでいます. 将来的には, 美しくないハックを加えることなしにすべての言語で動作するような, すばらしいアプリケーションを作ることを目指しています. Perl と Python Perl と Python には国際化とワイド文字を扱うためのライブラリが備わっています. 国際化に対応するためにそれらを使うようにしてください. 古いバージョンの FreeBSD では, ワイド文字ロケールがシステムにインストールされているのに Perl がインストールされていないと警告するかも知れません. この場合, シェルの環境変数 LD_PRELOAD/usr/lib/libxpg4.so と設定することで対処できます. sh 系のシェルでは: LD_PRELOAD=/usr/lib/libxpg4.so C 系のシェルでは: setenv LD_PRELOAD /usr/lib/libxpg4.so FreeBSD を特定の言語に地域化する ロシア語 (KOI8-R エンコーディング) 原作: &a.ache;. KOI8-R エンコーディングの詳細については, KOI8-R References (Russian Net Character Set) を参照してください. ロケールの設定 以下の行を ~/.login_conf に追加してください: me:My Account:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R: ロケール を 設定する際の例については, この章の前の方を参照してください. コンソールの設定 以下の行をカーネルコンフィグファイルに追加してください: options SC_MOUSE_CHAR=0x03 /etc/rc.conf で以下のように 設定してください: keymap="ru.koi8-r" keychange="61 ^[[K" scrnmap="koi8-r2cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8" ここで, ^[ は本物のエスケープ文字を /etc/rc.conf に直接入力すること表しています. '^' と '[' という文字を続けて入力するわけではありません. /etc/ttys の各 ttyv* エントリにおいて, 端末タイプとして cons25r を指定してください. コンソールを設定する際の例については, この章の前の方を参照してください. プリンタの設定 ロシア語用の文字を搭載したプリンタはほとんど ハードウェアコードページ CP866 を使っているため, KOI8-R から CP866 への特殊な変換フィルタが必要となります. このフィルタはデフォルトで /usr/libexec/lpr/ru/koi2alt に インストールされています. ロシア語用のプリンタの /etc/printcap エントリは以下のようになります: lp|Russian local line printer:\ :sh:of=/usr/libexec/lpr/ru/koi2alt:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: 記述の詳細については &man.printcap.5; を参照してください. MS-DOS ファイルシステムとロシア語ファイル名 以下の &man.fstab.5; エントリの例は, マウントされた MS-DOS ファイルシステムにおいてロシア語ファイル名を 使えるようにします: /dev/ad0s2 /dos/c msdos rw,-W=koi2dos,-L=ru_RU.KOI8-R 0 0 オプションと オプションの詳細については, &man.mount.msdos.8; を参照してください. X11 の設定 まず X 以外のロケールの設定を行ってください. ロシア語の KOI8-R ロケールは古い XFree86 のリリース (3.3 より前) では動作しません. /usr/ports/x11/XFree86 は最新版の XFree86 となっていますので, port から XFree86 をインストールした場合にはうまく 動作します. これは古いバージョンの FreeBSD を使っていない限り 起こり得ないことです. /usr/ports/russian/X.language ディレクトリに移動し, 以下のコマンドを実行してください: &prompt.root; make install 上記の port は最新版の KOI8-R フォントをインストール します. XFree86 3.3 には既に KOI8-R フォントが含まれていますが, こちらの方がより良く拡縮されます. /etc/XF86Config ファイルの "Files" セクションをチェックしてください. 既存の FontPath エントリの前に以下の行を追加しなければなりません: FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/misc" FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi" FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi" もし高解像度のビデオモードを使っている場合には, 75 dpi と 100 dpi の行を入れ替えてください. ロシア語のキーボードを使えるようにするには, 以下の行を XF86Config ファイルの "Keyboard" セクションに追加します: XkbLayout "ru" XkbOptions "grp:caps_toggle" また, XkbDisable が無効 (コメントアウト) になっていることを確認してください. ロシア語/ラテン文字の変更は CapsLock で行います. 従来の CapsLock の機能は Shift+CapsLock で使うことができます(ラテン文字モードの時のみ). キーボードに Windows キーがあり, ロシア語モードでそのキーにいくつかの非英字キーが 割り当てられているようなら, XF86Config ファイルに以下の行を追加してください: XkbVariant "winkeys" ロシア語の XKB キーボードは古いバージョンの XFree86 ではうまく動かないかも知れません. 詳しくは前述の 注釈を参照してください. ロシア語の XKB キーボードは, 地域化されていないアプリケーションでもうまく動かないかも知れません. 地域化されたアプリケーションは少なくともプログラムの最初の方で XtSetLanguageProc (NULL, NULL, NULL); を呼び出すべきです. X11 アプリケーションを地域化する方法については, KOI8-R for X-Window を参照してください. 台湾向けの Traditional Chinese への地域化 FreeBSD-Taiwan プロジェクトには, 多くの /usr/ports/chinese/* からのアプリケーションを利用した, FreeBSD の国際化/地域化のためのチュートリアル http://freebsd.sinica.edu.tw/~ncvs/zh-l10n-tut/index.html を提供しています. zh-l10n-tut の編集は Clive Lin Clive@CirX.org が担当しています. freebsd.sinica.edu.tw から 以下のコレクションを cvsup することもできます: コレクション 説明 outta-port tag=. 中国語のベータ版 Ports Collection zh-l10n-tut tag=. BIG-5 Traditional Chinese 向けの FreeBSD 地域化チュートリアル zh-doc tag=. BIG-5 Traditional Chinese 翻訳版 FreeBSD 文書 Chuan-Hsing Shen s874070@mail.yzu.edu.tw は FreeBSD-Taiwan の zh-l10n-tut を使って Chinese FreeBSD Collection (CFC) を作成しました. パッケージとスクリプトは ftp://ftp.csie.ncu.edu.tw/OS/FreeBSD/taiwan/CFC/ から入手できます. ドイツ語への地域化 (すべての ISO 8859-1 言語向け) Slaven Rezic eserte@cs.tu-berlin.de は FreeBSD マシン上でウムラウトを使うためのチュートリアルを書きました. チュートリアルはドイツ語で書かれており, http://www.de.FreeBSD.org/de/umlaute/ から入手できます. 日本語/韓国語への地域化 日本語に関しては http://www.jp.FreeBSD.org/ を, 韓国語に関しては http://www.kr.FreeBSD.org/ を参照してください. 英語以外の FreeBSD ドキュメント FreeBSD の一部を他の言語に翻訳してくれている人たちがいます. これらは メインサイトのリンクを辿るか /usr/share/doc から入手できます. diff --git a/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml b/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml index 6db772cbbc..7173b57f58 100644 --- a/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/linuxemu/chapter.sgml @@ -1,1170 +1,1171 @@ Linux モード 寄稿: &a.handy; and &a.rich; + 訳: &a.jp.kiroh;, 1996 年 9 月 24 日. Linux モードのインストール FreeBSD における Linux バイナリ互換機能は, 大部分の Linux バイナリ(a.out および ELF フォーマット)を実行できる状態になっています. 2.1-STABLE ブラン チでの Linux バイナリ互換機能は, Linux DOOM や Mathematica が実行できます. &rel.current;-RELEASE でのエミュレーションは, さらに強化されており, Linux 用 の Oracle8, WordPerfect, StarOffice, Acrobat, Quake, Abuse, IDL, netrek for Linux など, 多数のソフトウェアが実行できます. Linux オペレーティングシステムには, 特有の機能がいくつかあり, FreeBSD でサポートされていないものもあります. Linux の /proc ファイルシステムに過度に依存したバイナリは, FreeBSD では実行できません (FreeBSD で使用可能な /proc ファイルシステムとは仕様が異なっているためです). また仮想 8086モードを有効にするなど, i386 に特有なシステムコールを使っている場合も実行できません. Linux モードの設定方法は, 使用している FreeBSD のバージョンによっていくらか異なっています. 3.0-RELEASE 以降への Linux バイナリ互換機能のインストール options LINUXoptions COMPAT_LINUX を指定する必要はなくなりました. Linux バイナリ互換機能は KLD オブジェクト(“Kernel LoaDable object”) を使用しているため, インストールの際に再起動する必要はありません. ただし, スタートアップファイルで以下のように指定する必要があります. /etc/rc.conf に以下の行が必要です. linux_enable=YES これは結果的に, /etc/rc.i386 の以下の指定を有効にします. # Start the Linux binary compatibility if requested. if [ "X${linux_enable}" = X"YES" ]; then echo -n ' linux'; linux > /dev/null 2>&1 fi KLD がきちんとロードされたかどうかを確認するには, kldstat を使用します. &prompt.user; kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko 何らかの理由で Linux KLD をロードしたくない, あるいはロードできないような場合には, options LINUX をカーネルの設定ファイルに指定して, Linux バイナリ互換機能をカーネルにスタティックリンク してください. FreeBSDカーネルのコンフィグレーション の節の記述にしたがって config と, 新しいカーネルのインストールをおこ なってください. 2.2.2-RELEASE およびそれ以降の 2.2.x 系列への Linux モードのインストール options LINUXoptions COMPAT_LINUX を指定する必要はなくなりました. Linux バイナリ互換機能は LKM(“Loadable Kernel Module”) を使用しているため, インストールの際に再起動する必要はありません. ただし, スタートアップファイルで以下のように指定する必要があります. /etc/rc.conf に以下の行が必要です. linux_enable=YES これは結果的に, /etc/rc.i386 の以下の指定を有効にします. # Start the Linux binary emulation if requested. if [ "X${linux_enable}" = X"YES" ]; then echo -n ' linux'; linux > /dev/null 2>&1 fi 実行されたかどうかを確認するには, modstat を使用します. &prompt.user; modstat Type Id Off Loadaddr Size Info Rev Module Name EXEC 0 4 f09e6000 001c f09ec010 1 linux_mod 2.2-RELEASE とそれ以降のシステムの中には, modstat の実行がうまくいかない ものがあるという報告もあります. 何らかの理由で, Linux LKM がロードできな い場合は, options LINUX をカーネルの設定ファイルに指定して, Linux バイナリ互換機能をカーネルにスタティックリンク してください. FreeBSDカーネルのコンフィグレーション の節の記述にしたがって config と, 新しいカーネルのインストールをおこ なってください. 2.1-STABLE への Linux モードのインストール 2.1-STABLE の GENERIC カーネルは, Linux との互換性を保つように構築されていません. カーネルの再構築が必要です. 再構築をおこなうには, 2つの方 法があります. 1つは, バイナリ互換機能をカーネル自体にスタティックリンクする方法. もう1つは, 動的に Linux ローダブルカーネルモジュール(LKM)をロー ドするようにする方法です. Linux バイナリ互換機能を有効にするには, 以下をコンフィグレーションファイル (/sys/i386/conf/LINT など) に追加します. options COMPAT_LINUX Linux DOOM などのアプリケーションを実行したい場合は, 共有メモリも有効 にしておかなければなりません. 以下を追加します. options SYSVSHM Linux のシステムコールを使用するには, 4.3BSD と互換性のある システムコールを備えていることが必要です. 以下の行が含まれていることを確認してください. options "COMPAT_43" LKM(Loadable Kernel Module) を使用せず, バイナリ互換機能をカーネルに スタティックリンクしたい場合は, 以下の行を追加します. options LINUX FreeBSD カーネルのコンフィグレーション の節の記述に したがって config と, 新しいカーネルのインストールをおこなってください. LKM を使用する場合は, ローダブルモジュールをインストールしなければなりません. カーネルとローダブルモジュールのバージョンが異なると, カーネル がクラッシュする場合がありますので, 安全を期すためには, カーネルをインストールするたびに, LKM も再インストールしてください. &prompt.root; cd /usr/src/lkm/linux &prompt.root; make all install カーネルと LKM のインストールが終了したら, root で linux コマンドを 実行することで LKM をロードできます. &prompt.root; linux Linux emulator installed Module loaded as ID 0 &prompt.root; LKM がロードされたかどうかを確認するには, modstat を実行します. &prompt.user; modstat Type Id Off Loadaddr Size Info Rev Module Name EXEC 0 3 f0baf000 0018 f0bb4000 1 linux_emulator システムブート時に, LKM をロードするようにするには, 2つの方法がありま す. FreeBSD 2.2.1-RELEASE または 2.1-STABLE では, /etc/sysconfig を, linux=YES のように, NOYES に変更してください. FreeBSD 2.1-RELEASE およびそれ以前のバージョンでは, そのような行はありませんので, /etc/rc.local に以下 の行を追加する必要があります. linux Linux ランタイムライブラリのインストール linux_base port を使用してのインストール 多くの Linux アプリケーションはシェアードライブラリを使用しますので, シェアードライブラリのインストールが終了しなければ, エミュレータのインストールは終わったことになりません. 手動でもインストールできますが, linux_base port を使用するのが簡単です. &prompt.root; cd /usr/ports/emulators/linux_base &prompt.root; make all install これで, Linux バイナリ互換機能が動作するようになったはずです. 聞くところ(とメールのアーカイブ :-) によれば, Linux バイナリ互換機能は ZMAGIC ライブラリとリンクされている Linux バイナリに対して, 最もうまく動作するようです. Slackware V2.0 などに使われている QMAGIC ライブラリだと, Linux バイナリ互換機能が胸やけするかもしれません. マイナーバージョンの不一致などを 報告するプログラムもありますが, 普通は 問題にならないようです. 手動でのライブラリのインストール “ports” ディストリビューションが手元にない場合は, 手動でライブラ リをインストールする必要があります. プログラムが必要とする Linux のシェアードライブラリとランタイムリンカが必要です. また Linux ライブラリ の用の``shadow root'' ディレクトリ, /compat/linux, を作成する必要があ ります. FreeBSD で動作する Linux のプログラムが使用するシェアードライ ブラリは,まずこのファイルツリーから検索されます. 例えば, Linux のプログラムが /lib/libc.so をロードしようとした場合には, FreeBSD は, まず /compat/linux/lib/libc.so を開こうとします. 存在にしなかった場合には, 次に /lib/libc.so を試します. シェアードライブラリは, Linux の ld.so が参照するライブラリではなく, /compat/linux/lib 以下にインストールする 必要があります. FreeBSD 2.2-RELEASE 以降では, /compat/linux にかかわる動作が多少異なっており, ライブラリだけでなくすべてのファイルが, “shadow root” /compat/linux から検索されるようになっています. Linux のプログラムが必要とする シェアードライブラリを探す必要があるのは, FreeBSD のシステムに Linux のプログラムをインストールする最初の数回だけでしょう. それが過ぎれば, 十分な Linux のシェアードライブラリがシス テムにインストールされ, 新しくインストールした Linux のバイナリも, 余 計な作業をせずに動作させることができるようになります. シェアードライブラリの追加 linux_base port をインストールした後に, アプリケーションが必要なライブラリ が存在しないというエラーを出したらどうしたらよいでしょうか? Linux のバ イナリがどのシェアードライブラリを必要とし, そしてどこで入手できるか, どのように探したらよいでしょうか? 基本的には, 以下の2種類の方法があり ます(以下の手順にしたがう場合には, 必要なインストール作業をおこなう FreeBSD システム上で root として作業をおこなう必要があります). Linux システムを使用でき, 必要なシェアードライブラリが調べられる場 合には, 単に FreeBSD のシステムにそのライブラリをコピーするだけで す. 例えば, DOOM の Linux バイナリを ftp で持ってきたとします. 使用で きる Linux システムの上に転送して, ldd linuxxdoom とやれば, 必要とす るシェアードライブラリがチェックできます. &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/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 シェアードライブラリを既にインストールしている場合は, 新たにコピーする 必要はありません. 既にあるライブラリで動作するはずです. ただ, 新しいバー ジョンのシェアードライブラリがある場合は, 新しいものをコピーすることを お奨めします. 新しいライブラリにシンボリックリンクを変更したら, 古いラ イブラリは削除してかまいません. /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つ古いだけならば, 普通は /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 のランタイムリンカは, メジャーリビジョ ン番号の一致したライブラリを検索しますから, ユーザが気にする必要はありません. <filename>ld.so</filename> の設定 — FreeBSD 2.2-RELEASE およびそれ以降 このセクションは, FreeBSD 2.2-CURRENT 以降にのみ当てはまります. 2.1-STABLE を使用している方は, 飛ばしてください. 最後に, FreeBSD 2.2-RELEASE を使われている場合は, Linux のランタイムリンカと その設定ファイルがシステムに導入されていることを 確認してください. これらのファイルは, FreeBSD システムの適切な位置(/compat/linux ツリー以 下)にコピーされている必要があります. /compat/linux/lib/ld.so /compat/linux/etc/ld.so.config 使用できる Linux システムがない場合は, 必要なファイルは近くの FTP サイ トから入手してください. 各種ファイルの入手先についての情報を, 後に付 けておきます. ここでは, 必要なファイルの入手先がわかっているものとしま す. 以下のファイルを取得します (バージョンの不一致を避けるために, すべて同一 の FTP サイトから入手してください). 取得したファイルを /compat/linux 以下にインストールしてください(例えば, /foo/bar は, /compat/linux/foo/bar にインストールされます). /sbin/ldconfig /usr/bin/ldd /lib/libc.so.x.y.z /lib/ld.so ldconfigldd は, /compat/linux の下にある必要はありません. システム のどこにあっても構いません. ただ, FreeBSD の同名のコマンドと間違えないように 注意してください. /usr/local/bin の中に, ldconfig-linux, ldd-linux とし てインストールするのもよいアイディアでしょう. /compat/linux/etc/ld.so.conf ファイルを作成し, Linux ラインタイムリンカが シェアードライブラリを検索するディレクトリを記述してください. このファイルはプレインテキストファイルで, それぞれの行にディレクトリ名を含みます. /lib/usr/lib は標準ですから, 以下のようなディレクトリが追加できま す. /usr/X11/lib /usr/local/lib Linux バイナリが, /lib/libc.so というライブラリを開いた場合, Linux ABI サポートは内部で, ファイル名を /compat/linux/lib/libc.so にマップします. Linux ABI ローダがライブラリを検索できるよう, すべての Linux のライブラリ (/compat/linux/lib/libc.so, /compat/linux/usr/X11/lib/libX11.so など) は, /compat/linux 以下にインストールされていなければなりません. FreeBSD 2.2-RELEASE を使用している場合は, Linux の ldconfig プログラム を実行する必要があります. &prompt.root; cd /compat/linux/lib &prompt.root; /compat/linux/sbin/ldconfig ldconfig はスタティックリンクされていますから, 実行するのにシェアードラ イブラリを必要としません. ldconfig は, /compat/linux/etc/ld.so.cache ファイルを作成し, すべてのシェアードライブラリの名前を格納します. ライ ブラリの追加をおこなった場合には, ldconfig を再実行して, このファイルを作り 直さなければなりません. 2.1-STABLE では, /compat/linux/etc/ld.so.cache をインストールしたり, ldconfig を実行したりしないでください. 2.1-STABLE では, システムコー ルの実装方法が異なるため, ldconfig は使用されません. これで, libc シェアードライブラリを必要とする Linux バイナリを実行する設 定が終了しました. lddldd 自身に実行してテストしてください. ldd-linux としてインストールしている場合は, 以下のような結果になるはず です. &prompt.root; ldd-linux `which ldd-linux` libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29 ここまで終了すれば, 新しい Linux のバイナリを インストールできます. 新しい Linux バイナリをインストールするときは, それがシェアードライブ ラリを必要とするかどうか確認してください. 必要とする場合は, /compat/linux 以下に インストールされているかどうか確認してください. こ れは, Linux の ldd を新しいプログラムに 対して実行し, 出力を確認するこ とによりおこなえます. ldd (&man.ldd.1; マニュアルページも参照してください)は, プ ログラムが必要とするシェアードライブラリのリストを, majorname (jumpversion) => fullname という形式で出力します. fullname のかわりに not found と出力される場合は, ライブラリの追加をす る必要があります. 必要なライブラリの名前は, majorname に libXXXX .so.N.mm という形式で示されています. Linux の FTP サイトで libXXXX.so.N.mm を探し, インストールしてください. XXXX(名前)とN (メジャー リビジョン番号)は一致している必要があります. マイナー番号 mm は, それほ ど重要ではありませんが, なるべく最新のものをインストールするようにして ください. Linux の ELF バイナリをインストールする ELF のバイナリを使うためには, “マークをつける(branding)”作業が必要になります. マークのない ELF バイナリを実行しようとすると, 以下のようなエラーメッセージを うけとってしまうことでしょう. &prompt.user; ./my-linux-elf-binary ELF binary type not known Abort カーネルが FreeBSD の ELF バイナリと Linux のバイナリとを 見分けられるようにするためには, &man.brandelf.1; を以下のようにして使ってください: &prompt.user; brandelf -t Linux my-linux-elf-binary 今ではGNU のツールたちが, ELFバイナリに自動的に適切なマークを付加するようになったので, 今後はこの作業もだんだんと必要なくなってゆくでしょう. ホストネームリゾルバの設定 DNS がうまく動作しなかったり, 以下のようなエラーメッセージが表示され る場合は, /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を検索するように指定 します. /compat/linux/etc/host.conf がインストールされていない場合は, Linux のアプリケーションは, FreeBSD の /etc/host.conf を使用しようとして, 文法の違いによる警告を表示します. /etc/resolv.conf を使用してネームサー バを設定していない場合には, bind を削除してください. 最後になりますが, 2.1-STABLE を使用している場合は, RESOLV_HOST_CONF 環境変数を指定して, アプリケーションにホストテーブル の検索方法を指定する必要があります. FreeBSD 2.2-RELEASE かそれ以降を使用している場合 は, スキップしてください. /bin/csh を使っている場合は, 以下のようにし ます. &prompt.user; setenv RESOLV_HOST_CONF /compat/linux/etc/host.conf /bin/shの場合は, 以下のようにします. &prompt.user; RESOLV_HOST_CONF=/compat/linux/etc/host.conf; export RESOLV_HOST_CONF 必要なファイルを探すには 以下の情報は, この文書が書かれた時点では有効ですが, FTP サイトの 名前, ディレクトリ, 配布ファイル名などは, 変更されている可能性がありま す. 訳注: ここに取り上げられている FTP サイトは, 日本国内にもミラーサイト が多数存在します. なるべく近くの FTP サイトからファイルを入手してくだ さい. Linux は, いくつかのグループが, それぞれ独自のバイナリ配布セットを作成 して配布しています. 配布セットは, “Slackware” や “Yggdrasil” など の名前がつけられています. これらの配布セットは, 多くの FTP サイトから 入手できます. ファイルが展開されており, 必要なファイルのみを取得できる 場合もありますが, 通常は圧縮された配布セットの形で入手できます. 配布 セットは, いくつかのサブディレクトリに, gzip で圧縮された tar ファイル として格納されています. それぞれの配布セットの一次配布先は, 以下の通り です. sunsite.unc.edu:/pub/Linux/distributions tsx-11.mit.edu:/pub/linux/distributions ヨーロッパのミラーサイトの例: ftp.luth.se:/pub/linux/distributions ftp.demon.co.uk:/pub/unix/linux src.doc.ic.ac.uk:/packages/linux/distributions 混乱を避けるために, ここでは Slackware だけを取り上げます. この配布セットは, 多くのサブディレクトリ内にある 別々のパッケージから構成されていま す. 通常, パッケージはインストールプログラムにより自動的に制御されま すが, “手動で”おこなうことも可能です. まず配布セットの中の, contents サブディレクトリの内容を書くにしてください. ここには多く の小さなテキストファイルが含まれおり, それぞれのパッケージの内容が記述されています. 必要なファイルを探している場合は, まず contents サブディレクトリ内のテキストファイルを取得し, そのファイルの中から grep を使用して検索するのが, 最も速い方法でしょう. 以下に必要となるであろうファイルを, grep を使用 して検索した例を示します. Library Package ld.soldso ldconfigldso lddldso libc.so.4shlibs libX11.so.6.0xf_lib libXt.so.6.0xf_lib libX11.so.3oldlibs libXt.so.3oldlibs この場合は, ldso, shlibs, xf_lib, oldlibs というパッケージが必要なこと がわかります. それぞれのcontentsファイルの中で, PACKAGE LOCATION と書いてある行を探してください. その行に, パッケージが含まれている“ディスク”, 今回の場合はサブディレクトリ名が書かれています. たとえば, 以下の ようになります. Package Location ldso diska2 shlibs diska2 oldlibs diskx6 xf_lib diskx9 “diskXX” というのは, 配布セットの slackware/XX サブディレクトリ を示します. それ以外の場合は, contrib サブディレクトリに格納されて います. 今回の場合は, 以下のファイルを取得すればいいことがわかります (ファイル名は, 配布セットのルートディレクトリからの相対パスで示してあ ります). slakware/a2/ldso.tgz slakware/a2/shlibs.tgz slakware/x6/oldlibs.tgz slakware/x9/xf_lib.tgz gzip で圧縮された tar ファイルから必要なファイルを /compat/linux ディ レクトリに格納してください(必要なファイルのみを展開するか, あるいは必要でないファイルを後で削除してください). これで作業は終了です. 参照: ftp://ftp.freebsd.org:pub/FreeBSD/2.0.5-RELEASE/xperimnt/linux-emu/README /usr/src/sys/i386/ibcs2/README.iBCS2 Mathematica 寄稿: &a.rich;, &a.chuck;. 改訂: Bojan Bistrovic bojanb@physics.odu.edu. 訳: &a.jp.kiroh;. この章では, Mathematica 2.2 の Linux バイナリ配布をインストールする方法について説明します. Mathematica は, そのままでは FreeBSD をサポートしていません. しかし, Linux は サポートしていますので, Linux エミュレータの設定が終わってしまえば, Mathematica を動作させる環境はほとんど整ったことになります. Mathematica のインストール Mathematica は CDROM で配布されています. 学生版(student edition)には, Mac, Windows95/NT, Linux 版があり, プロフェッショナル版(professional edition)には, それらに加えて Digital Unix, Solaris, IRIX, HPUX, AIX, NeXT 版があります. CDROM が /cdrom にマウントされている場合, インストーラは /cdrom/Unix/Installers に置かれています. 学生版にはすべての Unix 版のインストーラが含まれていますが, バイナリは Linux 用のものしか含まれていません. Linux 版インストーラのディレクトリは二つあります. それは Linux (ELF 版) と Linux-aout (a.out 版)です. どちらのインストーラでも動作します(実のところ, どの Unix 版インストーラでも動きます)が, インストールされるものが異なりますので, まずどの版をインストールするか決めなければなりません. a.out 版はそのままでも動きますが, ELF 版の場合は, すべてのバイナリにマーク付け(branding)をする必要があります(詳細は &man.brandelf.1; を参照して下さい). もちろん, ELF 版インストーラを起動する場合には, そのインストーラ自身にもマーク付けしなければなりませんので, マークを書き込むためにインストーラをハードディスクにコピーする必要があります. インストール手順は, どの版をインストールする場合でも同様です. この文書では, a.out 版のインストール例を示します. インストールを開始するには, 次のように実行して下さい. &prompt.root; cd /cdrom/Unix/Installers/Linux-aout &prompt.root; ./MathInstaller Mathematica 3.0 ソースツリー(デフォルトは /usr/local/mathematica)と, スタートアップスクリプト(デフォルトは /usr/local/bin)のインストール先を選択します. このとき, パスワードのインストールを求められるかも知れません. そこでパスワードのインストールを選択した場合, MathInstaller はあなたの MathID を表示し, Mathematica の実行に必要なパスワードとライセンス ID を求めます. これらは Mathematica の最初の起動時にも再度聞かれますので, この段階でのパスワードのインストールは省略可能です. Mathematica が求める質問には, すべてヘルプメッセージがあります. パスワードの入手には MathID が必要になりますが, もし書き留めていなければ次のようにして表示させることができます. &prompt.root; ./MathInstaller -info あるいは次のようにします. &prompt.root; cd /cdrom/Unix/Files/SystemFiles/Installation/Binaries/Linux-aout &prompt.root; ./mathinfo 出力は, ホスト名 ####-#####-##### のようになります. ####-#####-##### の部分が, あなたの MathID です. これを用いて, http://www.wolfram.com/register (サイトライセンスの場合は http:/www.wolfram.com/site) からライセンスを取得することができます. また, CDROM ケースにあるシールに書かれている $LicenceID も必要です. これは, L####-#### のようになっています. # は 0 から 9 までの数字です. サイトライセンスを持っている場合は, ライセンスの種類として Unix ではなく, Single User (Mac/Windows)(表示はおかしいですが)を選択する必要があります. パスワードは電子メールで送られてきます. もし, すでに Mathematica をライセンスなしでインストールしているなら, 次のようにタイプすることでここで取得したライセンスをインストールできます. &prompt.root; ./MathInstaller -pass Wolfram Research からのメールは, (ヘッダを削除してから) /usr/local/mathematica/Configuration/Licensing/mathpass にコピーしておいてください. そうしていない場合には, Mathematica を起動(端末からは math コマンド, X のフロントエンドは mathematica コマンド)した時にパスワードが求められ, 入力されたパスワードはパスワードファイルに記録されます. Linux ファイルシステムからの Mathematica の起動 If you have multi-OS box, and you already installed Mathematica under Linux, you may want to run it directly from that partition. Here we assume that you already compiled your kernel with EXT2FS option and mounted your Linux partition at /linux. あなたのマシンに異なる複数の OS が入っていて, Linux 上ですでに Mathematica がインストールされているような場合には, そのインストールされたパーティションから直接起動したいと考えるかも知れません. 以下では, オプション EXT2FS が設定された カーネルを構築済みで, Linux パーティションが /linux であるとします. まず最初に, スタートアップスクリプトをコピーします. &prompt.root; cp /linux/usr/local/bin/math* /usr/local/bin 次に, math, mathematica, Mathematica および MathKernel というスクリプトファイルを編集します. 行に topdir=/usr/local/mathematica が含まれていたら, topdir=/linux/usr/local/mathematica のように置き換えて下さい. ネットワーク経由での Mathematica フロントエンドの起動 Mathematica は標準フォントにない特別な記号(積分記号, 総和記号, ギリシャ文字など)を表示するために, 特殊なフォントを使用します. X プロトコルは, これらのフォントがローカルマシンにインストールされていることを要求します. これはつまり, ローカルマシンに(CD や Mathematica のインストールされているホストマシンから)そのフォントをコピーしなければならないということです. これらのフォントは通常, ハードディスクの /usr/local/mathematica/SystemFiles/Fonts か, CDROM の /cdrom/Unix/Files/SystemFiles/Fonts に置かれていて, 実際に使用されるフォントは Type1X のサブディレクトリに格納されています. これを利用するには, 次のような二つ方法があります. 一つは, フォントファイルをすべて /usr/X11R6/lib/X11/fonts/ 以下にある既存のフォントディレクトリにコピーする方法です. この場合, fonts.dir にフォント名を追加し, 先頭行のフォント総数を変更することも必要になります. もう一つの方法は, 次のように /usr/X11R6/lib/X11/fonts/ にフォントディレクトリごとコピーする方法です(おそらくこちらの方が望ましいでしょう). &prompt.root; cd /usr/X11R6/lib/X11/fonts/ &prompt.root; mkdir X &prompt.root; mkdir MathType1 &prompt.root; cd /usr/local/mathematica/SystemFiles/Fonts/ &prompt.root; cp X/* /usr/X11R6/lib/X11/fonts/X &prompt.root; cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1 そして, フォントパスを追加します. &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 を変更することで, これらのフォントを自動的に読み込むことができます. /usr/X11R6/lib/X11/fonts/Type1 という ディレクトリが存在していない場合には, 上記例の MathType1Type1 とすることができます(これに限らず, どんな名前でもかまいません). こうすることで, ネットワーク経由で Mathematica フロントエンドを利用することが可能になります. これはあらゆる種類の X サーバに適用できる一般的な方法です. もし, (大部分の FreeBSD/Linux ユーザのように) XFree86 を利用しているなら, 単に次の行を追加した方が簡単でしょう. FontPath "/usr/X11R6/lib/X11/fonts/MathType1" Linux モードはどのような原理で動作しているのですか? このセクションは, ほとんどが freebsd-chat@FreeBSD.org メーリングリストに投稿された Terry Lamberttlambert@primenet.com 氏のメール(Message ID: <199906020108.SAA07001@usr09.primenet.com>) に基づいています. FreeBSD は, “実行クラスローダ(execution class loader)” と呼ばれる抽象的な機構を持っています. これは &man.execve.2 システムコールに追加される形で実装されています. FreeBSD は, シェルインタプリタやシェルスクリプトを実行するための #! ローダを持った単一のプログラムローダではなく, プログラムローダのリストを備えています. 歴史的に言って, UNIX プラットフォームでマジックナンバ(一般的にファイル先頭の 4 ないし 8 バイト部分)の検査を行なうのはプログラムローダだけです. プログラムローダは, それがシステムで実行できるバイナリなのか確認して, それが確認できればバイナリローダを呼び出します. もし, それがそのシステム用のバイナリでない場合には, &man.execve.2; システムコールの呼び出しは失敗の戻り値を返し, シェルがシェルコマンドとして実行しようと試みるわけです. この仮定は, “現在利用しているシェルがどのようなものであっても”変わりません. 後になって, &man.sh.1; に変更が加えられました. それは先頭の 2 バイトを検査し, :\n だったら シェルとして代わりに &man.csh.1; を呼び出す, というものです(この変更は SCO が最初に行なったと思われます). 現在の FreeBSD は, プログラムローダリストを走査します. その際, 空白文字までの文字列をインタプリタとして認識する, 通常の #! ローダを用いるため, 該当するものが存在しなければ最終的に /bin/sh がロードされます. Linux ABI をサポートするため, FreeBSD は ELF バイナリを示すマジックナンバを確認します. (ただし, この段階で FreeBSD, Solaris, Linux, そしてその他にも存在する ELF イメージ形式を使っている OS を区別することはできません). ELF ローダは, 特殊なマーク(brand)があるかどうか探します. このマークとは, ELF イメージのコメントセクションのことです. SVR4/Solaris の ELF バイナリには, このセクションは存在しません. Linux バイナリを実行するためには, ELF バイナリに &man.brandelf.1; で説明されている Linux のマークが 付けられていなければなりません. &prompt.root; brandelf -t Linux file 上のようにすることで, 指定されたファイルは Linux のマークが付けられ, ELF ローダが認識できるようになります. ELF ローダが Linux マークを確認すると, ローダは proc 構造体内の ある一つのポインタを置き換えます. システムコールは全て, この置き換えられたポインタ(伝統的な UNIX システムでは, システムコールが sysent[] 構造体の配列として実装されています)を基準に呼び出されます. またそのプロセスには, Linux カーネルモジュールに必要な シグナルトランポリンコード(訳注: シグナルの伝播を実現するコード)用の特殊なトラップベクタの設定や, 他の(細かな)調整のための設定が行なわれます. Linux システムコールベクタは, さまざまなデータに加えて カーネルモジュール内のアドレスを指す sysent[] エントリのリストを含んでいます. Linux バイナリがシステムコールを発行する際, トラップコードは proc 構造体を用いてシステムコール関数ポインタを 解釈します. そして, FreeBSD ではなく Linux 用の システムコールエントリポイントを得るわけです. さらに Linux モードは, 状況に応じて ファイルシステム本来のルートマウントポイントを置き換えて ファイルの参照を行ないます. これは, union オプションを指定して マウントされたファイルシステム(unionfs ではありません!)が 行なっていることと同じです. ファイルを検索する際にはまず /compat/linux/original-path ディレクトリを, それから見つけられなかったときにのみ, /original-path を調べます. こうすることで, 他のバイナリを要求するバイナリの実行を可能にしています (したがって, Linux 用プログラムツールは Linux ABI サポート環境下で完全に動作するわけです). またこれは, もし対応する Linux バイナリが存在しない場合に Linux バイナリが FreeBSD バイナリをロードしたり, 実行したりすることが可能であること, その Linux バイナリに自分自身が Linux 上で実行されていないことを 気付かせないようにする目的で, &man.uname.1; コマンドを /compat/linux ディレクトリに 置くことができる, ということを意味します. 要するに, Linux カーネルが FreeBSD カーネルの内部に存在しているわけです. カーネルによって提供されるサービス全ての実装の基礎となるさまざまな関数は, FreeBSD システムコールテーブルエントリと Linux システムコールテーブルエントリの 両方で共通に利用されています. これらにはファイルシステム処理, 仮想メモリ処理, シグナル伝送, System V IPC などが含まれますが, FreeBSD バイナリは, FreeBSD グルー(訳注: glue; 二者の間を仲介するという意味)関数群, そして Linux バイナリは Linux グルー関数群を用いる, という点だけが異なります(過去に存在したほとんどの OS は, 自分自身のためのグルー関数群しか備えていません. 前述したように, システムコールを発行する際, 各々のプロセスの proc 構造体内にある, ローダによって動的に初期化されるポインタを参照してアドレスを得る代わりに, 静的でグローバルな sysent[] 構造体の配列に システムコール関数のアドレスが直接格納されているのです). さて, どちらを本来の FreeBSD ABI(訳注: Applications Binary Interface; 同じ CPU を利用したコンピュータ間でバイナリを共有するための規約のこと) と呼ぶべきなのでしょうか? 実は, どちらが本来のものであるかということを論ずることに意味はありません. 基本的に, FreeBSD グルー関数群はカーネルの中に静的にリンクされていて, Linux グルー関数群は静的にリンクすることも, カーネルモジュールを介して利用することもできるようになっている, という違いがあるだけ(ただしこれは現時点においての話です. これは将来のリリースで変更される可能性がありますし, おそらく実際に変更されるでしょう)です. あ, 「でもこれは本当にエミュレーションと呼べるのか」って? 答えは「いいえ」です. これは一つの ABI 実装にすぎず, エミュレーションとは異なります. エミュレータ(シミュレータでもないことを あらかじめ断っておきましょう)が呼び出されているわけではありません. では, これが良く “Linux エミュレーション” と呼ばれるのは何故でしょうか? それはもちろん FreeBSD の売りにするため 8-) でもあるのですが, 実際には, 次のような理由によります. この機能が初めて実装された頃, 動作原理を説明する以外に この機能を表現する言葉はありませんでした. しかし, コードをコンパイルしたりモジュールをロードしない場合, 「FreeBSD 上で Linux バイナリを実行する」言う表現は, 厳密に考えると適切ではありません. そこで, その際にロードされているもの自身を表現する言葉—すなわち “Linux エミュレータ”が必要だったのです. diff --git a/ja_JP.eucJP/books/handbook/policies/chapter.sgml b/ja_JP.eucJP/books/handbook/policies/chapter.sgml index 0ede93bc81..99861d9fac 100644 --- a/ja_JP.eucJP/books/handbook/policies/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/policies/chapter.sgml @@ -1,480 +1,479 @@ ソースツリーのガイドラインおよび方針 - 原作: &a.phk;. + 原作: &a.phk;. - 訳者: &a.jp.mihoko; - 6 September 1996 . + 訳者: &a.jp.mihoko;, 1996 年 9 月 6 日. 本章は, FreeBSD のソースツリーについてのさまざまなガイドラインや ポリシーについて書かれています. Makefile 中の <makevar>MAINTAINER</makevar> 1996年6月. FreeBSD 配布物の特定の部分が, 一人の人やグループによって保守 されている場合は, ソースツリーの当該 Makefile MAINTAINER= email-addresses が付け加えられています. これを記述することによって, この部分が誰 に保守管理されているかを世界中のユーザに 伝えることができます. この意味は次のとおりです: 保守担当者がそのコードを所有し, そのコードに対する責任を持っ ています. すなわち, その人がそのコードに関するバグの修正やトラブル報告 に対する回答をします. また, そのコードが寄贈ソフトウェアの場合には, そのソフトウェアの 新しいバージョンに適切に追従させる作業をその人が行い ます. 保守担当者が決められているディレクトリに対して 変更をおこなう場合は, 変更をおこなう前に, その変更内容を保守担当者に送って, 保守担当者にレビューをしてもらってください. 保守担当者が, 電子メールに一定期間応答しない場合にのみ, 保守担当者がレビューすることなしに, 変更をおこなうことが認められます. しかしながら, そのような場合でも可能な限り, 変更点を第三者にレビュー してもらうようにしてください. もちろん, この義務を引き受けることができない人やグループを 保守管理者として追加することはできません. また, 保守管理者がソースツリー管理者 ("committer") である必要は ありません. 寄贈ソフトウェア 原作: &a.phk; and &a.obrien;. 訳者: &a.jp.mihoko; 1996年6月. FreeBSD 配布物のうちのいくつかのソフトウェアは FreeBSD プロジェクト 以外のところで保守されています. 歴史的な経緯から, 私たちはこれを 寄贈 ソフトウェアと 呼んでいます. perl や gcc, patch などがその例です. ここ数年来, この種のソフトウェアの取り扱いには, さまざまな方法が 取られてきましたが, どの方法にもいくつかの利点と欠点があります. これまで欠点のない明確な方法はありませんでした. 議論した結果, これらの方法のうちの一つが 公式な方法として選択され ました. その方法が, 今後, この種のソフトウェアを取り込む場合に, 使用 されます. その上, この方法では, だれもが(cvs にアクセス権のない人でさえ)公式 バージョンのソースに対する差分を簡単に得ることができます. これは古い方法にはなかった大きな利点です. ですから, 既存の寄贈ソフトウェアも, この方法に収束していくことを強く望んでいます. この方法を使用することにより, 寄贈ソフトウェアの主な開発者に, 変更 点を返すのがとても容易になります. しかしながら結局, 寄贈ソフトウェアの取扱は, 実際に作業を行って いる人々に委ねられています. もしこの方法を使用することが, その人が扱っているパッケージには 極端に合わないような場合には, コアチームの承認さえあれば, これらの ルールに反しても, 他の開発者の一般的な合意は得られるでしょう. 将来にわたってパッケージを保守できるということは, 大変重要な事柄に なってきます. RCS のファイルフォーマットと CVS のベンダブランチの使用には不幸な設計上の制限があります. したがって, ベンダブランチの内容をいまだに引きずっているファイルに 対して小さな, 些細な変更, そして / あるいは 膨大な変更を加えることには, 強い反対があります. 誤字訂正はもちろんこの中に入りますし, しかも膨大なの範疇に入るので, リビジョンが 1.1.x.x であるファイルに対する誤字訂正は避けられることになっています. 一文字の変更したことによるリポジトリの肥大は, 非常に劇的なものになり得るのです. プログラミング言語 TCL は, この方法が活用されているよい例になっています: src/contrib/tcl には, このパッケージの保守管理者が 配布したソースが含まれています. この中からは FreeBSD に完全には適用 できない部分が削除されています. Tcl の場合は, mac, win, compat というサブディレクトリは, FreeBSD に取り込む前に削除されて いました. src/lib/libtcl には, ライブラリを生成したり, ドキュ メントをインストールする際に使用される, 標準の bsd.lib.mk の 規則を使用した「bmake スタイル」の Makefile だけが 含まれています. src/usr.bin/tclsh には, bsd.prog.mk 規則 を使用して, tclsh プログラムや関連するマニュアルページを生成 /インストール する bmake スタイルの Makefile だけが含まれています. src/tools/tools/tcl_bmake には, tcl ソフトウェアを更新する必要が生じたときの助けになる2つのシェルス クリプトが含まれています. これらは, ソフトウェアを構築するのに使用し たり, インストール対象になるソフトウェアではありません. ここ重要なのは, src/contrib/tcl ディレクトリが, 規則にしたがっ て作られているということです. つまり, できるだけ FreeBSD に特化した 変更をおこなわないようにしたソースを(RCS のキーワードを拡張しないで, CVS のベンダブランチに)おくようにし ています. freefall 上の「簡易取り込み」ツールは, 寄贈ソフトウェアを取り込む 手助けとなります. けれども, このツールの実行方法に疑問が生じた場合は, まずはじめに質問して, 失敗をしないようにしてください. そして, その疑問を解決してからツールを使用してください. CVS に寄贈ソフトウェアを取り込む際には, 事故があってはいけません. よくあるような間違いをおかさないように, 十分注意してください. 先ほど述べたように, 残念なことに CVS にはベンダブランチという設計制限があります. このため, CVS に寄贈ソフトウェアを取り込むには, オリジナル配布ソースに 適用されるベンダからの公式パッチと, ベンダブランチに逆輸入された 結果が必要です. ベンダブランチの一貫性を破壊したり, 将来, 新しいバージョンを取り込む 時に衝突を起こしてしまったりというような 困難な事態に陥らないように しなければなりません. そのために, FreeBSD が管理しているバージョンに 対して, 公式パッチを決して当ててはいけませんし, 公式パッチを "commit" してはいけません. 多くのパッケージが, 他のアーキテクチャや他の環境と FreeBSD との互換性を保ためのファイルをいくつか含んでいます. そこで, スペースを節約するために, FreeBSD にとっては無意味な配布ツリー上の一 部を削除することが許されています. けれども, 削除されずに残ったファイルに対する, 著作権の通知やリリース ノートのような情報を含んだファイルは, 決して削除しては いけませ ん . bmake Makefile が何らかのユーティリティによって, 配布ツリー から自動的に生成できると, うまくいけば, 新しいバージョンへの アップグレードをより簡単におこなうことができます. もしこのようなユーティリティを作成できた場合には, 将来の管理者に とって便利になるように, 移植の際に, src/tools ディレクトリ上に, (必要に応じて) そのユーティリティを必ずチェックインしてください. src/contrib/tcl レベルのディレクトリには, FREEBSD-upgrade と 呼ばれるファイルが追加されており, そのファイルでは 次のような内容が 記述されています. ディレクトリ上に存在するファイル オリジナルの配布物をどこから入手すればよいか また, 公式配布 サイトはどこか オリジナルの作者にパッチを送り返すためには, どこに送ればよいか FreeBSD に特化した変更点の概要 しかしながら, 寄贈ソースと一緒に FREEBSD-upgrade ファイルを 取り込まないでください. それよりむしろ, (訳注:このファイルを)初回に取り込んだ後は, コマンド cvs add FREEBSD-upgrade ; cvs ci を実行してください. src/contrib/cpio を例にすると, 次のようになります: このディレクトリは「ベンダ」ブランチ上のオリジナル配布ファイル の初期ソースが含まれています. いかなる事情があっても, パッチや cvs コミットによってこのディレクトリ上のファイルを アップグレードしてはいけません. (訳注:ベンダから配布された)新しいバージョンや公式パッチだけが (訳注:このディレクトリに)取り込まれなくてはいけません. ベンダの RCS Id が CVS に入ってしまうのを避けるために, "-ko" オプ ションをつけてインポートすることを忘れないで下さい. GNU cpio 2.4.2 を取り込むためには, 以下のファイルが削除されました: INSTALL cpio.info mkdir.c Makefile.in cpio.texi mkinstalldirs cpio を新しいバージョンにアップデートするためには, 次の作業を おこないます: 1. 空のディレクトリに新しいバージョンを取り出します. [ファイルに「いかなる変更」も加えてはいけません] 2. 上記にリストされたファイルと, FreeBSD には無意味な ファイルを削除します. 3. 次のコマンドを実行します: cvs import -ko -m 'Virgin import of GNU cpio v<version>' \ src/contrib/cpio GNU v<version> 例えば, バージョン 2.4.2 を取り込むためには, 次のように タイプします: cvs import -ko -m 'Virgin import of GNU v2.4.2' \ src/contrib/cpio GNU v2.4.2 4. FreeBSD に対するローカルな変更と, 新しいバージョンとの間での 矛盾を解消するために, ステップ 3 で出力された命令を実行します. いかなる事情があっても, この手順から外れてはいけません. cpio にローカルな変更を加えたい場合には, メインブランチ(別名 HEAD)に対して パッチを実行し, コミットしてください. 決して GNU のブランチにローカルな変更を加えないでください. ローカルにおこなわれたすべての変更を次のリリースに含めるために, "cpio@gnu.ai.mit.edu" に提出してください. obrien@FreeBSD.org - 30 March 1997 ソース管理上注意が必要なファイル (Encumbered files) 場合によっては FreeBSD のソースツリーの中にソース管理上 注意が必要なファイルを含む必要があるかも知れません. 例えば, デバイス を操作する前に, そのデバイスに小さなバイナリコードをダウンロード する必要があり, しかも我々が そのソースコードを持っていない場合, そのバイナリファイルのことをソース管理上注意が必要である(encumbered) と言います. 以下に挙げるガイドラインでは, ソース管理上注意が必要なファイルを FreeBSD ソースツリーにいれる方法を示します. システムのCPU(s)によってインタプリタされたり 実行されたりするファイルで, しかもソース形式でないファイルは すべて, ソース管理上注意が必要なファイルです. BSD または GNU よりも制限されたライセンスを持つファイルは すべて ソース管理上注意が必要なファイルです. ハードウェアによって使用されるダウンロード可能な バイナリコードを含むファイルは, (1) または (2) の条件が 当てはまらなければ, ソース管理上注意が必要なファイル ではありません. そのようなファイルはアーキテクチュアに依存しない ASCII 形式(file2c または uuencode が推奨されます)で保存 します. ソース管理上注意が必要なファイルはすべて, CVS リポジトリ に加える前に, Core team からの特別な承認 が必要です. ソース管理上注意が必要なファイルは src/contrib または src/sys/contrib に入ります. すべてのモジュールは一緒に置きます. ソース管理上とくに注意 を必要としないコードとコードを共有していない限りは, モジュールの置場を分ける必要はありません. オブジェクトファイルは arch/filename.o.uu> と命名されます. カーネルファイル; 必ず conf/files.* (構築を簡単にするため ) に記述するようにして下さい. 必ず LINT に記述して下さい, ただし, それをコメントアウトすべきかどうかは Core team がその都度 判断します. もちろん Core team は あとでそれを変更することもできます. リリースエンジニア は, それをそのリリースにいれるかどうかを決定します. ユーザ領域のファイル; Core team は, そ のコードが make world の中で構築される べきかどうかを決定します. リリースエンジニア は, それをそのリリースにいれるかどうかを決定します. 共有ライブラリ Contributed by &a.asami;, &a.peter;, and &a.obrien;. 9 December 1996. もしあなたが共有ライブラリをサポートする機能を port に追加した り, 共有ライブラリをサポートしていない他のソフトウェアに追加する 場合には, 共有ライブラリのバージョン番号を次の規則にしたがって つけてください. 一般的には, この規則は, ソフトウェアのリリースバージョンとは 全く関係ありません. 共有ライブラリを作成する三つの重要な規則は 次の通りです: 1.0 から始める 過去のバージョンに互換性のある変更の場合は, マイナー番号を増やす(ELF システムでは マイナー番号が無視されることに注意して下さい) 互換性のない変更の場合は, メジャー番号を増やす 例えば, 機能追加とバグ吸収の場合は, マイナー番号を増やします. 機能削除, 関数呼び出しのシンタックスなどが変更された場合は, 強制的にメジャー番号を変更します. メジャー.マイナーー (x,y) の形式のバージョン番号を使用します. FreeBSD における a.out 形式のダイナミックリンカは, x.y.z という形式のバージョン番号 は扱えません. この場合, y の後のバージョン番号 (つまり三つ目の数字)は, どのライブラリがリンクされているかを決めるために, 共有ライブラ リ番号を比較する際に, すべて無視されます. 小さなリビジョンだけが 異なる二つの共有ライブラリが指定 されると, ld.so は, リビジョンの大きい方の共有ライブラリを リンクします. すなわち, もしあなたが libfoo.so.3.3.3 をリンク していたとすると, リンカは頭の 3.3 という部分だけを認識し, libfoo.so.3 ではじまり その後に 3 以上の数字が続くもののうち, 最も大きい番号 の付いているライブラリをリンクします. ld.so はいつも最も大きい マイナー リビジョンのものを使うことに 注意してください. 例えば, プログラムがはじめ libc.so.2.0 を リンクしていたとしても, libc.so.2.0 よりも libc.so.2.2 を優先して使用します. さらに, ELF ダイナミックリンカはマイナーバージョンを全く扱いません. しかし, 作成した Makefile がそのようなシステムでも 「きちんと動作できる」ように, メジャー番号およびマイナー番号を 指定する必要があります. 移植されていないライブラリに対しては, 共有ライブラリのバージョン番号はリリースごとに一度だけ変更し, また, 主要な共有ライブラリのバージョン番号は, OS の主リリースごとに 一度だけ変更する, というのが私たちのポリシーです. つまり, X.0 は (X+1).0 になります. あなたがシステムライブラリのバージョン番号を上げた場合は, Makefile の commit ログを確認してください. 結果としてそのリリースには, 共有ライブラリのバージョン番号が アップデートされた Makefile に入るので, 最初にその変更を 確かめるのがソースツリー管理者 ("committer") の責務です. その後のどんな変更も, そのリリースには入りません. diff --git a/ja_JP.eucJP/books/handbook/ports/chapter.sgml b/ja_JP.eucJP/books/handbook/ports/chapter.sgml index 54c0c5ce6b..f74fca9e7d 100644 --- a/ja_JP.eucJP/books/handbook/ports/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/ports/chapter.sgml @@ -1,1103 +1,1103 @@ アプリケーションのインストール: Ports Collection 改訂: &a.jim;, 1999 年 11 月 22 日. 原作: さまざまな人々 - 概要 + この章では FreeBSD Ports Collection を利用することで, 非常に幅広いアプリケーションのコンパイルとインストールを 最小限の労力で行なうことができます. それは普通スケルトンと呼ばれる, アプリケーションを FreeBSD 上でコンパイルしインストールするために必要となる最小限のファイルのセットで構成されてます. やってみたことのある方はよくご存知でしょうが, オープンな規格とは全くの誇大広告であって, あるプログラムを異なるバージョンの Unix 上で動作させることは退屈で手間のかかる仕事です. 求めているプログラムが自分のシステムでうまくコンパイルでき, 正しいところにインストールできて完璧に動作するとしたらとてもラッキーなのですが, あいにくこれは滅多にないことなのです. ほとんどのプログラムについてあなたは髪を掻きむしることになるでしょうし, かなりのプログラムでは, 白髪混じりの頭になってしまったり, あるいは慢性の脱毛症にすらなってしまうかもしれません... Ports Collection の基本的なアイディアは, 適切に動作させるために必要な複雑な手順のすべてを取り除き, インストールを簡単で楽な作業にすることにあります. Ports Collection を利用すれば, 大変な作業は必要ありません. Ports Collection に含まれる ports は, 単に make install と入力するだけでインストールできるのです. Ports Collection の利用 このセクションでは, Ports Collection を利用してシステムにプログラムをインストールしたり, システムから削除したりする基本的な手順について説明します. ports のインストール 一番最初に知らなければならないのは, Ports Collection は スケルトン と呼ばれるもので構成されているという事実です. port スケルトンは簡単に言うと, アプリケーションを FreeBSD 上でコンパイルしインストールするために必要となる最小限のファイルのセットのことです. それぞれの port スケルトンには, 次のファイルが含まれています. Makefile. Makefile にはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する, さまざまな命令文が含まれています. files ディレクトリ. files ディレクトリには, md5 というファイルが置かれています. このファイルは, ports チェックサムに使われる MD5 アルゴリズムの名前をとって名付けられています. チェックサムとは, チェックしたいファイルに含まれるすべてのデータを加算した数値です. ファイル中の文字が一つでも変更されると チェックサムは変更前と異なるものとなり, エラーメッセージが表示されます. そのため, ファイルに変更が加えられているかどうか調べることが可能です. files ディレクトリには, port に必要で, 他のディレクトリには入れられないファイルが含まれることもあります. patches ディレクトリ. このディレクトリには FreeBSD システム上でプログラムをコンパイルし, インストールするためのパッチが含まれています. パッチ(patch)とは基本的に, 個々のファイルに対する変更点を表した小さなファイル群のことです. ファイルはプレインテキスト形式で, 10 行目を削除26 行目を ... に変更 などと書かれています. パッチは, diff(差分) とも呼ばれます. これは, パッチが diff プログラムで作成されるからです. pkg ディレクトリ. 普通, このディレクトリには三つのファイルが含まれています. port によっては必要に応じて三つ以上になる場合もありますが, ほとんどの場合その三つしか必要ありません. そのファイルとは, 以下の三つです. COMMENT. これにはプログラムの一行説明文が含まれています. DESCR. これにはプログラムの, 複数行にわたる詳しい説明文が含まれます. PLIST. これは, その port によってインストールされる全ファイルのリストです. これにはプログラムを削除する際に, どのファイルを削除すれば良いのかを ports システムに伝える役割もあります. さて, Ports Collection が何を目的として使われるものなのか, それ理解するための基礎的な知識はこれで十分です. 最初の port をインストールする準備ができました. port のインストールには二つの方法があります. 実際の作業に入る前に, インストールする port を選ぶ必要があります. 選ぶ方法はいくつかありますが, 最も簡単なのは FreeBSD ウェブサイトの ports リストを利用することでしょう. そこにリストされている ports や, サイトの検索機能を使って閲覧することができます. 各々の port には説明文が含まれていますので, インストールを決める前にその port に関する説明を読むこともできます. もう一つの方法は, whereis コマンドを使うことです. whereis コマンドを使うには, プロンプトから単に whereis <インストールしたいプログラム名> と入力します. もし, あなたのシステム上でプログラムが見つかれば, それがどこにあるのかが次のように表示されます. &prompt.root; whereis xchat xchat: /usr/ports/irc/xchat &prompt.root; この表示は, xchat (irc クライアントの一つ) が /usr/ports/irc/xchat というディレクトリに見つかったことを示しています. また, Ports Collection の持つ検索機能を利用して port を検索する方法もあります. この検索機能を利用するには, カレントディレクトリが /usr/ports である必要があります. そのディレクトリに移動したら, make search key=プログラム名 と入力してください. プログラム名の部分には検索したいプログラム名を入れます. たとえば, xchat を探したい場合には次のようにします. &prompt.root; cd /usr/ports &prompt.root; make search key=xchat Port: xchat-1.3.8 Path: /usr/ports/irc/xchat Info: An X11 IRC client using the GTK+ toolkit, and optionally, GNOME Maint: jim@FreeBSD.org Index: irc B-deps: XFree86-3.3.5 bzip2-0.9.5d gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gmake-3.77 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1 R-deps: XFree86-3.3.5 gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1 出力のうち特に注意して見なければならないのは Path という行です. この行は xchat がどこにあるかを示しています. 出力される他の情報は port をインストールする際には直接必要となるものではありませんので, ここでは触れないでおきます. ports をインストールするには, root ユーザにならなければなりません. インストールしたい port が見つかったら, 実際のインストールい移ることができます. CD-ROM からのコンパイル タイトルから想像できると思いますが, このセクションで説明する内容は, FreeBSD の CDROM セットを持っていることを前提としています. もし CDROM セットを持っていなければ, FreeBSD Mall で注文することができます. FreeBSD CDROM がドライブに挿入されていて, /cdrom (マウントポイントは必ず /cdromでないといけません) にマウントされていれば, port をインストールすることができます. まず, カレントディレクトリをインストールしたい port のあるディレクトリに変更してください. &prompt.root; cd /usr/ports/irc/xchat xchat ディレクトリに移動すると, port スケルトンがあるのが確認できると思います. 次に行なうのは, port のコンパイル (構築, ビルド(build)とも呼ばれます) です. これは, プロンプトから単に make と入力するだけで行なえます. そうすると, 次のような出力が現われるはずです. &prompt.root; make >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from file:/cdrom/ports/distfiles/. ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [configure output snipped] ... ===> Building for xchat-1.3.8 ... [compilation snipped] ... &prompt.root; コンパイルが終了してプロンプトに戻ることを確認してください. 次に port をインストールを行ないます. port をインストールするのに必要なのは, make コマンドに一つの単語, install を指定することだけです. &prompt.root; make install ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [install routines snipped] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 &prompt.root; プロンプトに戻ったら, インストールしたプログラムは実行できるようになっています. make, make install と二つに分けられた手順の代わりに, 最初から make install と実行することで, 手順の二番目の操作を省くことができます. port には CDROM への収録を許可しないライセンス条項を持つものがあることに 注意してください. これにはダウンロード前に登録を必要としたり, 再配布が禁止されているなどというさまざまな理由があります. CDROM に含まれていない port をインストールしたい場合には, ネットワークに接続する必要があります (次のセクションをご覧ください). インターネット経由での ports のコンパイル 前セクションと同じように, このセクションでは, インターネットへの接続が可能であることを前提としています. もしインターネット接続が不可能な場合は, CDROM からのインストールが必要になるでしょう. インターネット経由で port をインストールする方法は, CDROM からインストールする場合と完全に同じです. 唯一異なる部分はプログラムのソースコードを CDROM からではなく, インターネット経由でダウンロードするということです. 次のように, 必要な手順は同じです. &prompt.root; make install >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from http://xchat.org/files/v1.3/. Receiving xchat-1.3.8.tar.bz2 (305543 bytes): 100% 305543 bytes transferred in 2.9 seconds (102.81 Kbytes/s) ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [configure output snipped] ... ===> Building for xchat-1.3.8 ... [compilation snipped] ... ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [install routines snipped] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 &prompt.root; ご覧のとおり, 出力の違いはシステムがどこから port を入手したか示す行だけです. 以上が, システムに ports をインストールするために必要な操作です. 次のセクションでは, システムにインストールされている port を削除する方法について学びます. インストールされた ports の削除 ports のインストール方法について知ればおそらく, インストールの後になって, それが間違っていたことに気付いた時などに備えて それらを削除する方法はどうすれば良いのか疑問に感じることでしょう. ここでは, その削除の方法について扱います. さて, 前の例 (例のまま何も変更していない人は xchat) を削除してみましょう. ports のインストールと同じように, まず最初にやらなければならないのは port のディレクトリに移動することです. port のディレクトリは /usr/ports/irc/xchat でしたね. ディレクトリを移動したら, xchat を削除するのに必要な準備は終わりです. 削除するには, make deinstall コマンド (わかりやすいですよね?) を実行します. &prompt.root; cd /usr/ports/irc/xchat &prompt.root; make deinstall ===> Deinstalling for xchat-1.3.8 &prompt.root; 極めて簡単な作業です. これでうまく xchat をシステムから削除することができました. もう一度再インストールしたい場合には, /usr/ports/irc/xchat から make reinstall を実行することで行なうことができます. トラブルシューティング このセクションでは, Ports Collection について良く質問される質問と, いくつかの基本的なトラブルシューティングテクニック, そして port がうまく動かない場合にできることについて扱います. 質問と回答集 私はモデムについての議論を しているのかと思っていました??! なるほど. あなたはきっと, コンピュータの背面についているシリアルポートのことだと思ってしまったのでしょう. あるバージョンの Unix から, 別のバージョンの Unix へとプログラムを移殖することを porting というのですが, ここでわたしたちは porting の結果という意味で port を使っています. わたしは, 標準に含まれないプログラムのインストールには packages を使うものだと思っていたのですが. そのとおり. 通常は packages が最も手早くて簡単な方法です. それでは, どうして面倒な ports があるのですか? いくつかの理由があります. ライセンス条項に, バイナリではなくソースコードでの配布を求めているソフトウェアがあるためです. バイナリ配布を信用していない人もいます. ソースコードがあれば少なくとも, ソースコードを読んで, (理論的には) 潜在的な問題点を自分で見つけ出すこともできるはずです. ローカルなパッチを入手した場合, それを自分で追加するためにソースコードが必要になります. プログラムがいかにコンパイルされるべきかについて, あなたはパッケージを作った人とは異なる見解を持っているかもしれません. どんな最適化オプションをつけるべきかとか, デバッグバージョンを作ってから それを strip するべきだとか, いや, そうするべきでない, などなど, 確固たる見解を持っている人もいるでしょう. package は通常, 非常に保守的な設定で構築されています. もし port に特定のプロセッサ用のコードを使うコンパイルオプションがあったり, 特定の拡張ボードを有効化するオプションがあれば, package を作成している人でなくとも, あなた自身が port を使ってそれらを有効にし, 設定の異なるたくさんの package を作成することができます. これの例外は, 用紙のサイズです. 異なる用紙のサイズに対応している package の場合, 用紙サイズ毎に複数の package が提供されることがあります. ソースコードを手元に置いておきたい人たちもいます. 彼らは, 退屈したときに眺めたり, あちこち解析してみたり, ソースコードを 借用したり (もちろん, ライセンスが許せばの話ですが) するのです. あなたがソースコードを持っていなければ, それはソフトウェアとは 言えませんね! ;-) パッチ(patch)とは何ですか? パッチとは, あるバージョンから他のバージョンへどのように変更するかを 示す, (通常は) 小さなファイルです. 23 行目を削除, 468 行目の後にこれらの 2 行を追加, または 197 行目をこのように変更というような内容を含んでいます. これは, diff という名前のプログラムで生成されます. tarball とは一体何ですか? .tar または .tar.gz という拡張子を持つファイルです (.tar.Z のようなバリエーションもありますし, DOS のファイルシステム用に .tgz と短縮される場合もあります). これは基本的にファイルを一つにまとめた (.tar) ディレクトリツリーです. 圧縮されている (.gz) 場合もあります. 元々 Tape ARchives (訳注: テープアーカイブ) (このため tar という名前なのです) で使われていたものなのですが, インターネット上でプログラムのソースコードを配布するために 広く使われている方法です. これらのファイルの中身を見たり, 展開したりすることもできます. FreeBSD の基本システムに付属する Unix 標準の tar コマンドを使ってみると 次のようになります. &prompt.user; tar tvzf foobar.tar.gz &prompt.user; tar xzvf foobar.tar.gz &prompt.user; tar tvf foobar.tar &prompt.user; tar xvf foobar.tar チェックサムとは何ですか? これは, チェックしたいファイル中のすべてのデータを加えて生成した 数値です. 何か文字が書き換わっていたら, チェックサムが一致しなくなります. そのため, 単純な比較だけで違いを見つけることができるのです. 今まで「CD-ROM からの ports のコンパイル」にあるようにして ports をインストールできていたのですが, kermit のインストールをしようとするとうまくいきません. &prompt.root; make install >> cku190.tar.gz doesn't seem to exist on this system. >> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/. なぜ cku190.tar.gz が見つからないのでしょうか? 不良品の CDROM を買ってしまったのでしょうか? CD-ROM からの ports のコンパイル のセクションで説明されているとおり, ports の一部にライセンス上の制限から CDROM には収録できない種類のものが存在します. kermit はその一例です. kermit のライセンス条件は tarball を CDROM に収録することを禁じているため, 申し訳ありませんが手動で tarball を取得してください. 質問にあるようなエラーメッセージが表示されるのは, あなたがそのときにインターネットへ接続していなかったことによります. 一度 MASTER_SITES のいずれかから (Makefile の中に書いてあります) ダウンロードしておけば, プロセスを再開することができます. kermit の tarball を入手しましたが, /usr/ports/distfiles に ファイルを置こうとすると, 書き込み権がないというエラーがでます. ports は /usr/ports/distfiles から tarball を探します. しかし, これは読み出し専用の CDROM へのシンボリックリンクなので, ここにファイルを置くことはできません. 次のようにすれば他の場所を探すよう ports に指示することができます. &prompt.root; make DISTDIR=/where/you/put/it install ports は, すべてを /usr/ports に置いたときだけ動作するのでしょうか? システムの管理者によると, 私の個人的なファイルは /u/people/guests/wurzburger に入れなければならないのですが, これではうまくいかないように思います. PORTSDIR 変数と PREFIX 変数を変更することで, 違うディレクトリを 使用することができます. たとえば, &prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports install とすると, ports は /u/people/guests/wurzburger/ports でコンパイルされ, すべて /usr/local 以下にインストールされます. &prompt.root; make PREFIX=/u/people/guests/wurzburger/local install この場合, コンパイルは /usr/ports でおこない, /u/people/guests/wurzburger/local にインストールします. もちろん, &prompt.root; make PORTSDIR=../ports PREFIX=../local install とすれば両者を組み合わせることが可能です (省略せずに記述したらこのページに収めるには長すぎるのですが, 考え方は理解していただけたと思います). もし ports をインストールするたびにこれらを毎回タイプするのが気に入らないのであれば, これらを環境変数にセットしてしまうという手があります. どのようにすれば良いかについては, あなたの使っているシェルのマニュアルページを参照してください. わたしは FreeBSD の CDROM を持っていませんが, すべての tarball を システムに置いておきたいのです. そうすれば ports をインストール するたびに毎回ダウンロードが終わるのを待たなくてすむでしょう. これを一度におこなう簡単な方法はありませんか? Ports Collection 全体の tarball を持ってくるには, 次のようにします. &prompt.root; cd /usr/ports &prompt.root; make fetch ports の下の一つのディレクトリの tarball を持ってくるには, 次のようにします. &prompt.root; cd /usr/ports/directory &prompt.root; make fetch ports を一つだけ持ってくる方法は, きっとすでにご存知だと思います. 近くにある FreeBSD のミラーサイトから tarball を持ってくる方がおそらく速いはずです. MASTER_SITES に書かれているサイト以外から持ってくるように ports に指示する方法はありませんか? もちろんあります. たとえば ftp.FreeBSD.orgMASTER_SITES に書かれている サイトより近いとしたら, 以下のようにしてください. &prompt.root; cd /usr/ports/directory &prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch make がダウンロードしようとする前に, どんなファイルが必要とするか知りたいのですが. make fetch-list とすると, ports に必要なファイルの一覧を表示できます. ports のコンパイルを途中で止める方法はありますか? 私はインストールをする前に いろいろとソースコードを解析したいのですが, 毎回 control-C を打たなければならないのが少し面倒です. make extract を実行すると, ファイル転送とソースコードの展開まで行なったところで停止します. 自分で ports を作ろうとしています. わたしの作ったパッチが正しく処理できることを確認できるように, コンパイルを止めたいのです. パッチのための make extract のようなものはありませんか? あります. make patch があなたの望むものです. おそらく PATCH_DEBUG オプションも同様に役に立つことでしょう. あなたの努力に感謝いたします!! あるコンパイルオプションはバグの原因になるという話を聞きました. 本当なのでしょうか? どうやったら正しい設定で ports をコンパイルできますか? 本当です. gcc の バージョン 2.6.3 (FreeBSDの 2.1.0 と 2.1.5 に付属している バージョン) では, オプションを オプションなしで 使うと, バグのあるコードを出力します (ほとんどの ports は オプションを使いません). コンバイルオプションは次のように定義すべきです. &prompt.root; make CFLAGS='-O2 -fno-strength-reduce' install これを /etc/make.conf に書いておくこともできますが, 残念なことにすべての ports がこの指定を尊重してくれるわけではありません. もっとも確実なのは make configure を実行し, ソースディレクトリの Makefile を見て, 手で修正することですが, ソースが多くのサブディレクトリに分かれていて, 各々に Makefile がある場合は大変な仕事になります. FreeBSD の標準コンパイルオプションは非常に保守的ですので, 変更していなければ問題となることはないでしょう. ports がたくさんありすぎて, わたしの欲しいものがなかなか見つけられません. どんな ports が使えるのか, リストはどこかにありませんか? /usr/ports の中にある INDEX ファイルを見てみましょう. また, あるキーワードで ports コレクションを検索することも可能です. たとえば以下のようにすれば, プログラミング言語 LISP に関連した ports を探すことができます. &prompt.user; cd /usr/ports &prompt.user; make search key=lisp foo ports をインストールしたいのですが, それのコンパイルは すぐに停止して, bar ports のコンパイルが始まってしまいます. 一体どうして? foo ports が, bar ports の提供する何らかの機能を必要としているからです. たとえば foo が画像を扱うもので bar がその画像処理に必要なライブラリを持っている場合などです. もしくは barfoo をコンパイルするのに必要なツールなのかもしれません. ports から grizzle プログラムをインストールしましたが, まったく ディスクスペースの浪費です. 削除したいのですが, すべてのファイルがどこへインストールされたのかわかりません. 何か手がかりはありませんか? 大丈夫, 次のようにしてください. &prompt.root; pkg_delete grizzle-6.5 もしくは, 次のようにします. &prompt.root; cd /usr/ports/somewhere/grizzle &prompt.root; make deinstall ちょっと待ってください. 削除しようとするコマンドのバージョン番号を 知っていなくてはならないのでしょうか? あなたは, わたしがバージョン番号を 覚えていると本気で思っているのですか? そんなことはありません. バージョン番号は次のようにすればわかります. &prompt.root; pkg_info -a | grep grizzle Information for grizzle-6.5: grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game. ディスク容量のことなのですが, ports のディレクトリは非常に膨大な容量を使うように見えます. 残しておいた方がよいのでしょうか? それとも削除してしまって構わないのでしょうか? はい. インストールが首尾よく終わり, もうソースコードが必要でないと思うなら, それらを残しておく理由はないでしょう. 一番良い方法は, 次のとおりです. &prompt.root; cd /usr/ports &prompt.root; make clean これはすべての ports のサブディレクトリを調べ, 各 ports のスケルトン以外の削除をおこないます. これを試してみたのですが, tarball や ports で使われたファイルが distfiles ディレクトリに残っています. これも削除してしまっても大丈夫ですか? はい. それを使った作業が終わったのであれば, 削除してしまっても大丈夫です. 手動でファイルを操作するか, もしくは make distclean を使えば削除することができます. わたしはとてもとてもたくさんのプログラムを楽しみたいのです. 一度にすべての ports をインストールする方法はありませんか? 次のようにしてください. &prompt.root; cd /usr/ports &prompt.root; make install ports の中には, 同じ名前でインストールを行なうものがあるということに注意してください. 二つのグラフィック ports をインストールして, それらが両方とも /usr/local/bin/plot をインストールする場合などは明らかに問題となるでしょう. やってみました. 時間がとてもかかるだろうと思ったので, そのまま実行を 続けさせて, わたしは寝ました. 翌朝コンピュータを見てみると, 三つ半の ports しか処理が終わっていませんでした. 何か悪かったのでしょうか? ports の中には, わたしたちの決められないこと (たとえば, あなたが A4 の 用紙に印刷したいのか, US レターサイズの用紙に印刷したいのかなど) について質問してくるものがあるからです. それらの質問には手動で答える必要があります. 一日中モニタの前に座って過ごしたりしたくないのですが, 何か良いアイディアはありませんか? では, あなたが寝に / 仕事に / 公園にいく前に以下を実行してください. &prompt.root; cd /usr/ports &prompt.root; make -DBATCH install これでユーザの入力を要求しないすべての ports をインストールします. そして戻ってきてから次のように実行してください. &prompt.root; cd /usr/ports &prompt.root; make -DIS_INTERACTIVE install そして残りの作業を実行してください. わたしたちは Ports Collection にある frobble を使っています. ですが, わたしたちの必要に応じて ports を変更したところがあるのです. 自分で package を作って, それをわたしたちのサイトのまわりに簡単に配布できるような方法がありますか? もちろんあります. 変更点をパッチにする方法は知っていますよね? &prompt.root; cd /usr/ports/somewhere/frobble &prompt.root; make extract &prompt.root; cd work/frobble-2.8 [あなたのパッチをあててください] &prompt.root; cd ../.. &prompt.root; make package この ports の技術は本当に賢いですね. わたしはこれがどのようにして動いているのか知りたいのですが, その秘密とは何ですか? 秘密なんて一切ありません. Makefiles ディレクトリ にある bsd.port.mkbsd.port.subdir.mk ファイルを見てください. (複雑なシェルスクリプトを嫌う読者は, このリンクを追いかけないほうが良いでしょう...) たすけて! port がうまく動かない! port がうまく動作しない状況に遭遇したら, あなたにできることは次のようなことしかありません. 自分で直しましょう! port の作り方 のセクションが参考になるはずです. 苦情を言いましょう — ただし電子メールで! まず port の保守担当者に電子メールを送ってください. make maintainer と入力するか, Makefile を直接読み, 保守担当者の電子メールアドレスを調べます. メールを送る際には, port 名とバージョン番号 (Makefile$FreeBSD: 行), そしてエラーが出力されるまでの出力ログを忘れずに添付してください. 保守担当者から返信がなければ, send-pr を使ってバグレポートを提出しても構いません. その port のことは忘れてしまってください. これは最も気楽な方法です — 重要な ports というのは, ほんの一握りしかありません. また, port が更新された時に問題が解決しているかも知れません. 近くの FTP サイトから package を入手しましょう. マスタ package コレクションは, ftp.FreeBSD.orgpackage のディレクトリにありますが, まずはあなたの地域のミラーサイトを最初に調べてください. ソースからコンパイルすることを試みるより確実ですし, 時間もかかりません. package をシステムにインストールするには, &man.pkg.add.1; を使います. 高度な話題 以前ここにあった文書は, 探しやすいように Porter's Handbook へ移動しました. あなたが ports の作成や提出をしたいと考えているなら, そちらへどうぞ. diff --git a/ja_JP.eucJP/books/handbook/printing/chapter.sgml b/ja_JP.eucJP/books/handbook/printing/chapter.sgml index adafdc3517..7c5014fb69 100644 --- a/ja_JP.eucJP/books/handbook/printing/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/printing/chapter.sgml @@ -1,5398 +1,5329 @@ プリンタの利用 + + 原作: &a.kelly;, 1995 年 9 月 30 日. - 原作: &a.kelly;, 1995 年 9 月 30 日. - 改訂: &a.jim;, 2000 年 3 月 + 改訂: &a.jim;, 2000 年 3 月 訳: &a.jp.kimura;, 1996 年 9 月 3 日 - 概要 - - FreeBSD でプリンタを使用するためには, バークレイラインプリンタ - スプーリングシステム (LPDスプーリングシステムとしても知られて - います) が機能するようにプリンタをセットアップする必要がありま す. - 本節では, LPDスプーリングシステム (大抵の場合, 単にLPDと呼 ばれる) - について紹介します. - - もし, LPDや他のプリンタスプーリングシステムについて既に詳しい - 知識をお持ちの方は, 「 - スプーリングシステムのセットアップ」から読み始めて - も結構です. + この章では + + FreeBSD でプリンタを使用するためには, + バークレイラインプリンタスプーリングシステム + (LPD スプーリングシステムとしても知られています) + が機能するようにプリンタをセットアップする必要があります. + 本章では設定例を通して, LPD スプーリングシステム + (大抵の場合, 単に LPD と呼ばれる) + について紹介します. + + もし, LPD + や他のプリンタスプーリングシステムについてすでに詳しい知識をお持ちの方は, + スプーリングシステムのセットアップから読み始めても構いません. はじめに - LPDはあるホストのプリンタに関する制御の一切をおこないます. - こ こで言う制御としては, 次のことが挙げられます. + LPD はあるホストのプリンタに関する制御の一切を行ないます. + ここで言う制御としては, 次のことがあげられます. - ホストに接続されたプリンタ, あるいはネットワーク - 上の他ホストに接続されたプリンタに対するアクセスを制御しま - す. + ホストに接続されたプリンタ, + あるいはネットワーク上の他ホストに接続されたプリンタに対するアクセス制御を行ないます. ファイルをプリントする要求に対して許可を与えます. - この要求は特に ジョブ - と呼ばれています. + この要求は特にジョブと呼ばれています. - 各々のプリンタの キュー - を管理することにより, - 複数のユーザがあるプリンタに対して同時にアクセスすることを - 防ぎます. + 各々のプリンタのキューを管理することにより, + 複数のユーザがあるプリンタに対して同時にアクセスすることを防ぎます. ヘッダページ - (バナー または - バースト ページとしても知られています) - をプリントすることができます. これにより, - プリントアウトの山の中から自分がプリントしたジョ - ブを見つけ易くなります. + (バナーまたは + バーストページとしても知られています) + をプリントすることができます. + これにより, + プリントアウトの山の中から自分がプリントしたジョブを見つけやすくなります. - シリアルポートに接続したプリンタ用に通信パラ - メータを管理します. + シリアルポートに接続したプリンタ用に通信パラメータを管理します. - ネットワーク経由で他のホスト上の, 別のLPDスプーラにジョ - ブを送ることができます. + ネットワーク経由で他のホスト上の + LPD スプーラにジョブを送ることができます. - 様々なプリンタ言語やプリンタの能力に応じてジョブの - 形式を整えるため, + 様々なプリンタ言語やプリンタの能力に応じてジョブの形式を整えるため, 特別なフィルタを起動することができます. - プリンタの使用に対して - 課金をおこなうことができます. + プリンタの使用に対して課金を行なうことができます. - 設定ファイルを通して, また, 特別なフィルタプログラムを供給 - することにより, 多種多様なプリンタ機器に対して, 上述の機能の - 全部または一部をLPDシステムにおこなわせることができます. + 設定ファイルを通して, あるいは特別なフィルタプログラムを用いることにより, + 多種多様なプリンタ機器に対して, + 上述の機能の全部または一部を LPD システムに行なわせることができます. - - どうしてスプーラを使うべきなのか + + どうしてスプーラを使うべきなのか - あなたのシステムを利用するのがあなた一人だけだとしたら, ア - クセス制御もヘッダページも - プリンタ利用に対する課金も必要ないのに, - なぜわざわざスプーラに煩わされなければならないのか疑問に思うか - もしれません. - プリンタに対する直接アクセスを許可することもできるので すが, - とにかくスプーラを使用するべきです. その理由は, + あなたのシステムを利用するのがあなた一人だけだとしたら, + アクセス制御もヘッダページも + プリンタ利用に対する課金も必要ないのに, + なぜわざわざスプーラに煩わされなければならないのか疑問に思うかも知れません. + プリンタに対する直接アクセスを許可することもできるのですが, + とにかくスプーラを使用するべきです. その理由は, - - - LPDはジョブをバックグラウンドで処理します. データが - プリンタに送信されるまで待つ必要はありません. - - - - LPDではジョブをフィルタを通してプリントすることが簡 - 単にできます. これにより, 印刷物のヘッダに時刻や日付を入れ - たり, 特別なファイル形式 (TeX の DVI ファイルなど) をプリン - タが処理できる形式に変更することができます. これらの作業を - 手動でおこなう必要がなくなります. - - - - プリント処理をおこなうフリーのまたは商用のプログラムの - ほとんどは, システムのスプーラとやりとりするように作られて - います. スプーリングシステムをセットアップすることで, 今後 - 加えるかもしれない, あるいは, 既に持っている別のソフトウエ - アをより簡単にサポートすることができるでしょう. - - + + + LPD はジョブをバックグラウンドで処理します. + データがプリンタに送信されるまで待つ必要がなくなります. + + + + LPD ではジョブをフィルタを通してプリントすることが簡単にできます. + これにより, 印刷物のヘッダに時刻や日付を入れたり, + 特別なファイル形式 (TeX の DVI ファイルなど) + をプリンタが処理できる形式に変更することができ, + これらの作業を手動で行なう必要がなくなります. + + + + プリント処理を行なうフリー, + または商用のプログラムのほとんどは, + システムのスプーラとやりとりするように作られています. + スプーリングシステムをセットアップすることで, + 今後加えるかもしれない, あるいは, + すでに持っている別のソフトウェアをより簡単にサポートすることができるでしょう. + + 基本的なセットアップ - LPDスプーリングシステムを用いてプリンタを使用するためには, - プリンタ機器とLPD用ソフトウェアの両方を準備する必要があります. - 本ドキュメントでは次の2段階のレベルに分けて説明をします. + LPD スプーリングシステムを用いてプリンタを使用するためには, + プリンタ機器と LPD 用ソフトウェアの両方を準備する必要があります. + 本文書では次の二段階のレベルに分けて説明をします. - プリンタを接続する方法, プリンタにどの - ように通信するかをLPDに指示する方法や, プレインテキスト - をプリンタで印字する方法については, 「 - プリンタの簡単な設定」をご覧ください. + プリンタを接続する方法, + プリンタにどのように通信するかを LPD に指示する方法や, + プレインテキストをプリンタで印字する方法については, + プリンタの簡単な設定をご覧ください. - 様々な形式のファイルを印字する方法, ヘッダページを - 印字する方法, ネットワーク経由でプリンタに印字する方法, - プリンタを制御する方法, プリンタの使用に対する課金をおこなう - 方法については「 - プリンタ設定上級編」をご覧ください. + 様々な形式のファイルを印字する方法, + ヘッダページを印字する方法, + ネットワーク経由でプリンタに印字する方法, + プリンタを制御する方法, + プリンタの使用に対する課金を行なう方法についてはプリンタ設定 + 上級編をご覧ください. - - プリンタ設定導入編 - - この節では, プリンタ機器やプリンタを使用するためのLPD用ソフ - トウェアを設定する方法について述べます. この節の概要は次の通り - です. + + プリンタ設定導入編 + + この節では, プリンタ機器やプリンタを使用するための + LPD 用ソフトウェアを設定する方法について述べます. + この節の概要は次のとおりです. - - - - プリンタ機器の設定」では, - プリンタをコンピュータに接 - 続するためのヒントがいくつか書かれています. - + + + プリンタ機器の設定では, + プリンタをコンピュータに接続するためのヒントがいくつか書かれています. + - - ソフトウェアの設定」では, LPDのスプーラ設定ファイル - /etc/printcap - の設定方法について書かれています. - - - - データをプリンタに送るためにシリアルまたは - パラレルインタフェー スではなく, - ネットワークプロトコルを使用する場合は, 「 - ネットワークにおけるデータストリームの - インタフェースを持つプリンタ」をご覧くださ い. - - この節のタイトルは“プリンタ設定導入編”ですが, - 実際の設定は かなり複雑です. プリンタをコンピュータに接続し, - LPDスプーラを 起動させることは一番困難な作業です. - ヘッダページを出力させたり, 課金したりするオプションの設定は, - 一度プリンタがうまく動くよう になれば, とても簡単です. - - - プリンタ機器の設定 - - この節では, プリンタにPCを接続するための様々な方法について - 説明しています. ここでは, ポートやケーブルの種類, FreeBSDが - プリンタとの通信に必要なカーネルコンフィグレーションについて - も言及しています. - - もし, プリンタが既に接続されていて, - 他のオペレーティングシステ - ム上でプリンタからの印字に成功している場合は, 「 - ソフトウェアの設定」まで読み飛 - ばすことが多分できるでしょう. - - - ポートとケーブル - - 最近のPC用のプリンタほとんどには次のインタフェースの一つ - もしくは両方がついています. - - - - シリアルインタフェースでは, - プリンタにデータを - 送信するためにコンピュータにあるシリアルポートが使用され - ます. シリアルインタフェースはコンピュータ業界で共通し - て使用されています. そのケーブルは容易に手に入り, また, - 簡単に自作することもできます. - シリアルインタフェースには, - 特別なケーブルが必要なことがときどきあり, また, 何か複 - 雑な通信方式選択の設定が必要になることがあります. - - - - パラレルインタフェースでは, - プリンタにデータを - 送信するためにコンピュータにあるパラレルポートを使用しま - す. パラレルインタフェースはPC業界では共通して使われてい - ます. ケーブルの入手は容易ですが, 自作するのはシリアルよ - りも難しいです. パラレルインタフェースには通常, - 通信方式の選 択はなく, このため, - 設定が極めて単純になっています. - - パラレルインタフェースは - “セントロニクス”インタフェー - スとして知られています. これは, プリンタ用のコネクタタ - イプとして採用された後に名付けられました. - - - - シリアルインタフェースはパラレルインタフェースより - も普通はデータの伝送速度が遅くなります. - パラレルインタフェースで は, 通常, - (コンピュータからプリンタへの) 単方向通信のみをおこな - うのに対して, - シリアルインタフェースは双方向通信をおこないます. - 最近のパラレルポートの多くはプリンタ側からデータを受けとる - こともできますが, コンピュータ側にデータを送り返すことが必 - 要となるプリンタはほとんどありません. さらに, FreeBSDでは - 双方向のパラレル通信をまだサポートしていません. - - 通常, プリンタで双方向通信が必要となるのは, プリンタが - PostScript 言語に対応しているときだけです. PostScript プリ - ンタは非常に冗長に動作させることができます. 事実, PostScript - によるジョブでは, プログラムを本当にプリンタ に送信します. - このことは, 印字作業を必ずしもする必要がない ことを意味し, - また, プログラムの結果をコンピュータに直接返 - されるかもしれません. PostScript プリンタでは, 双方向 - 通信を使って, PostScript プログラムのエ - ラーや紙づまりといった問題をコンピュータに報告します. ユー - ザはそれらの情報を知りたいと思うかもしれません. さらに, - PostScript プリンタで課金作業をもっとも効率よくおこなうため - には双方向通信が必要となります. この方法では, まず, プ - リンタの現在のページカウント (起動してから今まで何枚の紙を - 印字したか) の情報を得ます. 次に, ユーザのジョブをおこない, - 終 了後, 再びページカウントを得ます. この2数を差によって, 課 - 金対象となる紙の枚数を知ることができます. + ソフトウェアの設定では, + LPDのスプーラ設定ファイル + /etc/printcap + の設定方法について書かれています. + + + + データをプリンタに送るためにシリアルまたはパラレルインタフェー スではなく, + ネットワークプロトコルを使用する場合は, + ネットワークにおけるデータストリームインタフェースを持つプリンタをご覧ください. + + この節のタイトルはプリンタ設定導入編ですが, + 実際の設定はかなり複雑です. + プリンタをコンピュータに接続し, + LPD スプーラを 起動させることは一番困難な作業です. + ヘッダページを出力させたり課金したりするオプションの設定は, + 一度プリンタがうまく動くようになればとても簡単です. + + + プリンタ機器の設定 + + この節では, プリンタに PC + を接続するための様々な方法について説明しています. + ここでは, ポートやケーブルの種類, + FreeBSD がプリンタとの通信に必要なカーネルコンフィグレーションについても言及しています. + + もしプリンタが既に接続されていて, + 他のオペレーティングシステム上でプリンタからの印字に成功している場合は, + ソフトウェアの設定まで読み飛ばすことが多分できるでしょう. + + + ポートとケーブル + + 最近の PC + 用のプリンタほとんどには次のインタフェースの一つもしくは両方がついています. + + + + シリアルインタフェースでは, + プリンタにデータを送信するためにコンピュータにあるシリアルポートが使用されます. + シリアルインタフェースはコンピュータ業界で共通して使用されています. + そのケーブルは容易に手に入りますし, 簡単に自作することもできます. + シリアルインタフェースの場合は時々, + 特別なケーブルや何か複雑な通信方式選択の設定が必要になることがあります. + + + + パラレルインタフェースではプリンタにデータを送信するために, + コンピュータにあるパラレルポートを使用します. + パラレルインタフェースは PC 業界では良く使われます. + ケーブルの入手は容易ですが, + 自作するのはシリアルよりも困難です. + パラレルインタフェースには通常, 通信方式の選択はなく, + 設定は極めて単純です. + + パラレルインタフェースはセントロニクスインタフェースとして知られています. + これは, プリンタ用のコネクタタイプとして採用された後に名付けられました. + + + + シリアルインタフェースはパラレルインタフェースよりも普通はデータの伝送速度が遅くなります. + パラレルインタフェースで は, 通常, + (コンピュータからプリンタへの) 単方向通信のみを行なうのに対して, + シリアルインタフェースは双方向通信を行ないます. + FreeBSD でも IEEE1284 準拠のケーブルを使えば, + 最近のパラレルポートとプリンタの多くで双方向通信を行なうことができます. + + 通常, プリンタで双方向通信が必要となるのは, プリンタが + PostScript 言語に対応しているときだけです. + PostScript プリンタは非常に冗長に動作させることができます. + 事実, PostScript によるジョブでは, プログラムを本当にプリンタに送信します. + このことは, 印字作業を必ずしもする必要がないことを意味しますし, + そのプログラムの結果はコンピュータに直接返されるかも知れません. + PostScript プリンタでは双方向通信を使って + PostScript プログラムのエラーや紙づまりといった問題をコンピュータに報告します. + ユーザはそれらの情報を知りたいと思うかも知れません. + また, PostScript プリンタで課金作業をもっとも効率よく行なうためには, + 双方向通信が必要となります. + この方法ではまず, プリンタの現在のページカウント + (起動してから今まで何枚の紙を印字したか) の情報を得ます. + 次に, ユーザのジョブを実行し, 終了後, 再びページカウントを得ます. + この二つの数を差によって, + 課金対象となる紙の枚数を知ることができるのです. - - パラレルポート - - プリンタをパラレルインタフェースを使って接続する場合は, - セントロニクスケーブルでプリンタと - コンピュータをつないでくださ い. 詳しい説明はプリンタ, - コンピュータ, あるいは両方に付属す - る説明書に書かれているはずです. - - その際, - どのパラレルポートを使用したかを覚えておいてください. - FreeBSDでは最初のポートは /dev/lpt0, - 2番目は /dev/lpt1 であ り, - 3番目以降も同様に続きます. - - - - シリアルポート - - シリアルインタフェースを使ってプリンタを使う場合は, 適切 - なシリアルケーブルでプリンタ - とコンピュータを接続してください. 詳しい説明はプリンタ, - コンピュータ, あるいは両方に付属する説 - 明書に書かれているはずです. - - “適切なシリアルケーブル” - がよくわからないときは, 次のどれか - を試してみてください. - - - - モデム用ケーブルでは, - それぞれのピンは他方の - コネクタの対応するピンと線でつながっています. このタイプ - のケーブルは, “DTE-DCE” - 間ケーブルとしても知られています. (訳注: - 日本ではストレートケーブルという名前で売られています) - - - - - ヌルモデム用ケーブルでは, - あるピンは対応するピ ント接続していますが, あるピン - (例えば, データ送信用とデー タ受信用のピン) - が交差して接続したり, いくつかのピンは内部 - で短絡していたりします. このタイプのケーブルは, - “DTE-DTE” 間ケーブルと呼ばれています. - (訳注:日本ではクロスケーブル - という名前で売られています) - - - - A シリアルプリンタ用ケーブルは, - ある特定のプ リンタで必要とされ, - ヌルモデムケーブルと似ていますが, 内 - 部で短絡させる代わりに, ある信号を他方側に送るために使用 - しています. - - - - この他に, - プリンタ用の通信パラメータを設定する必要がありま す. 通常, - プリンタのフロントパネルやDIPスイッチによって制 御します. - コンピュータとプリンタの双方で設定できる最高の通 信速度[bps] - (ビット/秒. - ボーレートと示されているときも ある) - を選んでください. そして, データビット (7または8), パリ ティ - (偶/奇/なし), ストップビット (1または2) を選んでください. - そして, フローコントロールの有無 (制御なし, または - XON/XOFF(“イン・バンド” または - “ソフトウェア”フローコ ントロールとも呼ばれる)) - を選びます. 以下に続くソフトウェア の設定のために, - ここでの設定を覚えておいてください. - - + + パラレルポート + + プリンタをパラレルインタフェースを使って接続する場合は, + セントロニクスケーブルでプリンタとコンピュータを接続してください. + 詳しい説明はプリンタやコンピュータに付属する説明書に書かれているはずです. + + その際, + どのパラレルポートを使用したかを覚えておいてください. + FreeBSDでは最初のポートは /dev/lpt0, + 二番目 /dev/lpt1 であ り, + 三番目以降も同様に続きます. + + + + シリアルポート + + シリアルインタフェースを使ってプリンタを使う場合は, + 適切なシリアルケーブルでプリンタとコンピュータを接続してください. + 詳しい説明はプリンタ, コンピュータ, あるいは両方に付属する説 + 明書に書かれているはずです. + + 適切なシリアルケーブルが良くわからないときは, + 次のどれかを試してみてください. + + + + モデム用ケーブルでは, + それぞれのピンは他方のコネクタの対応するピンと線でつながっています. + このタイプのケーブルは DTE-DCE + 間ケーブルとしても知られています + (訳注: + 日本ではストレートケーブルという名前で売られています). + + + + + ヌルモデム用ケーブルでは, + あるピンは対応するピンとを接続していますが, + あるピン + (たとえば, データ送信用とデータ受信用のピン) + が交差して接続したり, + いくつかのピンは内部で短絡していたりします. + このタイプのケーブルは, + DTE-DTE 間ケーブルと呼ばれています + (訳注: + 日本ではクロスケーブルという名前で売られています). + + + + A シリアルプリンタ用ケーブルは, + ある特定のプリンタで必要とされるものです. + ヌルモデムケーブルと似ていますが, + 内部で短絡させる代わりに, + ある信号を他方側に送るために使用しています. + + + + この他に, + プリンタ用の通信パラメータを設定する必要があります. + 通常, + プリンタのフロントパネルや DIP スイッチによって制御します. + コンピュータとプリンタの双方で設定できる最高の通信速度 + [bps] (ビット/秒. + ボーレートと示されているときもある) + を選んでください. そして, データビット (7 または 8), + パリティ(偶/奇/なし), ストップビット (1 または 2) + を選んでください. + そして, フローコントロールの有無 + (制御なし, または XON/XOFF (イン・バンド + または + ソフトウェアフローコントロールとも呼ばれる)) + を選びます. + 以下に続くソフトウェアの設定のために, + ここでの設定を覚えておいてください. + + ソフトウェアの設定 本節では FreeBSD の LPD スプーリングシステムで印字をおこなうために 必要となるソフトウェアの設定について説明しています. 本節の概要は次のようになります. プリンタで使用するポートのために, 必要があれば, カー ネルの書き変えをおこないます. 「カーネルの変更」で, このためにしなくてはなら ないことを説明しています. パラレルポートを使用している場合は, パラレルポートの ための通信モードの設定します. 詳細は, 「 パラレルポートの通信モードを設定する 」で説明しています. オペレーティングシステムからプリンタにデータが送ら れているかをテストします. 「 プリンタとの通信状況を調べる」で, どのように テストするかの提案をいくつかおこなっています. ファイル/etc/printcapを変更し, LPDの設定を おこないます. この節で, どのように変更するかを 説明しています. カーネルの変更 オペレーティングシステムのカーネルの コンパイルをおこなうこと によって, 指定されたのデバイスが機能するようになります. シリ アル, または, パラレルインタフェースをプリンタで使用する場合, 必要なデバイスがこの指定の中に含まれていなくてはなりません. したがって, 必要なデバイスがカーネルに組み込まれていない場合, 追 加のシリアル, または, パラレルポートをサポートするために, カー ネルの再コンパイルが必要となるかもしれません. シリアルポートが現在使用しているカーネルで サポートされている かどうかを調べるためには, 次のように入力します. &prompt.root; dmesg | grep sioN ここで, N はシリアルポートの番号を示し, この番号は0から 始まります. 次のような出力があった場合, カーネルはそのポー トをサポートしています. sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A パラレルポートが現在使用しているカーネルで サポートされている かどうかを調べるためには, 次のように入力します. &prompt.root; dmesg | grep lptN ここで, N はパラレルポートの番号を示し, この番号は0から 始まります. 次のような出力があった場合, カーネルはそのポー トをサポートしています. lpt0 at 0x378-0x37f on isa 上記の出力が得られない場合, プリンタを使うため, オペレーティ ングシステムにパラレル, または, シリアルポートを認識し, 使用 できるようにするためには カーネルを変更する必要があります. シリアルポートをサポートさせるには, 「 FreeBSDカーネルのコンフィグレーション」の節をご覧く ださい. パラレルポートをサポートさせる場合も, その節と, あ わせて, この節に続く節もご覧ください. ポート用エントリを <filename>/dev</filename> に追加する カーネルがシリアル, または, パラレルポートを通じての通 信をサポートしていたとしても, システム上で動いているプログ ラムがデータの送受信をおこなうための ソフトウェアインタフェース がさらに必要になります. そのインタフェースは, /dev ディレクトリにあるエントリに相当します. /dev エントリにポートを加えるために &man.su.1; コマンドで root になります. suコマンド でパスワードを聞かれたら, ルート用のパスワードを入力し ます. /dev ディレクトリに移動します. &prompt.root; cd /dev 次のように入力します. &prompt.root; ./MAKEDEV port ここで, port は, 作成するポート名です. 1番目 のパラレルポートのときは lpt0 に, 2番目のときは lpt1 になり, 以降同様になります. 1番目のシリア ルポートのときは, ttyd0 に, 2番目のときは ttyd1 になり, これも以降同様となります. 次を入力し, デバイスのエントリができたか確認し ます. &prompt.root; ls -l port パラレルポートの通信モードを設定する パラレルインタフェースを使用している場合, FreeBSDでは, 割り込み駆動型にするか, プリンタとの通信の状況をカーネルに監 視させるかのいずれかを選択できます. GENERIC カーネルでは割り込み駆動方式が, デフォルトになっています. この方式では, オペレーティングシ ステムはプリンタがデータを受け付けられるかどうかを調べ るために, IRQ ラインを一つ使用します. 監視方式では, オペレーティングシステムにプ リンタがもっとデータを受け付けられるかどうかを繰り返し 尋ねるように指示します. そして, 受け付けるという応答を 受けたとき, カーネルはさらなるデータを送信します. 割り込み駆動方式は, いくらか高速になりますが, 貴重な IRQ ラインを一つ消費します. うまく機能するものをお使いください. 通信モードを設定するためには2つの方法があります. 1つはカー ネルを変更することで, もう一つは &man.lptcontrol.8; プログラムを使用する方法です. カーネルを設定することによって, 通信モードを変更する. カーネルコンフィグレーションファイルを変更しま す. lpt0 のエントリを探すか追加してください. 2番目 のパラレルポートを設定するときは, 代わりに lpt1 を使います. 以下, 3番目のポートは lpt2 となってい きます. イベント駆動方式にする場合は, irq 指 定を追加します. device lpt0 at isa? port? tty irq N vector lptintr ここで, N はパラレルポート用の IRQ 番号で す. 監視方式を使用する場合は, irq を追加 してはいけません. device lpt0 at isa? port? tty vector lptintr ファイルをセーブし, config プログラムを起動 し, カーネルの構築, インストールをおこないます. そして, リ ブートしてください. 詳細は, 「 FreeBSDカーネルのコンフィグレーション」を参照 してください. &man.lptcontrol.8; で通信モードを設定する場合 lptN をイベント駆動方式に設定する場合は, 次のように入力します. &prompt.root; lptcontrol -i -u N lptN を監視方式に設定する場合は, 次のように入力します. &prompt.root; lptcontrol -p -u N これらのコマンドを /etc/rc.local ファイルに追加 しておくと, システムをブートする度に通信モードを設定する ことができます. 詳細については, &man.lptcontrol.8; をご覧ください. プリンタとの通信状況を調べる スプーリングシステムの設定に進む前に, オペレーティング システムがプリンタにデータを送ることに成功しているかどうか を確かめるべきでしょう. これにより, 印字がうまくいかないと き, プリンタとの通信が問題なのか, スプーリングシステムが問 題なのかを分けて調べることがかなり容易になります. プリンタをテストするためには, プリンタに何かのテキストを送 信してみます. 送信した文字をすぐに印字してくれるプリンタに は, &man.lptest.1; コマンドを使うと有用です. このコマンドは印 字可能な96文字のASCII文字すべてを96行生成します. PostScript (または他の言語に対応した) プリンタの場合 は, もっと巧妙なテストが必要になります. 次のような, 簡単な PostScript プログラムを使えば十分でしょう. %!PS 100 100 moveto 300 300 lineto stroke 310 310 moveto /Helvetica findfont 12 scalefont setfont (Is this thing working?) show showpage このドキュメントでプリンタ用言語を参照するとき は, PostScript のような言語を仮定しており, Hewlett Packard の PCL は考慮していません. PCL は非常に機能的なの ですが, プレインテキストにエスケープシーケンスを混ぜること ができます. PostScript ではプレインテキストを直接印字 することはできません. このような種類のプリンタ言語に対して は, 特別な対応をおこなわなければなりません. パラレルポートのプリンタとの接続を調べる この節では, FreeBSDがパラレルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について説明し ています. パラレルポートのプリンタをテストするために &man.su.1; コマンドで root になります. プリンタにデータを送ります. プリンタがプレインテキストを印字できる場合, &man.lptest.1; コマンドを使います. 次のように入力してください. &prompt.root; lptest > /dev/lptN ここで, N はパラレルポートの番号で, 番号は 0から始まります. プリンタが PostScript か他のプリンタ 言語を使用している場合, そのプリンタに簡単なプロ グラムを送信してください. 次のように入力します. &prompt.root; cat > /dev/lptN そして, 一行一行, プログラムを慎重に入力して 下さい. RETUREN または ENTER キーを入力してしま うと, その行は編集できなくなります. プログラムの 入力が終わったら, CONTROL+Dか, あなたが設定して いるファイル終了のキーを押してください. もしくは, プログラムを入力したファイルがある 場合は, 次のように入力してください. &prompt.root; cat file > /dev/lptN ここで, file はプログラムが格納されていて, プリンタに送信するファイルの名前です. これで何かがプリントされることでしょう. 印字されたテキ ストがおかしくても心配しなくても構いません. それについ ては, 後で修正します. シリアルポートのプリンタとの接続を調べる この節では, FreeBSDがシリアルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について述べられ ています. シリアルポートのプリンタをテストするために &man.su.1; コマンドで root になります. /etc/remote ファイルを編集します. 次の エントリを加えてください. printer:dv=/dev/port:br#bps-rate:pa=parity ここで, port シリアルポート (ttyd0, ttyd1 など) のデバイスエントリで, bps-rateは プリンタとの通信の転送速度[bit/秒], parityはプリ ンタとの通信で必要とされるパリティ (even, odd, none, zeroのいずれか) を表わしていま す. 次の例は, プリンタをシリアルケーブルでパリティなし, 転送速度 19200bpsで第3番目のシリアルポートに接続した場 合です. printer:dv=/dev/ttyd2:br#19200:pa=none &man.tip.1; コマンドでプリンタと接続します. 次のよ うに入力してください. &prompt.root; tip printer これがうまくいかなかった場合は, /etc/remoteを 編集して, /dev/ttydN の代わりに /dev/cuaaN を試してみてください. プリンタにデータを送ります. プリンタがプレインテキストを印字できる場合, &man.lptest.1; コマンドを使います. 次のように入力してください. ~$lptest プリンタが PostScript か他のプリンタ 言語を使用している場合, そのプリンタに簡単なプロ グラムを入力します. 一行一行, プログラムを慎 重に入力してください. バックスペースキーや他の編 集用のキーは, プリンタの制御コードに割り当てられ ているかもしれません. プログラムが終了したことを プリンタに伝えるための特別なファイル終了キーを入 力する必要があるかもしれません. PostScript プリンタの場合, CONTROL+Dを入力します. もしくは, プログラムを入力したファイルがある 場合は, 次のように入力してください. ~>file ここで, file はプログラムが格納されている ファイル名です. &man.tip.1; コマンドでファイルを送 信した後は, ファイル終了を表わすキーを入力する必要 があります. これで何かがプリントされることでしょう. 印字されたテキ ストがおかしくても心配しなくても構いません. それについ ては, 後で修正します. スプーラに許可を与える: <filename>/etc/printcap</filename> ファイル ここまでで, プリンタはコンピュータに接続され, (必要なら) プリンタと通信できるようにカーネルを変更し, 簡単なデータをプ リンタに送信することができているはずです. これで, LPDにプリ ンタへのアクセスを 制御させる設定をおこなう準備が整いました. LPDの設定は /etc/printcap を編集することでおこないます. LPDスプーリングシステムはスプーラが使われる毎にこのファイル を参照します. そのため, ファイルを更新するとすぐにその変更が 反映されます. &man.printcap.5; ファイルの書式は簡単です. /etc/printcap の編集はお好みのテキストエディタをお 使いください. このファイルの書式は, /usr/share/misc/termcap/etc/remote といった他のケイパビリティファイルと一致しています. この書式 のついての詳細な情報については &man.cgetent.3; をご覧ください. スプーラの単純な設定法は, 次のステップでおこないます. プリンタに名前 (と簡単な別名2〜3個) を付け, それを /etc/printcap ファイルに記述します. これについ ては, 「 プリンタに名前を付ける」 を参照してください. sh の項目を追加することで, ヘッダページの出 力を禁止します (デフォルトは許可). これについては, 「 ヘッダページの印字を禁止する」 を参照してください. スプール用のディレクトリを作成し, その位置を sd 項目で指定します. これについては, 「 スプーリングディレクトリの作成」 を参照してください. プリンタを使用するために /dev エントリを 設定し, /etc/printcaplp 項目でそのエ ントリを指定します. これについては, 「 プリンタデバイスの特定」 を参照してください. プリンタをシリアルポートに接続した場合は, fs, fc, xs, xc の項目を設定する必要があります. こちらについては, 「 スプーラのための通信パラメータの設定」 を参照してください. プレインテキスト用の入力フィルタのインストールを おこないます. 「 テキストフィルタのインストール」 を参照してください. &man.lpr.1; コマンドで何かを印字することで設定のテス トをおこないます. 印字してみよう と トラブルシューティング を参照してください. PostScript プリンタのような, プリンタ言語を 使用しているプリンタには, プレインテキストを直接印字させる ことができません. 上にアウトラインを示し, 以下の節で説明す る簡単な設定方法の説明では, そのようなプリンタを設置してい る場合は, プリンタが認識できるファイルだけを印字の対象とし ているという仮定をしています. 多くの場合, 利用者はシステムに設置されているプリンタすべてでプ レインテキストが印字できることを期待しています. 印字作業を おこなうためにLPDのインタフェースを利用するプログラムでも, 通 常, そのような仮定を置きます. プリンタ言語を使用するプリン タを設置しており, そのプリンタ言語で記述されたジョブと, これに加えて, プレインテキストのジョブも印字できるよ うにしたいならば, 上で示した簡単な設定方法に加えて, さら なる設定をおこなうことを強くお勧めします. すなわち, 原始的なプ レインテキストから PostScript (もしくは, 他のプリンタ 言語) に変換するプログラムをインストールしてください. 「 プレインテキストのジョブを PostScript プリンタで印字する」 で, そ れをどのようにおこなえばよいのかが 説明されています. 訳注: 日本語を印字したい場合は, プリンタ言語を使用し ていない「日本語プリンタ」についても, プリンタ固有のエスケー プシーケンスを送る必要があります. また, 漢字コードをプリン タが設定しているものに変換したりする必要があり, 各プリンタ 毎に, 日本語用のフィルタが必要になります. プリンタに名前を付ける 最初の (簡単な) ステップで, プリンタの名前を考えます. プ リンタには別名をいくつか付けることもできるので, 機能的な名前 でも風変わりな名前でもどちらを選んでもまったく 問題はありません. 少なくとも1つのプリンタには, /etc/printcap の中 で, lp という別名を持たせるべきでしょう. この名前は デフォルトのプリンタ名になっています. ユーザが環境変数 PRINTER を設定しておらず, かつ, LPDコマンドのコマンドラインでプリ ンタの名前が指定されていない場合, lp がデフォルトのプリ ンタ名となり, そのプリンタに出力されます. それから, これは共通の慣習ですが, プリンタの最後の別名には, メーカーやモデル名を含むプリンタの完全な名称をつけることに なっています. 名前と別名のいくつかを決めたら, /etc/printcap ファ イルに設定します. プリンタ名は一番左のカラムから書き始めま す. 別名はそれぞれ縦棒によって区切られ, 最後の別名の後ろに コロンを置きます. 次の例では, 2台のプリンタ (Diablo 630 ラインプリンタと Panasonic KX-P4455 PostScript レーザライタプリンタ) が定義 されている /etc/printcap のスケルトンを記しています. # # /etc/printcap for host rose # rattan|line|diablo|lp|Diablo 630 Line Printer: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4: この例では, 最初のプリンタに rattan という名前と別名 として, line, diablo, lp そして Diablo 630 Line Printer が付けられています. 別名とし て lp があるので, このプリンタはデフォルトのプリンタとなっ ています. 2番目は bamboo と名付けられ, 別名として, psPS, S, panasonic, Panasonic KX-P4455 PostScript v51.4 が付けられていま す. ヘッダページの印字を禁止する LPDスプーリングシステムでは, デフォルトでジョブ毎にヘッ ダページを印字します. ヘッダページにはジョブを要求したユー ザ名, ジョブが送られたホスト名, そして, ジョブの名前が素晴 らしい大きな文字で印字されています. 残念なことに, この余分 なテキストすべてが, 簡単なプリンタ設定法のデバッグの際に紛れ 込んできてしまいます. このため, ヘッダページの出力を禁止し ておきます. ヘッダページの出力を禁止するには, /etc/printcap にあるプリンタのエントリに sh の項目を追加します. 次 に, sh を加えた /etc/printcap の例を示します. # # /etc/printcap for host rose - no header pages anywhere # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh: この書式を正しく使うための注意をしておきます. 最初の行は左 端のカラムから始まります. それに続く行は TAB ひとつ分だけ 字下げします. 最後の行以外のすべての行は, 行末にバックスラッ シュを記述します. スプーリングディレクトリの作成 スプーラの簡単な設定の次のステップでは, スプーリン グディレクトリを作成します. プリンタに送られるジョブ は, その印字が終了するまでこのディレクトリに置かれます. また, 他のたくさんのスプーラもこのディレクトリにファイ ルを置きます. 様々な事情によりスプーリングディレクトリは, 通常, 慣例 として /var/spool の下に置きます. また, スプーリングディレクトリの内容はバックアップをす る必要はありません. &man.mkdir.1; によってディレクトリを 作るだけでスプーリングディレクトリの復旧は完了します. スプーリングディレクトリの名前は, これも慣例ですが, 次 のようにプリンタの名前と同じにします. &prompt.root; mkdir /var/spool/printer-name しかしながら, ネットワーク上に使用可能なプリンタがたく さんあるならば, LPDで印字するための専用のディレクトリに スプーリングディレクトリを置きたいと思うかもしれません. 例に出てきたプリンタ rattanbamboo につい て, この方式を採用すると, 次のようになります. &prompt.root; mkdir /var/spool/lpd &prompt.root; mkdir /var/spool/lpd/rattan &prompt.root; mkdir /var/spool/lpd/bamboo 各ユーザが印字するジョブのプライバシを守りた いと考えているならば, スプーリングディレクトリを保護し て, これを誰からでもアクセスできないようにしたいと思う かもしれません. スプーリングディレクトリは, deamon ユー ザと daemon グループに所有され, 読み込み, 書き込み, 検 索可能であり, 他からはアクセスできないようにするべきで す. 例題のプリンタに対して, 次のようにすることにしましょ う. &prompt.root; chown daemon.daemon /var/spool/lpd/rattan &prompt.root; chown daemon.daemon /var/spool/lpd/bamboo &prompt.root; chmod 770 /var/spool/lpd/rattan &prompt.root; chmod 770 /var/spool/lpd/bamboo 最後に, /etc/printcap ファイルで, これらのディ レクトリの位置を LPD に伝える必要があります. スプーリ ングディレクトリのパス名は sd 項目で指定します. # # /etc/printcap for host rose - added spooling directories # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo: プリンタ名が最初のカラムから始まっており, そのプリンタ に関して記述される他のエントリは TAB で字下げされてい ること, 各行がバックスラッシュで終わっていることに注意 してください. sd によりスプーリングディレクトリが指定されていな い場合, スプーリングシステムは /var/spool/lpd デフォルト値として使用します. プリンタデバイスの特定 ポート用エントリを /dev に追加する」では, FreeBSD でプリン タとの通信に使用される /dev ディレクトリ内の エントリを特定します. そして, LPD にその情報を伝えま す. 印字するジョブを受け取ると, スプーリングシステムは, (プリンタにデータを渡す義務がある) フィルタプログラムに 代わって指定されたデバイスをオープンします. /etc/printcap ファイルで lp 項目を使って /dev エントリを記入します. ここでの例では, rattan は1番目のシリアルポートに, bamboo は6番目のシリアルポートに接続されているこ とにしましょう. このとき, /etc/printcap には 次のようになります. # # /etc/printcap for host rose - identified what devices to use # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5: /etc/printcap でプリンタの lp 項目が指定 されていない場合は, LPD はデフォルトとして /dev/lp を使用します. /dev/lp は, 現在の FreeBSD には存在していません. 設置したプリンタがパラレルポートに 接続されている場合は, 「 テキストフィルタのインストール」 まで読み飛ばしてください. そうでない場合は, 次節の説明に続いてください. スプーラのための通信パラメータの設定 シリアルポートにプリンタを接続した場合, プリンタにデー タを送信するフィルタプログラムに代わり, 通信速度やパリ ティ, その他のシリアル通信パラメータを設定することがで きます. このことによる利点は, /etc/printcap を編集するだけで, 様々な 通信パラメータを試してみることができます. フィルタプロ グラムを再コンパイルする必要はありません. スプーリングシステムで, シリアル通信の設定が異 なっているかもしれない複数のプリンタに同じフィルタプロ グラムを使うことが可能になります. 次の /etc/printcap の項目で, lp で指定 されたデバイスのシリアル通信 パラメータを制御できます. br#bps-rate デバイスの通信速度を bps-rate に設定します. ここ で, bps-rate は 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400[bit/秒] のいずれかです. fc#clear-bits デバイスをオープンした後で, sgttyb 構造体の clear-bits フラグビットをクリアします. fs#set-bits sgttyb 構造体の clear-bits フラグビットをセッ トします. xc#clear-bits デバイスをオープンした後で, ローカルモードビット clear-bits をクリアします. xs#set-bits ローカルモードビット set-bits をセットします. fc, fs, xc, そして xs のビットに関 する詳しい情報については, /usr/include/sys/ioctl_compat.h を参照してく ださい. 項目 lp で指定されたデバイスを LPD がオープンする とき, LPD は sgttyb 構造体のフラグビットを読み出 します. そして, 項目 fc の全ビットをクリアします. 次に, 項目 fs のビットをセットし, その結果を設定 します. ローカルモードビットに関しても同様におこなわれます. 例題のプリンタで6番目のシリアルポートに接続されたプリ ンタの設定を追加してみましょう. 通信速度は38400bpsに設 定します. フラグビットとして, TANDEM, ANYP, LITOUT, FLUSHO, PASS8 をセットします. ローカルモードビットでは, LITOUT と PASS8 フラグをセットします. bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5:fs#0x82000c1:xs#0x820: テキストフィルタのインストール ここまでで, プリンタにジョブを送るために使うテキストフィ ルタを LPD に設定する準備が整いました. テキストフィ ルタとは, 入力フィルタとしても知られていますが, 印字するジョブがあるときに LPD が起動するプログラムで す. LPD がプリンタのためにテキストフィルタを起動する とき, LPD はフィルタの標準入力からプリントするジョブ を入力し, フィルタの標準出力に項目 lp で指定され たプリンタデバイスを接続します. フィルタは, 標準入力か らジョブを読み込み, プリンタのための必要な変換をおこなった 後, その結果を標準出力に出力する, これにより印字がなさ れることを期待されています. テキストフィルタについての 更に詳しい情報については, 「 フィルタはどのように機能しているか」 をご覧ください. ここでの簡単なプリンタ設定では, プリンタにジョブを送るため, /bin/cat を実行するだけの簡単なシェルスクリプ トで間に合います. FreeBSD に標準で付属している lpf というフィルタでは, バックスペース文字を使っ た下線引きの動作をおこなう文字ストリームをうまく扱うことが できないプリンタのための代替処理をおこなってくれます. もちろん, 他のどんなフィルタプログラムを使っても構いません. フィルタ lpf については, 「テキストフィルタ lpf」で詳しく説明します. 最初に, 簡単なテキストフィルタであるシェルスクリプト /usr/local/libexec/if-simple を作ってみましょ う. 次のテキストをお好みのテキストエディタでファイルに 書き込んでください. #!/bin/sh # # if-simple - Simple text input filter for lpd # Installed in /usr/local/libexec/if-simple # # Simply copies stdin to stdout. Ignores all filter arguments. /bin/cat && exit 0 exit 2 そして, このファイルを実行可能にします. &prompt.root; chmod 555 /usr/local/libexec/if-simple LPD にこのテキストフィルタを使うことを設定するためには, /etc/printcapif 項目を使って指定しま す. これまでの /etc/printcap の例のプリンタ 2台に, このフィルタを加えてみましょう. # # /etc/printcap for host rose - added text filter # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:\ :if=/usr/local/libexec/if-simple: LPD を起動します &man.lpd.8; は lpd_enable 変数に従って /etc/rc から実行されます. この変数の デフォルト値は NO です. まだ そうしていなかったならば lpd_enable="YES" の行を /etc/rc.conf に追加して 計算機を再起動するか, そのまま &man.lpd.8; を 起動してください. &prompt.root; lpd 印字してみよう 簡単な LPD 設定も終わりにたどり着きました. 残念ながら, 設定はこれでおしまいというわけではありません. なぜなら, さらに, 設定をテストし, すべての問題点を解決しなくては ならないからです. 設定をテストするために, 何かを印字し てみましょう. LPD システムで印字をするためには, &man.lpr.1; コマンドを使います. このコマンドは, 印字する ためのジョブを投入する働きをします. &man.lpr.1; コマンドを 「 プリンタとの通信状況を調べる」で紹介した, あるテスト用のテキストを生成してくれる &man.lptest.1; プログラムと一緒に使うこともできます. 簡単な LPD 設定をテストするために: 次のように入力してください. &prompt.root; lptest 20 5 | lpr -Pprinter-name ここで, printer-name/etc/printcap で指定したプリンタ名 (もしくはその別名) です. デフォルト のプリンタを使用する場合は, 引数を付けないで &man.lpr.1; を打ち込んでください. もう一度述べますが, ポス トスクリプトを期待しているプリンタをテストするならば, &man.lptest.1; を使う代わりに PostScript で書かれたプ ログラムをプリンタに送ってください. プログラムを送るた めには, プログラムをファイルに格納して, lpr file と打ち込みます. PostScript プリンタの場合, 送信したプログラムによ る結果が得られるでしょう. &man.lptest.1; を使った場合は, 以下のような結果が見られるでしょう. !"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 $%&'()*+,-./01234567 %&'()*+,-./012345678 更にプリンタをテストしたい場合は, (言語ベースのプリン タのための) もっと大きなプログラムを送信するか, 引数を 変えて &man.lptest.1; を実行します. 例えば, lptest 80 60 で それぞれ80文字の行を60 行生成します. プリンタがうまく動かなかった場合は, 次の節, 「 トラブルシューティング」をご覧ください. プリンタ設定上級編 この節では, 特殊な形式のファイルを印字するためのフィルタ, ヘッ ダページ, ネットワーク越しのプリンタへの印字, そして, プリンタ 使用の制限や課金について説明しています. フィルタ LPD では, ネットワークプロトコル, キュー, アクセス制御, そ して, 印字のためのその他の側面について扱いますが, 実際の 作業のほとんどは フィルタ によっておこなわれています. フィルタ は, プリンタと通信し, プリンタのデバイス依存性や特殊な要求を扱 うプログラムです. 簡単なプリンタ設定では, プレインテキストのた めのフィルタをインストールしました. このプレインテキストフィル タは, ほとんどのプリンタで機能する極めて単純なものでした. (「 テキストフィルタのインストール」を参照) しかしながら, 形式変換やプリンタ課金, 特定のプリンタの癖, など をうまく利用するためには, フィルタがどのように機能するかという ことを理解しておくべきです. これらの側面を扱うためには, 最終的 には, フィルタの責任であるからです. そして, これは悪い情報です が, ほとんどの場合において, あなた自身がフィルタを供給す る必要があるということです. また都合のよいことには, たくさんのフィルタが 一般的に利用できるということです. もしフィルタがなかったとし ても, 普通は, フィルタを作るのは簡単です. FreeBSD にも, プレインテキストを印字させることができる /usr/libexec/lpr/lpf というフィルタが1つ付いています. (このフィルタはファイルに含まれるバックスペースやタブを扱いま す. また, 課金をすることもできますが, できることはこれだけしか - ありません.) いくつかのフィルタとフィルタの構成要素が FreeBSD - の ポート集にもあります. + ありません.) いくつかのフィルタとフィルタの構成要素は + FreeBSD Ports Collection にもあります. この節で述べることは次の通りです. フィルタはどのように機能しているか」では, 印字の過程におけ るフィルタの役割を概説します. この節を読むことで, LPD がフィルタを使うときに, - “見えないところで”何が起こっている + 見えないところで何が起こっている かが理解できるでしょう. このことを知っておくと, プリン タそれぞれに様々なフィルタをインストールしたときに遭遇 するかもしれない問題を予期したり, デバッグするときに役 立つでしょう. LPD では, すべてのプリンタからデフォルトでプレインテ キストを印字できることを期待しています. このことは, プ レインテキストを直接印字できない PostScript (また は他の言語用の) プリンタでは問題を引き起こします. 「 プレインテキストのジョブを PostScript プリンタで印字する」 で, この問題を克服する方法について述べます. PostScript プリンタをお持ちの方は, この節をお読みになること をお薦めします. PostScript は様々なプログラムのための有名な出 力形式です. ある人たちは (著者自身を含めて) PostScript のコードさえも直接書いてしまいます. しかし, PostScript プリンタは高価です. 「非 PostScript プリンタで PostScript をシミュレートする」では, PostScript データを非 PostScript プリンタに受けつけさせ, 印字させるために, どのようにしてプリンタ用のテキストフィルタをさらに変更 すればよいのか, ということについて述べます. PostScript プリンタを持っていない方は, この節をお読みになる ことをお薦めします. 変換フィルタ」では, 図形や組版データといっ た特定のファイル形式を, プリンタが理解できる形式へ変換 する作業を自動的におこなわせる方法について述べます. この節 を読むと, troff のデータを印字するには lpr -t, または, TeX DVI を印字するには lpr -d, ラスタイ メージデータを印字するには lpr -v, などといったよ うにユーザが入力することができるようにプリンタの設定を おこなうことができます. この節もお読みになることをお薦めし ます. 出力フィルタ」 では, あまり使われない LPD の機能のすべて, すなわち, 出力フィルタに関することが記述されています. ヘッダページ (「 ヘッダページ」参照) を印字させていない場合は, 多分, この節は飛ばしても構わないでしょう. テキストフィルタ lpf」では, lpf についての説明が, ほぼ完全におこなわれています. これは FreeBSD に付属するラ インプリンタ (または, ラインプリンタのように動作するレー ザプリンタ) のための, 単純なテキストフィルタです. プレ インテキストを印字したことに対して課金をおこなう方法が至急 必要な場合, もしくは, バックスペース文字を印字しようと すると煙を発するプリンタを持っている場合は, 絶対に lpf を検討するべきです. フィルタはどのように機能しているか 既に言及したように, フィルタとは, プリンタにデータを送る 際に, デバイスに依存した部分を取り扱うために LPD によって起動 される実行プログラムです. LPD がジョブ中のファイルを印字しようとするとき, LPD はフィル タプログラムを起動します. このとき, フィルタの標準入力を印字す るファイルに, 標準出力をプリンタに, そして, 標準エラー出力をエ ラーログファイル (/etc/printcap 内の lf 項目で指 定されたファイル, または, 指定されていない場合は, デフォルトと して /dev/console) にセットします. LPD が起動するフィルタと, その引数が何であるかは, /etc/printcap ファイルの内容と, ジョブの起動時に ユーザが指定した &man.lpr.1; コマンドの引数に依存しています. 例え ば, ユーザが lpr -t と入力した場合は, LPD は出力先のプリ ンタ用の tf 項目で指定されている troff 用のフィルタを起動 させるでしょう. ユーザがプレインテキストの印字を指示したときは, if で指定されたフィルタが 起動されるでしょう (このことはほ とんどの場合にあてはまります. 詳細については, 「 出力フィルタ」をご覧ください). /etc/printcap で指定可能なフィルタは次の3種類がありま す. テキストフィルタ (LPD のドキュメントでは紛ら わしいことに 入力フィルタと呼んでいますが) は一般の テキストの印字を扱います. これはデフォルトのフィルタと 考えてください. LPD では, すべてのプリンタに対して, デフォ ルトでプレインテキストが印字できることを期待しています. さらに, バックスペースやタブを正しく扱い, また, 他の特 殊な文字が入力されてもプリンタに混乱を来さないようにす るのはテキストフィルタの仕事であると考えています. プリンタの使用に対して課金をしなくてはならない環境にあ るときは, テキストフィルタが印字したページ数を数える作 業もしなくてはなりません. この作業は, 通常, 印字した行 数を数え, これをプリンタが1ページ当たりに印字できる行 数と比較することでおこなわれます. テキストフィルタは, 次のような引数を付けて起動されます. filter-name -c -wwidth -llength -iindent -n login -h host acct-file ここで, lpr -l によってジョブが入力されたときに与 えられます. width /etc/printcap で指定された pw (page width) 項目の値が与えられます. デフォル トは, 132です. length pl (page length) 項目で指定された値が与え られます. デフォルトは66です. indent lpr -i によって与えられた字下げの量で, デ フォルトは0です. login ファイルを印字したユーザのアカウント名が 与えら れます. host ジョブが入力されたホスト名が 与えられます. acct-file af 項目で指定されている課金データファイル の名前が与えられます. 変換フィルタは, 特定のファイル形式をプリンタ が紙に印字できるようなものに変換します. 例えば, プリン タで ditroff 組版データを直接印字することはできません. しかし, ditroff データをプリンタが消化し, 印字するこ とができる形式へ変換するために, ditroff ファイル用フィ ルタをインストールすることができます. 「 変換フィルタ」 で, これらに関するすべてについて説明します. プリンタの課金をする必要がある場合は, 変換フィルタでも 印字ページを数える作業が必要となります. 変換フィルタは次の引数をとって起動されます. filter-name -xpixel-width -ypixel-height -n login -h host acct-file ここで, pixel-width は, px 項目で指定され た値 (デフォルトは0), pixel-height は, py 項 目で指定された値 (デフォルトは0) です. 出力フィルタは, テキストフィルタが指定されて おらず, かつ, ヘッダページの出力が許可されている場合に のみ使われます. 「 出力フィルタ」で, これらのことについて説明し ます. アウトプットフィルタに対する引数は次の2つだけです. filter-name -wwidth -llength ここで, は, テキストフィルタの場合 と同じです. フィルタは, 次に示すの終了状態をもってプログラムを exit するべきです. exit 0 フィルタがファイルを正常に印字した場合. exit 1 フィルタはファイルの印字に失敗したが, LPD に再度ファ イルの印字を試みて欲しい場合. この終了状態で終了した場 合, LPD はフィルタを再スタートします. exit 2 フィルタはファイルの印字に失敗し, かつ, LPD に再出力 を試みて欲しくない場合. この場合, LPD はそのファイル を放棄します. FreeBSD に付属するテキストフィルタ /usr/libexec/lpr/lpf は, FORM FEED 文字が送られたと きやプリンタ使用に対する課金をどのようにするかを 決定するために, ページ幅やページ長の引数を利用します. また, 課金用のエントリを 作成するため, ログイン名, ホスト名, 課金ファイル名の引数を利用 します. もし, フィルタの購入を検討しているならば, LPD と互換性がある かどうかを確認してください. もしそうならば, 上述の引数リストをサ ポートしていなければなりません. 一般向けの使用のためにフィルタ を作成する計画をしている場合は, 同じ引数リストと終了コードをサ ポートしてください. プレインテキストのジョブを PostScript プリン タで印字する コンピュータと PostScript (または, 他の言語に対応し た) プリンタをあなたしか使用しない場合は, プリンタにプレ インテキストを絶対に送らない, そして, プリンタにプレインテキス トを送りたがっている様々なプログラムの機能を決して 使わないこと にしてください. そうすれば, この節に書かれたことに心を煩わせる必 要はまったくなくなります. しかし, PostScript とプレインテキストの両方のジョブをプリン タへ送りたいと思っている場合は, プリンタ設定についての要求が増 えるでしょう. 両者をプリンタへ送信するためには, 到着 したジョブがプレインテキストであるか PostScript であるかを 検出するテキストフィルタが必要です. PostScript のジョブは すべて %! で始まらなければならないことになっています (他のプリンタ言語に関しては, プリンタのドキュメントをご覧くだ さい). ジョブの最初の2文字がこれならば, PostScript である ことが分かります. したがって, ジョブのそれ以降の部分をプリンタに直 接送ることができます (訳注:PostScript では, % 以降はコメントとして扱われるので, 最初の %! の行を 読み捨てても問題はない). 最初の2文字が %! でない場 合は, フィルタはテキストを PostScript に変換し, その結果を 使って印字をおこないます. この作業をどうやってやればよいのでしょうか. シリアルポートにプリンタを接続した場合は, lprps をインス トールすることをお勧めします. lprps は PostScript 用のフィルタで, プリンタとの双方向通信をおこないます. このフィルタでは, プリンタか らの冗長な情報を得ることで, プリンタの状況を示すファイルが更新 されていきます. したがって, ユーザや管理者は (トナー残量少紙詰まりといった) プリンタの状況を正確に知ることができます. しかし, もっと重要なことは, psif と呼ばれるプログラムが 含まれているということです. このプログラムは, 入力されたジョブ がプレインテキストかどうかを検出し, これを PostScript に変 換するために, textps (lprps に付属する別のプログラ ム) を呼び出します. そして, このジョブをプリンタに送るために, lprps が使われます. - lprps は FreeBSD - のポート集に含まれています (「 - ポートコレクション」を参照してください). + lprps は FreeBSD Ports Collection + に含まれています (Ports Collection + を参照してください). もちろん,自分自身でプログラムを取ってきて, コンパイルし, インストールす ることもできます. lprps をインストールした後は, lprps の一部である psif - プログラムのパス名を指定する だけです. ポート集から + プログラムのパス名を指定する だけです. Ports Collection から lprps をインストールしたときは, /etc/printcap の中のシリアル接続した PostScript プリンタのエントリに対して, 次を使ってください. :if=/usr/local/libexec/psif: LPD にプリンタをリード・ライトモードでオープンさせるために, rw 項目も指定すべきです. パラレルポートに接続したプリンタの場合 (すなわち, lprps が 必要としているプリンタとの双方向通信ができない), テキストフィ ルタとして次のシェルスクリプトを使うことができます. #!/bin/sh # # psif - Print PostScript or plain text on a PostScript printer # Script version; NOT the version that comes with lprps # Installed in /usr/local/libexec/psif # read first_line first_two_chars=`expr "$first_line" : '\(..\)'` if [ "$first_two_chars" = "%!" ]; then # # PostScript job, print it. # echo "$first_line" && cat && printf "\004" && exit 0 exit 2 else # # Plain text, convert it, then print it. # ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0 exit 2 fi 上記のスクリプトにおいて, textps はプレインテキストから PostScript へ変換するために別にインストールしたプログラム です. テキストから PostScript へ変換するのには, お好みのどんなプロ - グラムでも使うことができます. FreeBSD の ポート集 (「ポートコレクション」 + グラムでも使うことができます. FreeBSD Ports Collection + (Ports Collection を参照してください) には, a2ps と呼ばれるテキストから PostScript に変換するプログラムが 入っています. 訳注: 上記スクリプトでは, 先頭の行を読み込むために read を使っていますが, 困ったことに, read は読み込んだ文字列の先頭 の空白文字を取り除いてしまいます. 従って, これらの空白文字は印 字されないことになり, 印字結果がファイルのイメージと異なる場合 が出てきます. この事情は csh を利用した場合でも変わりません. 仮に, 先頭の空白文字を除去しない read コマンドを作ったとしても, 「echo $first_line」の $first_line 変数の内容をシェルが展開す る際に $first_line の先頭の空白文字が失われるため, 問題の解決 にはなりません. 残念ながら, 訳者はこの問題をシェルプログラムだ けで解決する方法をしりません. perl か C 言語の力を借りないと解 決できないと思います. 非 PostScript プリンタで PostScript をシミュレートする PostScript は質の高い組版と印字をおこなうための事実 上の標準です. しかしながら, PostScript は, 高価な標 準です. ありがたいことに, Alladin Enterprises から Ghostscript と呼ばれる, PostScript 互換の動作をするフリー のプログラムが出されていて, FreeBSDで動きます. Ghostscript はほとんどの PostScript ファイルを読むことができ, これらの 各ページをたくさんのブランドの非 PostScript プリンタを含む 様々なデバイス用に変換することができます. Ghostscript をイン ストールし, プリンタ用の特別なテキストフィルタを使うことによっ て, 非 PostScript プリンタをあたかも本物の PostScript プリンタであるかのように動作させることができます. - Ghostscript はポート集に入っていますので, + Ghostscript は FreeBSD Ports Collection に入っていますので, そこからインストール することができます. また, 自分でソースプログラムを持ってきて, コンパイルし, インストー ルすることもできます. この作業はとても簡単にできます. PostScript プリンタをシミュレートさせる場合は, テキストフィ ルタに PostScript ファイルを印字しようとしているかどうかを 検出させます. PostScript ファイルでない場合は, フィルタは そのファイルを直接プリンタに送ります (訳注:テキストファイルを直 接印字できない場合は, もちろん, 変換フィルタを通す必要がありま す). PostScript の場合は, まず, Ghostscript を使い, ファ イルをそのプリンタが理解できる形式へ変換します. 次の例のスクリプトは, Hewlett Packard DeskJet 500 プリンタ用 のテキストフィルタです. 他のプリンタで用いるときは, 引数を gs (Ghostscript) コマンドに変えてくだ さい. (gs -h と入力すると, 現在インストールされている Ghostscript でサポートされているデバイスのリストが得られます). #!/bin/sh # # ifhp - Print Ghostscript-simulated PostScript on a DeskJet 500 # Installed in /usr/local/libexec/hpif # # Treat LF as CR+LF: # printf "\033&k2G" || exit 2 # # Read first two characters of the file # read first_line first_two_chars=`expr "$first_line" : '\(..\)'` if [ "$first_two_chars" = "%!" ]; then # # It is PostScript; use Ghostscript to scan-convert and print it. # # Note that PostScript files are actually interpreted programs, # and those programs are allowed to write to stdout, which will # mess up the printed output. So, we redirect stdout to stderr # and then make descriptor 3 go to stdout, and have Ghostscript # write its output there. Exercise for the clever reader: # capture the stderr output from Ghostscript and mail it back to # the user originating the print job. # exec 3>&1 1>&2 /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \ -sOutputFile=/dev/fd/3 - && exit 0 # /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 -sOutputFile=- - \ && exit 0 else # # Plain text or HP/PCL, so just print it directly; print a form # at the end to eject the last page. # echo $first_line && cat && printf "\033&l0H" && exit 0 fi exit 2 最後に, if 項目を通して, LPD にこのフィルタを教えてやる 必要があります. :if=/usr/local/libexec/hpif: これでおしまいです. lpr plain.text とか lpr whatever.ps と入力してみましょう. どちらも正常に印字されるは ずです. 訳注: 日本語を印字する場合は, 日本語対応の Ghostscript が必要で す. 日本語対応版の - Ghostscript もポート集に入っているはずです. + Ghostscript も Ports Collection に入っています. 変換フィルタ プリンタ設定導入編」 に書かれた簡単な設定が完了したら, 最初に, やってみたいと思 うことは, 多分(プレイン ASCII テキストに加えて) 好みのファイル形式 のための変換フィルタをインストールすることでしょう. なぜ, 変換フィルタをインストールするのか? 変換フィルタによって, 様々な種類のファイルを印字するこ とが簡単になります. 例えば, TeX 組版システムでたくさんの仕事 をしたと仮定しましょう. そして, PostScript プリンタが接続 されているとします. すると, TeX で DVI ファイルを作成する度に, DVI ファイルを印字するために, これを PostScript ファイルに 変換する必要があります. このコマンドは次のようになるでしょう. &prompt.user; dvips seaweed-analysis.dvi &prompt.user; lpr seaweed-analysis.ps DVI ファイル用の変換フィルタがインストールしてあると, LPD に 変換を肩代わりさせることで毎回毎回 おこなわなければならなかった面倒 な変換作業を省くことができます. つまり, DVI を生成したら, 次のような1回のコマンド入力だけで, これが印字されます. &prompt.user; lpr -d seaweed-analysis.dvi LPD に DVI ファイルの変換をさせるためには, オプション を指定します. 変換オプションのリストは「 整形と変換に関するオプション」 に載せてあります. 変化のオプションのそれぞれをプリンタに サポートさせるためには, 変換フィルタをインストールし, そのパス名を /etc/printcap の中で指定しなくてはなりません. 変換フィ ルタは, プレインテキストを印字する代わりに, フィルタはファイル をプリンタが理解できる形式に変換するところを除けば, 「プリンタ の簡単な設定」で説明したテキストファイル (「 テキストフィルタのインストール」 を見て下さい) に似ています. どの変換フィルタをインストールすべきか? 使いたいと思う変換フィルタをインストールすべきです. DVI のデータを頻繁に印字するならば, DVI 変換フィルタ をインストールするのが適切でしょう. 印字しなくてはなら ない troff を大量に抱えている場合は, 多分, troff フィ ルタが欲しくなるはずです. 次の表は, LPD で動作するフィルタと, /etc/printcap ファイルでのエントリする項目, そして, lpr コマンドで呼び出す方法をまとめたもの です. ファイル形式 /etc/printcap項目 lpr オプション cifplot cf DVI df plot gf ditroff nf FORTRAN text rf troff tf raster vf プレインテキスト if なし, , または 先の例のように, lpr -d を使うためには, 出力先の プリンタの /etc/printcap 内のエントリで, df 項目が必要であることが分かります. 反論はあるかも知れませんが, FORTRAN テキストや plot のような形式は, 多分, 廃れ てていくでしょう. あなたのサイトで, 自前のフィルタをイ ンストールするだけで, プリントオプションのいくつか, あ るいは, 全部に新しい意味を与えることができます. 例えば, Prinerleaf ファイル (Interleaf デスクトップパブリッシン グプログラムによるファイル) を直接印字したいとします. そして, Printerleaf 用の変換フィルタを gf 項目で 指定したパスにインストールすれば, lpr - -g の意味 は“Printerleaf - ファイルを印字する”意味だとユーザに教 + -g の意味 はPrinterleaf + ファイルを印字する意味だとユーザに教 えることができます. 変換フィルタのインストール 変換フィルタは FreeBSD の基本システムのインストールとは別 にインストールするプログラムなので, 変換フィルタは, 多 分, /usr/local ディレクトリの下に置くべ きです. フィルタは LPD だけが実行する特別なプログラム, すなわち, 一般ユーザが実行する必要すらない プログラムなので, /usr/local/libexec ディレ クトリに置くのが普通です. 変換フィルタを使用可能にするためには, /etc/printcap の目的のプリンタの適切な項目に フィルタがあるパス名を指定します. DVI 変換フィルタをプリンタ bamboo のエントリに加 えてみましょう. プリンタ bamboodf 項目を 新たに加えた/etc/printcap ファイルの例を以下 に再掲します. # # /etc/printcap for host rose - added df filter for bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: DVI フィルタは /usr/local/libexec/psdf という 名前のシェルスクリプトです. このスクリプトは次のように なっています. #!bin/sh # # psdf - DVI to PostScript printer filter # Installed in /usr/local/libexec/psdf # # Invoked by lpd when user runs lpr -d # exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@" このスクリプトでは, dvips をフィルタモード (引数 ) で, 標準入力上で起動しています. 標準入力は印字 するジョブです. それから, PostScript プリンタ用フィ ルタ lprps (これについては「 プレインテキストのジョブを PostScript プリンタで印字する」 を参照してください) を LPD に与えられた引数を付けて起動 します. lprps はこれらの引数を印字されたページ分 の課金をおこなうために使われます. 変換フィルタのその他の例 変換フィルタのインストールには決まったステップがないの で, その代わりに, 例をもっと挙げることにします. これを, 自分でフィルタを作る際のガイドにしてください. 適当な例が あったら, それをそのまま使ってください. 次のスクリプト例は, Hewlett Packard LaserJet III-Si の ための, raster (ええと・・実は, GIF ファイル) 用の変 換フィルタです. #!/bin/sh # # hpvf - Convert GIF files into HP/PCL, then print # Installed in /usr/local/libexec/hpvf PATH=/usr/X11R6/bin:$PATH; export PATH giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \ && exit 0 \ || exit 2 ここでは, GIF ファイルから PNM (portable anymap) 形式 に変換し, 次に PGM (portable graymap) 形式に変換してか ら, LaserJet/PCL-互換データに変換しています. 上記のフィルタを使うプリンタのためのエントリを付け加え た /etc/printcap ファイルは次のようになります. # # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif:\ :vf=/usr/local/libexec/hpvf: 次のスクリプトは, PostScript プリンタ bamboo のための groff 組版システムの troff データのための変換 フィルタです. #!/bin/sh # # pstf - Convert groff's troff data into PS, then print. # Installed in /usr/local/libexec/pstf # exec grops | /usr/local/libexec/lprps "$@" 上記のスクリプトではプリンタとの通信をおこなうため, lprps をまた利用しています. プリンタがパラレルポー トに接続されている場合は, 代わりに, 次のスクリプトを使 うかもしれません. #!/bin/sh # # pstf - Convert groff's troff data into PS, then print. # Installed in /usr/local/libexec/pstf # exec grops これで完成しました. 次に, フィルタを使用可能にするため に /etc/printcap に加える必要があるエントリを 示します. :tf=/usr/local/libexec/pstf: 次の例をみたら, FORTRAN のベテランは赤面するかもしれ ません. この FORTRAN テキストフィルタは, プレインテキ ストを直接印字できるすべてのプリンタで利用できます. この フィルタをプリンタ teak にインストールすることに しましょう. #!/bin/sh # # hprf - FORTRAN text filter for LaserJet 3si: # Installed in /usr/local/libexec/hprf # printf "\033&k2G" && fpr && printf "\033&l0H" && exit 0 exit 2 そして, このフィルタを使用可能にするため, 以下の行を /etc/printcap のプリンタ teak のエントリ に加えます. :rf=/usr/local/libexec/hprf: これが最後の, そして, 若干複雑な例です. 前に紹介した LaserJet プリンタ teak に, DVI フィルタを加える ことにしましょう. 最初に, 簡単な部分をおこないます. すなわ ち, DVI フィルタの位置を /etc/printcap に書 き加えます. :df=/usr/local/libexec/hpdf: さて, 難しい部分であるフィルタの作成をおこないます. このた めに, DVI から LaserJet/PCL - への変換プログラムが必要 です. FreeBSD のポート集 (「ポートコレクション」 + への変換プログラムが必要 です. FreeBSD の Ports Collection + (Ports Collection を参照してください) には, それがあ ります. dvi2xx というのがそのパッケージの名前で す. これをインストールすると, 必要なプログラム dvilj2p が使えます. このプログラムは DVI を LaserJet IIp, LaserJet III, そして LaserJet 2000 の互 換コードへ変換してくれます. dvilj2p はフィルタ hpdf を極めて複雑にしてい ます. なぜなら, dvilj2p は標準入力からデータを読 み込むことができないからです. このプログラムを働かせる ためには, ファイル名が必要です. もっと悪いことに, ファ イル名は .dvi で終わっている必要があり, 標準入力 の代わりに, /dev/fd/0 を使うのは問題がありま す. この問題は, (.dvi で終わる) 一時的なファイル名 から/dev/fd/0 に (シンボリックな) リンクを張る ことで回避することができます. これで, dvilj2p に 強制的に標準入力からデータを 読み込ませることができます. もう1つの問題は, 一時的なリンクを張るために /tmp ディ レクトリを使うことができないという事実です. シンボリッ クリンクはユーザ, グループが bin であるユーザに所 有されています. フィルタはユーザ daemon として起 動します. そして, /tmp ディレクトリはスティッ キービットが立っています. フィルタはリンクを作ることが できます. しかし, リンクは別のユーザに所有されているた め, 作業が終了したとき, このリンクを削除することができ ません. その代わりに, シンボリックリンクは現在の作業ディレクト リ, すなわち, スプーリングディレクトリ (/etc/printcapsd 項目で指定する) に作 ることにします. フィルタが作業するにはここの場所は完璧 な場所で, なぜなら, 特に, スプーリングディレクトリのディ スクの空き容量は (ときどき) /tmp ディレクトリ よりもたくさんあるからです. 以下に示すのが最後のフィルタです. #!/bin/sh # # hpdf - Print DVI data on HP/PCL printer # Installed in /usr/local/libexec/hpdf PATH=/usr/local/bin:$PATH; export PATH # # Define a function to clean up our temporary files. These exist # in the current directory, which will be the spooling directory # for the printer. # cleanup() { rm -f hpdf$$.dvi } # # Define a function to handle fatal errors: print the given message # and exit 2. Exiting with 2 tells LPD to do not try to reprint the # job. # fatal() { echo "$@" 1>&2 cleanup exit 2 } # # If user removes the job, LPD will send SIGINT, so trap SIGINT # (and a few other signals) to clean up after ourselves. # trap cleanup 1 2 15 # # Make sure we are not colliding with any existing files. # cleanup # # Link the DVI input file to standard input (the file to print). # ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0" # # Make LF = CR+LF # printf "\033&k2G" || fatal "Cannot initialize printer" # # Convert and print. Return value from dvilj2p does not seem to be # reliable, so we ignore it. # dvilj2p -M1 -q -e- dfhp$$.dvi # # Clean up and exit # cleanup exit 0 自動変換: その他の変換フィルタ ここまでに述べてきたフィルタによって, 印字環境の能率が 上がったことと思います. しかし, これはどのフィルタを使 うかを ( &man.lpr.1; のコマンドライン上で) ユーザが指定しな くてはならないという代価を支払って実現されています. コ ンピュータの事情にあまり詳しくないユーザにとって, フィ ルタのオプションを指定させられるということはいらいらさ せられるものになるでしょう. 更に悪いことに, 間違ったフィ ルタオプションを指定されると, 間違った形式のファイルが そのフィルタに適用されることになり, その結果, 何百枚も の紙を掃き出すことになるかもしれません. そのような結果になるならば, 変換フィルタをインストール するよりもむしろ, テキストフィルタ (これがデフォルトフィ ルタなので) に印字するよう要求されたファイルの形式を検 出させ, 自動的に, 適切な変換フィルタを起動するようにし たいと思うかもしれません. ここでは file コマンド のようなツールを役立たせることができます. もちろん, いくつかの ファイル形式の違いを見分けることは難しい ことでしょう. そして, もちろん, それらのファイルに対し ては, 変換フィルタを提供するだけで済ますこともできるの です. - FreeBSD のポート集には, apsfilter + FreeBSD Ports Collection には, apsfilter と呼ばれる自 動変換をおこなうテキストフィルタがあります. このフィルタは プレインテキスト, PostScript, DVI ファイルを検 出し, 適当な変換をおこなった後, データを印字することができ ます. 出力フィルタ LPD スプーリングシステムでは, ここまでにまだ取り上げていな いフィルタ形式, 出力フィルタをサポートしています. 出力 フィルタは, テキストフィルタのように, プレインテキスト のみを印字するために意図されたものですが, 非常に簡単化 されています. テキストフィルタを用いずに, 出力フィルタ を使っている場合は, 次のようになります. LPD はジョブ中の各ファイルに一度ではなく, ジョブ 全体に対して一度だけ出力フィルタを起動します. LPD は出力フィルタに対し, ジョブ中のファイルの先 頭や末尾を特定するための対策を一切 おこなっていません. LPD はユーザのログイン名やホスト名をフィルタに渡 しません. したがって, 課金の処理をおこなうことは考えてい ません. 実際, 出力フィルタには, 以下2つの引数しか与え られません. filter-name -wwidth -llength ここで, width は対象となるプリンタの pw 項 目, lengthpl 項目に指定された数です. 出力フィルタの簡便さに誘惑されてはいけません. もし, ジョ ブ中のそれぞれのファイルに別のページ番号を付加しようと しても, 出力フィルタはうまく動作しないでしょう. そのような動作を期待しているならば, (入力フィルタとし ても知られている) テキストフィルタを使ってください. 詳 しくは, 「 テキストフィルタのインストール」をご覧ください. さらに, 出力 フィルタは, 実のところ, もっと複雑になっています. まず, 特殊なフラグ文字を検出するために, フィルタに送ら れてくるバイトストリームを検査する必要があります. また, LPD に代わって, 自分自身にシグナルを送らなければなりま せん. しかしながら, ヘッダページの印字をおこないたい場合, また, エスケープシーケンスやヘッダページを印字できるようにす るその他の初期化文字列を送信する必要がある場合, 出力ファ イルが必要です. 1台のプリンタに対し, LPD では出力フィルタとテキスト, または, 他のフィルタを両方使うことができます. このよう な場合, LPD はヘッダページ (「 ヘッダページ」 を参照してください) だけを印字させるために, 出 力フィルタを起動させます. それから LPD では, アウトプッ トフィルタに2バイトの文字 (ASCII 031 の次に ASCII 001) を送ることで, 出力フィルタが自力で停止することを 期待しています. 2バイト (031, 001) が出力フィルタに送られ たとき, 出力フィルタは自分自身にシグナル SIGSTOP を送 ることによって停止するべきです. LPD がその他のフィル タの起動を完了したとき, LPD は出力フィルタにシグナル SIGCONT を送ることで, 出力フィルタを再起動させます. 出力フィルタがあり, テキストフィルタがない場合, LPD はプレインテキストのジョブをおこなう際に, 出力フィル タを使います. 前述したように, 出力フィルタでは, ジョブ 中の各ファイルの並びの間に FROM FEED 文字や紙を排出す る他の文字を入れることはしません. この動作は多分, あな たが求めているものとは 異なっているでしょう. ほと んどすべての場合において, テキストフィルタが必要とされる はずです. プログラム lpf は, テキストフィルタの項で既に紹介 しましたが, 出力フィルタとしても動作させることができま す. もし, 簡便で極悪な出力フィルタが必要で, かつ, バイ トストリームを検査したりシグナルを送るコードを書きたく ないときには, lpf をお試しください. あるいは, プ リントが要求する初期化コードを送るために, lpf を シェルスクリプトに包んで使うこともできます. テキストフィルタ <command>lpf</command> プログラム /usr/libexec/lpr/lpf は, FreeBSD の バイナリ配布に付属しているテキストフィルタ (入力フィル タ) で, 出力を字下げしたり (lpr -i でジョブが入力さ れたとき), 文字を未処理のままプリンタに送ったり (lpr -l でジョブが入力されたとき), ジョブ中のバッ クスペースやタブの印字位置を調節したり, 印字したページ に対して課金したりすることができます. また, このフィル タは出力フィルタとしても動作させることができます. lpf は多くの印字環境において使用することに適して います. このフィルタには, プリンタに初期化文字列を送る 機能はありませんが, 必要とされる初期化をおこない, それから lpf を実行させるためのシェルスクリプトを作成する のはたやすいことです. lpf に対して, 印字ページへの課金を正確におこなわせる ためには, /etc/printcap ファイルの中の pwpl の項目に正確な値を入れておく必要が あります. これらの値は, どのくらいの量のテキストがペー ジにフィットするか, また, ユーザのジョブが何ページある のかを調べるために使われます. プリンタの課金についての 詳しい情報については, 「 プリンタの利用に対する課金」をご覧ください. ヘッダページ あなたが管理するシステムのユーザが たくさんおり, ユー ザ全員が様々なプリンタを使用する場合, 多分, 必要悪である ヘッダページ を印字させることを検討したいと思うかもしれま せん. ヘッダページは, バナー とか バーストページ としても知ら れていますが, 出力されたジョブが誰によるものなのかを特定させる 働きがあります. 印字結果の山の中において, ユーザのジョブによっ て印字された本物のドキュメント部分よりも際立たせるために, ヘッ ダページは, 通常, 多分, 縁が装飾されている大きな太文字で印字さ れます. ヘッダページにより, ユーザは自分が出したジョブがどこに あるのかをすばやく見つけることができます. ヘッダページの欠点は, 明らかに, すべてのジョブに対して, 紙が1枚余分に印字されるという ことです. この紙の有効期間は短く, 2〜3 分も続きません. 最終的に, これらの紙は再利用紙入れの中か くずの山に入れられることでしょう. (ヘッダページはジョブ中の各ファイル毎に印字されるのではなく, ジョブ毎に印字されるということに注意してください. したがって, 紙の 消費はそれほどひどくはないかもしれません). もし, プリンタがプレインテキストを直接印字できるならば, LPD システムは印字物に対して自動的にヘッダページを付けることが できます. PostScript プリンタを使っている場合は, ヘッダペー ジを生成する外部プログラムが必要になります. これについては, 「PostScript プリンタでのヘッダページ」をご覧ください. ヘッダページの印字を許可する プリンタ設定導入編 」 では, /etc/printcap ファイルの sh (``suppress header'' : - “ヘッダを供給しない” という意味) を指定して, + ヘッダを供給しないという意味) を指定して, ヘッダペー ジの印字を止めていました. プリンタでのヘッダページの印字を許可 するには, sh 項目を取り除くだけよい訳です. とても簡単そうに見えるけど, 本当かな? それは本当です. プリンタに初期化文字列を送るための出力フィ ルタを用意しなくてはならないかもしれません. 次に, Hewlett Packard PCL 互換プリンタの例を挙げます. #!/bin/sh # # hpof - Output filter for Hewlett Packard PCL-compatible printers # Installed in /usr/local/libexec/hpof printf "\033&k2G" || exit 2 exec /usr/libexec/lpr/lpf of 項目に出力フィルタのパス名を指定してください. 詳細につ いては, 「出力フィルタ」 をご覧ください. 次に, 以前紹介したプリンタ teak のための /etc/printcap ファイルの例を示します. ここでは, ヘッ ダページの印字を許可し, 上記の出力フィルタを追加しました. # # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif:\ :vf=/usr/local/libexec/hpvf:\ :of=/usr/local/libexec/hpof: さて, ユーザが teak からジョブを印字させたとき, それぞれ のジョブ毎にヘッダページが印字されます. もし, ユーザが印字物を 探すのに時間を費やしたいと思うなら, lpr -h によってジョ ブを入力することで, ヘッダページの印字を止めることができます. これ以外の &man.lpr.1; のオプションについては, 「 ヘッダページ用オプション」 をご覧ください. LPD では, ヘッダページの最後に, FORM FEED 文字が印 字されます. プリンタに紙排出をさせるために, 別な文字, もしくは, 別な文字列が利用されている場合は, /etc/printcap 中の ff 項目で指定することができます. ヘッダページを制御する ヘッダページの印字が許可されていると, LPD は 長いヘッ ダを作ります. これには, 紙全面に大きな文字でユーザ名, ホスト 名, ジョブ名が書かれています. 次に, このヘッダページの例を示 します (kelly が ジョブ名 outline を rose というホストから印字 された場合). k ll ll k l l k l l k k eeee l l y y k k e e l l y y k k eeeeee l l y y kk k e l l y y k k e e l l y yy k k eeee lll lll yyy y y y y yyyy ll t l i t l oooo u u ttttt l ii n nnn eeee o o u u t l i nn n e e o o u u t l i n n eeeeee o o u u t l i n n e o o u uu t t l i n n e e oooo uuu u tt lll iii n n eeee r rrr oooo ssss eeee rr r o o s s e e r o o ss eeeeee r o o ss e r o o s s e e r oooo ssss eeee Job: outline Date: Sun Sep 17 11:04:58 1995 LPD はこのテキストの終わりに FROM FEED 文字を加えます ので, ジョブは新しいページから開始されます (ただし, /etc/printcap で出力先のプリンタのエントリに sf (suppress form feeds) が指定されているときはこ の限りではありません). お望みならば, LPD に短いヘッダページを出力させる こともできます. この場合は, /etc/printcap ファ イルの中で sb (short banner) を指定してください. ヘッダページは次のようになります. rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995 デフォルトでは, LPD はヘッダページを最初に印字し, 次 にジョブの印字をおこないます. この順番を逆にするときは, /etc/printcaphl (header last) を指定 してください. ヘッダページに対する課金 LPD に備わっているヘッダページ出力機能を使うと, 入力され たジョブに対して課金をおこなうことができても, ヘッダページは無 料で提供しなくてはならない, という特有のやり方を強要されます. なぜでしょうか. 出力フィルタは単なる外部プログラムなので, 課金をするための制御 をおこなうとすれば, それはヘッダページを印字するときですが, 出力フィ ルタには, ユーザ名とホスト名 の情報や課金情報を格納するファ イルがどれな のかということが知らされません. それゆえ, 出力ファイルには, 誰 にプリンタ利用の課金をおこなえばよいのかが分からないのです. テキス トフィルタやその他の変換フィルタ (これらのフィルタはユーザやホ ストの情報が知らされます) - が出力ページの枚数に“1ページ分水増し - する”だけでは十分ではありません. なぜなら, ユーザは + が出力ページの枚数に1ページ分水増しするだけでは十分ではありません. + なぜなら, ユーザは lpr -h に よってヘッダページの出力を止めることができるからです. やみくも に1ページを水増しすると, 印字されてもいないヘッダページに対する 料金をとることになります. 基本的に, lpr -h は環境に優し い心を持つユーザに好まれるオプションですが, これを使うように奨 励することもできません. 各々のフィルタに独自のヘッダページを生成させる (その結果, ヘッ ダページに課金することができる) という方法でも十分であると はいえません. この場合, LPD はフィルタに の情報を送 りませんので, lpr -h によってヘッダページを印字しないオ プションを選択したとしても, 依然としてヘッダページは印字され, その分の課金がおこなわれてしまいます. では, どのような選択肢があるのでしょうか. ヘッダページへの課金に関しては, 次のことができます. LPD のやり方を受け入れ, ヘッダページは無料とする. - LPRng や PLP といった LPD の代替品をインストール - する. LPD と入れ替えが可能な他のスプーリングソフトウェ - アに関しては, 「 - 標準スプーラの代替品」をご覧ください. + LPRng などの LPD の代替品をインストールする. + LPD と入れ替えが可能な他のスプーリングソフトウェアに関しては, + 標準スプーラの代替品をご覧ください. スマートな 出力フィルタを作成する. 通常, 出力 フィルタはプリンタを初期化するか, 単純な文字列変換をす る程度の働きしかしません. (テキスト (入力) フィルタがな い場合) 出力フィルタはヘッダページとプレインテキストの 印字をおこなうのに適しています. プレインテキストを印字するためのテキストフィルタがない 場合, LPD はヘッダページを印字するためだけの目的で出 力フィルタを起動します. そして, LPD が生成するヘッダ ページのテキストを解析することにより, 出力フィルタはヘッ ダページに課金するために必要なユーザ名とホスト名を取得 することができます. この方式の唯一の問題点は, 出力フィ ルタは課金情報を格納するデータファイルの名前を知ることが できないということです (af 項目で指定されたファイ ル名は出力ファイルに渡されません). しかし, 既知の 名前の課金データファイルを使うのならば, その名前を出 力フィルタのプログラム中に埋め込むことができます. 解析の手順を簡単にするためには, /etc/printcapsh 項目 (短いヘッダを指 定) を使うとよいでしょう. そしてまた, ここまでの方法は少なからぬトラブルを生じさ せるかもしれません. そうなれば, もちろんユーザはヘッダペー ジを無料で 提供してくれる気前のよいシステム管理者に感謝することで しょう. PostScript プリンタでのヘッダページ これまでに述べたように, LPD ではプレインテキストのヘッ ダページをたくさんのプリンタに合うように生成することが できます. 残念ながら, PostScript プリンタは, プレインテキストを直接 印字することができません. ですから, LPD のヘッダページ機能は まったく役に立たない, あるいはほとんどの場合で役に立ちません. ヘッダページを出力するための自明な方法の1つに, すべての変換フィ ルタとテキストフィルタにヘッダページを生成させる 方法があります. フィルタは, 適切なヘッダページを生成するために, ユーザ名とホス ト名の引数を使うべきです. この方法の欠点は, いつでも, lpr -h によってジョブが入力された場合でさえも, ヘッダページが印字 されるということです. この方法で試してみましょう. 次のスクリプトは, 3つの引数 (ユーザ のログイン名, ホスト名, ジョブ名) をとり, 簡単な PostScript 用 のヘッダページを生成します. #!/bin/sh # # make-ps-header - make a PostScript header page on stdout # Installed in /usr/local/libexec/make-ps-header # # # These are PostScript units (72 to the inch). Modify for A4 or # whatever size paper you are using: # page_width=612 page_height=792 border=72 # # Check arguments # if [ $# -ne 3 ]; then echo "Usage: `basename $0` <user> <host> <job>" 1>&2 exit 1 fi # # Save these, mostly for readability in the PostScript, below. # user=$1 host=$2 job=$3 date=`date` # # Send the PostScript code to stdout. # exec cat <<EOF %!PS % % Make sure we do not interfere with user's job that will follow % save % % Make a thick, unpleasant border around the edge of the paper. % $border $border moveto $page_width $border 2 mul sub 0 rlineto 0 $page_height $border 2 mul sub rlineto currentscreen 3 -1 roll pop 100 3 1 roll setscreen $border 2 mul $page_width sub 0 rlineto closepath 0.8 setgray 10 setlinewidth stroke 0 setgray % % Display user's login name, nice and large and prominent % /Helvetica-Bold findfont 64 scalefont setfont $page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto ($user) show % % Now show the boring particulars % /Helvetica findfont 14 scalefont setfont /y 200 def [ (Job:) (Host:) (Date:) ] { 200 y moveto show /y y 18 sub def } forall /Helvetica-Bold findfont 14 scalefont setfont /y 200 def [ ($job) ($host) ($date) ] { 270 y moveto show /y y 18 sub def } forall % % That is it % restore showpage EOF そして, 変換フィルタやテキストフィルタがそれぞれ, 最初にこのス クリプトを起動することで, ヘッダページが出力され, それから, ユー ザのジョブの印字をおこないます. 次に, このドキュメントの始めのほう で紹介した DVI 変換フィルタを, ヘッダページを印字するように変 更したものを示します. #!/bin/sh # # psdf - DVI to PostScript printer filter # Installed in /usr/local/libexec/psdf # # Invoked by lpd when user runs lpr -d # orig_args="$@" fail() { echo "$@" 1>&2 exit 2 } while getopts "x:y:n:h:" option; do case $option in x|y) ;; # Ignore n) login=$OPTARG ;; h) host=$OPTARG ;; *) echo "LPD started `basename $0` wrong." 1>&2 exit 2 ;; esac done [ "$login" ] || fail "No login name" [ "$host" ] || fail "No host name" ( /usr/local/libexec/make-ps-header $login $host "DVI File" /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args このフィルタがユーザ名やホスト名を決定するために 引数リストをど のように解析しなくてはならないかという点に注意してください. こ の解析方法は他の変換フィルタに対しても同様です. しかしながら, テキストフィルタについては, 引数の設定が少し異なっています (こ れについては, 「 フィルタはどのように機能しているか」 をご覧ください). 前述の通り, 上記の手法は, 極めて単純なのにも関らず, lpr - で“ヘッダページを印字しない”オプション + でヘッダページを印字しないオプション ( オプション) が 使えなくなっています. ユーザが森林資源を (あるいは, ヘッダペー ジが課金されているならば, その僅かな金額を), 節約したいと望んでい る場合でも, すべてのフィルタがすべてのジョブ毎にヘッダページを印字 することになっているので, 節約することはできません. ジョブ毎に印字されるヘッダページを ユーザが抑制できるようにする ためには, 「 ヘッダページに対する課金」で紹介したトリックを 使う必要があります. すな わち, LPD が生成するヘッダページの解析をおこない, PostScript 版のヘッダページを出力させる出力フィルタを作るのです. この場 合, ユーザが lpr -h でジョブを入力すると, LPD はヘッダペー ジを生成しなくなり, また, 出力フィルタも起動されません. そうで ないならば, 作成した出力フィルタが LPD からのテキストを読み込 み, ヘッダページを印字する適当な PostScript のコードがプリ ンタに送られるでしょう. PostScript プリンタがシリアルポートに接続されている場合, 出力フィルタとして lprps を, 上記の動作をおこなうものとして psof を使うことができます. ただし, psof はヘッダペー ジに対して課金をおこないませんので注意してください. リモートプリンタからの出力 FreeBSD では, ネットワーク越しの印字, すなわち, ジョブをリ モートプリンタに送ることをサポートしています. リモートプリンタ からの出力をするには, 一般に, 次の2つを参照してください. リモートホストに接続されたプリンタにアクセスする方 法. プリンタがあるホストのシリアル, または, パラレルイ ンタフェースに接続されている場合, ネットワーク上の他の ホストからこのプリンタにアクセスできるように LPD を設 定します. 「リモートホストに 接続されたプリンタ」 でどのよう にするかを説明します. ネットワークに直接接続されているプリンタにアクセ スする方法. プリンタに, 旧来のシリアル, または, パラレ ルインタフェースに加えて (もしくは, これらに代わって) ネッ トワーク用のインタフェースがある場合. そのようなプリン タは次のように動作するでしょう. そのプリンタが LPD のプロトコルを理解でき, リモー トホストからのジョブを キューに入れることさえできる場合. この場合, プリンタは, LPD が起動している一般のホスト のように振る舞います. そのようなプリンタを設定するため に, 「 リモートホストに接続されたプリンタ」 と同様の手 順をおこなってください. そのプリンタが, データストリームによるネットワー ク接続をサポートしている場合. この場合, ネットワーク上 - の1つのホストとしてプリンタを“接続”します. + の1つのホストとしてプリンタを接続します. このホス トは, ジョブをスプーリングする責任を負い, スプーリング されたジョブはプリンタに送られます. そのようなプリンタ をインストールするためのいくつかの提案が「 ネットワークにおけるデータストリームの インタフェースを持つプリンタ」にあります. リモートホストに接続されたプリンタ LPD スプーリングシステムでは LPD (または LPD 互換のシス テム) が起動している他のホストへジョブを送る機能が始めからサポー トされています. この機能により, あるホストに接続されたプリンタ へ, 他のホストからアクセスできるようになります. また, LPD プ ロトコルを理解するネットワークインタフェースを持った プリンタに 対しても, この機能は働きます. リモートプリンタへの出力を許可するためには, 最初に, あるホスト (これを, プリンタホストと呼びます) にプリンタを接続します. そして, 「 プリンタ設定導入編」 に書かれた簡単なプリンタの設定をおこなってください. 必要ならば, 「プリンタ設定上級編」 にあ る, 更に進んだ設定をおこなってください. そして, そのプリンタをテス トしてうまく動作することを確認し, LPD に許可した機能がうまく働 くかどうかを見てください. さらに ローカルホストプリンタホスト の LPD サービスの使用を 許可されているか確認して 下さい (「 リモートホストからのプリンタの利用を制限する 」参照). LPD 互換のネットワークインタフェースを持つプリンタを使用してい る場合は, そのプリンタ自身が以下で説明する プリンタホスト になります. そして, プリンタ名とは, そのプリンタに設定し た名前のことを指します. これについては, プリンタ, および (また は), プリンタのネットワークインタフェースに付属するドキュメン トを参照してください. ヒューレット・パッカード社の Laserjet シリーズを使用している場合には, プリンタ名を text とすると, 自動的に LF から CRLF への変換が行なわれます. そのため, hpif スクリプトは必要ありません. 次に, そのプリンタにアクセスしたいと思っている他ホストにおいて, そのホストの /etc/printcap ファイルに次にあげるエント リを作ります. 名前のエントリ. どんな名前でもよいのですが, 簡単 のため, 多分, プリンタホストで設定されたプリンタ名や別 名と同じものを使いたいと思うでしょう. lp 項目で指定されるデバイスは明示的に空にす る (:lp=: とする). スプーリングディレクトリを作成し, sd 項目で その位置を指定する. LPD では, プリンタホストにジョブ を送信するまでの間, このディレクトリにジョブを格納しま す. rm 項目でプリンタホストの名前を指定します. rp 項目で プリンタホスト に接続したプリン タ名を指定します. これで終わりです. 変換フィルタやページの大きさやその他の事項を /etc/printcap に加える必要はありません. 次に, リモートホストに接続されたプリンタで印字するための設定例 を示します. ホスト rose には2台のプリンタ bamboorattan が接続されています. これらのプリンタをホスト orchid のユーザが使えるようにしましょう. 最初に orchid/etc/printcap を示します (このファイルは, 「 ヘッダページの出力を許可する」 で参照することができます). このファイルには, 既に, プリンタ teak 用のエントリがありました. 以下では, これに, ホスト rose にある2台のプリンタ用のエントリが加えられ ています. # # /etc/printcap for host orchid - added (remote) printers on rose # # # teak is local; it is connected directly to orchid: # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/ifhp:\ :vf=/usr/local/libexec/vfhp:\ :of=/usr/local/libexec/ofhp: # # rattan is connected to rose; send jobs for rattan to rose: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: # # bamboo is connected to rose as well: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo: orchid で必要となる作業はスプーリングディレクトリを 作ることだけです. &prompt.root; mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo &prompt.root; chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo &prompt.root; chown daemon.daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo これで, orchid のユーザが rattanbamboo で印字す ることができるようになりました. 例えば, orchid のユーザが次の ように入力したとします. &prompt.user; lpr -P bamboo -d sushi-review.dvi すると, orchid の LPD システムは, ジョブをスプーリングディレ クトリ /var/spool/lpd/bamboo にコピーし, これが DVI ファイルを印字するジョブであることを記録します. ホスト rose の bamboo 用のスプーリングディレクトリに十分な容量が確保でき 次第, 両者の LPD は, ジョブのファイルを rose に転送します. こ のファイルは, そのすべてが印字されるまで, rose のキューに留まり ます. (bamboo は PostScript プリンタなので) DVI から PostScript への変換は rose でおこなわれます. ネットワークにおけるデータストリームのインタ フェースを持つプリンタ プリンタのネットワークインタフェースカードは, 2種類に分 類することができます. 1つはスプーラをエミュレートするもの (高価) で, もう 1 つはシリアルやパラレルポートを使うようにプリンタにデー タを送ることができるだけのもの (安価) です. この節では, 後者の使 い方を説明します. 前者のプリンタは, 前節「 リモートホストに接続されたプリンタ」 の方法が適用できます. /etc/printcap ファイルでは, シリアルかパラレルのイン タフェースのどちらを使うのか, そして, (シリアルインタフェース を使う場合) そのボーレートはいくらであるか, フロー制御は使うのか, タブのための遅延を加えるのか, 改行文字を変換するかなどの指定を おこなうことができます. しかし, TCP/IP や他のネットワークポートか らデータを受け取るプリンタを接続するための 指定をおこなうことはでき ません. ネットワーク接続されたプリンタにデータを送るためには, テキスト フィルタと変換フィルタから呼び出すことができる 通信プログラムを 開発する必要があります. 以下に, そのようなプログラムの例を示し ます. スクリプト netprint では, 標準入力から印字データを すべて受け取り, ネットワーク接続されたプリンタにこれを送ります. netprint の最初の引数でプリンタのホスト名を, 2番目の引数 で接続するポート番号を指定します. このプログラムでは単方向通信 (FreeBSD からプリンタ) のみをサポートしていることに注意してくだ さい. ネットワークプリンタの多くは双方向通信をサポートしていま すので, その恩恵 (プリンタの状態を得たり, 課金をおこなうなど) にあず かりたいと思われるかもしれません. #!/usr/bin/perl # # netprint - Text filter for printer attached to network # Installed in /usr/local/libexec/netprint # $#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>"; $printer_host = $ARGV[0]; $printer_port = $ARGV[1]; require 'sys/socket.ph'; ($ignore, $ignore, $protocol) = getprotobyname('tcp'); ($ignore, $ignore, $ignore, $ignore, $address) = gethostbyname($printer_host); $sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address); socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol) || die "Can't create TCP/IP stream socket: $!"; connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!"; while (<STDIN>) { print PRINTER; } exit 0; このスクリプトは, 様々なフィルタが利用することができます. 仮に, Diablo 750-N ラインプリンタを持っており, これがネットワークに 接続されているとしましょう. プリンタはポート番号5100にて印字す るデータを受け取ります. プリンタのホスト名は scrivener としま す. このとき, このプリンタのテキストフィルタは次のようになりま す. #!/bin/sh # # diablo-if-net - Text filter for Diablo printer `scrivener' listening # on port 5100. Installed in /usr/local/libexec/diablo-if-net # exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100 プリンタの利用に制約を与える 本節では, プリンタの利用に制約を与えるための情報を記して います. LPD システムでは, プリンタ (ローカル, リモートのいずれ に接続されていても) にアクセスできる人を制限する機能, 複数部の コピーの印字の可否を制御する機能, ジョブのサイズの最大値やプリ ンタキューに入るジョブの最大個数を制御する 機能を提供しています. 複数部のコピーの印字を制限する LPD システムではユーザが複数部のコピーの印字を簡単におこなう 機能を提供しています. ユーザが, (例えば) lpr -#5 コマ ンドを使ってジョブを印字すると, ジョブのそれぞれのファイルのコ ピーを5部得ることができます. これがよい機能であると思うかどう かは人それぞれでしょう. 複数部のコピーの印字によってプリンタが 必要以上に消耗してしまう と感じるならば, /etc/printcap ファイルに sc 項 目を加えてください. これにより, &man.lpr.1; の オプションの使用 が禁止されます. このオプションが指定されているにも関らず, オプションを使うと, 次のようなメッセージが表示され, このオプションの利用できない旨を伝えます. lpr: multiple copies are not allowed リモートホストからプリンタをアクセスできる 設定にしている場合 (この 設定については, 「 リモートホストに接続されたプリンタ」 をご覧ください), その リモートホストの /etc/printcap にも同じように sc 項目を追加する必要があることに注意してください. そうしないと, ユーザは別なホストから複数部のコピーの 印字することができてしま います. 例を使って説明しましょう. 次に示す /etc/printcap ファ イルは, ホスト rose のものです. プリンタ rattan は極めて 頑丈なので, 複数部のコピーの印字は許可されています. しかし, レー ザプリンタの bamboo はもう少しデリケートで, このプリンタ から複数部のコピーを印字することを sc 項目を追加すること で禁止しています. # # /etc/printcap for host rose - restrict multiple copies on bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: さらに, orchid の /etc/printcap にも sc 項目を 追加する必要があります (orchid でこの編集をおこなっているときに, つ いでに, プリンタ teak でも複数部のコピーの印字を禁止する ことにしましょう). # # /etc/printcap for host orchid - no multiple copies for local # printer teak or remote printer bamboo teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\ :if=/usr/local/libexec/ifhp:\ :vf=/usr/local/libexec/vfhp:\ :of=/usr/local/libexec/ofhp: rattan|line|diablo|lp|Diablo 630 Line Printer:\ :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc: sc 項目を指定することにより, lpr -# の使用を防 ぐことができます. しかし, この状態では &man.lpr.1; を複数回起動し たり, 1回のジョブで次のように同じファイルを 複数個指定すること を防ぐまでには至っていません. &prompt.user; lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign このような悪用を防ぐ方法は (その指示を無視することも含めて) たく さんあります. 各自で調べてみてください. プリンタを使用できる人を限定する それぞれのプリンタを使用できる人を限定するには, UNIX の グループ権限のメカニズムを利用し, さらに, /etc/printcaprg 項目を指定することでおこないます. あるプリンタにアクセスさせてもよいと思うユーザすべてを UNIXのある グループに入れてください. そして, そのグループ名を rg で 指定します. このとき, そのグループに含まれないユーザ (root も含む) には, 次のようなメッセー ジが表示され, プリンタの使用はできません. lpr: Not a member of the restricted group sc (suppress multiple copies : 複数部のコピーの印字を禁止 する) を指定するときと同様に, rg が指定されたプリンタがリ モートホストからもアクセスでき (この設定については, 「 リモートホストに接続されたプリンタ」 をご覧ください), かつ, そ のホストでもプリンタを使用できる人を限定するのが 妥当であると思 う場合は, そのホストの /etc/printcap にも rg 指 定をおこなう必要があります. 例えば, プリンタ rattan は誰でも利用できるが, bamboo はグループ artists に属している人のみが利用で きるようにしてみましょう. 以下に, もうお馴染みとなったホスト rose/etc/printcap を示します. # # /etc/printcap for host rose - restricted group for bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: これ以外の /etc/printcap ファイル (ホスト orchid のもの) はそのままにしておくことにします. もちろん, orchid のユーザは 全員 bamboo を利用することができます. これは, orchid に は特定のユーザのみにしかアクセスさせておらず, そのユーザにはプ リンタを利用させたいと思っているからなのかもしれませんし, そう でないかもしれません. 1台のプリンタを複数グループのユーザに利用させること はできません. 入力可能なジョブのサイズを制限する たくさんのユーザからプリンタが利用される場合には, 多分, ユーザが印字要求を出すことができるファイルのサイズに 上限値を置 く必要が生じるでしょう. 結局のところ, スプーリングディレクトリ が置かれているファイルシステムの空き容量がその 上限値になる訳で すが, あるユーザがこれを独占的に使用すること避けるために, 他ユー ザからのジョブ用の空き容量を確保する必要もあります. LPD では, mx 項目を指定することにより, ジョブ中の個々のファ イルのサイズの上限値を制限する機能を提供しています. 指定される ファイルサイズの単位は BUFSIZ ブロックで, 1 BUFSIZ ブロックは 1024バイトを表わします. この mx 項目の値として0が指定されると, ファイルサイズの制限はなくなります. mx が指定されない場合は, デフォルトの制限として 1000 ブロックが使われます. この制限はジョブ中の各 ファイルに対して適用されるものであり, ジョブ全体のサイズ を制限するものではありません. ところで, プリンタに設定された上限値を超えるファイルサイズのファ イルが入力された場合でも, LPD はこれを拒否しません. その代わ りに, このファイルは, その先頭から上限値のファイルサイズまでし かキューに入れられません. そして, その部分までが印字され, 残り の部分は捨てられます. これが正しい動作といえるのかどうかは議 論の余地があるところです. それでは, 設定例に登場しているプリンタ rattanbamboo の印字可能なファイルサイズに制限を加えてみましょう. artists グループの人達が作る PostScript ファイルのサイズは 巨大になる傾向があるので, 上限値を5Mバイトとします. それから, プレインテキスト用のラインプリンタは無制限とします. # # /etc/printcap for host rose # # # No limit on job size: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:mx#0:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: # # Limit of five megabytes: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: この場合もそうですが, この制限はローカル (ホスト rose) のユーザ のみに適用されます. リモートホストからプリンタを利用できるよう に設定している場合は, そのリモートホストのユーザはこの制限を受 けません. これらのユーザにも制限を加える場合は, リモートホスト の /etc/printcapmx を指定する必要があります. リモートホストから印字するための詳しい情報については, 「 リモートホストに接続されたプリンタ」 を参照してください. リモートホストに接続されたプリンタへのジョブの サイズを制限する 特別な方法は他にもあります. これについては, 「 リモートホストからのプリンタの利用を制限する」 を参照してください. リモートホストからのプリンタの利用を制限する LPD スプーリングシステムでは, リモートホストから要求され たジョブの印字を制限するための方法がいくつか 提供されています. ホストの制限 ローカルの LPD が印字要求を受け付けるリモートホストは, ファイル /etc/hosts.equiv/etc/hosts.lpd によって制御することができます. LPD では, あるホストから印字の要求がきたとき, このホス トの名前がこれら2つのファイルのどちらかに含まれている かどうかを調べます. これが含まれていない場合は, LPD はこの要求を拒否します. これらのファイルの形式は単純です. 各行にホストの名前を 1つずつ書いていきます. ファイル /etc/hosts.equiv の方は &man.ruserok.3; プロトコル でも利用され, &man.rsh.1; や &man.rcp.1; といったプログラム の動作に影響するので注意が必要です. /etc/hosts.equiv の記述は慎重におこないましょう. 例として, 以下にホスト rose/etc/hosts.lpd を示します. orchid violet madrigal.fishbaum.de この例では, rose はホスト orchid, violet, そして madrigal.fishbaum.de からの要求を受け付けることになり ます. その他のホストが rose の LPD - にアクセスしようと しても, LPD はこれを拒否します + にアクセスしようと しても, LPD はそのジョブを拒否します (訳注:拒否されるのは, そのホストが /etc/hosts.equiv にも含まれてい ない場合です). サイズの制限 スプーリングディレクトリがある ファイルシステムに残して おく必要がある空き容量の大きさを制御することが できます. ローカルプリンタ用のスプーリングディレクトリに minfree という名前のファイルを作成します. そして, そのファイルの中にリモートホストからのジョブの要求を受 け付けるために必要な空き容量のディスクブロックサイズ (1 ディスクブロック=512バイト) を記します. これで, リモートホストのユーザにファイルシステムを満杯 にされないことが保証されます. この機能を使うと, ローカ ルホストのユーザに対してある種の優先権を与えることもで きます. ローカルホストのユーザは, minfree ファイ ルで指定された値よりもディスクの空き容量が下回った後で もずっと, ジョブをキューに入れることができるのです. 例えば, プリンタ bamboo 用の minfree を作っ てみましょう. このプリンタのスプーリングディレクトリを 調べるために, /etc/printcap を調べてみましょ う. 以下に, bamboo のエントリ部分を示します. bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:mx#5000:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: スプーリングディレクトリは sd で指定されます. LPD がリモートホストからのジョブを受け付けるために必要 なファイルシステムの空き容量を3Mバイト (=6144ディスクブ ロック) にすることにしましょう. &prompt.root; echo 6144 > /var/spool/lpd/bamboo/minfree 利用ユーザの制限 /etc/printcaprs 項目を指定することで, ローカルプリンタを利用できるリモートホストのユーザを制 限することができます. ローカルホストに接続されたプリン タ用のエントリに rs 項目が指定されている場合, LPD は印字を要求したユーザのアカウントと同じログイン名 がローカルホストに登録されている場合に限り , その ジョブが受け付けられます. そうでないユーザからのジョブ は LPD は拒否します. この機能は, (例えば) 複数の部署がネットワークを共有して おり, この内のあるユーザが部署の境界を越えて活動してい る場合には特に有用です. そのようなユーザに対して, シス テムのアカウントを与えるだけで, これらのユーザは自分が 所属する部署のシステムからそのシステムに接続されている プリンタを使用することができます. これらのユーザにはむ しろ, プリンタの使用だけを認め, その他のコンピュー タ資源を利用させたくないときは, それらのユーザにはホー ムディレクトリを与えず, ログインシェルはシェルとしては 何の役にも立たない /usr/bin/false などを指定 して, - これらのユーザのアカウントはプリンタ用の“形式的 - な”ものとします. + これらのユーザのアカウントはプリンタ用の形式的なものとします. プリンタの利用に対する課金 という訳で, 印字するためには料金をとることが必要です. 取ら ない理由などありましょうか. 紙やインクにはお金がかかります. そ して, プリンタの維持費もかかります. プリンタには可動部分が搭載 されており, これらの部分は壊れやすいという傾向があります. プリ ンタや, その利用形態, 維持費について調査をし, 1ページ (1フィー ト, 1メートルなど) 当たりにかかるコストを調べておいてください. これに基づき, プリンタの利用に対する課金を, 実際に, どのように 始めればよいのでしょうか. さて, 残念ながら, この部分に関しては LPD スプーリングシステム はほとんど役に立ちません. 課金は使用しているプリンタの種類, 印 字するもののファイルの形式, プリンタの利用に対する課金での あなた自身の要求に大きく左右されます. 課金システムを実現するためには, プリンタのテキストフィルタ (プ レインテキストのジョブに対して課金するため) と変換フィルタ (その 他のファイル形式に対して課金するため) を変更して, 印字したペー ジを数えたり, プリンタに印字したページ数を取得するための要求を 送る必要があります. ただし, 出力フィルタのみを利用している場合 は, 課金をおこなうことができません. フィルタに関しては, 「 フィルタ」をご覧く ださい. 一般に, 課金方式には次の2つがあります. 定期的に課金する方法 はよく利用される方法です. この理由は, 恐らく, 比較的簡単に実現できるからです. 誰 かがジョブを印字する度に, フィルタはそのユーザ名, ホス ト名, 印字したページ数を課金データファイルに記録します. 毎月, 毎学期, 毎年, あるいは, お好みの時期に, 様々なプ リンタの課金用ファイルを集め, それぞれのユーザが印字し たページ数を合計し, その分の課金をおこないます. 次回の課金 時期のためのデータを0にして課金を再開するために, この 処理をおこなった後, すべてのログファイルを削除し, 利用毎に課金する方法 はあまり利用されていません. これは, 実現するのが比較的難しいからです. この方式では, プリンタを使用したらすぐに, フィルタがユーザにその利用 に対する課金をおこないます. ディスククオータのように, 課金 作業は瞬時におこなわれます. この方式では, ユーザのアカウン トが赤字になる場合に, ユーザが印字をおこなうことを拒否する - ことができます. また, ユーザに“プリンタ版 - quota”を 調べたり, + ことができます. また, ユーザにプリンタ版 quotaを調べたり, 調整したりする方法を提供したいと思うかもしれ ません. これを実現するためには, ユーザとその quota を 追跡するために, あるデータベース用のコードが必要となり ます. LPD スプーリングシステムでは, 両方式を簡単にですがサポー トしています. これは, (ほとんどの場合で) 印字作業をフィ ルタがおこなっていたように, 課金作業もこのためのコードも用 意することで実現されています. しかし, 明るい面もありま す. それは, 課金方式に関して, 非常に大きな柔軟性が与え られたということです. 例えば, 「定期的に課金する方法」 か, 「利用毎に課金する方法」のどちらかを選びまず, そし て, どんな情報 (ユーザ名, ホスト名, ジョブのタイプ, 印 字された頁数, 使用した紙の大きさ, 印字をするために要した 時間など) をログに記録するかを決めます. 以上のことをおこな うには, 上記の情報を保持するために, フィルタを変更しな くてはなりません. 手軽なプリンタ課金方法 FreeBSD には, 「定期的に課金する方法」による課金をすぐに 設定できるように, 2個のプログラムを添付しています. そ の内の1つはテキストフィルタ lpf で, これについて は, 「 テキストフィルタ lpf」をご覧ください. もう1つは, &man.pac.8; で, これはプリンタの課金データファイルからのエントリを集め, これを合計するプログラムです. フィルタはどのように機能しているか」で述べたように, LPD では テキストフィルタや変換フィルタを起動しますが, そのコマ ンドラインで使用している課金データファイルの名前が指定 されます. 両フィルタはこの引数を使って, どの課金データ ファイルのエントリに書き込めばよいのかを知ることができ ます. このファイルの名前は /etc/printcap 中の af 項目によって指定されます. このファイルが絶対パ スで指定されない場合は, スプーリングディレクトリからの 相対パスとして扱われます. LPD は, 紙のページの幅と行数 (pwpl 項目で 指定される) を引数として lpf を起動します. lpf では, 何ページ印字したかを決定するためにこれ らの引数を使用します. ファイルをプリンタに送った後, 課 金情報を課金データファイルに書き込みます. このファイル は次のようになります. 2.00 rose:andy 3.00 rose:kelly 3.00 orchid:mary 5.00 orchid:mary 2.00 orchid:zhang 課金データファイルはプリンタ毎に分けて作るべきです. こ れは, lpf にはデータファイルをロックする機構が組 み込まれていないためです. したがって, lpf が2つ起動 されたとき, 同じファイルに同時に書き込みをおこなった場合, お互いのエントリが破壊されてしまうかもしれません. 課金 用ファイルを各プリンタ毎に確実に分けるには, /etc/printcap 中の af=acct 項目を使いま す. プリンタの利用に対してユーザに課金する準備ができたら, スプーリングディレクトリに移動した後, &man.pac.8; と入力 してください. 次のような, ドル中心主義の課金リストが表 示されます(訳注:ドル中心主義という表現は, 表示がドルで 出ることへの著者の皮肉でしょう. セントがあるので小数点 以下が表示されますが, この機能も日本では邪魔ですね). Login pages/feet runs price orchid:kelly 5.00 1 $ 0.10 orchid:mary 31.00 3 $ 0.62 orchid:zhang 9.00 1 $ 0.18 rose:andy 2.00 1 $ 0.04 rose:kelly 177.00 104 $ 3.54 rose:mary 87.00 32 $ 1.74 rose:root 26.00 12 $ 0.52 total 337.00 154 $ 6.74 &man.pac.8; が受け付ける引数には 次のようなものがあります. プリンタ printer の利用に対する課金リストを作成し ます. このオプションは, /etc/printcapaf が絶対パスで指定されていた場合に限り, 動作しま す. ユーザ名のアルファベット順ではなく, 課金額の低い順にリ ストを並べます. 課金データファイルにあるホスト名を無視します. このオプショ ンを使用すると, ホスト alpha のユーザ smith とホスト gamma のユーザ smith は同一人物として扱われます. この オプションが指定されない場合は, 両者は別なユーザとして 扱います. /etc/printcappc 項目で指定された値, または, デフォルトの値 (2セント) に代わり, 紙1ページ, ま たは, 1フィート当たりの価格を指定します. price として, 浮動小数点数を指定することができます. リストの並べる順番を逆順にします. 課金リストを作成し, 課金データファイルを削除します. name ユーザ names に対する課金情報のみを表示します. &man.pac.8; が生成するデフォルトのリストには, 各ホストのユーザ別 に印字ページ数が表示されます. (ユーザがサイト内のすべてのホスト を使用できるため) ホスト名の情報が意味を持たない場合, pac -m を実行してください. 次のようなリストが得られます. Login pages/feet runs price andy 2.00 1 $ 0.04 kelly 182.00 105 $ 3.64 mary 118.00 35 $ 2.36 root 26.00 12 $ 0.52 zhang 9.00 1 $ 0.18 total 337.00 154 $ 6.74 課金額を決めるために, &man.pac.8; は /etc/printcap ファ イルの pc 項目で指定された値 (デフォルト値は200, すなわち1 ページ当たり2セント) を使います. この項目で, 印字物に課金したい と思う1ページ当たり, または, 1フィート当たりの価格を100分の1セ ント単位で指定します. &man.pac.8; を オプション付きで起動 すると, この値を置き換えることができます. この オプショ ンで指定する額の単位は, 100分の1セント単位ではなく, ドル単位で す. 例えば, 次の指定では, 1ページ当たりの単価が1ドル50セントに なります. &prompt.root; pac -p1.50 このオプションを使うと, 実際の課金額を集計することができます. 最後に, pac -s を起動すると, 課金情報は課金データ累計ファ イルに保存されます. このファイルの名前は, プリンタの課金データ ファイルの後ろに _sum を付けたものとなります. そして, 課 金データファイルは削除されます. 次に &man.pac.8; が起動されると, その時点までの累計金額を得るために, 課金データ累計ファイルが読 み込まれ, 通常の課金データファイルからの情報に 加算されます. 印字されたページ数をどのように数えるか? 課金を, リモートホストからの印字でさえも, 正確におこなうため には, ジョブで使用された紙が何ページであるかを特定でき る必要があります. このことは, プリンタ利用に対する課金 をおこなう上の根本的な問題です. プレインテキストのジョブの場合, 問題を解決するのはさほ ど難しくはありません. ジョブが何行であったかを数え, プ リンタがサポートしている紙1ページに印字できる最大の行 数と比較すればよいのです. 重ね打ちするために利用される ファイル中のバックスペース文字や, 物理的に複数の行に渡 る長い論理行に対する取り扱いを 忘れずにおこなってください. (「テキストフィ,ルタ lpf」で紹介した) テキストフィルタ lpf では, 課金をおこなうときに, これらの取り扱いをおこなってくれます. 課 金をおこなうために必要なテキストフィルタを作成している方は, lpf のソースコードが参考になるでしょう. これに対して, 他のファイル形式の処理はどのようにすれば よいのでしょうか. まず, DVI から LaserJet, または, DVI から PostScript への変換の場合, フィルタが dviljdvips の 出力メッセージを解析することで, 何ページ分の変換がおこなわ れたかを知ることができます. 他のファイル形式とその変換 プログラムに関しても, 同様のことができるかもしれません. しかし, この方式には問題点があります. それは, 変換され たページがすべて印字されるとは限らないということです. 例 えば, プリンタが紙詰まりを起こしたり, トナー切れになっ たり, はたまた, 爆発したりするかもしれません. そのよう な状況により印字が途中で中止されたとしても, この方式で は, ユーザは全ページ分の料金を課されてしまうのです. それでは, どのような対策をたてることができるのでしょう か. 正確な 課金をおこなうための唯一の確実な方法は, 何 ページ印字したのかを知らせることができるプリンタを入手 し, これをシリアルポートかネットワークに接続することで す. ほとんどすべての PostScript プリンタではこの概念 がサポートされています. 他のプリンタも同様です (Imagen レーザプリンタをネットワーク接続するなど). それぞれの プリンタのフィルタを, ジョブを印字した後で印字ページ数 を得るように, 変更してください. そして, 課金情報はここ で得られた値のみに 基づいて記録してください. 行数 を数えたり, エラーが生じやすいファイルの調査は必要とさ れません. もちろん, 気前よく印字料 金をすべて無料にすることもできます. プリンタを使う この節では, FreeBSD で設定したプリンタを使う方法について説明 します. ここでは, ユーザレベルでのコマンドを概説します. &man.lpr.1; 印字をおこないます. &man.lpq.1; プリンタキューを調べます. &man.lprm.1; プリンタキューにあるジョブを削除します. 管理者用コマンド &man.lpc.8; もありますが, これは 「プリンタを管理する」 に記 します. このコマンドは, プリンタやそのキューの制御のために用い られます. &man.lpr.1;, &man.lprm.1;, そして &man.lpq.1; の 3 コマンドは, オプションをとり, これによって, /etc/printcap のように操作の対象となる プリンタやキュー を指定します. これによって, 様々なプリンタに対してジョブを送る , 取り消す, 調査することができます. が使われなかった場 合は, これらのコマンドは PRINTER 環境変数で指定されたプリンタ を使用します. そして, PRINTER 環境変数がなかった場合は, これ らのコマンドはデフォルトのプリンタ lp を使います. 以下では, デフォルトプリンタ という用語が意味するプリンタ は, PRINTER 環境変数で指定されたプリンタ, もしくは, PRINTER 環境変数がない場合は, lp という名前のプリンタです. 印字する ファイルを印字するためには, 次のように入力してください. &prompt.user; lpr filename ... これにより, 入力されたファイルのそれぞれをデフォルトのプリンタ から印字します. ファイル名が与えられなかった場合, &man.lpr.1; は標準入力から印字するデータを読み込みます. 例えば, 次のコマン ドにより, ある重要なシステムファイルが印字されます. &prompt.user; lpr /etc/host.conf /etc/hosts.equiv 印字させるプリンタを選択するためには, 次のように入力します. &prompt.user; lpr -P printer-name filename ... 次の例では, プリンタ rattan に, カレントディレクトリにあ るファイルの詳細なリストを印字しています. &prompt.user; ls -l | lpr -P rattan 上記の &man.lpr.1; コマンドではファイル名の指定がないので, lpr は標準入力から印字するデータ, この場合, ls -l コマンドの出力, を読み込みます. &man.lpr.1; コマンドでは, 出力の整形を制御したり, ファイル変換を 適用したり, 複数部数のコピーを作成したり, などといた様々な幅広 いオプションを受け付けることもできます. 詳細については, 「 その他の印字オプション」をご 覧ください. ジョブの処理状況を調べる &man.lpr.1; コマンドを使って印字をする場合, プリントしようと - するデータは “プリントジョブ” - と呼ばれる箱に一緒に置かれ, こ - れが LPD スプーリングシステムに送られます. プリンタにはそれぞ - れ, ジョブ用のキューがあり, - 送られてきたジョブはあなたや他のユー - ザからの別のジョブと一緒にそのキューで並んで, - 処理される順番を - 待ちます. + するデータはプリントジョブ + と呼ばれる箱に一緒に置かれ, これが LPD スプーリングシステムに送られます. + プリンタにはそれぞれジョブ用のキューがあり, + 送られてきたジョブはあなたや他のユーザからの別のジョブと一緒にそのキューで並んで, + 処理される順番を待ちます. プリンタは到着順にこれらのジョブの印字をおこないます. デフォルトプリンタのキューの状態を表示するには, &man.lpq.1; と入 力します. プリンタを指定するときは, オプションを使い ます. 例えば, 次のコマンド &prompt.user; lpq -P bamboo は, プリンタ bamboo のキューの状態を表示します. この lpq コマンドの出力結果の例を次に示します. bamboo is ready and printing Rank Owner Job Files Total Size active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes 2nd kelly 10 (standard input) 1635 bytes 3rd mary 11 ... 78519 bytes この例では, bamboo のキューに3つのジョブがあることが分か ります. - 最初のジョブはユーザ kelly からのものであり, “ジョ - ブ番号”9が割り当てられています. + 最初のジョブはユーザ kelly からのものであり, + ジョブ番号 9 が割り当てられています. プリンタのすべてのジョブには一意 なジョブ番号が付けられています. ほとんどの場合, このジョブ番号 は無視することができますが, ジョブをキャンセルするときにはこの 番号が必要になります. このことの詳細については, 「ジョブの削除 」をご覧ください. ジョブ番号9のジョブは2つのファイルを処理します. すなわち, &man.lpr.1; のコマンドラインに複数のファイル名が与えられたときは, 1つのジョブとして扱われるのです. このジョブは, 現在, アクティ - ブジョブ (“Rank” + ブジョブ (Rank の欄の active という後に注目) になってい ます. これは, プリンタからそのジョブが現在印字されているはずで あることを意味しています. 2番目のジョブでは, &man.lpr.1; コマン ドに標準入力からデータが与えられています. 3番目のジョブはユー ザ mary から与えられました. このジョブのサイズはとても大きくなっ ています. 彼女がプリントしようとしたファイルのパス名はここで表 示させるには長すぎるため, &man.lpq.1; コマンドはドットを3つだけ 表示しています. &man.lpq.1; からの 出力で一番最初の行もまた有益な情報を与えていま す. この行から, プリンタが現在何をしているか (あるいは, 少なく とも LPD がプリンタが していると思っていること) が分かります. &man.lpq.1; コマンドは オプションもサポートしています. こ れにより, 詳しい情報が表示されます. lpq -l の実行例を次 に示します. waiting for bamboo to become ready (offline ?) kelly: 1st [job 009rose] /etc/host.conf 73 bytes /etc/hosts.equiv 15 bytes kelly: 2nd [job 010rose] (standard input) 1635 bytes mary: 3rd [job 011rose] /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes ジョブの削除 印字するようジョブを 送った後で印字を中断したくなったときは, &man.lprm.1; コマンドで, キューの中からそのジョブを削除することが できます. 大抵の場合, アクティブジョブでさえも &man.lprm.1; を使っ て削除することができますが, そのジョブの一部またはすべてが印字さ れてしまうかもしれません. デフォルトプリンタへのジョブを削除するためには, 最初に, &man.lpq.1; を使ってそのジョブ番号を調べます. すなわち, それから, 次のように入力して, ジョブを削除します. &prompt.user; lprm job-number 特定のプリンタへのジョブを削除するときは, オプション を使ってそのプリンタを指定します. 例えば, プリンタ bamboo のキューからジョブ番号 10のジョブを削除するには次のようにします. &prompt.user; lprm -P bamboo 10 &man.lprm.1; コマンドには略記法がいくつかあります. lprm - あなたが (デフォルトプリンタへ) 送ったジョブをすべて削除し ます. lprm user ユーザ user が (デフォルトプリンタへ) 送ったジョブ をすべて削除します. 他のユーザのジョブを削除できるのはスー パユーザだけです. あなたは, あなた自身のジョブしか削 除することはできません. lprm ジョブ番号もユーザ名もシンボル も指定されない ときは, &man.lprm.1; は現在のアクティブジョブを, そのジョ ブを送ったのがあなた自身であるときに限り, デフォルトプ リンタから削除します. ただし, スーパユーザは任意のア クティブジョブを削除することができます. 上記の略記法をデフォルトプリンタではなく 特定のプリンタに対して おこなうときは, オプションでそのプリンタを指定するだけよ いのです. 例えば, プリンタ rattan のキューへあなたが送っ たジョブをすべて削除するためには次のようにします. &prompt.user; lprm -P rattan - ネットワーク環境で作業をしている場合, あるホストか ら送られたプリンタジョブは, これを送ったホストで &man.lprm.1; を 使った場合に限って, これを削除することができます. 他のホストで 同じプリンタを使えたとしても, このジョブを削除することはできま せん. 次の例では, 他ホストからジョブを削除することを試みていま す. &prompt.user; lpr -P rattan myfile &prompt.user; rlogin orchid &prompt.user; lpq -P rattan Rank Owner Job Files Total Size active seeyan 12 ... 49123 bytes 2nd kelly 13 myfile 12 bytes &prompt.user; lprm -P rattan 13 rose: Permission denied &prompt.user; logout &prompt.user; lprm -P rattan 13 dfA013rose dequeued cfA013rose dequeued その他の印字オプション &man.lpr.1; コマンドには, テキストの整形や, 図や他のファイル形 式の変換, 複数部コピーの生成, ジョブの扱いなどをを制御すること ができます. この節では, これに関するオプションについて記してい ます. 整形と変換に関するオプション 以下の &man.lpr.1; 用のオプションはジョブにおける ファイルの 整形の制御に関するものです. このオプションは, ジョブにプレイン テキストが含まれない場合や &man.pr.1; ユーティリティを使ってプレイ ンテキストを整形する場合に用いてください. 次の例では, プリンタ bamboo に (TeX 組版システムによる) DVI ファイル fish-report.dvi を印字しています. &prompt.user; lpr -P bamboo -d fish-report.dvi このオプションは, ジョブに含まれるすべてのファイルに対して適用さ れます. したがって, 1つのジョブに (例えば) DVI ファイルと ditroff ファイルを混在させることはできません. その代わりに, ファイルを 形式毎に別々のジョブに分け, それぞれのジョブでその形式用の変換 オプションを使って印字してください. を除くすべてのオプションを使用 するためには, 出力先プリンタ用の変換フィルタが必要です. 例えば, オプションを使用するには, DVI 用の変換フィルタが必要 です. 詳細については, 「 変換フィルタ」で説明しています. cifplot ファイルを印字します. DVI ファイルを印字します. FORTRAN プログラムを印字します. plot のデータを印字します. 出力に対して, number カラム分の字下げをおこないます. number が省略されると, 8カラム分字下げされます. このオプションはある変換フィルタと一緒の指定されたとき のみに機能します. と数字の間に空白を入れてはいけません. 制御文字を含む文字通りの テキストデータを印字します. ditroff (device independent troff) データ を印字します. -p 印字する前に &man.pr.1; によってプレインテキストを整形し ます. 詳細については &man.pr.1; をご覧ください. &man.pr.1; コマンドにより生成されるヘッダを, ファイル名の 代わりに title とする. このオプションは, と一緒に使ったときのみ機能する. troff データを印字します. ラスタのデータを印字します. 次の例では, &man.ls.1; の マニュアルを美しく整形したものをデフォ ルトプリンタで印字しています. &prompt.user; zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t &man.zcat.1; コマンドで - &man.ls.1; のマニュアルのソースファイルの圧 - 縮を復元し, これを - &man.troff.1; コマンドに渡しています. これによ - り, ソースファイルが整形され, GNU troff の形式となります. そ - の結果は &man.lpr.1; に渡され, - LPD スプーラへジョブの要求が発せ - られます. &man.lpr.1; には + &man.ls.1; のマニュアルのソースファイルの圧縮を復元し, これを + &man.troff.1; コマンドに渡しています. + これによりソースファイルが整形され + GNU troff の形式となります. + その結果は &man.lpr.1; に渡され, + LPD スプーラへジョブの要求が発せられます. + &man.lpr.1; には オプションが使われているため, - スプーラにて, GNU troff の形式からジョブを印字したときにデフォ - ルトプリントが解釈できる形式へと変換されます. + スプーラでジョブを印字したときに GNU troff + の形式から, デフォルトプリンタ解釈できる形式へと変換されます. ジョブに関するオプション 以下のオプションは, &man.lpr.1; によって, そのジョブを特殊 な扱いにするよう LPD に指示するためのものである. -# copies ジョブに含まれるファイルのそれぞれを 1部だけ印字するの ではなく, copies 部のコピーを生成させるものです. 管理者によっては, プリンタの消耗を避け, コピー機による 複製を奨励するためにこのオプションの使用が禁止されてい るかもしれません. これに関しては, 「 複数部のコピーの印字を制限する 」をご覧ください. 次の例では, デフォルトプリンタで parser.c を3 部コピーし, 次に, parser.h を3部コピーしています. &prompt.user; lpr -#3 parser.c parser.h -m 印字ジョブが完了した後で, メールを送ります. このオプショ ンを付けると, LPD システムはジョブの扱いが終了したと きに, あなたのアカウントにメールを送ります. メールのメッ セージには, ジョブが正常終了したのか, あるいは, 何か異 常があり, (しばしば) その異常が何であったのかが書かれて います. -s 印字ファイルをスプールディレクトリにコピーせず, 代わりに, シンボリックリンクを作成するよう指示します. 印字させるジョブのサイズが大きいとき, このオプショ ンを使うと便利かもしれません. このオプションにより, スプー ルディレクトリの容量が節約されます (それに, 巨大なジョ ブのお陰でスプールディレクトリのあるファイルシステムの 空き容量がなくなってしまうかもしれません). さらに, LPD がいちいちすべてのデータをコピーする必要がなくなりま すので, 時間の節約にもなります. ただし, 欠点もあります. LPD はオリジナルのファイルを 直接参照するので, 印字が終了するまでそのファイルを変更 したり削除することができません. リモートのプリンタで印字している場合, LPD は, 結局のところ, ローカルホストからリモートホストにファ イルをコピーする必要があります. したがって, オプ ションはローカルのスプーリングディレクトリの 空き容量を 節約するだけで, リモート側では節約されません. それに も関わらず, このオプションはそれでも有用です. -r ジョブに含まれるファイルを, スプーリングディレクトリに ファイルをコピーした後に削除します. もしくは, オプションと一緒に使われた場合は, 印字終了後に削除され ます. このオプションの使用には十分注意して下さい. ヘッダページ用オプション 以下のオプションにより, ジョブのヘッダページに通常印字さ れるテキストを &man.lpr.1; に調整させることができます. 対象のプリ ンタからヘッダページが出力されない場合は, これらのオプションは 何の効力も持ちません. ヘッダページの設定に関する情報については, 「 ヘッダページ」を参照してください. -C text ヘッダページに印字されるホスト名を text に置き換 えます. なお, ホスト名の場所には, 通常, ジョブの要求が あったホストの名前が印字されます. -J text ヘッダページに印字されるジョブ名を text に置き換 えます. ジョブ名の場所には, 通常, ジョブの最初のファイ ル名, または, 標準入力からデータが印字されたときは stdinが印字されます. -h ヘッダページを出力を禁止します. サイトによっ ては, そのヘッダページの生成方法により, このオプション の効果が現れないかもしれません. 詳細は, 「 ヘッダページ」をご覧ください. プリンタを管理する プリンタの管理者として, プリンタの設置, 設定, そして, それ らのテストをおこなう必要がありました. &man.lpc.8; コマンドにより, これまでとは別な管理方法がプリンタと対話的におこなわれます. &man.lpc.8; により, 次のことが可能となります. プリンタの起動, 停止をおこなう. キューへの入力の許可, 禁止をおこなう. それぞれのキューにあるジョブの順番を変更する. 最初に用語に関する注意をしておきます. プリンタが停止してい るとは, キューの中にあるどのジョブも印字されることがない状態 を言います. この状態においても, ユーザはまだジョブの要求をおこなう ことができますが, これらのジョブはキューの中で, プリンタがスタートする状態になるまで, あるいは, キューの内容が削除され るまで待たされることになります. キューが禁止状態にあるとは, (root 以外の) すべてのユーザが プリンタにジョブを要求することができない状態のことを言います. キューが許可状態にある場合は, ジョブの入力が許可されます. キューが禁止状態にある場合でも, プリンタをスタートす る状態にすることは可能です. この場合は, キューが空になるまで, キュー内のジョブの印字が続けられます. 一般的に, &man.lpc.8; コマンドを使用するには root の権限を持って いる必要があります. 一般のユーザも &man.lpc.8; コマンドを使うこと はできますが, プリンタの状態を取得することとハングしたプリンタ を再スタートすることだけに使用が制限されています. 以下に, &man.lpc.8; コマンドに関する説明の要約を述べます. ほとん どのコマンドでは, 操作対象となるプリンタを指定するため printer-name 引数を与えます. printer-name の代わり に all が与えられると, 操作は /etc/printcap 内に ある全プリンタに対しておこなわれることになります. abort printer-name 現在のジョブをキャンセルし, プリンタを停止させます. キュー が許可状態にある場合は, ユーザはまだジョブを入力する ことができます. clean printer-name プリンタのスプーリングディレクトリから, ジョブの古いファ イルを削除します. 状況によって, とりわけ, 印字途中でエ ラーが発生していたり, 管理操作が頻発していた場合には, ジョブで作られたファイルを LPDが完全に削除しないことが あります. このコマンドでは, スプーリングディレクトリに 入っていないファイルを見つけ出し, それを削除しています. disable printer-name キューに新しいジョブを入れることを禁止します. プリンタ がスタート状態にあるときは, キューに残っているジョブの 印字は続けられます. ただし, キューが禁止状態にあったと しても, スーパーユーザ (root) は常にジョブを入力するこ とができます. このコマンドは, 新しいプリンタやフィルタを設置している 間に使用すると有用です. すなわち, キューを禁止状態にし ておくと, root によるジョブのみが入力されます. そして, その他のユーザは, テストが完了し, enable コマン ドでキューが再度許可状態になるまで, ジョブの入力はでき なくなります. down printer-name message プリンタをダウンさせます. これは, disable をおこなっ た後で, stop をおこなった場合と 等価になります. message は, ユーザが &man.lpq.1; コマンドでプリンタ のキューの状態を調べたり, lpc status でプリンタの 状態を調べたときに, プリンタの状況として表示されるメッ セージです. enable printer-name プリンタのキューを許可状態にします. ユーザはジョブの入 力ができるようになりますが, プリンタがスタートの状態に なるまでは, プリンタからは何も印字されません. help command-name command-name コマンドのヘルプメッセージを表示しま す. command-name が指定されなかった場合は, 利用 できるコマンドの要約が表示されます. restart printer-name プリンタをスタートさせます. 通常のユーザは, LPD があ る異常な状況でハングしたときに限り, このコマンドを使用 することができます. しかし, stop または down コマンドにより, 停止状態にあるプリンタをスター トさせることはできません. restart コマンドは, abort の後に start をおこなったことと同じになり ます. start printer-name プリンタをスタートさせます. プリンタのキューにあるジョ ブを印字することでしょう. stop printer-name プリンタを停止します. プリンタは, 現在のジョブを終了さ せ, そして, キューにあるその他のジョブは印字しません. プリンタが停止状態にあったとしても, まだ, 許可状態にあ るキューに対して, ジョブを送ることができます. topq printer-name job-or-username printer-name のキューに対して, ジョブ番号 job のジョブ, または, ユーザ username から送 られたジョブを置き換えて, キューの先頭に持ってきます. このコマンドに関しては, printer-name の代わりに all を使用することはできません. up printer-name プリンタをアップ状態にします. これの反対のコマンドが down です. start の次に enable をおこなっ たことと等しくなります. コマンドラインから上記のコマンドを入力すると, &man.lpc.8; はこれ を受け付けます. コマンドが入力されなかった場合は, &man.lpc.8; は 対話モードに入り, exit, quit, または, ファイル終端 文字が入力されるまでコマンドの入力ができます. 標準スプーラの代替品 このマニュアルを最初から通読されている方ならば, ここまでで, FreeBSD 付属の LPD スプーリングシステムに関して知っておくべき ことすべてを学ばれたことと思います. 多分, このシステムに あるたくさんの欠点について認識できたことでしょう. すると, - “(FreeBSD 上で動作する) + (FreeBSD 上で動作する) スプーリングシステムには他にどのような - ものがあるのか”という疑問が自然と湧いてきます. - - 残念ながら, 著者は代替のスプーラを 2つ - だけしか探し出すこと ができませんでした. そして, - それぞれはほとんど同一のものです. 以下に, - 両システムの紹介をおこないます. + ものがあるのかという疑問が自然と湧いてきます. - PLP (Portable Line Printer スプーリングシステム) - - PLP は Patrick Powell によって開発されたソフトウエアを - ベースにされており, インタネット規模のグループの開発者 - によって管理されていました. このソフトの主要サイトは「 - - ftp://ftp.iona.ie/pub/plp/」です. - 「 - web page」にもあります. - - PLP は BSD LPD スプーラと極めて似ていますが, 以下のも - のを含むホストの機能が自慢です. - - - - ネットワークサポートの強化. ネットワーク接続され - るプリンタのサポートや NIS で管理可能な printcap ファ - イル, NFS マウントされるスプーリングディレクトリの機 - 能が組み込まれています. - - - - 洗練されたなキュー管理. 1つのキューで複数のプリン - タに対応可能. キュー間でジョブを転送したり, キューのリ - ダイレクトができます. - - - - リモートプリンタの制御機能 - - - - ジョブの優先順位付け - - - - 拡張性のあるセキュリティとアクセスオプション - - - - - LPRng - LPRng は, その称するところの意味は“LPR: the Next - Generation”ですが, PLP を完全に書き換えたものになっ - ています. Patrick Powell と Justin Mason (PLP の主要 - なの管理者) の共同で LPRng が作成されました. LPRng の - 主要サイトは「 - ftp://dickory.sdsu.edu/pub/LPRng/」です. + LPRng は, その称するところの意味は次世代の LPR + です. これは PLP を完全に書き換えたものになっています. + Patrick Powell と Justin Mason (PLP の主要な管理者) + の共同で LPRng が作成されました. + LPRng の主要サイトは + ftp://dickory.sdsu.edu/pub/LPRng/ + です. トラブルシューティング &man.lptest.1; を使った簡単なテストをおこなった結果, 正しい出 力を得られずに, 以下に示すような出力が得られるかもしれ ません. しばらくしたら出力される, または, 紙の全体が出て こない プリンタは上で示されたような印字を おこなったのですが, しばら くして止まってしまい, 動かなくなってしまいました. 印字 された結果をプリンタから取り出すためには, プリンタにある PRINT REMAINING ボタン, また は, FORM FEED ボタンを押す必要があるようです. この場合は, おそらくジョブはプリントをする前に更にデー タが送られてこないか待ち続けているのでしょう. この問題を解決するためには, プリンタに FORM FEED 文字 (あるいは特定の必要な文字コード) を 送るテキストフィルタを使ってください. プリンタ内部に残っ たデータをプリンタにすぐに印字させるには, 普通は, これ で十分です. 次のジョブが前のジョブの最終ページの中央の どこかから印字を開始させないためにも, 紙の途中で印字の ジョブが終了したかどうかを確認するのは有益です. シェルスクリプト /usr/local/libexec/if-simple を次のように変更して, プリンタへジョブを送信した後に FORM FEED 文字を印字させるようにします. #!/bin/sh # # if-simple - Simple text input filter for lpd # Installed in /usr/local/libexec/if-simple # # Simply copies stdin to stdout. Ignores all filter arguments. # Writes a form feed character (\f) after printing job. /bin/cat && printf "\f" && exit 0 exit 2 - “階段効果”が現れた + 階段効果が現れた 次のような印字結果が得られた. !"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 あなたは「階段効果」 の新たなる犠牲者になってしま いました. この原因は, 改行を表わすべき文字がなんであるか の解釈が混乱していることにあります. UNIX スタイルのオ ペレーティングシステムでは, 改行文字は ASCII コード10 の line feed (LF) の1文字が使われています. MS-DOS や OS/2などは ASCII コード10の LF , ASCII コード 13の文字 (carriage return または CR) をペアで使います. (訳注:Machintosh では CR のみで表現されています). 大抵のプリンタでは, 改行を表わすために MS-DOS の慣習にしたが います. FreeBSD で印字する場合, 印字したテキストは LF 文字だけ が使われていました. プリンタでは LF 文字を見つけると, 紙を1行分送り出しました. しかし, 次の文字を印字するた めの紙の水平方向の位置は維持されました. すなわち, CR 文字が意味することは, 次の文字を印字する位置を紙の左端 に動かすことです. FreeBSD がプリンタに動作をして欲しいと思っている動作を 以下に示します. プリンタが CR を受け取ったとき CR 動作 (復帰) をおこなう プリンタが LF を受け取ったとき CR + LF 動作 (復帰, 改行) をおこなう このように動作させるための方法が いくつかあります. これらの文字の解釈を変えるために, プリンタ の設定スイッチかコントロールパネルを操作する方 法. どのようにして設定をするかはプリンタのマニュ アルを参照してください. FreeBSD 以外のオペレーティン グシステムを切り替えて使う場合, CR と LF 文字 の解釈をそのオペレーティングシステムで使われて いるようにプリンタを 再設定する必要がある かもしれません. 以下に示す解決方法のいずれかを 選ぶのがよいかもしれませんね. 自動的に LF を CR+LF に変換してくれる FreeBSD 用のシリアルドライバを入手する方法. も ちろん, このドライバはプリンタ専用に接続される シリアルポート のみで動作します. この機能 を許可するためには, /etc/printcap ファ イルで対象プリンタの fs 項目で CRMOD ビッ トをセットします. LF 文字の扱いを一時的に変更するためのエ スケープコードをプリンタに送る方法. プリンタ がサポートしているかもしれないエスケープコード については, プリンタのマニュアルを参照してくだ さい. 適切なエスケープコードが見つかったら, 最 初にそのコードを送り, 次にプリントジョブを送信 するようにテキストフィルタを変更してください. 次に, Hewlett Packard 社の PCL エスケープコー ドに対応しているプリンタのためのテキストフィル タの例を示します. このフィルタでは, プリンタ に LF 文字を LF と CR の2文字として扱わせます. その後に, プリンタにジョブを送ります. 最後に, ジョブの最終ページの紙を排出するため, FROM FEED 文字を送ります. このフィルタは Hewlett Packard 社のほとんどすべてのプリンタで機能するは ずです. #!/bin/sh # # hpif - Simple text input filter for lpd for HP-PCL based printers # Installed in /usr/local/libexec/hpif # # Simply copies stdin to stdout. Ignores all filter arguments. # Tells printer to treat LF as CR+LF. Ejects the page when done. printf "\033&k2G" && cat && printf "\f" && exit 0 exit 2 ホスト orchid にある /etc/printcap の 例を以下に示します. ここには, 一番目のパラレル ポートにプリンタ (Hewlett Packard LaserJet 3Si) が一台接続されており, そのプリンタ名は teak です. # # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif: 訳注: LF を CR+LF に置き換える cat コマンド を作る方法も当然考えられます. そして, このコマ ンドと, if-simple の cat の部分 を置き換えればよいわけです. 具体的にどのように するかは, 読者への練習問題としましょう. 各行が重ね書きされてしまった プリンタは紙送りをまったくしませんでした. テキストすべての行 がある行の上で重ねて印字されてしまいました. この問題は, - 階段現象とは“正反対”な問題で, ほとんどま + 階段現象とは正反対な問題で, ほとんどま れにしか起こりません. FreeBSDでは行末として扱われる LF 文字が, 紙の左端に印字位置を復帰しますが, 紙送りはしな い CR 文字として扱われています. プリンタの設定スイッチかコントロールパネルを 使って, LF と CR の文字を次のような解釈をするようにしてください. プリンタが受け取ったとき プリンタがおこなう CR CR 動作 (復帰) LF CR + LF (復帰, 改行) 訳注: LF を CR+LF に置き換える cat コマンドを作る方法 も当然考えられます. そして, このコマンドと, if-simple の cat の部分を置き換えればよいわけ です. 具体的にどのようにするかは, 読者への練習問題とし ましょう. プリンタが文字を紛失してしまう 印字しているのですが, 各行の2〜3文字が印字されません. プリンタを動かせば動かすほど, もっとたくさんの文字が紛 失されていき, この問題は更に悪くなっていくかもしれませ んでした. この問題は, シリアルポートを通してコンピュータから送ら れてくるデータの速度に, プリンタがついていけないことに 起因します (この問題は, パラレルポートに接続されたプリ ンタでは発生することはありません). この問題を克服する 方法が2つあります. プリンタが XON/XOFF のフロー制御をサポート している場合は, 項目 fs で TANDEM ビット をセットして, FreeBSD にこの機能を使用させて ください. プリンタがキャリアフロー制御をサポートして いる場合は, 項目 fs で MDMBUF ビットをセッ トして下さい. それから, プリンタとコンピュータ を接続しているシリアルケーブルがキャリアフロー 制御用に正しく配線されたものかどうかを確認して ください. プリンタがフロー制御をまったく サポートしていな い場合は, 項目 fs の NLDELAY と TBDELAY, CRDELAY, VTDELAY, BSDELA のいくつかのビッ トを組み合わせて使い, プリンタへ送るデータの流 れに適当な遅延を加えてください. プリンタは意味不明な 文字列を印字した プリンタはランダムなゴミのように 見えるものを印字しまし たが, 意図したテキストは印字してくれませんでした. この問題は, 通常, シリアルポートに接続したプリンタでの 通信パラメータの誤りからくる前項とは別の症状です. br 項目の通信速度と fsfc 項目のパリ ティビットの設定を共に調べてみてください. また, プリン タでの設定が /etc/printcap ファイルで設定した 内容と一致しているかどうかも確認してください. 訳注: simple-if のような単純なフィルタだけの状態で, 日 本語を含むテキストを印字しようとした場合にも, シリアル ポート, パラレルポートの使用に関係なく, このような症状 は見られます. 日本語プリンタの場合, 漢字コードそのもの を送信しただけでその漢字を印字してくれるものは, 少なく とも訳者は見たことがありません. 漢字を印字するための制御 コードを別途送信するフィルタが必要となります. また, そ のようなフィルタを使用していても, そのフィルタが想定し てる漢字コードと異なった文書を プリントしようとしたとき もこのような症状は出ます. もちろん, これはプリンタ用の 言語を持たないプリンタの話で, PostScript プリンタ などにプレインテキストを送信しても, 日本語対応, 非対応 に関らず, 意味不明な文字列が印字される (もしくは, 何も 印字されない) ことでしょう. 何も起きない もしプリンタが何の動作もしないのであれば, ハード的な問 題ではなく, 多分 FreeBSD の中に問題があります. /etc/printcap ファイルで, デバッグしているプ リンタのエントリに (lf 項目で) ログファイルを取るよ うに設定を追加してください. 例えば, プリンタ rattan 用のエントリの項目 lf は次のようになります. rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple:\ :lf=/var/log/rattan.log 次に, もう一度印字をおこなってみます. そして, 発生したと思 われるエラーメッセージを見るためにログファイル (上記の 例では, /var/log/rattan.log) を調べます. そこ で見られたメッセージを元に, 問題を解決してみてください. 項目 lf が指定されていない場合, LPD はデフォルト のログファイルとして /dev/console を使います. diff --git a/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml b/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml index 7dae4c398f..3d68001dc7 100644 --- a/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml @@ -1,3142 +1,3142 @@ シリアル通信 - 概要 + この章では UNIX は現在に至るまで, 常にシリアル通信機能をサポートしていました. 実際, 本当に初期の UNIX マシンは, ユーザとの入出力にシリアル通信を使っていました. 10 文字毎秒のシリアルプリンタ, キーボードから構成された 端末(terminal) が広く使われていた当時とは, 何もかもがすっかり変わっています. この章では, FreeBSD でシリアル通信を行なういくつかの方法について説明しています. シリアル接続の基礎 Assembled from FAQ. このセクションには, シリアルポートについての一般的な情報が書かれていま す. あなたが求めている情報が, もしここで見つからなかった場合には, ハン ドブックの端末とダイアルアップのセクションを見てください. ttydX (または cuaaX) デバイスは, アプリケーション上 でシリアルポートをオープンする時に使用する, 標準的なデバイスです. プロセスがデバイスをオープンする際, 端末 I/O 設定の デフォルトセットが使用されます. これらの設定内容は, 次のコマンドで確認することができます. &prompt.root; stty -a -f /dev/ttyd1 このデバイスの設定を変更した場合, その設定はデバイスが クローズされるまで有効です. デバイスが再びオープンされる時, デフォルトの設定値に戻ります. デフォルトの設定を変更するためには, 初期状態 を設定した いデバイスをオープンして調節することができます. 例えば, ttyd5 というデバイスに対して, デフォルトで CLOCAL モードを ON にして, 8 bits の設定をおこない, XON/XOFF フロー制御を行うように設定したい場合は, 次のようにします. &prompt.root; stty -f /dev/ttyid5 clocal cs8 ixon ixoff このコマンドを記述するのに適しているファイルは, /etc/rc.serial です. アプリケーションがttyd5 をオープンするときに, デフォルトでこの設定をおこなうようになります. これらの設定は, 好きなように変更することができます. また, 固定状態 のデバイスに調節を行うことで, ある一定の設定が アプリケーションに変更されることを防ぐこともできます. 例えば, ttyd5 のスピードを 57600 bps に固定したい場合には, 次のようにします. &prompt.root; stty -f /dev/ttyld5 57600 これで, ttyd5 をオープンして, シリアルポートの転送スピードを 変更しようとするアプリケーションは 57600 bps に固定されるでしょう. 本来, デバイスの初期状態を変更したり設定を固定するのは, root だけが行うべきです. MAKEDEV スクリプトがデバイスエントリを作成する時は, これをおこないません. シリアル端末 原作: &a.kelly; 28 July 1996 訳: &a.max; シリアル端末を利用することで, コンピュータのコンソールのそばにいないと きや, 手近にネットワーク接続されているコンピュータがないときでも, FreeBSD の機能を便利に, かつ安価に利用することができます. ここでは, FreeBSD にシリアル端末を接続する方法を解説します. 端末の種類と利用方法 もともと Unix システムにはコンソールがありませんでした. ユー ザはコンピュータのシリアル ポートに接続された端末からログインして プログラムを利用していました. ちょうどモデムと通信ソフトを使ってリモート のコンピュータにログインし, テキスト ベースのプログラムを利用するのと よく似ています. 最近の PC は, 高品質の画像を表示できるコンソールを搭載していま すが, ほとんどすべての Unix 系 OS には未だにシリアル ポートを使ってログ インするための機能があり, FreeBSD でもこの機能がサポートされています. 現在使用されていないシリアル ポートに端末を接続することでシステムに ログインし, 通常はコンソールや Xウィンドウ システムの xterm のウィ ンドウ上で起動しているテキスト ベースのプログラムであれば何 でも利用することができます. 職場での利用ということで考えるならば, FreeBSD が動作しているコンピュー タに接続された何台ものシリアル端末を 各社員の机に配置するというようなこ とが可能です. また, 家庭での利用方法としては, 余っている古い IBM PC や Macintosh を FreeBSD が動いているパワフルなコンピュータの端末として利 用することができます. 普通ならシングルユーザのコンピュータを, パワフ ルなマルチユーザのシステムに変えることができるのです. FreeBSD では, 以下に挙げる3種類の端末が利用できます. ダム (dumb) 端末 PCを利用した端末 X 端末 以下は, それぞれについての解説です. ダム端末 ダム端末は, シリアルライン経由でのコンピュータとの接続専 用のハードウェアです. ダム端末は, テキストの送受信および表示ができる 程度の計算能力しかもっていないので, dumb (間抜け) というように呼ば れています. この端末上でプログラムを実行することはできません. テキスト エディタ, コンパイラ, E-mail, ゲームなどなどのプログラムを実行するのは, ダム端末を接続しているコンピュータの方です. Digital Equipment社の VT-100 や, Wyse社の WY-75 を初めとして, 多くのメーカが何百種類もの ダム端末を作っています. ほとんどどんな種 類のダム端末でも FreeBSD に接続して使用できます. さらに, 高性能の端 末の中には画像を取り扱えるものもありますが, 限られた数のソフトウェア パッケージしかこういった機能には対応していません. ダム端末は, X ウィンドウ システムで提供されるようなグラ フィックアプリケーションを必要としない 職場で広く用いられています. PC を端末として利用する ダム端末 がテキストの表示およ び送受信の機能をそなえただけのものならば, 言うまでもなく, どんなPC もダム端末になり得ます. 必要なものは適切なケーブルと, そのPCの上 で動作する端末エミュレーション を行うソフトウェアのみです. このような環境は, 家庭においてよく利用されます. たとえば, あなたの同居 人が FreeBSD のコンソールを専有している時などに, あまりパワーのないコ ンピュータを FreeBSD システムにシリアル端末として接続し, その端末上で テキストだけを用いる作業をおこなうことができます. X 端末 X 端末は, 既存のものの中で最も洗練された種類の端末といえ ます. X 端末は, たいていの場合シリアル ポートではなく, イーサネッ トのようなネットワークを利用した接続をおこないます. また, アプリケーション の利用においても, テキストベースのものだけでなく, X アプリケーション の利用が可能です. ここでは, 参考までに 端末について紹介しただけで, X 端 末の設定や利用についての解説は おこないません. ケーブルとポート シリアル端末を FreeBSD システムに接続するためには, 適切なケー ブルと, 端末を接続するためのシリアルポートが必要です. ここでは, これ らについて説明します. もし既にあなたの利用したい端末と, その端末 を接続するためのケーブルについてよく理解していれば, 設定 の章まで読み飛ばしてください. ケーブル 端末の接続は, シリアルポートを利用します. そこで, 端末を FreeBSD システムに接続するためには, シリアルケーブル (RS-232C ケーブ ルとも呼ばれています) が必要となります. シリアルケーブルには2種類のケーブルがあります. どちらの種類の ケーブルを使わなければいけないかは, どんな端末を接続したいかによります. もし, PC を端末として利用したい場合は, ヌルモデム ケーブル (リバースケーブルもしくは クロスケーブルと呼ばれることもしばしばあります) を使用してください. ヌルモデムケーブルは, コンピュータ同士や端末同士を接続するために用い られるケーブルです. もし, 本物の端末を接続するのであれば, その端末につい てきたドキュメントからどのようなケーブルを 使うべきか調べてください. も しドキュメントがない場合は, まず ヌルモデム ケーブルを試してみて, うまくいかない場合は スタンダード ケーブル (しばしばストレートケーブルと呼 ばれます) を試してみてください. また, 端末側と FreeBSD 側の 両方の シリア ポート の形状が, あなたが使用しようとしているケーブルについているコネクタの形 状と一致していなければなりません. ヌルモデムケーブル ヌルモデムケーブル (またはリバースケーブルあるいはクロ スケーブル) は, たとえば signal ground 信号のように, いくつかの信 号はそのまま通しますが, 他の信号は途中で入れ替えて通します. たとえば, send data 信号のピンは, 反対側のコネクタの receive data 信号の ピンと繋がっています. 自分で使うケーブルは自分で作りたいということであれば, 以下にター ミナルを接続する際に推奨される ヌルモデムケーブルの結線を示しておきま す. この表では, RS-232C の信号線の名前と, DB-25 コネクタ上のピンの番 号を示しています. Signal Pin # Pin # Signal TxD 2 connects to 3 RxD RxD 3 connects to 2 TxD DTR 20 connects to 6 DSR DSR 6 connects to 20 DTR SG 7 connects to 7 SG DCD 8 connects to 4 RTS RTS 4 5 CTS CTS 5 connects to 8 DCD DCD と RST では, コネクタ内部でピン4を5に接続し, そして逆側のコネクタのピン8と接続します. スタンダード RS-232C ケーブル スタンダードシリアルケーブル (またはストレートケーブル) の場合は, すべての RS-232C 信号をそのまま通します. つまり, 片方の send data 信号のピンは, 逆側の send data 信号のピンと繋がっています. モデムを FreeBSD に接続するときや, 一部の端末を接続するときにこのタイプの ケーブルを使用します. ポート シリアルポートは, FreeBSDが動作しているホスト コンピュータと端 末の間でデータのやりとりを行うために用いるデバイスです. ここでは, 現在存在するポートの種類と FreeBSD でのポートのアクセス方法について解 説します. ポートの種類 シリアルポートには何種類かのものがあります. ケーブルを購 入したり自作したりする前に, そのケーブルのコネクタの形状が端末および FreeBSD システムのポートの形状と一致していることを 確認してください. ほとんどの端末は DB25 ポートを搭載しています. FreeBSDが動作しているも のを含めて, PCは DB25 または DB9 ポートを搭載しています. マルチポート のシリアルカードの場合は, RJ-12 や RJ-45 のポートを搭載しているかもし れません. 利用されているポートの種類に関しては, ハードウェアについてきたドキュメ ントを参照してください. また, 多くの場合, ポートの形状から判断すること もできるでしょう. ポートの名前 FreeBSDでは, /dev ディレクトリ内のエントリを介 してシリアルポートへのアクセスがおこなわれます. 2種類の異なったエン トリがあります. 着信用のポートの名前は, /dev/ttydx ( x は 0から始まるポート番号) となっています. 一般に端末の接続には 着信用ポートを用います. 着信用のポートでは, シリアルラインのデータ キャリア検出 (DCD) 信号がオンになっている必要があります. 発信用のポートの名前は, /dev/cuaax となっています. 発信用のポートは普通モデムの接続に用い, 端末の接続には 利用しません. ただ, ケーブルまたは端末がキャリア検出信号を使えない タイプのものの場合は, 発信用のポートを使うとよいでしょう. 詳しくは, &man.sio.4; のマニュアルをご覧ください. たとえば, 端末を一つ目のシリアルポート (DOS でいうところの COM1) に接 続したとすると, /dev/ttyd0 がこの端末を指すことになります. また, 二つ目のシリアルポート (COM2) ならば /dev/ttyd1 となり, 以下この形式のデバイスエントリを使います. 各シリアルポート, 特にマルチポートのシリアルカードを利用する ために, kernel の設定をおこなう必要がある場合がありますので, 注意してくだ さい. 詳しくは, FreeBSD カーネルのコンフィグレーション をご覧ください. 設定 ここでは, 端末からのログインを可能にするために必要な FreeBSD 側の設定について解説します. 既に端末を接続するポートが利用できるように kernel の設定をおこない, 端末が接続されているものと考えて, 解説を進め ます. 簡単に言えば, プロセス管理や初期化をおこなっている init プロセス に対して, ログイン名を読み込み login プログラムを起動している getty を実行するように指示します. これをおこなうには, /etc/ttys の内容を編集する必要があります. まず, su コマンドで root になって, /etc/ttys に以下の 変更を加えてください. 端末を接続するポートの /dev のエントリが含ま れている行がまだ存在しなければ, これを /etc/ttys に追加してく ださい. /usr/libexec/getty が対象となるポートに対して 実行されるように指定してください. また, /etc/gettytab ファイ ル内の適切な getty タイプのエントリを指定してください. デフォルトのターミナルタイプを指定してください. 対象となるポートを on に設定してください. そのポートが secure であるかどうかを指定してください. init/etc/ttys を読み込みなおさせてく ださい. また, 必要に応じて /etc/gettytab を変更し, 上の 2で使用する getty のエントリを追加してください. このドキュメントではこの方 法については特に解説しませんので, &man.gettytab.5; および &man.getty.8; のマニュアルをご覧ください. 以下では, 上のステップについて詳しく解説します. 実例を用いて, 何をす べきかを解説していきます. Wyse-50 と, 古い IBM の 286 マシン上で通信 ソフト Procomm を使って VT-100 エミュレーションをおこなっているものを端 末の例として紹介します. また, Wyse は 2番目のポートに, 286マシンは 6 番目のポート (マルチポートのシリアルカード上のポート) に接続します. /etc/ttys について, より詳しくは, &man.ttys.5; のマニュアルをご覧 ください. <filename>/etc/ttys</filename> へのエントリの追加 既にエントリがある場合を除いて, まず初めに /etc/ttys にエントリを追加しなければいけません. /etc/ttys には, FreeBSDシステム上のログインを許可するすべての ポートを記述します. たとえば, 一つ目の仮想コンソール ttyv0 のエン トリもこのファイルにあります. このエントリのおかげで, コンソールからの ログインが可能になっています. このファイルには, 他の仮想コンソール, シ リアルポートおよび仮想端末のエントリも含まれています. 端末を接続する 場合は, そのポートの /dev のエントリを, /dev の部分 を省略して記述します. FreeBSD のインストール当初の状態では, ttyd0 から ttyd3 までの, 初めの四つのシリアルポートのエントリが /etc/ttys に記述され ています. これらのポートのいずれかに端末を接続する場合は, 新たなエント リを追加する必要はありません. ここで紹介している例では, 既にファイルにエントリが存在する 2番目のシリ アルポート, ttyd1 に Wyse-50 を接続しています. 一方, 6番目のシ リアルポートに接続する 286マシン用のエントリは, 新たに追加してやらな ければなりません. 以下に, エントリを追加した後の /etc/ttys か ら抜粋して示します. ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd5 <replaceable>getty</replaceable> タイプの指定 次に, 端末からのログインを処理するプログラムの指定をおこな います. FreeBSDでは, 標準的には /usr/libexec/getty をこの目的 で利用しています. login: プロンプトを送り出しているのは, このプロ グラムです. getty プログラムは, コマンドラインパラメータとして, getty タイプをとります. ただし, このパラメータは必須ではあ りません. getty タイプは, ボーレートやパリティといった, 接続され た端末の特徴を表すものです. getty プログラムは, 与えられた getty タイプに対応したこれらの特徴を /etc/gettytab から 読み込みます. ファイル /etc/gettytab には, 新旧の端末に関する多数のエントリ が記述されています. ほとんどの場合, std という文字列で始まる名前 のエントリを使えば, 接続された端末に対してログインセッションを提供す ることができます. これらのエントリを利用した場合, パリティは無視されま す. 110 bps から 115200 bps までのボーレートに対応した std のエン トリがあります. 当然, 新たなエントリを追加することも可能です. &man.gettytab.5; のマニュアルに, さらに詳しく解説されています. /etc/ttysgetty タイプの設定をする際は, 端末側の通信 パラメータの設定が, getty タイプのものと一致していることを確認し てください. 紹介している実例では, Wyse50 はパリティなし 38400 bps で接続していま す. また, 286 マシンの方は, パリティなし 19200 bps の接続です. 以下は, この段階でのこの二つの端末に関する /etc/ttys の設定です. ttyd1 "/usr/libexec/getty std.38400" unknown off secure ttyd5 "/usr/libexec/getty std.19200" ここで, 実行するプログラムを指定している 2番目のフィールドが, ダブルクォー テーションに囲まれていることに注意してください. こうしないと, getty のタイプの指定が, つぎのフィールドとして判断されてしまう可 能性があるので, 十分注意することが必要です. デフォルトのターミナルタイプの指定 /etc/ttys の 3番目のフィールドには, そのポートのター ミナルタイプのデフォルトを指定します. ダイアルアップ用のポートの場合 は, ユーザがどのタイプの端末あるいは 通信ソフトを利用してダイアルアップ してくるかは分からないので, unknowndialup を記述するの が一般的です. 一方, 直結された端末の場合, ターミナルタイプが変わるこ とはありませんから, このフィールドには実際のターミナルタイプを記述し ます. 一般に, ユーザは .login.profile などのファイル内で tset コマンドを使って, ターミナルタイプをチェックし, 必要ならば ターミナルタイプの入力を求めるプロンプトを 表示するようにします. この とき, /etc/ttys の中でターミナルタイプが指定されていれば, このプロンプトを表示せずに先に進むことが可能です. FreeBSD 上で, どのターミナルタイプを利用できるかは, /usr/share/misc/termcap をご覧ください. このファイルには, お よそ 600 のターミナルタイプが定義されています. 必要ならば, 新たなエン トリを追加することも可能です. 詳しくは &man.termcap.5; のマニュアルをご覧ください. 紹介している例では, Wyse-50 のターミナルタイプは Wyse-50 です (もっ とも他のタイプをエミュレートすることも可能ですが, ここでは Wyse-50 モー ドで使用します. ). また, 286マシン上では Procomm が VT-100 エミュレー ションをおこなうように設定されています. 以下が, まだ未完成の /etc/ttys の関連部分です. ttyd1 "/usr/libexec/getty std.38400" wy50 off secure ttyd5 "/usr/libexec/getty std.19200" vt100 ポートを利用可能にする /etc/ttys のつぎのフィールド, つまり 4番目のフィー ルドは, そのポートをアクティブにするかどうかの設定です. このフィールド に on を指定すると, init プロセスが2番目のフィールドに書かれ たプログラム, getty を実行し, ログインのためのプロンプトを送り出 すようになります. このフィールドに off を記述すると, getty は起動されず, よってこのポートからのログインもできなくなります. ということで, 当然このフィールドには on を指定します. 以下が /etc/ttys です. それぞれのポートを on にしました. ttyd1 "/usr/libexec/getty std.38400" wy50 on secure ttyd5 "/usr/libexec/getty std.19200" vt100 on ``secure'' なポートの指定 とうとう最後のフィールドの設定です. (実際にはここでは触れ ませんが, オプショナルなwindow の設定のフィールドも存在するので, ほぼ最後のフィールドといった方が正確かもしれません. ) 最後のフィールド では, そのポートが安全かどうかを指定します. ここで, 安全 なポートとはどういうポートのことでしょう? これは, root のアカウント (または, ユーザ ID が 0 のアカウント) がロ グインしてもよいポートということです. 安全でないポートでは, root のロ グインは許可されません. では, どのように安全なポートとそうでない ポートを使えばよいでしょう? ポートを安全ではないとすることで, そのポートに接続された端末からは, root のログインを禁止することができます. FreeBSDシステムの root のパス ワードを知っている人は, まず一般ユーザとしてログインしなければなりませ ん. スーパユーザの特権を得るためには, そのうえで su コマンドを 利用しなければいけません. これによって, root アカウントが不正に利用された場合に, その経過を調査 する上で二つの記録を利用できるようになります. loginsu コマンドは, 共にシステムのログに記録を残します (また, ログイン は wtmp にも記録を残します. ). ポートを安全なものとして指定すると, その端末からの root のログインが可 能になります. root のパスワードを知っている人は, 単に root としてログ インできます. この場合は, 当然ログインの記録や su コマンドのログ は残りません. では, どちらを使うべきでしょうか? 単純に insecure を使うのがよいでしょう. 公共の場所にある訳ではな い端末や, 鍵のかかったドアの内側にある端末にも insecure を指 定する方がよいでしょう. スーパユーザの特権が必要な場合でも, ログイ ンして su を実行するのは, ごく簡単なことなんですから. 以下に, ようやく完成した /etc/ttys のエントリに端末の場所を表 すコメントを追加したものを示します. ttyd1 "/usr/libexec/getty std.38400" wy50 on insecure # Kitchen ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure # Guest bathroom <command>init</command> にファイル <filename>/etc/ttys</filename> の再読み 込みをさせる FreeBSD をブートすると, 最初に起動されるプロセス, init/etc/ttys を読み込んで, 記述されているプログラムを利用可能な ポートに対して実行し, ログインプロンプトを送り出させます. /etc/ttys の編集が終わった後, init に変更を認識させるた めに, わざわざ FreeBSD をブートしなおしたくはないでしょう. このような 場合のために, init は, SIGHUP (hangup) シグナルを受信すると, /etc/ttys を読み込みなおすようになっています. /etc/ttys の変更を保存したら, 以下のようなコマンドを実行して, init に対して SIGHUP を送信します. &prompt.root; kill -HUP 1 (init プロセスのプロセス ID は 常に 1です. ) すべての設定が正しくおこなわれ, すべてのケーブルがただしく接続されてい て, かつ端末の電源が入っていれば, 端末にはログインプロンプトが表示され ているはずです. これで, これらの端末からの最初のログインの準備が完了で す! トラブルシューティング 細心の注意を払って設定をおこなっても, ときには端末の接続がう まくいかない場合があるでしょう. 以下に, よく見られる問題とその解決方法 を示します. ログインプロンプトが表示されない 端末の電源が接続され, スイッチが入っていることを確認してください. もし, PC を端末として利用している場合は, 通信ソフトが適切なシリアルポー トを利用する設定になっているかどうか確かめてください. ケーブルがしっかりと端末と FreeBSDが動作しているコンピュータの両方に接続され ていることを確認してください. また, 正しい種類のケーブルを利用している か確かめてください. 端末と FreeBSD の間の通信速度とパリティの設定が一致していることを確認 してください. 出力をモニタに表示するタイプの端末の場合は, モニタ のコントラストと明るさの設定を確認してください. また, 出力が印刷 されるタイプの端末の場合は, 紙とインクが十分にあるかどうかを確かめてく ださい. getty が動いていて, 端末を認識していることを確認してください. 以 下のコマンドで動作中の getty プロセスのリストを得ることができます. &prompt.root; ps -axww|grep getty その端末に対する getty の情報が表示されるはずです. たとえば, 以下 の表示例は, getty は 2番目のシリアルポート (ttyd1) に対し て /etc/gettytab 中の std.38400 のエントリを使って動作し ているということを示しています. 22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1 もし, getty プロセスが一つも動いていないようであれば, /etc/ttys の中で, そのポートを利用可能にする設定をしたかどう か確かめてください. また, kill -HUP 1 を確実に実行してください. ログインプロンプトの代わりにゴミが表示される 端末と FreeBSD の間の通信速度およびパリティの設定が一致していることを確 かめてください. また, getty プロセスの情報を調べて, 適切な getty のタイプが使用されていることを確認してください. 間違った getty タイプが使用されている場合は, /etc/ttys を修正し てから, kill -HUP 1 を実行してください. 文字が重複して表示される, 入力したパスワードが表示される 端末または通信ソフトの設定で, 半二重 (half duplex) あるいは ローカ ルエコー となっているところを, 全二重 (full duplex) に変更してください. ダイアルインサービス 原作: &a.ghelmer;. 訳: &a.max;. 6 September 1996. このドキュメントでは, FreeBSD で外部からのモデムによるアクセスを受け付 けるための設定に関してまとめてあります. このドキュメントは筆者が FreeBSD 1.0, 1.1 および 1.1.5.1 での経験と, 他の UNIX 系 OS での経験を 基に書いたものですが, 必ずしも十分な内容でないかもしれませんし, 掲載し た実例もあなたが今お使いの環境とは一致しないかもしれません. また, 筆者 はこのドキュメントに従って行われた作業で データが失われたりシステムが破 壊されるようなことがあっても, 一切責任をとれません. 設定を始める前に 筆者は, 読者が FreeBSD に関する基本的な知識をもっていることを仮定して このドキュメントをまとめました. まず, FreeBSD が既にインストールされ ていて, UNIX 系環境においてファイルの編集の方法やシステムに付属のマニュ アルを参照する方法を知っている必要があります. また, 以下に示すように, FreeBSD の特定のバージョンが必要となりますし, いくつかの用語に関する 知識, そしてモデムや多少の配線に関する知識も必要となります. FreeBSD のバージョン まず, FreeBSD のバージョンは 1.1 以上を使用してください (バージョン 2.x でもかまいません. ). FreeBSD 1.0 には, 2種類のシリアル ドライバ が含まれているので, 混乱の元となり得ます. また, FreeBSD のシリアル ディバイス ドライバ (sio) は, バージョンを追う毎に改善されてき ていますので, より新しいバージョンの FreeBSD を使用することで, よりよ い, より効率の高いドライバを利用することができるはずです. 用語解説 以下, 簡単にいくつかの用語について解説しておきます. bps Bits per Second の略で, データの転送速度を表す単位. DTE Data Terminal Equipment の略. たとえばコンピュータ本体のこと. DCE Data Communications Equipment の略で, 具体的にはモデムのこと. RS-232 EIA (米電気産業協会) のハードウェア間シリアル通信の標準規 格. これらの用語やデータ通信一般に関して, より詳しい情報が必要な場合は, The RS-232 Bible という本 (誰か ISBN 分かる方いませんか?) が参考 になると思います. 通信においてのデータ転送速度に関して, このドキュメントでは ボーレー ト (baud rate) ではなく, bps (bits per second) をその単位として 使うことにします. これは, ボーというのは一定時間に生じる電気的状態の変 化の数を表す単位にすぎず, bps という単位の方が実体に即しているか らです. (少なくとも, こういう表現をしておけば, 意地の悪い人に怒られる こともないのではないかと思います. ) 外づけモデムと内蔵モデムについて ダイアルアップのサービスに関していえば, 外づけのモデムの方が適している ようです. これは, 多くの外づけのモデムは設定を不揮発ラムに書き込んで半 永久的に保存することができますし, また RS-232 に関する重要な情報を知る ための点滅するライトによるインディケータが 搭載されているからです. 点滅 するライトは, システムを見に来た訪問者に強い印象を与えるという効果だけ でなく, モデムが適切に動作しているかどうかを知るためにも 有効です. 一方, たいていの内蔵型のモデムには 不揮発性ラムが搭載されていないため, ディップ スイッチの変更以外に設定を保存する方法がありません. また, も しインディケータがついていても, おそらくコンピュータのケース カバーが 外されていなければその状態を確認するのは 難しいでしょう. モデムとケーブル 以下のことに関して, 予め知っておく必要があります. コンピュータとモデムの間での通信が 行えるようにするための接続方 法. (内蔵型の場合は接続の必要はありません) お使いのモデムのコマンドについての知識, あるいはコマンドの解説 の在処 (通信ソフトを使っての) モデムの不揮発ラムに保存可能な設定の変更 方法 1番目のモデムの接続はたいてい簡単に行えるはずです. ほとんどのストレー ト シリアル ケーブルが使えるでしょう. 使用すべきケーブルは, 両端に適 切なコネクタ (DB-25 または DB-9 の雄または雌) のついた, DCE-DTE 間接 続用のもので, 以下の信号線が接続されていなければなりません. Transmitted Data (SD) Received Data (RD) Request to Send (RTS) Clear to Send (CTS) Data Set Ready (DSR) Data Terminal Ready (DTR) Carrier Detect (CD) Signal Ground (SG) FreeBSD で 2400bps 以上の転送速度を利用する場合には, フロー制御のため に RTS 信号と CTS 信号が必要です. また, 接続の確立と回線の切 断を検出するために CD 信号を利用します. さらに, DTR 信号を使っ て回線切断後のモデムのリセットを行います. ケーブルの中には, 総ての必要 な信号線が接続されていないものもありますので, たとえば, 回線切断後でも ログイン セッションが残ってしまうといった問題が発生した場合などには, ケーブルに問題がある可能性もあります. 次に, お使いのモデムにもよりますが, もしモデムのコマンドをよく覚えてい ない場合は, モデムのマニュアルをすぐに参照できるようにしておいてくださ い. このドキュメントでは例として USR Sportstar の 14,400 bps の外づけ型 モデムのコマンドを示しておきます. 他の種類のモデムをお使いの場合も, 参 考になるかもしれません. 最後に, FreeBSDで快適にモデムを使うためにも, モデムの設定方法を知って おく必要があります. FreeBSD も他の UNIX 系 OS と同様, 回線の接続およ び切断の検出や回線の切断および回線切断後の モデムの初期化にハードウェア シグナルを利用します. FreeBSD は, モデムに対するコマンドの送信やモデ ムの状態の監視を行いません. パソコンで運用されている BBS への接続に慣 れている方にとっては, ちょっとめんどうかもしれませんね. シリアル インタフェースについて FreeBSD では, NS8250-, NS16450-, NS16550- および NS16550A- に基づ いた EIA RS-232C (CCITT V.24) 規格のシリアル インタフェースをサポート しています. 8250 および 16450 ベースのディバイスには1文字のキャラクタ バッファが搭載されています. また, 16550 系のディバイスには, 16文字分 のバッファが搭載されていて, はるかによいパフォーマンスを得られます. (ただし, 無印の 16550 では, バグがあって 16 文字バッファが利用できませ んので, 可能であれば 16550A 系のディバイスを利用してください. ) 1文字 のバッファの物は, 16550 系のものと比べて OS にかける負荷が大きいので, 16550A 系ディバイスの利用を強く推奨します. 多数のシリアル ポートを利 用する場合や, 負荷の高いシステムにおいては, 16550A 系ディバイスを使う ことで, エラー発生率を低く押さえることができます. 概要 FreeBSD は以下の手順でモデムからのログインを受付ます. init から起 動された getty のプロセスが, 割り当てられたシリアル ポート (この 例では /dev/ttyd0) がオープンされるのを辛抱強く待ちます. ps ax コマンドを実行すると, 以下のような出力が得られるはずです. 4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0 ユーザがモデムに電話をかけ, モデム同士が接続されると, モデムの CD が検出されます. その結果, kernel がキャリア信号を検出して, getty によるポートのオープンの処理が終了します. getty は, login: プロンプトを指定されている初期回線速度で送信します. getty は, 正常に文字列を受信できるかどうか監視し, 通常の設定では, もし以上な文字列を検出した場合 (理由としては, getty の速度とモデ ムの接続速度が異なっているような場合が考えられます. ), 正常に文字列が 受信できるまで, getty は速度を変え続けます. getty が正しい速度を検出すれば, ユーザに対して login: プロン プトが表示されるはずです. ユーザがログイン名を入力すると, getty/usr/bin/login を起動して, パスワードの入力を要求し, その 後ユーザのシェルを起動します. それでは, 続いて設定についての解説です. kernel の設定 通常, FreeBSD の kernel は, PC-DOS の世界で COM1:, COM2: , COM3: および COM4: と呼ばれる四つのシリアル ポートを 探す ように設定されています. また, FreeBSD では, 現在のところ Boca の 1008 や 2016 のような, 単純なマルチポートのシリアル インタフェースもサポー トしています. (マルチポートのシリアル ボードに関しての kernel の設定 については, &man.sio.4; のマニュアルを参照してください. ) デフォルト の kernel は, COM ポートだけを探します. 搭載されているシリアル ポートのいずれかを, kernel が認識しているかどう か確認したい場合は, kernel 起動時のメッセージを注意深く見ているか, あ るいは /sbin/dmesg コマンドを使って, ブート時の出力メッセージ を確認してください. 特に, sio で始まるメッセージをよく見てくださ い. 参考までに, 以下のコマンドで sio という文字列を含むメッセージ だけを表示することができます. &prompt.root; /sbin/dmesg | grep 'sio' たとえば, シリアル ポートを四つ持つシステムの場合は, 以下のようなシリ アル ポートに関するメッセージが kernel によって表示されます. sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A もし, kernel に正常に認識されないポートがある場合は, おそらくカスタマ イズした kernel を構築する必要があるでしょう. kernel 構築と構築のための設定に関しては, BSD System Manager's Manual の Building Berkeley Kernels with Config (config コマンドによる BSD kernel の構築) [ソース ファイルは /usr/src/share/doc/smm にあります]と FreeBSD Configuration Options [ /sys/conf/options および /sys/arch/conf/options.arch arch の部分をたとえば i386 としたファイル ] を参照 してください. kernel の設定と構築をするためには, kernel のソース (FreeBSD 1.1 では srcdist/srcsys.??, FreeBSD 1.1.5.1 では srcdist/sys.??, またFreeBSD 2.0 では総てのソース)を展開 する必要があります. まだ自分のシステムの kernel 用のコンフィギュレーション ファイルを作っ ていない場合は, /sys/i386/confcd して作成してくださ い. 初めてコンフィギュレーション ファイルを作る場合は, まず GENERICAH (FreeBSD 1.x で BusTek の SCSI コントローラを使っている場合は GENERICBT) というファイルを, YOURSYS にコピーしてください. ここ で, YOURSYS はあなたのシステム名で, 大文字である必要があります. このファイルを編集して, ディバイスに関する記述を変更します. device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr device sio2 at isa? port "IO_COM3" tty irq 5 vector siointr device sio3 at isa? port "IO_COM4" tty irq 9 vector siointr システムに搭載されていないディバイスに関する記述は, コメントアウトまた は削除してしまってかまいません. Boca の BB2016 のようなマルチポートの シリアル ボードをお持ちの場合は, &man.sio.4; のマニュアルを見て, マ ルチポートのボードのためのコンフィギュレーション ファイルの記述のし方 に関して確認してください. ディバイスのフラグの 指定方法がバージョンによっ て異なりますので, 別のバージョンの FreeBSD で利用していたコンフィギュ レーション ファイルを流用する場合には 十分注意してください. なお, port "IO_COM1", IO_COM2, IO_COM3 および IO_COM4 は, それぞれのポートの一般的なアドレスである 0x3f8, 0x2f8, 0x3e8 および 0x2e8 を表します. また, 割り込 み番号 4, 3, 5 と 9 は, それぞれ COM1: から COM4: のポー トで一般的に使用される IRQ です. また, ISA バスのコンピュータの場合, 一般的なシリアルポートは複数のポートで一つの IRQ を共有することが できませんので注意が必要です. (マルチポートのシリアル ボードの 場合は, 複数の 16550A ベースのポートで一つまたは二つの IRQ を共有する ための機構を備えています. ) コンフィギュレーション ファイルの編集が終わったら, Building Berkeley Kernels with Config (config コマンドによる BSD kernel の構築) および &man.config.8; のマニュアルにしたがって, config コマンド を使って kernel 構築のためのディレクトリを作成した後, kernel の構築, インストールおよびテストを行ってください. ディバイス スペシャル ファイル kernel に組み込まれているほとんどのディバイスは, /dev ディレ クトリにある, ディバイス スペシャル ファイル を介してアクセスされ ます. sio ディバイスの場合は, 着信用の /dev/ttyd? およ び, 発信用の /dev/cua0? が利用されます. さらに, FreeBSD の 1.1.5 以降では, 初期化ディバイス (/dev/ttyi?/dev/cuai0?) およびロッキング ディバイス (/dev/ttyld?/dev/cual0?) も合わせて利用されます. 初期化ディバイスは, 通信 ポートがオープンされる度に, そのポートの初期設定を行うために使われます. たとえば, CTS/RTS によるフロー制御を行うモデムが接続されてい る場合の crtscts などのパラメータの初期化が行われます. ロッキング ディバイスは, ポートの設定をロックし, 他のユーザやプログラムにこれらを 変更されることのないようにするために利用されます. 通信ポートの設定, 初 期化とロックおよび設定の変更に関しては, それぞれ &man.termios.4;, &man.sio.4; と &man.stty.1; のマニュアルをご覧ください. ディバイス スペシャル ファイルの作成 ディバイス スペシャル ファイルの管理は, ディレクトリ /dev にあるシェル スクリプト MAKEDEV によって行います. (FreeBSD 1.1.5 の &man.MAKEDEV.8; のマニュアルの COM ポートに関する記述は, かなりいい加減なので無視してください. ) MAKEDEV を使って, COM1: (ポート 0) をダイアルアップのポートとして利用するためのディ バイス スペシャル ファイルを作るには, /devcd して から, MAKEDEV ttyd0 と実行してください. 同様に, MAKEDEV ttyd1 とすることで, COM2: (ポート 1) 用のディバイス スペシャル ファイル を作成することができます. MAKEDEV は, /dev/ttyd? のディバイス ファイルだけでなく, /dev/cua0? (および FreeBSD 1.1.5 以降では総ての初期化ディバイ スとロッキング ディバイスのスペシャル ファイル) も作成します. さらに, もしシリアル端末用のスペシャル ファイル /dev/tty0? が存在すれ ば, それらの削除も行います. ディバイス スペシャル ファイルの作成後, これらのファイルのパーミション が適切に設定されていて, これらのディバイスを利用してもよいユーザのみが 読み書きできるようになっていることを確認してください. (特に /dev/cua* のパーミションには注意を払ってください. ) この確認 を怠ると, 一般のユーザがあなたのモデムを使うことができるようなことにな りかねません. デフォルトの /dev/cua* のパーミションは, 以下の ようになっていて, たいていの場合適切なものだと思います. crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cua01 crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuai01 crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cual01 上の設定では, ユーザ uucp と, グループ dialer に属するユーザ が発信用のディバイスを利用できます. 設定ファイル FreeBSD のシステムへのダイアル アップによるアクセスを実現するために編 集が必要と思われる設定ファイルが, /etc ディレクトリに三つあ ります. まず, /etc/gettytab には, /usr/libexec/getty デーモンの設定を記述します. つぎに, /etc/ttys に保存されている情報から, /sbin/init はど の tty ディバイスに対して getty のプロセスを実行するべきか判 断します. 最後に, お使いの FreeBSD が 1.1.5.1 以降のものならば /etc/rc.serial スクリプトに, それ以前のものならば /etc/rc.local スクリプトにシリアル ポートの初期化のためのコマ ンドを記述することができます. UNIX にダイアル アップ モデムを接続する方法には, 二つの考え方がありま す. 一つの方法は, ダイアル インしてくるユーザの接続速度に関係なく, 常 にモデムとローカルのコンピュータの RS-232 インタフェースの接続速度を一 定に保つように設定する方法です. この設定の長所は, ユーザがダイアル イ ンして接続されると, 即座にシステムからのログイン プロンプトが送信され るということです. 短所は, システムが実際のモデム間の速度を知ることがで きないために, Emacs のようなフル スクリーンのプログラムが, 端末との接 続速度が遅い場合でも, そのような場合に効果的な方法で画面出力を行わない 点です. もう一つは, モデムの RS-232 インタフェースとコンピュータの接続速度を, モデム間の接続速度に応じて変化させるような設定です. たとえば, モデム間 の接続が V.32bis (14.4 Kbps) ならば, モデムとコンピュータの間の接続を 19.2 Kbps とし, モデム間の接続が 2400 bps の時には, モデムとコンピュー タ間も 2400 bps で接続するような設定をします. この場合, getty は, モデムが返すリザルト コードからモデムとコンピュータの接続速度を認識す ることができませんので, getty は, まず初期速度で login: とい う文字列を送信して, それに対する応答の文字列を監視します. ここで, ユー ザ側の端末に無意味な文字列が表示された場合, ユーザは意味のある文字列を 受信するまで <Enter> キーを繰り返し押さなければならない ということを知っていると仮定しています. もし接続速度が間違っている場合, getty は, ユーザから送られた文字を無意味な文字列として扱い, 次の 速度を試します. そして, ここで再度 login: プロンプトを送信します. この一連の動作が異常な回数繰り返されることも考えられますが, 普通は1度 か2度のキー入力があれば, ユーザはまともなプロンプトを受信できます. こ のログインの動作が前者の固定速度による方法に 比べて美しくないのは明らか ですが, この方法では, 低速度で接続しているユーザに対するフル スクリー ンのプログラムからのレスポンスが改善されます. このドキュメントでは, 両方の設定方法について解説しますが, どちらかとい うとモデム間の速度に応じて RS-232 インタフェースの速度が変化するような 設定の方に偏った説明になってしまうと思います. <filename>/etc/gettytab</filename> /etc/gettytab は, &man.getty.8; の設定ファイルで, &man.termcap.5; と同様の形式で記述されます. ファイルのフォーマットや定 義できる機能についての詳細については, &man.gettytab.5; のマニュアルを ご覧ください. 固定速度の設定 モデムとコンピュータ間の通信速度を固定して使う場合, おそらく /etc/gettytab に特に変更を加える必要はないはずです. 可変速度の設定 getty が利用するモデムとコンピュータの接続速度に関する情報を /etc/gettytab に記述する必要があります. もし, 2400 bps のモ デムをお使いになるのであれば, 既存の D2400 のエントリがそのまま利 用できるでしょう. このエントリは FreeBSD の 1.1.5.1 の gettytab には既に含まれていますので, あなたの FreeBSD のバージョンでこのエント リが存在しているのであれば, 新たに追加する必要はありません. # # Fast dialup terminals, 2400/1200/300 rotary (can start either way) # D2400|d2400|Fast-Dial-2400:\ :nx=D1200:tc=2400-baud: 3|D1200|Fast-Dial-1200:\ :nx=D300:tc=1200-baud: 5|D300|Fast-Dial-300:\ :nx=D2400:tc=300-baud: 高速モデムをお使いの場合は, おそらく /etc/gettytab に新たなエ ントリを追加する必要があります. 以下の例は, 14.4 Kbps のモデムを, 最 大インタフェース速度を 19.2 Kbps として利用するためのエントリです. # # Additions for a V.32bis Modem # um|V300|High Speed Modem at 300,8-bit:\ :nx=V19200:tc=std.300: un|V1200|High Speed Modem at 1200,8-bit:\ :nx=V300:tc=std.1200: uo|V2400|High Speed Modem at 2400,8-bit:\ :nx=V1200:tc=std.2400: up|V9600|High Speed Modem at 9600,8-bit:\ :nx=V2400:tc=std.9600: uq|V19200|High Speed Modem at 19200,8-bit:\ :nx=V9600:tc=std.19200: 上記の例を利用した場合, FreeBSD 1.1.5 以降ではパリティなし, 8ビットの 接続が行われます. FreeBSD 1.1 では, :np: パラメータをファイルの 先頭の std.xxx のエントリに追加することで, パリティなし, 8ビットの接続が行われますが, このパラメータを追加しなければ接続は偶数 パリティ, 7ビットになります. 上記の例では, まず 19.2 Kbps (V.32bis) によるモデムとコンピュータ間の 接続を試み, 続いて 9600 bps (V.32), 2400 bps, 1200 bps, 300 bpsと順に 試み, 再び 19.2 Kbps による接続を試みるという循環に入ります. この接続 速度の循環は, nx=(next table) の機能で実現されています. ま た, 各行はそれぞれ tc=(table continuation) の機能を使って, その他の接続速度に依存した 標準的な 設定を取り込んでいます. もし, お使いのモデムが 28.8 Kbps であったり, 14.4 Kbps の圧縮転送の機 能を有効に利用したい場合は, 19.2 Kbps よりも速い速度を利用するように 設定する必要があります. 以下に 57.6 Kbps から接続を試みる gettytab の設定例を示しておきます. # # Additions for a V.32bis or V.34 Modem # Starting at 57.6 Kbps # vm|VH300|Very High Speed Modem at 300,8-bit:\ :nx=VH57600:tc=std.300: vn|VH1200|Very High Speed Modem at 1200,8-bit:\ :nx=VH300:tc=std.1200: vo|VH2400|Very High Speed Modem at 2400,8-bit:\ :nx=VH1200:tc=std.2400: vp|VH9600|Very High Speed Modem at 9600,8-bit:\ :nx=VH2400:tc=std.9600: vq|VH57600|Very High Speed Modem at 57600,8-bit:\ :nx=VH9600:tc=std.57600: もし, お使いの CPU が低速のものであったり, CPU に対する負荷が高い場合 で, 16550A 系のシリアル ポートをお使いでない場合, 57.6 Kbps の接続に おいて, sio の silo エラーが発生するかもしれません. <filename>/etc/ttys</filename> /etc/ttys には, init が監視すべき tty のリストを記 述します. さらに, /etc/ttys は, login に対してセキュリ ティに関する情報を提供します. (ユーザ root は, secure とマー クされている tty のみからログインできます. ) 詳しくは &man.ttys.5; のマニュアルをご覧ください. /etc/ttys の既存の行を変更するか, あるいは新しい行を追加して, init が自動的に新しいダイアル アップ サービス用のポートに対して getty プロセスを起動するようにしてください. 書式は, 固定速度の設 定か可変速度の設定かに関わらず, 以下のとおりです. ttyd0 "/usr/libexec/getty xxx" dialup on 1番目の項目は, このエントリで対象とするディバイス スペシャル ファイル です. 上の例では ttyd0 として, /dev/ttyd0getty に監視させることを表しています. 2番目の項目 "/usr/libexec/getty xxx" (xxx は初期段階で使われる gettytab のエントリ に置き換えてください. ) が, init がこのディバイスに対して起動する プロセスです. 3番目の dialup は, デフォルトのターミナル タイプで す. 4番目の on は, この行が有効であることを init に対して示 しています. 5番目の項目に secure を指定することもできますが, これ は, たとえばシステムのコンソールのように, 物理的に安全な端末に対しての み指定するようにしてください. デフォルトのターミナル タイプ (上記の例では dialup) は, ローカル のユーザの好みによって異なってきます. ユーザがログイン スクリプトをカ スタマイズして, ターミナル タイプが dialup の時には自動的に他のター ミナル タイプを設定できるように, ダイアル アップのポートのデフォルトの ターミナル タイプには dialup が伝統的に用いられています. しかし, 筆者のサイトでは, ほとんどのユーザが VT102 エミュレイションを使ってい るので, ダイアル アップのポートのデフォルト ターミナル タイプとして vt102 を指定しています. /etc/ttys の修正がすんだら, 以下のようなコマンドを使って init プロセスに HUP シグナルを送り, /etc/ttys を 読み込み直させてください. &prompt.root; kill -1 1 ただ, もし初めてシステムを設定しているのであれば, モデムが適切に設定さ れて接続されるまでは, init に対してシグナルを送らない方がいいか もしれません. 固定速度の設定 速度を固定する設定では, /etc/ttys の中で, getty に対し て固定速度のエントリを指定する必要があります. たとえば, 以下の例はポー トのスピードが 19.2 Kbps に固定されたモデムのための ttys のエント リです. ttyd0 "/usr/libexec/getty std.19200" dialup on 別の速度でモデムのポートのスピードを固定したい場合は, /etc/gettytab から適切なエントリを選んで, 上の例の std.19200 の部分を std.speed として, 適切な速度のも のに置き換えてください. 可変速度の設定 可変速度の設定では, ttys のエントリが, /etc/gettytab の中の適切な 自動速度調整 の初期設定のエントリを参照していなければな りません. たとえば, もし前述の 19.2 Kbps から接続を試みる可変速度の設 定例 (V19200gettytab エントリ)をそのまま ttys に追 加したのであれば, ttys エントリは以下のようになります. ttyd0 "/usr/libexec/getty V19200" dialup on <filename>/etc/rc.serial</filename> または <filename>/etc/rc.local</filename> V.32, V.32bis または V.34 モデムのような高速モデムを利用する場合, ハー ドウェア (RTS/CTS) フロー制御を行う必要があります. FreeBSD kernel のモデム ポートにハードウェア フロー制御のフラグを設定するため の stty コマンドを, FreeBSD 1.1.5.1 以降では /etc/rc.serial に, FreeBSD 1.1 では /etc/rc.local に 記述できます. たとえば, FreeBSD 1.1.5.1 の /etc/rc.serial のサンプルは以下 のとおりです. #!/bin/sh # # Serial port initial configuration stty -f /dev/ttyid1 crtscts stty -f /dev/cuai01 crtscts この例では, termio のフラグ crtscts をシリアル ポート #1 (COM2:) のダイアル インおよびダイアル アウトの初期化ディバイスに 設定しています. 古い FreeBSD 1.1 では, 以下のエントリが crtscts フラグを設定する ために /etc/rc.local に追加されていました. # Set serial ports to use RTS/CTS flow control stty -f /dev/ttyd0 crtscts stty -f /dev/ttyd1 crtscts stty -f /dev/ttyd2 crtscts stty -f /dev/ttyd3 crtscts FreeBSD 1.1 には初期化のためのディバイス スペシャル ファイルがないので, ディバイス ファイルそのものにフラグを設定して, その後はフラグをクリア してしまうような極悪人が現れないことを願うしかありません. モデムの設定 もし, あなたのモデムがパラメータを不揮発ラムに 保存できるタイプならば, PC-DOS 上の Telix や FreeBSD 上の tip などのような通信プログラム を使って, パラメータを設定してください. getty が利用する初期速度でモデムに接続して, 以下の条件を満たすよ うに不揮発ラムの設定を変更してください. 接続時に CD 信号がオンになる 接続時に DTR がオンになり, DTR オフで回線を切断しモ デムをリセットする. 送信時フロー制御には CTS を利用. XON/XOFF によるフロー制御を行わない. 受信時のフロー制御は RTS を使用. Quiet mode (リザルト コードを返さない) コマンド エコーを返さない. これらを実現するためのコマンドやディップ スイッチの設定に関しては, モ デムのマニュアルを参照してください. 以下に, USRobotics Sportster の 14,400 bps の外づけモデムの設定例を示 しておきます. ATZ AT&C1&D2&H1&I0&R2&W ことのついでに, たとえば, V42.bis や MNP5 のデータ圧縮を使用するかど うかなどのモデムの他の設定について確認, 調整しておくのもよいかもしれま せん. さらに, USRobotics Sportster の 14,400 bps の外づけモデムでは, 以下の ようなディップ スイッチの設定も必要です. 他のモデムをお使いの方も, 以 下の例を設定の参考にしてください. スイッチ1: UP — DTR 標準 スイッチ2: 無視 (リザルト コードを単語形式にするか数値形式にす るか) スイッチ3: UP — リザルト コードを返さない スイッチ4: DOWN — コマンド エコーを返さない スイッチ5: UP — 自動着信 スイッチ6: UP — CD 標準 スイッチ7: UP — 不揮発ラムからデフォルト値をロードする スイッチ8: 無視 (Smart Mode/Dumb Mode) リザルト コードを返さないように設定しておかないと, getty が誤っ て login: プロンプトをコマンド モードのモデムに送信してしまった場 合に, モデムがこの入力をエコーしたり, この入力に対するリザルト コード を返してしまったりすることになります. この結果として, モデムと getty の間で延々と無意味なやりとりが続いたというケースを聞いたこ とがあります. 固定速度の設定 固定速度の設定では, モデムとコンピュータ間の通信速度をモデムとモデム間 の接続速度に関係なく, 常に一定に保つように, モデムを設定する必要があり ます. USRobotics Sportster の 14,400 bps 外づけモデムの場合, 以下のコ マンドで, モデムとコンピュータ間の速度が, コマンド送信時の速度に固定さ れます. ATZ AT&B1&W 可変速度の設定 可変速度の設定では, シリアル ポートの速度が, 着信速度に応じて変化する ように設定しなければいけません. USRobotics Sporster の 14,400 bps 外 づけモデムの場合, 以下のコマンドで, エラー訂正機能を利用した通信の場合 は, コマンドを送信した時の通信速度にシリアル ポートの速度を固定し, エ ラー訂正機能を利用しない接続では, シリアル ポートの速度が変化するよう に設定されます. ATZ AT&B2&W モデムの設定の確認 ほとんどの高速モデムには, 現在の設定をある程度人間にも理解できる形式に して表示させるコマンドがあります. USRobotics Sporster の 14,400 bps 外づけモデムの場合は, ATI5 コマンドで, 現在の不揮発ラムの設定を 表示することができます. さらに, ディップ スイッチの設定も含めた現在の 設定を確認するためには, ATZ コマンドを送信してから, ATI4 コマンドを送信してください. 他のメーカーのモデムをお使いの場合は, モデムのマニュアルで設定値の確認 方法を確認してください. トラブルシューティング 以下の手順でダイアル アップ モデムの動作を確認することができます. FreeBSD システムの動作確認 モデムを FreeBSD システムに接続し, システムをブートします. あなたのモ デムにモデムの状態を確認するためのインジケータがあれば, DTR のイ ンジケータの状態に注目してください. もし, システムのコンソールに login: プロンプトが表示された時に, DTR のインジケータが点灯 すれば, FreeBSD が適切なポートに対して getty を起動し, モデムへ の着信を待っている状態であることを意味しています. もし DTR のインジケータが点灯しない場合は, システムのコンソールか ら FreeBSD にログインして, ps ax を実行し, FreeBSD が 適切なポー トに対してgetty プロセスを起動しようとしているのかどうか確認して ください. プロセスに関する情報の中に, 以下のような行が表示されるはずで す. 114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0 115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1 モデムにまだ着信がない状態の時に, 以下のように上とは異なる出力があった 場合, getty は既にモデム ポートのオープンを終了したということに なります. 114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0 getty は, CD (carrier detect) 信号がオンの状態になるまで, ポートのオープンを完了することはできませんので, この場合は接続に問題が あるか, あるいはモデムの設定に問題があることが考えられます. もし, 適切なポートをオープンしようとしている getty が見あたらない 場合は, 再度 /etc/ttys の内容を確認し, 書式などに誤りがないか 調べてみてください. また, ログ ファイル /var/log/messagesinit および getty から何か出力がないかどうかも確認してみてく ださい. もし何かメッセージが記録されていたら, 再度 /etc/ttys , /etc/gettytab の二つの設定ファイルと, ディバイス スペシャル ファイル /dev/ttyd? を確認し, 記述に誤りがないか, 足りないエ ントリがないか, 足りないディバイス スペシャルファイルがないかといった 点について調べてみてください. モデムで接続してみる 実際にモデムを使って別のコンピュータから 接続してみてください. この時, 8ビット, パリティなし, 1ストップ ビットで接続するようにしてください. 接続後すぐにプロンプトが返ってこない場合や, 無意味な文字列が表示される 場合は, 1秒に1回くらいの割合で <Enter> キーを押してみて ください. しばらくたって, なおも login: プロンプトが現れない場合 は, BREAK 信号を送信してみてください. この時, 端末側で使って いるモデムが高速モデムならば, このモデムのインタフェースの接続速度を固 定してから, 再度ダイアル インしてみてください. (たとえば, USRobotics Sportster の場合は, AT&B1) それでもまだ login: プロンプトが表示されない場合は, /etc/gettytab の以下の点について再度確認してみてください. /etc/ttys の対応する行の 2番目の項目で, /etc/gettytab の中で定義されているエントリが指定されているか nx=/etc/gettytab の中で定義されているもの が指定されているか tc=/etc/gettytab の中で定義されているもの が指定されているか もしダイアル インしても, FreeBSD システム側のモデムが応答しない場合は, FreeBSD 側のモデムが DTR がオンになった時に電話にでるように設定さ れているかを確認してください. もしモデムの設定に問題がなさそうならば, モデムのインジケータ (がもしあれば) で, DTR がオンになっているか を確認してください. この確認のステップを数回繰り返しても うまくいかない場合は, 一度休憩して, しばらくたってから挑戦してみましょう. それでもだめなら, おそらく &a.questions; にあなたのモデムについての情報と問題を書いたメールを送れ ば, メーリング リストのメンバーが問題の解決を助けるべく努力してくれる でしょう. 謝辞 以下の方々から, 多くのコメントやアドバイスをいただきました. ここに謝意 を表します. Sean Kelly <kelly@fsl.noaa.gov> 多くのすばらしい助言をいた だきました ダイアルアウトサービス 原作: FAQ からの情報 訳: &a.jp.tmaruya;. 31 December 1996. 以下はモデムを利用して他のコンピュータと 接続する方法を説明しています. これはリモートホストとターミナル接続を確立するための 適切な方法です. これは BBS に接続するときによく使います. この種の接続は PPP 接続に問題がある場合, Internet 上にあるファイルを 転送するのに非常に役に立ちます. FTP で何らかのファイルを転送したいのに PPP 接続を確立できない場合は, ファイルを FTP 転送するためにターミナルセッション を利用します. そして ZMODEM を利用してファイルを転送します. <command>tip</command> や <command>cu</command> が実行できないはなぜ? あなたのシステムで tipcu というプログラムは uucpdialer というグループに所属しているユーザのみが 実行できるようになっているのでしょう. リモートホストやモデムを 利用できる dialer のグループにあなたのアカウントを 加えましょう. もしくは下記のコマンドを使うことによって, そのシステムで tipcu を誰でも使えるようになります: &prompt.root; chmod 4511 /usr/bin/tip このコマンドは cu に対しておこなう必要はありません, それは cutip に対するハードリンクだからです. 私の Hayes モデムはサポートされていません, どうしよう? 実際, tip の マニュアルページは古くなっています. 既に Hayes ダイアラが組み込まれています. /etc/remote ファイル中で at=hayes を使ってください. Hayes ドライバは, 最近のモデムの新しい機能である BUSY, NO DIALTONE, CONNECT 115200などのメッセージを 認識できるほど賢くはなく, 単に混乱を起こすだけです. tipを使う場合には, (ATX0&W とするなどして) これらの メッセージを表示させないようにしなくてはいけません. また, tip のダイアルのタイムアウトは 60秒です. モデムの タイムアウト設定はそれより短くすべきであり, そうしないと tip は通信に問題があると判断するでしょう. ATS7=45&W を実行してください. 実際, デフォルトの tip は Hayes の完全なサポートを しているわけではありません. 解決方法は /usr/src/usr.bin/tip/tip の下の tipconf.h を変更することです. もちろんこれにはソース配布ファイルが必要です. #define HAYES 0 と記述されている行を #define HAYES 1 と変更し, そして make, make install を実行します. これでうまく動作するでしょう. これらの AT コマンドを入力するには? /etc/remote ファイルの中で direct エントリを作ります. たとえばモデムが 1番目のシリアルポートである /dev/cuaa0 に接続されている場合, 次のようにします: cuaa0:dv=/dev/cuaa0:br#19200:pa=none モデムがサポートする最大の bps レートを br フィールドに使います. そして tip cuaa0 を実行すると, モデムが利用できるようになります. /dev/cuaa0 がシステムに存在しない場合は, 次のようにします: &prompt.root; cd /dev &prompt.root; ./MAKEDEV cuaa0 または root になって以下のように cu コマンドを実行します: &prompt.root; cu -lline -sspeed line にはシリアルポートを指定します (例えば /dev/cuaa0). そして speed には接続する速度を指定します (例えば 57600). その後 AT コマンドを実行したら, ~. と入力すれば終了します. pn 機能の <literal>@</literal> 記号が使えません! 電話番号 (pn) 機能の中での @ 記号は, tip に /etc/phone にある電話番号を参照するように伝えます. しかし @ の文字は /etc/remote のような 設定ファイルの中では特殊文字となります. バックスラッシュを使ってエスケープをおこないます: pn=\@ コマンドラインから電話番号を指定するには? generic エントリと呼ばれるものを /etc/remote に追加します. 例えば次のようにします: tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du: そして &prompt.root; tip -115200 5551234 のように利用できます. tip より cu を使いたい場合, cu の generic エントリを使います: cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du: そして &prompt.root; cu 5551234 -s 115200 と実行します. 毎回 bps レートを入力しなければいけませんか? tip1200cu1200 用のエントリを記述し, 適切な通信速度を br フィールドに設定します. tip は 1200 bps が正しいデフォルト値であるとみなすので, tip1200 エントリを参照します. もちろん 1200 bps を使わなければならないわけではありません. ターミナルサーバを経由して 複数のホストへアクセスしたいんです. 毎回接続されるのを待って CONNECT <host> と入力する かわりに, tip の cm 機能を使います. 例えば, /etc/remote に次のようなエントリを追加します: pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cua02:br#38400:at=hayes:du:pa=none:pn=5551234: これで, tip paintip muffin と実行すると pain や muffin のホストに接続することができ, tip deep13 を実行するとターミナルサーバに接続します. tip を使ってそれぞれのサイトの 複数の回線に接続できますか? これは大学に電話回線がいくつかあって 数千人の学生が接続しようとする 場合によくある問題です. あなたの大学のエントリを /etc/remote ファイルに作成して, pn のフィールドには @ を使います: big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none: そして /etc/phone ファイルに大学の電話番号の一覧を書きます: big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114 tip は一連の電話番号を試みて, 最終的に接続できなければあきらめます. リトライを続けさせたい場合は, tip を while ループに入れて 実行します. CTRL+P を 1回送るために 2度押す必要があるのはなぜ? CTRL+P は通常 force (強制) 文字であり, tip に次の文字が リテラルデータであることを伝えます. force 文字は 変数の設定 を意味する ~s エスケープによって他の文字にすることができます. ~sforce=single-char と入力して改行します. single-char は, 任意の 1バイト文字です. single-char を省略すると NUL 文字になり, これは CTRL+2 や CTRL+SPACE を押しても入力できます. いくつかのターミナルサーバで使われているのを 見ただけですが, single-char に SHIFT+CTRL+6 に割り当てるのもよいでしょう. $HOME/.tiprc に次のように定義することで, 任意の文字を force 文字として利用できます: force=<single-char> 打ち込んだ文字が突然すべて大文字になりました?? CTRL+A を押してしまい, caps-lock キーが壊れている場合のために設計された tipraise character モードに入ったのでしょう. 既に述べたように ~s を使って, raisechar をより適切な値に 変更してください. もしこれら両方の機能を使用しないのであれば, force 文字と同じ設定にすることもできます. 以下は CTRL+2 や CTRL+A などを頻繁に使う必要のある Emacs ユーザにうってつけの. tiprc ファイルのサンプルです: force=^^ raisechar=^^ ^^ は SHIFT+CTRL+6 です. <command>tip</command> でファイルを転送するには? もし他の UNIX のシステムと接続しているなら, ~p(put) や ~t(take) でファイルの送受信ができます. これらのコマンドは 相手のシステムの上で catecho を実行することで 送受信をします. 書式は以下のようになります: ~p ローカルのファイル名 リモートのファイル名 ~t リモートのファイル名 ローカルのファイル名 この方法ではエラーチェックをおこないませんので, zmodem などの他のプロトコルを使った方がよいでしょう. <command>tip</command> から zmodem を実行するには? ファイルを受信するには, リモート側で送信プログラムを起動します. そして ~C rz と入力すると, ローカル側へのファイルの受信が 始まります. ファイルを送信するには, リモート側で受信プログラムを起動します. そして ~C sz files と入力すると, リモート側への ファイルの送信が始まります. シリアルコンソールの設定 原作: &a.yokota;, &a.wpaul; この文書はほとんどが &a.wpaul; 氏の /sys/i386/boot/biosboot/README.serial に基づいています. 導入 FreeBSD/i386 オペレーティングシステムは, コンソールとして シリアルポート上のダム端末しか持たないシステムでも起動できます. この様な構成はきっと次のような二種類の人達に便利でしょう. それは, キーボードやモニタのない専用のファイル/演算/端末サーバに FreeBSD をインストールしたいシステム管理者と, カーネルやデバイスドライバをデバッグしたい開発者です. バージョン 3.1 から, FreeBSD/i386 は 3 ステージ構成ののブートストラップ を用いるようになりました. 最初の 2 つのステージは, ブートディスクにある FreeBSD スライスの最初に格納されている, ブートブロックのコードが行います. それからブートブロックは, 第 3 ステージのコードとしてブートローダ (/boot/loader) を読み込み, 実行します. (ブートプロセスの詳細については &man.boot.8; と &man.loader.8; をご覧下さい.) シリアルコンソールを設定するためには, ブートブロックコード, ブートローダコード, カーネルを設定する必要があります. FreeBSD バージョン 3.0 では, ブートローダはないので ブートストラップは 2 ステージです. つまり, ブートブロックが直接 カーネルをメモリに読み込みます. もしあなたが FreeBSD 3.0 を使って いるなら, このセクションでブートローダについて述べている部分は無視してください. それでもシリアルポートをコンソールとして使うのに支障はありません. FreeBSD バージョン 2.X と 3.X のシリアルポートドライバ &man.sio.4 は全く違いますので, 設定も異なった方法で行う必要があります. この章ではバージョン 2.X システム用の設定については扱っていません. もしあなたが古いバージョンの FreeBSD を使っているなら, かわりに /sys/i386/boot/biosboot/README.serial を調べてみてください. シリアルコンソールを設定するための 6 ステップ シリアルケーブルを用意してください. ヌルモデムケーブル, もしくは標準シリアルケーブルとヌルモデムアダプタが必要となります. シリアルケーブルについては をご覧下さい. キーボードをはずして下さい. たいていの PC システムは Power-On Self-Test (POST) の間にキーボードを検出し, もし見つからなければエラーと なります. また, キーボードがないことを大きな音で知らせ, キーボードが接続されるまでは起動を中断するようなマシンもあります. コンピュータがエラーを表示していても, とにかく起動するなら特別な対応は必要ありません. (私の手元にある Phoneix BIOS を搭載しているマシンは, 単に Keyboard failed とだけ 表示した後, 起動は正常に行なわれます.) あなたのコンピュータがキーボードを接続していない状態で 起動しないようなら, (もし可能ならば) エラーを無視するように BIOS を設定する必要があります. 設定方法の詳細については, マザーボードのマニュアルを調べてください. BIOS の設定でキーボードを Not installed にするということは, キーボードを使えないということを 意味しているわけではありません. これは, BIOS がキーボードがなくても文句を言わないように, 電源投入時には キーボードを探すな, と指示するだけです. このフラグを Not installed にしていてもキーボードを 接続したままにできますし, ちゃんと動作します. あなたのシステムが PS/2 マウスを使っているなら, おそらくマウスもキーボード同様にはずす必要があるでしょう. というのは, PS/2 マウスは部分的にキーボードとハードウェアを 共有しており, マウスを接続したままにしていると, キーボードも存在する, と誤って検出してしまう可能性があるからです. AMI BIOS を持つ Gateway 2000 ペンティアム 90Mhz システム はこれに該当すると言われています. 一般的にこれは問題ではありません. なぜなら, どっちにしても マウスはキーボードなしではたいして役に立たないからです. COM1: (sio0) にダム端末を接続してください. ダム端末がなければ, かわりに古い PC/XT でモデム プログラムを走らせて使ったり, シリアルボートに他の UNIX マシンを繋いだりできます. もしも COM1: (sio0) がなければ, 作成してください. 今のところ, COM1: 以外のポートを 選択するためにはブートブロックの再コンパイルが必要です. すでに COM1: を他の装置に 使っていた場合は, 一時的にその装置をはずして いったん FreeBSD がうまく動作してから, 新しいブートブロックとカーネルをインストールしてください. (上記はとにかくファイル/演算/端末サーバの COM1: が利用可能であると仮定して います. あなたが本当に何かのために COM1: が必要 (で, なおかつその何かを COM2: (sio1) に付け替えることができない) ならば, 多分, そもそも 悩んでる場合ではありません.) カーネルコンフィグファイルの COM1: (sio0) に適切なフラグを 設定していることを確認してください. 関連するフラグ: 0x10 このポートのコンソールサポートを有効にします. このフラグが設定されない場合, 他のフラグは無視されます. 現在のところ, 一つのポートしかコンソールサポートを有効に できません. (config ファイルに書かれた順番で) 最初にこのフラグを 指定されたポートが選択されます. なお, このオプションを指定するだけでシリアルポートが コンソールとして使えるわけではありません. このフラグと一緒に, 以下のフラグも指定するかもしくは オプションも使ってください. 0x20 後述される オプション を無視して, (他に優先度の高いコンソールがない限り) このポートをコンソールとして指定します. このフラグは FreeBSD バージョン 2.X の COMCONSOLE オプションに対応するものです. フラグ 0x20 は必ず フラグ と一緒に指定されなければなりません. 0x40 (0x10 と組み合わせることで) このポートを予約し, 通常のアクセスができない ようにします. このフラグは, シリアルコンソールとして使いたいポートに 指定すべきではありません. 唯一の使い道は, ユニットがカーネルのリモートデバッグ用 であることを指定することです. リモートデバッグの詳細については を参照してください. FreeBSD 4.0-CURRENT 以降では, フラグ 0x40 の意味が若干異なり, シリアルポートにリモートデバッグを指定するためには, 別のフラグを使います. 例: device sio0 at isa? port "IO_COM1" tty flags 0x10 irq 4 詳細については &man.sio.4; を参照して下さい. もしこれらのフラグがセットされていなければ, (別のコンソールで) UserConfig を実行するか, カーネルを再コンパイルする必要があります. ブートドライブの a パーティションの ルートディレクトリに boot.config を作成してください. このファイルは, ブートブロックコードに対してどのように システムを起動したいかを教えます. シリアルコンソールを活かすためには, 以下のオプションを幾つか dash; 複数の場合も一行で, 設定する必要があります: 内蔵コンソールとシリアルコンソールの切替えを行います. これを使用してコンソールデバイスを変更できます. 例えば, 内蔵 (ビデオ) コンソールからブートした場合, カーネルとブートローダがコンソールデバイスとして シリアルポートを使用するようにするため, を使って指示できます. 反対に, シリアルポートからブートした場合, ブートローダとカーネルがコンソールとして代わりに ビデオディスプレイを使用するようにするため, を使用できます. シングルとデュアルのコンソール設定を切り替えます. シングル設定では, 上記の オプションの状態によって,コンソールは内蔵コンソール (ビデオディスプレイ)かシリアルポートのいずれかになります. デュアルコンソール設定では, ビデオディスプレイと シリアルポートの両方が, オプションの状態によらず, 同時にコンソールになります. しかし, デュアルコンソール設定は, ブートブロックが 実行されている間でしか効果を持ちません. 一旦ブートローダに制御が移ると, オプションによって指定されたコンソールが 唯一のコンソールになります. ブートブロックがキーボードを検出するようにします. キーボードが発見できなかった場合には, オプションが自動的にセットされます. 現バージョンのブートブロックでは容量の制限により, オプションは拡張キーボードしか 検出できません. キーが 101 個より少ない (そして F11 と F12 がない) キーボードは検出されない可能性があります. この制限から, いくつかのラップトップコンピュータの キーボードは正しく検出されないでしょう. 残念ながら, この問題の回避策はありません. オプションを使ってコンソールを 自動的に選ぶか, オプションを使って シリアルコンソールを有効にしてください. さらに &man.boot.8; で説明されている他のオプションも使う ことができます. 以外のオプションはブートローダ (/boot/loader) に渡されます. ブートローダは, オプションだけの状態を 調べることで内蔵ビデオとシリアルポートのどちらがコンソールに なるのか決めます. つまり, /boot.config の中で オプションを指定して オプションを指定しなかった場合, ブートブロック実行中でのみシリアルポートをコンソールとして 使うことができます. ブートローダは内蔵ビデオディスプレイを コンソールとして使います. マシンを起動する. FreeBSD を起動したとき, ブートブロックは /boot.config の内容をコンソールに表示 します. 例えば, /boot.config: -P Keyboard: no 行の二番目は, /boot.config にオプション が指定してあるときだけ表示され, キーボードが存在するかどうかを表します. これらのメッセージは, シリアルか内蔵のいずれか, あるいはその両方のコンソールに表示されます. どちらに表示されるかは, /boot.config の設定によって変わります. オプション指定 メッセージの表示される場所 なし 内蔵 シリアル シリアルと内蔵の両方 シリアルと内蔵の両方 , キーボードが存在する場合 内蔵 , キーボードが存在しない場合 シリアル このメッセージが表示された後, ブートブロックがブートローダのロードを再開し, 他の全てのメッセージがコンソールに表示されるまで, 若干時間がかかります. 通常の環境では, ブートブロックに 割り込みをかける必要はありませんが, ちゃんとセットアップされているかどうか確かめるために, 割り込みをかけることができるようになっています. ブートプロセスに割り込みをかけるには, コンソールの(Enter/Return キー以外の)キーをたたいて下さい. ブートブロックはその時, 操作を指定するためのプロンプトを表示します. こんな風に表示されるでしょう. >> FreeBSD/i386 BOOT Default: 0:wd(0,a)/boot/loader boot: 上に示したメッセージが, シリアルか内蔵, あるいはその両方といった, /boot.config で指定したとおりのコンソールに表示されることを確認して下さい. メッセージが正しいコンソールに表示されたら, Enter/Return キーを押してブートプロセスを継続してください. もし, シリアルコンソールを利用するように設定しているのに シリアル端末にプロンプトが出てこない場合は, 設定のどこかに間違いがあります. ブートブロック(とブートローダ, カーネル)に対して シリアルポートをコンソールに使うことを伝えるため, 割り込みをかけた時に を入力し, (可能ならば) Enter/Return キーを押して下さい. そして, 一度システムを起動させてから, どこが悪いのかをチェックして下さい. ブートローダがロードされ, ブートプロセスの第三ステージに いる時には, まだ内蔵コンソールとシリアルコンソールを切り替えることができます. それにはブートローダの環境変数を適切に設定すれは良いのですが, 詳細については を参照してください. まとめ このセクションで扱ったさまざまな設定と, 最終的に選択されるコンソールに関するまとめです. Case 1: sio0 の flags に 0x10 をセットした場合 device sio0 at isa? port "IO_COM1" tty flags 0x10 irq 4 /boot.config 内のオプション ブートブロック実行中のコンソール ブートローダ実行中のコンソール カーネルのコンソール なし 内蔵 内蔵 内蔵 シリアル シリアル シリアル 内蔵, シリアルの両方 内蔵 内蔵 内蔵, シリアルの両方 シリアル シリアル , キーボードが存在する場合 内蔵 内蔵 内蔵 , キーボードが存在しない場合 内蔵, シリアルの両方 シリアル シリアル Case 2: sio0 の flags に 0x30 をセットした場合 device sio0 at isa? port "IO_COM1" tty flags 0x30 irq 4 /boot.config 内のオプション ブートブロック実行中のコンソール ブートローダ実行中のコンソール カーネルのコンソール なし 内蔵 内蔵 シリアル シリアル シリアル シリアル 内蔵, シリアルの両方 内蔵 シリアル 内蔵, シリアルの両方 シリアル シリアル , キーボートが存在する場合 内蔵 内蔵 シリアル , キーボードが存在しない場合 内蔵, シリアルの両方 シリアル シリアル シリアルコンソールを利用する上で役に立つ情報 シリアルポートの通信速度をもっと速いものに設定するには デフォルトのシリアルポート通信速度は, 9600 ボー, 8 ビット, パリティなし, ストップビット 1 です. 通信速度を変更したい場合には, 少なくとも ブートブロックの再コンパイルが必要になります. /etc/make.conf に次のような行を追加して, 新しくブートブロックをコンパイルして下さい. BOOT_COMCONSOLE_SPEED=19200 もし, シリアルコンソールがブート時の オプション以外の方法で設定されていたり, カーネルが利用するシリアルコンソールが ブートブロック実行中のものと異なる場合には, カーネルコンフィグレーションファイルに次のオプションを追加して, 新しくカーネルをコンパイルしなければなりません. options CONSPEED=19200 <devicename>sio0</devicename> 以外のシリアルポートを コンソールとして使うには sio0 以外のポートをコンソールとして使うには, 再コンパイルが必要です. それがどんな理由であれ, 他のポートを使用する場合には ブートブロック, ブートローダ, カーネルを 次のようにして再コンパイルして下さい. カーネルソースを取得する. /etc/make.conf を編集し, BOOT_COMCONSOLE_PORT に 使用したいポートのアドレス(0x3F8, 0x2F8, 0x3E8 or 0x2E8)を 設定してください. 使用可能なのは sio0 から sio3 (COM1: から COM4:) までで, マルチポートシリアルカードは使えません. また, ここで割り込みの設定をする必要はありません. 設定を変更するために新たなカーネルコンフィグレーションファイルを作成し, 使いたいシリアルポートのフラグを適切に設定します. 例えば, sio1 (COM2:) をコンソールにしたければ, device sio1 at isa? port "IO_COM2" tty flags 0x10 irq 3 または, device sio1 at isa? port "IO_COM2" tty flags 0x30 irq 3 とします. その際, 他のシリアルポートにコンソールフラグをつけてはいけません. ブートブロックを再コンパイルし, インストールする. &prompt.root; cd /sys/boot/i386/boot2 &prompt.root; make &prompt.root; make install ブートローダを再コンパイルし, インストールする. &prompt.root; cd /sys/boot/i386/loader &prompt.root; make &prompt.root; make install カーネルを再構築し, インストールする. &man.disklabel.8; を使ってブートブロックをブートディスクに書き込み, 新しいカーネルから起動する. シリアルポートから DDB デバッガを起動するには シリアルコンソールからカーネルデバッガを起動したい(これは リモートで診断する際に便利ですが, もしおかしな BREAK 信号がシリアルポートに送られるような場合には危険です!) 場合には, 次のオプションを使ってカーネルをコンパイルして下さい. options BREAK_TO_DEBUGGER options DDB シリアルコンソールにログインプロンプトを表示させるには シリアルコンソールからブートメッセージを確認したり, シリアルコンソールを経由してカーネルデバッグセッションに入ることが できるので, これは必要がないかもしれませんが, login プロンプトをシリアルポートに 出力するように設定することもできます. これには, 次のようにします. エディタで /etc/ttys というファイルを開き, 次に示す行に移動して下さい. ttyd0 "/usr/libexec/getty std.9600" unknown off secure ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd2 "/usr/libexec/getty std.9600" unknown off secure ttyd3 "/usr/libexec/getty std.9600" unknown off secure ttyd0 から ttyd3 は, COM1 から COM4 に対応しています. 設定したいポートの offon に変更して下さい. また, もしシリアルポートの通信速度を変更しているなら, std.9600 が実際の通信速度になるように, 例えば std.19200 のように変更して下さい. さらに, 実際のシリアル端末に合わせて, 端末タイプを unknown から変更することも可能です. ファイルの編集が終了したら, 変更を有効化するために kill -HUP 1 を実行しなければなりません. ブートローダからコンソールを変更するには 前セクションは, ブートブロックの設定を変更することでシリアルコンソールを セットアップする方法について解説していました. このセクションでは, ブートローダへのコマンド入力と環境変数設定で コンソールの指定を行なう方法を紹介します. ブートローダがブートブロックの後, ブートプロセスの第三ステージとして呼び出されたとき, ブートローダの設定には, ブートブロックの設定がそのまま使われます. シリアルコンソールをセットアップする ブートローダとカーネルに対して シリアルコンソールを使用するように設定するには, 単に /boot/loader.rc のファイルに, 次のような一行を書くだけで実現できます. set console=comconsole これは, 前セクションで扱ったブートブロックの設定に 全く関係なく機能します. 上に示した行は, /boot/loader.rc の最初の行に書き込まなくてはいけません. これはできるだけ早く, ブートメッセージをシリアルコンソールに 出力させるために必要なことです. 同様にして, 次のように内蔵コンソールを指定することもできます. set console=vidconsole もし, ブートローダの環境変数 console が設定されていない場合, ブートローダ, そしてその次に起動するカーネルは ブートブロックで指定された オプションに 示されたコンソールを使用します. 3.2 以降のバージョンにおいては /boot/loader.rc ではなく, /boot/loader.conf.local/boot/loader.conf にコンソール指定を書き込みます. その場合, /boot/loader.rc は次のようになっていなければなりません. include /boot/loader.4th start それから, /boot/loader.conf.local を作成して, 次の行をそこに追加して下さい. console=comconsole か, もしくは console=vidconsole です. 詳細については, &man.loader.conf.5; を参照して下さい. その際, ブートローダはオプション指定なし (ブートブロックに オプションが指定されたのと等価)になり, キーボードの存在を調べて 内蔵コンソールとシリアルコンソールを自動的に選択する機能は働きません. <devicename>sio0</devicename> 以外のシリアルポートを コンソールとして使うには sio0 以外のシリアルポートを コンソールとして使うには, ブートローダを再コンパイルする必要があります. それには, に書かれている説明にしたがって下さい. 注意 シリアルコンソールというアイデアは, グラフィック出力用のハードウェアやキーボードが接続されていない 専用サーバのセットアップを可能にするためのものです. (ほとんど?)全てのシステムはキーボードなしで起動できますが, 不幸にも,グラフィックアダプタなしでは起動できないシステムはたくさんあります. AMI BIOS を採用しているマシンでは, CMOS 設定の `graphics adapter' を `Not Installed' にするだけで, グラフィックアダプタがなくとも起動できるように設定することができます. しかしながら, 多くのマシンはこのようなオプションを持っていませんし, ディスプレイハードウェアがシステムに存在しないと起動しないように なっています. そのようなマシンでは, モニタを接続する必要がなかったとしても, 適当なグラフィックカード(モノクロのジャンク品でも構いません)を 挿入したままにしておく必要があるでしょう. また, AMI BIOS をインストールする, という手もあります. diff --git a/ja_JP.eucJP/books/handbook/users/chapter.sgml b/ja_JP.eucJP/books/handbook/users/chapter.sgml index 21adc390f8..eda3448480 100644 --- a/ja_JP.eucJP/books/handbook/users/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/users/chapter.sgml @@ -1,507 +1,507 @@ ユーザと基本的なアカウントの管理 - 概要 + この章では 寄稿: &a.nbm;, 2000 年 2 月. システムへアクセスするには, かならずユーザアカウントが使われます. また, プロセスもすべてユーザによって実行されますので, ユーザとアカウントの管理は FreeBSD システムにおいて欠かすことのできない重要なものです. アカウントには大きく分けて三種類のものがあります. それは, スーパーユーザ(Superuser), システムユーザ(system users), そしてユーザアカウント(user accounts)です. スーパーユーザのアカウントは通常 root と呼ばれ, 無制限の特権を持つためにシステムの管理に用いられます. また, システムユーザはサービスの運用に用いられ, 最後のユーザアカウントは, 実際にログインしてメールを読むといった作業を行なう利用者のためのものです. スーパーユーザアカウント スーパーユーザアカウントは通常 root と呼ばれ, 初期時から設定済みです. このアカウントはシステム管理を行なうためのもので, メールのやりとり, システムの調査, プログラミングといった日常的な作業を行なうために使われるべきものではありません. その理由は, スーパーユーザが通常のユーザアカウントと異なり, 操作にまったく制限を受けないことによります. そのためスーパーユーザアカウントで操作を間違えると, システムに重大な影響を与えてしまう恐れがあるのです. ユーザアカウントでは, 仮に操作を間違えてもシステムを壊してしまうようなことは できないようになっています. したがって特権を必要としていないのであれば, できるだけいつもユーザアカウントを利用する方が望ましいと言えるでしょう. また, スーパーユーザで実行するコマンドはいつでも, 二回, 三回と何度もコマンドをチェックしてください. なぜならスペースが多かったり, 文字が欠けていたりするだけで, 取り返しのつかないデータの破壊につながる可能性があるからです. スーパーユーザになると得られる特権は, 言い換えてみれば通常のユーザアカウントの保護を受けることができない, ということも意味しています. ですから, この章を読んでからあなたが最初にすべきなのは, もし用意していないなら, 日常的に利用するための あなた自身のユーザアカウントを作成することです. これはマルチユーザモード, シングルユーザモードを問わず, 同様にあてはまります. この章のうしろの方では, アカウントの追加と通常のユーザから スーパーユーザへと移行する手順について扱います. システムアカウント システムユーザとは, DNS, メール, ウェブサーバといった各種サービスを運用するために使われるものです. これはセキュリティを確保するためのもので, サービス自体はスーパーユーザで実行される場合と同様, 制限を受けません. システムユーザの具体例として, daemon, operator, bind (DNS; Domain Name Service 用) および news といったものがあります. またシステム管理者はよく, インストールしたウェブサーバを運用するために httpd というユーザを作成しています. nobody ユーザは通常の特権を持たないシステムユーザですが, nobody を利用するサービスが増えれば増えるほど, その特権も大きくなります. ユーザアカウント ユーザアカウントは, 主に現実のユーザがシステムにアクセスする手段として用いられるものです. このアカウントは利用するユーザとシステム環境を分離します. そのため, システムや他のユーザに危害をおよぼす危険性をなくし, また, 他に影響を与えることなくユーザ自身の環境をカスタマイズすることを可能にしています. システムにアクセスするすべてのユーザは, それぞれに一人一つのユーザアカウントを持つべきです. こうすることで誰が何を行なっているかがわかりますし, 他の人の設定を壊してしまったり, 他人にメールを読まれてしまうようなことを避けることができます. それぞれのユーザは快適にシステムを利用するため, シェル, エディタ, キー設定, 言語など, 各自の環境をセットアップすることができます. アカウント情報の変更 強力で柔軟性に富むアカウント情報の変更手段として, pw があります. しかし, 新しいアカウントをつくる場合は adduser を, アカウントを削除する場合は rmuser を使うことが推奨されています. chpass を使うことで, システム管理者, 通常のユーザはパスワード, シェル, その他の個人情報を変更することができます. また, 特にパスワードを変更する場合には, 通常 passwd の方が良く使われます. adduser adduser は, 新しいユーザを登録するためのシンプルなプログラムです. このプログラムは passwdgroup に新しいユーザのエントリを作成するのと同時に, ホームディレクトリを作成して /usr/share/skel からデフォルトで使用されるドットファイル(訳注: ホームディレクトリに存在する . から始まるファイルのことで, 各種設定に用いられます)をコピーします. また, 新しく作成されたユーザに対して, ウェルカムメッセージをメールで送信することも可能です. 初期設定ファイルを作成するには, adduser -s -config_create. とします オプション をつけると, デフォルトで詳細を表示しないように adduser を設定します. この後に詳細を表示させるようにしたい場合は, オプション を指定してください. . そして次に adduser のデフォルト設定を行ない, 最初のユーザアカウントを作成します. システムを日常利用する際に root を用いるのは最悪です. adduser の設定の変更 &prompt.root; adduser -v Use option ``-silent'' if you don't want to see all warnings and questions. Check /etc/shells Check /etc/master.passwd Check /etc/group Enter your default shell: csh date no sh tcsh [sh]: tcsh Your default shell is: tcsh -> /usr/local/bin/tcsh Enter your default HOME partition: [/home]: Copy dotfiles from: /usr/share/skel no [/usr/share/skel]: Send message from file: /etc/adduser.message no [/etc/adduser.message]: no Do not send message Use passwords (y/n) [y]: y Write your changes to /etc/adduser.conf? (y/n) [n]: y Ok, let's go. Don't worry about mistakes. I will give you the chance later to correct any input. Enter username [a-z0-9_-]: jru Enter full name []: J. Random User Enter shell csh date no sh tcsh [tcsh]: Enter home directory (full path) [/home/jru]: Uid [1001]: Enter login class: default []: Login group jru [jru]: Login group is ``jru''. Invite jru into other groups: guest no [no]: wheel Enter password []: Enter password again []: Name: jru Password: **** Fullname: J. Random User Uid: 1007 Gid: 1007 (jru) Class: Groups: jru wheel HOME: /home/jru Shell: /usr/local/bin/tcsh OK? (y/n) [y]: y Added user ``jru'' Copy files from /usr/share/skel to /home/jru Add another user? (y/n) [y]: n Goodbye! &prompt.root; 簡単に上の操作を説明します. まずデフォルトシェルを tcsh (packages にある追加のシェルです) に変更し, 新しいユーザにウェルカムメッセージのメールを送付しないようにしました. そしてその設定を保存し, wheel グループ(後に, これが重要な意味を持っていることがわかるでしょう)に所属する jru というアカウントを作成しています. 入力したパスワードは画面に表示されません. アスタリスク記号も表示されませんので, パスワードを二回とも間違えて入力してしまわないように注意してください. :-) これ以降はオプション引数をつけず単に adduser を起動します. デフォルト設定を変更する必要はありません. もし, adduser がデフォルト設定を変更するかどうか尋ねてきたら, adduser を終了し, オプションを使うようにしてください. rmuser rmuser は, システムからユーザを削除します. これにはユーザデータベースからの削除だけでなく, その他, そのユーザに依存する情報すべてが含まれます. rmuser は次の手順を実行します. 指定されたユーザの &man.crontab.1; エントリを削除 (存在する場合). 指定されたユーザの &man.at.1; ジョブをすべて削除. 指定されたユーザが所有するすべてのプロセスを強制終了. ローカルパスワードファイルから, 指定されたユーザのエントリを削除. 指定されたユーザのホームディレクトリを削除 (ディレクトリの所有者が指定されたユーザのものだった場合). /var/mail から, 指定されたユーザの到着メールファイルを削除. /tmp のような一時ファイル保存領域から, 指定されたユーザの所有するファイルを削除. そして最後に, /etc/group にある すべてのグループから, 指定されたユーザを削除します. 指定されたユーザと同じ名前のグループで, そのユーザが削除されると空のグループとなる場合は, そのグループ自体が削除されます. これは &man.adduser.8; によってユーザごとに作成される, ユニークなグループに対応するものです. スーパユーザアカウントの削除に rmuser を利用することはできません. スーパユーザアカウントの削除はほとんどすべての場合, 大規模なシステムの破壊を意味するからです. デフォルトでは, どういう操作を行なっているか確認できる対話モードが使われます. rmuser による対話的なアカウントの削除 &prompt.root; rmuser jru Matching password entry: jru:*:1000:1000::0:0:J. Random User:/home/jru:/usr/local/bin/tcsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Updating password file, updating databases, done. Updating group file: trusted (removing group jru -- personal group is empty) done. Removing user's incoming mail file /var/mail/jru: done. Removing files belonging to jru from /tmp: done. Removing files belonging to jru from /var/tmp: done. Removing files belonging to jru from /var/tmp/vi.recover: done. &prompt.root; pw pw は, ユーザやグループの作成, 削除, 変更および表示を行なうことができ, システムユーザファイルやシステムグループファイルの編集機能を持った コマンドラインのユーティリティです. これはシェルスクリプトからの利用や, 直接コマンドを実行する際に便利に使えるように設計されたものです. 詳細はすべて &man.pw.8; に書かれています. chpass chpass は, パスワード, シェル, その他の個人情報といった, ユーザデータベース情報を変更します. システム管理者に限りスーパユーザ権限で chpass を用い, 他のユーザの情報やパスワードを変更することが可能です. ユーザ名の他にオプションを指定しないと, chpass はユーザ情報を編集するエディタを表示します. そのエディタを終了すると, chpass はユーザデータベース情報の変更を試みます. スーパユーザによる対話的な chpass #Changing user database information for jru. Login: jru Password: * Uid [#]: 1000 Gid [# or name]: 1000 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/tcsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: 通常のユーザは, この情報の限られた部分のみ変更が可能です. また, 変更できるのはそのユーザ自身の情報のみです. 通常のユーザによる対話的な chpass #Changing user database information for jru. Shell: /usr/local/bin/tcsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: chfn, chsh はいずれも, 単に chpass へのハードリンクになっています. また, ypchpass, ypchfn および ypchsh も同様です. NIS のサポートは自動的に行なわれますので, コマンドの先頭に yp をつける必要はありません. passwd passwd は, ユーザが自分のパスワードを変更する通常の方法です. スーパユーザ権限では, 他のユーザのパスワードを変更するのに使われます. ユーザはパスワードを変更する前に, もともと設定されていたパスワードを入力しなければなりません. これはユーザがコンソールを離れた際に, 不審な人物によってパスワードが変更されることを防ぐためです. passwd &prompt.user; passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done &prompt.root; passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done yppasswd は, 単に passwd へのハードリンクになっています. NIS のサポートは自動的に行なわれますので, コマンドの先頭に yp をつける必要はありません. ユーザへの制限と設定 quota がシステムで有効化されていると, システム管理者はディスク使用の上限を設定し, ユーザは自身のディスク使用量をチェックできるようになります. quota については, quota の章に書かれています. 地域化(localization)とは, それぞれ異なる言語, キャラクタセット, 日付や時間の標準などに適応させるための環境設定を, システム管理者やユーザが行なうことを指します. 地域化については, 地域化の章に書かれています. diff --git a/ja_JP.eucJP/books/handbook/x11/chapter.sgml b/ja_JP.eucJP/books/handbook/x11/chapter.sgml index bcce73e8a7..24f63eb11d 100644 --- a/ja_JP.eucJP/books/handbook/x11/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/x11/chapter.sgml @@ -1,26 +1,1367 @@ X ウィンドウシステム - この節の完成は保留にしてあります. - The XFree86 Project, Inc - から提供されるドキュメントを参考にしてください. + ありがたいことに, この章は &a.grog; が彼の著書 + 『The + Complete FreeBSD』から分けてくれました. + したがって, 本章の著作権は彼に帰属します. + ハンドブック用の修正は &a.jim; が行ないました. + + + この章では + + この章では X11 のインストールと設定について解説しています. + X11 に関してさらに知りたい場合, + またご自分のビデオカードがサポートされているかといったようなことについては + XFree86 + のウェブサイトをご覧ください. + + + + はじめに + + FreeBSD には, いくつかある Intel ベースの UNIX をサポートした X11R6 の移植版, + XFree86 が付属しています. この章では XFree86 + サーバの設定方法について解説しますが, + この解説は FreeBSD と一緒に配布されている資料, + 特に /usr/X11R6/lib/X11/doc ディレクトリにある + README.FreeBSD や README.Config といったファイルに基づいています. + これらの文書はこの解説よりも最新の事情に触れていますので, + もし何かおかしなことに気付いた場合はこれらのファイルにあたってみてください. + また /usr/X11R6/lib/X11/doc/RELNOTES + には, 現在のリリースについて OS に依存しない情報が記述されています. + + X はたくさんのメモリを使います. X を起動するには最低でも 8 MB + のメモリを用意しなければなりませんが, + そんなに小さなメモリでは動作が死ぬほど遅いでしょう. + 現実的に考えた必要最低なメモリは 16 MB で, + さらに足せばより快適にすることができます. + もし X を使い倒すなら 128 MB くらいまで増やしていけば, + パフォーマンスがどんどんと良くなっていくのがわかるでしょう. + + この章の残りの部分には非常にたくさんの有用な情報があります. + でももしかすると, あなたはそれらには今すぐには興味がなく, + とにかく X サーバを立ち上げたいと思っているかも知れません. + しかし, 以下のことには注意してください. + + + インストールを間違って行なうと, + モニタやビデオボードを焼き焦がしてしまうことがあります. + + + ただし, あなたが仕様を詳しく知っていて, + 標準的な SVGA ボードとマルチスキャンモニタを持っているなら, + この章は読まなくても恐らく問題ないでしょう. + + + + + XFree86 のインストール + + XFree86 をインストールする最も簡単な方法は sysinstall + プログラムを使うことです. システムのインストール時でも, 後から + /stand/sysinstall を起動するのでもどちらでも構いません. + この章の残りでは, 配布物の構成を見てゆき, + 手動で X11 をインストールする方法についても見てみることにしましょう. + + + + XFree86 の配布物 + + XFree86 は困ってしまいそうな数のアーカイブとして配布されています. + 次のセクションでは, どれをインストールすべきかということについて考えます. + どれを選べばいいのかわからないし, + 空いているディスク容量は 200 MB しかない‥‥という場合だとしても, + それほど心配しないでください. + それだけあればすべてを展開しても大丈夫です. + + 最低でも下の表にあるアーカイブと + VGA ボードに合ったサーバの一つとを展開する必要があります. + 最低限必要な実行時バイナリだけであればだいたい + 10MB の容量が必要で, + サーバは 17 MB から 3 MB くらいの容量が必要です. + + 下の表は, 必要となるものです. + + + + + + アーカイブ + 解説 + + + + + + Xbin.tgz + 実行可能な X クライアントと共有ライブラリの全て + + + + Xfnts.tgz + misc と 75 dpi のフォント + + + + Xlib.tgz + 実行時に必要なデータファイルとライブラリ + + + + + + + + X サーバ + + + 上のアーカイブに加えて, 少なくとも一つのサーバが必要です. + これは約 3 MB のディスクを消費します. + どれを選ぶのか, というのはあなたが持っているボードの種類次第です. + デフォルトのサーバ名は /usr/X11R6/bin/X ですが, + これは特定のサーバのバイナリである + /usr/X11R6/bin/XF86_xxxx + へのリンクになります. もし CD-ROM のセットを持っているなら, + 標準的な PC アーキテクチャ用のサーバアーカイブは + /cdrom/XF86336/Servers から, + 日本の PC98 アーキテクチャ用のものは + /cdrom/XF86336/PC98-Servers から見つけることができます. + また、FreeBSD の FTP サイトである + ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/&rel.current;-RELEASE/XF86336/Servers/ + や + ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/&rel.current;-RELEASE/XF86336/PC98-Servers/ + から入手することもできます. + + + 標準的な PC アーキテクチャで利用可能な X サーバ: + + + + + + アーカイブ + 解説 + + + + + + X8514.tgz + IBM 8514 とその互換品用. 8 ビットカラー + + + + XAGX.tgz + AGX や XGA ボード用. 8 ビットおよび 16 ビットカラー + + + + XI128.tgz + I128 ボード用. 8 ビットおよび 16 ビットカラー + + + + XMa32.tgz + ATI Mach 32 ボード用. 8 ビットおよび 16 ビットカラー + + + + XMa64.tgz + ATI Mach 64 ボード用. 8, 16, 32 ビットカラー + + + + XMa8.tgz + ATI Mach8 ボード用. 8 ビットカラー + + + + XMono.tgz + VGA, SVGA, Hercules やその他のボード用. 1 ビットモノクロ + + + + XP9K.tgz + Weitek P9000(Diamond Viper) ボード用. 8, 16, 32 ビットカラー + + + + XS3.tgz + S3 ボード用. 8, 16, 32 ビットカラー + + + + XS3V.tgz + S3 ViRGE ボード用. 8 および 16 ビットカラー + + + + XSVGA.tgz + SVGA カード用. 8 ビット以上のカラー + + + + XVG16.tgz + VGA や SVGA カード用. 4 ビットカラー + + + + XW32.tgz + ET4000/W32, /W32i, /W32p そして ET6000 カード用. 8 ビットカラー + + + + + + PC98 アーキテクチャで利用可能な X サーバー: + + + + + + アーカイブ + 解説 + + + + + + X9GAN.tgz + PC98 GA-98NB/WAP ボード用. 8 ビットカラー + + + + X9GA9.tgz + PC98 S3 GA-968 ボード用. 8, 16, 32 ビットカラー + + + + X9480.tgz + PC98 PEGC 用. 8 ビットカラー + + + + X9NKV.tgz + PC98 NEC-CIRRUS/EPSON NKV/NKV2 ボード用. 8 ビットカラー + + + + X9WBS.tgz + PC98 WAB-S ボード用. 8 ビットカラー + + + + X9WEP.tgz + PC98 WAB-EP ボード用. 8 ビットカラー + + + + X9WSN.tgz + PC98 WSN-A2F ボード用. 8 ビットカラー + + + + X9EGC.tgz + PC98 EGC 用. 4 ビットカラー + + + + X9TGU.tgz + PC98 Trident Cyber9320/9680 ボード用. 8, 16 ビットカラー + + + + X9NS3.tgz + PC98 NEC S3 ボード用. 8, 16 ビットカラー + + + + X9SPW.tgz + PC98 S3 PW/PCSKB ボード用. 8, 16 ビットカラー + + + + X9LPW.tgz + PC98 S3 PW/LB ボード用. 8, 16 ビットカラー + + + + + + + それぞれのサーバには, + サポートするチップセットやサーバ特有の設定オプションを記述したマニュアルが付属しています. + + + また, + X プログラマ用に提供されるアーカイブも数多くあります: + + + + + + アーカイブ + 解説 + + + + + + Xprog.tgz + クライアントをコンパイルするのに必要な設定ファイル, + lib*.a および *.h. + + + + Xctrb.tgz + 寄贈されたソース + + + + Xlk98.tgz + PC98 用のサーバを構築するのに必要な リンクキット. + + + + Xlkit.tgz + PC 用のサーバを構築するのに必要な リンクキット. + + + + Xsrc-1.tgz + 完全なソース. パート 1 + + + + Xsrc-2.tgz + 完全なソース. パート 2 + + + + Xsrc-3.tgz + 完全なソース. パート 3 + + + + + + + X ソフトウェアの ports をインストールする場合 + Xprog.tgz は必須です. + + + XFree86 には, + 文書やセットアッププログラムといった付加的なものもたくさん含まれています. + + + + + + アーカイブ + 解説 + + + + + + Xdoc.tgz + README + + + + Xjdoc.tgz + 日本語版 README + + + + Xps.tgz + PortScript フォーマットの README + + + + Xhtml.tgz + HTML 化された README + + + + Xman.tgz + オンラインマニュアル + + + + Xcfg.tgz + カスタマイズ可能な xinit や + xdm の実行時設定ファイル. + + + + Xset.tgz + X86Setup; + グラフィカルな xf86config + ユーティリティ + + + + Xjset.tgz + PC アーキテクチャ用の + XF86Setup 日本語版 + + + + + + XF86Setup は XFree86 用のグラフィカルな設定プログラムで, + 標準的な設定プログラムである xf86config + よりもこちらを好む人は多いかも知れません. + xf86config + の場合には特別なアーカイブがあるわけではなく, + Xbin.tgz に含まれています. + + 初めてインストールする時には, + 最初の設定ファイルを作るために Xcfg.tgz + が必要でしょう. + 既にある設定ファイルを上書きしてしまいますので, + アップグレードする時には使わないでください. + + また, XFree86 には他にもフォントがあります: + + + + + + アーカイブ + 解説 + + + + + + Xf100.tgz + 100 dpi フォント + + + + Xfscl.tgz + Speedo と Type1 のフォント + + + + Xfnon.tgz + 日本語, 中国語 や他の非英語フォント + + + + Xfcyr.tgz + キリルフォント + + + + + + 上で述べた X サーバと異なり, + 次に紹介するサーバのアーカイブはすべてメインのディレクトリにあります. + + + + + + + アーカイブ + 解説 + + + + + + Xfsrv.tgz + フォントサーバ + + + + Xnest.tgz + 別のディスプレイ上のクライアントウィンドウで動作するネストサーバ + + + + Xprt.tgz + プリントサーバ + + + + Xvfb.tgz + メモリや mmap されたファイル中に描画を行なう仮想フレームバッファ + X サーバ + + + + + + + + XFree86 のマニュアルインストール + + sysinstall を使わずに X をインストールする場合は, + 以下のようにたくさんのステップを踏む必要があります. + + + + + ディレクトリを作成し, 必要なアーカイブを展開します. + + + + X サーバを選びインストールします. + + + + X にアクセスできるように環境を整えます. + + + + X を実行するための仮想端末を見つけます. + + + + ハードウェアに合わせて X を設定します. + + + + やることがたくさんあるように見えますが, + きっちりとやればそう大変ではありません. + このセクションの残りでは, + それぞれのステップについて見ていきます. + + + アーカイブの展開 + + 多くの実行ファイルが set-user-id されていますので, + アーカイブの展開は root で行なう必要があります. + 通常のユーザとして展開した場合, 実行できないこともあります. + また, umask の値として 022 (rwxr-xr-x の許可属性) + を用いる必要があります. + なぜなら X サーバは特別な許可属性を要求するからです. + + + &prompt.user; su +Password: +&prompt.root; umask 022 + + /usr + ファイルシステムに十分な空き容量がない場合, + 他のパーティションにディレクトリを作成し, + /usr にシンボリックリンクを張ってください. + たとえば, /home + に十分な空き容量がある場合は次のようにします. + + &prompt.root; cd /home +&prompt.root; mkdir X11R6 +&prompt.root; ln -s /home/X11R6 /usr/X11R6 + + 次に, どのアーカイブをインストールするのかを決めます. + 最小インストールであれば + Xbin.tgz, + Xfnts.tgz, + Xlib.tgz, + および + Xcfg.tgz を選んでください. + すでに X の設定を行なっているのなら + Xcfg.tgz はなくても構いません. + + + sh を使っている場合は次のようにして展開します. + + &prompt.root; mkdir -p /usr/X11R6 +&prompt.root; cd /usr/X11R6 +&prompt.root; for i in bin fnts lib cfg; do +&prompt.root; tar xzf X$i.tgz +&prompt.root; done + + csh なら次のようにしてください. + + &prompt.root; mkdir -p /usr/X11R6 +&prompt.root; cd /usr/X11R6 +&prompt.root; foreach i (bin fnts lib cfg) +? tar xzf X$i.tgz +? end + + + + サーバのインストール + + + 自分の VGA カードに対応するサーバのアーカイブを選んでください. + 上の表からは十分な情報が得られない場合にはサーバのマニュアル + /usr/X11R6/man/man1/XF86_* をチェックしてください. + それぞれのサーバでサポートするチップセットが載っています. + たとえば ET4000 ベースのボードを持っている場合には + XF86_SVGA + サーバを用いるとよいでしょう. この場合には次のように操作します. + + + &prompt.root; cd /usr/X11R6 +&prompt.root; tar xzf XSVGA.tgz [substitute your server name here] + + + + 環境設定 + + 次にシンボリックリンクを作って + /usr/X11/bin/X + が自分のビデオボードに合うサーバを指すようにしましょう. + ここでは XF86_SVGA がサーバですから, + 次のようにします. + + + &prompt.root; cd /usr/X11R6/bin +&prompt.root; rm X +&prompt.root; ln -s XF86_SVGA X + + X が正しく動くためにこのシンボリックリンクが必要なのですが, + 以下のように xf86config + を実行中に設定するチャンスがあります. + + + + 次に, ディレクトリ /usr/X11R6/bin + がデフォルトのパスに入っているかどうかチェックします. + チェックするのは sh であれば /etc/profile, + csh であれば /etc/csh.login です. + パスがなければ加えておきましょう. + エディタを使うのが最も良いのですが, + 面倒な場合には次のようなテもあります. + + + &prompt.root; echo 'PATH=$PATH:/usr/X11R6/bin' >>/etc/profile + + もしくは + + &prompt.root; echo 'set path = ($path /usr/X11R6/bin)' >>/etc/csh.login + + そして, そのシステム上で X を使うユーザの全員が + シェル変数 PATH/usr/X11R6/bin + を加えていることを確認しましょう. + + 次に ldconfig を使って共有ライブラリを ld.so + のキャッシュに入れます. + + &prompt.root; ldconfig -m /usr/X11R6/lib + + X を使う前に再起動するのであれば ldconfig + を起動する必要はありません. + + フォントファイルを圧縮する必要はないのですが, + もしするなら忘れずに該当ディレクトリで + mkfontdir を実行しなければいけません. + そうしないとサーバは + could not open default font `fixed' + というメッセージを出して強制終了してしまうかも知れません. + + + + + X への仮想端末の割り当て + + 次に getty が動いている予備の仮想コンソールがあることを確認しましょう. + まずいくつの仮想コンソールがあるのかチェックします. + + &prompt.root; dmesg | grep virtual +sc0: VGA color <16 virtual consoles, flags=0x0> + + そして, /etc/ttys + をチェックして少なくとも一つの仮想端末 + (ttyvxx デバイス) で getty が有効になっていないことを確認します. + これは次のように off というキーワードを探します. + + &prompt.root; grep ttyv /etc/ttys +ttyv0 "/usr/libexec/getty Pc" cons25 on secure +ttyv1 "/usr/libexec/getty Pc" cons25 on secure +ttyv2 "/usr/libexec/getty Pc" cons25 on secure +ttyv3 "/usr/libexec/getty Pc" cons25 off secure + + この場合, カーネルが少なくとも 4 つの仮想端末を持っていれば + /dev/ttyv3 が利用可能です. + そうでなければ /etc/ttys で on を off + に変更してgetty を無効にするか, 仮想端末を増やしたカーネルを作ります. + + + + 自分のハードウェア用に X を設定する + + X のインストールが終わったら, XF86Config + ファイルをカスタマイズして + X サーバにハードウェアの構成と, + どう動作させたいのかを X サーバに教えます. + + + XF86Config + を設定するためには次にあげるようなハードウェア情報が必要です. + + + + マウスの種類, + シリアルマウスであればビットレート, + そしてマウスが接続されているデバイスの名前. + 一般的には, シリアルマウスであれば /dev/ttyd0 + もしくは /dev/ttyd1, PS/2 マウスであれば + /dev/psm0, + そして バスマウスであれば /dev/mse0 です. + + + + ビデオボードの種類と表示メモリの量. + 名前がわからなければどんなチップセットを使っているのか確認しましょう. + + + + モニターのパラメータ. + つまり垂直と水平の同期周波数のことです. + + + + + + ハードウェアの確認 + + ハードウェアがどういうものなのか, + どうやって決めればいいのでしょう? + ハードウェアメーカが教えてくれるとしても, + たとえばディスプレイボードやモニタについて得られる情報は + 76 Hz のリフレッシュレートで 16,777,216 色を表示できる SVGA + のように非常に貧弱なことがしばしばです. + この情報からはピクセルの最大の色深度がわかるくらいで, + ディスプレイボードについては何もわかりません. + + 後でわかりますが, + 本当に知る必要のあるパラメータは水平最大周波数, + ドットクロック幅, チップセット, そして表示用メモリの量です. + + + 不幸にもこういった情報を得ることができないかも知れませんが, + そのうちのいくつかは SuperProbe + プログラムを用いて得ることができます. + 特にチップセットとボード上のメモリの量はどんなものでも調べられるはずです. + + + + SuperProbe は時々, + システムをクラッシュさせてしまうこともあります. + 実行する時には他に重要なものが動いていないことを確認してから行ないましょう. + SuperProbe の出力は次のようになります. + + + &prompt.root; SuperProbe +(warnings and acknowledgments omitted) +First video: Super-VGA + Chipset: Tseng ET4000 (Port Probed) + Memory: 1024 Kbytes + RAMDAC: Generic 8-bit pseudo-color DAC + (with 6-bit wide lookup tables (or in 6-bit mode)) + + SuperProbe + はかなり気難しいコマンドなのでうまく動かないこともあります. + その時には次のようなメッセージが出力されます. + + SuperProbe: Cannot be run while an X server is running +SuperProbe: If an X server is not running, unset $DISPLAY and try again +SuperProbe: Cannot open video + + 言い換えれば, X サーバが動いていないのに + DISPLAY 環境変数が設定してあると + SuperProbe は動きません. + ではどうやればこの環境変数の設定を解除できるのでしょう? + Bourne シェル系の場合は次のように入力してください. + + + &prompt.root; unset DISPLAY + + C シェル系ならば次ようにします. + + &prompt.root; unsetenv DISPLAY + + + + <command>xf86config</command> の実行 + + 設定ファイルを作成する簡単な方法は xf86config + (すべて小文字であることに注意) か XF86Setup + のどちらかのユーティリティを用いることです. 両方のツールとも, + 一つ一つ手順を追って設定を行なうことができます. + xf86config は CUI モードで動きますが, + XF86Setup はグラフィカルなモードで動きます. + XF86Setup は変わったハードウェアでは問題を起こし得るため, + わたしは個人的に xf86config の方が好きです. + + sysinstall を使うこともできるのですが, + 操作はほとんど変わりません. + sysinstall は単に + xf86config + を起動するだけですし, 直接起動する方が簡単だからです. + このセクションでは xf86config + を使った設定を解説するための例を示します. + 1 MB のメモリが載った懐しい Diamond SpeedStar, + ロジテック MouseMan マウス, + そして ADI MicroScan 5AP モニタ用に X をインストールするとしましょう. + マウスは一つ目のシリアルポート /dev/ttyd0 に接続されています. + + + xf86config を実行するには, + そのコマンド名を入力します. + 環境変数 PATH に + /usr/X11R6/bin + 含まれていれば単に xf86config と入力するだけです. + そうでない場合は xf86config へのフルパスを入力する必要があります. + + &prompt.root; /usr/X11R6/bin/xf86config + + このプログラムはメニューから選んだものを基にして基本的な + XF86Config ファイルを生成します. + + XF86Config ファイルは通常 + /usr/X11R6/lib/X11 + もしくは /etc に置きます. + サンプルの XF86Config + ファイルが XFree86 とともに提供されていますが, + これは標準的な VGA カードと 640x480 + の解像度を持ったモニタ用に設定されたものです. + このプログラムはファイルに書き出す時にパス名を尋ねてくるでしょう. + + + サンプルの XF86Config + を利用して編集しても良いですし, + このプログラムに生成させてから細かく調整するのでも良いでしょう. + 設定に関する詳細については + /usr/X11R6/lib/X11/doc/README.Config + を参照してください. + + + 特別に対応したサーバ + (SVGA ドライバ中の特別に対応したドライバも含む) + の場合, チップセットやカードに特有のオプションと設定がたくさんあります. + しかし, このプログラムはそれらの特別な設定については対応していません. + いくつかの構成では, それらの設定が必要になります. + サーバのマニュアルページやチップセット用の README ファイルをご覧ください. + + このプログラムを続ける前に, + チップセットとビデオカード上のビデオメモリの量について確認しておきます. + SuperProbe が役に立つでしょうし, + またどのサーバを実行したいのかを知っておくと役に立ちます. + + Press enter to continue, or ctrl-c to abort. ENTER + +First specify a mouse protocol type. Choose one from the following list: + + 1. Microsoft compatible (2-button protocol) + 2. Mouse Systems (3-button protocol) + 3. Bus Mouse + 4. PS/2 Mouse + 5. Logitech Mouse (serial, old type, Logitech protocol) + 6. Logitech MouseMan (Microsoft compatible) + 7. MM Series + 8. MM HitTablet + 9. Microsoft IntelliMouse + + + 2 ボタンマウスの場合はほとんどが 1 でしょうし, + 3 ボタンマウスであれば, + おそらく 1 も 2 もサポートしているでしょう. + 後者の場合, 主に二つの組み合わせがあります. + プロトコルを選択するためのスイッチが付いたマウスと, + デフォルトは 1 で, プロトコル 2 + を選択するには起動時にボタンを押す必要があるようなマウスです. + シリアルポートに特別な命令列を送って 2 + を使うようにできるマウスもあります + (ClearDTR/ClearRTS オプションを参照してください). + + + Enter a protocol number: 6 Logitech MouseMan + +You have selected a Logitech MouseMan type mouse. You might want to enable +ChordMiddle which could cause the third button to work. + +Please answer the following question with either 'y' or 'n'. +Do you want to enable ChordMiddle? n + + 多くの X クライアントが三番目のボタンを使うため, + このボタンも欲しいところです. + しかし, ロジテック純正のマウスの場合 + ChordMiddle + を有効にする必要はありません. + X を起動した時に三番目のボタンが効かない場合には, + 設定ファイルを編集して + ChordMiddle を有効にします. – そのほうが + XF86Setup + をもう一度起動するよりもエラーになりにくいのです. + + Continuing through the setup: + + If your mouse has only two buttons, it is recommended that you enable Emulate3Buttons. + +Please answer the following question with either 'y' or 'n'. +Do you want to enable Emulate3Buttons? n + +Now give the full device name that the mouse is connected to, for example +/dev/tty00. Just pressing enter will use the default, /dev/mouse. + +Mouse device: /dev/ttyd1 + + このエントリには細心の注意を払ってください. + マウスが接続されているデバイスの名前を正しく指定しなければいけません. + xf86config は FreeBSD に特有のコマンドではなく, + 例として示されているものは FreeBSD には存在しないデバイスなのです. + シリアルマウスの場合には /dev/ttyd0 + から /dev/ttyd3, + PS/2 マウスでは /dev/psm0, + バスマウスでは /dev/mse0 を使ってください. + + Continuing, we see: + + Beginning with XFree86 3.1.2D, you can use the new X11R6.1 +XKEYBOARD extension to manage the keyboard layout. If you answer 'n' to the +following question, the server will use the old method, and you have to +adjust your keyboard layout with xmodmap. + +Please answer the following question with either 'y' or 'n'. +Do you want to use XKB? y + +The following dialogue will allow you to select from a list of already +preconfigured keymaps. If you don't find a suitable keymap in the list, +the program will try to combine a keymap from additional information you +are asked then. Such a keymap is by default untested and may require +manual tuning. Please report success or required changes for such a +keymap to XFREE86@XFREE86.ORG for addition to the list of preconfigured +keymaps in the future. + +Press enter to continue, or ctrl-c to abort. + +List of preconfigured keymaps: + + 1 Standard 101-key, US encoding + 2 Microsoft Natural, US encoding + 3 KeyTronic FlexPro, US encoding + 4 Standard 101-key, US encoding with ISO9995-3 extensions + 5 Standard 101-key, German encoding + 6 Standard 101-key, French encoding + 7 Standard 101-key, Thai encoding + 8 Standard 101-key, Swiss/German encoding + 9 Standard 101-key, Swiss/French encoding + 10 None of the above + +Enter a number to choose the keymap. + +1 Choose the standard US keyboard + + さて, ここではモニタの設定を行います. + 中心となる二つのパラメータは, + スクリーン全体を書き換える時のレートである垂直リフレッシュレートと, + 特に重要な, 走査線を表示するレートである水平同期周波数です. + + + 水平同期と垂直同期の有効な範囲はモニタのマニュアルに記載されているでしょう. + 疑問がある場合は自分のモニタがあるかどうか, + モニタデータベースである + /usr/X11R6/lib/X11/doc/Monitors + をチェックしてみましょう. + + Press enter to continue, or ctrl-c to abort. ENTER + +You must indicate the horizontal sync range of your monitor. You can either +select one of the predefined ranges below that correspond to industry- +standard monitor types, or give a specific range. + +It is VERY IMPORTANT that you do not specify a monitor type with a horizontal +sync range that is beyond the capabilities of your monitor. If in doubt, +choose a conservative setting. + + hsync in kHz; monitor type with characteristic modes + 1 31.5; Standard VGA, 640x480 @@ 60 Hz + 2 31.5 - 35.1; Super VGA, 800x600 @@ 56 Hz + 3 31.5, 35.5; 8514 Compatible, 1024x768 @@ 87 Hz interlaced (no 800x600) + 4 31.5, 35.15, 35.5; Super VGA, 1024x768 @@ 87 Hz interlaced, 800x600 @@ 56 Hz + 5 31.5 - 37.9; Extended Super VGA, 800x600 @@ 60 Hz, 640x480 @@ 72 Hz + 6 31.5 - 48.5; Non-Interlaced SVGA, 1024x768 @@ 60 Hz, 800x600 @@ 72 Hz + 7 31.5 - 57.0; High Frequency SVGA, 1024x768 @@ 70 Hz + 8 31.5 - 64.3; Monitor that can do 1280x1024 @@ 60 Hz + 9 31.5 - 79.0; Monitor that can do 1280x1024 @@ 74 Hz +10 31.5 - 82.0; Monitor that can do 1280x1024 @@ 76 Hz +11 Enter your own horizontal sync range + +Enter your choice (1-11): + + 残念なことにわたしたちのモニタは + /usr/X11R6/lib/X11/doc/Monitors + には載っていませんでした. + しかし, 偶然にもマニュアルのテクニカルデータセクションに載っていたのです. + 水平周波数の範囲は 30 〜 64 kHz で垂直周波数の範囲は 50 〜 100 Hz です. + 周波数範囲は選択肢 8 とほぼ同じですが, + この設定はテクニカルデータシートのものよりも + 0.3 kHz ほど高いほうに広がっています. + 危険を冒したいですか? + もしそのまま進めてもほとんど問題ありません. + 仕様からのずれが小さければ, + それでモニタが壊れてしまうようなことはありませんし, + また + XF86Config が実際に 64.0 から + 64.3 kHz の間の水平周波数を出すこともないからです. + とは言っても, この小さな危険を背負う必要があるわけではありません. + 実際の値を指定すれば良いのです. + + + Enter your choice (1-11): 11 + +Please enter the horizontal sync range of your monitor, in the format used +in the table of monitor types above. You can either specify one or more +continuous ranges (e.g. 15-25, 30-50), or one or more fixed sync +frequencies. + +Horizontal sync range: 30-64 + + 次に, 水平周波数の範囲を選びます. + + You must indicate the vertical sync range of your monitor. +You can either select one of the predefined ranges below that correspond +to industry-standard monitor types, or give a specific range. For +interlaced modes, the number that counts is the high one (e.g., 87 Hz +rather than 43 Hz). + + 1 50-70 + 2 50-90 + 3 50-100 + 4 40-150 + 5 Enter your own vertical sync range + +Enter your choice: 3 exactly the range of the monitor + + 次のステップでは識別のための文字列を指定します. + 好きなものを使うことができますが, + 非常に多くのハードウェアを扱わない限り + xf86config + に任せておけばいいでしょう. + + You must now enter a few identification/description strings, +namely an identifier, a vendor name, and a model name. Just pressing enter +will fill in default names. + +The strings are free-form, spaces are allowed. +Enter an identifier for your monitor definition: ENTER +Enter the vendor name of your monitor: ENTER +Enter the model name of your monitor: ENTER + + 次はビデオボードの選択です. + わたしたちは古い ET4000 チップの載った + Ramdac とクロックチップが不明な + Diamond SpeedStar Plus を持っています. + どうやればいいのか見てみましょう. + + Now we must configure video card specific settings. At +this point you can choose to make a selection out of a database of video +card definitions. Because there can be variation in Ramdacs and clock +generators even between cards of the same model, it is not sensible to +blindly copy the settings (e.g., a Device section). For this reason, +after you make a selection, you will still be asked about the components +of the card, with the settings from the chosen database entry presented as +a strong hint. + +The database entries include information about the chipset, what server to +run, the Ramdac and ClockChip, and comments that will be included in the +Device section. However, a lot of definitions only hint about what server +to run (based on the chipset the card uses) and are untested. + +If you can't find your card in the database, there's nothing to worry about. +You should only choose a database entry that is exactly the same model as +your card; choosing one that looks similar is just a bad idea (e.g. a +GemStone Snail 64 may be as different from a GemStone Snail 64+ in terms of +hardware as can be). + +Do you want to look at the card database? y + 0 2 the Max MAXColor S3 Trio64V+ S3 Trio64V+ + 1 928Movie S3 928 + 2 AGX (generic) AGX-014/15/16 + 3 ALG-5434(E) CL-GD5434 + 4 ASUS 3Dexplorer RIVA128 + 5 ASUS PCI-AV264CT ATI-Mach64 + 6 ASUS PCI-V264CT ATI-Mach64 + 7 ASUS Video Magic PCI V864 S3 864 + 8 ASUS Video Magic PCI VT64 S3 Trio64 + 9 AT25 Alliance AT3D + 10 AT3D Alliance AT3D + 11 ATI 3D Pro Turbo ATI-Mach64 + 12 ATI 3D Xpression ATI-Mach64 + 13 ATI 3D Xpression+ PC2TV ATI-Mach64 + 14 ATI 8514 Ultra (no VGA) ATI-Mach8 + 15 ATI All-in-Wonder ATI-Mach64 + 16 ATI Graphics Pro Turbo ATI-Mach64 + 17 ATI Graphics Pro Turbo 1600 ATI-Mach64 + +Enter a number to choose the corresponding card definition. +Press enter for the next page, q to continue configuration. +ENTER + + かなりの数のボードがアルファベット順に定義されていますが, + ついに次のようなものを見つけました. + + 108 DSV3325 S3 ViRGE +109 DSV3326 S3 Trio64V+ +110 DataExpert DSV3325 S3 ViRGE +111 DataExpert DSV3365 S3 Trio64V+ +112 Dell S3 805 S3 801/805 +113 Dell onboard ET4000 ET4000 +114 Diamond Edge 3D nv1 +115 Diamond Multimedia Stealth 3D 2000 S3 ViRGE +116 Diamond Multimedia Stealth 3D 2000 PRO S3 ViRGE/DX +117 Diamond SpeedStar (Plus) ET4000 +118 Diamond SpeedStar 24 ET4000 +119 Diamond SpeedStar 24X (not fully supported) WD90C31 +120 Diamond SpeedStar 64 CL-GD5434 +121 Diamond SpeedStar HiColor ET4000 +122 Diamond SpeedStar Pro (not SE) CL-GD5426/28 +123 Diamond SpeedStar Pro 1100 CL-GD5420/2/4/6/8/9 +124 Diamond SpeedStar Pro SE (CL-GD5430/5434) CL-GD5430/5434 +125 Diamond SpeedStar64 Graphics 2000/2200 CL-GD5434 + +Enter a number to choose the corresponding card definition. +Press enter for the next page, q to continue configuration. + +117 + +Your selected card definition: + +Identifier: Diamond SpeedStar (Plus) +Chipset: ET4000 +Server: XF86_SVGA + +Press enter to continue, or ctrl-c to abort.ENTER + +Now you must determine which server to run. Refer to the man pages and +other documentation. The following servers are available (they may not +all be installed on your system): + + 1 The XF86_Mono server. This a monochrome server that should work on any + VGA-compatible card, in 640x480 (more on some SVGA chipsets). + 2 The XF86_VGA16 server. This is a 16-color VGA server that should work on + any VGA-compatible card. + 3 The XF86_SVGA server. This is a 256 color SVGA server that supports + a number of SVGA chipsets. On some chipsets it is accelerated or + supports higher color depths. + 4 The accelerated servers. These include XF86_S3, XF86_Mach32, XF86_Mach8, + XF86_8514, XF86_P9000, XF86_AGX, XF86_W32, XF86_Mach64, XF86_I128 and + XF86_S3V. + +These four server types correspond to the four different "Screen" sections in +XF86Config (vga2, vga16, svga, accel). + + 5 Choose the server from the card definition, XF86_SVGA. + +Which one of these screen types do you intend to run by default (1-5)? + + システムはすでに XF86_SVGA を選んでくれています. + 違うものに変えますか? + 変更するには, それなりの理由が必要でしょう. + ここではさしたる理由もありませんので, + カードの定義のままにしておきましょう. + + Which one of these screen types do you intend to run by default (1-5)? 5 + +The server to run is selected by changing the symbolic link 'X'. For example, +the SVGA server. + +Please answer the following question with either 'y' or 'n'. +Do you want me to set the symbolic link? y + + X を起動するすべてのプログラム (xinit, startx および xdm) + は /usr/X11R6/bin/X を起動します. + ここでのシンボリックリンクは /usr/X11R6/bin/X + が自分のサーバを指すようにしてくれます. + もしシンボリックリンクを行なわなければ X を起動することはできません. + + + Now you must give information about your video card. This +will be used for the "Device" section of your video card in XF86Config. + +You must indicate how much video memory you have. It is probably a good +idea to use the same approximate amount as that detected by the server you +intend to use. If you encounter problems that are due to the used server +not supporting the amount memory you have (e.g. ATI Mach64 is limited to +1024K with the SVGA server), specify the maximum amount supported by the +server. + +How much video memory do you have on your video card: + + 1 256K + 2 512K + 3 1024K + 4 2048K + 5 4096K + 6 Other + +Enter your choice: 3 + +You must now enter a few identification/description strings, namely an +identifier, a vendor name, and a model name. Just pressing enter will fill +in default names (possibly from a card definition). + +Your card definition is Diamond SpeedStar (Plus). + +The strings are free-form, spaces are allowed. +Enter an identifier for your video card definition: ENTER +You can simply press enter here if you have a generic card, or want to +describe your card with one string. +Enter the vendor name of your video card: ENTER +Enter the model (board) name of your video card: ENTER + +Especially for accelerated servers, Ramdac, Dacspeed and ClockChip settings +or special options may be required in the Device section. + +The RAMDAC setting only applies to the S3, AGX, W32 servers, and some +drivers in the SVGA servers. Some RAMDAC's are auto-detected by the server. +The detection of a RAMDAC is forced by using a Ramdac "identifier" line in +the Device section. The identifiers are shown at the right of the following +table of RAMDAC types: + + 1 AT&T 20C490 (S3 and AGX servers, ARK driver) att20c490 + 2 AT&T 20C498/21C498/22C498 (S3, autodetected) att20c498 + 3 AT&T 20C409/20C499 (S3, autodetected) att20c409 + 4 AT&T 20C505 (S3) att20c505 + 5 BrookTree BT481 (AGX) bt481 + 6 BrookTree BT482 (AGX) bt482 + 7 BrookTree BT485/9485 (S3) bt485 + 8 Sierra SC15025 (S3, AGX) sc15025 + 9 S3 GenDAC (86C708) (autodetected) s3gendac + 10 S3 SDAC (86C716) (autodetected) s3_sdac + 11 STG-1700 (S3, autodetected) stg1700 + 12 STG-1703 (S3, autodetected) stg1703 + + +Enter a number to choose the corresponding RAMDAC. +Press enter for the next page, q to quit without selection of a RAMDAC. + + +q We don't need this + + +A Clockchip line in the Device section forces the detection of a +programmable clock device. With a clockchip enabled, any required +clock can be programmed without requiring probing of clocks or a +Clocks line. Most cards don't have a programmable clock chip. +Choose from the following list: + + 1 Chrontel 8391 ch8391 + 2 ICD2061A and compatibles (ICS9161A, DCS2824) icd2061a + 3 ICS2595 ics2595 + 4 ICS5342 (similar to SDAC, but not completely compatible) ics5342 + 5 ICS5341 ics5341 + 6 S3 GenDAC (86C708) and ICS5300 (autodetected) s3gendac + 7 S3 SDAC (86C716) s3_sdac + 8 STG 1703 (autodetected) stg1703 + 9 Sierra SC11412 sc11412 +10 TI 3025 (autodetected) ti3025 +11 TI 3026 (autodetected) ti3026 +12 IBM RGB 51x/52x (autodetected) ibm_rgb5xx + +Just press enter if you don't want a Clockchip setting. +What Clockchip setting do you want (1-12)? ENTER + +For most configurations, a Clocks line is useful since it prevents the slow +and nasty sounding clock probing at server start-up. Probed clocks are +displayed at server startup, along with other server and hardware +configuration info. You can save this information in a file by running +imprecise; some clocks may be slightly too high (varies per run). + +At this point I can run X -probeonly, and try to extract the clock information +from the output. It is recommended that you do this yourself and add a clocks +line (note that the list of clocks may be split over multiple Clocks lines) to +your Device section afterwards. Be aware that a clocks line is not +appropriate for drivers that have a fixed set of clocks and don't probe by +default (e.g. Cirrus). Also, for the P9000 server you must simply specify +clocks line that matches the modes you want to use. For the S3 server with +a programmable clock chip you need a 'ClockChip' line and no Clocks line. + +You must be root to be able to run X -probeonly now. + +Do you want me to run 'X -probeonly' now? + + この最後の質問はきちんと考える必要があります. + あるポイントで X -probeonly を実行する必要はあるのですが, + そうするためにはさらにいくつかの設定が必要です. + 忠告通り, 後でやってみることにしましょう. + + Do you want me to run 'X -probeonly' now? n + +For each depth, a list of modes (resolutions) is defined. The default +resolution that the server will start-up with will be the first listed +mode that can be supported by the monitor and card. +Currently it is set to: + +"640x480" "800x600" "1024x768" for 8bpp +"640x480" "800x600" for 16bpp +"640x480" for 24bpp +"640x400" for 32bpp + +Note that 16, 24 and 32bpp are only supported on a few configurations. +Modes that cannot be supported due to monitor or clock constraints will +be automatically skipped by the server. + + 1 Change the modes for 8pp (256 colors) + 2 Change the modes for 16bpp (32K/64K colors) + 3 Change the modes for 24bpp (24-bit color, packed pixel) + 4 Change the modes for 32bpp (24-bit color) + 5 The modes are OK, continue. + +Enter your choice: 5 accept the defaults + +You can have a virtual screen (desktop), which is screen area that is larger +than the physical screen and which is panned by moving the mouse to the edge +of the screen. If you don't want virtual desktop at a certain resolution, +you cannot have modes listed that are larger. Each color depth can have a +differently-sized virtual screen + +Please answer the following question with either 'y' or 'n'. +Do you want a virtual screen that is larger than the physical screen? n + + 物理的な画面の大きさよりも大きな仮想スクリーンが必要かどうかというのは難しい問題です. + わたしはかなりうっとうしいと思うので n と答えることをお勧めしますが, + 特に最も高い解像度でも小さい, + という場合には便利だと感じるかも知れません. + + さて設定は終わりました. + 後は sysinstall + が設定ファイルを書くだけです. + + I am going to write the XF86Config file now. Make sure +you don't accidently overwrite a previously configured one. + +Shall I write it to /etc/XF86Config? y + +File has been written. Take a look at it before running 'startx'. Note that +the XF86Config file must be in one of the directories searched by the server +(e.g. /usr/X11R6/lib/X11) in order to be used. Within the server press +ctrl, alt and '+' simultaneously to cycle video resolutions. Pressing ctrl, +alt and backspace simultaneously immediately exits the server (use if +the monitor doesn't sync for a particular mode). + +For further configuration, refer to /usr/X11R6/lib/X11/doc/README.Config. + + 一旦この設定が終われば, X を起動する準備ができています. + + +