apcupsdをNetwork UPS Toolsへ変更してみた

何気なく、aptitudeを実行して、新規パッケージにリストされているモノの中に、"nut-powerman-pdu"というのを発見。ちょっと調べてみると、"Network UPS Tools(nut)"という汎用タイプのUPS管理ツールの一部だというのが判った。
UPSの管理は、以前のエントリーにあるとおり、

昨日の夕方、思い立ったように接続&セットアップして見ましたけど、思っていたよりも簡単に終わってしまって、ちょっと拍子抜け。

やっとセットアップしました>UPS - Soukaku's HENA-CHOKO Blog

折角、セットアップしたUPS、サーバ1台だけで使うのはもったいないし、

Soukaku's HENA-CHOKO Blog:やっとセットアップしました>UPS
とりあえず、サーバを一台繋いだだけの状態で、30分ぐらいはバッテリー保ちそうな感じだったから、ちょっとした停電ぐらいだったら、何とかなりそう。
という感じなので、ネットワーク経由で他のサーバの自動シャットダウンも出来るように、設定してみました~。

NetworkUPS化してみました - Soukaku's HENA-CHOKO Blog

APC ES500をapcupsdでモニタリングしているのだけど、新しく見つけたNetwork UPS Toolsでもモニタリング出来る上に、対応可能なUPSが固定されていないという点も魅力的なので、こちらに乗り換えることにする。


インストール

うちは、"sid"で運用中なので、その辺は注意のこと。Debianパッケージとしては、"etch"からのようだけど、版によってバージョンが違っていたり、パッケージ構成が違っていたりする。

ま、その点を除外すれば、例によって例のごとく"aptitude install nut"を、ルート権限で実行すればよし。apcupsdがインストールされていると、そちらは依存関係の解決のために削除しようとするので、aptitudeの指示どおりに進めれば、基本的にはOK。
今回は、"aptitude install nut nut-cgi"を実行して、Network UPS Tools本体とそのcgiモジュールをインストール。

設定:サーバ

インストールが完了しても、nut自体は動作していないので、ちまちまと設定する必要があります。

設定するのは、/etc/nutディレクトリ以下のups.confupsd.confupsd.usersupsmon.conf/etc/default/nutの5つ。
インストール直後の/etc/nutは空なので、ひとつずつ設定ファイルを作っていきます。

まず、ES500とはUSB接続なので、その情報をups.confに設定します。
"driver"にしている値は、UPSの機種やサーバと接続するケーブルによって変わるので、公式サイトで確認すること。
#多分USB接続が出来るUPSだったら、"usbhid-ups"を指定すれば、どこのメーカでもいけそうな気がする・・・。

eswat2:/etc/nut# more ups.conf
[ES500]
  driver = usbhid-ups
  port = auto

正しくnutがUPSにアクセスできるか、upsdrvctlコマンドを使ってチェック。

eswat2:/etc/nut# upsdrvctl start ES500
Network UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - Generic HID driver 0.34 (2.4.1)
USB communication driver 0.31
Using subdriver: APC HID 0.93
eswat2:/etc/nut# upsdrvctl stop ES500
Network UPS Tools - UPS driver controller 2.4.1

NUTへのアクセスを許可するネットワークの設定を、upsd.confに書きます。ここでは、localhostと同一セグメントに存在するサーバからのアクセスのみを許可するようにします。(あわせてパーミッションも設定。)

eswat2:/etc/nut# more upsd.conf
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACL Network-LOCAL 172.16.0.0/24
ACL Network-GLOBAL 218.219.149.232/29
ACCEPT localhost Network-LOCAL Network-GLOBAL
REJECT all
eswat2:/etc/nut# chown root.nut upsd.conf
eswat2:/etc/nut# chmod 640 upsd.conf

UPSの動作状況をモニターする際に必要となるユーザ名とパスワード、アクセス可能なネットワーク情報(upsd.confでACCEPTに指定した)をupsd.usersに設定します。(もちろんパスワードは任意のモノで。)
平文のテキストファイルなので、パスワードが漏れないよう、こちらもパーミッションの設定を忘れずに。

eswat2:/etc/nut# more upsd.users
[monmaster]
  password = hogehoge
  allowfrom = localhost Network-LOCAL Network-GLOBAL
  upsmon master
eswat2:/etc/nut# chown root.nut upsd.users
eswat2:/etc/nut# chmod 640 upsd.users 

UPSが動作した時の挙動を指定するため、upsmon.confを設定します。これもパーミッション設定を行います。

eswat2:/etc/nut# more upsmon.conf
MONITOR ES500@localhost 1 monmaster hogehoge master
POWERDOWNFLAG /etc/killpower
SHUTDOWNCMD "/sbin/shutdown -h +0"
eswat2:/etc/nut# chown root.nut upsmon.conf
eswat2:/etc/nut# chmod 640 upsmon.conf 

最後に、システム起動時にnutが自動起動するように、/etc/default/nutを編集します。
とりあえず、変更が必要なのは"START_UPSD"と"START_UPSMON"の部分。

eswat2:/etc/default# diff -u nut~ nut
--- nut~        2009-02-18 05:05:47.000000000 +0900
+++ nut 2009-02-23 22:04:56.000000000 +0900
@@ -1,11 +1,11 @@
 # start upsd
-START_UPSD=no
+START_UPSD=yes
 # set upsd specific options. use "man upsd" for more info
 UPSD_OPTIONS=""
 # start upsmon
-START_UPSMON=no
+START_UPSMON=yes
 # set upsmon specific options. use "man upsmon" for more info
 UPSMON_OPTIONS=""

変更したら、nutを起動します。あとは、nutのプロセスが起動していることを確認して、以下のものが動いていればOKです。

eswat2:/etc/default# /etc/init.d/nut start
Starting Network UPS Tools: upsdrvctl upsd upsmon.
eswat2:/etc/default# ps aux | grep nut
nut      15438  0.0  0.0   2100   708 ?        Ss   22:07   0:00 /lib/nut/usbhid-ups -a ES500
nut      15440  0.0  0.0   2048   612 ?        Ss   22:07   0:00 /sbin/upsd
nut      15443  0.0  0.0   2020   716 ?        S    22:07   0:00 /sbin/upsmon
root     15459  0.0  0.0   3952   808 pts/1    S+   22:08   0:00 grep nut

動作確認

ここまでの設定が終わると、停電時にUPSからの給電に切り替わると、設定した時間が経過すると、サーバのシャットダウンが自動的に行われるようになります。
ちなみに、ここまでの設定値のまま、UPSをコンセントから外したところ、1分後にシャットダウンが始まりました。(^^;
#たぶん/etc/nut/upsmon.confを弄れば調整できるはずだ・・・。)

ということで、設定値のチューニングが必要だし、パッケージに含まれるupscというコマンドで出力されるステータス値を使ったmuninでの監視とか、複数サーバの停電時の電源制御といったところは、追々別エントリーにて。
#nut-cgiのことも書いてないし・・・。

トラックバック(0)

コメントする