NUT(Network UPS Tools)のmaster・slaveモードでの設定 | ぽんのブログ

ぽんのブログ

自分用の備忘録ブログです。書いてある内容、とくにソースは、後で自分で要点が分かるよう、かなり簡略化してます(というか、いい加減)。あまり信用しないように(汗

OMRONのUPS、BY50Sを購入しました。

これにLinuxマシンを接続し、UPSがバッテリーモードになったら自動的にシャットダウンするようにしたい。さらにウチではメインマシンの他にraspiも動いており、こちらも同じUPSに繋ぎバッテリーモードになったらシャットダウンさせたい。というわけでNUT(Network UPS Tools)を導入することにしました。

 

NUTについて色々サイトを回ってみたのですが、日本語のサイトではstandaloneでの設定,つまりUPSに繋いだ1台のPCだけの場合の設定方法が殆どのようです(もちろん探し方が悪いのかもしれませんが・・・)。それ以外には、バッテリーモードになった時に起動させるスクリプトでリモートマシンをssh経由でシャットダウンさせる、というものも有りました。

 

しかし「ネットワーク」UPSツール、というからにはもっとサーバ・クライアントタイプ的な起動方法もあるのでは・・・?実際、apcupsd(APC社・現シュナイダーエレクトリック社製のUPSに特化したUPS監視ソフト)では、UPSに直接繋がったPCをサーバにしてクライアントがサーバにUPSの状態を尋ねる、という事が結構簡単な設定で出来るようになっています。

 

で、色々と試した結果、NUTでサーバ・クライアントタイプ的な感じで起動させることに成功したようなのでその備忘録としてこの記事を書きます。

 

メインマシンは ubunut 16.04, raspiはRaspbian Stretchです。

UPSとメインPCとの間は、付属してきたUSBケーブルでつないでいます。

 

まずはununutでnutのインストール

$ sudo apt-get install nut

すると /etc/nut に色々な設定ファイルがインストールされます。また /etc/init.d以下には

nut-server

nut-client

が作成されます。

 

このスクリプトをちょっと眺めてみると、nut-serverで upsd の起動、nut-client で upsmonの起動を行っているようです。そこで

● サーバマシンでupsd起動(nut-server実行)

● サーバマシン自身を含むクライアントでupsmonを起動(nut-client実行)

という流れになりそうです。

 

サーバマシン(ubuntu 16.04)での設定

1. /etc/nut/nut.conf: MODEを以下に変更


MODE=netserver


 

2. /etc/nut/ups.conf: 以下を追記(BY50Sの場合)

 


[by50s]

    driver=blazer_usb

    port=auto desc="OMRON BY50S"

    vendorid=xxxx

    productid=oooo

    subdriver=ippon


 

OMRON BY50Sはdriver=blazer_usb, subdriver=ipponで動くとのこと(下記参照)

 

http://d.sunnyone.org/2011/05/omron-by50subuntu-1104.html

 

またvendorIDとproductIDは lsusbで以下のようにして調べられます。

$ lsusb | grep -i omron

Bus 008 Device 002: ID xxxx:oooo Omron Corp.

 

3. /etc/nut/upsd.conf: 以下を追記


LISTEN 127.0.0.1 3493

LISTEN 192.168.xx.xx 3493


 

192.168.xx.xxはサーバマシンのIPアドレスです。

 

3493はデフォルトのポート番号です。ファイアーウォールを用いている場合はこのポートを開ける必要が有ります。

 

4. /etc/nut/upsd.users


[monmaster]

    password=pass010

    upsmon master

[monslave]

    password=pass011

    upsmon slave


 

masterとslave用のユーザ名、パスワード(適当な文字列で可)を設定しておきます。

 

 

以上ができたらここここに従って

/lib/udev/rules.d/52-nut-usbups.rules

の編集、udevadmでルールの読み込み、UPSへトリガーをかけて

$ sudo service nut-server start

で起動。

サーバのupsmon関連の設定

5. /etc/nut/upsmon.conf


MONITOR by50s@192.168.xx.xx 1 monmaster pass010 master

NOTIFYCMD /sbin/upssched

NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC

NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC

NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC

NOTIFYFLAG FSD SYSLOG+WALL+EXEC

NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC

NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC

NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC

NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC

NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC

NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC


 

by50s は2.で設定したUPSの名前。

192.168.xx.xx はサーバマシンのIP。ここはlocalhostでも可?

monmaster pass010 は、4.で指定したマスター用のユーザ名とパスワードです。

あと

SHUTDOWNCMD "/sbin/shutdown -h +0"

はデフォルトのままいじっていません。

NOTIFYCMDに /sbin/upssched を指定しているので、その設定も変更します。

 

6. /etc/nut/upssched.conf: 以下を追記(ここの記事のまま)


PIPEFN /var/run/nut/upssched.pipe

LOCKFN /var/run/nut/upssched.lock

AT ONBATT * START-TIMER upsgone 120

AT ONLINE * CANCEL-TIMER upsgone


 

赤字の数字(秒)が、UPSがバッテリーモードになった時、シャットダウンするまでの時間です。

 

あと、やはりここの記事の通り/bin/upssched-cmdを編集してupsmon -c fsd を追加

 

7. /bin/upssched-cmd


case $1 in

    upsgone)

        logger -t upssched-cmd "The UPS has been gone for awhile"

        upsmon -c fsd

        ;;

    *)

        logger -t upssched-cmd "Unrecognized command: $1"

        ;;

esac


 

以上ができたら

 

$ sudo service nut-client start

クライアント側の設定

クライアントPCではupsmonだけを起動します。

まずはraspiにnutをインストール

$ sudo apt-get install nut

 

8. /etc/nut/nut.conf: MODEを以下に変更


MODE=netclient


 

9. /etc/nut/upsmon.conf


MONITOR by50s@192.168.xx.xx:3493 1 monslave pass011 slave

NOTIFYCMD /sbin/upssched

NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC

NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC

NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC

NOTIFYFLAG FSD SYSLOG+WALL+EXEC

NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC

NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC

NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC

NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC

NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC

NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC


 

:3493 は3. で指定したポート番号です。

 

monslave pass011 は4.で指定したslave用ユーザ名、パスワードです。

 

10. /etc/nut/upssched.conf と /bin/upssched-cmd をサーバの6. 7.と同様に編集

 

$ sudo service nut-client start

で起動。

 

尚 /etc/nut 以下のファイルはパーミッションが640になっているため、

$ ls -l /etc/nut/*

としてみて、全てのファイルのグループが nut となっていることを確認して下さい。