OSを最新のRELEASEに更新する


Last Update: 2005/01/04
42218 th Visitor

最新のFreeBSD RELEASE

FreeBSDのRELEASE版は、FreeBSDのSTABLEというバージョンから定期的にリリースされる仕組みになっています。
ただし現在の5.x-RELEASEは開発版の位置づけのためCURRENTからリリースされています。

しかしながらRELEASEから次のRELEASEが出るまでの間にバグが発覚したりセキュリティホールが出ることがあります。
このような時にFreeBSDのRELEASE版は開発ツリーのように大幅な変更はしないものの、セキュリティや運用に問題無いようにパッチを当てるなどして保守しています。
この保守されたバージョンのRELEASEはバージョンが-p付きとなり、例えばFreeBSD 5.-RELEASEの場合、FreeBSD 5.2.1-RELEASE-p1、-p2のように更新されてリリースされています。

ただし、このような-p付きのバージョンはISOイメージなどが作られず、一般向けに公開もされません。
そのため、-p付きの最新のRELEASEにしたい場合はcvsupとmake worldを用いてFreeBSDのシステムをアップデートします。

なお、make worldにはHDDを300MB程度消費しますので、空き容量に注意してください。

最新のRELEASEにソースを同期する

お使いのFreeBSDを最新のRELEASEにするには、サーバーからFreeBSDのソースコードを同期し、それをコンパイル、インストールを行います。
このようにFreeBSDのベースシステムを更新する一連の作業をmake worldと呼んだりします。

ソースコードの同期はportsと同様にcvsupを用います。
cvsupの設定ファイルの中で、最新のRELEASEにするための設定ファイルに一番近いのはSTABLE用の stable-supfile です。
これを適当な場所(例では/etc)にコピーして中身を編集します。
本来のstable-supfileの使い方とは少し異なりますので、一応release-supfileと名前を変更しておくことにします。

> su
# cp /usr/share/examples/cvsup/stable-supfile /etc/release-supfile

また、コピーしただけでは読み取り専用の状態ですので書き込み権限を与え編集します。

# chmod 644 /etc/release-supfile
# vi /etc/release-supfile

release-supfileの編集

編集方法はportsの時とほぼ同様で、まず同期するサーバーを指定します。

*default host=CHANGE_THIS.FreeBSD.org

の部分を例えば、

*default host=cvsup3.jp.freebsd.org

などに変更します。
次に、

*default release=cvs tag=RELENG_4

の部分を見て、自分が求めているソースツリーであるかどうかを確認します。
RELENG_4というのは、4-STABLE(FreeBSD 4.xの開発版)を指しています。
今回は5.2.1-RELEASEを更新するのが目的ですので、RELEASE版のFreeBSDのツリーは例えば5.1-RELEASEであれば「RELENG_5_1」、5.2-RELEASEや5.2.1-RELEASEであれば「RELENG_5_2」と言った感じに変更します。

よって5.2.1-RELEASEを更新したい場合は

*default release=cvs tag=RELENG_5_2

と指定します。

次にどのカテゴリを取得するかの設定をしますが、portsの時と同様にsupfileでは全て取得する設定にし、refuseファイルで取得拒否の設定をします。
ので、取得カテゴリの設定は

src-all

以外が全てコメントアウトされているデフォルトの状態で良いです。
ただしgamesカテゴリは不要ですので、refuseに記述して取得拒否させましょう。

# vi /usr/sup/refuse

src/games

として、src/gamesを追加しておきます。
ただし、ここで受信拒否しても/usr/srcにgamesディレクトリがあればコンパイルされてしまいますので、gamesディレクトリが存在する場合は削除しておきます。

# rm -r /usr/src/games

これでcvsupの準備は完了です。

ソースの同期

release-supfileが設定できたら、早速ソースを更新したいと思います。
方法はportsの時と全く同じです。

# cvsup -g -L2 /etc/release-supfile

portsの時は/usr/portsに取得されましたが、今回は/usr/srcに取得したものが入ります。
初回実行時にはports同様時間がかかると思います。

ソースのコンパイル(make buildworld)

ソースの同期が完了したら、同期したソースをコンパイルします。
ソースをコンパイルするには、make buildworldというコマンドを使います。
これを行うと、kernelを除くFreeBSDのベースシステム全てがコンパイルされます。

> su
# cd /usr/src
# make buildworld

としてコンパイルを開始します
システムを全てコンパイルしますのでそれなりに時間がかかります。
目安としてCeleron 500MHzで大体2〜3時間、PentiumM 1.4GHzで30分強といったところです。
エラーメッセージも出ずプロンプトに戻ったら終了です。

