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/namedchroot環境内にレイアウトしなおして移行完了。ひとつはまったのは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/kshmake(1)を作っていたんだった。いつのまにかFreeBSDのビルドに(pd)kshを使うのはサポート外になっていたんだな。「ln -sf sh /bin/ksh」して続行したら、今度はうまく行った。

↑今ここ。


Categories : Tech