原作: &a.jehamby;.
訳:
&a.tomo;,
&a.yoshiaki;. システムに合わせたカーネルはすべての Unixシステム管理者が
避けて通ることのできない最も重要な通過儀礼の1つです.
この作業は, 多くの時間を必要としますが, あなたの FreeBSD
システムに多くの利益をもたらします. GENERICカーネルは,
めったに使われることのないハードウェアをサポートするとともに,
考えられるすべての SCSIカードやネットワークカードをサポート
しなければなりませんが, システムに合わせたカーネルは
あなたの PC のハードウェアのみをサポートします.
これは, 次にあげるような利益をもたらします.
まず, カーネル再構築に必要なディレクトリをざっと見てみましょう.
ここではディレクトリはすべて /usr/src/sys以下の相対位
置で示します. また, /sysからもアクセス可能です.
ここには, カーネルの各部分を構成するサブディレクトリが
いくつもあります. しかし, 私たちの目的では
最も重要なのは i386/confです. ここで, あなたの
システムに合わせてカーネル コンフィグレーションを編集します.
それから compileディレクトリ, ここはカーネルが作られる
場所です. サポートされているデバイスやファイルシステムのディレ
クトリツリーがオプション毎にサブディレクトリに分かれている論理
的構成に注意してください. また, i386のディレクトリは
PCのハードウェアのみを扱い, i386以外のディレクトリは
FreeBSDが他のプラットフォームに移植される際には共有されるコー
ドです.
コンフィグレーション ファイルの一般的なフォーマット
はとてもシンプルです. 各行は1つのキーワードと1つ以上の
引数を含んでいます. 見やすくするために, ほとんどのキーワードは
引数を1つしか書いてありません.
#に続くものはすべてコメントとして扱われ,
無視されます. ここでは, それぞれのキーワードについて
だいたい GENERICに出てくる順番で説明します. しかし,
お互いに関係のあるキーワードは, 実際には GENERICファイル上に
バラバラに現れていても, (ネットワーキングのように)1つにまとめ
てあります. おびただしい数のオプションの一覧が GENERICと同じディ
レクトリの LINTコンフィグレーションファイルにあります.
もし, ある行の目的や必要性に疑問を持ったら最初に LINTをチェック
してください.
カーネルは現在, オプションを扱う方法をよりよい機構に移行しよ
うとしています. 従来は, 各々のオプションは単純にカーネルの
Makefile中の CFLAGS行の -Dスイッチに変換されて
いました. 自然とオプションは際限なく増えて行きます. だれも実際に
はどのオプションがどのファイルで参照されているかは知りません.
新しい方法では、すべてのオプション依存の #ifdefは当該オプショ
ンを opt_foo.h (これらのファイルはconfigによって compileディレ
クトリに作られます) から読み込むように変わりました.
config の有効なオプションのリストは2つのファイルにお
かれます. アーキテクチャに依存しないオプションは
/sys/conf/optionsに置かれ, アーキテクチャ依存のオプショ
ンは/sys/arch/conf/optionsに置かれま
す. archの部分は例えば i386となります.
ここにあるキーワードはカーネルの構築に必要不可欠です.
最初のキーワードは machineです.
FreeBSDは Intelの 386とその互換チップ上でしか
動かないので, i386を指定します.
次のキーワードは cpuです.
FreeBSDでサポートしている CPUの中から記述します.
cpu_typeとして指定可能な値は
次の通りです.
次は, カーネルの識別名となるidentです.
GENERICからあなたがカーネルに与えたい名前に
変えてください. ここでは, MYKERNELとします.
identに与えた名前はカーネルの
ブート時に表示されるので, 普段のカーネルとは別に
カーネルに違う名前を与えたいとき(例えば,
実験用のカーネルを作りたい時など), 便利でしょう.
数字を含む名前にしたい場合は machineや
cpuの時と同じようにクォーテーションマークで
囲む必要があります.
Cコンパイラに -Dスイッチで渡されるので,
DEBUGのような名前にしたり, vax
といった他のCPUの名前など紛らわしい名前にしないで
ください.
これは, 重要なシステムテーブルのサイズを決めます. ここ
で与えられる数字はマシンに同時にログインすると考えられ
るおよそのユーザ数です. しかし, 通常の使用環境であれば,
特に X Window System を立ち上げたり, ソフトウェアを
コンパイルするような使用であれば maxusersには少
なくとも4以上を指定したほうがいいでしょう. その理由は,
maxusersで決るテーブルで最も重要なものはプロセス
の最大数であるからです. プロセス最大数は これはカーネルの位置と名前を特定します.
伝統的にカーネルは vmunixと呼ばれますが,
FreeBSDでは kernelとふさわしい名前になりました.
kernel_nameにはいつも kernelを
使ってください. 名前を変えると多くのシステム
ユーティリティが使えなくなります. 2番目の部分は
ルートファイルシステムとカーネルのあるディスクと
パーティションを指定してください.
SCSIドライブでなければ, wd0を,
SCSIドライブならば sd0です.
以下はカーネルのサポートするさまざまなファイルシステムおよ
びその他のオプションです.
これらのオプションはさまざまなファイルシステムへのサポート
を追加します. 少なくともブートするためのデバイスのサポートを含
める必要があります. 標準的にはハードディスクからブートするので
あれば FFS , ディスクレスワークステーションとしてイー
サネットからブートするのであれば NFSです.
一般的に利用される他のファイルシステムをカーネルに含め, あまり
利用しないファイルシステム (多分 MS-DOSファイルシステム?) のサポー
トをコメントアウトすることができます. これは Loadable Kernel
Module ディレクトリ /lkm から, 最初にそのタイプのファイ
ルシステムがマウントされる時に動的にドライバがロードされるからです.
基本的なハードドライブ ファイルシステムです. ハードディ
スクからブートする場合は残しておいてください.
ネットワーク ファイルシステムです. Ethernet経由で Unixファ
イルサーバからパーティションをマウントする予定がない場
合はコメントアウトすることができます.
MS-DOS ファイルシステムです. ブート時に DOSフォーマット
のハード ドライブをマウントする予定のない場合はコメン
トアウトしても安全です. 先に示したように, DOSパーティ
ションをマウントする時に自動的にロードされます. また
(ports コレクションにある) mtools という素晴
らしいソフトウェアにより mount , unmountなしで DOSフロッ
ピーにアクセスすることができます (これは MSDOSFSも必要
ありません).
CD-ROMのための ISO 9660 ファイルシステムです. CD-ROMを
持っていないか, 時々 データ CDをマウントするだけならコ
メントアウトしましょう (データ CDを最初にマウントする
時に動的にロードされます). オーディオ CDはこのファイル
システムは必要ありません.
プロセス ファイルシステムです. これは疑似的なファイルシ
ステムで /procにマウントされ, ps(1)などのプロ
グラムがプロセスに関してより詳しい情報を与えてくれるよ
うになります.
メモリマップド ファイルシステムです. これは基本的に一時
ファイルを記憶するための高速な RAMディスクで, 大きな
swap領域がある場合に有効です. MFSパーティションをマウ
ントするに適した場所は多くのプログラムが一時ファイルを
置く /tmpです. MFS RAMディスクを /tmp
にマウントするには以下の内容を /etc/fstabに追
加してリブートするか mount /tmpとタイプします.
ディスククォータを有効にします. アクセスが公開されてい
るシステムで (一人のユーザが) /homeパーティショ
ン (全体) をあふれさせることができないようにそれぞれのユーザ
にディスククォータを発行することができます.
このコードはいくらかバグがありますので必要のない場合は
使わないでください. ディスククォータについての詳しい内
容はマニュアルページの quota(1)を見てください.
この節では FreeBSDでサポートされているディスク, テー
プ, CD-ROMコントローラについて示します.
コントローラと カードについ
ては別の節になっています.
FreeBSDのサポートするすべての PCで必要です. IBM PS/2 (マイ
クロチャネルアーキテクチャ) では現時点では FreeBSDは動
きません.
PCIバスを持つマザーボードの場合は含めます. これにより
PCIカードの自動認識と PCIから ISAバスへのゲートウェイが
可能になります.
フロッピードライブコントローラです.
fd0 は ``A:'' ドライブで
fd1 は ``B:'' ドライブです. ft0 は
フロッピーコントローラに接続する QIC-80 テープドライブで
す. 対応するデバイスがない場合はそれぞれの行をコメント
アウトしてください.
プライマリIDEコントローラです. wd0 と
wd1はそれぞれマスタ, スレーブドライブで
す. wdc1 は セカンダリの IDEコントローラで3台
目, 4台目のハードディスクまたは IDE CD-ROMのある場合に
使います. 利用しない行はコメントアウトしてください (例え
ば, SCSIハードディスクのみを使う場合は6行全部をコメント
アウトしてもよいかもしれません).
このデバイスは IDE CD-ROMのサポートをします.
wdc0を有効にしておく必要があり, もし 2つ以上の IDE
コントローラがあり, そのうちの 2つ目のカードに CD-ROMを接
続する場合 options ATAPIを書いておく必要もあります.
npx0はFreeBSDハードウェアコプロセッサとソフト
ウェアエミュレータ両方の浮動小数点演算ユニットへのインタ
フェースです. これは device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr
Wangtek と Archive の
QIC-02/QIC-36 テープドライブのサポートです.
以下のようなドライブを proprietary(独自の)
CD-ROMドライブと呼ぶことにします. これらのドライブは専
用のコントローラを持つか, サウンドブラスタ16などのサウ
ンドカードに接続します. これらは IDEでも SCSIでもあ
りません. 多くの標準速や2倍速の古い CD-ROMはこれら
のインタフェースを持っていますが, より新しい四倍速の
ものは か でしょう.
ミツミ製 CD-ROM (LU002,
LU005, FX001D)です.
ソニー製 CD-ROM (CDU31,CDU33A)です.
松下/パナソニック製 CD-ROM (サウンドブラスタ用
クリエィティブ ラボ製として販売されていました) です.
この節では FreeBSDのサポートするいろいろな SCSIコント
ローラとデバイスのサポートについて書きます.
以下の十数行は異る種類の SCSIコントローラのサポートです.
使用しているもの以外の部分はコメントアウトしてください.
ほとんどの Buslogic社のコントローラです.
UltraStor 14F と 34F です.
Adaptec 274x/284x/294x です.
Adaptec 174x です.
Adaptec 154x です.
Adaptec 152x や サウンドカードなどに使われている Adaptec
AIC-6360 チップです. (slow!)
NCR 5380を使っている ProAudioSpectrum や Trantor T130 で
す.
Seagate ST01/02 8 ビットコントローラです. (slow!)
Western Digital WD7000コントローラです.
NCR 53C810, 53C815, 53C825, 53C860, 53C875 チップを使った
PCI SCSI コントローラです.
このオプションによりカーネルはそれぞれの SCSIデバイスを
プローブする前に 15秒間待ちます. IDEドライブのみを使用
している場合は無視して構いません. ブートを速くするため
にこの数値を 5秒ぐらいまで小さくしたいでしょう. そうし
た場合, FreeBSDが SCSIデバイスを認識しにくくなるかもし
れません. その時は、もちろんこのオプションの値は元に戻
さないといけません.
SCSIコントローラがある場合, この行で SCSI全般のサポー
トを与えます. SCSIのない場合, この行と以下の3つの行をコメ
ントにすることができます.
SCSIハードディスクのサポートです.
SCSIテープドライブのサポートです.
SCSI CD-ROM のサポートです.
上のエントリについている 2つのタイプのコンソールのから1つを選ぶ必要があります. また
X Window System を利用する場合, XSERVERオプションを有効にし
ます. またバスマウスとPS/2マウスのオプションもあります.
sc0 はデフォルトのコンソールドライバで SCOコン
ソールに似ています. このデバイス, あるいは VT220コンパ
チブルドライバの vt0いずれを使う場合もほとんど
のフルスクリーンプログラムは termcapなどのターミ
ナルデータベースライブラリを通してアクセスしますので,
あまり違いはないでしょう.
このコンソールを使う場合でフルスクリーンプログラムでト
ラブルが起きる場合にはログインした時に TERM変数の値を
``scoansi''にしてください.
これはVT-220コンパチブルコンソールドライバで VT100/102の
上位互換です. これは sc0の使えない種類のラッ
プトップ機でもうまく動きます. ログイン時に TERM変数の値
を``vt100'' か ``vt220''にしてください. また, このドラ
イバはネットワークを介して多くの異るマシンから接続する
場合も便利です. sc0デバイスのための
termcapや terminfoエントリは必ずしも
利用できるわけではありませんが -- ``vt100''はいずれの
プラットフォームでも利用可能でしょう.
vt0 コンソールドライバを使う場合に必要で
す.
これは XFree86 X サーバを動かすのに必要な
コードを含めます.
Logitech や ATIのバスマウス入力カードを利用する場合のデ
バイスです.
このデバイスは PS/2マウスポートにマウスを接続する場合に
使います.
ほとんどすべてのシステムにこれらはあります. プリンタを接続す
る場合は の章が非常
に役に立つでしょう. モデムを使う場合は に非常に詳しいシリアルポートの設定とデ
バイスの使い方があります.
sio0からsio3は MS-DOSにおける COM1から
COM4に相当する4本のシリアルポートです.
COM4に内蔵モデムがあり COM2を使う場合, FreeBSDからアク
セスするためにはモデムのIRQを2へ変更する必要があるとい
うことを注意しておきます (技術的な理由より IRQ 2 = IRQ
9となります).
マルチポートシリアルカードを使う場合にマニュアルページ
のsio(4)にはこのオプションで使う値などのよ
り多くの情報があります. ビデオカードの中には (特に S3
チップベースのものには) IOアドレスの 0x*2e8から
を利用するものがあり, また多くの安価なシリアルカードは
IOアドレス空間を16-bitフルデコードしていませんので, こ
れらのカードは衝突します. この場合 COM4ポートは実質上
利用できません.
それぞれのシリアルポートは (割込みの共有をサポートした
マルチポートカードを利用していないのであれば) 別々の IRQ
を割り当てる必要がありますので COM3と COM4のデフォルトの
IRQは利用できません.
lpt0 から lpt2は利用可能な3本のプリン
タポートです. 多くの場合は1本のみですので他の2本はない
のであればコメントアウトして構いません.
FreeBSDでは他の一般的な Unixと同様にネットワークが
非常に 重視されています. イーサネットカードが
なくても必須のオプションとダイヤルアップ ネットワークのサポー
トに注意してください.
以下にさまざまなイーサネットカードを有効にするオプショ
ンを示します. ネットワークカードがなければこれらすべてを
コメントアウトすることができます. そうでなければ利用す
る特定のイーサネットカードをサポートするオプションを残
しておきます.
DECの DC21040, DC21041, DC21140チップを使った PCIイー
サネットアダプタです.
Intel EtherExpress Pro/100B 高速イーサネットカード
です.
3Com の 3C590, 3C595です (いくらか bugがあります).
Cronyx/Sigma の マルチポート同期/非同期カードです.
(with Cisco or PPP framing)
Western Digital と SMC の 80xx, 8216 Elite Ultra ;
ノベル NE1000, NE2000; 3Com の 3C503; HPの PC Lan Plus
(HP27247B とHP27252A) です.
3Com の 3C501 です. (slow!)
3Com の 3C505です.
3Com の 3C509 です(バグがあります).
富士通 MB86960A/MB86965A ベースのイーサネットカード
です.
DEC DEFEA EISA FDDI アダプタです.
AT&T StarLAN 10 と EN100; 3Com の 3C507;
NI5210 です.
Intel の EtherExpress 16です.
DEC の EtherWorks 2 and EtherWorks
3 (DEPCA, DE100, DE101, DE200, DE201, DE202,
DE203, DE204, DE205, DE422)です.
Lance/PCnet カード (Isolan, Novell NE2100,
NE32-VL)です.
IBM/ナショナルセミコンダクタの PCMCIA イーサネット
コントローラです.
3Com の PCMCIA Etherlink III です.
loop は TCP/IPの一般的なループバックデバイスで
す. telnet や FTPを localhost (127.0.0.1)
に対してかけるとこの疑似デバイスを通して帰ってきます.
不可欠です.
etherはイーサネットカードがある場合のみ必要で
一般的なイーサネットプロトコルを含めます.
sl は SLIP (Serial Line Internet Protocol) をサポー
トします. これはほとんど完全に, より簡単に設定ができ, モ
デム to モデム接続に適した, よりパワフルな PPPに取って代
わられています. slの後の number は同
時にいくつの SLIPセッションをサポートするかを示します.
SLIPの設定のより詳しい情報はこのハンドブックの
「PPPとSLIP」の章の
と について書かれた節にあります。
pppはダイヤルアップ インターネット接続のための
カーネルモード PPP (Point-to-Point Protocol) をサポート
します. ユーザアプリケーションとして tun を
利用する PPPの実装もあり, こちらはより柔軟性がありデマ
ンドダイアリング(プログラムが接続要求を出した時に自動
的にダイヤルをおこなう)などの機能もあります. それでもこ
の PPPドライバを利用したい場合は の節を読んでください.
slデバイスと同じように numberは同時
に PPP接続できる数を示します.
tun はユーザモード PPPソフトウェアが利用しま
す. このプログラムは設定が簡単で非常に高速です.
また自動ダイヤル オン デマンドなどの機能を持ちます.
tunの後のnumber は同時におこなうことのできる
PPPセッションの数を示します. の節により多くの情報があ
ります.
バークレイ パケットフィルタです. この疑似デバイスはネッ
トワークインタフェースを無差別 (promiscuous) モードにし
てネットワーク (例えば単一のイーサネット) にブロードキャス
トされるすべてのパケットを取り入れることを可能にします. こ
れらのパケットはディスクに取り入れられたり
tcpdump(1) によって検査されます. この機能の実現
はネットワーク全体のセキュリティとの微妙な妥協点であるこ
とに注意してください.
bpffilter の後の numberは同時に検査することの
できるインタフェースの数を示します.
危険の可能性について十分解っている場合を除いてこのオプ
ションは奨めません. すべてのネットワークカードでこの機能
をサポートをしてはいません.
ここは GENERICカーネルに含まれていない最初のセクションです.
サウンドカードのサポートをするためには LINTコンフィグレーショ
ンファイル(これにはすべてのデバイスが含まれています)か
ら以下のような適切な行をコピーする必要があります.
サウンドドライバ一般のコードです.
pcaを除く以下のすべてのサウンドカードで必要で
す.
ProAudioSpectrum のオーディオ と MIDI です.
SoundBlaster です.
SoundBlaster 16 の 16-bit オーディオです.
SoundBlaster 16 の MIDI インタフェースです.
SoundBlaster 16を使う場合必ずこの行を含めてコンパイル
してください.
Gravis Ultrasound です.
Microsoft Sound System です.
AdLib FMシンセサイザオーディオです.
AdLib, SoundBlaster, ProAudioSpectrum を使い
playmidi (ports にあります) などのプログラムで
MIDIの演奏をしたい場合にこの行を含めます.
Roland MPU-401 カードです.
MIDIインタフェースの 6850 UART です.
PC のスピーカーを使ったオーディオです. これは非常に品質
が悪く, CPUの性能, 負荷に強く依存します, と言っておき
ます (サウンドカードは必要ありませんが).
/usr/src/sys
以下のディレクトリがなければ, カーネルのソースが
インストールされていません. パッケージのインストール手順にしたがっ
て, システムにインストールしてください.
つぎに, i386/confに移動して, GENERIC
コンフィグレーションファイルをカーネルに与えたい名前に
コピーしてください. たとえば:
では, MYKERNELをあなたの好きなエディタで編集してください.
もし, システムをインストールしたばかりならば, 利用できる
エディタは viだけかもしれません. ここでは使い方
の説明はしませんが, にあるような多くの本で詳しく説明
されていますので, そちらを参照してください.
まずファイルの最初の方のコメント行を編集し, あなたのコンフィグ
レーションに合せて変更した点などを記述して GENERICと区別がつく
ようにしておきましょう.
もし SunOSや他の BSDオペレーティングシステムでカーネルの
再構築をしたことがあれば, このファイルはとても親しみ
やすいでしょう. しかし, DOSのようなその他の
オペレーティングシステムしか知らない人から見れば,
GENERICコンフィグレーションファイルはとても
なじみにくいものかもしれません. そのような場合は,
の節をゆっくりと注意深く読んでください.
config(8)を取ってくる必要があるかもしれません. これは
/usr/src/usr. sbinにあります. したがってこれらのソースをダ
ウンロードする必要があります. 次のコマンドを実行する前に
(configを)作りインストールをしておいてください.
編集し終ったら, 次のコマンドによってコンパイル, インストール
を行ってください.
/devディレクトリで
デバイスノードを追加しなければならないかもしれません.
詳しくは, を読んでください.
注: 数字を含むキーワードはすべて
クォーテーションマークで囲む必要があります.
そうしないと, configは混乱し,
386を実際の数値として扱ってしまいます.
maxuserはあなたのマシン
にログインできるユーザの数を制限するものでは
ありません. 単に, あなたのシステムに
ログインするユーザ数の最大値と各々のユーザが
いくつのプロセスを走らせるかを考慮することに
よってさまざまなテーブルの値を適切な値に設定
するだけです. これに対し, の remote loginsというキーワードは
同時にリモートログインできるユーザ数を制限
します.
/dev/wd1s2bをあなたが使用して
いるswap パーティションに置き換えてください. これは以
下のように /etc/fstabに書かれているでしょう.
/tmpデ
バイスにアクセスすることはできません). そのためいまの
ところは使わない方が無難です. --> また, MFSファ
イルシステムは動的にロードすることはできません
. したがって使いたい場合はコンパイル時に
カーネルに含める必要があります.
ft(8)というフィルタプログラムが必要です. 詳し
くはマニュアルページを見てください.
ポート(おそらくはCOM1)を有効にしてくだ
さい.
irq 7をirq
5に書き換え, キーワード conflictsを削除し
てください. さらに options ``SBC_IRQ=5''の行を
加える必要があります.
drq 5を適切な値に書き直
して, (DMA 6の場合) options "SB16_DMA=6"を付け
加えてください.
/usr/src/sys/i386/isa/sound/sound.docにあります.
また, これらのデバイスを追加する場合は, サウンドを作る必要があり
ます.