また、

# make -j4 buildworld

のようにスレッドをいくつか作ってコンパイルしてやると、早く終わるようです。
個人的には-j4オプションを付けることをお勧めします。
また/etc/make.confを適切に設定することによってコンパイル時間を短くすることが可能です。

kernelのコンパイル(make buildkernel)

ソースがコンパイルできたら、次はkernelをコンパイルします。
kernelをコンパイルするには、make buildkernelというコマンドを使います。
make buildworldと同様に/usr/srcで

# make buildkernel

としてやると、kernelのコンパイルが始まります。
これもbuildworldに比べれば全然短いですが時間がかかりますので、お茶の準備をしておきましょう。

この時に作られるkernelはGENERICと呼ばれる標準kernelですが、既に自分のkernelのコンフィグファイルを作成している場合はそれを指定することが可能です。コンフィグファイルがCELIESの場合、

# make KERNCONF=CELIES buildkernel

のようにしてやると後でkernelを再構築する必要が無くなります。
また、KERNCONF=CELIESを/etc/make.confに記述しておくと、make buildkernelとやれば自動的に指定したコンフィグファイルを参照してkernelを作成してくれます。

kernelのインストール(make installkernel)

kernelがエラーが無くコンパイルできたら、早速新しいkernelをインストールします。
make buildkernelと同様に/usr/srcで

# make installkernel

とするとkernelのインストールが始まります。
エラーが無く終われば成功です。

kernelのインストールが終わったら、新しいkernelでFreeBSDを起動するためにPCを再起動します。

# shutdown -r now

コンパイル済みのシステムのインストール(make installworld)

次にコンパイルしたシステムファイルをインストールします。
このとき、よけいなプロセスが走っているとシステムの更新に重大な支障をきたす可能性があるので、FreeBSDをシングルユーザーモードというモードで起動させます。

再起動後、
デーモンくんの画面で 6. Esacpe to loader prompt を選択し、ローダープロンプトに移行してください。
設定でデーモンくんを無効にしている場合は Booting [kernel] in 10 seconds... のカウントが始まったところで space を押してください。
ローダープロンプトの画面になったら

OK boot -s

のようにboot -sと入力しEnterを押すとシングルユーザーモードでOSが起動します。
シングルユーザーモードでは最初にshellのパスを要求されます。

Enter full pathname of shell or RETURN for [/bin/sh] :

デフォルトの/bin/shを入力してください。
プロンプトが表示されたら、最初に各パーティションをマウントします。

# /sbin/mount -a

その後、rootになりコンパイルしたシステムをインストールします。

% su
# cd /usr/src
# make installworld

とすると、buildworldでコンパイルしたシステムがインストールされます。

etcの更新(mergemaster)

システムが更新できたら、次は/etcを更新します。(別にしなくてもOS自体は動きますが、やるにこしたことは無いでしょう)
/etcには自分が更新した設定ファイルが入っているはずなので、誤って上書きしないようにバックアップを取っておきます。

# cp -Rp /etc /etc.old

例では/etc.oldにバックアップしています。
/etcの更新にはmergemasterというコマンドを使います。
これは、make worldで更新されたファイルを自動で検知してくれる便利なツールです。
また更新する、しないの他に、マージと言って更新された部分のみ反映する(手動ですが)といったこともできます。

# mergemaster -s -v

と実行すると、mergemasterの画面に移ります。
もし、mergemasterを以前に実行していた場合は、以前のmergemasterで作った仮のルートを消すか?と聞かれますので"d"を入力して消してください。
あと、PAGERがmore以外の場合はPAGERを指定する必要があるので指定してください。

mergemasterの主な使い方は、よく文章を読めば理解できるとは思うのですが、まずmergemasterは仮のルートを作って、そこへ新しい/etcを置きます。
そこから、/etcへコピーするか、/etcにあるものを保持するかを選択できるんですが、主な操作方法は3つです。

新しいファイルに更新する場合は"i"
/etc にあるものをそのまま使う時は"d"
マージする時は"m"

です。
どうすれば良いかよくわからない場合はdを選択すれば良いでしょう。
もし間違えて設定を消してしまっても、バックアップから復元することができるので安心して挑んでみてください。
最後にmergemasterを終えて設定ファイルが全て大丈夫なことを確信した後に、バックアップしたディレクトリを消しましょう。

# rm -r /etc.old

最後に

mergemasterが終わったらmake worldに関する全ての作業は完了ですので、PCを再起動します。
再起動後、

> uname -a

として-p付きのバージョンが表示されることを確認してください。


FreeBSDのインストール


もどるにゅ

トップにもどるにゅ