diff --git a/ja/handbook/kernelconfig/chapter.sgml b/ja/handbook/kernelconfig/chapter.sgml index 54c76f3d5d..4176b86128 100644 --- a/ja/handbook/kernelconfig/chapter.sgml +++ b/ja/handbook/kernelconfig/chapter.sgml @@ -1,1817 +1,1818 @@ FreeBSDカーネルのコンフィグレーション 原作: &a.jehamby;. 6 October 1995. 訳: &a.jp.tomo;, &a.jp.yoshiaki;. 2 November 1996. この章はシステムに合わせたカーネルの再構築の基礎について 述べたものです. この章は, システム管理の初心者から Unix システム管理に十分な経験を積んだ人までを対象としています. なぜカスタムカーネルを作るか? システムに合わせたカーネルの構築はすべての Unixシステム管理者が 避けて通ることのできない最も重要な通過儀礼の1つです. この作業は, 多くの時間を必要としますが, あなたの FreeBSD システムに多くの利益をもたらします. GENERICカーネルは, めったに使われることのないハードウェアをサポートするとともに, 考えられるすべての SCSIカードやネットワークカードをサポート しなければなりませんが, システムに合わせたカーネルは あなたの PC のハードウェアのみをサポートします. これは, 次にあげるような利益をもたらします. あなたが持っていない ハードウェアについては検出をおこなわな いので, ブートにかかる時間が短くなります. システムに合わせたカーネルは多くの場合メモリ使用量が 減ります. カーネルはいつもメモリ上に存在するので, 不必要なコードがあると本来プログラムが利用できるはずの RAM (実メモリ) を占めてしまいますのでこれは重要なことだ といえます. したがって, メモリが少ないシステムでは, カーネルの再構築は大変重要です. 必要に応じていくつかのカーネルオプションは調整すること ができ, またサウンドカードのような GENERICカーネルには ない デバイスドライバをカーネルに含めることが できます. カスタムカーネルの構築とインストール まず, カーネル再構築に必要なディレクトリをざっと見てみましょう. ここではディレクトリはすべて /usr/src/sys以下の相対位 置で示します. また, /sysからもアクセス可能です. ここには, カーネルの各部分を構成するサブディレクトリが いくつもあります. しかし, 私たちの目的では 最も重要なのは i386/confです. ここで, あなたの システムに合わせてカーネル コンフィグレーションを編集します. それから compileディレクトリ, ここはカーネルが作られる 場所です. サポートされているデバイスやファイルシステムのディレ クトリツリーがオプション毎にサブディレクトリに分かれている論理 的構成に注意してください. また, i386のディレクトリは PCのハードウェアのみを扱い, i386以外のディレクトリは FreeBSDが他のプラットフォームに移植される際には共有されるコー ドです. もし, あなたのシステムに/usr/src/sys 以下のディレクトリがなければ, カーネルのソースが インストールされていません. もっとも簡単な方法は (rootで) /stand/sysinstall を用いて以下のようにします. 設定(Configure) を選んでから 配布ファイル(Distribution) を選択し, src の中の sys をインストールしてください. つぎに, i386/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 をチェックしてください. カーネルは現在, オプションを扱う方法をよりよい機構に移行しよ うとしています. 従来は, 各々のオプションは単純にカーネルの Makefile中の CFLAGS行の スイッチに変換されて いました. 自然とオプションは際限なく増えて行きます. だれも実際に はどのオプションがどのファイルで参照されているかは知りません. 新しい方法では, すべてのオプション依存の #ifdefは当該オプショ ンを opt_foo.h (これらのファイルはconfigによって compileディレ クトリに作られます) から読み込むように変わりました. config の有効なオプションのリストは2つのファイルにお かれます. アーキテクチャに依存しないオプションは /sys/conf/optionsに置かれ, アーキテクチャ依存のオプションは /sys/arch/conf/options に置かれます. arch の部分は例えば i386となります. 必須キーワード ここにあるキーワードはカーネルの構築に必要不可欠です. machine "i386" 最初のキーワードは machineです. FreeBSDは Intelの 386(とその互換)チップあるいは alpha プロセッサ上でのみ動作するので i386alphaを指定します. 数字を含むキーワードはすべて クォーテーションマークで囲む必要があります. そうせずに,machine i386 と入力すると configは混乱して 386を実際の数値として扱ってしまいます. cpu "cpu_type" 次のキーワードは cpuです. FreeBSDでサポートしている CPUの中から記述します. i386 システムでは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に与えた名前はカーネルの ブート時に表示されるので, 普段のカーネルとは別に カーネルに違う名前を与えたいとき(例えば, 実験用のカーネルを作りたい時など), 便利でしょう. 数字を含む名前にしたい場合は machinecpu の時と同じようにクォーテーションマークで 囲む必要があります. C コンパイラに スイッチで渡されるので, DEBUGのような名前にしたり, vax といった他のCPUの名前など紛らわしい名前にしないで ください. maxusers number これは, 重要なシステムテーブルのサイズを決めます. ここ で与えられる数字はマシンに同時にログインすると考えられ るおよそのユーザ数です. しかし, 通常の使用環境であれば, 特に X Window System を立ち上げたり, ソフトウェアを コンパイルするような使用であれば maxusersには少 なくとも 4 以上を指定したほうがいいでしょう. その理由は, maxusers で決るテーブルで最も重要なものはプロセス の最大数であるからです. プロセス最大数は 20 + 16 * maxusersで与えられ, maxusers1 にすると36プロセスしか同時には持てません. この中にはブー ト時にシステムによって起動する18個ぐらいのプロセス, Xを 起動する時の15程度のプロセスも含みます. manページを読むという1つのタスクでさえ, フィ ルタやファイル伸長や表示のために9つのプロセスを起動し ます. maxusers4 にすれば, 同時に84個のプロセ スを持つことができるのでどんな人でも十分な数だといえる でしょう. それでも他のプログラムを起動した場合に, あるいは, (Walnut Creek CDROMのFTPサイトのように) 同時に多くの ユーザを抱えるサーバを走らせた場合に proc table full というおぞましいエラーが起きる場合はこの値を増や し, カーネルを再構築してください. maxuserはあなたのマシン にログインできるユーザの数を制限するものでは ありません. 単に, あなたのシステムに ログインするユーザ数の最大値と各々のユーザが いくつのプロセスを走らせるかを考慮することに よってさまざまなテーブルの値を適切な値に設定 するだけです. これに対し, pseudo-device pty 16の remote loginsというキーワードは 同時にリモートログインできるユーザ数を制限 します. config kernel_name root on root_device これはカーネルの位置と名前を特定します. 伝統的にカーネルは vmunixと呼ばれますが, FreeBSDでは kernelとふさわしい名前になりました. kernel_nameにはいつも kernel を 使ってください. 名前を変えると多くのシステム ユーティリティが使えなくなります. 2番目の部分は ルートファイルシステムとカーネルのあるディスクと パーティションを指定してください. SCSIドライブでなければ, wd0を, SCSIドライブならば da0です. 一般的なオプション 以下はカーネルのサポートするさまざまなファイルシステムおよ びその他のオプションです. options MATH_EMULATE これは, 数値演算コプロセッサがない コンピュータ (386や486SX) で数値演算コプロセッサ のエミュレーションを可能にします. もし, Pentiumや 486DX, あるいは387や487があれば, コメントアウト できます. FreeBSD付属の数値演算 コプロセッサエミュレータはあまり正確では ありません. 非常に正確な計算をおこないたい ならば, より優れた GNUのエミュレータである GPL_MATH_EMULATEに変えることを おすすめします. これはライセンスの関係でデフォルトでは 含まれていません. options "COMPAT_43" 4.3BSDとの互換性のためのオプションです. そのままにしておいてください. コメントアウトすると, いくつかのプログラムで動作がおかしくなります. options BOUNCE_BUFFERS ISAデバイスやISA互換モードで動作する EISAデバイス では DMA (Direct Memory Access) は16MB以下のメモリに対し てのみ動作します. このオプションによりメモリが16MB以上 のシステムで DMA を使うデバイスを動作させることができます. 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 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 wcd0 このデバイスは 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 st0 SCSIテープドライブのサポートです. device cd0 SCSI CD-ROM のサポートです. 上のエントリについている 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 - と 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 ドライバは, together with the + 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" tty irq 4 vector siointr 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は利用できません. device lpt0 at isa? port? tty irq 7 vector lptintr lpt0 から lpt2は利用可能な3本のプリン タポートです. 多くの場合は1本のみですので他の2本はない のであればコメントアウトして構いません. ネットワーク 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 サウンドドライバ一般のコードです. pca を除く以下のすべてのサウンドカードで必要で す. 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を適切な値に書き直してください. + 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 サウンドカードをサポートします. 追加のドキュメントが /usr/src/sys/i386/isa/sound/ にあります. また, これらのデバイスを追加する場合は, サウンドデバイスノード を作る必要があり ます. 疑似デバイス 疑似デバイスドライバはデバイスドライバと同様に働きますがマ シン上に対応する実際のハードウェアがないカーネルの部分です. ネットワーク関連の 疑似デバイスはそちらのセクションに示しました. ここでは残りにつ いて示します. pseudo-device gzip gzipgzipによって圧縮された FreeBSDの プログラムを実行できるようにします. /standにあるプログ ラムは圧縮されているのでカーネルにこのオプションをつけ ておくのはいい考えでしょう. gzip は現在 a.out バイナリに 対してのみ動作します. pseudo-device log log はカーネルエラーのログを取るのに使います. 不可欠です. 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のサポートをカーネルに加えるとします. 次の行 を加えます. controller wcd0 これにしたがって, /devディレクトリに wcd0で始ま るエントリを捜してください. 1文字が後ろにつくかもしれません. 後 ろについた文字が cであるか先に rのつくエントリは “raw”デバ イスを示します. それらのファイルがないことが明らかになったとします. そこで /dev ディレクトリに移動して次のようにタイプします. &prompt.root; sh MAKEDEV wcd0 スクリプトの実行が終ったら /devwcd0crwcd0c エントリがあることを確認してください. これによ り正しく実行されたことがわかります. サウンドカードの場合のコマンドは次の通りです. &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 は動かない! システムユーティリティと異る バージョンのカーネルをインストールした場合, 例えば 実験的に “4.0” のカーネルを 3.1-RELEASE システム上にインストールするような場合, &man.ps.1; や &man.vmstat.8; のような多くの システムステータスコマンドは動かなくなります. libkvm を 再コンパイルしてこれらのユーティリティを作りなおす 必要があります. これは, オペレーティングシステムのそれ以外の部分と異る バージョンのカーネルを使うことが普通はあまりよくない 理由の一つです. diff --git a/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml b/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml index 54c76f3d5d..4176b86128 100644 --- a/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml @@ -1,1817 +1,1818 @@ FreeBSDカーネルのコンフィグレーション 原作: &a.jehamby;. 6 October 1995. 訳: &a.jp.tomo;, &a.jp.yoshiaki;. 2 November 1996. この章はシステムに合わせたカーネルの再構築の基礎について 述べたものです. この章は, システム管理の初心者から Unix システム管理に十分な経験を積んだ人までを対象としています. なぜカスタムカーネルを作るか? システムに合わせたカーネルの構築はすべての Unixシステム管理者が 避けて通ることのできない最も重要な通過儀礼の1つです. この作業は, 多くの時間を必要としますが, あなたの FreeBSD システムに多くの利益をもたらします. GENERICカーネルは, めったに使われることのないハードウェアをサポートするとともに, 考えられるすべての SCSIカードやネットワークカードをサポート しなければなりませんが, システムに合わせたカーネルは あなたの PC のハードウェアのみをサポートします. これは, 次にあげるような利益をもたらします. あなたが持っていない ハードウェアについては検出をおこなわな いので, ブートにかかる時間が短くなります. システムに合わせたカーネルは多くの場合メモリ使用量が 減ります. カーネルはいつもメモリ上に存在するので, 不必要なコードがあると本来プログラムが利用できるはずの RAM (実メモリ) を占めてしまいますのでこれは重要なことだ といえます. したがって, メモリが少ないシステムでは, カーネルの再構築は大変重要です. 必要に応じていくつかのカーネルオプションは調整すること ができ, またサウンドカードのような GENERICカーネルには ない デバイスドライバをカーネルに含めることが できます. カスタムカーネルの構築とインストール まず, カーネル再構築に必要なディレクトリをざっと見てみましょう. ここではディレクトリはすべて /usr/src/sys以下の相対位 置で示します. また, /sysからもアクセス可能です. ここには, カーネルの各部分を構成するサブディレクトリが いくつもあります. しかし, 私たちの目的では 最も重要なのは i386/confです. ここで, あなたの システムに合わせてカーネル コンフィグレーションを編集します. それから compileディレクトリ, ここはカーネルが作られる 場所です. サポートされているデバイスやファイルシステムのディレ クトリツリーがオプション毎にサブディレクトリに分かれている論理 的構成に注意してください. また, i386のディレクトリは PCのハードウェアのみを扱い, i386以外のディレクトリは FreeBSDが他のプラットフォームに移植される際には共有されるコー ドです. もし, あなたのシステムに/usr/src/sys 以下のディレクトリがなければ, カーネルのソースが インストールされていません. もっとも簡単な方法は (rootで) /stand/sysinstall を用いて以下のようにします. 設定(Configure) を選んでから 配布ファイル(Distribution) を選択し, src の中の sys をインストールしてください. つぎに, i386/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 をチェックしてください. カーネルは現在, オプションを扱う方法をよりよい機構に移行しよ うとしています. 従来は, 各々のオプションは単純にカーネルの Makefile中の CFLAGS行の スイッチに変換されて いました. 自然とオプションは際限なく増えて行きます. だれも実際に はどのオプションがどのファイルで参照されているかは知りません. 新しい方法では, すべてのオプション依存の #ifdefは当該オプショ ンを opt_foo.h (これらのファイルはconfigによって compileディレ クトリに作られます) から読み込むように変わりました. config の有効なオプションのリストは2つのファイルにお かれます. アーキテクチャに依存しないオプションは /sys/conf/optionsに置かれ, アーキテクチャ依存のオプションは /sys/arch/conf/options に置かれます. arch の部分は例えば i386となります. 必須キーワード ここにあるキーワードはカーネルの構築に必要不可欠です. machine "i386" 最初のキーワードは machineです. FreeBSDは Intelの 386(とその互換)チップあるいは alpha プロセッサ上でのみ動作するので i386alphaを指定します. 数字を含むキーワードはすべて クォーテーションマークで囲む必要があります. そうせずに,machine i386 と入力すると configは混乱して 386を実際の数値として扱ってしまいます. cpu "cpu_type" 次のキーワードは cpuです. FreeBSDでサポートしている CPUの中から記述します. i386 システムでは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に与えた名前はカーネルの ブート時に表示されるので, 普段のカーネルとは別に カーネルに違う名前を与えたいとき(例えば, 実験用のカーネルを作りたい時など), 便利でしょう. 数字を含む名前にしたい場合は machinecpu の時と同じようにクォーテーションマークで 囲む必要があります. C コンパイラに スイッチで渡されるので, DEBUGのような名前にしたり, vax といった他のCPUの名前など紛らわしい名前にしないで ください. maxusers number これは, 重要なシステムテーブルのサイズを決めます. ここ で与えられる数字はマシンに同時にログインすると考えられ るおよそのユーザ数です. しかし, 通常の使用環境であれば, 特に X Window System を立ち上げたり, ソフトウェアを コンパイルするような使用であれば maxusersには少 なくとも 4 以上を指定したほうがいいでしょう. その理由は, maxusers で決るテーブルで最も重要なものはプロセス の最大数であるからです. プロセス最大数は 20 + 16 * maxusersで与えられ, maxusers1 にすると36プロセスしか同時には持てません. この中にはブー ト時にシステムによって起動する18個ぐらいのプロセス, Xを 起動する時の15程度のプロセスも含みます. manページを読むという1つのタスクでさえ, フィ ルタやファイル伸長や表示のために9つのプロセスを起動し ます. maxusers4 にすれば, 同時に84個のプロセ スを持つことができるのでどんな人でも十分な数だといえる でしょう. それでも他のプログラムを起動した場合に, あるいは, (Walnut Creek CDROMのFTPサイトのように) 同時に多くの ユーザを抱えるサーバを走らせた場合に proc table full というおぞましいエラーが起きる場合はこの値を増や し, カーネルを再構築してください. maxuserはあなたのマシン にログインできるユーザの数を制限するものでは ありません. 単に, あなたのシステムに ログインするユーザ数の最大値と各々のユーザが いくつのプロセスを走らせるかを考慮することに よってさまざまなテーブルの値を適切な値に設定 するだけです. これに対し, pseudo-device pty 16の remote loginsというキーワードは 同時にリモートログインできるユーザ数を制限 します. config kernel_name root on root_device これはカーネルの位置と名前を特定します. 伝統的にカーネルは vmunixと呼ばれますが, FreeBSDでは kernelとふさわしい名前になりました. kernel_nameにはいつも kernel を 使ってください. 名前を変えると多くのシステム ユーティリティが使えなくなります. 2番目の部分は ルートファイルシステムとカーネルのあるディスクと パーティションを指定してください. SCSIドライブでなければ, wd0を, SCSIドライブならば da0です. 一般的なオプション 以下はカーネルのサポートするさまざまなファイルシステムおよ びその他のオプションです. options MATH_EMULATE これは, 数値演算コプロセッサがない コンピュータ (386や486SX) で数値演算コプロセッサ のエミュレーションを可能にします. もし, Pentiumや 486DX, あるいは387や487があれば, コメントアウト できます. FreeBSD付属の数値演算 コプロセッサエミュレータはあまり正確では ありません. 非常に正確な計算をおこないたい ならば, より優れた GNUのエミュレータである GPL_MATH_EMULATEに変えることを おすすめします. これはライセンスの関係でデフォルトでは 含まれていません. options "COMPAT_43" 4.3BSDとの互換性のためのオプションです. そのままにしておいてください. コメントアウトすると, いくつかのプログラムで動作がおかしくなります. options BOUNCE_BUFFERS ISAデバイスやISA互換モードで動作する EISAデバイス では DMA (Direct Memory Access) は16MB以下のメモリに対し てのみ動作します. このオプションによりメモリが16MB以上 のシステムで DMA を使うデバイスを動作させることができます. 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 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 wcd0 このデバイスは 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 st0 SCSIテープドライブのサポートです. device cd0 SCSI CD-ROM のサポートです. 上のエントリについている 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 - と 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 ドライバは, together with the + 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" tty irq 4 vector siointr 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は利用できません. device lpt0 at isa? port? tty irq 7 vector lptintr lpt0 から lpt2は利用可能な3本のプリン タポートです. 多くの場合は1本のみですので他の2本はない のであればコメントアウトして構いません. ネットワーク 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 サウンドドライバ一般のコードです. pca を除く以下のすべてのサウンドカードで必要で す. 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を適切な値に書き直してください. + 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 サウンドカードをサポートします. 追加のドキュメントが /usr/src/sys/i386/isa/sound/ にあります. また, これらのデバイスを追加する場合は, サウンドデバイスノード を作る必要があり ます. 疑似デバイス 疑似デバイスドライバはデバイスドライバと同様に働きますがマ シン上に対応する実際のハードウェアがないカーネルの部分です. ネットワーク関連の 疑似デバイスはそちらのセクションに示しました. ここでは残りにつ いて示します. pseudo-device gzip gzipgzipによって圧縮された FreeBSDの プログラムを実行できるようにします. /standにあるプログ ラムは圧縮されているのでカーネルにこのオプションをつけ ておくのはいい考えでしょう. gzip は現在 a.out バイナリに 対してのみ動作します. pseudo-device log log はカーネルエラーのログを取るのに使います. 不可欠です. 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のサポートをカーネルに加えるとします. 次の行 を加えます. controller wcd0 これにしたがって, /devディレクトリに wcd0で始ま るエントリを捜してください. 1文字が後ろにつくかもしれません. 後 ろについた文字が cであるか先に rのつくエントリは “raw”デバ イスを示します. それらのファイルがないことが明らかになったとします. そこで /dev ディレクトリに移動して次のようにタイプします. &prompt.root; sh MAKEDEV wcd0 スクリプトの実行が終ったら /devwcd0crwcd0c エントリがあることを確認してください. これによ り正しく実行されたことがわかります. サウンドカードの場合のコマンドは次の通りです. &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 は動かない! システムユーティリティと異る バージョンのカーネルをインストールした場合, 例えば 実験的に “4.0” のカーネルを 3.1-RELEASE システム上にインストールするような場合, &man.ps.1; や &man.vmstat.8; のような多くの システムステータスコマンドは動かなくなります. libkvm を 再コンパイルしてこれらのユーティリティを作りなおす 必要があります. これは, オペレーティングシステムのそれ以外の部分と異る バージョンのカーネルを使うことが普通はあまりよくない 理由の一つです.