ディスクレスクライアントで Boinc を自動起動する
先日のログで、ディスクレスシステムの構築方法をメモに残す作業が終了していなかったものの、クライアントでBoincを動かすことに挑戦したことを書いたが、今回はその続き。
ディスクレスシステムでは、 /usr/local/etc/rc.d/ 以下の自動起動スクリプトが起動時に走らないのだ。/etc/rc.local に “/usr/local/etc/rc.d command start” という感じで記述して強制的に起動させるという手があるかもしれないが、シャットダウン時にも /usr/local/etc/rc.d/* が自動実行されないので、ロックファイル削除などの後始末も行われない。/etc/rc.shutdown で動かしたコマンドを停止させる記述をしなければいけないが忘れてしまいそう。
/usr/local/etc/rc.d/* から自動起動させるプログラムは、ホスト名など固有の情報を持つものが多いので;たとえば apache や web proxy の squid など;サーバーで動いているかもしれないサービスがクライアント側でサーバー用パラメータを使って動くとまずいと考えてどこかに、/usr/local/etc/rc.d/* を外す設定があるのかもしれない。それなら、/etc/rc.d/* だって同じだと思うのだが、、、、
どこに、/usr/local/etc/rc.d/* をスキップするように記述してあるのかと探しているがいまだに見つからない。 FreeBSD 8.3 ディスクレスシステムの落とし穴は、ここにもあったのか!という気分。
ではどうするか?
/conf/192.168.1.41/etc/rc.d の下に /usr/local/etc/rc.d/boinc-client をコピーしてくるか、シンボリックリンクすればいけるんじゃないだろうか。/usr/local/etc/rc.d/boinc-client は、boinc がアップデートされる度に更新されるので、可能であればシンボリックリンクの方が良さそうだ。
ということで、シンボリックリンクを試したところリンクは確かに有効になっているが、シンボリックリンクでは boinc が自動起動しない。boinc-client スクリプトを /etc/rc.d にコピーしてくれば無事に起動出来た。どういう仕組みなのか理解は出来ないが、現状これで我慢するしかないでしょう。
結果的に クライアント192.168.1.41用 /conf の木構造は以下のように変わる。/var/db/boinc はメモリディスクであるため計算には使用出来ず、/home/boinc/pc41 へのシンボリックリンクとした。ディスクレスクライアントが複数台になる場合もあるので、管理上のわかりやすさを考えて /home/boinc/<hostname> とした。リンク先のパーミッションは boinc ユーザーに与える事。
/conf |-- 192.168.1.41 | |-- etc | | |-- rc.conf | | |-- rc.d | | | `-- boinc-client | | `-- rc.local | |-- root | `-- var | `-- db | `-- boinc -> /home/boinc/pc41
<rc.conf> keymap="us.pc-ctrl" ifconfig_re0="dhcp" hostname="pc41" sshd_enable="YES" ntpdate_enable="YES" ntpdate_hosts="asia.pool.ntp.org" ntpd_enable="YES" inetd_enable="YES" inetd_flags="-wWl -C 6" usbd_enable="YES" nfs_client_enable="YES" rpcbind_enable="YES" rpc_lockd_enable="YES" rpc_statd_enable="YES" linux_enable="YES" boinc_client_enable="YES"
このクライアント用設定をpxeboot 対応のPCに施せば、PCのHDDには手を着けず、夜間の間だけCPUパワーを借用するような使い方も出来そうだ。