FreeBSD: Boinc World Community Grid が動かなくなった

2012年から FreeBSD で Boinc に参加しています。
参加当初は、FreeBSD 環境で計算できるプロジェクトが少なかったのですが、Linux バイナリーエミュレーションとIBM の Word Community Grid のおかげで、複数の性質のプロジェクトの計算に参加できていました。昨年までは。

正確にはいつ頃かは覚えていないのですが、以下のようにサーバーとの通信中にエラーが出て、サーバーからワークユニットを取れなくなってしまいました。

05-Feb-2015 02:02:23 [World Community Grid] update requested by user
05-Feb-2015 02:02:25 [World Community Grid] Sending scheduler request: Requested by user.
05-Feb-2015 02:02:25 [World Community Grid] Requesting new tasks for CPU
05-Feb-2015 02:02:28 [---] Project communication failed: attempting access to reference site
05-Feb-2015 02:02:28 [World Community Grid] Scheduler request failed: Peer certificate cannot be authenticated with given CA certificates
05-Feb-2015 02:02:30 [---] Internet access OK - project servers may be temporarily down.
05-Feb-2015 03:14:58 [World Community Grid] Sending scheduler request: Requested by project.
05-Feb-2015 03:14:58 [World Community Grid] Requesting new tasks for CPU
05-Feb-2015 03:15:02 [---] Project communication failed: attempting access to reference site
05-Feb-2015 03:15:02 [World Community Grid] Scheduler request failed: Peer certificate cannot be authenticated with given CA certificates
05-Feb-2015 03:15:06 [---] Internet access OK - project servers may be temporarily down.

最初は、temporarily down とあるのでWCGサーバー側のメンテナンスだと思っていたのですが、いつまで待っても状況に変化が無く、他のプロジェクトは問題ないことから不思議に思いWeb検索をしてみると、既知の問題であると複数の情報が見つかりました。調査して解決を図る時間もなかったので、FreeBSDサーバーだけは、WCG をディスエーブルして、他のプロジェクトを解かせていましたけど、別プロジェクトはワークユニットの制限時間までに計算が終わらないとか、メモリを使いすぎるとかいろいろ問題が出て、そのたびに手動で調整する必要があったりでちょっと面倒。しかし、なぜ同じ通信を行っているのに WCG だけ、ワークユニットを取ってこられないのかが不思議。それに、なぜ突然動いていたプロジェクトが動かなくなるのかという点も理解できません。

でもまあ、Vyatta ルーターにBoincを入れたついでに、FreeBSD サーバーのBoinc もメンテナンスをすることにしました。

Web上の情報を調べて、単純に /var/db/boinc/ca-bundle.crt の問題であるらしい事は分かりました。

行ってみた事

  • OSのパッケージメンテナンスコマンドで、ca_root_nss-3.18.1 パッケージに更新して証明書を最新にしたものの、症状に変化無し。
  • http://team2ch.info/FreeBSD/ のページに同様のエラーと対策が書いてあるので、ラッキーと思いながらその指示に従っていったところ、現在、問題となる ca-bundle.crt を置き換えるファイルは公開されていませんでした。
  • 次に、http://d.hatena.ne.jp/Daemons/20090428/1240899133 を見つけ、ここでも同様に証明ファイルの置き換えが提案されていましたが、これは存在しないので無理。次に、再インストールが提案されていたので、私もソースから boinc-client を再構築して再インストールしてみましたが、結局 /var/db/boinc/ca-bundle.crt -> /usr/local/share/certs/ca-root-nss.crt のリンクが新たに作られただけで、新しい証明書をどこかのサーバーから取ってくるわけでもなく、症状に変化無し。

対策すべきポイントは、正しい ca-bundle.crt だと推測できたものの、そのファイルを入手できない!ということです。よ~く考えると、Vyatta OS の中のboinc で同じプロジェクトを解いているはずでは?と思い出しました。奴はエラー無く動いている。Linux の boinc フォルダーにある証明書ファイルが使えるんじゃない? と Vyatta の /var/lib/boinc-client の下をのぞき込んでみると、「ca-bundle.crt -> /etc/ssl/certs/ca-certificates.crt」があるじゃない!

これを、FreeBSD サーバーに ftp で持って行き、/var/db/boinc/ca-bundle.crt の既存ファイル(実はリンク)を削除して、このファイル名で置き換えました。(リンクじゃなくて、ファイルそのものを boinc ディレクトリの下に置きました。)
そして、boinc-client を再起動。

結果は・・・・・・解決しました。

WCG との通信に成功してワークユニットを持ってきました。
Windows PCの Boinc フォルダーの下を見ても ca-bundle.crt は見つからなかったので、Vyatta でBoincを使えるようにしておいて良かった~。

さて、なぜ WGC だけ ca-bundle.crt が必要なのか?

https://boinc.berkeley.edu/trac/wiki/Error/Scheduler request failed の情報を見つけ、これによると、Boinc プロジェクトの WGC が出来た時、サーバーとセキュアー通信を行っていたのは、WGC だけだったんだそうです。その時に、OSの証明書を使うしくみを作ったようですね。

コメントを残す