<!--
     The FreeBSD Documentation Project
     The FreeBSD Japanese Documentation Project

     Original revision: 1.42
     $FreeBSD$
-->

<chapter id="kernelconfig">
  <title>FreeBSD カーネルのコンフィグレーション</title>

  <sect1>
    <title>この章では</title>

    <para><emphasis>更新/再構成: &a.jim;, 2000 年 3 月.
	寄稿: &a.jehamby;, 1995 年 10 月 6 日.</emphasis></para>
    <para><emphasis>訳: &a.jp.tomo;, &a.jp.yoshiaki;. 1996 年 11 月 2 日.</emphasis></para>

    <para>この章では, 自分のシステムに合わせた
      カーネルを構築する方法について扱います.
      カーネルの再構築によりどんなメリットがあるのか不思議に思っていたり,
      自分用のカーネルを設定し, コンパイルし, インストールする方法を
      知りたいと思っているのなら, この章が役に立つでしょう.
    </para>
  </sect1>

  <sect1>
    <title>なぜカスタムカーネルを作るか?</title>

    <para>システムに合わせたカーネルの構築はほとんどすべての
      UNIX ユーザが
      避けて通ることのできない最も重要な通過儀礼の1つです.
      この作業は, 多くの時間を必要としますが, あなたの FreeBSD
      システムに多くの利益をもたらします.
      広範囲のハードウェアをサポートしなければならない
      <filename>GENERIC</filename>カーネルとは異なり,
      システムに合わせたカーネルは
      <emphasis>あなたの</emphasis> PC
      のハードウェアのみをサポートします.  これは,
      次にあげるような利益をもたらします.</para>

    <itemizedlist>
      <listitem>
	<para>素早く起動します.
	  カーネルはあなたのシステム上にあるハードウェアしか
	  検出を行わないので,
	  あなたのシステムの起動にかかる時間は劇的に短くなります.
	</para>
      </listitem>

      <listitem>
	<para>メモリの消費量が減少します.
	  システムに合わせたカーネルは, 大抵 <literal>GENERIC</literal>
	  カーネルより少ないメモリしか消費しません.
	  カーネルは常にメモリ上に存在するプロセスなので,
	  このことは重要になります.
	  したがって, RAM が少ないシステムでは,
	  カーネルの再構築は大変重要です.</para>
      </listitem>

      <listitem>
	<para>追加のハードウェアをサポートします.
	  システムに合わせたカーネルは, サウンドカードなど
	  <literal>GENERIC</literal> カーネルに存在しない
	  デバイスのサポートを追加することができます.</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="kernelconfig-building">
    <title>カスタムカーネルの構築とインストール</title>

    <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>
	を用いて以下のようにします. <literal>設定(Configure)</literal>
	を選んでから <literal>配布ファイル(Distribution)</literal>
	を選択し, <literal>src</literal> の中の <literal>sys</literal>
	をインストールしてください.
      </para>
    </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>

    <note>
      <para>この作業は root権限でおこなう必要があります.
	そうでなければ, <errortype>permission
	  denied</errortype>というエラーが出ます.</para>
    </note>

    <para>では, <filename>MYKERNEL</filename>
      をあなたの好きなエディタで編集してください.  もし,
      システムをインストールしたばかりならば, 利用できるエディタは
      <command>vi</command>だけかもしれません. ここでは使い方
      の説明はしませんが, <link linkend="bibliography">参考図書</link>
      にあるような多くの本で詳しく説明 されていますので,
      そちらを参照してください. FreeBSD にはより簡単なエディタとして
      <quote>ee</quote> があります. 初心者の方であればこちらをエディタ
      に選ぶとよいでしょう.
      まずファイルの最初の方のコメント行を編集し, あなたのコンフィグ
      レーションに合せて変更した点などを記述して
      <filename>GENERIC</filename> と区別がつく
      ようにしておきましょう.</para>

    <para>もし SunOSや他の BSDオペレーティングシステムでカーネルの
      再構築をしたことがあれば, このファイルはとても親しみ
      やすいでしょう. しかし, DOSのようなその他の
      オペレーティングシステムしか知らない人から見れば,
      <filename>GENERIC</filename>
      コンフィグレーションファイルはとても
      なじみにくいものかもしれません. そのような場合は,
      <link linkend="kernelconfig-config"> コンフィグレーションファイル
      </link> の節をゆっくりと注意深く読んでください.</para>

    <note>
      <para>FreeBSD Project の最新のソースファイルと, あなたの
	ソースツリーを同期させている場合,
	アップデートを行う際には, 必ず
	<filename>/usr/src/UPDATING</filename> ファイルをチェックするように
	してください.
	このファイルには, FreeBSD をアップデートする際のすべての重要な情報
	が書かれています.
	<filename>/usr/src/UPDATING</filename> は常にあなたの FreeBSD
	ソースファイルのバージョンと同期していますので,
	ハンドブックの情報よりも正確なものとなっています.</para>
    </note>

    <para>FreeBSD 4.0 より前の FreeBSD を使っていて,
      FreeBSD 4.0 以降へはアップグレードしない,
      もしくはリリース版の FreeBSD を使っていて
      <filename>/usr/src/</filename> ディレクトリには
      <filename>sys/</filename> しか無い場合,
      編集し終ったら次のコマンドによってコンパイル, インストール
      を行ってください. </para>

    <note>
      <para>古いバージョンの FreeBSD からカーネルをアップグレードしようと
	している場合, 新しいカーネルのソースファイルを取ってきた場所と
	同じところから, 新しいバージョンの &man.config.8; を取ってくる
	必要があるでしょう.
	&man.config.8; は <filename>/usr/src/usr.sbin</filename>
	にあるので, これらのソースファイルもダウンロードする必要が
	あります.
	次のコマンドを実行する前に, これを再構築してインストールして
	おいてください.</para>
    </note>

    <screen>&prompt.root; <userinput>/usr/sbin/config MYKERNEL</userinput>
