2014年3月9日日曜日

FreeBSD 8.4 から 9.2 へアップグレード

ようやく FreeBSD 8.4 から FreeBSD 9.2 へメジャー・アップグレードしました。

先日の Subversion によるソースコードの取得が完了した後、kernel と world のビルドを開始しました。なお kernel はビルドオプション(/usr/src/sys/i386/conf/GENERIC)を見なおして MYKERNEL の名前で設定しています。
# cd /usr/src
# make buildworld
# make buildkernel KERNCONF=MYKERNEL

ビルド時間は、Pentium4(prescott,3GHz)のマシンで、buildworld が3時間40分程度でした。buildkernel は40分ほどで終了しました。

出来上がったカーネルをインストールしました。
# make installkernel KERNCONF=MYKERNEL
次にワールドをインストールしようとしました。しかしエラーが発生してしまいました。
# make installworld
ERROR: Required auditdistd user is missing,see /usr/src/UPDATING.
*** Error code 1

案内にあるように /usr/src/UPDATING を確認してみました。
20121218:
With the addition of auditdistd(8), a new auditdistd user is now depended on during installworld. "mergemaster -p" can be used to add the user prior to installworld, as documented in the handbook.

どうも必要なユーザーが不足しているようです。「mergemaster -p」のコマンドによってユーザーを追加してくださいということでした。そこで早速 mergemaster を実行してみました。
なお mergmaster のコマンドを実行する前には必ず /etc のファイルをすべて保存しておいてください。/etc のディレクトリの中にある設定ファイルを直接書き換えてしまうからです。
# cp -Rp /etc /etc.backup
# mergemaster -p

-# $FreeBSD: src/etc/group,v 1.31 2004/06/23 01:32:28 mlaier Exp $
+# $FreeBSD: releng/9.2/etc/group 218046 2011-01-28 22:28:12Z pjd $
#
wheel:*:0:root
daemon:*:1:

といった感じで現在のファイルと FreeBSD9.2 の標準ファイルの比較を行なってくれます。ここで内容をよく確認した後、「q」キーを押してビューアモードから抜けます。

すると設問が表示されますので「m」を選択します。すると現在のファイル(左側)と FreeBSD9.2 の標準ファイル(右側)の異なっている部分を左右に並べて表示してくれます。ここで左右を選択しながら新しいファイルへ組み立てて行きます。入れ替える部分は右側の FreeBSD9.2 の標準ファイルを「r」キーを押して選択します。そして FreeBSD9.2 の標準ファイルで追加となるものの場合、左側が空白となっているのでそのまま右側を選択する「r」キーを押します。そして現在のファイルに設定のあるものは左側に表示され右側が空白となっています。このときは左側を選択する「l」キーを押します。順次繰り返すと自動的に終了します。これで現在のファイルに不足している FreeBSD9.2 の標準ファイルの内容が追加されたはずです。念の為に「v」キーを押して変更後のファイルの確認を行います。そして変更したファイルをインストールするために「i」キーを押します。これで /etc/group のファイルのマージ(合わせる)作業が終了します。

引き続き /etc/master.passed のマージ作業が開始されます。これも同様に作業を終了します。

マージ作業が終了したらパスワードのファイルの再ビルドを促されますので「y」キーで実行させ、マージ作業を終了します。
*** Comparison complete
*** /var/tmp/temproot is empty, deleting
*** You installed a new master.passwd file, so make sure that you run
'/usr/sbin/pwd_mkdb -p /etc/master.passwd'
to rebuild your password files
Would you like to run it now? y or n [n] y
Running /usr/sbin/pwd_mkdb -p /etc/master.passwd

これでようやくワールドのインストールが可能になりました。
# make installworld

ワールドのインストールが無事完了しましたら、そのまま /etc のディレクトリにある設定ファイル全体のマージ(合併)作業を行います。比較して問題のないものは自動的に処理してくれるオプションを付けてマージ作業を行いました。
# mergemaster -Ui

自動的に処理できないファイルは問い合わせがあります。基本的には自分で何か設定を変更したものはそのまま残す「d」キーを押し、そして設定したことのないファイルは新しい FreeBSD9.2 の標準ファイルへ置き換えてしまう「i」キーを押します。これで大抵の場合は、問題ありません。

ただし上記の group と master.passwd はマージ作業「m」を行うか、心配であれば「d」キーで現在のファイルを保存するようにしましょう。決して「i」を押して新しいファイルに置き換えないように注意してください。

全部のファイルの設定が終了するとテンポラリファイルを消去するかなどの設問が三回程度表示されると思いますが、すべて「y」キーで応えて終了します。

以上でアップグレード作業が終了です。再起動させて無事起動できれば、インストール済みのアプリケーション・ソフトウェアを再ビルドの作業となります。執筆時点では、再ビルド中です。すべてのアプリケーション・ソフトウェアの更新するには次のコマンドで実施しました。なお私は、portupgrade 派です。
# portupgrade -af

なお私の場合、再起動させたところ、起動途中で停止してしまいました(涙)。
カーネルのビルドオプションに設定間違いがあり、なんとハードディスクを読み込むことが出来なくなっていました。古い FreeBSD 8.4 のカーネルで再起動させて、とりあえず GENERIC の標準設定でカーネルを再ビルドした上で再起動させたところ、無事起動に成功しました。このマシンは自宅サーバで named や dhcpd などの重要な機能も受け持っていただけに非常に焦りました。無事起動できてホッとしています。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。