- Merge the following from the English version:

r42226 -> r42827	head/ja_JP.eucJP/books/handbook/bsdinstall/chapter.xml
	r42014 -> r42861	head/ja_JP.eucJP/books/handbook/kernelconfig/chapter.xml
This commit is contained in:
Ryusuke SUZUKI 2013-10-08 13:35:02 +00:00
parent 3d3667c769
commit 7d1e1919de
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=42892
2 changed files with 263 additions and 356 deletions
ja_JP.eucJP/books/handbook
bsdinstall
kernelconfig

View file

@ -3,7 +3,7 @@
The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project
Original revision: r42226
Original revision: r42827
$FreeBSD$
-->
@ -939,8 +939,8 @@ Trying to mount root from cd9660:/dev/iso9660/FREEBSD_INSTALL [ro]...</screen>
<para>丹念に検出結果をチェックして、あなたが予期したすべてのデバイスを
&os; が検出できた事を確認してください。デバイスが見つからなかった場合、
検出結果へ表示されません。
<link linkend="kernelconfig-modules">カーネルモジュール</link> を構築することで、
<filename>GENERIC</filename>
<link linkend="kernelconfig-custom-modules">カーネルモジュール</link>
を構築することで、<filename>GENERIC</filename>
カーネルに含まれていないデバイスのサポートを追加できます。</para>
<para>デバイス検出後、

View file

