FreeBSD で構成したサーバがやたらkernel panic する。
ひとまずkernel をstable にして様子を見ようとしたが、エラーが出るので確認。

kernel ソースツリーを削除後、cvsup で取得する。
ついでにportsツリーも取得するので、30分ほどかかる。

rm -rf /usr/src
cvsup -g -L 2 -z /usr/share/examples/cvsup/stable-supfile

cvsup で取得が完了したら、ユーザーランドを生成する。

# cd /usr && chflags -R noschg obj && rm -rf obj
# make buildworld

途中、OpenSSL のヘッダファイルが無いと言ってエラーで止まる。

/../contrib/bind9/lib/dns/zt.c
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/openssl_link.c:38:25: openssl/err.h: No such file or directory
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/openssl_link.c:39:26: openssl/rand.h: No such file or directory
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/openssl_link.c:40:28: openssl/crypto.h: No such file or directory
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/openssldh_link.c:40:24: openssl/dh.h: No such file or directory
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/openssldsa_link.c:38:25: openssl/dsa.h: No such file or directory
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/opensslrsa_link.c:39:25: openssl/err.h: No such file or directory
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/opensslrsa_link.c:40:29: openssl/objects.h: No such file or directory
/usr/src/lib/bind/dns/../../../contrib/bind9/lib/dns/sec/dst/opensslrsa_link.c:41:25: openssl/rsa.h: No such file or directory
mkdep: compile failed
*** Error code 1

OpenSSL はports で入れる前提だったので、
/etc/make.conf にNO_OPENSSL=yes をしていた。

このオプションにより、コンパイルに必要なファイル群が作られていないらしい。
オプションを外して再度make buildworld したところ、うまくコンパイルできた。
コンパイルでエラーが出る場合はmake.conf のオプションを要確認。

ユーザーランドの生成が終わったら、kernel の生成とインストールを行う。

# make KERNCONF=GENERIC buildkernel
# make KERNCONF=GENERIC installkernel

エラーが無く終われば成功。
シングルユーザーモードで起動して新しいkernel の確認と、ユーザーランドのインストールを行う。

OK boot -s

<snip>

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

<snip>

# mount -a
# cd /usr/src
# make installworld

続けて、/etc の差分更新を行う。

# diff -u /etc/group /usr/src/etc/group
# cp -Rp /etc/ etc.bak
# mergemaster -s -v
# rm -rf /etc.bak
# reboot

再起動したら、更新完了です。