<!-- The FreeBSD Documentation Project The FreeBSD Japanese Documentation Project Original revision: 1.100 $FreeBSD$ --> <chapter id="kernelconfig"> <chapterinfo> <authorgroup> <author> <firstname>Jim</firstname> <surname>Mock</surname> <contrib>改訂および再構成</contrib> <!-- Mar 2000 --> </author> </authorgroup> <authorgroup> <author> <firstname>Jake</firstname> <surname>Hamby</surname> <contrib>原作</contrib> <!-- 6 Oct 1995 --> </author> </authorgroup> </chapterinfo> <title>FreeBSD カーネルのコンフィグレーション</title> <sect1 id="kernelconfig-synopsis"> <title>この章では</title> <!-- <para><emphasis>訳: &a.jp.tomo;、&a.jp.yoshiaki; 1996 年 11 月 2 日</emphasis></para> --> <indexterm> <primary>カーネル</primary> <secondary>カスタムカーネルの構築</secondary> </indexterm> <para>カーネルは FreeBSD オペレーティングシステムの中核をなすもの です。カーネルは、メモリ管理、セキュリティ制御の強制、ネットワー ク、ディスクアクセスなどを担っています。FreeBSD はどんどん動的に 構成することができるようになっていますが、まだ、時にはカーネルコ ンフィグレーションをやり直して、再構築する必要があります。</para> <para>この章では、以下のことを扱っています。</para> <itemizedlist> <listitem> <para>なぜカスタムカーネルの構築が必要になることがあるのか。</para> </listitem> <listitem> <para>コンフィグレーションファイルの書き方や、既存のコンフィグ レーションファイルの置き換え。</para> </listitem> <listitem> <para>カーネルコンフィグレーションファイルから新しいカーネルを構 築する方法。</para> </listitem> <listitem> <para>新しいカーネルのインストール方法。</para> </listitem> <listitem> <para><filename>/dev</filename> 下に必要となる項目を作成する方法。</para> </listitem> <listitem> <para>うまく行かないときの問題解決法。</para> </listitem> </itemizedlist> </sect1> <sect1 id="kernelconfig-custom-kernel"> <title>なぜカスタムカーネルを作るか?</title> <para>伝統的に、FreeBSD のカーネルは <quote>モノリシック</quote> (monolithic) カーネルと呼ばれるものでした。 これは、カーネルが単一の巨大なプログラムで、 扱えるデバイスは固定されていて、 カーネルの振る舞いを変えたければ新しいカーネルを構築して、 コンピュータを再起動して新しいカーネルを動かさなれければならなかった ということです。</para> <para>今日では FreeBSD は、カーネルの機能のかなりが必要に応じて動 的にカーネルに組み込んだり外したりできるモジュールにおかれている モデルへと、急速に移行しています。こうしてカーネルは (ノート PC の PCMCIA カードのように) 突如使えるようになったハードウェアに対 応したり、カーネルが作成された時点では必要なかった新たな機能を取 り入れられるようになります。くだけた表現では、これは KLD と呼ば れます。</para> <para>しかしながら、いまだにいくらかは静的にカーネルを構成する必要 があります。ある場合においては、機能がカーネルとあまりに密接に結 びついているため、動的に組み込むことができません。ほかには、単に まだ誰もその機能に対する組み込み可能なカーネルモジュールを書く時 間をとっていないだけということもあります。</para> <para>システムに合わせたカーネルの構築はほとんどすべての Unix ユーザが 避けて通ることのできない最も重要な通過儀礼の1つです。 この作業は、多くの時間を必要としますが、あなたの FreeBSD システムに多くの利益をもたらします。 広範囲のハードウェアをサポートしなければならない <filename>GENERIC</filename>カーネルとは異なり、 システムに合わせたカーネルは <emphasis>あなたの</emphasis> PC のハードウェアのみをサポートします。これは、 次にあげるような利益をもたらします。</para> <itemizedlist> <listitem> <para>素早く起動します。 カーネルはあなたのシステム上にあるハードウェアしか 検出を行わないので、 あなたのシステムの起動にかかる時間は劇的に短くなります。 </para> </listitem> <listitem> <para>メモリの消費量が減少します。 システムに合わせたカーネルは、大抵 <filename>GENERIC</filename> カーネルより少ないメモリしか消費しません。 カーネルは常に実メモリ上に存在しなければならないので、 これは重要なことです。 したがって、RAM が少ないシステムでは、 カーネルの再構築は大変重要です。</para> </listitem> <listitem> <para>追加のハードウェアをサポートします。 システムに合わせたカーネルは、サウンドカードなど <filename>GENERIC</filename> カーネルに存在しないデバイスのサポートを追加することができます。</para> </listitem> </itemizedlist> </sect1> <sect1 id="kernelconfig-building"> <title>カスタムカーネルの構築とインストール</title> <indexterm> <primary>カーネル</primary> <secondary>構築 / インストール</secondary> </indexterm> <para>まず、 カーネル再構築に必要なディレクトリをざっと見てみましょう。 ここではディレクトリはすべて <filename>/usr/src/sys</filename> 以下の相対位置で示します。 また、<filename>/sys</filename> からもアクセス可能です。 ここには、カーネルの各部分を構成するサブディレクトリが いくつもあります。しかし、私たちの目的で最も重要なのは <filename><replaceable>arch</replaceable>/conf</filename> です。 ここで、あなたの システムに合わせてカーネルコンフィグレーションを編集します。 それから <filename>compile</filename>ディレクトリ、 ここはカーネルが作られる 場所です。 <replaceable>arch</replaceable> は、<filename>i386</filename>, <filename>alpha</filename>, <filename>pc98</filename>(これは 日本で普及している PC のための開発ブランチです)のいずれかを表します。 各アーキテクチャのディレクトリ内部にあるファイルはすべて そのアーキテクチャでのみ使用され、残りのコードは FreeBSD が他のプラットフォームに移植される際に共有されます。 サポートされているデバイス、ファイルシステム、オプションが、 それぞれ各々のサブディレクトリに分かれている、 という論理的な構成に注意してください。</para> <note> <para>もし、あなたのシステムに<filename>/usr/src/sys</filename> 以下のディレクトリが<emphasis>なければ</emphasis>、 カーネルのソースが インストールされていません。 もっとも簡単な方法は (<username>root</username>で) <command>/stand/sysinstall</command> を用いて以下のようにすることです。 <guimenuitem>設定 (Configure)</guimenuitem> を選んでから <guimenuitem>配布ファイル (Distribution)</guimenuitem> を選択し、<guimenuitem>src</guimenuitem> の中の <guimenuitem>sys</guimenuitem> をインストールしてください。 <application>sysinstall</application> が嫌いで、<quote>公式</quote> FreeBSD CDROM を利用できるなら、 コマンドラインからソースコードをインストールすることもできます。 </para> <screen>&prompt.root; <userinput>mount /cdrom</userinput> &prompt.root; <userinput>mkdir -p /usr/src/sys</userinput> &prompt.root; <userinput>ln -s /usr/src/sys /sys</userinput> &prompt.root; <userinput>cat /cdrom/src/ssys.[a-d]* | tar -xzvf -</userinput></screen> </note> <para>つぎに、 <filename><replaceable>arch</replaceable>/conf</filename>に移動して、 <filename>GENERIC</filename> コンフィグレーションファイルをカーネルに与えたい名前に コピーしてください。たとえば次のようにします。</para> <screen>&prompt.root; <userinput>cd /usr/src/sys/i386/conf</userinput> &prompt.root; <userinput>cp GENERIC MYKERNEL</userinput></screen> <para>慣習として、この名前はすべて大文字でつづられます。もし、 いくつかの異なるハードウェアの FreeBSDマシンを扱うなら、 この名前にホスト名を含めるとよいでしょう。ここでは、例として <filename>MYKERNEL</filename> と呼ぶことにします。</para> <tip> <para>カーネルコンフィグレーションファイルを、直に <filename>/usr/src</filename> の下に置くのはよい考えとはいえま せん。なにか問題が起きたときに、 <filename>/usr/src</filename> を消してやり直したいと思うかもし れません。その後で、あなたがカスタマイズしたカーネルコンフィグ レーションファイルを消してしまったことに気づくのに時間はかから ないでしょう。</para> <para>カーネルコンフィグレーションファイルは他の場所において、 <filename>i386</filename> ディレクトリにシンボリックリンクを張 る方がよいでしょう。</para> <para>たとえば、次のようにします。</para> <screen>&prompt.root; <userinput>cd /usr/src/sys/i386/conf</userinput> &prompt.root; <userinput>mkdir /root/kernels</userinput> &prompt.root; <userinput>cp GENERIC /root/kernels/<replaceable>MYKERNEL</replaceable></userinput> &prompt.root; <userinput>ln -s /root/kernels/<replaceable>MYKERNEL</replaceable></userinput></screen> </tip> <note> <para>この作業は <username>root</username> 権限でおこなう必要があります。そうでなければ、 <errortype>permission denied</errortype> というエラーが出ます。</para> </note> <para>では、<filename>MYKERNEL</filename> をあなたの好きなエディタで編集してください。もし、 システムをインストールしたばかりならば、利用できるエディタは <application>vi</application> だけかもしれません。ここでは使い方の説明はしませんが、 <link linkend="bibliography">参考図書</link> にあるような多くの本で詳しく説明 されていますので、 そちらを参照してください。FreeBSD にはより簡単なエディタとして <application>ee</application> があります。初心者の方であればこちらをエディタに選ぶとよいでしょう。 まずファイルの最初の方のコメント行を編集し、あなたのコンフィグ レーションに合せて変更した点などを記述して <filename>GENERIC</filename> と区別がつく ようにしておきましょう。</para> <indexterm><primary>SunOS</primary></indexterm> <para>もし SunOSや他の BSDオペレーティングシステムでカーネルの 再構築をしたことがあれば、このファイルはとても親しみ やすいでしょう。しかし、DOSのようなその他の オペレーティングシステムしか知らない人から見れば、 <filename>GENERIC</filename> コンフィグレーションファイルはとても なじみにくいものかもしれません。そのような場合は、 <link linkend="kernelconfig-config"> コンフィグレーションファイル </link> の節をゆっくりと注意深く読んでください。</para> <note> <para>FreeBSD Project の最新のソースファイルと、<link linkend="cutting-edge">あなたのソースツリーを同期させている</link> 場合、アップデートを行う際には、必ず <filename>/usr/src/UPDATING</filename> ファイルをチェックしてください。 このファイルには、FreeBSD をアップデートする際の重要な問題がすべて書かれています。 <filename>/usr/src/UPDATING</filename> は常にあなたの FreeBSD ソースファイルのバージョンと同期していますので、 ハンドブックの情報よりも正確なものとなっています。</para> </note> <para>ここで、カーネルのソースコードをコンパイルしなくてはなりませ ん。手順は二つあり、どちらを使うかは、なぜカーネルを再構築するか と、動かしている FreeBSD のバージョンによって決まります。</para> <itemizedlist> <listitem> <para>カーネルのソースコード<emphasis>だけ</emphasis>インストー ルしているなら、手順 1 にしたがってください。</para> </listitem> <listitem> <para>4.0 より前の FreeBSD を使っていて、 <maketarget>make world</maketarget> を行って FreeBSD 4.0 以上にアップグレードしないなら、 手順 1 にしたがってください。</para> </listitem> <listitem> <para>(<literal>IPFIREWALL</literal> オプションを追加するなど のように) ソースコードを更新せずに新しいカーネルを構築するな らどちらの手順を用いても構いません。</para> </listitem> <listitem> <para><maketarget>make world</maketarget> の一環としてカーネルの再構築を行っているなら、 手順 2 にしたがってください。</para> </listitem> </itemizedlist> <procedure> <title>手順 1: <quote>伝統的な</quote> 方法によるカーネル構築</title> <step> <para>カーネルソースコードを生成するため、&man.config.8; を実 行します。</para> <screen>&prompt.root; <userinput>/usr/sbin/config <replaceable>MYKERNEL</replaceable></userinput></screen> </step> <step> <para>カーネルを構築するためのディレクトリに移動します。</para> <screen>&prompt.root; <userinput>cd ../compile/<replaceable>MYKERNEL</replaceable></userinput></screen> <para>5.0 より前のバージョンの FreeBSD では、 かわりに以下を実行してください。</para> <screen>&prompt.root; <userinput>cd ../../compile/<replaceable>MYKERNEL</replaceable></userinput></screen> </step> <step> <para>カーネルをコンパイルします。</para> <screen>&prompt.root; <userinput>make depend</userinput> &prompt.root; <userinput>make</userinput></screen> </step> <step> <para>新しいカーネルをインストールします。</para> <screen>&prompt.root; <userinput>make install</userinput></screen> </step> </procedure> <procedure> <title>手順 2: <quote>新しい</quote> 方法によるカーネル構築</title> <step> <para><filename>/usr/src</filename> ディレクトリに移動します。</para> <screen>&prompt.root; <userinput>cd /usr/src</userinput></screen> </step> <step> <para>カーネルをコンパイルします。</para> <screen>&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen> </step> <step> <para>新しいカーネルをインストールします。</para> <screen>&prompt.root; <userinput>make installkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen> </step> </procedure> <note> <para>FreeBSD 4.2 とそれ以前の場合は、 <literal>KERNCONF=</literal> ではなく <literal>KERNEL=</literal> としなければなりません。 2001 年 2 月 2 日より前の 4.2-STABLE では <literal>KERNCONF=</literal> を認識しません。</para> </note> <indexterm> <primary><command>cvsup</command></primary> </indexterm> <indexterm><primary>anonymous CVS</primary></indexterm> <indexterm><primary>CTM</primary></indexterm> <indexterm> <primary>CVS</primary> <secondary>anonymous</secondary> </indexterm> <para>何らかの方法であなたのソースツリーをアップグレードして <emphasis>いない</emphasis> 場合 (<application>CVSup</application>, <application>CTM</application>, <application>anoncvs</application> などを実行していない場合)、 <command>config</command>, <maketarget>make depend</maketarget>, <command>make</command>, <maketarget>make install</maketarget> の手順を実行してください。</para> <indexterm> <primary><filename>kernel.old</filename></primary> </indexterm> <para>新しいカーネルはルートディレクトリに <filename>/kernel</filename>という 名前でコピーされ、 今までのカーネルは <filename>/kernel.old</filename> という名前へ変更されます。では、システムをシャットダウン、 リブートして新しいカーネルを使ってください。 うまく行かない場合は、この章の終りの <link linkend="kernelconfig-trouble">問題が起きた場合には</link> を参照してください。この章の新しい <link linkend="kernelconfig-noboot">カーネルが起動しない</link> 場合のリカバリの方法を注意深く読んでおいてください。</para> <note> <para>FreeBSD 5.0 では、カーネルはモジュールとともに <filename>/boot/kernel</filename> にインストールされ、 今までのカーネルは <filename>/boot/kernel.old</filename> にバックアップされます。 ブート &man.loader.8; や設定などのブートプロセスに関係する他のファイルは、 <filename>/boot</filename> に置かれます。 サードパーティ製やカスタムモジュールを <filename>/boot/modules</filename> に置くこともできますが、 コンパイルしたカーネルとモジュールを同期しておく必要があります。 コンパイルしたカーネルとモジュールが対応しない場合には、 システムが不安定になったり、正常に動作しなくなる可能性があります。</para> </note> <note> <para>FreeBSD 4.X 以前のバージョンを使っていて、 (サウンドカードなど) 新しいデバイスを追加した場合は、 使う前に <filename>/dev</filename> ディレクトリにデバイスノードを追加しなければならないかもしれません。 詳しくは、この章で後ほど出てくる <link linkend="kernelconfig-nodes">デバイスノードの作成</link> をご覧ください。</para> </note> </sect1> <sect1 id="kernelconfig-config"> <title>コンフィグレーション ファイル</title> <indexterm> <primary>カーネル</primary> <secondary>LINT</secondary> </indexterm> <indexterm><primary>LINT</primary></indexterm> <indexterm> <primary>カーネル</primary> <secondary>コンフィグレーションファイル</secondary> </indexterm> <para>コンフィグレーション ファイルの一般的なフォーマット はとてもシンプルです。各行は1つのキーワードと1つ以上の 引数を含んでいます。見やすくするために、ほとんどのキーワードは 引数を1つしか書いてありません。 <literal>#</literal>に続くものはすべてコメントとして扱われ、 無視されます。ここでは、それぞれのキーワードについて だいたい <filename>GENERIC</filename> に出てくる順番で説明します。しかし、 お互いに関係のあるキーワードは、実際には <filename>GENERIC</filename> ファイル上に バラバラに現れていても、(ネットワーキングのように)1つにまとめ てあります。<anchor id="kernelconfig-options"> おびただしい数の オプションの一覧が <filename>GENERIC</filename>と同じディレクトリの <filename>LINT</filename> コンフィグ レーションファイルにあります。もし、ある行の目的や必要性に疑 問を持ったら最初に <filename>LINT</filename> をチェックしてください。</para> <important> <title>数字と二重引用符</title> <para> FreeBSD 3.x と、それまでの全てのバージョンの FreeBSD における &man.config.8; は、コンフィグレーションファイル中の テキストとして使われる数字を含む文字列が 全て二重引用符で括られていなければならないという制限があります。 </para> <para>この制限は (このハンドブックが対象としている) 4.X ブランチでは取り除かれました。 4.X 以前のシステムを使っている場合には、 サンプルとしてシステム上の <filename>/usr/src/sys/i386/conf/LINT</filename> と <filename>/usr/src/sys/i386/conf/GENERIC</filename> を参照してください。</para> </important> <indexterm> <primary>カーネル</primary> <secondary>コンフィグレーションファイル例</secondary> </indexterm> <para>以下は必要に応じてコメントを追加した <filename>GENERIC</filename> カーネルの コンフィグレーションファイルです。 この設定例は <filename>/usr/src/sys/i386/conf/GENERIC</filename> に極めて近いものになっているはずです。 その他に指定可能なカーネルオプションについては、 <filename>/usr/src/sys/i386/conf/LINT</filename> を参照してください。</para> <programlisting># # GENERIC -- Generic kernel configuration file for FreeBSD/i386 # # このファイルについて更に情報が必要なら、ハンドブックのカーネル # コンフィグレーションファイルのセクションを参照して下さい。 # # http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html # # doc ディストリビューションをインストールした場合、ハンドブックは # ローカルマシンの /usr/share/doc/handbook でも見ることができます。 # 最新版は FreeBSD の WWW サーバ (http://www.FreeBSD.ORG/) を参照して # 下さい。 # # ./LINT コンフィギュレーションファイルには、デバイス行に関する大量の # オプションと詳細な説明があります。もしある行の目的又は必要性について # 疑問がある場合はまず LINT をチェックして下さい。 # # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246 2000/03/09 16:32:55 jlemon Exp $</programlisting> <para>以下は <emphasis>すべての</emphasis> カーネルの構築に 必須のキーワードです:</para> <indexterm> <primary>カーネル オプション</primary> <secondary>machine</secondary> </indexterm> <programlisting>machine i386</programlisting> <para>マシンのアーキテクチャです。 これは <literal>i386</literal>, <literal>alpha</literal>, <literal>pc98</literal> のいずれかでなければなりません。</para> <indexterm> <primary>カーネル オプション</primary> <secondary>cpu</secondary> </indexterm> <programlisting>cpu I386_CPU cpu I486_CPU cpu I586_CPU cpu I686_CPU</programlisting> <para>上記はあなたのシステムの CPU タイプを指定します。 複数の行を書いても構いません。 (例: <literal>I586_CPU</literal> とすべきか <literal>I686_CPU</literal> とすべきかはっきり分からない場合。 しかしながら、カスタムカーネルを作る場合、あなたの持つ CPU だけを指定するのがベストです。 もしあなたの CPU がどのタイプか分からない場合、 <filename>/va/run/dmesg.boot</filename> ファイルを確認して起動メッセージを調べるとよいでしょう。</para> <note><para>FreeBSD 5.0 では、<literal>I386_CPU</literal> へのサポートがデフォルトで無効になっています。</para></note> <indexterm> <primary>カーネル オプション</primary> <secondary>cpu type</secondary> </indexterm> <para>Alpha アーキテクチャの場合は、 <literal>cpu</literal> に異なった値を用います。</para> <programlisting>cpu EV4 cpu EV5</programlisting> <para>もしあなたが Alpha マシンを使っている場合、 上記の内のどれかを指定して下さい。</para> <indexterm> <primary>カーネル オプション</primary> <secondary>ident</secondary> </indexterm> <programlisting>ident GENERIC</programlisting> <para>ここはカーネルの識別名を書きます。 あなたがカーネルに付けたい名前に書き換えて下さい (前記の例の <literal>MYKERNEL</literal> のように)。 <literal>ident</literal> に書いた名前はカーネルを起動する時に 表示されるので、 普段使っているカーネルと区別したいときは、 新しいカーネルに違う名前を付けると 良いでしょう(例: 実験的なカーネルを構築する場合)。</para> <indexterm> <primary>カーネル オプション</primary> <secondary>maxusers</secondary> </indexterm> <programlisting>maxusers <replaceable>n</replaceable></programlisting> <para><literal>maxusers</literal> オプションは重要なシステムテーブルの サイズを決定します。 この数字はあなたのマシンを同時に使うと思われるユーザー数と おおよそ等しくするのが良いでしょう。</para> <para>FreeBSD 4.5 からは、これを明示的に <literal>0</literal> に設定すると、システムが設定を自動調整します<footnote> <para>自動調整アルゴリズムは、<literal>maxuser</literal> を、最小値が 32、最大値が 384 の間で、システムのメモリ合計と等しく設定します。</para> </footnote>。それより前のバージョンの FreeBSD を使っているか、自分で管理したい場合、特に X ウインドウシステムを使ったり、ソフトウエアをコンパイルするなら、 <literal>maxusers</literal> は最低 4 にして下さい。 その理由は、<literal>maxusers</literal> によって計算される最も 重要なテーブルがプロセスの最大数で、それは <literal>20 + 16 * maxusers</literal> となります。 もし、<literal>maxusers</literal> を 1 にすると、 同時に 36 プロセスしか利用できなくなりますが、 システムは起動時に 18 ほどのプロセスを立ち上げ、 X ウインドウシステムは 15 ほどのプロセスを立ち上げるので、 オンラインマニュアルを読むような単純なタスクでさえ フィルタ、展開、表示に 9 個のプロセスを利用するために、プロセス数不足になります。 <literal>maxusers</literal> を 64 に設定すると、 1044 個のプロセスを同時に利用することができるので、 殆どのユーザには充分でしょう。 もしあなたが別のプログラムを立ち上げる時、 恐れられている <errortype>proc table full</errortype> エラーが 発生する場合や、<hostid role="fqdn">ftp.FreeBSD.org</hostid> のように多数のユーザにより 同時に利用されるサーバを動かしている場合には、 この数字を増やしてカーネルを再構築することができます。</para> <note> <para><literal>maxusers</literal> はあなたのマシンにログインする ユーザ数を制限するものでは <emphasis>ありません</emphasis>。 それは単に、あなたのシステムを使うであろうユーザの最大数や それぞれのユーザがどれくらいのプロセスを走らせるかに 合わせて各種テーブルの大きさを設定するだけです。 同時に<emphasis>リモートログインするユーザと X 端末ウィンドウ</emphasis>の最大数を制限するキーワードは <link linkend="kernelconfig-ptys"> <literal>pseudo-device pty 16</literal></link> です。 </para> </note> <programlisting># Floating point support - do not disable. device npx0 at nexus? port IO_NPX irq 13</programlisting> <para><literal>npx0</literal> はハードウェアコプロセッサか ソフトウエアエミュレータのどちらかである浮動小数点演算ユニットへの FreeBSD におけるインタフェースです。 これは任意選択では<emphasis>ありません</emphasis>。</para> <programlisting># Pseudo devices - the number indicates how many units to allocate. pseudo-device loop # Network loopback</programlisting> <para>TCP/IP の汎用ループバックデバイスです。 <hostid>localhost</hostid> (すなわち <hostid role="ipaddr">127.0.0.1</hostid>) に対して telnet や FTP で接続すると、この疑似デバイスを通して戻ってきます。 これは<emphasis>必須</emphasis>です。</para> <para>以下に続くすべては大体において追加設定項目です。 詳細は各項目の次に書かれている注意書きを参照して下さい。</para> <programlisting>#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols options MATH_EMULATE #Support for x87 emulation</programlisting> <para>この行では、あなたのコンピュータが浮動小数点演算コプロセッサを 持たない場合(CPU が 386 又は 486SX)、 カーネルにシミュレートさせるよう設定します。 あなたが 486DX, 又は (387 や 487 チップを別途搭載した) 386, 486SX 又は更に上位 (Pentium, Pentium II 他) を持っている場合はコメントアウトして下さい。</para> <note> <para>FreeBSD の浮動小数点エミュレーションルーチンはあまり正確では <emphasis>ありません</emphasis>。 もしあなたが浮動小数点コプロセッサを持っておらず、 かつベストな演算精度が必要であれば、GNU の浮動小数点サポートを 利用する <literal>GPL_MATH_EMULATE</literal> を使ってみて下さい。 このオプションはライセンス上の理由によりデフォルトでは 含まれていません。</para> </note> <note><para>浮動小数点演算コプロセッサを搭載していないような古い CPU は標準ではなくなり、また、そのような CPU に対応するには、多くの場合、 ネイティブの FreeBSD カーネルに対して追加のオプションを設定する必要があるため、 FreeBSD 5.0 では、 浮動小数点エミュレーションはデフォルトで無効になっています。</para></note> <programlisting>options INET #InterNETworking</programlisting> <para>ネットワークのサポート。 ネットワークに接続する予定がなくてもこのオプションは残して下さい。 殆どのプログラムは少なくともループバックネットワーク (あなたの PC の中でのネットワーク接続) を必要としますので、 基本的にこの行は必須です。</para> <programlisting>options INET6 #IPv6 communications protocols</programlisting> <para>このオプションは IPv6 通信プロトコルを利用可能にします。</para> <programlisting>options FFS #Berkeley Fast Filesystem options FFS_ROOT #FFS usable as root device [keep this!]</programlisting> <para>これは標準のハードドライブファイルシステムです。 ハードディスクから起動する場合は残して下さい。</para> <note><para>FreeBSD 5.0 では、<literal>FFS_ROOT</literal> はもう必要ありません。</para></note> <programlisting>options UFS_ACL #Support for access control lists</programlisting> <para>このオプションは、現時点で FreeBSD 5.0 のみに存在しているもので、 カーネルのアクセス制御リストのサポートを有効にします。 この機能は拡張属性および UFS2 が有効になっていることに依存し、 <xref linkend="fs-acl"> で機能の説明が行われています。 ACL はデフォルトで有効にされています。 もし、これまでにファイルシステムで有効にしていたのであれば、 カーネルの中で無効にすべきではありません。 なぜならば、無効にするとアクセス制御リストが削除され、 ファイルの保護が予想できない方法で行われるためです。</para> <programlisting>options UFS_DIRHASH #Improve performance on big directories</programlisting> <para>このオプションは、メモリを多少余分に食うものの、 大きなディレクトリに対するディスク操作を高速化するコードを有効にします。 大規模なサーバや対話的なワークステーションではこのオプションを残しておいて、 ファイアウォールのように、メモリが貴重で ディスクアクセス速度がそれほど重要でない 小規模なシステムでは削除するとよいでしょう。</para> <programlisting>options SOFTUPDATES #Enable FFS Soft Updates support</programlisting> <para>このオプションは、カーネル内の Soft Updates 機能を有効にし、 ディスクへの高速な書き込みを支援します。 4.X ブランチではデフォルトで有効にされましたが、 有効になっていない可能性もあります。 &man.mount.8; の出力を見て、有効になっているかどうか確認してください。 <literal>soft-updates</literal> オプションが見当たらなければ、 &man.tunefs.8; か、新規のファイルシステムについては &man.newfs.8; で有効にする必要があります。</para> <programlisting>options MFS #Memory Filesystem options MD_ROOT #MD is a potential root device</programlisting> <para>これはメモリ上にマップされたファイルシステムです。 これは基本的に一時ファイルの高速格納用の RAM ディスクであり、 あなたが有効に利用したい大量のスワップスペースを持っている 場合には有用でしょう。 多くのプログラムが一時データをここに保存することから、 MFS パーティションをマウントする最適な場所は <filename>/tmp</filename> ディレクトリです。 MFS RAM ディスクを <filename>/tmp</filename> にマウントするには 次の行を <filename>/etc/fstab</filename> に追加して下さい:</para> <informalexample> <programlisting>/dev/ad1s2b /tmp mfs rw 0 0</programlisting> </informalexample> <para>次に再起動するか、コマンド <command>mount /tmp</command> を実行して下さい。</para> <note><para>FreeBSD 5.0 では、メモリファイルシステムとして、MFS に代わり &man.md.4; を使用した UFS ファイルシステムが使われます。 MD を使用したファイルシステムの設定については &man.mdconfig.8; および &man.mdmfs.8; をご覧ください。 <literal>MFS</literal> オプションは今後サポートされません。</para></note> <indexterm> <primary>カーネル オプション</primary> <secondary>NFS</secondary> </indexterm> <indexterm> <primary>カーネル オプション</primary> <secondary>NFS_ROOT</secondary> </indexterm> <programlisting>options NFS #Network Filesystem options NFS_ROOT #NFS usable as root device, NFS required</programlisting> <para>ネットワークファイルシステム。 Unix ファイルサーバから TCP/IP を介してパーティションを マウントするのでない限り、これらの行をコメントアウトして下さい。</para> <indexterm> <primary>カーネル オプション</primary> <secondary>MSDOSFS</secondary> </indexterm> <programlisting>options MSDOSFS #MSDOS Filesystem</programlisting> <para>MS-DOS ファイルシステム。 起動時に DOS でフォーマットされたハードドライブを マウントするのでない限り、この行は安全にコメントアウトできます。 この機能は最初に DOS パーティションをマウントする時に自動的に ロードされます。 又、優秀な <application>mtools</application> (Ports Collection にあります) を使ってもマウント、 アンマウントすることなしに DOS フロッピーにアクセスすることができます。 (<literal>MSDOSFS</literal> は必要としません)</para> <programlisting>options CD9660 #ISO 9660 Filesystem options CD9660_ROOT #CD-ROM usable as root, CD9660 required</programlisting> <para>CD-ROM 用の ISO 9660 ファイルシステム。 もしあなたが CD-ROM ドライブを持っていないか、 時々データ CD をマウントするだけならこの行をコメントアウトしても 大丈夫です (データ CD を最初にマウントする時、自動的にロードされます)。 音楽 CD はこのファイルシステムを必要としません。</para> <programlisting>options PROCFS #Process filesystem</programlisting> <para>プロセスファイルシステム。 これは <filename>/proc</filename> にマウントされる、 ファイルシステムの <quote>ふりをする</quote> もので、 &man.ps.1; のようなプログラムに、どんなプロセスが走っているか に関するより多くの情報を提供させる事ができます。 FreeBSD 5.0 では、ほとんどのデバッグおよびモニタリングツールが <literal>PROCFS</literal> なしで起動するので、 ほとんどの環境では <literal>PROCFS</literal> を必要としません。 さらに、5.0-CURRENT のカーネルで <literal>PROCFS</literal> を使う場合には、 <literal>PSEUDOFS</literal> を含む必要があります。</para> <programlisting>options PSEUDOFS #Pseudo-filesystem framework</programlisting> <para>FreeBSD 4.X では、<literal>PSEUDOFS</literal> を利用できません。 FreeBSD 4.X とは異なり、FreeBSD 5.0 を新しくインストールした場合には、 プロセスファイルシステムはデフォルトではマウントされません。</para> <programlisting>options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]</programlisting> <para>4.3BSD との互換機能です。 有効なままにして下さい。 この行をコメントアウトするとおかしな動きをするプログラムがあります。 </para> <programlisting>options COMPAT_FREEBSD4 #Compatible with FreeBSD4</programlisting> <para>このオプションは、FreeBSD 5.0 i386 および alpha システムにおいて、 古いバージョンの FreeBSD でコンパイルされた古いシステムコールインターフェースを用いるアプリケーションを利用する場合に必要とされます。 古いアプリケーションを実行するすべての i386 および alpha システムで、このオプションの利用を推奨します。 5.0 からサポートが開始された ia64 や sparc64 といったプラットフォームでは、 このオプションは必要ありません。</para> <programlisting>options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI</programlisting> <para>この行は、カーネルがそれぞれの SCSI 機器を検出する前に 15 秒間待つようにします。 あなたが IDE ドライブしか持たないなら無視して結構です。 そうでないなら、起動時間を短くするため、おそらく待つ時間を短く、 5 秒くらいにしたいでしょう。 勿論、そうした場合に FreeBSD が SCSI 機器を認識しなくなった場合は 時間を元に戻す必要があります。</para> <programlisting>options UCONSOLE #Allow users to grab the console</programlisting> <para>ユーザにコンソールを所有することを許可します。 X のユーザには役に立ちます。 たとえば <command>xterm -C</command> と入力すれば、コンソール <application>xterm</application> を実行できます。ここにはあなたが受け取る &man.write.1;, &man.talk.1; などのメッセージや、 カーネルからのコンソールメッセージが表示されます。</para> <note><para>FreeBSD 5.0 では、<literal>UCONSOLE</literal> はもう必要ありません。</para></note> <programlisting>options USERCONFIG #boot -c editor</programlisting> <para>このオプションは起動メニューからコンフィグレーションエディタ を起動することができるようにします。</para> <programlisting>options VISUAL_USERCONFIG #visual boot -c editor</programlisting> <para>このオプションは起動メニューからビジュアルコンフィグレーション エディタを起動できるようにします。</para> <note><para>FreeBSD バージョン 5.0 以降では、新しく &man.device.hints.5; を利用する方法が採用され、userconfig は使われなくなりました。 &man.device.hints.5; に関する詳しい情報は <xref linkend="device-hints"> をご覧ください。</para></note> <programlisting>options KTRACE #ktrace(1) support</programlisting> <para>この行はデバッギングに役立つカーネルプロセスのトレースを 可能にします。</para> <programlisting>options SYSVSHM #SYSV-style shared memory</programlisting> <para>このオプションは System V 共有メモリを提供します。 この機能の最も一般的な使用方法は X における XSHM 拡張です。 多くのグラフィックス重視のプログラムではこの機能を自動的に 描画のスピードアップに利用します。 X を使っているなら、これを含めておいた方がいいでしょう。</para> <programlisting>options SYSVSEM #SYSV-style semaphores</programlisting> <para>System V セマフォのサポート。 あまり使われませんが、カーネルサイズは数百バイト大きくなるだけです。 </para> <programlisting>options SYSVMSG #SYSV-style message queues</programlisting> <para>System V のメッセージのサポート。 これもカーネルサイズを数百バイト大きくするだけです。</para> <note> <para>&man.ipcs.1; コマンドを実行するとこれらの System V 機能を使っているプロセスのリストを表示します。</para> </note> <programlisting>options P1003_1B #Posix P1003_1B real-time extensions options _KPOSIX_PRIORITY_SCHEDULING</programlisting> <para>リアルタイム拡張が 1993 POSIX に追加されました。 Ports Collection の内のいくつかのアプリケーション (たとえば <application>Star Office</application>) はこれを使っています。</para> <note><para>FreeBSD 5.0 では、 <literal>_KPOSIX_PRIORITY_SCHEDULING</literal> オプションがすべての機能を提供しています。 そのため <literal>P1003_1B</literal> はもう必要ありません。</para></note> <indexterm> <primary>カーネル オプション</primary> <secondary>ICMP_BANDLIM</secondary> </indexterm> <indexterm> <primary>サービス妨害 (DoS)</primary> </indexterm> <programlisting>options ICMP_BANDLIM #Rate limit bad replies</programlisting> <para>このオプションは ICMP エラー応答のバンド幅制限を可能にします。 サービス不能パケットによる攻撃からマシンを保護するために必要です。 </para> <note><para>FreeBSD 5.0 では、この機能はデフォルトで有効です。 <literal>ICMP_BANDLIM</literal> オプションは必要ありません。</para></note> <indexterm> <primary>カーネル オプション</primary> <secondary>SMP</secondary> </indexterm> <programlisting># To make an SMP kernel, the next two are needed #options SMP # Symmetric MultiProcessor Kernel #options APIC_IO # Symmetric (APIC) I/O</programlisting> <para>上の行は両方とも SMP サポートのために必要です。</para> <programlisting>device isa</programlisting> <para>FreeBSD がサポートするすべての PC はこれらの内のひとつを 持っています。 あなたが IBM PS/2 (マイクロチャネルアーキテクチャ) マシンを持っている場合、FreeBSD は、現時点では限定的な対応を提供しています。 MCA の対応状況に関する詳細は、 <filename>/usr/src/sys/i386/conf/LINT</filename> をご覧ください。</para> <programlisting>device eisa</programlisting> <para>あなたが EISA マザーボードを持っている場合、 この行を含めて下さい。これは EISA バスに接続されているすべての デバイスの自動検出と設定を可能にします。</para> <programlisting>device pci</programlisting> <para>あなたが PCI マザーボードを持っている場合、この行を含めて下さい。 これは PCI カードの自動検出と PCI から ISA バスへのゲートウエイを 可能にします。</para> <programlisting># Floppy drives device fdc0 at isa? port IO_FD1 irq 6 drq 2 device fd0 at fdc0 drive 0 device fd1 at fdc0 drive 1</programlisting> <para>これはフロッピーディスクコントローラです。 <literal>fd0</literal> は <devicename>A:</devicename> フロッピードライブ、<literal>fd1</literal> は <devicename>B:</devicename> ドライブです。</para> <programlisting>device ata</programlisting> <para>このドライバはすべての ATA と ATAPI デバイスをサポートします。 最近のマシンでは <literal>device ata</literal> 行を 1 行書くだけで すべての PCI ATA/ATAPI デバイスを検出することができます。</para> <programlisting>device atadisk # ATA disk drives</programlisting> <para>ATA ディスクドライブには <literal>device ata</literal> と共にこの行が必要です。</para> <programlisting><anchor id="kernelconfig-atapi">device atapicd # ATAPI CDROM drives</programlisting> <para>ATAPI CDROM ドライブには <literal>device ata</literal> と共にこの行が必要です。</para> <programlisting>device atapifd # ATAPI floppy drives</programlisting> <para>ATAPI フロッピードライブには <literal>device ata</literal> と共にこの行が必要です。</para> <programlisting>device atapist # ATAPI tape drives</programlisting> <para>ATAPI テープドライブには <literal>device ata</literal> と共にこの行が必要です。</para> <programlisting>options ATA_STATIC_ID #Static device numbering</programlisting> <para>この行はコントローラ番号を (古いドライバのように) 静的に 割り当てます。そうでない場合、デバイス番号は動的に割り当てられます。 </para> <programlisting># ATA and ATAPI devices device ata0 at isa? port IO_WD1 irq 14 device ata1 at isa? port IO_WD2 irq 15</programlisting> <para>上の行は古い、PCI ではないシステムの場合の形式です。</para> <programlisting># SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices device amd # AMD 53C974 (Teckram DC-390(T)) device dpt # DPT Smartcache - See LINT for options! device isp # Qlogic family device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (newer chipsets) device adv0 at isa? device adw device bt0 at isa? device aha0 at isa? device aic0 at isa?</programlisting> <para>SCSI コントローラです。 あなたのシステムにないデバイスはコメントアウトして下さい。 もし IDE しかないシステムならこれらすべてを削除できます。</para> <programlisting># SCSI peripherals device scbus # SCSI bus (required) device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access)</programlisting> <para>SCSI 周辺機器です。 あなたが持っていないデバイスはコメントアウトして下さい。 もし IDE しか持っていないならこれらを完全に削除できます。</para> <programlisting># RAID controllers device ida # Compaq Smart RAID device amr # AMI MegaRAID device mlx # Mylex DAC960 family</programlisting> <para>サポートされる RAID コントローラです。 これらのどれも持っていない場合、すべてをコメントアウト又は 削除することができます。</para> <programlisting># atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc0 at isa? port IO_KBD</programlisting> <para>キーボードコントローラ (<literal>atkbdc</literal>) は AT キーボード及び PS/2 スタイルポインティングデバイスの I/O サービスを提供します。 キーボードドライバ (<literal>atkbd</literal>) と PS/2 ポインティングデバイスドライバ (<literal>psm</literal>) はこのコントローラを必要とします。</para> <programlisting>device atkbd0 at atkbdc? irq 1</programlisting> <para><literal>atkbd</literal> ドライバ。 <literal>atkbdc</literal> コントローラと協調して動作し、 AT キーボードコントローラに接続された AT 84 キーボードや AT 拡張キーボードへのアクセスを提供します。</para> <programlisting>device psm0 at atkbdc? irq 12</programlisting> <para>あなたのマウスが PS/2 マウスポートに接続するタイプなら このデバイスを使って下さい。</para> <programlisting>device vga0 at isa?</programlisting> <para>ビデオカードドライバです。</para> <programlisting># splash screen/screen saver pseudo-device splash</programlisting> <para>起動時に画面がはじけます。 スクリーンセーバもこのデバイスを必要とします。</para> <programlisting># syscons is the default console driver, resembling an SCO console device sc0 at isa?</programlisting> <para><literal>sc0</literal> はSCOに類似したデフォルトの コンソールドライバです。 殆どのフルスクリーンのプログラムは <filename>termcap</filename> のようなターミナルデータベールライブラリにアクセスするので、 <literal>sc0</literal> を使うか <literal>VT220</literal> 互換のコンソールドライバである <literal>vt0</literal> を使うかは重要ではありません。 ログイン時、このコンソールでフルスクリーンプログラムが動かないときは <envar>TERM</envar> 変数を <literal>scoansi</literal> に設定して下さい。 </para> <programlisting># Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver #device vt0 at isa? #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor # If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines #options PCVT_SCANSET=2 # IBM keyboards are non-std</programlisting> <para>これは VT220 互換のコンソールドライバで、 VT100/102 と後方互換性があります。 <literal>sc0</literal> とハード的に互換性がないラップトップでも 問題なく動きます。 ここでもログイン時に <envar>TERM</envar> 変数を <literal>vt100</literal> 又は <literal>vt220</literal> と設定して下さい。 このドライバは、<literal>sc0</literal> デバイス用の <filename>termcap</filename> や <filename>terminfo</filename> のエントリが無い、ネットワーク上の多くの異なったマシンに 接続する際にも有用です — <literal>vt100</literal> は仮想的にすべてのプラットフォームで有効であるべきです。</para> <programlisting># Power management support (see LINT for more options) device apm0 at nexus? disable flags 0x20 # Advanced Power Management</programlisting> <para>先進的な電源管理機能 (APM) のサポート。 ラップトップでは役に立つでしょう。</para> <programlisting># PCCARD (PCMCIA) support device card device pcic0 at isa? irq 10 port 0x3e0 iomem 0xd0000 device pcic1 at isa? irq 11 port 0x3e2 iomem 0xd4000 disable</programlisting> <para>PCMCIA サポート。ラップトップを使っているなら必要でしょう。</para> <programlisting># Serial (COM) ports device sio0 at isa? port IO_COM1 flags 0x10 irq 4 device sio1 at isa? port IO_COM2 irq 3 device sio2 at isa? disable port IO_COM3 irq 5 device sio3 at isa? disable port IO_COM4 irq 9</programlisting> <para>これらは MS-DOS/Windows の世界では COM1からCOM4 と呼ばれている 4 つのシリアルポートです。</para> <note> <para>もしあなたが内蔵モデムを COM4 に、シリアルポートを COM2 に設定している場合、FreeBSD からアクセスするには、 (IRQ2=IRQ9 という、不明瞭な技術的理由により) モデムの IRQ を 2 に変更する必要があります。 もしマルチポートシリアルカードを持っていてこれらの設定の正しい 数値に関する情報がほしい場合はマニュアルページ &man.sio.4; を参照して下さい。 ビデオカードのいくつかは (S3 チップベースのものは特に) IO アドレスを <literal>0x*2e8</literal> と言う形式で表現する一方、 多くの安価なシリアルカードは 16 ビットの IO アドレスを完全に デコードしないので、これらのカードを使った場合衝突が起こり、 事実上 COM4 ポートを使用不可能にします。</para> <para>各々のシリアルポートは (共有割り込み番号をサポートする マルチポートカードを使っていない限り) 固有の IRQ を必要とします。 従って COM3 と COM4 用のデフォルト IRQ は利用できません。</para> </note> <programlisting># Parallel port device ppc0 at isa? irq 7</programlisting> <para>ISA バスパラレルポートインタフェースです。</para> <programlisting>device ppbus # Parallel port bus (required)</programlisting> <para>パラレルポートバスのサポートを提供します。</para> <programlisting>device lpt # Printer</programlisting> <para>パラレルポートプリンタのサポートです。</para> <note> <para>上の 3 つはすべてパラレルプリンタを利用可能にするために 必要です。</para> </note> <programlisting>device plip # TCP/IP over parallel</programlisting> <para>パラレルネットワークインタフェース用のドライバです。</para> <programlisting>device ppi # Parallel port interface device</programlisting> <para>汎用I/O (<quote>geek port</quote>) + IEEE1284 I/O です。</para> <programlisting>#device vpo # Requires scbus and da</programlisting> <indexterm><primary>zip ドライブ</primary></indexterm> <para>Iomega の Zip ドライブ用です。<literal>scbus</literal> と <literal>da</literal> サポートが必要です。 EPP 1.9モードを使うと最高の性能が得られます。</para> <programlisting># PCI Ethernet NICs. device de # DEC/Intel DC21x4x (<quote>Tulip</quote>) device fxp # Intel EtherExpress PRO/100B (82557, 82558) device tx # SMC 9432TX (83c170 <quote>EPIC</quote>) device vx # 3Com 3c590, 3c595 (<quote>Vortex</quote>) device wx # Intel Gigabit Ethernet Card (<quote>Wiseman</quote>)</programlisting> <para>PCI ネットワークカードのドライバです。あなたのシステムに ないものはコメントアウトするか削除して下さい。</para> <programlisting># PCI Ethernet NICs that use the common MII bus controller code. device miibus # MII bus support</programlisting> <para>MII バスサポートはいくつかの PCI 10/100 イーサネット NIC、 すなわち MII に従うトランシーバや MII のようなトランシーバ制御 インタフェースを実装するもの、に必要となります。 カーネルコンフィギュレーションに <literal>device miibus</literal> を追加することで、汎用 miibus API のサポートと、 特定のドライバを必要としない場合に利用される汎用のものを含む すべての PHY ドライバが導入されます。</para> <programlisting>device dc # DEC/Intel 21143 and various workalikes device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (<quote>Starfire</quote>) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device ste # Sundance ST201 (D-Link DFE-550TX) device tl # Texas Instruments ThunderLAN device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (<quote>Boomerang</quote>, <quote>Cyclone</quote>)</programlisting> <para>MII バスコントローラコードを利用するドライバです。</para> <programlisting># ISA Ethernet NICs. device ed0 at isa? port 0x280 irq 10 iomem 0xd8000 device ex device ep # WaveLAN/IEEE 802.11 ワイヤレス NIC。 # 注: WaveLAN/IEEE は PCMCIA デバイスとしてしか実在しません。 # なので ISAア タッチメントは必要なく、リソースは常に PC カードコードに # より動的に割り当てられます。 device wi # Aironet 4500/4800 802.11 ワイヤレス NIC。 # 注: 下の宣言は ISA PnP モード (工場出荷時設定) のISAカード、PCMCIA # 及び PCI カードにのみ働きます。もし、ISA カードの I/O アドレスと IRQ # を手動で設定している場合は、ここでそれらのパラメータを指定しなく # てはいけません。 device an # これらの検出順序は現在 i386/isa/isa_compat.c により決められます。 device ie0 at isa? port 0x300 irq 10 iomem 0xd0000 device fe0 at isa? port 0x300 device le0 at isa? port 0x300 irq 5 iomem 0xd0000 device lnc0 at isa? port 0x280 irq 10 drq 0 device cs0 at isa? port 0x300 device sn0 at isa? port 0x300 irq 10 # requires PCCARD (PCMCIA) support to be activated #device xe0 at isa?</programlisting> <para>ISA イーサネットドライバです。 どのカードがどのドライバによりサポートされているかは <filename>/usr/src/sys/i386/conf/LINT</filename> を参照して下さい。</para> <programlisting>pseudo-device ether # Ethernet support</programlisting> <para><literal>ether</literal> はイーサネットカードを持っている場合に のみ必要です。汎用イーサネットプロトコルコードを含みます。</para> <programlisting>pseudo-device sl 1 # Kernel SLIP</programlisting> <para><literal>sl</literal> は SLIP サポートを行います。 SLIP は設定のより簡単な、モデム-モデム間の接続にはより適していて より高機能な PPP に殆ど取って代わられています。 <literal>sl</literal> に続く <replaceable>数字</replaceable> には同時に持てる SLIP セッション数を指定します。</para> <programlisting>pseudo-device ppp 1 # Kernel PPP</programlisting> <para>これはダイアルアップ接続用のカーネル PPP サポートです。 他にも <literal>tun</literal> を利用し、デマンドダイアリングのような 柔軟性と機能を提供するユーザーランドのアプリケーションとして 実装された PPP が存在します。<literal>ppp</literal> に続く <replaceable>数字</replaceable> には同時に持てる PPP セッション数を 指定します。</para> <programlisting>pseudo-device tun # Packet tunnel.</programlisting> <para>これはユーザーランド PPP ソフトウエアにより利用されます。 <literal>tun</literal> に続く <replaceable>数字</replaceable> には同時に持てる PPP セッション数を指定します。 詳細はこの本の <link linkend="userppp">PPP</link> セクションを 参照して下さい。</para> <programlisting><anchor id="kernelconfig-ptys">pseudo-device pty # Pseudo-ttys (telnet etc)</programlisting> <para>これは <quote>疑似ターミナル</quote> 或いはシミュレートされた ログインポートです。 これは入ってくる <command>telnet</command> と <command>rlogin</command> セッション、 <application>xterm</application> やその他の <application>Emacs</application> のようなアプリケーションにより利用されます。 <literal>pty</literal> の後の <replaceable>数字</replaceable> は、 生成される <literal>pty</literal> の数を示します。もし同時にデフォルトの 16 より多くの <application>xterm</application> ウィンドウやリモートログインが 必要な場合、必要に応じてこの数字を増やして下さい。 最大は 256 です。</para> <programlisting>pseudo-device md # Memory <quote>disks</quote></programlisting> <para>メモリディスク疑似デバイス。</para> <programlisting>pseudo-device gif</programlisting> <para>または</para> <programlisting>pseudo-device gif 4 # IPv6 and IPv4 tunneling</programlisting> <para>この行は IPv6 over IPv4 トンネル、IPv4 over IPv6 トンネル、 IPv4 over IPv4 トンネル、IPv6 over IPv6 トンネルを提供します。 FreeBSD 4.4 からは、<literal>gif</literal> デバイスは <quote>auto-cloning (自動複製)</quote> しますので、 (<literal>gif</literal> のあとに数値がこない) はじめの例を使ってください。 それより前のバージョンの FreeBSD では、数値が必要です。</para> <programlisting>pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)</programlisting> <para>この疑似デバイスは自分宛に送られたパケットを受け取り、 IPv4/IPv6 変換デーモンに渡します。</para> <programlisting># The `bpf' pseudo-device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! pseudo-device bpf # Berkeley packet filter</programlisting> <para>これはバークレーパケットフィルタです。 この疑似デバイスはネットワークインタフェースを、イーサネットのような ブロードキャストネットワーク上ですべてのパケットを拾うことのできる promiscuous モードに設定できるようにします。 これらのパケットはディスクに取り込むこともできますし、 &man.tcpdump.1; を使ってチェックをすることもできます。</para> <note> <para><literal>bpf</literal> 疑似デバイスは、&man.dhclient.8; がデフォルトルータ (ゲートウェイ) の IP アドレスなどを取得する ためにも使われています。DHCP を使っているなら、これはコメント アウトしないでください。</para> </note> <programlisting># USB support #device uhci # UHCI PCI->USB interface #device ohci # OHCI PCI->USB interface #device usb # USB Bus (required) #device ugen # Generic #device uhid # <quote>Human Interface Devices</quote> #device ukbd # Keyboard #device ulpt # Printer #device umass # Disks/Mass storage - Requires scbus and da #device ums # Mouse # USB Ethernet, requires mii #device aue # ADMtek USB ethernet #device cue # CATC USB ethernet #device kue # Kawasaki LSI USB ethernet</programlisting> <para>様々なUSBデバイスのサポートです。</para> <para>より詳細な情報と、FreeBSD によりサポートされる他のデバイスに ついては <filename>/usr/src/sys/i386/conf/LINT</filename> を参照して下さい。</para> </sect1> <sect1 id="kernelconfig-nodes"> <title>デバイスノードを作る</title> <indexterm><primary>デバイス ノード</primary></indexterm> <indexterm> <primary><command>MAKEDEV</command></primary> </indexterm> <note><para>FreeBSD 5.0 以降を動かしているなら、 この節を飛ばして構いません。そのバージョンでは &man.devfs.5; を用いて、ユーザに意識させずにデバイスノードを割り当てています。</para></note> <para>カーネル内のほとんどすべてのデバイスは対応する <quote>node</quote> エントリが <filename>/dev</filename> ディレクトリにあります。これらのノードは普 通のファイルのように見えますが、実際にはプログラムがデバイスに アクセスするのに用いるカーネル内への特別なエントリです。 シェルスクリプトである <filename>/dev/MAKEDEV</filename>はオペレーティング システムを最初にインストールする時に実行され、サポートされてい る大部分のデバイスのノードを作ります。しかし、 <emphasis>すべての</emphasis> ノードが作られるわけではありませんので 新しいデバイスのサポートを加える時は対応するエントリがこのディ レクトリにあるかどうか確認してもしなければ、作ってください。 以下に例を示します。</para> <para>IDE CD-ROMのサポートをカーネルに加えるとします。次の行 を加えます。</para> <programlisting>device acd0</programlisting> <para>これにしたがって、<filename>/dev</filename>ディレクトリに <filename>acd0</filename> で始まるエントリをさがしてください。 1文字が後ろにつくかもしれません。 後ろについた文字が <literal>c</literal> であるか、先頭に <literal>r</literal> のつくエントリは <quote>raw</quote> デバイスを示します。 それらのファイルがないことが明らかになったとします。そこで <filename>/dev</filename> ディレクトリに移動して次のようにタイプします。</para> <indexterm> <primary><command>MAKEDEV</command></primary> </indexterm> <screen>&prompt.root; <userinput>sh MAKEDEV acd0</userinput></screen> <para>スクリプトの実行が終ったら <filename>/dev</filename>に <filename>acd0c</filename> と <filename>racd0c</filename> エントリがあることを確認してください。これによ り正しく実行されたことがわかります。</para> <para>サウンドカードの場合、以下のコマンドで対応する エントリが作成されます:</para> <screen>&prompt.root; <userinput>sh MAKEDEV snd0</userinput></screen> <note> <para>サウンドカードのようなデバイスのノードを作る場合で、もし他 の人がマシンにアクセスするようであれば、そのデバイスを <filename>/etc/fbtab</filename> ファイルに追加して外部からのアクセスから 保護するのが望ましいでしょう。このファイルの詳細については &man.fbtab.5; を参照してください。</para> </note> <para><filename>GENERIC</filename> に含まれていないデバイスはエントリがありませんから、以上 の簡単な手順をおこなうことになります。</para> <note> <para>すべての SCSI コントローラは同じ <filename>/dev</filename> の エントリを使用しますのでノードを作る必要はありません。 またネッ トワークカードと SLIP/PPP 疑似デバイスは <filename>/dev</filename> にはエント リがありませんのでこれらについても作る必要がありません。</para> </note> </sect1> <sect1 id="kernelconfig-trouble"> <title>問題が起きた場合には</title> <para>カスタムカーネルを作る場合に起きるトラブルは、 次の 5 種類に分けられます。</para> <variablelist> <varlistentry> <term><command>config</command> コマンドの失敗</term> <listitem> <para>カーネルコンフィグレーションファイルに設定を行なってから &man.config.8; コマンドが失敗したのであれば、 おそらくファイルのどこかに単純な間違いがあります。 さいわい、&man.config.8; はトラブルの起きた行番号を出力しますので <application>vi</application> で素早く見つけることができます。 例えば、次のように出力された場合</para> <screen>config: line 17: syntax error</screen> <para><application>vi</application> のコマンドモードで <command>17G</command> とタイプすれば、 問題のところへ飛ぶことができます。 <filename>GENERIC</filename> カーネルのファイルや、 他のリファレンスと比較して注意深く修正してください。</para> </listitem> </varlistentry> <varlistentry><term><command>make</command> コマンドの失敗</term> <listitem> <para><command>make</command> コマンドが失敗した場合には、 カーネル設定で &man.config.8; がとらえられなかったような間違いをしていることが多いようです。 もう一度コンフィグレーションファイルを見直してください。 それでも問題を解決することができなければ、 &a.questions; へあなたのカーネルコンフィグレーションファイルをつけてメールしてください。 誰かが素早く間違いを見つけてくれるでしょう。</para> </listitem> </varlistentry> <varlistentry> <term>新しいカーネルのインストールの失敗</term> <listitem> <para>カーネルが無事コンパイルできたのに、インストールに失敗 (<command>make install</command> または <command>make installkernel</command> に失敗) したら、最初に確認すべきことは、システムがセキュアレベル 1 以上で動いていないかどうかです (&man.init.8; 参照)。 カーネルのインストール時には、カーネルから immutable (変更不可) フラグを外して、 新しい方に変更不可フラグを設定しようとします。セキュアレベル 1 以上では、システム内のどのファイルからも変更不可フラグを外せないため、 カーネルのインストールはセキュアレベル 0 以下で行わなければなりません。</para> </listitem> </varlistentry> <varlistentry> <term>カーネルが起動しない<anchor id="kernelconfig-noboot"></term> <listitem> <para>新しいカーネルが起動しなかったり、 デバイスの認識をしない場合でもあわてないでください! さいわい、FreeBSD には利用できないカーネルから復帰する洗練されたメカニズムがあります。 それは、FreeBSD のブートローダで起動したいカーネルを選択するだけです。 システムが 10 からカウントダウンしている時に、この機能が使えます。 <keycap>Enter</keycap> キー以外の任意のキーを押して、 <command>unload</command> と入力してから、 <command>boot <replaceable>kernel.old</replaceable></command> か他の正常に起動するカーネルを入力してください。 カーネルの再設定をおこなう場合にはいつも、 確実に動くことが分かっているカーネルを用意しておくようにすると良いでしょう。 </para> <para>問題のないカーネルで起動した後に あなたのコンフィグレー ションファイルを調べ、 再び構築を試みてください。 <filename>/var/log/messages</filename> ファイルにはすべての成功した 起動時のカーネルメッセージやその他の記録があり、これ は助けになる情報の一つでしょう。また、 &man.dmesg.8; コマンドは現在の起動時のカーネルメッ セージを出力します。</para> <note> <para>カーネルの構築中にトラブルが起きた時に使うために GENERICや他のカーネルを次の構築で消されない ように異る名前で保存するようにしてください。<emphasis remap=tt>kernel.old</emphasis> は新しいカーネルをインストールする 時に、 その一つ前にインストールしたうまく動かないかもしれ ないカーネルで上書きされてしまいますので当てにできませ ん。またできる限り早く動作しているカーネルを本来の <filename>kernel</filename>の位置に移動させてください。 そうしないと &man.ps.1; のようなコマンドが正しく動きません。 <command>make</command> でインストールされたカーネルのファイルを (別のカーネルに戻すために) <quote>アンロック</quote> するための特別 のコマンドは</para> <screen>&prompt.root; <userinput>chflags noschg /kernel</userinput></screen> <para>です。これができないのなら、&man.securelevel.8; を 0 より大きい値にしているのかもしれません。 <filename>/etc/rc.conf</filename> の <literal>kern_securelevel</literal> を <literal>-1</literal> に変更して再起動してください。新し いカーネルに満足したら、前の設定に戻してよいでしょう。</para> <para>また、 新しい置き換えたカーネルあるいは重要ファイ ルを動かしたり変更されないように <quote>ロック</quote> するには 次のようにします。</para> <screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen> </note> <note><para>FreeBSD 5.0 では、インストールする際に、カーネルの immutable (変更不可) フラグを有効にしませんので、 おそらくこのことは問題の原因ではないでしょう。</para> </note> </listitem> </varlistentry> <varlistentry> <term>カーネルは動きますが &man.ps.1; は動きません!</term> <listitem> <para>システムユーティリティと異る バージョンのカーネルをインストールした場合、例えば 4.x のカーネルを 3.x システム上にインストールするような場合、 &man.ps.1; や &man.vmstat.8; のような多くの システムステータスコマンドは動かなくなります。 <filename>libkvm</filename> を再コンパイルして、 これらのユーティリティを作りなおす必要があります。 これは、カーネルとそれ以外で異なるバージョンを組み合わせて オペレーティングシステムを使用することが推奨されない理由の 一つとなっています。</para> </listitem> </varlistentry> </variablelist> </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: -->