&prompt.root; <userinput>cd ../../compile/MYKERNEL</userinput>
&prompt.root; <userinput>make depend</userinput>
&prompt.root; <userinput>make</userinput>
&prompt.root; <userinput>make install</userinput></screen>

    <para>4.X 以降の新しいバージョンにアップグレードした場合
      (例えば 3.X から 4-STABLE へ, もしくは 4-STABLE から
      最新版の 4-STABLE へなど), 予め
      <link linkend="cutting-edge">buildworld</link> を行なって,
      以下のコマンドを実行してください:</para>

    <screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildkernel KERNCONF=MYKERNEL</userinput>
&prompt.root; <userinput>make installkernel KERNCONF=MYKERNEL</userinput></screen>

    <note>
      <para>FreeBSD-4.2 とそれ以前の場合は,
        <literal>KERNCONF=</literal>
        ではなく
        <literal>KERNEL=</literal>
        としなければなりません.
        2001 年 2 月 2 日以降の 4.2-STABLE は
        KERNCONF= を認識します.</para>
    </note>

    <para>何らかの方法であなたのソースツリーをアップグレードして
      <emphasis>いない</emphasis> 場合
      (<application>CVSup</application>, <application>CTM</application>,
      <application>anoncvs</application>, などを実行していない場合),
      <command>config</command>, <command>make depend</command>, 
      <command>make</command>, <command>make install</command>
      の手順を実行してください.</para>

    <warning>
      <para>最後にカーネルを構築した後で, ソースをアップグレードした場合,
	カーネルを構築するには <command>make buildkernel</command>
	を使わなければ <emphasis>なりません</emphasis>.
	そうしないと, カーネルを構築するのに古いユーティリティが
	使われてしまい, 失敗してしまうかもしれません.
	<emphasis>ソースを更新した場合には, カーネルを構築するのに
	  <command>config</command>/<command>make</command>
	  の手順は使わないでください!</emphasis></para>
    </warning>

    <para>新しいカーネルはルートディレクトリに
      <filename>/kernel</filename>という 名前でコピーされ,
      今までのカーネルは <filename>/kernel.old</filename>
      という名前へ変更されます. では, システムをシャットダウン, リブー
      トして新しいカーネルを使ってください. うまく行かない場合は,
      この章の終りの
      <link linkend="kernelconfig-trouble">問題が起きた場合には</link>
      を参照してください. この章の新しい
      <link linkend="kernelconfig-noboot">カーネルが起動しない</link>
      場合のリカバリの方法を注意深く読んでおいてください.</para>

    <note>
      <para>(サウンドカードのような)新しいデバイスを 追加した場合は,
	使う前に <filename>/dev</filename>ディレクトリで
	デバイスノードを追加しなければならないかもしれません.
	詳しくは, <link linkend="kernelconfig-nodes">デバイスノード
	</link> を読んでください.</para>
    </note>
  </sect1>

  <sect1 id="kernelconfig-config">
    <title>コンフィグレーション ファイル</title>

    <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>

    <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/handbook/kernelconfig-config.html
