Date: 2016.05.14
Home / NAS. / おうちで自作NAS - FreeNAS UPS連動編
先日、UPSとの連動にWindows10のスティックPCをマスターとして設定しました。
スティックPCにapcupsdを導入。

次はNASをスレーブとして設定します。
FreeNASには標準でUPS連動機能がありますので、簡単に終わると思ってました。

が、FreeNASに搭載されているUPSサービスはNetwork UPS Tools(NUT)で、apcupsdとは違います。
(apcupsdと連動できるみたいな情報もあって色々やってみたけど結局うまくいかず時間だけ無駄に過ぎてしまった。)
なので、結局こちらにもapcupsdを導入しました。


FreeNAS9.10、というかFreeBSD10.3として導入作業を行っています。

apcupsd導入

まずはapcupsdを拾ってきます。
今回はOPNsenseのパッケージアーカイブからFreeBSD10のamd64用を落としました。
最新版はWindowsと同じ3.14.13です。

以降、FreeNASにssh接続し、rootユーザで作業を行います。
sshが有効になっていない場合はこちら参照。
 ⇒おうちで自作NAS - FreeNAS ZIL/L2ARC設定編

1.適当なディレクトリでwgetでパッケージをダウンロードします。
# wget https://pkg.opnsense.org/FreeBSD:10:amd64/latest/All/apcupsd-3.14.13.txz

2.ダウンロードできたらpkgコマンドでインストールを行います。
# pkg install apcupsd-3.14.13.txz

3.途中確認を求められるので「y」を返答します。
Proceed with this action? [y/N]: y

RAMディスク上ファイルの退避配置

FreeNASは「/etc」「/mnt」「/var」は最初からRAMディスクで動作していて、稼働中に配下のファイルを編集してもこのままだと再起動したら消えてしまいます。
これらのディレクトリは起動時に「/conf/base/」からコピーされて起動しますので、apcupsdをインストールした際に作成されたディレクトリ、ファイルを同じように配置されるように退避しておきます。

1.apcupsdのコンフィグディレクトリを「/conf/base/」以下にコピー。
# cp -pr /usr/local/etc/apcupsd /conf/base/etc/local/

2.apcupsdの起動用スクリプトを「/conf/base/」以下にコピー。
# cp -p /etc/local/rc.d/apcupsd /conf/base/etc/local/rc.d/

apcupsdコンフィグ(テスト)

コンフィグの編集はもちろん上記の退避した方を編集します。
# vi /conf/base/etc/local/apcupsd/apcupsd.conf

テストの為にコンフィグは以下のように。
UPSNAME RS400
UPSCABLE ether
UPSTYPE net
DEVICE マスターのIP:3551
ONBATTERYDELAY 10
BATTERYLEVEL 0
MINUTES 0
TIMEOUT 60
KILLDELAY 0

パラメータ名説明
UPSNAMEステータス画面等に表示する名前。なくてもいい。
UPSCABLEUPSとの接続ケーブル指定。ネットワークなのでether。
UPSTYPEUPSとの接続タイプ。ネットワークなのでnet。
DEVICE接続先デバイス指定。スレーブ稼働時はマスターのIPとポートを指定。
ONBATTERYDELAY値秒経過しても電源が復旧していない場合にONBATTERY稼働と判断する。この間に復旧したら一切何もしない。瞬断対策。
BATTERYLEVELバッテリーレベルが値%以下になったらシャットダウンと判断。
MINUTESバッテリー稼働時間が値分以下になったらシャットダウンと判断。
TIMEOUTONBATTERY稼働になってから値秒経過したらシャットダウンと判断。
KILLDELAYONBATTERY稼働になってから値秒後にUPSの電源をOFFにする。Slaveでは設定しない。
※BATTERYLEVEL、MINUTES、TIMEOUTどれかの条件にマッチした時点でシャットダウンと判断される。

apcupsd自動起動設定

apcupsdの自動起動許可を設定ファイルに追記します。
こちらも「/conf/base/」以下にファイルの方を編集します。
# vi /conf/base/etc/rc.conf

以下を追記します。
# apcupsd
apcupsd_enable="YES"

シャットダウン時の完全電源OFF設定

シャットダウンと判断された際にapcupsdから呼び出されるのが「# shutdown -h now」コマンドになります。
最近のLinux系OSはだいたい「# shutdown -h now」で電源まで落ちますが、FreeBSDでは「-h」ではOSのシャットダウンのみでパワーオフ前で止まります。
電源まで落としたい場合は「-p」を付けないといけません。

マスター機から「KILLDELAY」でUPS自体も落とすようにしてるしいいっちゃあいいんですが、FreeNASシャットダウン後UPSシャットダウン前に復電した時とか電源だけ入ったままになるので。
ですので、apcupsdのスクリプトファイルを修正しておきます。
# vi /conf/base/etc/local/apcupsd/apccontrol

以下を編集します。
変更前
        doshutdown)
                printf "Beginning Shutdown Sequence" | wall
                ${SHUTDOWN} -h now "apcupsd initiated shutdown"

変更後
        doshutdown)
                printf "Beginning Shutdown Sequence" | wall
                ${SHUTDOWN} -p now "apcupsd initiated shutdown"

apcupsd状態確認

ここまでできたら再起動しておきます。
起動完了後、「/etc/local/apcupsd/apcupsd.conf」とかがきちんと配置されている事を確認しておきます。

確認コマンドで状態を見ます。
自動で正常に起動されていれば設定内容やUPSのステータス等が表示されます。
# apcaccess

自動起動までしているのにステータスが取れていない場合、特にマスターがWindowsの場合はWindowsファイアウォール等でブロックされている可能性が高いです。
その場合は開けてあげて下さい。

apcupsdテスト

念の為に事前にマスター側のTIMEOUT、KILLDELAY値は延ばしておきました。
状態を見るのに以下のログを「tail」で流しておくと分かりやすいです。
# tail -f /var/log/apcupsd.events

ケース1.UPSの電源をコンセントから抜線し、すぐにコンセント接続。何も起きない。[OK]
ケース2.抜線し、10秒経過後に「Running on UPS batteries.」ログ出力。その後すぐにコンセント接続。「Power is back.」ログ出力され、シャットダウンは起こらない。[OK]
ケース3.抜線し、60秒経過後シャットダウン。電源もOFF。[OK]

想定通りの結果に終わって良かったです。
ただ、コンフィグの「POLLTIME」をデフォルト(60秒)のままにしてましたが、これがマスター経由でのUPS状態チェック間隔になるのでONバッテリーになったと感知するのはタイムラグが出てしまいます。
まあ、最終的に全台の時間調整する時に考えようと思います。

【関連記事】
■UPS関連
UPSを買ってみた。
スティックPCにapcupsdを導入。
CentOSなRaspberry Pi 3にapcupsd導入。
おうちでVMware - ESXi UPS連動編

■FreeNAS関連
おうちで自作NAS - パーツ編
おうちで自作NAS - 組み立て編
おうちで自作NAS - FreeNAS9.10インストール編
おうちで自作NAS - FreeNAS9.10構築編
おうちで自作NAS - FreeNAS更新編
おうちで自作NAS - FreeNAS ZIL/L2ARC設定編
おうちで自作NAS - FreeNAS ブートデバイスミラー設定編
おうちで自作NAS - FreeNAS S.M.A.R.T.設定編
おうちで自作NAS - FreeNAS Scrubs設定編
おうちで自作NAS - FreeNASの更新適用後の注意点。


Secret

TrackBackURL
→https://000dandelion000.blog.fc2.com/tb.php/83-8314f14c