@ -3,28 +3,26 @@
The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project
Original revision: r42014
Original revision: r42861
$FreeBSD$
-->
<chapter id="kernelconfig">
<chapterinfo>
<authorgroup>
<!-- <authorgroup>
<author>
<firstname>Jim</firstname>
<surname>Mock</surname>
<contrib>改訂および再構成: </contrib>
<!-- Mar 2000 -->
<contrib>改訂および再構成 (2000 年 3 月): </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Jake</firstname>
<surname>Hamby</surname>
<contrib>原作: </contrib>
<!-- 6 Oct 1995 -->
<contrib>原作 (1995 年 10 月 6 日): </contrib>
</author>
</authorgroup>
</authorgroup>-->
</chapterinfo>
<title>FreeBSD カーネルのコンフィグレーション</title>
@ -53,6 +51,10 @@
<para>いつカスタムカーネルの構築が必要になるか。</para>
</listitem>
<listitem>
<para>ハードウェア一覧の作成方法。</para>
</listitem>
<listitem>
<para>カーネルコンフィグレーションファイルのカスタマイズの方法。</para>
</listitem>
@ -77,12 +79,12 @@
<sect1 id="kernelconfig-custom-kernel">
<title>なぜカスタムカーネルを作るか?</title>
<para>伝統的に、&os; <quote>モノリシック</quote>
<para>伝統的に、&os;モノリシック
(monolithic) カーネルを使っていました。
このカーネルは、単一の巨大なプログラムで、
扱えるデバイスは固定されていて、
カーネルの振る舞いを変えたければ新しいカーネルを構築して、
コンピュータを再起動して新しいカーネルを動かさなれければならなかったということです</para>
カーネルの振る舞いを変えたければ構築してコンピュータを再起動し
新しいカーネルを動かさなれければなりませんでした</para>
<para>今日では、&os;
カーネルのかなりの機能はモジュールに含まれるようになり、
@ -135,24 +137,50 @@
カーネルに存在しないデバイスのサポートを追加することができます。</para>
</listitem>
</itemizedlist>
<para>カスタムカーネルを構築する前に、再構築する理由を考えてください。
ある特定のハードウェアに対応する必要がある場合に、
そのハードウェアに対応するためのモジュールがすでに用意されていることがあります。</para>
<para>カーネルモジュールは
<filename class="directory">/boot/kernel</filename>
にあります。モジュールによっては &man.kldload.8; により、
すでに実行中のカーネルに動的に読み込まれています。
ほとんどのカーネルドライバには、
読み込み可能なモジュールやマニュアルページが用意されています。
たとえば、&man.ath.4;
ワイヤレスイーサネットドライバのマニュアルページには以下のような記述があります。</para>
<programlisting>Alternatively, to load the driver as a module at boot time, place the
following line in &man.loader.conf.5;:
if_ath_load="YES"</programlisting>
<para><filename>/boot/loader.conf</filename>
<literal>if_ath_load="YES"</literal> を追加すると、
起動時にモジュールが読み込まれるようになります。</para>
<para>対応するモジュールが <filename
class="directory">/boot/kernel</filename> に存在しないこともあります。
特定のサブシステムでは、ほとんど多くの場合存在しません。</para>
</sect1>
<sect1 id="kernelconfig-devices">
<sect1info>
<authorgroup>
<!--<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>寄稿: </contrib>
</author>
</authorgroup>
</authorgroup>-->
</sect1info>
<title>システムのハードウェアについて知る</title>
<para>カーネルコンフィグレーションの冒険を始める前に、
<para>カーネルコンフィグレーションファイルの編集を始める前に、
コンピュータのハードウェア一覧を作成すると良いでしょう。
もし、&os; 以外のオペレーティングシステムがすでにインストールされているのであれば、
現在インストールされているオペレーティングシステムの設定を調べることで、
デュアルブートシステムでは
現在インストールされている別のオペレーティングシステムの設定を調べることで、
一覧を作成できます。
たとえば、&microsoft;
<application>デバイスマネージャ</application>
@ -160,18 +188,17 @@
<note>
<para>&microsoft.windows; のバージョンによっては、
<application>システム</application> アイコンを使って、
<application>デバイスマネージャ</application>
にアクセス可能なウィンドウを表示する
<application>システム</application> アイコンがあります。</para>
にアクセスできます。</para>
</note>
<para>もし他のオペレーティングシステムがコンピュータにインストールされていないのであれば、
管理者はこれらの情報を手動で収集する必要があります。
情報を集める方法のひとつが、&man.dmesg.8;
&man.man.1; を用いる方法です。
<para>インストールされているオペレーティングシステムが &os;
だけであれば、&man.dmesg.8; を使い、
起動時に検出されたハードウェアの一覧を調べてください。
&os; のほとんどのデバイスドライバにはマニュアルページが用意され、
対応しているハードウェアの一覧を提供しています。
また、起動時には検出されたハードウェアの一覧が表示されます。
たとえば、以下の行は、&man.psm.4;
ドライバがマウスを検出したことを示しています。</para>
@ -180,30 +207,26 @@ psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model Generic PS/2 mouse, device ID 0</programlisting>
<para>このドライバがカスタムカーネルコンフィグレーションファイルに含まれている
もしくは &man.loader.conf.5; によって読み込まれる必要があります</para>
<para>このハードウェアはシステムに存在するので
カスタムカーネルコンフィグレーションファイルからこのドライバを外さないでください</para>
<para>場合によっては、<command>dmesg</command> が起動時の検出結果ではなく、
システムメッセージだけを表示することがあります。
このような場合には、<filename>/var/run/dmesg.boot</filename>
で出力を確認できます。</para>
<para><command>dmesg</command> が起動時の検出結果を表示しない場合には、
かわりに <filename>/var/run/dmesg.boot</filename>
で出力を確認してください。</para>
<para>ハードウェアを見つけるためのもうひとつの方法は、
より冗長な出力を行う &man.pciconf.8; を用いる方法です。
<para>ハードウェアを見つけるためのもうひとつのツールは、
より冗長な出力を行う &man.pciconf.8; です。
たとえば、以下のようになります。</para>
<programlisting>ath0@pci0:3:0:0: class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
<programlisting><command>pciconf <option>-lv</option></command>
ath0@pci0:3:0:0: class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
vendor = 'Atheros Communications Inc.'
device = 'AR5212 Atheros AR5212 802.11abg wireless'
class = network
subclass = ethernet</programlisting>
<para>この出力は <command>pciconf <option>-lv</option></command>
を用いて得られ、
<devicename>ath</devicename>
ドライバがワイヤレスイーサネットデバイスにあることを示しています。
<command>man <replaceable>ath</replaceable></command> を実行して
&man.ath.4; を読んでください。</para>
<para>この出力は、<devicename>ath</devicename>
ドライバがワイヤレスイーサネットデバイスにあることを示しています。</para>
<para>&man.man.1;<option>-k</option> フラグで実行すると、
有用な情報を得ることができます。たとえば、
@ -215,260 +238,94 @@ psm0: model Generic PS/2 mouse, device ID 0</programlisting>
<programlisting>ath(4) - Atheros IEEE 802.11 wireless network driver
ath_hal(4) - Atheros Hardware Access Layer (HAL)</programlisting>
<para>ハードウェアの一覧を作っておくと、
カスタムカーネルを構築する過程であわてずにすむでしょう。</para>
</sect1>
<sect1 id="kernelconfig-modules">
<title>カーネルドライバ、サブシステムとモジュール</title>
<indexterm>
<primary>カーネル</primary>
<secondary>ドライバ / モジュール / サブシステム</secondary>
</indexterm>
<para>カスタムカーネルを構築する前に、再構築する理由を考えてください。
ある特定のハードウェアに対応することが目的であれば、
そのハードウェアに対応するためのモジュールがすでに用意されている場合には再構築の必要はありません。</para>
<para>カーネルモジュールは、
<filename class="directory">/boot/kernel</filename>
にあり、&man.kldload.8; によって、
すでに実行中のカーネルに動的に読み込まれているモジュールもあるかもしれません。
すべてというわけではありませんが、ほとんどのカーネルドライバには、
読み込み可能なモジュールやマニュアルページが用意されています。
たとえば、&man.ath.4;
ワイヤレスイーサネットドライバのマニュアルページには以下の記述があります。</para>
<programlisting>Alternatively, to load the driver as a module at boot time, place the
following line in &man.loader.conf.5;:
if_ath_load="YES"</programlisting>
<para><filename>/boot/loader.conf</filename>
<literal>if_ath_load="YES"</literal> を追加すると、
起動時にモジュールが読み込まれるようになります。</para>
<para>ただし、対応するモジュールが存在しないこともあります。
特定のサブシステムでは、ほとんど多くの場合存在しません。
ドライバが必要かどうかを知る一つの方法は、
モジュールそのものを調べることです。</para>
<warning>
<para>デバイスやオプションのサポートを外すことは簡単で、
その結果、カーネルを壊すことがあります。
たとえば、&man.ata.4; ドライバをカーネルコンフィグレーションファイルから除くと、
<acronym>ATA</acronym> ディスクドライバを用いるシステムは起動しません。
確信が持てないものについては、
カーネルにサポートを残したままにしてください。</para>
</warning>
</sect1>
<sect1 id="kernelconfig-building">
<title>カスタムカーネルの構築とインストール</title>
<indexterm>
<primary>カーネル</primary>
<secondary>構築 / インストール</secondary>
</indexterm>
<note>
<para>カーネルを構築するには、&os; のすべてのソースファイルが必要です。</para>
</note>
<para>カーネルを構築する場所は、<filename
class="directory">/usr/src/sys</filename> です。
ここには、カーネルの各部分を構成するサブディレクトリがいくつもあります。
その中には、カーネルコンフィグレーションファイルのある <filename
class="directory"><replaceable>arch</replaceable>/conf</filename>
および、カーネルを作る場所である <filename
class="directory">compile</filename> も含まれています。
<replaceable>arch</replaceable> には、
サポートされている各アーキテクチャ、<filename
class="directory">i386</filename>, <filename
class="directory">amd64</filename>, <filename
class="directory">ia64</filename>, <filename
class="directory">powerpc</filename>, <filename
class="directory">sparc64</filename> および <filename
class="directory">pc98</filename> のサブディレクトリがあります。
各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。
残りのコードは、アーキテクチャに依存しない、
すべてのプラットフォームで共有されるコードです。
サポートされているデバイス、ファイルシステム、オプションが、
それぞれのサブディレクトリに分かれている、
という論理的な構成に注意してください。</para>
<para>この章で示されるコマンドの例は、
i386 アーキテクチャを仮定しています。
他のアーキテクチャのシステムでは、
使用しているアーキテクチャに適したパス名に変更してください。</para>
<note>
<para>もし、<filename class="directory">/usr/src/</filename>
が存在していなかったり、空であれば、
カーネルのソースはインストールされていません。
ソースをインストールするもっとも簡単な方法は、<xref
linkend="svn"/> で説明した
<application>svn</application> を用いる方法です。
以下のように、<filename>/usr/src/sys/</filename>
へのシンボリックリンクも作成してください。</para>
<screen>&prompt.root; <userinput>ln -s /usr/src/sys /sys</userinput></screen>
</note>
<para>つぎに、<application>cd</application> を用いて <filename
class="directory"><replaceable>arch</replaceable>/conf</filename>
に移動し、
<filename>GENERIC</filename>
コンフィグレーションファイルをカスタムカーネルの名前にコピーしてください。
たとえば次のようにします。</para>
<screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf</userinput>
&prompt.root; <userinput>cp GENERIC <replaceable>MYKERNEL</replaceable></userinput></screen>
<para>慣習として、この名前はすべて大文字でつづられます。もし、
いくつかの異なるハードウェアの &os; マシンを扱うなら、
この名前にホスト名を含めるとよいでしょう。ここでは、例として
<filename><replaceable>MYKERNEL</replaceable></filename>
と呼ぶことにします。</para>
<tip>
<para>カーネルコンフィグレーションファイルの編集を終えたら、
ファイルのバックアップを <filename
class="directory">/usr/src</filename> 以外の場所に保存してください。
<filename>GENERIC</filename> ファイルを直接編集しないでください。</para>
<para>もしくは、カーネルコンフィグレーションファイルは他の場所において、
<filename
class="directory"><replaceable>i386</replaceable></filename>
にシンボリックリンクを張る方法もあります。</para>
<para>たとえば、次のようにします。</para>
<screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/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>
<para><filename><replaceable>MYKERNEL</replaceable></filename>
をテキストエディタで編集してください。
デフォルトのエディタは <application>vi</application> で、
使い方については、
<link linkend="bibliography">参考図書</link>
にあるような多くの本で詳しく説明されています。
そちらを参照してください。初心者に対してより簡単なエディタである
<application>ee</application>
も利用できます。
まずファイルの最初の方のコメント行を編集し、
設定内容や <filename>GENERIC</filename>
からの変更点を記述しておきましょう。</para>
<para>もし、<filename>GENERIC</filename>
コンフィグレーションファイルが親しみにくいのであれば、<link
linkend="kernelconfig-config">コンフィグレーションファイル</link>
の節をゆっくりと注意深く読んでください。</para>
<note>
<para>最新のソースと <link
linkend="svn">ソースツリーを同期</link> したら、
何らかのアップデートを行う前に、<emphasis>必ず</emphasis>
<filename>/usr/src/UPDATING</filename> をチェックしてください。
このファイルには、
アップデートされたソースコードに関する重要な問題や特別に注意すべき点がすべて書かれています。
<filename>/usr/src/UPDATING</filename> は常に &os;
のソースのバージョンと同期しているので、
ハンドブックの記述よりも新しい内容を含んでいます。</para>
</note>
<para>編集を保存したら、カーネルのソースコードをコンパイルしましょう。</para>
<procedure>
<title>カーネルの構築</title>
<note>
<para>カーネルを構築するには、&os; のすべてのソースファイルが必要です。</para>
</note>
<step>
<para><filename
class="directory">/usr/src</filename> ディレクトリに
<command>cd</command> で移動します。</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>
<tip>
<para>デフォルトでは、カスタムカーネルを構築すると
<emphasis>すべて</emphasis> のカーネルモジュールが再構築されます。
カーネルのアップデートをより早く行いたい、または、
カスタムモジュールのみを構築したいといった場合は、
カーネルの構築を開始する前に、以下のように <filename>/etc/make.conf</filename>
を編集してください。</para>
<programlisting>MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs</programlisting>
<para>この変数は、すべてのモジュールを構築するというデフォルトの設定にかわり、
構築するモジュール一覧を指定します。</para>
<programlisting>WITHOUT_MODULES = linux acpi sound ntfs</programlisting>
<para>この変数は、構築を行わないトップレベルのモジュールを指定します。
カーネルの構築プロセスに関連する、他の変数については、
&man.make.conf.5; を参照してください。</para>
</tip>
<indexterm>
<primary><filename
class="directory">/boot/kernel.old</filename></primary>
</indexterm>
<para>新しいカーネルは <filename
class="directory">/boot/kernel</filename>
<filename>/boot/kernel/kernel</filename> という名前でコピーされ、
今までのカーネルは <filename>/boot/kernel.old/kernel</filename>
という名前へ変更されます。
では、新しいカーネルを使うために、システムをシャットダウンして再起動してください。
うまく行かない場合は、
<link linkend="kernelconfig-trouble">問題が起きた場合には</link>
や、新しいカーネルが
<link linkend="kernelconfig-noboot">起動しない</link>
場合のリカバリの方法を参照してください。</para>
<note>
<para>ブートローダ (&man.loader.8;)
や設定などのブートプロセスに関係する他のファイルは、
<filename class="directory">/boot</filename> に置かれます。
サードパーティ製やカスタムモジュールを
<filename class="directory">/boot/kernel</filename> に置くこともできますが、
コンパイルしたカーネルとモジュールを同期しておく必要があります。
コンパイルしたカーネルとモジュールが対応していないと、
システムが不安定になる可能性があります。</para>
</note>
<para>ハードウェアの一覧を作成したら、
カスタムカーネルのコンフィグレーションファイルを編集している時に、
この一覧を利用して、
インストールされているハードウェアが削除されていないことを確認してください。</para>
</sect1>
<sect1 id="kernelconfig-config">
<sect1info>
<authorgroup>
<!--<authorgroup>
<author>
<firstname>Joel</firstname>
<surname>Dahl</surname>
<contrib>改訂: </contrib>
</author>
</authorgroup>
</authorgroup>-->
</sect1info>
<title>コンフィグレーションファイル</title>
<para> カスタムカーネルのコンフィグレーションファイルを作成し、
カスタムカーネルを構築するのであれば、
&os; の全ソースツリーがまずインストールされている必要があります。</para>
<para>もし、<filename class="directory">/usr/src/</filename>
が存在していなかったり、空であれば、
カーネルのソースはインストールされていません。
<xref
linkend="svn"/> で説明した
<application>svn</application> を使ってソースをインストールできます。
また、&man.sysinstall.8; を使って、
<literal>src</literal>
ディストリビューションからインストールすることもできます。
このディストリビューションは、&man.sysinstall.8;
<literal>Configuration</literal> を選択し、
<literal>Distributions</literal> メニューから選択できます。</para>
<para>ソースをインストールしたら、<filename
class="directory">/usr/src/sys</filename> を確認して下さい。
このディレクトリには、サブディレクトリがいくつもあります。
その中には、サポートされている各アーキテクチャである、<filename
class="directory">amd64</filename>, <filename
class="directory">i386</filename>, <filename
class="directory">ia64</filename>, <filename
class="directory">pc98</filename>, <filename
class="directory">powerpc</filename> および <filename
class="directory">sparc64</filename> のサブディレクトリがあります。
各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。
残りのコードは、アーキテクチャに依存しない、
すべてのプラットフォームで共有されるコードです。
サポートされている各アーキテクチャには、<filename
class="directory">conf</filename> サブディレクトリがあり、
そのアーキテクチャ用の <filename>GENERIC</filename>
カーネルコンフィグレーションファイルが用意されています。</para>
<para>この <filename>GENERIC</filename> は編集しないでください。
このファイルを別名でコピーし、コピーを編集してください。
慣習として、この名前はすべて大文字でつづられます。もし、
いくつかの異なるハードウェアの &os; マシンを扱うなら、
この名前にホスト名を含めるとよいでしょう。ここでは、例として
<literal>amd64</literal>
アーキテクチャのカスタムコンフィグレーションファイルを作成します。</para>
<screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>amd64</replaceable>/conf</userinput>
&prompt.root; <userinput>cp GENERIC <replaceable>MYKERNEL</replaceable></userinput></screen>
<tip>
<para>カーネルコンフィグレーションファイルの編集を終えたら、
ファイルのバックアップを <filename
class="directory">/usr/src</filename>
以外の場所に保存してください。</para>
<para>もしくは、カーネルコンフィグレーションファイルは他の場所において、
シンボリックリンクを張る方法もあります。</para>
<screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>amd64</replaceable>/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>
<para>これで、コンフィグレーションファイル
<filename><replaceable>MYKERNEL</replaceable></filename>
を ASCII テキストエディタで編集できます。
初心者に対してより簡単なエディタである
<application>ee</application>&os;
とともにインストールされていますが、
デフォルトのエディタは <application>vi</application> です。</para>
<indexterm>
<primary>カーネル</primary>
<secondary>NOTES</secondary>
@ -479,17 +336,21 @@ following line in &man.loader.conf.5;:
<secondary>コンフィグレーションファイル</secondary>
</indexterm>
<para>コンフィグレーションファイルの一般的なフォーマットはとてもシンプルです。
各行は 1 つのキーワードと 1 つ以上の引数を含んでいます。
見やすくするために、ほとんどのキーワードは引数を 1 つしか書いてありません。
<literal>#</literal> に続くものはすべてコメントとして扱われ、
無視されます。ここでは、それぞれのキーワードについて
<filename>GENERIC</filename> に出てくる順番で説明します。
アーキテクチャ依存のおびただしい数のオプション一覧については、
<para>コンフィグレーションファイルのフォーマットはシンプルです。
各行はデバイスやサブシステム、引数、または簡単な説明を含んでいます。
<literal>#</literal> に続くテキストはすべてコメントとして扱われ、
無視されます。
カーネルからデバイスもしくはサブシステムのサポートを外すには、
対応する行の最初に <literal>#</literal> を入れてください。
理解していない行に対しては、<literal>#</literal>
を追加したり削除しないでください。</para>
<para>このファイルで与えられる説明の他に、
そのアーキテクチャの <filename>GENERIC</filename>
と同じディレクトリにある <filename>NOTES</filename> ご覧ください。
と同じディレクトリにある
<filename>NOTES</filename> にも説明があります。
アーキテクチャに依存しないオプションについては、
<filename>/usr/src/sys/conf/NOTES</filename> ファイルをご覧ください。</para>
<filename>/usr/src/sys/conf/NOTES</filename> をご覧ください。</para>
<para>コンフィグレーションファイルでは <literal>include</literal>
ディレクティブを利用できます。
@ -517,9 +378,6 @@ options IPDIVERT
コンフィグレーションの構成要素に関する包括的な一覧と説明は
&man.config.5; にあります。</para>
<para>この章のここから先は、典型的なコンフィグレーションファイルの中身と、
さまざまなオプションやデバイスの役割について説明します。</para>
<note>
<para>利用可能なすべてのオプションを含むファイルを構築するには、
以下のコマンドを <username>root</username> 権限で実行してください。</para>
@ -527,46 +385,6 @@ options IPDIVERT
<screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>i386</replaceable>/conf &amp;&amp; make LINT</userinput></screen>
</note>
<indexterm>
<primary>カーネル</primary>
<secondary>コンフィグレーションファイル</secondary>
</indexterm>
<para>以下は必要に応じてコメントを追加した
<filename>GENERIC</filename> カーネルのコンフィグレーションファイルの例です。
この設定例は
<filename>/usr/src/sys/<replaceable>i386</replaceable>/conf/GENERIC</filename>
に極めて近いものになっているはずです。</para>
<indexterm>
<primary>カーネルオプション</primary>
<secondary>machine</secondary>
</indexterm>
<programlisting>machine i386</programlisting>
<para>マシンのアーキテクチャです。これは
<literal>amd64</literal>, <literal>i386</literal>,
<literal>ia64</literal>, <literal>pc98</literal>,
<literal>powerpc</literal> または
<literal>sparc64</literal>
のいずれかでなければなりません。</para>
<indexterm>
<primary>カーネルオプション</primary>
<secondary>cpu</secondary>
</indexterm>
<programlisting>cpu I486_CPU
cpu I586_CPU
cpu I686_CPU</programlisting>
<para>このオプションは、CPU タイプを指定します。
複数の CPU エントリを書いても構いませんが、
カスタムカーネルを作る場合、使用する CPU だけを指定するのがベストです。
CPU のタイプを判断するには、
<filename>/var/run/dmesg.boot</filename>
にある起動メッセージを調べるとよいでしょう。</para>
<indexterm>
<primary>カーネルオプション</primary>
<secondary>ident</secondary>
@ -579,20 +397,6 @@ cpu I686_CPU</programlisting>
のように、新しいカーネルに付けたい名前に書き換えて下さい。
<literal>ident</literal> に書いた値はカーネルを起動する時に表示されます。</para>
<programlisting>#To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC.hints" # Default places to look for devices.</programlisting>
<para>デバイスドライバのオプションは &man.device.hints.5;
を用いて設定されます。
デフォルトの場所は
<filename>/boot/device.hints</filename> です。
<literal>hints</literal> オプションを用いると、
カーネルにこれらのヒント情報を静的に加えてコンパイルするので、
<filename>device.hints</filename> を作成する必要はありません。</para>
<!-- XXX: Add a comment here that explains when compiling hints into
the kernel is a good idea and why. -->
<programlisting>makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols</programlisting>
<para>このオプションは &man.gcc.1;
@ -603,12 +407,6 @@ cpu I686_CPU</programlisting>
<para>&os; のデフォルトのスケジューラです。
このオプションはこのままにしてください。</para>
<programlisting>options PREEMPTION # Enable kernel thread preemption</programlisting>
<para>優先度の高いカーネルスレッドがプリエンプションできるようにします。
このオプションを使うことでインタラクティブになり、
待ち状態になるよりすぐに実行状態になるようスレッドの割り込みを許可します。</para>
<programlisting>options INET # InterNETworking</programlisting>
<para>ネットワークのサポート。
@ -995,7 +793,7 @@ device splash # Splash screen and screen saver support</programlist
<para>起動時のスプラッシュスクリーンおよびスクリーンセーバが必要とします。</para>
<programlisting># syscons is the default console driver, resembling an SCO console
<programlisting># syscons is the default console driver, resembling a SCO console
device sc</programlisting>
<para>&man.sc.4; は SCO に類似したデフォルトのコンソールドライバです。
@ -1396,6 +1194,115 @@ device fwe # Ethernet over FireWire (non-standard!)</programl
</sect2>
</sect1>
<sect1 id="kernelconfig-building">
<title>カスタムカーネルの構築とインストール</title>
<para>編集した内容を保存したら、
カーネルのソースコードをコンパイルしてください。</para>
<note>
<para>最新のソースと <link
linkend="svn">ソースツリーを同期</link> したら、
何らかのアップデートを行う前に、<emphasis>必ず</emphasis>
<filename class="directory">/usr/src/UPDATING</filename>
をチェックしてください。
このファイルには、
アップデートされたソースコードに関する重要な問題や特別に注意すべき点がすべて書かれています。
<filename>/usr/src/UPDATING</filename> は常に &os;
のソースのバージョンと同期しているので、
ハンドブックの記述よりも新しい内容を含んでいます。</para>
</note>
<warning>
<para>デバイスやオプションのサポートを外すことは簡単で、
その結果、カーネルを壊すことがあります。
たとえば、&man.ata.4;
ドライバをカーネルコンフィグレーションファイルから除くと、
<acronym>ATA</acronym> ディスクドライバを用いるシステムは起動しません。
確信が持てないものについては、
カーネルにサポートを残したままにしてください。</para>
</warning>
<procedure>
<title>カーネルの構築</title>
<indexterm>
<primary>カーネル</primary>
<secondary>構築 / インストール</secondary>
</indexterm>
<note>
<para>カーネルを構築するには、&os; のすべてのソースファイルが必要です。</para>
</note>
<step>
<para><command>cd</command> を用いて <filename
class="directory">/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>
<tip>
<para>デフォルトでは、カスタムカーネルを構築すると
<emphasis>すべて</emphasis> のカーネルモジュールが再構築されます。
カーネルのアップデートをより早く行いたい、または、
カスタムモジュールのみを構築したいといった場合は、
カーネルの構築を開始する前に、以下のように
<filename>/etc/make.conf</filename> を編集してください。</para>
<programlisting>MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs</programlisting>
<para>この変数は、
すべてのモジュールを構築するというデフォルトの設定にかわり、
構築するモジュール一覧を指定します。</para>
<programlisting>WITHOUT_MODULES = linux acpi sound ntfs</programlisting>
<para>この変数は、構築を行わないトップレベルのモジュールを指定します。
他の変数については、&man.make.conf.5; を参照してください。</para>
</tip>
<indexterm>
<primary><filename
class="directory">/boot/kernel.old</filename></primary>
</indexterm>
<para>新しいカーネルは <filename
class="directory">/boot/kernel</filename>
<filename>/boot/kernel/kernel</filename> という名前でコピーされ、
今までのカーネルは <filename>/boot/kernel.old/kernel</filename>
という名前へ変更されます。
では、新しいカーネルを使うために、システムをシャットダウンして再起動してください。
うまく行かない場合は、
<link linkend="kernelconfig-trouble">問題が起きた場合には</link>
や、新しいカーネルが
<link linkend="kernelconfig-noboot">起動しない</link>
場合のリカバリの方法を参照してください。</para>
<note>
<para>ブートローダ (&man.loader.8;)
や設定などのブートプロセスに関係する他のファイルは、
<filename class="directory">/boot</filename> に置かれます。
サードパーティ製やカスタムモジュールを
<filename class="directory">/boot/kernel</filename> に置くこともできますが、
コンパイルしたカーネルとモジュールを同期しておく必要があります。
コンパイルしたカーネルとモジュールが対応していないと、
システムが不安定になる可能性があります。</para>
</note>
</sect1>
<sect1 id="kernelconfig-trouble">
<title>問題が起きた場合には</title>