#
# doc ディストリビューションをインストールした場合, ハンドブックは
# ローカルマシンの /usr/share/doc/handbook でも見ることができます.
# 最新版は FreeBSD の WWW サーバ (http://www.FreeBSD.ORG/) を参照して
# 下さい.
#
# ./LINT コンフィギュレーションファイルには, デバイス行に関する大量の
# オプションと詳細な説明があります. もしある行の目的又は必要性について
# 疑問がある場合はまず LINT をチェックして下さい.
#
# &dollar;FreeBSD: src/sys/i386/conf/GENERIC,v 1.246 2000/03/09 16:32:55 jlemon Exp &dollar;</programlisting>

    <para>以下は <emphasis>すべての</emphasis> カーネルの構築に
      必須のキーワードです:</para>

    <programlisting>machine		i386</programlisting>

    <para>マシンのアーキテクチャです.
      これは <literal>i386</literal>, <literal>alpha</literal>, 
      <literal>pc98</literal> のいずれかでなければなりません.</para>

    <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 を使っているか分からない場合,
      <command>dmesg</command> を使って起動メッセージを
      調べるとよいでしょう.</para>

    <para>Alpha アーキテクチャの場合は,
      <literal>cpu_type</literal> に異なった値を用います.</para>

    <programlisting>cpu          EV4
cpu          EV5</programlisting>

    <para>もしあなたが Alpha マシンを使っている場合,
      上記の内のどれかを指定して下さい.</para>

    <programlisting>ident          GENERIC</programlisting>

    <para>ここはカーネルの識別名を書きます.
      あなたがカーネルに付けたい名前に書き換えて下さい
      (<literal>MYKERNEL</literal>のように).
      <literal>ident</literal> に書いた名前はカーネルを起動する時に
      表示されるので,
      普段使っているカーネルと区別したいときは違う名前を付けると
      良いでしょう(例: 実験的なカーネルを構築する場合).</para>

    <programlisting>maxusers          32</programlisting>

    <para><literal>maxusers</literal> オプションは重要なシステムテーブルの
      サイズを決定します.
      この数字はあなたのマシンを同時に使うと思われるユーザー数と
      おおよそ等しくするのが良いでしょう.
      しかしながら, 通常は X ウインドウシステムを使ったり,
      ソフトウエアをコンパイルするでしょうから, その場合は
      <literal>maxusers</literal> は最低 4 にして下さい.
      その理由は, <literal>maxusers</literal> によって計算される最も
      重要なテーブルがプロセスの最大数で, それは
      <literal>20 + 16 * maxusers</literal> となります.
      もし, <literal>maxusers</literal> を 1 にすると,
      同時に 36 プロセスしか利用できなくなりますが,
      システムは起動時に 18 ほどのプロセスを立ち上げ,
      X ウインドウシステムは 15 ほどのプロセスを立ち上げるので,
      man コマンドのような単純な仕事でさえフィルタ, 展開, 表示に 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>.
	それは単に, あなたのシステムを使うであろうユーザの最大数や
	それぞれのユーザがどれくらいのプロセスを走らせるかに
	合わせて各種テーブルの大きさを設定するだけです.
	同時にリモートログインする最大ユーザ数を制限するキーワードは
	<link linkend="kernelconfig-ptys">
	  <literal>pseudo-device pty 16</literal></link> です.
      </para>
    </note>

    <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_EMULATION</literal> を使ってみて下さい.
	このオプションはライセンス上の理由によりデフォルトでは
	含まれていません.</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>

    <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>

    <programlisting>options          NFS          #Network Filesystem
options          NFS_ROOT     #NFS usable as root device, NFS required</programlisting>

    <para>ネットワークファイルシステム.
      UNIX ファイルサーバから TCP/IP を介してパーティションを
      マウントするのでない限り, これらの行をコメントアウトして下さい.</para>

    <programlisting>options          MSDOSFS      #MSDOS Filesystem</programlisting>

    <para>MS-DOS ファイルシステム.
      起動時に DOS でフォーマットされたハードドライブを
      マウントするのでない限り, この行は安全にコメントアウトできます.
      この機能は最初に DOS パーティションをマウントする時に自動的に
      ロードされます.
      又, 優秀な <application>mtools</application>
      (Ports コレクションにあります) を使ってもマウント,
      アンマウントすることなしに 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; のようなプログラムに, どんなプロセスが走っているか
      に関するより多くの情報を提供させる事ができます.</para>

    <programlisting>options          COMPAT_43    #Compatible with BSD 4.3 [KEEP THIS!]</programlisting>

    <para>4.3BSD との互換機能です.
      有効なままにして下さい.
      この行をコメントアウトするとおかしな動きをするプログラムがあります.
    </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> とコマンドを打つことにより,
      コンソール xterm を起動することができます.
      ここにはカーネルからのあらゆるコンソールメッセージとともに,
      <command>write</command>, <command>talk</command> による
      あらゆるメッセージを表示します.
