システムのアップグレード

ここで述べるのはFreeBSDのバージョンをアップグレードする為の一般的な手順。
自分が試したのは
「FreeBSD6.0-RELEASE」→「FreeBSD6.1-RELEASE」
「FreeBSD6.1-RELEASE」→「FreeBSD6.2-RELEASE」
の2通り。
どのバージョンへでもアップグレードできる訳ではないので、基本的にドキュメントを参照する。
なお、当然の事ながら、この作業を行う前のバックアップは必須。

事前準備

ソースの同期

システムのソースを現在のバージョンから新バージョンのソースに変更する。

FreeBSD# vi /usr/share/examples/cvsup/standard-supfile <= 設定ファイルの編集
*default host=CHANGE_THIS.FreeBSD.org
↓
*default host=cvsup2.jp.FreeBSD.org <= 近くのミラーサイトを指定

*default release=cvs tag=RELENG_6_1
↓
*default release=cvs tag=RELENG_6_2 <= 新バージョンに変更

上記で指定したソースを取得し、同期をとる。
なお、cvsupを利用するので、導入していない場合はこちらを参照。

FreeBSD# cvsup -g -L 2 /usr/share/examples/cvsup/standard-supfile

これで新バージョンのソースが取得出来る。
/usr/src/UPDATING
にアップグレード時の注意事項があるので、確認する。
また、必要なファイルのバックアップをとる。
/etc、/var、/home 以下が特に対象になると思われるが、環境による。

/usr/obj の削除

make worldを実行すると、構築されたものが/usr/obj 以下に作成される。
その為、以前に1回でもmake worldをしたことがある場合、/usr/obj 以下を削除する。
/usr/obj 下のファイルは動作しているシステムに影響がない上、 make buildworldの時間を短縮させ、依存問題のトラブルを回避する為にも削除した方が良い。

FreeBSD# cd /usr/obj
FreeBSD# chflags -R noschg ./* <= 変更禁止フラグの解除
FreeBSD# rm -rf ./*
システムの更新

ベースシステムの構築

まず、/usr/obj以下に新しい完全なディレクトリツリーを構築する。

FreeBSD# cd /usr/src <= ソースコードのあるディレクトリに移動
FreeBSD# make buildworld <= ディレクトリツリーの構築

カーネルの構築

新しいシステムを完全に利用するにはカーネルの再構築が必要。

FreeBSD# make buildkernel <= カーネルの再構築
FreeBSD# make installkernel <= カーネルのインストール

システムの更新

システムの更新作業はシングルユーザモードで行うので、再起動し、Boot時の起動レベルの選択時にシングルユーザモードを選択する。

FreeBSD# sync;sync;sync
FreeBSD# shutdown -r now <= 再起動

シングルユーザモードで起動したら、まずは以下のように実行する。

FreeBSD# fsck -p <= ファイルシステムの整合性チェック
FreeBSD# mount -u / <= ルートパーティションを書き込み可能状態へ
FreeBSD# mount -a -t ufs <= 他のファイルシステムをマウント(オプション)
FreeBSD# swapon -a <= スワップの有効化(オプション)
FreeBSD# adjkerntz -i <= カーネルクロックの調整(オプション)

ビルドに必要な環境が整っているかを確認する。

FreeBSD# mergemaster -p

ここまでの作業で特に問題が無ければシステムを更新する。

FreeBSD# cd /usr/src
FreeBSD# make installworld

FreeBSD6.1からは以下のコマンドで古いファイルやディレクトリ、ライブラリの存在の確認を出来る。

FreeBSD# cd /usr/src
FreeBSD# make check-old <= 古いファイルやディレクトリ、ライブラリの確認

その為、FreeBSD6.1以降からアップグレードする場合、以下のようにして古いものを削除することが出来る。

FreeBSD# cd /usr/src
FreeBSD# make delete-old <= 古いファイルやディレクトリを削除
FreeBSD# make delete-old-libs <= 古いライブラリを削除

設定ファイルの更新

/etc 以下のファイルは更新されないので更新する。
まず以下のコマンドで新たに用意された、古いシステムの/etc 以下には存在しないファイルを/etc にコピーする。

FreeBSD# mergemaster -siva

次に以下のコマンドで、変更されたファイルの差分を確認しながら更新する。

FreeBSD# mergemaster -sivr

ここで、2つのファイルからどのように更新するか選択するが、このとき利用できるコマンドは以下の通り。

コマンド 説明
d 古いファイルをそのまま残す(新しいファイルは削除)
i 古いファイルに新しいファイルを上書きする
m 画面が左右に分割され、古いファイルが左、新しいファイルが右に表示されるので一行ずつマージしていく。

個人的には、m コマンドは利用せず、後から手で修正した方がやりやすい。
mergemaster終了後、各種設定ファイルを反映させるか聞いてくるので、yを入力し、更新する。

マシンの再起動

以上でシステムがアップグレードされたので再起動する。

FreeBSD# sync;sync;sync
FreeBSD# shutdown -r now <= 再起動

再起動後、以下のコマンドでアップグレードされたか確認する。

FreeBSD# uname -r
6.2-RELEASE <= アップグレード後のバージョン
▲ページのトップへ