FreeBSD 4.x系列のサポートが終了し、portsのサポート対象から外れてしまったので、事務所の4.11-STABLEサーバを移行する。本当は一気に6.2-STABLEに上げたいが、4.11ではブートストラップできないので、まずは5.5-STABLEに上げる。手順はUPDATING
にある通りでいいはずなのだが、なぜかsys/bootのビルドがこける。仕方ないので別の6.xマシンでビルドして持ってくる。ここで気づいたが、6.xマシンがあるのだからそこでビルドして持ってくればよかった。ぜんぜん頭が回らないな。いや、できるだけ自分自身でやらせるのだ。
途中で手順を誤り、ブートしなくなって焦ったりしつつ、なんとかアップグレード完了。BIND
はもともと9系列を使っていたので、/var/named
のchroot
環境内にレイアウトしなおして移行完了。ひとつはまったのはsudo
で、なぜかchunk is already free
とのたまって死ぬ。PAM
の設定を消したらとりあえず解決した。
カーネルの「options COMPAT_FREEBSD4
」とCOMPAT4X
ライブラリのコンボで、バイナリ互換性はまったく問題なし。ただ、古いPerlの残骸と、リンク切れのライブラリは掃除する必要があった。本格的な掃除やパッケージ等のリビルドは後回し。
よし、5.5-STABLEが動作したので、いよいよ6.2-STABLEのビルドに進む。ところが、cc
のビルド中に生成されるsafe-ctype.h
が文法エラーを起こしてしまう。見たところ、「echo "...(x) == '\n'..." >> safe-ctype.h
」のような二重引用符内のエスケープシーケンスが展開されてしまっている。printf(1)
じゃあるまいし、なんで?不審を抱きつつ、「\\n
」等に直す。ビルドを続行すると、今度は別のエラーで止まり、そこで原因が分かった。
エラーメッセージは「ksh: setvar: not found
」。そうだ…思い出した。速度を稼ぐため、MAKE_SHELL=/bin/ksh
でmake(1)
を作っていたんだった。いつのまにかFreeBSDのビルドに(pd)ksh
を使うのはサポート外になっていたんだな。「ln -sf sh /bin/ksh
」して続行したら、今度はうまく行った。
↑今ここ。