昨日の朝停電があって、サーバ系がみんな落ちていた。
目覚ましの止まっていた時間からすると1分とか2分とからしいんだけど、一度落ちたサーバは再起動しない。
まあ、自動で再起動しないのは良いんだけど、HDDの書き込み中に落ちたりしてdiskが読めなくなってしまったりすると困るので、UPSの導入を検討する。
検討すると言っても、真面目に調べたわけではなくて、ヨドバシ.comのページを価格の安い順にソートして、適当に選ぶ。候補はオムロンとAPCの500VA/300Wの奴。
APCのページを見ると、真面目に容量を計算しろみたいなことが書いてある。
TeraStationが57Wで、サーバPCが・・・わからない。最大300Wくらいの電源だったと思うけど・・。
で、APCの方はportsにsysutils/apcupsdってのがあるので、APCのes500って奴にした。
後で調べたら、オムロンの方もFreeBSD用のソフトがフリーで存在した&TeraStation対応だった&安かったので、オムロンでも良かったかも。
しかし、どちらにしろUPSのUSB出力は一つなので、FreeBSDのサーバとTeraStationの両方にshutdownを送ることはできない。
apcupsdについて調べていたら、NIS(Network Information Serverだと。ypではない)とか言う機能があって、UPSと直接通信するマシンをサーバにして、電源供給を受けるマシンをクライアントにして連携プレイができるらしい。
TeraStationでapcupsdをclientモードで入れることができれば、うまくshutdownさせられそうだ。
landiskはそう言うことはできなさそうなので、バッテリーがなくなる前に停電が復旧しなければ今までと同じ。
と、言うことでUPSが届く前にapcupsdをインストール。
FreeBSDの方は、portsからsysutils/apcupsdをインストールするだけ。あとは、/usr/local/etc/apcupsd/apcupsd.confを修正する。
細かいところは後で調整が必要だと思うけど、変更点は以下のような感じ。
続いて、TeraStationの方。
FreeBSDの方をportsでインストールしたのでFreeBSDの/usr/ports/distfilesにapcupsdのソースがある。
こいつを、TeraStationにコピーして、
あと、mailがないと言う警告が出て、wallがないと言うエラーが出る。
警告は無視する。
TeraStationは人がログインして使うマシンではないので、wallは必要ないので、/usr/local/bin/にwallと言う名前のダミースクリプトを作成した。
さらに、--enable-powerfluteを入れると、ncursesのライブラリを要求されるので、
で、再度configure。結果は以下のような感じ。(これを見る限り、prefixは効いていない)
make -n installすると、やっぱり/sbin/と/etc/apcupsdにインストールされるようだ。
そこで、
と言ったところでUPSが届いたので、早速つないでみた。
サーバPC、TeraStation、光終端装置をUPSにつなぎ、サーバとUPSをUSBで繋ぐ。
で、FreeBSDでapcupsdを起動。
apcaccessを実行してみると、なんかずらずらと表示される。
で、cgiをwebサーバ上の実行できるところにリンクして、multimon.cgiとかupsstats.cgiを実行してみる。
multimon.cgiは、hosts.confを見るようで、ここにIPアドレスを書いてあげたら、FreeBSDとTeraStationのapcupsdの監視ができるようになった。
試しにUPSのコンセントを抜いてみたら、FreeBSDの/var/log/apcupsd.eventsに電源が落ちたとのログが出て、UPSが結構な音量でピーピー言う。
で、TeraStationの方のログを見てみたら、Communications with UPS lost.とか出てる。
hubの電源が落ちたのが問題なようだ。
しょうがないので、光終端装置の方を諦めて、hubの電源をUPSに繋ぐ。
これで、一応バッテリによるサーバ電源のバックアップまではできるようになったはず。
後は、バッテリー残何%でshutdownさせるかとか、shutdown開始してから何分でバッテリーをoffにするかとかのパラメータを調整する必要があるけど、力つきたので今日はここまで。
さらに、snmpに対応していた気がするので、cactiでグラフ化できるようにしたい。
さらに、TeraStationのapcupsdを起動スクリプトに組み込まないとなあ。
目覚ましの止まっていた時間からすると1分とか2分とからしいんだけど、一度落ちたサーバは再起動しない。
まあ、自動で再起動しないのは良いんだけど、HDDの書き込み中に落ちたりしてdiskが読めなくなってしまったりすると困るので、UPSの導入を検討する。
検討すると言っても、真面目に調べたわけではなくて、ヨドバシ.comのページを価格の安い順にソートして、適当に選ぶ。候補はオムロンとAPCの500VA/300Wの奴。
APCのページを見ると、真面目に容量を計算しろみたいなことが書いてある。
TeraStationが57Wで、サーバPCが・・・わからない。最大300Wくらいの電源だったと思うけど・・。
で、APCの方はportsにsysutils/apcupsdってのがあるので、APCのes500って奴にした。
後で調べたら、オムロンの方もFreeBSD用のソフトがフリーで存在した&TeraStation対応だった&安かったので、オムロンでも良かったかも。
しかし、どちらにしろUPSのUSB出力は一つなので、FreeBSDのサーバとTeraStationの両方にshutdownを送ることはできない。
apcupsdについて調べていたら、NIS(Network Information Serverだと。ypではない)とか言う機能があって、UPSと直接通信するマシンをサーバにして、電源供給を受けるマシンをクライアントにして連携プレイができるらしい。
TeraStationでapcupsdをclientモードで入れることができれば、うまくshutdownさせられそうだ。
landiskはそう言うことはできなさそうなので、バッテリーがなくなる前に停電が復旧しなければ今までと同じ。
と、言うことでUPSが届く前にapcupsdをインストール。
FreeBSDの方は、portsからsysutils/apcupsdをインストールするだけ。あとは、/usr/local/etc/apcupsd/apcupsd.confを修正する。
細かいところは後で調整が必要だと思うけど、変更点は以下のような感じ。
UPSCABLE usb UPSTYPE usb DEVICE #NISIP 192.168.0.1※ NISIPを限定しようとしたら、apcaccessコマンドとか、cgiとかが127.0.0.1にアクセスするので、デフォルトに戻した。アクセス制限はipfで。cgiはパラメータでIP指定ができる。
続いて、TeraStationの方。
FreeBSDの方をportsでインストールしたのでFreeBSDの/usr/ports/distfilesにapcupsdのソースがある。
こいつを、TeraStationにコピーして、
# ./configure --prefix=/opt/usr/local --exec-prefix=/opt/usr/local --enable-powerfluteとconfigureを実行してみたけど、どうもprefixとexec-prefixは効かないっぽい。
あと、mailがないと言う警告が出て、wallがないと言うエラーが出る。
警告は無視する。
TeraStationは人がログインして使うマシンではないので、wallは必要ないので、/usr/local/bin/にwallと言う名前のダミースクリプトを作成した。
さらに、--enable-powerfluteを入れると、ncursesのライブラリを要求されるので、
- ncurses-5.4-0vl2.ppc.rpm
- ncurses-devel-5.4-0vl2.ppc.rpm
- gpm-1.20.1-35vl2.ppc.rpm
で、再度configure。結果は以下のような感じ。(これを見る限り、prefixは効いていない)
Host: powerpc-unknown-linux-gnu -- unknown unknown Apcupsd version: 3.14.2 (15 September 2007) Source code location: . Install binaries: /sbin Install config files: /etc/apcupsd Install man files: /usr/share/man Nologin file in: /etc PID directory: /var/run LOG dir (events, status) /var/log LOCK dir (for serial port) /var/lock Power Fail dir /etc/apcupsd Compiler: g++ 3.3.6 Compiler flags: -g -O2 -Wall Linker: gcc Linker flags: -g -O Host and version: unknown unknown Shutdown Program: /sbin/shutdown Port/Device: /dev/ttyS0 Network Info Port (CGI): 3551 UPSTYPE apcsmart UPSCABLE smart drivers (no-* are disabled): apcsmart dumb net no-usb no-snmp pcnet no-test enable-nis: yes with-nisip: 0.0.0.0 enable-cgi: no with-cgi-bin: /etc/apcupsd with-libwrap: enable-nls: no enable-libintl: no enable-powerflute: yes enable-pthreads: yes enable-dist-install: yes enable-gapcmon: noそしてmake。
make -n installすると、やっぱり/sbin/と/etc/apcupsdにインストールされるようだ。
そこで、
# DESTDIR=/opt/usr/local make installでインストールして、必要なファイルのリンクをはった。
# ln -s /opt/usr/local/etc/apcupsd /etc/ # ln -s /opt/usr/local/sbin/apcupsd /sbin/ # ln -s /opt/usr/local/sbin/powerflute /sbin/後は、/etc/apcupsd/apcupsd.confを修正。修正箇所は、
UPSCABLE ether UPSTYPE net DEVICE 192.168.0.1:3551 NETSERVER on
と言ったところでUPSが届いたので、早速つないでみた。
サーバPC、TeraStation、光終端装置をUPSにつなぎ、サーバとUPSをUSBで繋ぐ。
で、FreeBSDでapcupsdを起動。
apcaccessを実行してみると、なんかずらずらと表示される。
で、cgiをwebサーバ上の実行できるところにリンクして、multimon.cgiとかupsstats.cgiを実行してみる。
multimon.cgiは、hosts.confを見るようで、ここにIPアドレスを書いてあげたら、FreeBSDとTeraStationのapcupsdの監視ができるようになった。
試しにUPSのコンセントを抜いてみたら、FreeBSDの/var/log/apcupsd.eventsに電源が落ちたとのログが出て、UPSが結構な音量でピーピー言う。
で、TeraStationの方のログを見てみたら、Communications with UPS lost.とか出てる。
hubの電源が落ちたのが問題なようだ。
しょうがないので、光終端装置の方を諦めて、hubの電源をUPSに繋ぐ。
これで、一応バッテリによるサーバ電源のバックアップまではできるようになったはず。
後は、バッテリー残何%でshutdownさせるかとか、shutdown開始してから何分でバッテリーをoffにするかとかのパラメータを調整する必要があるけど、力つきたので今日はここまで。
さらに、snmpに対応していた気がするので、cactiでグラフ化できるようにしたい。
さらに、TeraStationのapcupsdを起動スクリプトに組み込まないとなあ。