Catch up with the English version:

1.16 -> 1.37  books/handbook/boot/chapter.sgml
   1.82 -> 1.127 books/handbook/cutting-edge/chapter.sgml

Submitted by:	KOMACHI Mamoru <c10344@mail.ecc.u-tokyo.ac.jp>
Reference:	[doc-jp-work 419, 420]
This commit is contained in:
Hideyuki KURASHINA 2003-10-20 14:22:18 +00:00
parent 760e2bbcd5
commit 94d4398308
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=18502
2 changed files with 667 additions and 251 deletions
ja_JP.eucJP/books/handbook
boot
cutting-edge

View file

@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project
Original revision: 1.16
Original revision: 1.37
$FreeBSD$
-->
@ -13,76 +13,147 @@
<title>この章では</title>
<indexterm><primary>起動</primary></indexterm>
<indexterm><primary>ブートストラップ(bootstrap)</primary></indexterm>
<indexterm><primary>ブートストラップ (bootstrap)</primary></indexterm>
<para>FreeBSD は通常, 起動(bootstrap)を三段階に分けて行ないます.
これには基本的に, 互いに順番に呼び出される三つのプログラム(二つの
<link linkend="boot-blocks">起動ブロック(boot block)</link>と
<link linkend="boot-loader">ローダ(loader)</link>)が使われています.
これらのプログラムはそれぞれ,
その前に呼び出されるプログラムの情報に基づいて動作し,
より洗練された機能を提供します.</para>
<para>計算機を起動しオペレーティングシステムをロードするプロセスは,
<quote>ブートストラッププロセス</quote>,
もしくは単に <quote>起動</quote> と呼ばれます.
FreeBSD の起動プロセスを使えば,
システムをスタートするときに起きることを
かなり柔軟にカスタマイズすることができます.
同じ計算機にインストールされた
別のオペレーティングシステムを選択することもできますし,
同じオペレーティングシステムの違うバージョンを選択することも,
インストールされた別のカーネルを選択することさえできます.</para>
<indexterm><primary>カーネル(kernel)</primary></indexterm>
<para>この章では, 指定できる設定オプションと FreeBSD
の起動プロセスのカスタマイズ方法について詳しく述べます.
この章では FreeBSD カーネルがスタートし, デバイスを検出し,
&man.init.8; を起動するまでに起きることすべてを扱います.
どの最中のことだかはっきりしていない人のために補足すると,
テキストの色が明るい白から灰色に変わるまでに起きていることです.</para>
<para>この章を読むと, 以下のことが分かります.</para>
<itemizedlist>
<listitem>
<para>どのように FreeBSD のブートストラップシステムが構成され,
そしてそれらが互いにどう関係しているのか</para>
</listitem>
<listitem>
<para>起動プロセスを制御するために FreeBSD
のブートストラップの各要素に付加できるオプション</para>
</listitem>
</itemizedlist>
<note>
<title>x86 限定</title>
<para>この章では Intel x86 システム上で動作する FreeBSD
の起動プロセスだけを扱います.</para>
</note>
</sect1>
<sect1 id="boot-introduction">
<title>起動時の問題</title>
<para>計算機の電源を入れ, オペレーティングシステムをスタートさせるのには,
おもしろいジレンマがあります.
定義により, 計算機は
オペレーティングシステムがスタートするまで何もする方法を知りません.
ディスクからプログラムを動かすのも含みます.
では, 計算機はオペレーティングシステムなしに
ディスクからプログラムを実行することができず,
オペレーティングシステムのプログラムがディスク上にあるのなら,
どうやってオペレーティングシステムをスタートさせるのでしょう?</para>
<para>この問題は<citetitle>ほらふき男爵の冒険</citetitle>という本の中に
書かれている問題ととてもよく似ています.
登場人物がマンホールの下に半分落っこちて,
靴紐 (ブートストラップ) をつかんで自分を引っぱり, 持ち上げるのです.
計算機の黎明期には, <firstterm>ブートストラップ</firstterm>
という用語でオペレーティングシステムをロードする
機構のことを指していたのですが,
いまは短く <quote>起動 (ブート)</quote> と言います.</para>
<para>x86 ハードウェアでは, 基本入出力システム
(Basic Input/Output System: BIOS)
にオペレーティングシステムをロードする責任があります.
オペレーティングシステムをロードするために,
BIOS がハードディスク上のマスターブートレコード
(Master Boot Record: MBR)
を探します.
MBR はハードディスク上の特定の場所になければなりません.
BIOS には MBR をロードし起動するのに十分な知識があり,
オペレーティングシステムをロードするために必要な作業の残りは
MBR が実行できることを仮定しています.</para>
<indexterm>
<primary>BIOS</primary>
<secondary>基本入出力システム (Basic Input/Output System)</secondary>
</indexterm>
<para>ディスク上にオペレーティングシステムを一つだけ
インストールしているなら, 標準の MBR で十分です.
この MBR はディスク上の最初の起動可能なスライスを探し,
そのスライスにあるコードを起動して
残りのオペレーティングシステムをロードします.</para>
<para>ディスク上にオペレーティングシステムを複数インストールしているなら,
別の MBR &mdash;
複数のオペレーティングシステムのリストを表示できて,
起動するオペレーティングシステムを選択できるような MBR &mdash;
をインストールすることができます.
FreeBSD はそのような MBR とともに配布されており,
この MBR をインストールすることもできます.
他のオペレーティングシステムのベンダも
標準 MBR に代わる MBR を提供しています.</para>
<para>FreeBSD ブートストラップシステムの残りは 3 段階に分かれます.
第 1 ステージは MBR によって起動されるもので,
MBR は計算機を特定の状態にするために必要なことだけ知っていて,
第 2 ステージを起動します.
第 2 ステージでは, 第 3 ステージを起動する前に,
もうちょっとやることができます.
第 3 ステージでオペレーティングシステムのロード作業を完了します.
起動作業がこれらの 3 段階に分かれているのは,
PC の規格がステージ 1 とステージ 2
で実行できるプログラムのサイズに制限を課しているからです.
これらの作業をつなぎ合わせることによって,
FreeBSD はより柔軟なローダ (loader) を提供しているのです.</para>
<indexterm><primary>カーネル (kernel)</primary></indexterm>
<indexterm><primary><command>init</command></primary></indexterm>
<para>その後カーネルが起動し, デバイスの検出と初期化を行ないます.
<para>その後カーネルが起動し, デバイスの検出と初期化を開始します.
そしてカーネルの起動が終わると, 制御はユーザープロセスの
&man.init.8; へ移されます. &man.init.8; はまず
ディスクが利用可能であることを確かめ,
ファイルシステムのマウント,
ネットワークで利用するネットワークカードのセットアップ,
そして通常 FreeBSD システムで初期時に起動されるすべてのプロセスの起動,
といったユーザーレベルでのリソース(資源)設定を行ないます.</para>
といったユーザーレベルでのリソース (資源) 設定を行ないます.</para>
</sect1>
<sect1 id="boot-blocks">
<title>起動ブロック: 起動ステージ 1 および 2</title>
<para><firstterm>起動(bootstrap)</firstterm>とは,
コンピュータが接続されたデバイスを検出, 初期化し,
必要となるプログラムを動作させることを指します.</para>
<para>起動には起動の際の動作が記録された,
特殊な読み出し専用メモリチップを利用します.
その動作は通常,
メモリテストやデバイスの設定を行なう他のチップに制御を渡し,
そして設定された内容をプログラムに提供するというものです.</para>
<indexterm><primary>BIOS</primary></indexterm>
<indexterm><primary>CMOS</primary></indexterm>
<para>標準的な個人向けコンピュータでは,
BIOS (起動を行なう部分) と
CMOS (設定を記録する部分) によって起動を実現しています.
これらはディスクが存在すること,
そしてオペレーティングシステムをロードするためのプログラムが
ディスク上のどこにあるのかを認識しています.</para>
<para>この章では上に述べたような起動の初期の過程については扱いません.
焦点を合わせるのは,
ディスク上のプログラムに制御が移された後の内容についてです.</para>
<para>起動ブロックは(通常), ローダを見つけて実行する役割を持っています.
したがって, ファイルシステム上のプログラムを見つけること,
実行できること,
そしてその動作に関して最低限の設定が可能である必要があります.</para>
<title>MBR, 起動ステージ 1, 2 および 3</title>
<sect2 id="boot-boot0">
<title><filename>boot0</filename></title>
<title>MBR, <filename>/boot/boot0</filename></title>
<indexterm><primary>マスターブートレコード (MBR)</primary></indexterm>
<para>まず実際に最初にあるのは <filename>boot0</filename>
と呼ばれる起動ブロックです.
これは <firstterm>マスターブートレコード(MBR; Master Boot
Record)</firstterm> という,
システムが起動時にプログラムを検索するディスク上の特殊な部分に存在します.
この部分は, 単に起動可能なスライスのリストが格納されています.</para>
<para>FreeBSD の MBR は <filename>/boot/boot0</filename>
にあります. これは MBR の<emphasis>コピー</emphasis>であり,
本当の MBR はディスク上の特別な部分,
つまり FreeBSD 領域の外に置く必要があります.</para>
<para><filename>boot0</filename> は非常に単純なプログラムです.
これは, <abbrev>MBR</abbrev> にあるプログラムは
512 バイトの大きさでなければならないという制限があるためです.</para>
<para><filename>boot0</filename> は, 下のような出力をします.</para>
これは, <abbrev>MBR</abbrev> にあるプログラムは
512 バイトの大きさでなければならないという制限があるためです.
FreeBSD の MBR をインストールし,
かつハードディスク上に複数のオペレーティングシステムをインストールした場合,
起動時にこれと同じような画面が出るでしょう.</para>
<example id="boot-boot0-example">
<title><filename>boot0</filename> のスクリーンショット</title>
@ -95,78 +166,148 @@ F5 Drive 1
Default: F2</screen>
</example>
<para>他のオペレーティングシステム, 特に Windows 95 は,
既存の MBR を自らの MBR で上書きしてしまうことで知られています.
もしそうなってしまったら,
もしくは既存の MBR を FreeBSD の MBR で置き換えたいのなら,
次のコマンドを使ってください.</para>
<screen>&prompt.root; <userinput>fdisk -B -b /boot/boot0 <replaceable>device</replaceable></userinput></screen>
<para><replaceable>device</replaceable> は起動するデバイス名で,
例えば 1 番目の IDE ディスクは
<devicename>ad0</devicename>,
2 番目の IDE コントローラに接続されている 1 番目の IDE ディスクは
<devicename>ad2</devicename>,
1 番目の SCSI ディスクは
<devicename>da0</devicename>
などとなります.</para>
<para>しかしながら, もしあなたが Linux ユーザで,
<application>LILO</application>
で起動プロセスを制御したいのなら,
FreeBSD 用に <filename>/etc/lilo.conf</filename> を編集して,
FreeBSD のインストールの際
<option>マスターブートレコードを変更しない (Leave The Master Boot Record Untouched)</option>
を選択します.
FreeBSD のブートマネジャをインストールしたのであれば,
Linux を起動し直して
<application>LILO</application> の設定ファイル
<filename>/etc/lilo.conf</filename> を変更し,
次のオプションを加えることができます:</para>
<programlisting>other=/dev/hdXY
table=/dev/hdb
loader=/boot/chain.b
label=FreeBSD</programlisting>
<para>こうすれば, <application>LILO</application> から
FreeBSD と Linux を起動することができます.
この例では, ドライブ番号とパーティションを示すために
<replaceable>XY</replaceable> を使っています.
<acronym>SCSI</acronym> ドライブを使っているのであれば,
<replaceable>/dev/hdXY</replaceable> を
<replaceable>/dev/sdXY</replaceable> のように読み替えてください.
<replaceable>XY</replaceable> の指定方法は同じです.
<option>loader=/boot/chain.b</option>
は同じドライブ上に両方のオペレーティングシステムを置いてあるのであれば不要です.
これで <command>/sbin/lilo -v</command> を実行すると
システムに新しい変更が反映されるので,
画面のメッセージを見て確認します.</para>
</sect2>
<sect2 id="boot-boot1">
<title><filename>boot1</filename></title>
<title>起動ステージ 1 <filename>/boot/boot1</filename> と起動ステージ 2
<filename>/boot/boot2</filename></title>
<para><filename>boot1</filename> は起動スライス (slice) の起動セクタにあります.
<para>概念上, 第 1 ステージと第 2 ステージは
ハードディスクの同じ領域上の同一のプログラムの部分部分です.
スペースの制約のため 2 つに分割されていますが,
いつも一緒にインストールします.</para>
<para>第 1 ステージと第 2 ステージは起動スライス (slice)
の起動セクタにあります.
起動セクタとは,
<abbrev>MBR</abbrev> 上にある <link linkend="boot-boot0">boot0</link>
もしくは他のプログラムが, 起動のプロセスを続けるために
必要なプログラムがあると想定している場所です.</para>
必要なプログラムがあると想定している場所です.
<filename>/boot</filename>
ディレクトリにあるファイルは実際に使われるファイルのコピーで,
実際のファイルは
FreeBSD ファイルシステムの外部に格納されています.</para>
<para><filename>boot1</filename> も非常に単純なプログラムです.
これは <filename>boot0</filename> 同様に,
512 バイトの大きさでなければならないという制限があるためです.
boot1 は <link linkend="boot-boot2">boot2</link> を検索し,
boot1 は <filename>boot2</filename> を検索し,
実行するため, そのスライスの情報を保持する FreeBSD
の<firstterm>ディスクラベル(disklabel)</firstterm>
の<firstterm>ディスクラベル (disklabel)</firstterm>
に関する最低限の情報を持っています.</para>
</sect2>
<sect2 id="boot-boot2">
<title><filename>boot2</filename></title>
<para><filename>boot2</filename> はもう少し高機能です.
これは FreeBSDのファイルシステム上でファイルを見つける能力を持ち,
実行するカーネルやローダを指定するための簡単なインタフェイスを提供する事ができます.</para>
実行するカーネルやローダを指定するための
簡単なインタフェイスを提供します.</para>
<para><link linkend="boot-loader">ローダ(loader)</link>はさらに高機能なもので,
<para><link linkend="boot-loader">ローダ (loader)</link>
はさらに高機能なもので,
使いやすく簡単な起動設定が行なえる手段を提供します.
<filename>boot2</filename> は通常それを起動します.
以前の <filename>boot2</filename> は,
以前の <filename>boot2</filename> は,
カーネルを直接起動する機能しかありませんでした.</para>
<example id="boot-boot2-example">
<title><filename>boot2</filename> のスクリーンショット</title>
<screen>&gt;&gt; FreeBSD/i386 BOOT
Default: 0:wd(0,a)/kernel
Default: 0:ad(0,a)/kernel
boot:</screen>
</example>
<para>もし仮にインストールされた <filename>boot1</filename> と
<filename>boot2</filename> を変更したいのであれば,
&man.disklabel.8; を使ってください.</para>
<screen>&prompt.root; <userinput>disklabel -B <replaceable>diskslice</replaceable></userinput></screen>
<para><replaceable>diskslice</replaceable> は起動するディスクとスライスで,
例えば最初の IDE ディスクの 1 番目のスライスは
<devicename>ad0s1</devicename> となります.</para>
<warning>
<title>Dangerously Dedicated Mode</title>
<para>&man.disklabel.8; を使うとき,
<devicename>ad0</devicename> のようにディスク名だけを指定すると,
スライスを持たない危険な専用ディスクを作成してしまいます.
たぶん間違いなく, そうしたいわけではないでしょうから,
必ず <keycap>Return</keycap> キーを押す前に
&man.disklabel.8; コマンドを二重にチェックしてください.</para>
</warning>
</sect2>
</sect1>
<sect1 id="boot-loader">
<title>ローダ(loader): 起動ステージ 3</title>
<sect2 id="boot-loader">
<title>起動ステージ 3 <filename>/boot/loader</filename></title>
<indexterm><primary>ブートローダ(boot-loader)</primary></indexterm>
<indexterm><primary>ブートローダ (boot-loader)</primary></indexterm>
<para>ローダは三段階の起動プロセスの最終段階です.
ローダは通常, ファイルシステム上の
<filename>/boot/loader</filename>
として存在しています.</para>
<note>
<para><filename>/boot/boot0</filename>,
<filename>/boot/boot1</filename>,
<filename>/boot/boot2</filename> というファイルがありますが,
これらは <abbrev>MBR</abbrev>,
起動セクタ, ディスクラベルの実際のコピーではありません.</para>
</note>
<para>ローダは, よりさまざまなコマンド群をサポートした
強力なインタプリタによって提供される簡易組み込みコマンド群を利用することで,
ユーザが利用しやすい設定手段となるように設計されています.</para>
<sect2 id="boot-loader-flow">
<sect3 id="boot-loader-flow">
<title>ローダプログラムの処理の流れ</title>
<para>ローダは初期化の際にコンソールとディスクの検出を行ない,
どのディスクから起動しているかを調べます.
そして必要な変数を設定してからインタプリタを起動し,
簡易コマンドを解釈します.</para>
スクリプトからコマンドを送ったり手でコマンドを入力したりできます.</para>
<indexterm><primary>ローダ</primary></indexterm>
<indexterm><primary>ローダの設定</primary></indexterm>
@ -190,14 +331,14 @@ boot:</screen>
モジュールをロードしたりすることができます.
その後, 最終的な起動や再起動へ移行します.</para>
<para>この処理に関するより技術的な説明は
&man.loader.8; にあります.</para>
</sect2>
</sect3>
<sect2 id="boot-loader-commands">
<sect3 id="boot-loader-commands">
<title>ローダの組み込みコマンド</title>
<para>簡易コマンド群は, 次のようなもので構成されています.</para>
<para>もっともよく使われるローダのコマンドを以下に示します.
利用可能なコマンドをすべて知りたい場合,
&man.loader.8; を参照してください.</para>
<variablelist>
<varlistentry>
@ -342,9 +483,9 @@ boot:</screen>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect3>
<sect2 id="boot-loader-examples">
<sect3 id="boot-loader-examples">
<title>ローダの使用例</title>
<para>次にあげるのは, ローダの実践的な使用例です.</para>
@ -359,7 +500,7 @@ boot:</screen>
<listitem>
<para>普段使っているカーネルとモジュールをアンロードし,
古い(もしくは別の)カーネルをロードします.</para>
古い (もしくは別の) カーネルをロードします.</para>
<indexterm>
<primary><filename>kernel.old</filename></primary>
</indexterm>
@ -370,9 +511,9 @@ boot:</screen>
<para><filename>kernel.GENERIC</filename> とすると,
インストールディスクに入っていた
generic カーネルを指定することができます.
また, 直前にインストールされていたカーネル(たとえば,
また, 直前にインストールされていたカーネル (たとえば,
カーネルを自分で設定したり,
アップグレードしたりした場合)を指定するには
アップグレードしたりした場合) を指定するには
<filename>kernel.old</filename> とします.</para>
<note>
@ -385,33 +526,33 @@ boot:</screen>
</listitem>
<listitem>
<para>カーネルの設定スクリプト(通常,
カーネル起動時に設定される内容を自動化するスクリプト)をロードします.</para>
<para>カーネルの設定スクリプト (通常,
カーネル起動時に設定される内容を自動化するスクリプト) をロードします.</para>
<screen><userinput>load -t userconfig_script
<replaceable>/boot/kernel.conf</replaceable></userinput></screen>
<screen><userinput>load -t userconfig_script <replaceable>/boot/kernel.conf</replaceable></userinput></screen>
</listitem>
</itemizedlist>
</sect3>
</sect2>
</sect1>
<sect1 id="boot-kernel">
<title>カーネル起動時の応答</title>
<indexterm>
<primary>カーネル(kernel)</primary>
<primary>カーネル (kernel)</primary>
<secondary>起動時の応答</secondary>
</indexterm>
<para>カーネルが<link linkend="boot-loader">ローダ</link>(通常は)
か<link linkend="boot-boot2">boot2</link>
(ローダを迂回して)によってロードされると,
<para>カーネルが<link linkend="boot-loader">ローダ</link> (通常は)
か<link linkend="boot-boot1">boot2</link>
(ローダを迂回して) によってロードされると,
起動フラグを調べます.
もし起動フラグがあれば, それに応じて動作を調整します.</para>
<sect2 id="boot-kernel-bootflags">
<title>カーネル起動フラグ</title>
<indexterm>
<primary>カーネル(kernel)</primary>
<primary>カーネル (kernel)</primary>
<secondary>起動フラグ</secondary>
</indexterm>
@ -488,7 +629,7 @@ boot:</screen>
<envar>init_path</envar> 変数で指定される場所にあります.</para>
<sect2 id="boot-autoreboot">
<title>自動再起動(automatic reboot)の動作</title>
<title>自動再起動 (automatic reboot)の動作</title>
<para>自動再起動では,
システム上で利用できるファイルシステムの一慣性を確認します.
@ -501,37 +642,36 @@ boot:</screen>
<title>シングルユーザモード</title>
<indexterm><primary>シングルユーザモード</primary></indexterm>
<indexterm><primary>コンソール(console)</primary></indexterm>
<indexterm><primary>コンソール (console)</primary></indexterm>
<para>このモードには,
<link linkend="boot-autoreboot">自動再起動</link>の処理中か,
ユーザが起動時に <option>-s</option> を指定た場合,
ユーザが起動時に <option>-s</option> オプションを指定た場合,
あるいは <command>loader</command> で
<envar>boot_single</envar> 変数を設定することによって移行します.</para>
<para>また,
<link linkend="boot-multiuser">マルチユーザモード</link>から
再起動オプション(<option>-r</option>)
や停止(halt)オプション(<option>-h</option>)なしで
再起動オプション (<option>-r</option>)
や停止 (halt) オプション (<option>-h</option>) なしで
<command>shutdown</command> を呼び出すとこのモードに移行します.</para>
<para><filename>/etc/ttys</filename>
でシステムコンソール <literal>console</literal>
が <literal>insecure</literal> に設定されている場合,
システムはシングルユーザモードに移行する前に
root のパスワードを入力するように求めます.</para>
<username>root</username> のパスワードを入力するように求めます.</para>
<example id="boot-insecure-console">
<title>/etc/ttys の insecure コンソール</title>
<programlisting># name getty type status comments
#
# This entry needed for asking password when init goes to single-user mode
# If you want to be asked for password, change "secure" to "insecure" here
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
#
# 訳) このエントリは init がシングルユーザモードへ移行する際にパスワードを要
# 求させるために必要です. もし, パスワードの要求を望む場合, ここの "secure" を
# "insecure" へ変更してください.
# 訳) console に "insecure" という印をつけると, シングルユーザモードへ移行する
# 際に init が root のパスワードを要求するようになります.
#
console none unknown off insecure</programlisting>
</example>
@ -539,7 +679,9 @@ console none unknown off insecure</programlisting>
<note>
<para><literal>insecure</literal> コンソールとは,
あなた自身, コンソールが物理的に安全でないと考えていて,
root パスワードを知る人だけがシングルユーザモードを使えるようにしたいという意味であり,
<username>root</username>
のパスワードを知る人だけがシングルユーザモードを
使えるようにしたいという意味であり,
コンソールを安全でない状態で使いたいという意味ではありません.
そのため, 安全性を求めるならば
<literal>secure</literal> でなく
@ -557,7 +699,7 @@ console none unknown off insecure</programlisting>
リソースの設定を始めます.</para>
<sect3 id="boot-rc">
<title>リソース設定(rc)</title>
<title>リソース設定 (rc)</title>
<indexterm><primary>rc ファイル群</primary></indexterm>

