以前書いた、OSをバージョンアップしようとしたらどっぱまった話 http://www.mousou.org/node/463 の続き。
ほぼ問題なく動いていたように見えたのだが、コンソールに延々とエラーメッセージが出てたり、なぜか /usr/bin/install が signal11でこけたりしていて、これはまだ何かおかしいと思ったのでとりあえず、base.txz を解凍して上書きしてみたら、やはり動かなかった。
しょうがないので src 拾ってきて、/usr/bin/install だけ make してみたが、install できないのは相変わらず。できたバイナリ(xinstall)をコピーしてもダメ。
なんだこれ。
しょうがない、改めて make buildworld してみるか、とおもったら、buildworld する際に、最初に install 使うのね。そこでコケる。
ぐぬぬ。
いろいろ考えて、jail 環境でやってみるか、と思って、qjail でやったら、あれ、nullfs で/binとかその辺を共通で使いまわすので、親環境が腐っている状態だと影響を受けてダメ。
とりあえず base.txz を展開してjail で動かしてみたら、buildworld は問題なくできることは確認できた。
さて。どうするか。
適当なディレクトリに、base.txz を展開して、そこに、親環境の /usr/src と /usr/obj を nullmount して、あと devfs を作ってあげてから、chroot して、buildworld を実行したら
こっちはうまく動いた。やったぜ。
それでは、と、親環境に戻って、installworld しようとしたら ntp:ntp が無いから作れ、と出て失敗。
ぶっちゃけありえない。UPDATING に書いてあるじゃん。
素直に、/usr/sbin/vipw 使おうと思ったら、これまた signal 11 でコケる。
ぐぬぬぬぬ。
/usr/sbin/mergemaster -p でどうよ、とおもったらこれもダメ。
あきらめて、先ほど作った chroot 環境に /etc もマウントして、 mergemaster -p を実行したら、なんとか動いてくれて ntp:ntp 作ってくれたので、もう一度親環境に戻って installworld する。
やっとこさ動きましたとさ。
でも、ここで油断するとまだなにか罠が潜んでいるかもしれない。
お祈りをささげつつ、リブートすると普通に起動してきたので、改めて親環境で make buildworld して完走することを確認。再度 single user mode で立ち上げなおして installworld しました。
めでたしめでたし。
最悪、インストールメディアで立ち上げなおしてインストールしなおしかと思ってたけど、ヘッドレス環境なので、まあ何とかうまく行ってくれてよかった。そして、pi0 をシリアルコンソールとしてつないでおくと全部ネット越しでできるのでとても楽ちんでした。いろいろ問題でてもコピペで検索できるし。だが今回は調べてもほぼ役に立たなかったので、今後の自分のためにここに記しておくことにします。