FreeBSDでBoincを動かす

Boincは、分散処理型計算プロジェクトのひとつでSETI@Homeから派生。現在ではSETIの計算だけでなく、生物学、科学、天文学などで単純に計算パワーが必要な処理を、世界中に存在するコンピューターの、余っているCPUパワーを使って行ってしまおうというプロジェクト。私は10年以上前にしばらくSETI@Homeへ参加していたが、その後離脱。夜間電力利用が可能になったので、23時から7時の電力料金が昼間の約1/3時間帯だけ参加してみようと再びBoincを導入したので、その時の情報を記録しておく事にした。

Mac/Windows/Linux OSのコンピュータをBoincに参加させるのは簡単。アカウントの取得もBoincクライアントから出来る。しかし、FreeBSDの場合はBoincの仕組みを理解しないと参加して実際に計算結果を役立てるまでの道のりが大変だ。

FreeBSDの場合、BOINCは、
pkg_add -r boinc-client
でインストール出来る。インストールすると、/usr/local/bin に boinc_client, boinc_cmd, boinc_gui がインストールされる。残念ながら、これらにオンラインマニュアルは付かない。<cmd>-help でコマンドオプションを参照出来るが、一体どのコマンドをどう実行させればいいのかがわからない。3日ほど検索と試行を繰り返す事になった。
ports や pkg_addからboincをインストールしたFreeBSDの場合、/etc/rc.conf に
boinc_enable=”YES”
と書いて、/usr/local/etc/rc.d/boinc start と実行すれば boinc_client が起動する。このプログラムがインターネット上のboincホストサーバーと通信を行ってくれる。自宅サーバーで動いている boinc_client をコントロールするのが、コマンドラインの場合 boinc_cmd, GUIの場合 boinc_gui コマンド。boinc の設定はこれらどちらかを使って行うが、boinc_gui を使うのがわかりやすいと思う。コマンドとクライアントはネットワーク接続されるため、/var/db/boinc の下の gui_rpc_auth.cfg 中の文字列がパスワードとして必要になる。また、クライアントに接続出来るPCを指定するために同ディレクトリに接続可能なホスト名を記述した remote_hosts.cfg も置いておく事。
私のサーバーの場合はXを動かしていないため、boinc_gui はWindowsのboinc GUIから行った。 別ホストに接続するには advance設定が必要。
次にCPUパワーを役立てたいプロジェクトを探す必要がある。なぜなら、プロジェクトURLがキーになるためだ。http://boinc.oocp.org/indexj.php や http://boinc.berkeley.edu/index.php から簡単に探せるので難しくない。
Add Project を押して手続き開始。プロジェクトURLを入れて、メールアドレスとパスワードを決めれば参加完了。
おそらくマルチコアCPUや AMD64やEMT64 の64bit モードのFreeBSD OSをインストールしている場合は問題ないと思う。

残念ながら私のサーバーはシングルCPUのK6-2 450MHz。SOHOレベルの自宅サーバーなら全然問題ないしCPUパワーも余っているぐらい。他にもPentiumIII系のCeleronサーバーがあるが、そいつは若干挙動が異なる。
まず、i386-pc-freebsd と判定されるOSでboincに参加すると、参加可能なプロジェクトが大幅に限定される。
boinc クライアントはプロジェクト本部のホストサーバーやユーザーインタフェースと通信を行うだけのプログラムのようで、実際に計算を行うのはboincクライアントがリモートサーバーからダウンロードしてくるプログラム。boincは自分が動いているサーバーのCPUタイプやOSをboincサーバーに伝えて一致する計算ソフトとデータをダウンロードするので、i386-pc-freebsd の場合はメルセンヌ素数解析くらいしか選択肢がない。Celeronならこれに参加出来るが、K6-2の場合何が問題なのかわからないが計算途中にコアダンプが発生し計算出来ない。つまりここまでのインストール方法では、K6-2 FreeBSDマシンではboincに参加できないことになる。

幸いな事にFreeBSDはLinuxエミュレーション機能がありBoincソースはLinuxエミュレーションに対応していてこれを利用すればboincに参加出来る可能性がある。
まず、pkg_add -r linux_base-f10 でLinuxエミュレータを入れる。ちなみにf10はFedra core 10 らしい。fc4 ではboincが動かない。
次に、/usr/ports/net/boinc-client に移動して、make config を実行。
ここで、Linuxエミュレーションにマークを付ける。GUIは不要。
make install でboincを生成。既に同じ名称のパッケージがインストールされているので、インストール出来ないというエラーが出るかも。その場合は、make deinstall 、 make reinstall でインストール。
次に、Linuxバイナリーを動かすために /etc/rc.conf に linux_enable=”YES” を記述し、/etc/rc.d/abi start でLinuxエミュレータを起動。
/usr/local/etc/rc.d/boinc start を実行し、Linuxエミュレータ機能を内蔵したboinc_client を起動。 これで、32bit i386 linux で参加出来るプロジェクトを処理する事が出来るようになったはず。k6-2 は i686系じゃなく、i386 5×86系と判定されるのが痛い。時代遅れのCPUと判断されているんだろうね。

boinc gui から、boinc_client に接続し、参加可能なプロジェクトがあるかどうかをしらみつぶしに探す。K6-2 サーバーでは、IBMが参加している http://www.worldcommunitygrid.org/ のプロジェクトに参加可能だった。しかしトラブルはまだ続く。
boinc は /var/db/boinc に必要なファイルを置いて計算するし、boincの$HOMEもこことなる。(変更も可能だが、コマンドの更新や複数マシンに導入した場合、マシンごとに導入ディレクトリが異なると数年レンジで計算させる場合に管理が複雑になるので、動かさない方がいいと思う。)/var が1GB 程度と小さい場合、ディスク容量不足と判定されてしまう場合がある。/var/db/boinc を ディスク容量に余裕がある/home などに移動し、シンボリックリンクで /var/db/boinc に接続すれば容量不足問題は解決出来る。あくまでもデフォルト設定で動かす。

K6-2サーバーでも48時間程度計算すれば結果を送り返せるくらいのデータが割り当てられる。また、計算時間も2週間程度割り当てられるので、24時間稼働マシンじゃなくても参加出来るし、発熱や電力の問題で節電したい時間帯がある場合は参加させる時間帯を設定出来る。

余談だが、上記の情報はFreeBSD 8.2 をインストールした直後の話で、portsコレクションを csup でメンテナンスしている場合、boinc コマンドがアップデートされ、boinc コマンドや rc.d に置かれるファイル名も更新されるので、ports をメンテナンスした場合は、boinc_enble=yes ではなく、boinc_client_enable=yes と記述し直す必要がある。

参考までに、K6-2 CPUの場合、Boinc で計算をさせる前後で15W程度の消費電力変化が発生する。非計算中でもサーバーは常時30W程度の電力を消費している。非力なCPUでは消費電力の割に成果が乏しいのが現実であるため、どの季節のどんな時間帯に稼働させるべきかはよく考えるべきでしょう。

コメントを残す