View file

@ -2,18 +2,44 @@
The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project
Original revision: 1.82
Original revision: 1.127
$FreeBSD$
-->
<chapter id="cutting-edge">
<chapterinfo>
<authorgroup>
<author>
<firstname>Jim</firstname>
<surname>Mock</surname>
<contrib>再構成, 再編成および改訂</contrib>
</author>
<!-- Mar 2000 -->
</authorgroup>
<authorgroup>
<author>
<firstname>Jordan</firstname>
<surname>Hubbard</surname>
<contrib>原作</contrib>
</author>
<author>
<firstname>Poul-Henning</firstname>
<surname>Kamp</surname>
</author>
<author>
<firstname>John</firstname>
<surname>Polstra</surname>
</author>
<author>
<firstname>Nik</firstname>
<surname>Clayton</surname>
</author>
</authorgroup>
<!-- with feedback from various others -->
</chapterinfo>
<title>開発の最前線</title>
<para><emphasis>改訂: &a.jim;, 2000 年 3 月.</emphasis></para>
<para><emphasis>原作: &a.jkh;, &a.phk;, &a.jdp;, &a.nik;,
およびたくさんのフィードバック.</emphasis></para>
<sect1>
<title>この章では</title>
@ -27,6 +53,32 @@
もしもあなたが, 開発途中のシステムを追いかけようか,
それともリリースバージョンのどれかを使い続けようかと迷っているのなら,
きっとこの章が参考になるでしょう.</para>
<para>この章を読んで分かるのは:</para>
<itemizedlist>
<listitem><para>2つの開発ブランチ, &os.stable; と &os.current; の違い</para>
</listitem>
<listitem><para><application>CVSup</application>,
<application>CVS</application>, もしくは
<application>CTM</application>
を使ったシステム更新方法</para>
</listitem>
<listitem><para><command>make world</command>
を使ってベースシステム全体を再構築しインストールする方法</para>
</listitem>
</itemizedlist>
<para>この章を読む前に, 以下の準備をしましょう.</para>
<itemizedlist>
<listitem><para>ネットワーク接続の適切な設定 (<xref
linkend="advanced-networking">)</para>
</listitem>
<listitem><para>サードパーティ製のソフトウェアのインストール方法の習得
(<xref linkend="ports">)</para></listitem>
</itemizedlist>
</sect1>
<sect1 id="current-stable">
@ -48,16 +100,16 @@
<para>これを読む前に,
心にとめておいて欲しいことがあります.
&os.current; とは &os; の開発の<quote>最前線</quote>だということです.
&os.current; とは &os; の開発の <quote>最前線</quote> だということです.
&os.current; のユーザは高い技術力を持つことが要求され,
自分のシステムが抱える困難な問題を自力で解決できなければなりません.
もし &os; を使い始めたばかりなら,
これを運用することについて十分検討を重ねた方が良いでしょう.</para>
<sect3>
<title>&os.current; ってなに?</title>
<para>&os.current; とは文字通り,
日々変更されている
&os; のソースのスナップショット以外の何ものでもありません.
<para>&os.current; は &os; の最新の, そして作業進行中のソースです.
中には現在開発途上のソフトウェア,
実験的な変更, あるいは過渡的な機能などが含まれています.
また, この中に入っている機能がすべて,
@ -65,43 +117,40 @@
&os.current; をソースからほぼ毎日コンパイルしている人は
たくさんいますが,
時期によってはコンパイルさえできない状態になっていることもあります.
一般的に, これらの問題は可能な限り迅速に解決されますが,
&os.current; のソースが不幸をもたらすか,
それとも非常に素晴らしい機能をもたらすかというのは文字通り,
ある与えられた 24
時間の間の,
どの部分であなたがソースを手に入れたかによる場合もあるのです.</para>
これらの問題は可能な限り迅速に解決されますが,
&os.current; が不幸をもたらすか,
それとも非常に素晴らしい機能をもたらすかは,
まさにソースコードを手に入れた瞬間によるのです!</para>
</sect3>
<sect3>
<title>誰が &os.current; を必要としてるの?</title>
<para>&os.current; は,
主に次の三つの重要なグループを対象としています.</para>
次の三つの重要なグループを対象としています.</para>
<orderedlist>
<listitem>
<para>ソースツリーのある部分に関して活発に作業している
&os; グループのメンバ.
彼らにとっては<quote>最新のもの</quote>にしておくのが
彼らにとっては <quote>最新のもの</quote> にしておくのが
絶対に必要なことなのです.</para>
</listitem>
<listitem>
<para>活発にテストしている &os; グループのメンバ.
彼らは, &os.current;
<quote>健全である</quote>ことを可能な限り確認するために,
種々の問題と戦う時間を惜しまない人々です.
<quote>健全である</quote> ことを可能な限り保証するために,
種々の問題を解決するのに時間を惜しまない人々です.
彼らはまた, 様々な変更に関する提案や
&os; の大まかな方向付けを行ないたいと思っている
人々でもあります.</para>
人々でもあり, それを実装するためのパッチを提示します.</para>
</listitem>
<listitem>
<para>単に, 様々な事に目を向け, 参考のために
(たとえば動かすためではなく<emphasis>読むため</emphasis>に)
最新のソースを使いたいと思っている &os;
(または他の) グループのまわりにいるメンバ.
最新のソースを使いたいと思っている人々.
これらの人々はまた,
時々コメントやコードを寄稿してくれます.</para>
</listitem>
@ -116,30 +165,34 @@
<listitem>
<para>なにか新しくカッコイイモノがあると聞き,
自分の周囲では一番にそれを持ちたいがために,
リリース前のコードの断片を追いかけること.</para>
リリース前のコードの断片を追いかけること.
新しい機能を得るために一番乗りになるということは,
新しいバグに最初にぶち当たるということです.</para>
</listitem>
<listitem>
<para>バグを修正するための素早い方法.</para>
<para>バグを修正するための素早い方法.
いかなるバージョンの &os.current; であれ,
元からあるバグを修正するのと同じく,
新しいバグを生み出すおそれがあります.</para>
</listitem>
<listitem>
<para>わたしたちが<quote>公式にサポートする</quote>こと.
わたしたちは 3 つの<quote>公式な</quote>
<para><quote>公式にサポートする</quote> こと.
わたしたちは 3 つの <quote>公式な</quote>
&os.current; のグループの一つに,
実際に属する人々を助けるのにベストを尽くしますが,
技術的なサポートを行なうには, 単に「時間が足りない」のです.
これはわたしたちが外の人を助けるの好まない,
ケチで意地悪い人間だということではなく
(もしそうなら &os; なんかやっていません),
文字通りわたしたちは一日に 400 ものメッセージに答え,
ケチで意地悪い人間だということではありません
(もしそうなら &os; なんてやっていません).
わたしたちは一日に何百通ものメッセージに答え,
<emphasis>かつ</emphasis> &os;
の作業をすることなど出来ない!
ということなのです.
というだけのことなのです.
もし, &os; の改良作業を続けるか,
それともたくさんの質問に答えるか,
という二者択一が与えられたとしたら,
開発者とユーザのほとんどは前者を支持するでしょう.</para>
それとも実験的なコードに関するたくさんの質問に答えるか,
という二つの選択を迫られたら, 開発者は前者を選ぶでしょう.</para>
</listitem>
</orderedlist>
</sect3>
@ -185,7 +238,7 @@ subscribe cvs-all</programlisting>
<literal>help</literal>
と書けば, Majordomo からあなたへ,
わたしたちがサポートする様々なメーリングリストに参加
/脱退する方法に関する, 詳しいヘルプが送られます.</para>
/脱退する方法に関する詳しいヘルプが送られます.</para>
</listitem>
<listitem>
@ -209,15 +262,16 @@ subscribe cvs-all</programlisting>
<para><link linkend="cvsup">cvsup</link> を
<ulink url="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/examples/cvsup/standard-supfile">この supfile</ulink>
を用いて使用する.
これは 2 番目に推薦される方法です.
これがもっとも推奨される方法です.
なぜなら, <command>cvsup</command> によって一度全体を入手し,
後は変更されたところだけを入手することができるからです.
たくさんの人が自動的にソースを最新のものに保つために
<command>cvsup</command> を <command>cron</command> から起動しています.
これを行なうための非常に簡単な方法は, 単に</para>
<blockquote><screen>&prompt.root; <userinput>pkg_add -f ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupit.tgz</userinput></screen></blockquote>
<para>とタイプすることです.</para>
上に挙げたサンプル supfile はカスタマイズして, 環境に合わせて
<link linkend="cvsup">cvsup</link> を設定する必要があります.
その設定を行なうのにヘルプが必要であれば, 単に</para>
<screen>&prompt.root; <userinput>pkg_add -f ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/All/cvsupit-3.1.tgz</userinput></screen>
<para>とタイプしてください.</para>
</listitem>
<indexterm>
@ -230,9 +284,8 @@ subscribe cvs-all</programlisting>
&os.current; のソースツリーは常に
<ulink url="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/">
ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/</ulink>
で<quote>公開</quote>されています.
わたしたちはまた, 全体を compress/tar して入手できる
<command>wu-ftpd</command> を使っています.
で <quote>公開</quote> されています.
全体を compress/tar して入手できる FTP ミラーもあります.
たとえば,</para>
<screen>usr.bin/lex</screen>
@ -326,13 +379,23 @@ subscribe cvs-all</programlisting>
<para>もしあなたが FreeBSD の開発過程に興味があるとか,
それに対する貢献を考えていて, 特にそれが
次回の<quote>ポイント</quote>リリースに関係するもの
次回の <quote>ポイント</quote> リリースに関係するもの
であるなら &os.stable; を追うことを考えると良いでしょう.</para>
<para>セキュリティ上の修正は &os.stable; ブランチに対して行なわれますが,
そのために &os.stable; を追う<emphasis>必要</emphasis>はありません.
すべての FreeBSD セキュリティ勧告には
影響のあるリリースで問題点を修正する方法が説明されており,
影響のあるリリースで問題点を修正する方法が説明されており
<footnote><para>これは正確ではありません.
実際わたしたちは何年もの間古いリリースの FreeBSD
をサポートしてはいるのですが,
永遠にサポートし続けることはできません.
現時点での古いリリースの FreeBSD のセキュリティポリシーの全説明を知るには,
<ulink
url="../../../../security/index.html">http://www.FreeBSD.org/security/</ulink>
を参照してください</para>
</footnote>
,
セキュリティ上の理由のみから開発用ブランチ全体を追いかけることは,
同時に望ましくない変更点まで取り込んでしまう可能性があるからです.</para>
@ -411,19 +474,6 @@ subscribe cvs-all</programlisting>
<orderedlist>
<indexterm>
<primary><command>CTM</command></primary>
</indexterm>
<indexterm>
<primary>-STABLE</primary>
<secondary>CTM を使った同期</secondary>
</indexterm>
<listitem>
<para><application><link linkend="ctm">CTM</link></application>
機能を使用する. 転送レートが安定している TCP/IP
接続でない場合は, この方法が適しています.</para>
</listitem>
<indexterm>
<primary>-STABLE</primary>
<secondary>CVSup を使った同期</secondary>
</indexterm>
@ -431,9 +481,8 @@ subscribe cvs-all</programlisting>
<para><link linkend="cvsup">cvsup</link> を
<ulink url="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/examples/cvsup/stable-supfile">この supfile</ulink>
を用いて使用する.
一度コレクション全体を入手してしまえば,
前回からの変更部分だけですむので, 2
番目に推奨される方法です.
一度コレクション全体を入手してしまえば前回からの変更部分だけですむので,
もっとも推奨される方法です.
多くの人が <command>cron</command> から <command>cvsup</command> を実行し,
自動的にソースコードを最新の状態に保っています.
これを簡単に扱うには次のようにタイプしてください.</para>
@ -448,12 +497,12 @@ subscribe cvs-all</programlisting>
<listitem>
<para><command>ftp</command> を使用する. &os.stable;
用のソースツリーは
常に次のところで<quote>公開</quote>されています:
常に次のところで <quote>公開</quote> されています:
<ulink url="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable/">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable/</ulink></para>
<para>私たちはまた, tar/compress
でツリー全体を入手できる <command>wu-ftpd</command>
を使用しています. 例えば :</para>
<para>compress/tar でツリー全体を入手できる
FTP ミラーもあります.
例えば:</para>
<screen>usr.bin/lex</screen>
@ -465,8 +514,18 @@ subscribe cvs-all</programlisting>
<para>とすることにより, ディレクトリ全体を tar
ファイルとして入手することができます.</para>
</listitem>
</orderedlist>
</listitem>
<indexterm>
<primary>-STABLE</primary>
<secondary>CTM を使って同期する</secondary>
</indexterm>
<listitem>
<para><application><link
linkend="ctm">CTM</link></application> 機能を使います.
インターネットへの接続に高速で安価な回線を利用できないのであれば,
この方法を検討してみましょう.</para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>基本的には,
@ -580,14 +639,9 @@ subscribe cvs-all</programlisting>
<application>Anonymous CVS</application>
はおそらく他の何よりも深く混乱してしまうことが多いでしょう.
もしソースツリーの一部を消してしまったら, (最新の CVS
<quote>ベースデルタ</quote>から) 一からやり直し, CTM か anoncvs
<quote>ベースデルタ</quote> から) 一からやり直し, CTM か anoncvs
を使って悪い部分を消去し, 再同期させることによって
すべてを再構築しなければなりません.</para>
<para><application>Anonymous CVS</application>,
<application>CTM</application>, <application>CVSup</application>
についての 詳しい情報については,
以下の節を参照してください.</para>
</sect1>
<sect1 id="makeworld">
@ -639,18 +693,15 @@ subscribe cvs-all</programlisting>
<para>万が一, このような問題が生じた場合,
問題の詳細と, どのようなシステムが影響を受けるかについて書かれた
<quote>注意(heads up)</quote>の記事が
<quote>注意 (heads up)</quote> の記事が
適切なメーリングリストに投稿され, そして, その問題が解決されると,
<quote>問題解決(all clear)</quote>のアナウンス記事が同様に
<quote>問題解決 (all clear)</quote> のアナウンス記事が同様に
投稿されます.
</para>
<para>&os.stable; や &os.current; ブランチを試したり, それらに
追随していくときに
<email>FreeBSD-stable@FreeBSD.ORG</email> や
<email>FreeBSD-current@FreeBSD.ORG</email>
を読まないというのは, 自ら災難を招くことになるでしょう.
</para>
<para>&os.stable; や &os.current; ブランチに追随するために試そうとするのに,
&a.stable; や &a.current; を過去にさかのぼって読まないというのは,
自ら災難を招くことになるでしょう.</para>
<para><emphasis>訳注:</emphasis>
これらのメーリングリストは英語でやりとりされているため,
@ -706,7 +757,7 @@ subscribe cvs-all</programlisting>
</sect2>
<sect2>
<title><filename>/etc/group</filename> の更新</title>
<title><filename>/etc</filename> にあるファイルの更新</title>
<para>
<filename>/etc</filename> ディレクトリには,
@ -726,18 +777,18 @@ subscribe cvs-all</programlisting>
<quote>make world</quote> のインストールの段階では,
特定のユーザ名, あるいはグループが存在していることを
要求する場面があります. システムのアップグレードを行なう際には,
それらのグループが削除, あるいは変更されて存在していない可能性が
それらのユーザ名やグループが削除, あるいは変更されて存在していない可能性が
考えられますが, そういった場合, システムのアップグレードを
行なっている間に, 問題が発生する原因になります.
</para>
<para>この種の例でもっとも記憶に新しいのは,
<quote/ppp/ グループ(後に <quote/network/ に変更されました)が
追加された時です.
<filename>ppp</filename> サブシステムがインストールされる時,
そのサブシステムが利用する <quote/ppp/ グループが存在しなかったために,
それらのインストールに失敗してしまったのです.
</para>
<para>この例で記憶に新しいのは,
<username>smmsp</username> ユーザが追加された時です.
<command>mtree</command> が
<filename>/var/spool/clientmqueue</filename>
を作成しようとする時,
そのユーザ名 (およびグループ)
が存在しないためにインストールに失敗してしまったのです.</para>
<para>解決方法は, <filename>/usr/src/etc/group</filename> を調べ,
自分のシステムのグループ名リストと比較することです.
@ -750,6 +801,18 @@ subscribe cvs-all</programlisting>
該当するすべてのグループ名を変更しておかなければなりません.
</para>
<para>4.6-RELEASE からは, buildworld の前に <option>-p</option>
をつけて &man.mergemaster.8; を実行してもよいです.
これを実行すると, <maketarget>buildworld</maketarget> や
<maketarget>installworld</maketarget>
が成功するために必要なファイルだけを比較します.
古いバージョンの <command>mergemaster</command>
を使っていて, <option>-p</option> がサポートされていない場合,
最初に実行するときソースツリーにある新しいバージョンのものを使ってください.</para>
<screen>&prompt.root; <userinput>cd /usr/src/usr.sbin/mergemaster</userinput>
&prompt.root; <userinput>./mergemaster.sh -p</userinput></screen>
<tip>
<para>もし, あなたがもっと神経質な人なら, あなたが名前を変更したり,
削除してしまったグループが所有しているファイルを,
@ -804,6 +867,19 @@ subscribe cvs-all</programlisting>
それ以外の UFS ファイルシステムをすべてマウントしてから
スワップを有効にします.
</para>
<note>
<para>CMOS クロックが地域時間に設定されていて
GMT ではない場合,
次のコマンドを実行する必要があるかもしれません.</para>
<screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen>
<para>こうすれば,
確実に地域時刻が正しく設定されます &mdash; これを怠ると,
あとあと問題になるかもしれません.</para>
</note>
</sect2>
<sect2>
@ -861,7 +937,7 @@ Script done, &hellip;</screen>
<username>root</username> のホームディレクトリが適しています.</para>
</sect3>
<sect3>
<sect3 id="make-buildworld">
<title>ベースシステムの構築とインストール</title>
<para>まず, カレントディレクトリを <filename>/usr/src</filename> に
@ -920,7 +996,7 @@ Script done, &hellip;</screen>
どのように動作するのかを指示するためのものです.
各々の <filename>Makefile</filename> には, 数多くの異なる
<quote>ターゲット(target)</quote> が定義されていて,
指定されたターゲットによって, 動作が決まります.
指定されたターゲットによって動作が決まります.
</para>
<para>
@ -957,7 +1033,7 @@ Script done, &hellip;</screen>
これは, 二つの理由から非常に有用です.
まず第一に, 稼働中のシステムに全く影響を与えることなく,
安全にシステムの構築作業を行えることです.
構築作業は<quote>何にも依存せず独立して行なわれる</quote>ため,
構築作業は <quote>何にも依存せず独立して行なわれる</quote> ため,
<!-- hrs:2000/02/14: needs good phrase that means "self hosted" -->
マルチユーザモードで稼働中のシステムでも, 何一つ
悪影響を与えずに <maketarget>buildworld</maketarget> を
@ -987,8 +1063,9 @@ Script done, &hellip;</screen>
<screen>&prompt.root; <userinput>make buildworld</userinput></screen>
<para>を実行してください. ここで <command>make</command> に
-j オプションをつけると, 同時にいくつかのプロセスを生成させることが
できます. この機能はマルチ CPU マシンで特に効果を発揮します.
<option>-j</option> オプションをつけると,
同時にいくつかのプロセスを生成させることができます.
この機能はマルチ CPU マシンで特に効果を発揮します.
構築過程の大部分では CPU 性能の限界より
I/O 性能の限界の方が問題となるため, シングル CPU
マシンにも効果があります.</para>
@ -1022,10 +1099,10 @@ Script done, &hellip;</screen>
</indexterm>
<para>構築時間を決める要素はさまざまありますが,
現時点では Pentium 3 の 500MHz, 128MB の RAM という構成で
現時点では Pentium III の 500 MHz, 128 MB の RAM という構成で
トリックや近道を使わずに普通に構築した場合,
&os.current; の構築に約 3 時間半かかります.
&os.stable; の構築は, もう少し早く終わります.</para>
&os.stable; の構築に約 2 時間かかります.
&os.current; の構築は, もう少し時間がかかります.</para>
</sect3>
</sect2>
@ -1057,15 +1134,18 @@ Script done, &hellip;</screen>
<para>もし &os; 4.0 以降のシステムにアップグレードする場合,
(<xref linkend="kernelconfig"> に記載されている)
標準的なカーネル構築手順は使えません.
代わりに, 以下のコマンドを実行する必要があります.</para>
古いカーネル構築手順はおすすめできません.
代わりに,
<link linkend="make-buildworld"><maketarget>buildworld</maketarget>
を使ってシステムを構築</link>した<emphasis>あと</emphasis>に,
以下のコマンドを実行してください.</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildkernel</userinput>
&prompt.root; <userinput>make installkernel</userinput></screen>
<para>&os; の 4.0 以前にアップグレードする場合は,
標準的なカーネル構築手順に従う必要があります.
古いカーネル構築手順に従う必要があります.
ただし, 以下のコマンドを使って新しいバージョンの
&man.config.8; を利用することが推奨されています.</para>
@ -1094,7 +1174,8 @@ Script done, &hellip;</screen>
<para>それには, 以下のコマンドを実行してください.</para>
<screen>&prompt.root; <userinput>make installworld</userinput></screen>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make installworld</userinput></screen>
<note>
<para><command>make buildworld</command> でコマンドラインから
@ -1129,25 +1210,98 @@ Script done, &hellip;</screen>
新規に導入されたり, 変更された設定ファイルによる
ファイルの更新は行なわれません.</para>
<indexterm><primary><command>mergemaster</command></primary></indexterm>
<para>
これらのファイルを更新するもっとも簡単な方法は, &man.mergemaster.8;
を使うことです. これは自分でやることも可能なので, そうしても
かまいません.
&man.mergemaster.8; は簡単に使えるので, こちらを使うことを
お勧めします. その場合には <link linkend="update-dev">
次のセクション</link> に進んでください.
まず最初にマニュアルページを読んで, <filename>/etc</filename>
いずれの方法に従うにせよ,
必ず <filename>/etc</filename>
のバックアップを取って不測の事態に備えてください.
</para>
<sect3>
<title><command>mergemaster</command></title>
<indexterm><primary><command>mergemaster</command></primary></indexterm>
<para>&man.mergemaster.8; ユーティリティは Bourne シェルスクリプトで,
<filename>/etc</filename> にある設定ファイルとソースツリーの
<filename>/usr/src/etc</filename> にある設定ファイルの違いを確認するのを手伝ってくれます.
これを使うのが, ソースツリーにある設定ファイルにシステムの設定ファイルを
更新するために推奨される方法です.</para>
<para><command>mergemaster</command> は
3.3-RELEASE と 3.4-RELEASE の間に FreeBSD
のベースシステムに統合されました.
つまり, 3.3 以降の -STABLE と -CURRENT のシステムにはすべて
これがあるということです.</para>
<para>始めるには, プロンプトから単に
<command>mergemaster</command> と入力して,
ファイルの比較を開始するのを見てください.
<command>mergemaster</command> は
<filename>/</filename> を起点とした一時的なルート環境を構築し,
さまざまなシステム設定ファイルを
(訳注: デフォルトでは <filename>/var/tmp/temproot</filename> に)
置いていきます.
次にこれらのファイルは現在システムにインストールされているファイルと比較されます.
この時点で, 異なるファイルは &man.diff.1; 形式で示され,
<option>+</option> の記号は追加または変更された行を表し,
<option>-</option> は完全に削除されたか新しく置き換えられた行を表します.
&man.diff.1; の書式とファイルの違いの表示方法についてのより詳しい情報は,
&man.diff.1; を参照してください.</para>
<para>&man.mergemaster.8; は食い違いが起きているファイルをそれぞれ示します.
ここでは新しいファイル (一時ファイルとして参照されています) を削除するか,
一時ファイルをそのままインストールするか,
一時ファイルと現在インストールされているファイルを統合するか,
もしくは &man.diff.1; の結果をもう一度見るか選択できます.</para>
<para>一時ファイルの削除を選ぶと, &man.mergemaster.8;
に現在のファイルを変更しないで新しいバージョンを削除せよと伝えます.
この選択は, 現在のファイルを変更する理由が分からないのであれば,
お勧めできません.
mergemaster のプロンプトで <option>?</option> とタイプすれば,
いつでもヘルプが見られます.
ファイルのスキップを選ぶと, 他のすべてのファイルを終えたあと,
もう一度そのファイルが提示されます.</para>
<para>一時ファイルをそのままインストールすることを選ぶと,
現在のファイルを新しいファイルで置き換えます.
ほとんどの手を加えていないファイルは,
これが一番よい選択です.</para>
<para>ファイルの統合を選んだ場合,
テキストエディタが起動され, 両方のファイルの中身が提示されます.
画面上に並ぶ両方のファイルを見て新しいファイルを作成するために両方から必要な部分を選択し,
2 つのファイルを統合することができます.
並んでいるファイルを比較するとき,
<option>l</option> キーで左側の中身を選択し,
<option>r</option> キーで右側の中身を選択します.
最終出力は左右両方の部分でできたファイルになるでしょう.
このファイルをインストールすることができます.
たいてい, このオプシュンはユーザが設定を変更したファイルに使われます.</para>
<para>diff の結果をもう一度見る, を選択すると,
ちょうど先ほど &man.mergemaster.8; が選択肢を表示する前と同じように,
ファイルの相異点を見ることができます.</para>
<para>&man.mergemaster.8; がシステムファイルの比較を終えたあと,
他のオプションについてもプロンプトが表示されます.
&man.mergemaster.8; パスワードファイルを再構築したいかどうか,
<filename>MAKEDEV</filename> を実行するかどうかを訊かれることがあります.
最後に残った一時ファイルを削除するかどうかを尋ねて終了します.</para>
</sect3>
<sect3>
<title>手動での更新</title>
<para>
手動で更新することを選んだ場合,
単にファイルを
<filename>/usr/src/etc</filename> から <filename>/etc</filename> に
コピーしただけでは正常に動作させることはできません.
これらのファイルには, <quote>インストールという
手順を踏まなければならないもの</quote>が含まれています.
手順を踏まなければならないもの</quote> が含まれています.
<filename>/usr/src/etc</filename> ディレクトリは
<filename>/etc</filename>
ディレクトリにそのまま置き換えられるような
@ -1156,6 +1310,9 @@ Script done, &hellip;</screen>
<filename>/usr/src/etc</filename> にないものもあります.
</para>
<para>&man.mergemaster.8; を使っているのであれば (お勧めです),
<link linkend="update-dev">次のセクション</link>まで飛ばしてもかまいません.</para>
<para>
手動で行う際の
一番簡単な方法は, ファイルを新しいディレクトリにインストールしてから,
@ -1218,7 +1375,7 @@ Script done, &hellip;</screen>
<para>
<filename>/var/tmp/root</filename> 以下に
インストールされているファイルの中には,
<quote/./ から始まっているものがあります.
<quote>.</quote> から始まっているものがあります.
これを書いている時点で, それに該当するファイルは
<filename>/var/tmp/root/</filename> と
<filename>/var/tmp/root/root/</filename> の中にある
@ -1343,6 +1500,7 @@ Script done, &hellip;</screen>
<screen>&prompt.root; <userinput>mkdir /var/tmp/root-`date "+%Y%m%d"`</userinput></screen>
</tip>
</sect3>
</sect2>
<sect2 id="update-dev">
@ -1498,7 +1656,7 @@ Script done, &hellip;</screen>
<answer>
<para>
それは変更の性質によるので, なんとも言えません.
例えば, CVSup を実行したとき, 最後に実行したときから比べて
例えば, <application>CVSup</application> を実行したとき, 最後に実行したときから比べて
次にあげるようなファイルが更新されていたとします.</para>
<screen><filename>src/games/cribbage/instr.c</filename>
@ -1568,7 +1726,7 @@ Script done, &hellip;</screen>
<para><filename>/usr/obj</filename> には,
コンパイルの段階で生成された
すべてのオブジェクトファイルが含まれています.
通常 <quote/make world/ の最初の段階では,
通常 <quote>make world</quote> の最初の段階では,
このディレクトリを削除して新しくつくり直すようになっています.
その場合には, 構築終了後の <filename>/usr/obj</filename>
を保存しておいても, あまり意味はありません.
@ -1577,7 +1735,7 @@ Script done, &hellip;</screen>
<para>
しかし, もしあなたが何を行なおうとしているのか理解しているなら,
この段階を省略して <quote/make world/ を行なうことができます.
この段階を省略して <quote>make world</quote> を行なうことができます.
こうすると, ほとんどのソースは再コンパイルされないため,
構築はかなり高速化されます.
これは裏をかえせば, デリケートな依存関係の問題によって,
@ -1585,11 +1743,6 @@ Script done, &hellip;</screen>
&os; メーリングリストではしばしば, 構築の失敗が,
この段階の省略によるものだということを理解せずに
不満の声をあげる人がいます.</para>
<para>もし, このような危険を承知した上でシステムの再構築を行なう場合には,
次のように変数 <makevar>NOCLEAN</makevar> を定義して構築します.</para>
<screen>&prompt.root; <userinput>make -DNOCLEAN world</userinput></screen>
</answer>
</qandaentry>
@ -1643,24 +1796,6 @@ Building everything..
</answer>
</qandaentry>
<indexterm><primary>NFS</primary></indexterm>
<qandaentry>
<question>
<para>あるマシンを <emphasis/マスタ/ として,
他の多くのマシンを (NFSで) アップグレードできますか?</para>
</question>
<answer>
<para>この作業を行なうのは簡単で,
たくさんのマシンをアップグレードする場合に時間を節約することができます.
これには, 中心となるマシンで <maketarget>buildworld</maketarget> を実行し,
終了後にリモートマシンで
<filename>/usr/src</filename> と <filename>/usr/obj</filename>
を NFS マウントしてから, そこで
<maketarget>installworld</maketarget> します.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>どのようにすれば make world を高速化できますか?</para>
@ -1696,18 +1831,18 @@ Building everything..
<listitem>
<para>また, <filename>/etc/make.conf</filename> の中の
<makevar>CFLAGS</makevar> を,
<quote>-O -pipe</quote> のように指定しましょう.
<quote>-O2</quote> の最適化はさらに多くの時間を必要とし,
しかも <quote>-O</quote> と <quote>-O2</quote> の
<option>-O -pipe</option> のように指定しましょう.
<option>-O2</option> の最適化はさらに多くの時間を必要とし,
しかも <option>-O</option> と <option>-O2</option> の
最適化には, ほとんど差はありません.
<quote>-pipe</quote> を指定することで,
<option>-pipe</option> を指定することで,
コンパイラはテンポラリファイルの代わりにパイプを利用します.
その結果, (メモリの利用は増えますが)ディスクアクセスが減ります.
</para>
</listitem>
<listitem>
<para>make に <option>-j&lt;n&gt;</option> オプションを指定して,
<para>&man.make.1; に <option>-j&lt;n&gt;</option> オプションを指定して,
複数のプロセスを並列に実行させてください.
これはプロセッサが単一か複数かによらず,
どちらも同様に恩恵を得ることができます.</para>
@ -1773,9 +1908,148 @@ Building everything..
</itemizedlist>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>なにか悪いことがあったらどうすればいいですか?</para>
</question>
<answer>
<para>自分の環境に前のビルドの余計なゴミが残っていないことをはっきりと確認してください.
とても簡単です.</para>
<screen>&prompt.root; <userinput>chflags -R noschg /usr/obj/usr</userinput>
&prompt.root; <userinput>rm -rf /usr/obj/usr</userinput>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make cleandir</userinput>
&prompt.root; <userinput>make cleandir</userinput></screen>
<para>ええ, <command>make cleandir</command>
は本当に 2 回実行するのです.</para>
<para>そして, <command>make buildworld</command> を行い,
全プロセスを最初からやり直してください.</para>
<para>まだ問題があれば, エラーと <command>uname -a</command>
の出力を &a.questions; に送ってください.
自分の設定についてさらに質問されても答えられるよう用意してください!</para>
</answer>
</qandaentry>
</qandaset>
</sect2>
</sect1>
<sect1 id="small-lan">
<sect1info>
<authorgroup>
<author>
<firstname>Mike</firstname>
<surname>Meyer</surname>
</author>
</authorgroup>
</sect1info>
<title>複数のマシンで追っかける</title>
<indexterm>
<primary>NFS</primary>
<secondary>複数のマシンにインストール</secondary>
</indexterm>
<para>同じソースツリーを追いかけたいマシンを複数の持っているなら,
全部のマシンにソースをダウンロードして全部再構築するのは資源,
つまりディスクスペース, ネットワーク帯域, そして CPU サイクルの無駄使いに思えます.
実際これは無駄で, 解決策は 1 つのマシンに仕事のほとんどをさせ,
残りのマシンは NFS 経由でそれをマウントする, というものです.
このセクションではそのやり方を概観します.</para>
<sect2 id="small-lan-preliminaries">
<title>準備</title>
<para>まず初めに, 同じバイナリで動かそうとするマシンたちを決めます.
このマシンたちのことを<emphasis>ビルドセット</emphasis>と呼びましょう.
それぞれのマシンはカスタムカーネルを持っているかもしれませんが,
同じユーザランドバイナリを動かそうというのです.
このビルドセットから,
<emphasis>ビルドマシン</emphasis>となるマシンを 1 台選びます.
ベースシステムとカーネルを構築するのはこのマシンになります.
理想的には, このマシンは <command>make world</command>
を実行するのに十分な CPU を持った速いマシンであるべきです.
<emphasis>テストマシン</emphasis>となるべきマシンも選びたいでしょう.
更新されたソフトウェアを使う前にそのマシンでテストするのです.
テストマシンはかなり長い時間落ちていても
だいじょうぶなマシン<emphasis>であったほうがいいでしょう</emphasis>.
ビルドマシンでもかまいませんが, ビルドマシンである必要はありません.</para>
<para>このビルドセットのマシンはすべて
<filename>/usr/obj</filename> と
<filename>/usr/src</filename>
を同じマシンの同じ場所からマウントする必要があります.
理想的にはビルドマシンの 2 つの違うドライブ上にあるとよいのですが,
ビルドマシンに NFS マウントされていてもかまいません.
ビルドセット自体が複数ある場合は,
<filename>/usr/src</filename> はひとつのビルドマシン上にあるべきです.
他のマシンからはそれを NFS マウントするようにしましょう.</para>
<para>最後にビルドセットの全てのマシン上の
<filename>/etc/make.conf</filename>
がビルドマシンと一致していることを確認してください.
つまり, ビルドマシンはビルドセットのどのマシンもインストールしようとしている
ベースシステムを全部ビルドしなければならないということです.
また, 各ビルドマシンは <filename>/etc/make.conf</filename>
にそれぞれのビルドマシンのカーネル名を
<makevar>KERNCONF</makevar> で指定し,
ビルドマシンは自分自身のカーネルから順に全部のカーネル名を
<makevar>KERNCONF</makevar> にリストアップしてください.
各マシンのカーネルもビルドするのであれば,
ビルドマシンは各マシンのカーネル設定ファイルを
<filename>/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>
に持っていなければなりません.</para>
</sect2>
<sect2>
<title>ベースシステム</title>
<para>さて, 準備は整ったので, ビルドしましょう.
<xref linkend="make-buildworld">
に書いてあるようにカーネルとベースシステムを構築してください.
でも, まだインストールしないでください.
ビルドが終わったら, テストマシンに移り,
ビルドしたばかりのカーネルをインストールしてください.
テストマシンが NFS 経由で
<filename>/usr/src</filename> と
<filename>/usr/obj</filename> をマウントしているなら,
シングルユーザで再起動したときネットワークを使えるようにしてマウントする必要があります.
もっとも簡単な方法は,
マルチユーザモードで起動して, <command>shutdown now</command>
を実行してシングルユーザモードに移行することです.
そうしたら, カーネルとベースシステムをインストールし,
いつもするように
<command>mergemaster</command> を実行できます.
終わったら,
テストマシンを再起動して通常のマルチユーザ動作に戻します.</para>
<para>テストマシンにあるものすべてがちゃんと動いている確信が得られたら,
同じ手順でビルドセットの他のマシンにも新しいソフトウェアをインストールします.</para>
</sect2>
<sect2>
<title>Ports</title>
<para>ports ツリーにも同じアイデアが使えます.
最初に重要な点は,
ビルドセットのすべてのマシンに同じマシンの
<filename>/usr/ports</filename> をマウントすることです.
そして, distfiles を共有するために,
<filename>/etc/make.conf</filename> を適切に設定します.
NFS マウントによってマップされる <username>root</username>
ユーザが何であれ, <makevar>DISTDIR</makevar>
はそのユーザが書き込める共通の共有ディレクトリに設定する必要があります.
各マシンは <makevar>WRKDIRPREFIX</makevar>
を自分のマシンのビルドディレクトリに設定しなければなりません.
最後に, パッケージをビルドして配布しようとしているなら,
<makevar>DISTDIR</makevar> と同じように
<makevar>PACKAGES</makevar> ディレクトリも設定してください.</para>
</sect2>
</sect1>
</chapter>
<!--