2008-06-10

FreeBSD 6.3のSMPではOpenOffice.orgのビルドができない(もしくは不安定)

このところ、OOoのPORTREVISIONが上がったときの更新などでうまくportupgradeが終わらず、Ctrl-Cで止めてもidlcというよくわからないプロセスが残ってkill -9しないと死んでくれないなど、ビルドのトラブルが続いていた。かといって、まったくできないわけでもなく、何度か試してみると通ったりもする。規則性もよくわからなかったが、今回の更新で3-4回やってみても通らないので、何か報告がないか調べてみた。

すると、日本語ではパっとした情報はなかったが、freebsd-openofficeにidlc loops building openoffice.org-2 on FreeBSD 6.3-RELEASEとか、freebsd-smpにopenoffice build loops - seemingly only on SMP machinesとかいった投稿があり、SMPのスケジューリングがあやしそうな雰囲気。

そこで、/boot/loader.confに kern.smp.disabled="1" を加えて再起動し、ビルドしてみたら1回で通った。まさにSMPの問題らしい。OOoのビルド前後にいちいち再起動するのは面倒だなぁ。7.0とかULEとかで問題がなくなるのかどうかは、時間ができたら調べてみる。

ところで、ついでにccacheの効果を計ろうと、まずccache -Cしてからビルドしてみると、Core 2 Duo (当然Solo状態) E6600 で4時間半かかった。そして、そのまま2回目を行うと2時間10分ほど。ccacheそのもののオーバヘッドは測定できていないが、ほとんど半分にまで減っていることになる。PORTREVISIONがちょっと増えただけでビルドし直しというportsも多いわけで、今後はどのportsもccacheを使うようにしてみようかな。


追記 (8/26)

いろいろ試したので、まとめ。CPUはCore 2 Duo。スケジューラはデフォルト。
6.3/i386 + SMP → ×
6.3/i386 (UP) → ○
6.3/amd64 + SMP → ○
7.0/i386 + SMP → ○
7.0/amd64 + SMP → ○

ま、6系は6.4で最後らしいし、7に移行すればいいか。

2008-06-09

FreeBSD 6.3でnvidia-driverがビルドできなくなってはまる

gettext祭りのついでに更新されてたnvidia-driverをビルドしようとして、warningしか出てないのに途中で止まっておかしいなとか思いながら、何かのはずみでpkg_deleteしてしまい、バカなことにそのことを忘れて再起動したものだから、Xが動かなくなってあせる。

ヘッダ内のプロトタイプが合わないせいでwarningが出るのに、CFLAGSに-Werrorがついてしまっているのが原因なのはすぐ判明。しかし、static inlineの定義を宣言に合わせて書き直すのは面倒なので、-Werrorを無効化したい。

-Werrorをつけてる箇所を探して、とりあえず/usr/share/mk/bsd.sys.mkにそれらしいのがあったので、応急で/etc/make.confにNO_WERROR=yesをつけてみたがダメ。

さらに調べると、/usr/src/sys/conf/kmod.mkでWERRORが定義されてなければWERROR=-WerrorにしてCFLAGSに加えている。これって、WERRORを無効化することを考えていないわけか?しかたないので、無害なところでWERROR=-Wallを定義してみたら、とりあえずビルドに成功。

次に、無条件には無効化したくないので、portconfを利用して、/usr/local/etc/ports.confに書いてみたが、portsのMakefileではなく、サブディレクトリにあるsrc/Makefileで有効にするには、ワイルドカードで指定しなければいけないようだ。

x11/nvidia-driver*: WERROR=-Wall
でしのぐ。

とかやっていたら、同じようなタイミングで、ports/124407が出ている。いずれちゃんと修正されるんだろう。-Werror無効化なんていうハックじゃなくて、warningが出ないようにしてくれればいいんだけど。