SSブログ

distccの罠 (FreeBSD 8.2-PRERELEASE、2010/12/31) [FreeBSD]

分散コンパイルができる便利なdistccですが、どうも罠があるようです。ちょっとした事情でdistccを削除したのですが、以下の事象に起因するエラーにハマりました。
(1) perl、icu、python(少なくともこの3つは確認)は、/usr/local/libexec/distcc/ccといったインストール時のコンパイラの情報をインストール後も静的に保持し続ける
(2) IPv6環境でないにもかかわらず、デーモンの待ち受けポート(Listenポート)がIPv6アドレスにバインドされてしまう

(1)はdistcc自身ののmake deinstall → make install 時に “/usr/local/libexec/distcc/cc が存在しない”と怒られ発覚しました。distccをアンインストールしているのに、distccがないとは何事でしょう。/usr以下を検索した結果、少なくとも前述のperl、icu、pythonが静的に “/usr/local/libexec/distcc/cc”の情報を保持していることが分かりました。
結局どれが犯人だったのか分かりませんが、上記のソフトウェアを全てdistccがない状態で再インストールをした結果、distccのコンパイルが成功するようになりました。

(2)はdistccdを正常起動させているのにログを見ると分散コンパイルが全く行われず、netstat -f inet -aを確認したところIPv4ではListenしていないことが分かりました。(なぜかnetstat -f inet6 -aでは待ち受けている)
こちらは全くの原因不明で、rc.confのdistccd_flagsに、IPv4で待ち受けるようにバインドIPアドレスをIPv4で記述することで直りました。(※ウチの環境、完全にIPv6を殺しているわけではありません)

distccインストール後にmake installworldをやったのも原因の一つかもしれません。なかなか気難しいみたいですね。

共通テーマ:日記・雑感