</para>

    <programlisting>options          USERCONFIG          #boot -c editor</programlisting>

    <para>このオプションは起動メニューからコンフィグレーションエディタ
      を起動することができるようにします.</para>

    <programlisting>options          VISUAL_USERCONFIG   #visual boot -c editor</programlisting>

    <para>このオプションは起動メニューからビジュアルコンフィグレーション
      エディタを起動できるようにします.</para>

    <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 extentions
options 	_KPOSIX_PRIORITY_SCHEDULING</programlisting>

    <para>リアルタイム拡張が 1993 POSIX に追加されました.
      Ports コレクションの内のいくつかのアプリケーション
      (例えば Star Office) はこれを使っています.</para>

    <programlisting>options		ICMP_BANDLIM		#Rate limit bad replies</programlisting>

    <para>このオプションは ICMP エラー応答のバンド幅制限を可能にします.
      サービス不能パケットによる攻撃からマシンを保護するために必要です.
    </para>

    <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 は現時点では動作しません
      (サポートには取組中です).</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>ATAPI ディスクドライブには <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>
      のエントリが無い, ネットワーク上の多くの異なったマシンに
      接続する際にも有用です &mdash; <literal>vt100</literal>
      は仮想的にすべてのプラットフォームで有効であるべきです.</para>

    <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># 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>

    <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 devices - the number indicates how many units to allocated.
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>

    <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> のような
      アプリケーションにより利用されます.
      <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     4     # IPv6 and IPv4 tunneling</programlisting>

    <para>この行は IPv6 over IPv4 トンネル, IPv4 over IPv6 トンネル,
      IPv4 over IPv4 トンネル, IPv6 over IPv6 トンネルを提供します.</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>

    <programlisting># USB support
#device         uhci          # UHCI PCI-&gt;USB interface
#device         ohci          # OHCI PCI-&gt;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>

    <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>

    <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>カスタムカーネルを作る場合に起きるトラブルは,
        次の 4 種類に分けられます.</para>

    <variablelist>
      <varlistentry><term><command>config</command> コマンドの失敗</term>
	<listitem>
	  <para>カーネルコンフィグレーションファイルに設定を行なってから
	    <command>config</command> コマンドが失敗したのであれば,
	    おそらくファイルのどこかに単純な間違いがあります.
            さいわい,
	    <command>config</command>
            はトラブルの起きた行番号を出力しますので
	    <command>vi</command> で素早く見つけることができます.
	    例えば, 次のように出力された場合</para>

            <screen>config: line 17: syntax error</screen>

	  <para><command>vi</command> のコマンドモードで
	    <command>17G</command> とタイプすれば,
            問題のところへ飛ぶことができます.
	    <filename>GENERIC</filename> カーネルのファイルや,
            他のリファレンスと比較して注意深く修正してください.</para>
	</listitem>
      </varlistentry>

      <varlistentry><term><command>make</command> コマンドの失敗</term>
	<listitem>
	  <para><command>make</command> コマンドが失敗した場合には,
	    カーネル設定で <command>config</command>
	    がとらえられなかったような間違いをしていることが多いようです.
            もう一度コンフィグレーションファイルを見直してください.
            それでも問題を解決することができなければ,
            &a.questions;
            へあなたのカーネルコンフィグレーションファイルをつけてメールしてください.
            誰かが素早く間違いを見つけてくれるでしょう.</para>
	</listitem>
      </varlistentry>

      <varlistentry><term>カーネルが起動しない
	  <anchor id="kernelconfig-noboot"></term>
	<listitem>
	  <para>新しいカーネルが起動しなかったり,
	    デバイスの認識をしない場合でもあわてないでください!
	    さいわい, BSDは 利用できないカーネルから復帰する
            洗練されたメカニズムがあります.
            それは, FreeBSD のブートローダで起動したいカーネルを選択する
	    (例えば <command>boot <filename>kernel.old</filename></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>です. また,
	      新しい置き換えたカーネルあるいは重要ファイ
	      ルを動かしたり変更されないように
	      <quote>ロック</quote> するには 次のようにします. </para>

	    <screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen>
	  </note>
	</listitem>
      </varlistentry>

      <varlistentry><term>カーネルは動くが
	  <command>ps</command> は動かない!</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:
-->
