Date: Thu, 17 Aug 2017 08:07:42 +0000 (UTC) From: Ryusuke SUZUKI <ryusuke@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r50681 - head/ja_JP.eucJP/books/handbook/cutting-edge Message-ID: <201708170807.v7H87gbp005081@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ryusuke Date: Thu Aug 17 08:07:42 2017 New Revision: 50681 URL: https://svnweb.freebsd.org/changeset/doc/50681 Log: - Merge the following from the English version: r50201 -> r50602 head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml Modified: head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml Modified: head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml ============================================================================== --- head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml Wed Aug 16 20:40:49 2017 (r50680) +++ head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml Thu Aug 17 08:07:42 2017 (r50681) @@ -3,7 +3,7 @@ The FreeBSD Documentation Project The FreeBSD Japanese Documentation Project - Original revision: r50201 + Original revision: r50602 $FreeBSD$ --> <chapter xmlns="http://docbook.org/ns/docbook" @@ -253,7 +253,7 @@ MergeChanges /etc/ /var/named/etc/ /boot/device.hints< <filename>/etc</filename> をバックアップしてからマージを承認してください。 <command>mergemaster</command> の詳細な情報については、 - <xref linkend="mergemaster"/> で確認してください。</para> + &man.mergemaster.8; で確認してください。</para> <programlisting># Directory in which to store downloaded updates and temporary # files used by &os; Update. @@ -961,8 +961,8 @@ before running "/usr/sbin/freebsd-update install"</scr <para>以下は、上記の変数を用いてハンガリー語のドキュメントを <acronym>PDF</acronym> 形式でインストールする方法です。</para> - <screen>&prompt.root; cd /usr/ports/misc/freebsd-doc-hu -&prompt.root; make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean</screen> + <screen>&prompt.root; <userinput>cd /usr/ports/misc/freebsd-doc-hu</userinput> +&prompt.root; <userinput>make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean</userinput></screen> <para><xref linkend="ports"/> に書かれている手順を使って、 ドキュメンテーション package または port @@ -1115,1120 +1115,466 @@ before running "/usr/sbin/freebsd-update install"</scr </listitem> </orderedlist> </sect2> - - <sect2 xml:id="stable"> - <title>&os.stable; を使う</title> - - <para><emphasis>訳: &a.jp.iwasaki;</emphasis></para> - - <para>&os.stable; - とは定期的に公開されるリリースを作成するための開発ブランチです。 - このブランチに加えられる変更は &os.current; よりゆっくりで、 - 原則として、事前に &os.current; で試験ずみであるという特徴があります。 - ただ<emphasis>そうであっても</emphasis>、 - これは開発用ブランチの一つであり、ある時点における &os.stable; - のソースがどんな場合にも使えるものであるとは限りません。 - このブランチはもう一つの開発の流れというだけであって、 - エンドユーザ向けのものではありません。 - もし試験をする資源的な余裕がない場合は、代わりに最新の - &os; リリースを使ってください。</para> - - <para>&os; の開発プロセスに興味があったり、 - それに対する貢献を考えていて、特にそれが次回の - &os; のリリースに関係するものであるなら - &os.stable; を追うことを考えると良いでしょう。</para> - - <para>&os.stable; ブランチはいつもコンパイルができ、 - 安定に動作すべきですが、 - それが保証されているというわけではありません。 - &os.stable; のユーザは &os.current; よりも多いため、&os.current; - で発見されなかったバグが &os.stable; で発見され、 - ときどきそれが問題となることがあるのは避けることができません。 - このような理由から、盲目的に &os.stable; - を追いかけるべきではありません。 - 特に、開発環境もしくはテスト環境でコードを十分に試験せずに、 - プロダクション品質が要求されるサーバを &os.stable; - にアップグレードしては<emphasis>いけません</emphasis>。</para> - - <para>&os.stable; を追いかけるには</para> - - <indexterm> - <primary>-STABLE</primary> - <secondary>利用する</secondary> - </indexterm> - - <orderedlist> - <listitem> - <para>&os.stable; の構築に関連する事柄や、 - その他の注意すべき点 に関する情報を得るために、 - &a.stable.name; メーリングリストに加わってください。 - また開発者は議論の余地がある修正や変更を考えている場合に、 - このメーリングリストで公表し、 - 提案された変更に関して問題が生じるかどうかを返答する機会をユーザに与えます。</para> - - <para>追いかけているブランチに関連する - <application>svn</application> メーリングリストに参加してください。 - たとえば、9-STABLE ブランチを追いかけているユーザは - &a.svn-src-stable-9.name; メーリングリストに参加してください。 - このリストでは、変更がなされるごとに作成される commit log - やそれに伴う起こりうる副作用についての情報が記録されています。</para> - - <para>これらのメーリングリストに入るには、&a.mailman.lists.link; - をたどって参加したいメーリングリストをクリックし、 - 手順の説明にしたがってください。 - ソースツリー全体の変更点を追いかけるには、 - &a.svn-src-all.name; メーリングリストを購読してください。</para> - </listitem> - - <listitem> - <para>新しい &os.stable; システムをインストールするには、 - <link linkend="mirrors">ミラーサイト</link> から最近の - &os.stable; リリースをインストールするか、 - 毎月公開されている &os.stable; - からビルドされたスナップショットを使ってください。 - スナップショットの詳細については、<link - xlink:href="&url.base;/ja/snapshots/">www.freebsd.org/ja/snapshots</link> - をご覧ください。</para> - - <para>既に &os; が動いているシステムを - &os.stable; にアップグレードするには、 - <link linkend="svn">svn</link> - <indexterm> - <primary>Subversion</primary> - </indexterm> を使って、 - 希望する開発ブランチのソースをチェックアウしてください。 - <literal>stable/9</literal> といったブランチ名は、 - <link xlink:href="&url.base;/releng/">www.freebsd.org/releng</link> - で説明されています。</para> - </listitem> - - <listitem> - <para>&os.stable; をコンパイルしたり &os.stable; へとアップグレード - <indexterm> - <primary>-STABLE</primary> - <secondary>構築、コンパイル</secondary> - </indexterm> する前に、 - <filename>/usr/src/Makefile</filename> を注意深く読み、 - <xref linkend="makeworld"/> - に書かれている手順に従ってください。 - &a.stable; と <filename>/usr/src/UPDATING</filename> を読んで、 - 次のリリースへ向けて移ってゆくに当たって、 - ときどき必要となる既存システムからの新システムの構築手順についての最新情報を得てください。</para> - </listitem> - </orderedlist> - </sect2> </sect1> - <sect1 xml:id="synching"> - <title>ソースの同期</title> - - <para><emphasis>訳: &a.jp.iwasaki;、1997 年 9 月 13 日</emphasis></para> - - <para>&os; のソースの最新を追いかける方法は色々あります。 - この節では、基本的なサービスである - <application>Subversion</application> - について説明します。</para> - - <warning> - <para>ソースツリーの一部を最新のものに更新することは可能です。 - ただし、サポートされているアップデート手順は、 - ソースツリー全体を最新のものに更新し、 - <filename>/bin</filename>, <filename>/sbin</filename> - といったユーザ空間で動作するもの、 - およびカーネルソースを再構築することのみです。 - ソースツリーの一部だけであったり、カーネルだけ、 - もしくはユーザランドのプログラムだけを更新した場合は、 - 問題が生じることがよくあります。 - この時に発生する問題はコンパイル時のエラーからカーネルパニック、 - データの破壊とさまざまです。</para> - </warning> - - <indexterm> - <primary>Subversion</primary> - </indexterm> - - <para><application>Subversion</application> - は <emphasis>pull</emphasis> 同期モデルを採用しています。 - ユーザ (または <command>cron</command> スクリプト) が - <command>svn</command> プログラムを起動し、 - ローカルにあるソースを最新状態にします。 - 更新情報はその時点の最新のものであり、 - いつダウンロードするかはユーザがコントロールするので、 - <application>Subversion</application> - はローカルのソースツリーをアップデートする好ましい方法です。 - 特定のファイルやディレクトリに限定して更新することも簡単にできます。 - 更新情報はサーバによって素早く生成されます。 - <application>Subversion</application> によるソースの同期方法については、 - <xref linkend="svn"/> で説明されています。</para> - - <para><application>Subversion</application> であれば、 - うっかりローカルのアーカイブの一部を消してしまっても、 - 壊れた部分を検出して再構築してくれます。</para> - </sect1> - <sect1 xml:id="makeworld"> - <title>world の再構築</title> + <title xml:id="updating-src">ソースを用いた &os; のアップデート</title> - <indexterm> - <primary><quote>world</quote> の再構築</primary> - </indexterm> - <para>&os.stable;、&os.current; などの - &os; のどれか特定のバージョンについて、 - ローカルのソースツリーを同期させたら、 - そのソースツリーを使ってシステムを再構築できます。 - このプロセスは world の再構築と呼ばれます。</para> + <para>ソースをコンパイルして&os; をアップデートする方法は、 + バイナリを用いたアップデートに比べ、いくつもの利点があります。 + 特定のハードウェアをうまく利用するためのオプションを設定してコードを構築できます。 + ベースシステムの特定の箇所の設定をデフォルトの設定から変更したり、 + 必要がない部分を完全に削除して構築することもできます。 + システムを構築することによるアップデートは、 + バイナリアップデートをインストールするだけのアップデートに比べ時間がかかりますが、 + 利用環境に合わせた &os; + を作成するような完全なカスタマイズが可能です。</para> - <para>world を再構築する<emphasis>前</emphasis>に、 - 以下を行ってください。</para> + <sect2 xml:id="updating-src-quick-start"> + <title>クィックスタート</title> - <procedure> - <title>world の構築<emphasis>前</emphasis>に行う作業</title> + <para>以下は、&os; のアップデートをソースを構築することにより行う典型的な方法のクイックリファレンスです。 + その後の節では、このプロセスについてより詳細に説明します。</para> - <step> - <para>重要なデータを他のシステムやリムーバブルメディアにバックアップし、 - きちんとバックアップが作成されていることを確認したら、 - 起動可能なインストールメディアを用意してください。 - システムを再構築する<emphasis>前に</emphasis>、 - バックアップを作成することの重要性は、 - いくら強調してもし過ぎると言うことはありません。 - システム全体の再構築は難しい作業ではありませんが、 - どんなに注意していたとしても、<!-- hrs:2000/01/12 inevitably --> - ソースツリーそのものに手違いがあった時には、 - システムが起動しなくなってしまう状態になることがあるのです。 - 多分、それを使うことはないと思いますが、 - あとで後悔することのないよう、念のため用意しておきましょう!</para> - </step> - - <step> - <indexterm><primary>メーリングリスト</primary></indexterm> - <para>追いかけているブランチに応じて、 - &a.stable.name; もしくは &a.current.name; - の最近のエントリを調べて、 - 既知の問題や影響を受けるシステムを確認してください。 - 既知の問題が同期しているバージョンのコードに影響する場合は、 - その問題が解決されたことを報告する - <quote>問題解決 (all clear)</quote> - のアナウンスが投稿されるまで待ってから、ソースを同期して、 - ローカルのソースに必要な修正を入れてください。</para> - </step> - - <step> - <para><filename>/usr/src/UPDATING</filename> を読み、 - 同期しているソースのバージョンで必要となるステップがないかどうかを調べて下さい。 - このファイルには潜在的な問題や特定のコマンドを実行する順番などの重要な情報が含まれています。 - 大きなアップグレードでは、world - をインストールする前に特定のファイルの名前を変更したり、 - 削除するといった、特別なステップが追加で必要となることがあります。 - ファイルの最後には、 - 現在推奨されているアップグレードの手順が詳しく正確に説明されています。 - もし、<filename>UPDATING</filename> に書かれている手順が、 - この節に書かれているものと矛盾していたら、 - <filename>UPDATING</filename> の手順を採用してください。</para> - </step> - </procedure> - - <warning> - <title><command>make world</command> は使わないこと</title> - - <para>古いドキュメントの中には、 - <command>make world</command> を使うことを薦めているものがあります。 - これは、重要な手順をいくつか抜かしてしまうので、 - エキスパートでなければ使うべきではありません。 - ほぼあらゆる場合において、<command>make world</command> - を実行するのは間違っており、 - ここで説明されている手順を用いるべきです。</para> - </warning> - - <sect2 xml:id="canonical-build"> - <title>システム更新の概要</title> - - <para>world の構築では、<xref linkend="synching"/> - に書かれている手順で入手したソースを用いて、 - 古い &os; のバージョンをアップデートします。</para> - - <para>&os; では、<quote>world</quote> は、 - カーネル、コアシステムのバイナリ、 - ライブラリ、プログラミングファイル、組み込みのコンパイラを意味します。 - これらのコンポーネントの構築およびインストールの順番は重要です。</para> - - <para>例えば、古いコンパイラは、 - バグを含み、新しいカーネルをコンパイルできない可能性があります。 - そのため、 - 新しいカーネルは新しいコンパイラを使って構築しなければならず、 - 新しいコンパイラの構築が必要となります。 - ただし、必ずしも、 - 新しいコンパイラがインストールされている必要はありません。</para> - - <para>新しい world は、 - 新しいカーネルの機能に依存している可能性があるので、 - 新しい world をインストールする前に、 - 新しいカーネルがインストールされている必要があります。 - 古い world は、新しいカーネルでは正しく動かないかも知れません。 - そのため、新しいカーネルをインストールしたら、 - 直ちに新しい world をインストールしてください。</para> - - <para>設定の中には、新しい world - をインストールする前に変更すべきものがありますが、 - 古い world を壊す可能性があります。 - そのため、設定のアップデートは 2 つの手順で行われます。 - 多くの場合、アップデートのプロセスは、ファイルを置き換えたり、 - 追加のみを行い、古いファイルを削除しません。 - このことが問題を引き起こす可能性があるため、 - <filename>/usr/src/UPDATING</filename> には、 - 手動で削除すべきファイルをどのステップで削除すべきかが書かれています。</para> - - <para>これらを配慮した結果、以下で説明するアップグレードの推奨手順が作られました。</para> - - <note> - <para><command>make</command> を実行したときの出力は、 - ファイルに保存すると良いでしょう。 - 何か障害が発生した場合には、エラーメッセージのコピーを - &os; メーリングリストに投稿してください。</para> - - <para>ファイルに保存する最も簡単な方法は、 - 引数として出力の保存先のファイル名を指定して - <command>script</command> コマンドを使うことです。 - <filename>/tmp</filename> は、 - 再起動をすると削除されてしまう可能性があるので、 - このディレクトリには出力を保存しないようにしてください。 - 出力の保存には <filename>/var/tmp</filename> が適しています。 - 次のコマンドを world の構築の直前に実行し、再構築が終了したら - <userinput>exit</userinput> と入力してください。</para> - - <screen>&prompt.root; <userinput>script <replaceable>/var/tmp/mw.out</replaceable></userinput> -Script started, output file is /var/tmp/mw.out</screen> - </note> - <procedure> - <title>world の構築プロセスの概要</title> - - <para>world の構築プロセスで用いられるコマンドは、 - ここで示されている順番で実行してください。 - この節では各コマンドの機能についてまとめます。</para> - <step> - <para>システム上で world の構築が一度でも行われていると、 - 前回の構築の際のコピーが - <filename>/usr/obj</filename> - に存在するはずです。 - このディレクトリが存在しているのであれば、 - このディレクトリを削除することで - <command>make buildworld</command> の行程にかかる時間を短縮し、 - 依存問題に悩まされるようなトラブルを回避できます。</para> + <title>アップデートおよびビルド</title> - <screen>&prompt.root; <userinput>chflags -R noschg /usr/obj/*</userinput> -&prompt.root; <userinput>rm -rf /usr/obj</userinput></screen> - </step> + <screen>&prompt.root; <userinput>svn update /usr/src</userinput> <co xml:id="updating-src-qs-svnup"/> +<emphasis>check <filename>/usr/src/UPDATING</filename></emphasis> <co xml:id="updating-src-qs-review-updating"/> +&prompt.root; <userinput>cd /usr/src</userinput> <co xml:id="updating-src-qs-cd"/> +&prompt.root; <userinput>make -j<replaceable>4</replaceable> buildworld</userinput> <co xml:id="updating-src-qs-buildworld"/> +&prompt.root; <userinput>make -j<replaceable>4</replaceable> kernel</userinput> <co xml:id="updating-src-qs-kernel"/> +&prompt.root; <userinput>shutdown -r now</userinput> <co xml:id="updating-src-qs-reboot"/> +&prompt.root; <userinput>cd /usr/src</userinput> <co xml:id="updating-src-qs-cd2"/> +&prompt.root; <userinput>make installworld</userinput> <co xml:id="updating-src-qs-installworld"/> +&prompt.root; <userinput>mergemaster -Ui</userinput> <co xml:id="updating-src-qs-mergemaster"/> +&prompt.root; <userinput>shutdown -r now</userinput> <co xml:id="updating-src-qs-shutdown"/></screen> - <step> - <para>新しいコンパイラと関連ツールを最初にコンパイルし、 - その後、新しいコンパイラで、 - 新しい world の残りの部分をコンパイルします。 - コンパイルされたものは、 - <filename>/usr/obj</filename> に格納されます。</para> + <calloutlist> + <callout arearefs="updating-src-qs-svnup"> + <para>最新版のソースを入手してください。 + ソースの入手およびアップデートに関する情報については + <xref linkend="updating-src-obtaining-src"/> + をご覧ください。</para> + </callout> - <screen>&prompt.root; <userinput>cd /usr/src</userinput> -&prompt.root; <userinput>make buildworld</userinput></screen> - </step> + <callout arearefs="updating-src-qs-review-updating"> + <para>ソースの構築の前後で必要となる手動の作業について、 + <filename>/usr/src/UPDATING</filename> + を確認してください。</para> + </callout> - <step> - <para>コンパイラとカーネルのミスマッチを防ぐため、 - <filename>/usr/obj</filename> - にある新しいコンパイラを用いて新しいカーネルを構築します。 - 再構築は、ある種のメモリ構造体が変更されたような場合には必須で、 - <command>ps</command> や <command>top</command> - のようなプログラムは、 - カーネルとソースコードのバージョンが一致しないと正常に動作しないことがあります。</para> + <callout arearefs="updating-src-qs-cd"> + <para>ソースが置かれているディレクトリに移動してください。</para> + </callout> - <screen>&prompt.root; <userinput>make buildkernel</userinput></screen> - </step> + <callout arearefs="updating-src-qs-buildworld"> + <para>world (カーネルを除くすべて) + をコンパイルしてください。</para> + </callout> - <step> - <para>新しくアップデートされたカーネルで起動できるように、 - 新しいカーネルとカーネルモジュールをディスク上に配置します。 - <varname>kern.securelevel</varname> を 1 より大きくしていて、 - <emphasis>かつ</emphasis> カーネルのバイナリファイルに - <literal>noschg</literal> のようなフラグを設定している場合は、 - まず、シングルユーザモードに移行してください。 - それ以外の場合は、 - マルチユーザモードでこれらのコマンドを問題なく動かせるはずです。 - <varname>kern.securelevel</varname> の詳細については - &man.init.8;、ファイルに対するさまざまなフラグの詳細については - &man.chflags.1; をご覧ください。</para> + <callout arearefs="updating-src-qs-kernel"> + <para>カーネルをコンパイルしてインストールしてください。 + ここに書かれているコマンドは、<command>make buildkernel + installkernel</command> + と同じです。</para> + </callout> - <screen>&prompt.root; <userinput>make installkernel</userinput></screen> - </step> + <callout arearefs="updating-src-qs-reboot"> + <para>新しいカーネルを使うため、 + システムを再起動してください。</para> + </callout> - <step> - <para>すでに実行されているソフトウェアをアップデートする際の問題を最小限にするため、シングルユーザモードに移行してください。 - シングルユーザモードに移行することにより、 - 新しいカーネル上で古い world - が実行される際の問題を最小限にします。</para> + <callout arearefs="updating-src-qs-cd2"> + <para>ソースが置かれているディレクトリに移動してください。</para> + </callout> - <screen>&prompt.root; <userinput>shutdown now</userinput></screen> + <callout arearefs="updating-src-qs-installworld"> + <para>world をインストールしてください。</para> + </callout> - <para>シングルユーザモードに移行したら、UFS - でフォーマットされているシステムでは、 - 以下のコマンドを実行してください。</para> + <callout arearefs="updating-src-qs-mergemaster"> + <para><filename>/etc/</filename> + に置かれている設定ファイルをアップデートしたりマージしてください。</para> + </callout> - <screen>&prompt.root; <userinput>mount -u /</userinput> -&prompt.root; <userinput>mount -a -t ufs</userinput> -&prompt.root; <userinput>swapon -a</userinput></screen> - - <para>もしシステムが ZFS でフォーマットされている場合には、 - 以下の 2 つのコマンドを実行してください。 - この例では、zpool の名前は <literal>zroot</literal> - であると仮定しています。</para> - - <screen>&prompt.root; <userinput>zfs set readonly=off zroot</userinput> -&prompt.root; <userinput>zfs mount -a</userinput></screen> + <callout arearefs="updating-src-qs-shutdown"> + <para>新しく構築された world およびカーネルを利用するため、 + システムを再起動してください。</para> + </callout> + </calloutlist> </step> - - <step> - <para>オプション: もし、デフォルトの US English - 以外のキーボードマップが必要であれば、 - &man.kbdmap.1; で変更してください。</para> - - <screen>&prompt.root; <userinput>kbdmap</userinput></screen> - </step> - - <step> - <para>その後、どちらのファイルシステムでも、 - <acronym>CMOS</acronym> クロックが地域時間に設定されていて - GMT ではない場合 - (&man.date.1; が正しい時間と地域を表示しないなら当てはまります) - には、次のコマンドを実行してください。</para> - - <screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen> - </step> - - <step> - <para>システムの再構築では、 - <filename>/etc</filename>, - <filename>/var</filename> や - <filename>/usr</filename> - といったディレクトリに新規に導入されたファイルや、 - 変更された設定ファイルに対する更新は行なわれません。 - 次に、新しい world - に対する <filename>/etc</filename> - の最初の設定ファイルのアップデートを行います。 - 以下のコマンドは - <buildtarget>installworld</buildtarget> - を成功するために本質的なファイルのみを比較します。 - たとえば、 - このステップでは、最後のアップデート後に &os; に追加された、 - 新しいグループや新しいシステムアカウント、 - もしくはスタートアップスクリプトがシステムに追加されることがあります。 - 次のコマンドに関する詳細な情報については、 - <xref linkend="mergemaster"/> を参照してください。</para> - - <screen>&prompt.root; <userinput>mergemaster -iF</userinput></screen> - </step> - - <step> - <para><filename>/usr/obj</filename> - にある新しい world - およびシステムのバイナリをインストールします。</para> - - <screen>&prompt.root; <userinput>cd /usr/src</userinput> -&prompt.root; <userinput>make installworld</userinput></screen> - </step> - - <step> - <para>残りの設定ファイルをアップデートします。</para> - - <screen>&prompt.root; <userinput>mergemaster -p</userinput></screen> - </step> - - <step> - <para>使われなくなったファイルを削除します。 - もし使われなくなったファイルがディスクに残っていると、 - 問題が起きる可能性があるので重要な作業です。</para> - - <screen>&prompt.root; <userinput>make delete-old</userinput></screen> - </step> - - <step> - <para>再起動を行い、新しいカーネル、 - world そして設定ファイルをロードします。</para> - - <screen>&prompt.root; <userinput>reboot</userinput></screen> - </step> - - <step> - <para>古いライブラリを削除する前に、 - <xref linkend="ports-upgrading"/> - に書かれている手順にしたがって、 - すべての ports を再構築する必要があります。 - 再構築が終わったら、新しいライブラリと競合することを避けるため、 - 使われなくなったライブラリを削除します。 - この過程に関する詳細は、<xref linkend="make-delete-old"/> - を参照して下さい。</para> - - <screen>&prompt.root; <userinput>make delete-old-libs</userinput></screen> - </step> </procedure> - - <indexterm><primary>シングルユーザモード</primary></indexterm> - - <para>もしシステムがダウンタイムを持つことができるのであれば、 - システムのコンパイルをマルチユーザモードでおこない、 - インストールのためにシングルユーザモードに移行するという方法ではなく、 - コンパイルをシングルユーザモードで行うことを考えてください。 - システムの再インストールでは、たくさんの重要なシステムファイル、 - すべての標準的なシステムバイナリ、ライブラリ、 - インクルードファイルが変更されるので、 - 実際に動作しているシステムにおいて、 - 特にアクティブなユーザは、トラブルに見舞われる可能性があります。</para> </sect2> - <sect2 xml:id="src-updating"> - <title>設定ファイル</title> + <sect2 xml:id="updating-src-preparing"> + <title>ソースを用いたアップデートのための準備</title> - <indexterm> - <primary><filename>make.conf</filename></primary> - </indexterm> - - <para>world - の構築プロセスでは、いくつかの設定ファイルが使われます。</para> - - <para><filename>/usr/src</filename> に置かれている - <filename>Makefile</filename> には、 - &os; を構成するプログラムの構築方法や、 - どういう順番でそれらを構築すべきかといった指示が記述されています。</para> - - <para><command>make</command> で利用可能なオプションの説明は、 - &man.make.conf.5; で説明されています。また、 - <filename>/usr/share/examples/etc/make.conf</filename> には、 - 良く使われる例が書かれています。 - これらの設定を <filename>/etc/make.conf</filename> に追加すると、 - <command>make</command> の実行やプログラムの構築方法を設定できます。 - これらのオプションは、 - <command>make</command> が使われる際には常に有効となるため、 - Ports Collection でのアプリケーションのコンパイル時、 - ユーザが書いた C プログラムや &os; - オペレーティングシステムを構築する際にも影響を及ぼします。 - ある設定を変更したことにより、影響が広い範囲におよび、 - 驚くべき結果をもたらす可能性があります。 - 両方のファイルに書かれているコメントを読むことと、 - デフォルトの設定は、パフォーマンスと安全性の観点から選ばれていることを覚えておいてください。</para> - - <indexterm> - <primary><filename>src.conf</filename></primary> - </indexterm> - - <para><filename>/etc/src.conf</filename> は、 - ソースコードを用いたオペレーティングシステムの構築をコントロールします。 - <filename>/etc/make.conf</filename> とは異なり、 - <filename>/etc/src.conf</filename> に書かれた設定は、 - &os; オペレーティングシステムそのものを構築するときにのみ影響します。 - このファイルで設定可能な多くのオプションについては、 - &man.src.conf.5; に記述されています。 - 一見したところ無効にされている、 - 使われていないカーネルモジュールやビルドオプションに注意してください。 - ときどき予期しなかったり、わずかな影響を与えることがあります。</para> + <para><filename>/usr/src/UPDATING</filename> を読んでください。 + このファイルには、 + アップデートの前後で必要となる手動の作業について書かれています。</para> </sect2> - <sect2 xml:id="make-buildworld"> - <title>変数とターゲット</title> + <sect2 xml:id="updating-src-obtaining-src"> + <title>ソースコードのアップデート</title> - <para><command>make</command> の使用における一般的な書式は、 - 次のとおりです。</para> + <para>&os; のソースコードは + <filename>/usr/src/</filename> に置かれています。 + このソースコードのアップデートには、 + <application>Subversion</application> + バージョン管理システムを利用する方法が推奨されています。まず、 + ソースコードがバージョン管理下にあることを確認してください。</para> - <screen>&prompt.root; <userinput>make -<replaceable>x</replaceable> -D<replaceable>VARIABLE</replaceable> <replaceable>target</replaceable></userinput></screen> + <screen>&prompt.root; <userinput>svn info /usr/src</userinput> +Path: /usr/src +Working Copy Root Path: /usr/src +...</screen> - <para>この例では、<option>-<replaceable>x</replaceable></option> が - <command>make</command> に渡されるオプションになります。 - 利用可能なオプションについては、&man.make.1; - を参照してください。</para> + <para>この結果は、<filename>/usr/src/</filename> + がバージョン管理下にあり、&man.svn.1; + を使ってアップデートできることを示しています。</para> - <para>変数を渡すには、変数の名前を - <option>-D<replaceable>VARIABLE</replaceable></option> - のように指定してください。 - この変数は <filename>Makefile</filename> の動作をコントロールします。 - 変数の指定は、<filename>/etc/make.conf</filename> で設定するか、 - <command>make</command> の実行時に指定するかのどちらかで行います。 - たとえば、以下の変数は、プロファイル版のライブラリを構築しないことを指定します。</para> + <screen xml:id="synching">&prompt.root; <userinput>svn update /usr/src</userinput></screen> - <screen>&prompt.root; <userinput>make -DNO_PROFILE <replaceable>target</replaceable></userinput></screen> + <para>このディレクトリをアップデートしていない期間が長いと、 + アップデートのプロセスには時間がかかります。 + このプロセスが終わると、ソースコードは最新となり、 + 次節以降で説明する構築のプロセスを実行できます。</para> - <para>これは、<filename>/etc/make.conf</filename> - の中で以下のように設定することに対応します。</para> + <note xml:id="updating-src-obtaining-src-checkout"> + <title>ソースコードの入手</title> - <programlisting>NO_PROFILE= true # Avoid compiling profiled libraries</programlisting> + <para><literal>'/usr/src' is not a working copy</literal> + という出力が出た場合には、 + ファイルがなかったり、別な方法によりインストールされているので、 + 新しくソースコードをチェックアウトする必要があります。</para> - <para><replaceable>target</replaceable> は、<command>make</command> に - どのように動作するのかを指示するためのものです。 - <filename>Makefile</filename> は利用可能なターゲットを定義しています。 - ターゲットには、 - システムの再構築に必要な段階を、 - 多くのさらに細かい段階に分割するため、 - 構築の過程で利用されるものがあります。</para> + <table xml:id="updating-src-obtaining-src-repopath"> + <title>&os; のバージョンおよびリポジトリパス</title> - <para>選択肢が分けられていることは、二つの理由から有用です。 - まず第一に、構築作業は稼働中のシステムにまったく影響を与えません。 - そのため、マルチユーザモードで稼働中のシステムでも、安全に - <buildtarget>buildworld</buildtarget> を実行できます。 - ただし、<buildtarget>installworld</buildtarget> は - シングルユーザモードで行なうことをおすすめします。</para> + <tgroup cols="3"> + <thead> + <row> + <entry><command>uname -r</command> の出力</entry> + <entry>リポジトリパス</entry> + <entry>説明</entry> + </row> + </thead> - <para>第二に、<acronym>NFS</acronym> マウントを利用することで、<xref - linkend="small-lan"/> で説明されているように、 - ネットワーク上の複数のマシンをアップグレードすることが可能な点があげられます。</para> + <tbody> + <row> + <entry><literal><replaceable>X.Y</replaceable>-RELEASE</literal></entry> + <entry><literal>base/releng/</literal><replaceable>X.Y</replaceable></entry> + <entry>このリリースバージョンに対する重大なセキュルティへの対応およびバグの修正パッチのみが適用されています。 + このブランチは、ほとんどのユーザに推奨されます。</entry> + </row> - <para><command>make</command> に - <option>-j</option> をつけると、 - 同時に複数のプロセスを生成できます。 - 構築過程の大部分では <acronym>CPU</acronym> 性能の限界より - <acronym>I/O</acronym> 性能の限界の方が問題となるため、 - シングル <acronym>CPU</acronym> とマルチ <acronym>CPU</acronym> - マシンの両方に効果があります。</para> + <row xml:id="STABLE"> + <entry><literal><replaceable>X.Y</replaceable>-STABLE</literal></entry> + <entry><literal>base/stable/</literal><replaceable>X</replaceable></entry> + <entry> + <para>リリースバージョンに対し、 + そのブランチにおけるすべての開発の成果が反映されたものです。 + <emphasis>STABLE</emphasis> は、 + Applications Binary Interface + (<acronym>ABI</acronym>) + が変更されないことを意味しており、 + このブランチの以前のバージョンでコンパイルされたソフトウェアは、 + このバージョンでも実行できることを意味しています。 + たとえば、&os; 10.1 + で実行するようにコンパイルされたソフトウェアは、 + &os; 10-STABLE においても実行できます。</para> - <para>普通のシングル <acronym>CPU</acronym> マシンで以下のコマンド - を実行すると、最大 4 個までのプロセスを同時に実行します。 - メーリングリストに投稿された経験的な報告によると、 - 4 個という指定が最も良いパフォーマンスを示すようです。</para> + <para>STABLE ブランチは、 + 時期によってはユーザに影響するようなバグや非互換性を持つことがあります。 + これらは通常すぐに修正されます。</para> + </entry> + </row> - <screen>&prompt.root; <userinput>make -j4 buildworld</userinput></screen> + <row> + <entry><literal><replaceable>X</replaceable>-CURRENT</literal></entry> + <entry><literal>base/head/</literal></entry> + <entry>リリースが行われていない最新の &os; + の開発バージョンです。 + CURRENT ブランチは大きなバグや非互換があることもあるので、 + 高度な知識を持ったユーザのみ使用が推奨されます。</entry> + </row> + </tbody> + </tgroup> + </table> - <para>マルチ <acronym>CPU</acronym> マシンでは、 - <literal>6</literal> から <literal>10</literal> の間の値を設定し、 - 速度がどれくらい向上するか確認してみてください。</para> + <para>&man.uname.1; を使って &os; + のバージョンを確認してください。</para> - <indexterm> - <primary><quote>world</quote> の再構築</primary> - <secondary>時間</secondary> - </indexterm> + <screen>&prompt.root; <userinput>uname -r</userinput> +10.3-RELEASE</screen> - <note> - <para><command>make buildworld</command> - に変数を指定した場合は、同じ指定を - <command>make installworld</command> にも指定しなければなりません。 - ただし <buildtarget>installworld</buildtarget> - では、<option>-j</option> を - <emphasis>絶対に使ってはいけません</emphasis>。</para> + <para><xref linkend="updating-src-obtaining-src-repopath"/> + から分かるように、<literal>10.3-RELEASE</literal> + のアップデートのためのソースコードのパスは、 + <literal>base/releng/10.3</literal> です。 + このパスは、ソースコードをチェックアウトする時に使います。</para> - <para>たとえば、以下のコマンドを実行したなら、</para> + <screen>&prompt.root; <userinput>mv /usr/src /usr/src.bak</userinput> <co xml:id="updating-src-obtaining-src-mv"/> +&prompt.root; <userinput>svn checkout https://svn.freebsd.org/base/<replaceable>releng/10.3</replaceable> /usr/src</userinput> <co xml:id="updating-src-obtaining-src-checkout-cmd"/></screen> - <screen>&prompt.root; <userinput>make -DNO_PROFILE buildworld</userinput></screen> + <calloutlist> + <callout arearefs="updating-src-obtaining-src-mv"> + <para>この古いディレクトリを、 + 邪魔にならないように移動してください。 + このディレクトリ以下に対して変更を行ってなければ、 + 削除しても構わないでしょう。</para> + </callout> - <para>以下のようにしてインストールしなければなりません。</para> - - <screen>&prompt.root; <userinput>make -DNO_PROFILE installworld</userinput></screen> - - <para>もしそうしなかった場合、2 番目のコマンドは、 - <command>make buildworld</command> - の段階で構築されていないプロファイル版ライブラリをインストールしようとしてしまうでしょう。</para> + <callout arearefs="updating-src-obtaining-src-checkout-cmd"> + <para>リポジトリの <acronym>URL</acronym> に + <xref linkend="updating-src-obtaining-src-repopath"/> + に記載されているパスを追加します。 + 3 番目のパラメータには、 + ローカルシステム上でソースコードが置かれるディレクトリを指定します。</para> + </callout> + </calloutlist> </note> </sect2> - <sect2 xml:id="mergemaster"> - <info> - <title>設定ファイルの同期</title> + <sect2 xml:id="updating-src-building"> + <title>ソースからの構築</title> - <authorgroup> - <author> - <personname> - <firstname>Tom</firstname> - <surname>Rhodes</surname> - </personname> - <contrib>寄稿: </contrib> - </author> - </authorgroup> - </info> - - <indexterm> - <primary> - <command>mergemaster</command> - </primary> - </indexterm> + <para>まず最初に <emphasis>world</emphasis> + (カーネルを除くオペレーティングシステムのすべて) をコンパイルします。 + このステップを最初に実行するのは、 + カーネルの構築を最新のツールを使って行うようにするためです。 + このステップが終わったら、カーネルそのものを構築します。</para> - <para>&os; の &man.mergemaster.8; Bourne シェルスクリプトは、 - <filename>/etc</filename> にある設定ファイルと、 - <filename>/usr/src/etc</filename> - にある設定ファイルの違いを確認するためのものです。 - システムの設定ファイルをソースツリーにある設定ファイルにアップデートするには、 - この方法が推奨されています。</para> + <screen>&prompt.root; <userinput>cd /usr/src</userinput> +&prompt.root; <userinput>make buildworld</userinput> +&prompt.root; <userinput>make buildkernel</userinput></screen> - <para><command>mergemaster</command> を使う前に、 - 既存の <filename>/etc</filename> - をどこか安全な場所にコピーしておきましょう。 - 再帰的なコピーを行なう <option>-R</option> と、 - ファイルの更新時間や所有者などを保存する - <option>-p</option> と共に実行してください。</para> + <para>コンパイルされたコードは + <filename>/usr/obj</filename> に書き出されます。</para> - <screen>&prompt.root; <userinput>cp -Rp /etc /etc.old</userinput></screen> + <para>これは基本のステップです。 + 構築をコントロールする追加のオプションについては、 + 以下で説明します。</para> - <para><command>mergemaster</command> を実行すると、 - <filename>/</filename> を起点とした一時的なルート環境を構築し、 - さまざまなシステム設定ファイルを - (訳注: デフォルトでは <filename>/var/tmp/temproot</filename> に) - 置いていきます。 - これらのファイルは現在システムにインストールされているファイルと比較されます。 - 異なるファイルは &man.diff.1; 形式で示され、 - <option>+</option> の記号は追加または変更された行を表し、 - <option>-</option> は完全に削除されたか新しく置き換えられた行を表します。 - ファイルの違いの表示方法についてのより詳しい情報は、 - &man.diff.1; を参照してください。</para> + <sect3 xml:id="updating-src-building-clean-build"> + <title>クリーンビルドの実行</title> - <para>次に <command>mergemaster</command> - は違いのあるファイルをそれぞれ示し、 - 選択可能なオプションを表示します。 - ここでは、一時ファイルと呼ばれる新しいファイルを削除するか、 - 一時ファイルをそのままインストールするか、 - 一時ファイルと現在インストールされているファイルを統合するか、 - もしくは結果をもう一度見るか、 - といったオプションから選択できます。</para> + <para>&os; ビルドシステムのいくつかのバージョンは、 + オブジェクトが一時的に置かれるディレクトリ + <filename>/usr/obj</filename> + に前回のコンパイルされたコードを残します。 + これにより、変更されていないコードを再コンパイルせずにすむので、 + その後の構築時間を短縮できます。 + すべてを再構築するには、構築を開始する前に、 + <buildtarget>cleanworld</buildtarget> を実行してください。</para> - <para>一時ファイルの削除を選ぶと、<command>mergemaster</command> - は現在のファイルを変更しないで新しいバージョンを削除します。 - この選択は、お勧めできません。 - <command>mergemaster</command> - のプロンプトで <keycap>?</keycap> とタイプすれば、 - いつでもヘルプが見られます。 - ファイルのスキップを選ぶと、他のすべてのファイルを終えたあと、 - もう一度そのファイルが提示されます。</para> + <screen>&prompt.root; <userinput>make cleanworld</userinput></screen> + </sect3> - <para>一時ファイルをそのままインストールすることを選ぶと、 - 現在のファイルを新しいファイルで置き換えます。 - ほとんどの手を加えていないファイルは、 - これが一番よい選択です。</para> + <sect3 xml:id="updating-src-building-jobs"> + <title>ジョブの数の設定</title> - <para>ファイルの統合を選んだ場合、 - テキストエディタが起動され、両方のファイルの中身が提示されます。 - 画面上に並ぶ両方のファイルを見て新しいファイルを作成するために両方から必要な部分を選択し、 - 2 つのファイルを統合することができます。 - 並んでいるファイルを比較するとき、 - <keycap>l</keycap> で左側の中身を選択し、 - <keycap>r</keycap> で右側の中身を選択します。 - 最終出力は左右両方の部分でできたファイルになるでしょう。 - このファイルをインストールすることができます。 - たいてい、このオプションはユーザが設定を変更したファイルに使われます。</para> + <para>マルチコアプロセッサを搭載するシステムでは、 + 構築のためのジョブの数を増やすことで、 + 構築にかかる時間を短縮できます。 + <command>sysctl hw.ncpu</command> を使って、 + コアの数を確認してください。 + ジョブの数がどのように構築の速さに影響するかを確実に知るには、 + プロセッサにより異なりますし、&os; + のバージョンにより使用されるビルドシステムも変わるため、 + 実際に試してみるしか方法はありません。 + 試してみる最初のジョブの数の候補としては、 + コアの数の半分から倍の数の間で検討してみてください。 + ジョブの数は、<option>-j</option> を使って指定します。</para> - <para>結果をもう一度見る、を選択すると、 - ファイルの相異点をもう一度見ることができます。</para> + <example xml:id="updating-src-building-jobs-example"> + <title>構築のジョブの数を増やす</title> - <para><command>mergemaster</command> - がシステムファイルの比較を終えたあと、 - 他のオプションについてのプロンプトが表示されます。 - たとえば、 - パスワードファイルを再構築するかどうかを尋ねることがあります。 - 最後に残った一時ファイルを削除するかどうかを尋ねて終了します。</para> + <para>以下は 4 つのジョブで world とカーネルを構築する例です。</para> -<!-- -Probably not needed as changes should be minimal and mergemaster does -a good job of merging. - <tip> - <title>新しい root ディレクトリ - (<filename>/var/tmp/root</filename>) の名前に - タイムスタンプを付けておくと、 - 異なるバージョン間の比較を楽に行なうことができます。</title> + <screen>&prompt.root; <userinput>make -j4 buildworld buildkernel</userinput></screen> + </example> + </sect3> - <para>頻繁にシステムの再構築を行なうということは、 - <filename>/etc</filename> の更新もまた、 - 頻繁に行う必要があるということです。 - これはちょっと手間のかかる作業です。</para> + <sect3 xml:id="updating-src-building-only-kernel"> + <title>カーネルのみを構築する</title> - <para>この作業は、あなたが <filename>/etc</filename> - にマージした、 - 新しく変更されたファイルの最新のセットのコピーを保存しておくことで - 素早く行なうことができます。</para> + <para>ソースコードが変更された場合には、 + <buildtarget>buildworld</buildtarget> を完了しなければいけません。 + その後、いつでも + <buildtarget>buildkernel</buildtarget> でカーネルを構築できます。 + カーネルだけを構築するには、以下のように実行してください。</para> - <procedure> - <step> - <para>普通に make world します。 - <filename>/etc</filename> や - 他のディレクトリを更新したくなったときは、ターゲット - ディレクトリに、そのときの日付に基づく名前をつけてください。</para> + <screen>&prompt.root; <userinput>cd /usr/src</userinput> +&prompt.root; <userinput>make buildkernel</userinput></screen> + </sect3> - <screen>&prompt.root; <userinput>mkdir /var/tmp/root-20130214</userinput> -&prompt.root; <userinput>cd /usr/src/etc</userinput> -&prompt.root; <userinput>make DESTDIR=/var/tmp/root-20130214 \ - distrib-dirs distribution</userinput></screen> - </step> + <sect3 xml:id="updating-src-building-custom-kernel"> + <title>カスタムカーネルの構築</title> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201708170807.v7H87gbp005081>