Index: head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml =================================================================== --- head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml (revision 53918) +++ head/ja_JP.eucJP/books/handbook/cutting-edge/chapter.xml (revision 53919) @@ -1,1795 +1,1804 @@ &os; のアップデートとアップグレード Jim Mock 再構成、再編成および改訂: Jordan Hubbard 原作: Poul-Henning Kamp John Polstra Nik Clayton この章では あるリリースから次のリリースまでの期間にも、 &os; の開発は休みなく続けられています。 最新の開発ツリーと同期することを好む人がいれば、 公式のリリース版を好んで使う方もいるでしょう。 しかしながら、公式のリリースといえども、 セキュリティや他の重要な修正のため、時にはアップデートを行う必要があります。 使用しているバージョンに関わらず、&os; は手元のシステムを最新の開発ツリーと同期するために必要なツールをすべて用意しているので、 これらのツールを使ってバージョンのアップグレードを簡単に行うことができます。 この章では、開発ブランチを追いかける方法、および、&os; システムをアップデートする基本的なツールについて解説します。 この章を読んで分かるのは: freebsd-update もしくは Subversion を使った &os; システムの更新方法 インストールされているシステムと、変更が行われていない状態との比較方法。 Subversion またはドキュメント用の ports を使って、 インストールされているドキュメントを最新版にアップデートする方法。 2 つの開発ブランチ、&os.stable; と &os.current; の違い ベースシステム全体を再構築しインストールする方法 この章を読む前に、以下の準備をしましょう。 ネットワーク接続の適切な設定 () サードパーティ製のソフトウェアのインストール方法の習得 () この章を通じて、 &os; のソースコードをダウンロードしたりアップデートするのに svnlite が用いられます。 必要に応じて devel/subversion port または package が使われることもあります。 &os; Update Tom Rhodes 寄稿: Colin Percival ベースとなったノートの提供: Updating and Upgrading freebsd-update updating-upgrading すみやかにセキュリティパッチを適用し、 オペレーティングシステムを新しいリリースにアップグレードすることは、 システム管理における重要な側面です。 &os; には、これらの処理を行うために freebsd-update と呼ばれるユーティリティが用意されています。 このユーティリティを用いると、&os; のセキュリティおよび eratta アップデートをバイナリによって行うことができます。 手動でパッチもしくは新しいカーネルをコンパイルし、 インストールする必要はありません。 バイナリアップデートは、 セキュリティチームがサポートしているすべてのアーキテクチャとリリースで利用できます。 https://www.FreeBSD.org/ja/security/ には、 サポートが行われているリリースや保守終了予定日の一覧があります。 このユーティリティは、マイナーリリースであったり、 他のリリースブランチへのアップグレードにも対応しています。 新しいリリースにアップデートする前に、 アップデートしようとしているリリースのアナウンスに目を通し、 重要な情報がないかどうかを確認してください。 リリースのアナウンスは https://www.FreeBSD.org/ja/releases/ で確認できます。 もし crontab の中に &man.freebsd-update.8; の機能が含まれていたら、 オペレーティングシステムのアップグレード作業を終えるまでは無効にしてください。 この節では、freebsd-update で使われる設定ファイルの説明、 セキュリティパッチの適応方法のデモンストレーション、 オペレーティングシステムをアップグレードする際に考慮すべき点について説明します。 設定ファイル freebsd-update のデフォルトの設定ファイルは、 そのままでも用いることができます。 /etc/freebsd-update.conf の設定をデフォルトからきめ細かく調整して、 アップデートプロセスを制御するユーザもいます。 利用可能なオプションについてはこのファイルのコメントで説明されていますが、 以下の項目については補足が必要でしょう。 # Components of the base system which should be kept updated. Components world kernel このパラメータは、&os; のどの部分を最新に維持するかを設定します。 デフォルトでは、ベースシステム全体、 そしてカーネルをアップデートします。 src/basesrc/sys のように、個々の項目を指定することもできます。 この部分についてはデフォルトのままにしておき、 アップデートする項目をユーザがリストに加える形にするのがベストでしょう。 ソースコードとバイナリが同期していないと、 長い年月の間に悲惨な結果がもたらされる可能性があります。 # Paths which start with anything matching an entry in an IgnorePaths # statement will be ignored. IgnorePaths /boot/kernel/linker.hints /bin/sbin 等の特定のディレクトリをアップデートで変更しないように、 これらのパスを追加してください。 このオプションは、ローカルの変更点を freebsd-update が上書きすることを防ぐ目的にも利用できます。 # Paths which start with anything matching an entry in an UpdateIfUnmodified # statement will only be updated if the contents of the file have not been # modified by the user (unless changes are merged; see below). UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile このオプションは、指定したディレクトリにある設定ファイルを、 ローカルで変更されていない場合のみアップデートします。 ユーザがこれらのファイルを変更していると、 変更されたファイルの自動アップデートは行われません。 他に、KeepModifiedMetadata という別のオプションが存在します。 このオプションは、freebsd-update がマージ中に変更点を保存するようにします。 # When upgrading to a new &os; release, files which match MergeChanges # will have any local changes merged into the version from the new release. MergeChanges /etc/ /var/named/etc/ /boot/device.hints freebsd-update がマージすべきファイルが存在するディレクトリの一覧です。 ファイルのマージのプロセスは、 &man.mergemaster.8; と同様 &man.diff.1; パッチの連続ですが、 選択肢は少なく、マージを承認するか、エディタを起動するか、 freebsd-update を中断するかどうかを選んでください。 もし、心配な点があれば、 /etc をバックアップしてからマージを承認してください。 mergemaster の詳細な情報については、 &man.mergemaster.8; で確認してください。 # Directory in which to store downloaded updates and temporary # files used by &os; Update. # WorkDir /var/db/freebsd-update ここではすべてのパッチや一次ファイルを置くディレクトリを指定しています。 バージョンをアップグレードするのであれば、 この場所には少なくともギガバイトの空き容量が必要です。 # When upgrading between releases, should the list of Components be # read strictly (StrictComponents yes) or merely as a list of components # which *might* be installed of which &os; Update should figure out # which actually are installed and upgrade those (StrictComponents no)? # StrictComponents no このオプションを yes に設定すると、 freebsd-updateComponents のリストが完全に正しいと判断し、 このリスト以外の変更点については取り扱いません。 freebsd-update は、効率的に Components リストに属するファイルをアップデートします。 セキュリティパッチの適用 &os; のセキュリティパッチを適用する過程は簡単になりました。 管理者は freebsd-update を使うことで、 システムを完全にパッチがあたった状態に保つ事ができます。 &os; セキュリティ勧告の詳細については、 &os; セキュリティ勧告 の節で説明されています。 以下のコマンドを実行すると、&os; のセキュリティパッチがダウンロードされ、インストールされます。 最初のコマンドは、未対応のパッチがあるかどうかを調べます。 もし未対応のパッチがある場合には、 パッチが当てられた際に変更されるファイルのリストが作成されます。 2 番目のコマンドはパッチを適用します。 &prompt.root; freebsd-update fetch &prompt.root; freebsd-update install アップデートによってカーネルにパッチが当たった場合には、 パッチが当たったカーネルで起動するように、 システムを再起動する必要があります。 もし、実行中のバイナリにパッチが当てられた場合には、 パッチの当てられたバージョンのバイナリが使われるように、 影響のあるアプリケーションを再起動する必要があります。 + + 通常、ユーザはシステムを再起動する必要があります。 + カーネルアップデートで再起動が必要かどうかを知るには、 + freebsd-version -k と + uname -r を実行してください。 + これら 2 つのコマンドの結果が異なる場合には、 + 再起動が必要です。 + + 毎日一度アップデートがないかどうかを自動的に確認するように設定するには、 - 以下のエントリを /etc/crobntab + 以下のエントリを /etc/crontab に追加してください。 @daily root freebsd-update cron パッチが存在すると、 自動的にダウンロードされますが、適用はされません。 root宛てにメールで、 ダウンロードされたパッチを確認し、 freebsd-update install とともに手動でインストールする必要のあることが通知されます。 うまく行かなかった場合には、freebsd-update を以下のように実行すると、最後の変更までロールバックできます。 &prompt.root; freebsd-update rollback Uninstalling updates... done. カーネルまたはカーネルモジュールがアップデートされた場合には、 完了後にもう一度システムを再起動して、 影響のあったバイナリを再起動してください。 freebsd-update ユーティリティが自動的にアップデートするカーネルは GENERIC のみです。 カスタムカーネルをインストールしている場合には、 freebsd-update によりインストールした後、 カーネルを再構築し、もう一度インストールする必要があります。 デフォルトのカーネルの名前は GENERIC です。 &man.uname.1; コマンドを使ってインストールされているかどうかを確認できます。 GENERIC カーネルを、 常に /boot/GENERIC に置いておいてください。 さまざまな問題を解決する際や、 バージョンをアップグレードする際に助けとなります。 GENERIC カーネルを用意する方法については、 を参照してください。 /etc/freebsd-update.conf のデフォルトの設定を変更しない限り、 freebsd-update は、 他の更新と共にカーネルソースをアップデートします。 新しいカスタムカーネルの再構築と再インストールは、 通常通り行うことができます。 freebsd-update は、 常にカーネルをアップデートするとは限りません。 freebsd-update install によってカーネルソースが変更されなかった場合には、 カスタムカーネルを再構築する必要はありません。 しかしながら freebsd-update は、 /usr/src/sys/conf/newvers.sh を常にアップデートします。 これは、現在のシステムのパッチレベルを uname -r-p で表示する時にこのファイルが参照されます。 そのため、何も変更されていない場合でも、 カスタムカーネルを再構築することにより、 uname がシステムの正確なパッチレベルを報告するようになります。 各システムにインストールされているアップデートをすばやく把握できるようになるので、 特に複数のシステムを管理するときに助けとなります。 メジャーおよびマイナーバージョンのアップグレードを行う &os; のマイナーバージョン間のアップグレード、 たとえば、&os; 9.0 から &os; 9.1 へのアップグレードは、 マイナーバージョン アップグレードと呼ばれます。 メジャーバージョン アップグレードは、 &os; 9.X から &os; 10.X へのアップグレードといった、 &os; のメジャーバージョンが変わるようなアップグレードのことです。 どちらのアップグレードもリリース番号のターゲットを指定する事で、 freebsd-update によって行う事ができます。 カスタムカーネルを使っているシステムでは、 アップグレードを行う前に GENERIC カーネルが、 /boot/GENERIC に置かれている事を確認してください。 GENERIC カーネルを用意する方法については、 を参照してください。 以下のコマンドを実行すると、&os; 9.0 のシステムを &os; 9.1 にアップグレードします。 &prompt.root; freebsd-update -r 9.1-RELEASE upgrade コマンドを実行すると、freebsd-update は設定ファイルと現在のシステムを評価し、 アップデートするために必要な情報を収集します。 画面には、どのコンポーネントが認識され、 どのコンポーネントが認識されていないといったリストが表示されます。 たとえば以下のように表示されます。 Looking up update.FreeBSD.org mirrors... 1 mirrors found. Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done. Fetching metadata index... done. Inspecting system... done. The following components of FreeBSD seem to be installed: kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin world/base world/info world/lib32 world/manpages The following components of FreeBSD do not seem to be installed: kernel/generic world/catpages world/dict world/doc world/games world/proflibs Does this look reasonable (y/n)? y ここで、freebsd-update はアップグレードに必要なすべてのファイルをダウンロードします。 何をインストールし、どのように進むかといった質問をされることもあります。 カスタムカーネルを使っていると、 上記のステップで以下のような警告が表示されます。 WARNING: This system is running a "MYKERNEL" kernel, which is not a kernel configuration distributed as part of FreeBSD 9.0-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running "/usr/sbin/freebsd-update install" この時点ではこの警告を無視してもかまいません。 アップデートされた GENERIC カーネルは、 アップグレードプロセスの途中で利用されます。 すべてのパッチがローカルシステムへダウンロードされたら、 次にパッチが適用されます。 このプロセスには時間がかかります。 この時間はコンピュータの性能とワークロードに依存します。 その後、設定ファイルがマージされます。 このプロセスでは、ユーザはファイルをマージするか、 画面上にエディタを立ち上げて手動でマージするかを尋ねられます。 プロセスが進むごとに、成功したマージのすべての結果の情報がユーザに示されます。 マージに失敗したり、無視した場合には、プロセスが中断します。 ユーザによっては /etc のバックアップを取り、 master.passwdgroup のような重要なファイルを後で手動でマージする方もいます。 すべてのパッチは別のディレクトリでマージされており、 まだ、システムには反映されていません。 すべてのパッチが正しく適用され、 すべての設定ファイルがマージされてプロセスがスムーズに進んだら、 ユーザは以下のコマンドを用いて、 変更点をディスクに反映してください。 &prompt.root; freebsd-update install パッチは最初にカーネルとカーネルモジュールに対して当てられます。 システムがカスタムカーネルを実行している場合には、 &man.nextboot.8; を使って次回の再起動時のカーネルを、 アップデートされた /boot/GENERIC に設定してください。 &prompt.root; nextboot -k GENERIC GENERIC カーネルで再起動する前に、 カーネルにシステムが適切に起動するために必要なすべてのドライバが含まれていること、 もしアップデートしているコンピュータがリモートでアクセスしているのであれば、 ネットワーク接続に必要なすべてのドライバも含まれていることを確認してください。 特に、これまで実行しているカスタムカーネルが、 カーネルモジュールとして提供されているビルドインの機能を含んでいるのであれば、 これらのモジュールを一時的に /boot/loader.conf の機能を用いて、 GENERIC に読み込んでください。 アップグレードプロセスが終わるまでは、 重要ではないサービスを無効にするとともに、 必要のないディスクやネットワークのマウントなども避けることが推奨されています。 アップデートされたカーネルでコンピュータを再起動してください。 &prompt.root; shutdown -r now システムがオンラインに戻ったら、以下のコマンドを使って freebsd-update を再び実行してください。 アップデートプロセスの状態は保存されているので、 freebsd-update を実行すると、 最初からではなく、次のステップに進み、 古い共有ライブラリとオブジェクトファイルを削除します。 &prompt.root; freebsd-update install 使用しているライブラリのバージョン番号の付けられ方によって、 3 つのインストールフェーズが 2 つになる場合もあります。 アップグレードはこれで終了です。 もしメジャーアップグレードを行った場合には、 で説明されているようにすべての ports および package を再構築してください。 &os; 9.X 以降のシステムにおけるカスタムカーネル freebsd-update を使う前に、 GENERIC カーネルが /boot/GENERIC に置かれていることを確認してください。 ただ一度だけカスタムカーネルを構築したのであれば、 /boot/kernel.oldGENERIC カーネルそのものです。 このディレクトリの名前を /boot/kernel へと変更してください。 もし、2 回以上カスタムカーネルを構築した後であったり、 カスタムカーネルを構築した回数がわからなければ、 現在のオペレーティングシステムのバージョンの GENERIC カーネルを入手してください。 コンピュータへの物理的なアクセスが可能であれば、 インストールメディアから GENERIC カーネルをインストールできます。 &prompt.root; mount /cdrom &prompt.root; cd /cdrom/usr/freebsd-dist &prompt.root; tar -C/ -xvf kernel.txz boot/kernel/kernel 別な方法としては、 GENERIC カーネルをソースから再構築して、 インストールしてください。 &prompt.root; cd /usr/src &prompt.root; make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null freebsd-update がこのカーネルを GENERIC カーネルとして認識するために、 GENERIC コンフィグレーションファイルは、 とにかく変更してはいけません。 また、特別なオプションを指定しないで構築してください。 freebsd-update は、 /boot/GENERIC が存在する事だけを必要とするので、 GENERIC カーネルで再起動する必要はありません。 メジャーバージョンアップグレード後の package のアップグレード 一般的に、マイナーバージョンアップグレードの後では、 インストールされているアプリケーションは、問題なく動作するでしょう。 メジャーバージョンが異なるとアプリケーションバイナリーインタフェース (ABI) が異なるため、 サードパーティ製のアプリケーションの多くは動作しなくなるでしょう。 メジャーバージョンアップグレード後には、 インストールされているすべての packages, ports をアップグレードする必要があります。 package は、pkg upgrade を使ってアップグレードできます。 インストールされている ports をアップグレードする場合には、 ports-mgmt/portmaster といったユーティリティを使ってください。 すべての package の強制的なアップグレードでは、 バージョン番号が上がらない package に対しても、 リポジトリから最新のバージョンで、インストールされている package を置き換えます。 &os; のメージャーバージョンが変わるようなアップグレードでは、 ABI のバージョンも変わるため、 このようなアップグレードが必要になります。 強制的なアップグレードを行うには、以下のように実行してください。 &prompt.root; pkg-static upgrade -f インストールされているすべてのアプリケーションを再構築するには、 以下のコマンドを実行してください。 &prompt.root; portmaster -af このコマンドを実行すると、 設定を変更するオプションを持つアプリケーションは、 設定変更のスクリーンを表示し、 ユーザからの指示待ちの状態で停止します。 この振る舞いをやめ、デフォルトのオプションを使用するには、 上記のコマンドに を含めてください。 ソフトウェアのアップグレードが終わったら、最後にもう一度 freebsd-update を実行して、 すべてのアップグレードプロセスのやり残し作業を行い、 アップグレードのプロセスを完了してください。 &prompt.root; freebsd-update install GENERIC カーネルを一時的に読み込んでいたのであれば、 に書かれている手順に従って、 新しいカスタムを構築し、インストールしてください。 コンピュータを再起動し、新しい &os; を立ち上げてください。 これでアップグレードのプロセスは完了です。 システムの状態の比較 freebsd-update を用いて、 インストールされている &os; の状態と、 正しく動作することが分かっている状態とを比較できます。 このコマンドは、現在のシステムのユーティリティ、ライブラリ、 設定ファイルを評価するので、 組み込みの侵入検知システム (IDS) として使うことができます。 このコマンドは、security/snort のような本当の IDS の置き換えになるものではありません。 freebsd-update はデータをディスクに保存するので、 不正な変更が行われる可能性があります。 kern.securelevel と、 freebsd-update のデータを使用しないときに、 読み取りのみの許可属性に設定されているファイルシステムに置くことで、 不正な変更の可能性を低くできますが、 よりよい解決方法は、 DVD または安全に保存されている外部 USB ディスクのような安全なディスクとシステムを比較することです。 組み込まれているユーティリティを用いた、別の方法による IDS 機能については、 &os; バイナリによる検出 の節をご覧ください。 比較を行うには、 結果の出力先のファイル名を指定してください。 &prompt.root; freebsd-update IDS >> outfile.ids システムは検査され、リリースファイルの SHA256 ハッシュ値と現在インストールされているファイルのハッシュ値がファイルの一覧と共に、 指定した出力先のファイルに送られます。 これらの行は極めて長いのですが、出力形式は簡単にすぐに解析できます。 たとえば、これらのリリースで異なっているすべてのファイルを知りたいのであれば、 以下のコマンドを実行してください。 &prompt.root; cat outfile.ids | awk '{ print $1 }' | more /etc/master.passwd /etc/motd /etc/passwd /etc/pf.conf 上の表示例では出力は切り捨てられており、 実際にはもっと多くのファイルが存在します。 これらのファイルには、運用中に変更されるファイルがあります。 たとえば、/etc/passwd はユーザがシステムに追加されると変更されます。 また、カーネルモジュールは、 freebsd-update によりアップデートされるため、変更されます。 このような特別なファイルやディレクトリを除外するには、 それらを /etc/freebsd-update.confIDSIgnorePaths オプションに追加してください。 ドキュメントのアップデート Updating and Upgrading Documentation Updating and Upgrading ドキュメントは、&os; オペレーティングシステムの必須要素です。 &os; ドキュメントの最新バージョンは、&os; ウェブサイト (https://www.freebsd.org/doc/) から入手できますが、 &os; ウェブサイト、ハンドブック、FAQ および文書の最新版をローカルに用意しておくと便利です。 この章では、ソースまたは Ports Collection を使って、 ローカルの &os; ドキュメントを最新に保つ方法を説明します。 ドキュメントを編集したり、 ドキュメントの誤りを報告する方法については、 新しい貢献者のための &os; ドキュメンテーションプロジェクト入門 (https://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/) をご覧ください。 ソースから &os; ドキュメントをインストールする ソースから &os; ドキュメントを構築するのに必要なツールは、 &os; のベースシステムには含まれていません。 必要なツールは、&os; ドキュメンテーションプロジェクトが開発している textproc/docproj package または port からインストールできます。 インストールしたら、svnlite を使って、ドキュメントのソースをダウンロードしてください。 &prompt.root; svnlite checkout https://svn.FreeBSD.org/doc/head /usr/doc 最初にドキュメントのソースをダウンロードするには少し時間がかかります。 ダウンロードが終わるまでお待ちください。 ダウンロードしたドキュメントのソースをアップデートするには、 以下のコマンドを実行してください。 &prompt.root; svnlite update /usr/doc 最新のドキュメントのソースのスナップショットを /usr/doc に用意できたら、 インストールされているドキュメントをアップデートする準備はすべて整いました。 利用可能なすべての言語のドキュメントをアップデートするには、 以下のように入力してください。 &prompt.root; cd /usr/doc &prompt.root; make install clean もし、ある特定の言語のみをアップデートしたいのであれば、 /usr/doc の下にある各言語のサブディレクトリで make を実行してください。 &prompt.root; cd /usr/doc/en_US.ISO8859-1 &prompt.root; make install clean ドキュメントをアップデートする別の方法は、 /usr/doc または各言語のサブディレクトリで以下のコマンドを実行してください。 &prompt.root; make update FORMATS を設定して、 以下のようにインストールする出力形式を指定できます。 &prompt.root; cd /usr/doc &prompt.root; make FORMATS='html html-split' install clean ドキュメンテーションの一部のアップデートを簡単にするオプションや、 特定の翻訳のビルドを行うためのオプションが用意されています。 これらのオプションは、システム全般のオプションである /etc/make.conf や、make に与えるコマンドラインオプションで設定できます。 オプションには以下のようなものがあります。 DOC_LANG ビルドおよびインストールの言語およびエンコーディングの一覧。 たとえば、英語のドキュメントを指定するには en_US.ISO8859-1 を設定します。 FORMATS ビルドを行うフォーマット、または出力フォーマットの一覧。 現在は html, html-split, txt, ps そして pdf に対応しています。 DOCDIR ドキュメントをインストールする場所。デフォルトは /usr/share/doc です。 &os; のシステム全般のオプションに関連するもっと多くの make 変数については、 &man.make.conf.5; をご覧ください。 ports を用いたドキュメンテーションのアップデート Marc Fonvieille ベースとなった作業: Updating and Upgrading documentation package Updating and Upgrading これまでのセクションでは、ソースコードを用いた &os; ドキュメントのアップデート方法について説明してきました。 この節では、インストールされている &os; のドキュメントをアップデートするもう一つの方法である、 Ports Collection を用いた方法について説明し、 以下について説明します。 構築済のドキュメントの packages をインストールする方法。 ローカルでの構築作業やドキュメンテーションツールチェインをインストールする必要はありません。 ports フレームワークを使ったドキュメントのソースの構築方法。 チェックアウトおよび構築作業が簡単になります。 &os; のドキュメントをアップデートするこれらの方法は、 &a.doceng; が毎月アップデートしている ドキュメンテーション ports および packages によりサポートされています。 これらの ports は、&os; Ports Collection の docs カテゴリ (http://www.freshports.org/docs/) にまとめられています。 ドキュメンテーション ports の構成は以下の通りです。 misc/freebsd-doc-en package または portは、 すべての英語文書をインストールします。 misc/freebsd-doc-all メタ package もしくは port は、 すべての利用可能な言語のすべてのドキュメントを構築します。 各言語のために package または port が用意されています。たとえば、 misc/freebsd-doc-hu はハンガリー語のドキュメンテーション port です。 バイナリ package を使うと、 インストールする言語に用意されているすべての形式の &os; ドキュメントがインストールされます。 たとえば、以下のコマンドを実行すると、 ハンガリー語のドキュメントの最新 package がインストールされます。 &prompt.root; pkg install hu-freebsd-doc ドキュメントの package は、対応する port 名とは異なり、 lang-freebsd-doc の形式で名前がつけられています。 ここで、lang は言語コードの短縮形です。 ハンガリー語の場合は hu、簡体字の場合には zh_cn です。 ドキュメントのフォーマットを指定する場合には、package ではなく port から構築してください。たとえば、 英語のドキュメントを構築してインストールするには以下のようにして下さい。 &prompt.root; cd /usr/ports/misc/freebsd-doc-en &prompt.root; make install clean この port には、 構築およびインストールするフォーマットを設定するメニューがあります。 デフォルトでは、http://www.FreeBSD.org と同じ形式である分割版の HTML 形式、 PDF が選択されています。 以下のように、ドキュメンテーション ports を構築する際の make オプションが用意されています。 WITH_HTML HTML 形式を構築します。 各ドキュメントに対し、単一版の HTML ファイルが構築されます。 整形されたドキュメントは、 article.htmlbook.html といった名前でインストールされます。 WITH_PDF 整形されたドキュメントは、 article.pdfbook.pdf といった名前でインストールされます。 DOCBASE ドキュメントのインストール先を設定します。 デフォルトのインストール先は /usr/local/share/doc/freebsd です。 以下は、上記の変数を用いてハンガリー語のドキュメントを PDF 形式でインストールする方法です。 &prompt.root; cd /usr/ports/misc/freebsd-doc-hu &prompt.root; make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean に書かれている手順を使って、 ドキュメンテーション package または port をアップデートできます。 たとえば、以下のコマンドを実行すると、 ports-mgmt/portupgrade から、package だけを使ってインストールされているハンガリー語のドキュメントをアップデートします。 &prompt.root; portmaster -PP hu-freebsd-doc 開発ブランチを追いかける -CURRENT -STABLE &os; には二つの開発ブランチがあります。 それは &os.current; と &os.stable; です。 この節ではそれぞれのブランチと対象としている読者についての説明と、 どのようにしてシステムの対応するブランチを最新の状態に保つかについて説明します。 訳: &a.hanai;、1996 年 11 月 6 日 &os.current; を使う &os.current; とは &os; の開発の 最前線 なので、 &os.current; のユーザは高い技術力を持つことが要求されます。 そこまでの技術力を持っていないが、 開発ブランチを追いかけたいと考えているユーザは、 かわりに &os.stable; を追いかけると良いでしょう。 &os.current; は &os; の最新のソースコードであり、 中には現在開発途上のソフトウェア、 実験的な変更、あるいは過渡的な機能などが含まれています。 また、この中に入っている機能がすべて、 次の公式リリースに入るとは限りません。&os.current; をソースからほぼ毎日コンパイルしている人はたくさんいますが、 短い期間ではコンパイルさえできない状態になっている時期もあります。 これらの問題は可能な限り迅速に解決されますが、 &os.current; が不幸をもたらすか、 それとも新しい機能をもたらすかは、 まさにソースコードを同期した瞬間によるのです! &os.current; は、 次の 3 つの重要なグループを対象としています。 ソースツリーのある部分に関して活発に作業している &os; コミュニティのメンバ。 活発にテストしている &os; コミュニティのメンバ。 彼らは、種々の問題を解決するのに時間を惜しまない人々であり、 さまざまな変更に関する提案や &os; の大まかな方向付けを行ないたいと思っている人々でもあり、 パッチも提出します。 さまざまな事に目を向け、 参考のために最新のソースを使いたいと思っていたり、 時々コメントやコードを寄稿したいと考えているユーザ。 &os.current; は、次のリリースの前に、 最も早く新しい機能を入手する手段として、 期待してはいけません。 リリース前の機能は十分にテストされていないため、 バグを含んでいる可能性が大いにあるためです。 また、バグを修正するための素早い方法でもありません。 いかなるコミットは、元からあるバグを修正するのと同じく、 新しいバグを生み出すおそれがあります。 &os.current; には 公式のサポート はありません。 -CURRENT using &os.current; を追いかけるには &a.current.name; と &a.svn-src-head.name; -CURRENT 使用 メーリングリストに加わってください。 さまざまな人がシステムの現在の状態について述べているコメントを見たり、 &os.current; の現在の状態に関する重要な情報を見逃さないために、 必須の ことです。 &a.svn-src-head.name; メーリングリストでは、 それぞれの変更についての commit ログが記録されています。 また、それに関して起こり得る副作用の情報を得ることができますので、 参加する価値のあるメーリングリストです。 これらのメーリングリストに入るには、 &a.mailman.lists.link; をたどって参加したいメーリングリストをクリックし、 手順の説明にしたがってください。 &os.current; だけでなく、 ソースツリー全体の変更点を追いかけるのであれば、 &a.svn-src-all.name; メーリングリストを購読してください。 &os.current; のソースを同期してください。 特に svnlite を使って の一覧にある Subversion ミラーサイトのひとつの head ブランチから -CURRENT コードをチェックアウトしてください。 リポジトリのサイズが大きいため、興味のある部分や、 パッチを当てる部分のソースのみを同期するユーザもいます。 しかしながら、 ソースからオペレーティングシステムをコンパイルしようと思っているユーザは、 一部分だけではなく、&os.current; の すべて をダウンロードする必要があります。 &os.current; をコンパイル -CURRENT コンパイル する前に /usr/src/Makefile を注意深く読み、 に書かれている手順に従ってください。 &a.current; と /usr/src/UPDATING を読めば、 次のリリースへ向けて移ってゆくに当たって、 ときどき必要となる既存システムからの新システムの構築手順についての最新情報が得られるでしょう。 アクティブになってください! &os.current; のユーザには、 拡張やバグ潰しに関して提案することが勧められています。 コードを伴う提案はいつでも歓迎されます! &os.stable; を使う 訳: &a.jp.iwasaki; &os.stable; とは定期的に公開されるリリースを作成するための開発ブランチです。 このブランチに加えられる変更は &os.current; よりゆっくりで、 原則として、事前に &os.current; で試験ずみであるという特徴があります。 ただそうであっても、 これは開発用ブランチの一つであり、ある時点における &os.stable; のソースがどんな場合にも使えるものであるとは限りません。 このブランチはもう一つの開発の流れというだけであって、 エンドユーザ向けのものではありません。 もし試験をする資源的な余裕がない場合は、代わりに最新の &os; リリースを使ってください。 &os; の開発プロセスに興味があったり、 それに対する貢献を考えていて、特にそれが次回の &os; のリリースに関係するものであるなら &os.stable; を追うことを考えると良いでしょう。 &os.stable; ブランチはいつもコンパイルができ、 安定に動作すべきですが、 それが保証されているというわけではありません。 &os.stable; のユーザは &os.current; よりも多いため、&os.current; で発見されなかったバグが &os.stable; で発見され、 ときどきそれが問題となることがあるのは避けることができません。 このような理由から、盲目的に &os.stable; を追いかけるべきではありません。 特に、開発環境もしくはテスト環境でコードを十分に試験せずに、 プロダクション品質が要求されるサーバを &os.stable; にアップグレードしてはいけません &os.stable; を追いかけるには -STABLE 利用する &os.stable; の構築に関連する事柄や、 その他の注意すべき点 に関する情報を得るために、 &a.stable.name; メーリングリストに加わってください。 また開発者は議論の余地がある修正や変更を考えている場合に、 このメーリングリストで公表し、 提案された変更に関して問題が生じるかどうかを返答する機会をユーザに与えます。 追いかけているブランチに関連する svn メーリングリストに参加してください。 たとえば、9-STABLE ブランチを追いかけているユーザは &a.svn-src-stable-9.name; メーリングリストに参加してください。 このリストでは、変更がなされるごとに作成される commit log やそれに伴う起こりうる副作用についての情報が記録されています。 これらのメーリングリストに入るには、&a.mailman.lists.link; をたどって参加したいメーリングリストをクリックし、 手順の説明にしたがってください。 ソースツリー全体の変更点を追いかけるには、 &a.svn-src-all.name; メーリングリストを購読してください。 新しい &os.stable; システムをインストールするには、 ミラーサイト から最近の &os.stable; リリースをインストールするか、 毎月公開されている &os.stable; からビルドされたスナップショットを使ってください。 スナップショットの詳細については、www.freebsd.org/ja/snapshots をご覧ください。 既に &os; が動いているシステムを &os.stable; にアップグレードするには、 svn Subversion を使って、 希望する開発ブランチのソースをチェックアウしてください。 stable/9 といったブランチ名は、 www.freebsd.org/releng で説明されています。 &os.stable; をコンパイルしたり &os.stable; へとアップグレード -STABLE 構築、コンパイル する前に、 /usr/src/Makefile を注意深く読み、 に書かれている手順に従ってください。 &a.stable; と /usr/src/UPDATING を読んで、 次のリリースへ向けて移ってゆくに当たって、 ときどき必要となる既存システムからの新システムの構築手順についての最新情報を得てください。 ソースを用いた &os; のアップデート ソースをコンパイルして&os; をアップデートする方法は、 バイナリを用いたアップデートに比べ、いくつもの利点があります。 特定のハードウェアをうまく利用するためのオプションを設定してコードを構築できます。 ベースシステムの特定の箇所の設定をデフォルトの設定から変更したり、 必要がない部分を完全に削除して構築することもできます。 システムを構築することによるアップデートは、 バイナリアップデートをインストールするだけのアップデートに比べ時間がかかりますが、 利用環境に合わせた &os; を作成するような完全なカスタマイズが可能です。 クィックスタート 以下は &os; をソースから構築してアップデートする典型的な方法についてのクイックリファレンスです。 その後の節では、各プロセスをより詳細に説明します。 アップデートおよびビルド &prompt.root; svnlite update /usr/src check /usr/src/UPDATING &prompt.root; cd /usr/src &prompt.root; make -j4 buildworld &prompt.root; make -j4 kernel &prompt.root; shutdown -r now &prompt.root; cd /usr/src &prompt.root; make installworld &prompt.root; mergemaster -Ui &prompt.root; shutdown -r now 最新版のソースを入手してください。 ソースの入手およびアップデートに関する情報については をご覧ください。 ソースの構築の前後で必要となる手動の作業について、 /usr/src/UPDATING を確認してください。 ソースが置かれているディレクトリに移動してください。 world (カーネルを除くすべて) をコンパイルしてください。 カーネルをコンパイルしてインストールしてください。 ここに書かれているコマンドは、make buildkernel installkernel と同じです。 新しいカーネルを使うため、 システムを再起動してください。 ソースが置かれているディレクトリに移動してください。 world をインストールしてください。 /etc/ に置かれている設定ファイルをアップデートしたりマージしてください。 新しく構築された world およびカーネルを利用するため、 システムを再起動してください。 ソースを用いたアップデートのための準備 /usr/src/UPDATING を読んでください。 このファイルには、 アップデートの前後で必要となる手動の作業について書かれています。 ソースコードのアップデート &os; のソースコードは /usr/src/ に置かれています。 このソースコードのアップデートには、 Subversion バージョン管理システムを利用する方法が推奨されています。まず、 ソースコードがバージョン管理下にあることを確認してください。 &prompt.root; svnlite info /usr/src Path: /usr/src Working Copy Root Path: /usr/src ... この結果は、/usr/src/ がバージョン管理下にあり、&man.svnlite.1; を使ってアップデートできることを示しています。 &prompt.root; svnlite update /usr/src このディレクトリをアップデートしていない期間が長いと、 アップデートのプロセスには時間がかかります。 このプロセスが終わると、ソースコードは最新となり、 次節以降で説明する構築のプロセスを実行できます。 ソースコードの入手 '/usr/src' is not a working copy という出力が出た場合には、 ファイルがなかったり、別な方法によりインストールされているので、 新しくソースコードをチェックアウトする必要があります。 &os; のバージョンおよびリポジトリパス uname -r の出力 リポジトリパス 説明 X.Y-RELEASE base/releng/X.Y このリリースバージョンに対する重大なセキュルティへの対応およびバグの修正パッチのみが適用されています。 このブランチは、ほとんどのユーザに推奨されます。 X.Y-STABLE base/stable/X リリースバージョンに対し、 そのブランチにおけるすべての開発の成果が反映されたものです。 STABLE は、 Applications Binary Interface (ABI) が変更されないことを意味しており、 このブランチの以前のバージョンでコンパイルされたソフトウェアは、 このバージョンでも実行できることを意味しています。 たとえば、&os; 10.1 で実行するようにコンパイルされたソフトウェアは、 &os; 10-STABLE においても実行できます。 STABLE ブランチは、 時期によってはユーザに影響するようなバグや非互換性を持つことがあります。 これらは通常すぐに修正されます。 X-CURRENT base/head/ リリースが行われていない最新の &os; の開発バージョンです。 CURRENT ブランチは大きなバグや非互換があることもあるので、 高度な知識を持ったユーザのみ使用が推奨されます。
&man.uname.1; を使って &os; のバージョンを確認してください。 &prompt.root; uname -r 10.3-RELEASE から分かるように、10.3-RELEASE のアップデートのためのソースコードのパスは、 base/releng/10.3 です。 このパスは、ソースコードをチェックアウトする時に使います。 &prompt.root; mv /usr/src /usr/src.bak &prompt.root; svnlite checkout https://svn.freebsd.org/base/releng/10.3 /usr/src この古いディレクトリを、 邪魔にならないように移動してください。 このディレクトリ以下に対して変更を行ってなければ、 削除しても構わないでしょう。 リポジトリの URL に記載されているパスを追加します。 3 番目のパラメータには、 ローカルシステム上でソースコードが置かれるディレクトリを指定します。
ソースからの構築 まず最初に world (カーネルを除くオペレーティングシステムのすべて) をコンパイルします。 このステップを最初に実行するのは、 カーネルの構築を最新のツールを使って行うようにするためです。 このステップが終わったら、カーネルそのものを構築します。 &prompt.root; cd /usr/src &prompt.root; make buildworld &prompt.root; make buildkernel コンパイルされたコードは /usr/obj に書き出されます。 これは基本のステップです。 構築をコントロールする追加のオプションについては、 以下で説明します。 クリーンビルドの実行 &os; ビルドシステムのいくつかのバージョンは、 オブジェクトが一時的に置かれるディレクトリ /usr/obj に前回のコンパイルされたコードを残します。 これにより、変更されていないコードを再コンパイルせずにすむので、 その後の構築時間を短縮できます。 すべてを再構築するには、構築を開始する前に、 cleanworld を実行してください。 &prompt.root; make cleanworld ジョブの数の設定 マルチコアプロセッサを搭載するシステムでは、 構築のためのジョブの数を増やすことで、 構築にかかる時間を短縮できます。 sysctl hw.ncpu を使って、 コアの数を確認してください。 ジョブの数がどのように構築の速さに影響するかを確実に知るには、 プロセッサにより異なりますし、&os; のバージョンにより使用されるビルドシステムも変わるため、 実際に試してみるしか方法はありません。 試してみる最初のジョブの数の候補としては、 コアの数の半分から倍の数の間で検討してみてください。 ジョブの数は、 を使って指定します。 構築のジョブの数を増やす 以下は 4 つのジョブで world とカーネルを構築する例です。 &prompt.root; make -j4 buildworld buildkernel カーネルのみを構築する ソースコードが変更された場合には、 buildworld を完了しなければいけません。 その後、いつでも buildkernel でカーネルを構築できます。 カーネルだけを構築するには、以下のように実行してください。 &prompt.root; cd /usr/src &prompt.root; make buildkernel カスタムカーネルの構築 &os; 標準のカーネルは、 GENERIC と呼ばれる カーネルコンフィグレーションファイル に基づいています。 GENERIC カーネルには、 最も良く使われるデバイスドライバやオプションが含まれています。 しかしながら、 特定の目的に合わせてデバイスドライバやオプションを削除したり追加するためには、 カスタムカーネルを構築することが有用であったり、 必要となることがあります。 たとえば、極端に RAM が制限されているような小さな組み込みのコンピュータを開発しているユーザであれば、 必要のないデバイスドライバやオプションを削除することで、 カーネルを少しでも小さくできるでしょう。 カーネルのコンフィグレーションファイルは、 /usr/src/sys/arch/conf/ に置かれています。ここで、 archuname -m の出力です。 ほとんどのコンピュータは amd64 であり、 コンフィグレーションファイルが置かれているディレクトリは /usr/src/sys/amd64/conf/ です。 /usr/src は、 削除されたり作り直されたりする可能性があるため、 カスタムカーネルのコンフィグレーションファイルは、 /root のような別のディレクトリで管理することが好ましいです。 カーネルコンフィグレーションファイルは、 conf ディレクトリにリンクします。 このディレクトリが削除されたり、上書きされた場合には、 カーネルコンフィグレーションファイルを新しいディレクトリにもう一度リンクしてください。 カスタムコンフィグレーションファイルは、 GENERIC コンフィグレーションファイルをコピーして作成できます。 たとえば、 ストレージサーバ用の STORAGESERVER という名前の新しいカスタムカーネルは、 以下のようにして作成できます。 &prompt.root; cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER &prompt.root; cd /usr/src/sys/amd64/conf &prompt.root; ln -s /root/STORAGESERVER . その後 /root/STORAGESERVER を編集し、 &man.config.5; で示されるデバイスやオプションを追加したり削除してください。 コマンドラインからカーネルコンフィグレーションファイルを KERNCONF に指定することで、 カスタムカーネルを構築できます。 &prompt.root; make buildkernel KERNCONF=STORAGESERVER コンパイルされたコードのインストール buildworld および buildkernel が完了したら、 新しいカーネルと world をインストールしてください。 &prompt.root; cd /usr/src &prompt.root; make installkernel &prompt.root; shutdown -r now &prompt.root; cd /usr/src &prompt.root; make installworld &prompt.root; shutdown -r now カスタムカーネルを構築した場合は、 新しいカスタムカーネルを KERNCONF に設定して実行してください。 &prompt.root; cd /usr/src &prompt.root; make installkernel KERNCONF=STORAGESERVER &prompt.root; shutdown -r now &prompt.root; cd /usr/src &prompt.root; make installworld &prompt.root; shutdown -r now アップデートの完了 アップデートの完了までに、いくつかの最終作業が残されています。 デフォルトから変更した設定ファイルを新しいバージョンのファイルにマージし、 古くなったライブラリを見つけて削除した後に、 システムを再起動します。 &man.mergemaster.8; を用いた設定ファイルのマージ &man.mergemaster.8; を用いることで、 システムの設定ファイルに行われている変更を、 簡単にこれらのファイルの新しいバージョンにマージできます。 オプションを使って &man.mergemaster.8; を実行すると、 ユーザが手を加えていないファイルのアップデートおよび新しく追加されたファイルのインストールを自動的に行います。 &prompt.root; mergemaster -Ui ファイルのマージを手動で行う必要がある時は、 ファイルの中で残す箇所の選択を対話的におこなうようなインタフェースが表示さます。 詳細については、&man.mergemaster.8; をご覧ください。 使われなくなったファイルやライブラリの確認 アップデート後に、 使われなくなったファイルやディレクトリが残ることがあります。 これらのファイルは、 &prompt.root; make check-old で確認でき、以下のようにして削除できます。 &prompt.root; make delete-old 同様に使われなくなったライブラリが残ることもあります。 これらのライブラリは、 &prompt.root; make check-old-libs で確認でき、以下のようにして削除できます。 &prompt.root; make delete-old-libs これらの古いライブラリを利用しているプログラムは、 ライブラリが削除されると動かなくなります。 これらのプログラムは、古いライブラリを削除した後に、 再構築もしくは置き換える必要があります。 古いファイルとディレクトリのすべてを削除しても問題ないことを確認したら、 コマンドに BATCH_DELETE_OLD_FILES を設定することで、各ファイルを削除する際に y および Enter を押さなくても済むようにできます。以下はその例です。 &prompt.root; make BATCH_DELETE_OLD_FILES=yes delete-old-libs アップデート後の再起動 コンピュータを再起動して、すべての変更を反映させることが、 アップデートの最後におこなう作業です。 &prompt.root; shutdown -r now
複数のマシンで追いかける Mike Meyer 寄稿: NFS 複数のマシンにインストール 複数のコンピュータで同じソースツリーを追いかけていて、 全部のマシンにソースをダウンロードして全部を再構築するのは、 ディスクスペース、ネットワーク帯域、 そして CPU サイクルの無駄使いです。 解決策は 1 つのマシンに仕事のほとんどをさせ、 残りのマシンは NFS 経由でそれをマウントする、というものです。 このセクションではそのやり方を概観します。 NFS の使い方の詳細については、 をご覧下さい。 まず初めに、同じバイナリで動かそうとするマシンたちを決めます。 このマシンたちのことをビルドセットと呼びます。 それぞれのマシンはカスタムカーネルを持っているかもしれませんが、 同じユーザランドバイナリを動かそうというのです。 このビルドセットから、 ビルドマシンとなるマシンを 1 台選びます。 ベースシステムとカーネルを構築するのはこのマシンになります。 理想的には、このマシンは make buildworldmake buildkernel を実行するのに十分な CPU を持った速いマシンであるべきです。 テストマシン となるべきマシンも選んでください。 更新されたソフトウェアを使う前にそのマシンでテストするのです。 テストマシンはかなり長い時間落ちていても だいじょうぶなマシンであったほうがいいでしょう。 ビルドマシンでもかまいませんが、 ビルドマシンである必要はありません。 このビルドセットのマシンはすべて /usr/obj/usr/src をビルドマシンから FTP 経由でマウントする必要があります。 ビルドセット自体が複数ある場合は、 /usr/src はひとつのビルドマシン上にあるべきです。 他のマシンからはそれを NFS マウントするようにしましょう。 ビルドセットのすべてのマシン上の /etc/make.conf/etc/src.conf がビルドマシンと一致していることを確認してください。つまり、 ビルドマシンはビルドセットのどのマシンもインストールしようとしている ベースシステムを全部ビルドしなければならないということです。 また、各ビルドマシンは /etc/make.conf にそれぞれのビルドマシンのカーネル名を KERNCONF で指定し、 ビルドマシンは自分自身のカーネルから順に全部のカーネル名を KERNCONF にリストアップしてください。 ビルドマシンは各マシンのカーネル設定ファイルを /usr/src/sys/arch/conf に持っていなければなりません。 ビルドマシンにて、 に書いてあるようにカーネルとベースシステムを構築してください。 でも、まだビルドマシンにはインストールしないでください。 そのかわり、 ビルドしたカーネルをテストマシンにインストールしてください。 FTP 経由で /usr/src および /usr/obj をテストマシンにマウントしてください。 その後、shutdown now を実行してシングルユーザモードに移行し、 新しいカーネルとベースシステムをインストールし、 いつもするように mergemaster を実行してください。 終わったら、再起動して通常のマルチユーザ動作に戻します。 テストマシンにあるものすべてがちゃんと動いている確信が得られたら、 同じ手順でビルドセットの他のマシンにも新しいソフトウェアをインストールします。 ports ツリーにも同じ方法が使えます。 最初のステップは、 ビルドセットのすべてのマシンが NFS 経由で /usr/ports をマウントすることです。 そして、distfiles を共有するように /etc/make.conf を設定します。 NFS マウントによってマップされる root ユーザが何であれ、DISTDIR はそのユーザが書き込める共通の共有ディレクトリに設定する必要があります。 ports をローカルでビルドする場合には、 各マシンは WRKDIRPREFIX を自分のマシンのビルドディレクトリに設定しなければなりません。 また、ビルドシステムが packages をビルドしてビルドセットのコンピュータに配布するのであれば、 DISTDIR と同じようにビルドシステム上の PACKAGES ディレクトリも設定してください。