ソースをコンパイルしてFreeBSD をアップデートする方法は、 バイナリを用いたアップデートに比べ、いくつもの利点があります。 特定のハードウェアをうまく利用するためのオプションを設定してコードを構築できます。 ベースシステムの特定の箇所の設定をデフォルトの設定から変更したり、 必要がない部分を完全に削除して構築することもできます。 システムを構築することによるアップデートは、 バイナリアップデートをインストールするだけのアップデートに比べ時間がかかりますが、 利用環境に合わせた FreeBSD を作成するような完全なカスタマイズが可能です。
以下は FreeBSD をソースから構築してアップデートする典型的な方法についてのクイックリファレンスです。 その後の節では、各プロセスをより詳細に説明します。
アップデートおよびビルド
#
svnlite update /usr/src
check
/usr/src/UPDATING
![]()
#
cd /usr/src
![]()
#
make -j
4
buildworld![]()
#
make -j
4
kernel![]()
#
shutdown -r now
![]()
#
cd /usr/src
![]()
#
make installworld
![]()
#
mergemaster -Ui
![]()
#
shutdown -r now
最新版のソースを入手してください。 ソースの入手およびアップデートに関する情報については 「ソースコードのアップデート」 をご覧ください。 | |
ソースの構築の前後で必要となる手動の作業について、
| |
ソースが置かれているディレクトリに移動してください。 | |
world (カーネルを除くすべて) をコンパイルしてください。 | |
カーネルをコンパイルしてインストールしてください。
ここに書かれているコマンドは、 | |
新しいカーネルを使うため、 システムを再起動してください。 | |
ソースが置かれているディレクトリに移動してください。 | |
world をインストールしてください。 | |
| |
新しく構築された world およびカーネルを利用するため、 システムを再起動してください。 |
FreeBSD のソースコードは
/usr/src/
に置かれています。
このソースコードのアップデートには、
Subversion
バージョン管理システムを利用する方法が推奨されています。まず、
ソースコードがバージョン管理下にあることを確認してください。
#
svnlite info /usr/src
Path: /usr/src Working Copy Root Path: /usr/src ...
この結果は、/usr/src/
がバージョン管理下にあり、svnlite(1)
を使ってアップデートできることを示しています。
#
svnlite update /usr/src
このディレクトリをアップデートしていない期間が長いと、 アップデートのプロセスには時間がかかります。 このプロセスが終わると、ソースコードは最新となり、 次節以降で説明する構築のプロセスを実行できます。
'/usr/src' is not a working copy
という出力が出た場合には、
ファイルがなかったり、別な方法によりインストールされているので、
新しくソースコードをチェックアウトする必要があります。
uname(1) を使って FreeBSD のバージョンを確認してください。
#
uname -r
10.3-RELEASE
表17.1「FreeBSD のバージョンおよびリポジトリパス」
から分かるように、10.3-RELEASE
のアップデートのためのソースコードのパスは、
base/releng/10.3
です。
このパスは、ソースコードをチェックアウトする時に使います。
#
mv /usr/src /usr/src.bak
![]()
#
svnlite checkout https://svn.freebsd.org/base/
releng/10.3
/usr/src
この古いディレクトリを、 邪魔にならないように移動してください。 このディレクトリ以下に対して変更を行ってなければ、 削除しても構わないでしょう。 | |
リポジトリの URL に 表17.1「FreeBSD のバージョンおよびリポジトリパス」 に記載されているパスを追加します。 3 番目のパラメータには、 ローカルシステム上でソースコードが置かれるディレクトリを指定します。 |
まず最初に world (カーネルを除くオペレーティングシステムのすべて) をコンパイルします。 このステップを最初に実行するのは、 カーネルの構築を最新のツールを使って行うようにするためです。 このステップが終わったら、カーネルそのものを構築します。
#
cd /usr/src
#
make buildworld
#
make buildkernel
コンパイルされたコードは
/usr/obj
に書き出されます。
これは基本のステップです。 構築をコントロールする追加のオプションについては、 以下で説明します。
FreeBSD ビルドシステムのいくつかのバージョンは、
オブジェクトが一時的に置かれるディレクトリ
/usr/obj
に前回のコンパイルされたコードを残します。
これにより、変更されていないコードを再コンパイルせずにすむので、
その後の構築時間を短縮できます。
すべてを再構築するには、構築を開始する前に、
cleanworld
を実行してください。
#
make cleanworld
マルチコアプロセッサを搭載するシステムでは、
構築のためのジョブの数を増やすことで、
構築にかかる時間を短縮できます。
sysctl hw.ncpu
を使って、
コアの数を確認してください。
ジョブの数がどのように構築の速さに影響するかを確実に知るには、
プロセッサにより異なりますし、FreeBSD
のバージョンにより使用されるビルドシステムも変わるため、
実際に試してみるしか方法はありません。
試してみる最初のジョブの数の候補としては、
コアの数の半分から倍の数の間で検討してみてください。
ジョブの数は、-j
を使って指定します。
ソースコードが変更された場合には、
buildworld
を完了しなければいけません。
その後、いつでも
buildkernel
でカーネルを構築できます。
カーネルだけを構築するには、以下のように実行してください。
#
cd /usr/src
#
make buildkernel
FreeBSD 標準のカーネルは、
GENERIC
と呼ばれる
カーネルコンフィグレーションファイル
に基づいています。
GENERIC
カーネルには、
最も良く使われるデバイスドライバやオプションが含まれています。
しかしながら、
特定の目的に合わせてデバイスドライバやオプションを削除したり追加するためには、
カスタムカーネルを構築することが有用であったり、
必要となることがあります。
たとえば、極端に RAM が制限されているような小さな組み込みのコンピュータを開発しているユーザであれば、 必要のないデバイスドライバやオプションを削除することで、 カーネルを少しでも小さくできるでしょう。
カーネルのコンフィグレーションファイルは、
/usr/src/sys/
に置かれています。ここで、
arch
/conf/arch
は
uname -m
の出力です。
ほとんどのコンピュータは
amd64
であり、
コンフィグレーションファイルが置かれているディレクトリは
/usr/src/sys/
です。amd64
/conf/
/usr/src
は、
削除されたり作り直されたりする可能性があるため、
カスタムカーネルのコンフィグレーションファイルは、
/root
のような別のディレクトリで管理することが好ましいです。
カーネルコンフィグレーションファイルは、
conf
ディレクトリにリンクします。
このディレクトリが削除されたり、上書きされた場合には、
カーネルコンフィグレーションファイルを新しいディレクトリにもう一度リンクしてください。
カスタムコンフィグレーションファイルは、
GENERIC
コンフィグレーションファイルをコピーして作成できます。
たとえば、
ストレージサーバ用の STORAGESERVER
という名前の新しいカスタムカーネルは、
以下のようにして作成できます。
#
cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER
#
cd /usr/src/sys/amd64/conf
#
ln -s /root/STORAGESERVER .
その後 /root/STORAGESERVER
を編集し、
config(5)
で示されるデバイスやオプションを追加したり削除してください。
コマンドラインからカーネルコンフィグレーションファイルを
KERNCONF
に指定することで、
カスタムカーネルを構築できます。
#
make buildkernel KERNCONF=STORAGESERVER
buildworld
および
buildkernel
が完了したら、
新しいカーネルと world をインストールしてください。
#
cd /usr/src
#
make installkernel
#
shutdown -r now
#
cd /usr/src
#
make installworld
#
shutdown -r now
カスタムカーネルを構築した場合は、
新しいカスタムカーネルを KERNCONF
に設定して実行してください。
#
cd /usr/src
#
make installkernel KERNCONF=STORAGESERVER
#
shutdown -r now
#
cd /usr/src
#
make installworld
#
shutdown -r now
アップデートの完了までに、いくつかの最終作業が残されています。 デフォルトから変更した設定ファイルを新しいバージョンのファイルにマージし、 古くなったライブラリを見つけて削除した後に、 システムを再起動します。
mergemaster(8) を用いることで、 システムの設定ファイルに行われている変更を、 簡単にこれらのファイルの新しいバージョンにマージできます。
-Ui
オプションを使って
mergemaster(8) を実行すると、
ユーザが手を加えていないファイルのアップデートおよび新しく追加されたファイルのインストールを自動的に行います。
#
mergemaster -Ui
ファイルのマージを手動で行う必要がある時は、 ファイルの中で残す箇所の選択を対話的におこなうようなインタフェースが表示さます。 詳細については、mergemaster(8) をご覧ください。
アップデート後に、 使われなくなったファイルやディレクトリが残ることがあります。 これらのファイルは、
#
make check-old
で確認でき、以下のようにして削除できます。
#
make delete-old
同様に使われなくなったライブラリが残ることもあります。 これらのライブラリは、
#
make check-old-libs
で確認でき、以下のようにして削除できます。
#
make delete-old-libs
これらの古いライブラリを利用しているプログラムは、 ライブラリが削除されると動かなくなります。 これらのプログラムは、古いライブラリを削除した後に、 再構築もしくは置き換える必要があります。
古いファイルとディレクトリのすべてを削除しても問題ないことを確認したら、
コマンドに BATCH_DELETE_OLD_FILES
を設定することで、各ファイルを削除する際に
y および Enter
を押さなくても済むようにできます。以下はその例です。
#
make BATCH_DELETE_OLD_FILES=yes delete-old-libs
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。