UPSを導入しようと思い立ってOMRONのBY35Sを購入したのだが、純正ソフトはLinuxはCentOSかRedHatしか対応しておらず自分の環境では使えなかった。そこでNUTを導入したが、いくつかpitfallがあったので備忘のために書いておく。この部分は恐らくBY50SでもAPCのUPSでも同じ。
目的:
・Ubuntu20.04
・Windows10 Pro
UbuntuをNUT Serverとした2台の同時シャットダウン
前提:
・Ubuntu側でのNUT ServerおよびNUT Clientの設定は終了していて、単体でのシャットダウンは実現できているものとする。
なおサードパーティ製GUIであるWinNUTも試してみたがうまく行かず諦めた(これは自分が悪いのかもしれない)
概要
- 公式サイトからWindows用MSIをダウンロード
- OpenSSL内のdll(LIBEYA32.dll, SSLEAY32.dll)をコピー
- libgcc_s_dw2-1.dllのコピー
- upsサーバーにアクセスできることを確認
- clientの設定
- サービスのログオンアカウント設定
- サーバーからクライアントをシャットダウンできるか確認
- 実際にコンセントから抜いて確認
主に参考にしたページ
- https://ameblo.jp/p630/entry-12333636345.html
- https://forums.serverbuilds.net/t/guide-using-nut-to-power-down-multiple-systems/8383
公式サイトからWindows用MSIをダウンロード
ここは特に問題なし。以下特記ない限りClient側(Windows上)での操作。
OpenSSL内のdll(LIBEYA32.dll, SSLEAY32.dll)をコピー
その後、upsc.exeなどを起動しようとするとdllがないと怒られるので、32bit版のOpenSSLをダウンロードしてきて解凍し、LIBEYA32.dll
, SSLEAY32.dll
を``C:\Probram Files (x86)\NUT\bin`とC:\Probram Files (x86)\NUT\sbin\
にコピーしておく(前者だけでも良いかも)
参考質疑で紹介されていたhttp://web.archive.org/web/20160826051001/http:/indy.fulgan.com/SSL/
からopenssl-1.0.2h-i386-win32.zip
を使った。
https://alioth-lists.debian.net/pipermail/nut-upsuser/2016-September/010295.html
libgcc_s_dw2-1.dllのコピー
これは既知のバグらしい。libgcc_s_dw2-1.dll
をc:\Program Files (x86)\NUT\bin\
からc:\Program Files (x86)\NUT\sbin\
にコピーする
https://alioth-lists.debian.net/pipermail/nut-upsuser/2015-September/009880.html
upsサーバーにアクセスできることを確認
コマンドプロンプトで以下(Powershellだとうまく行かなかった)。
"C:\Program Files(x86)\NUT\bin\upsc.exe" [ups name]@[server ip]:[port]
電圧のやドライバの情報が20行くらい出てきたらok。
clientの設定
NUT Client Configuration>Ubuntu or Windows Official Clientに沿って、nut.confとupsmon.confの設定を行う。
といっても、C:\Program Files (x86)\NUT\etc
内にあるnut.conf
に
MODE=netclient
を追記し、
upsmon.conf
に
MONITOR <ups_name>@<NUT_server_IP> 1 <slave_username> <slave_password> slave
と、
SHUTDOWNCMD "C:\\WINDOWS\\system32\\shutdown.exe -s -t 0"
を追記するのみ。
サービスのログオンアカウント設定
コンピュータの管理から、Network UPS Tools
というサービスを確認。こちらのログオンアカウントをローカルシステムアカウントから管理者権限のあるアカウントに変更しておく。(これを変更しないとシャットダウンされない。イベントビューワーでアプリケーションログを確認しても特にエラーが出ている様子もなく、時間を溶かしてしまった。分かってしまえば当たり前の話だった…)
サーバーからクライアントをシャットダウンできるか確認
サーバー、クライアント共にシャットダウンして良いことを確認してから、
sudo upsmon -c fsd
とすると、サーバーからの強制シャットダウンコマンドが各NUT clientに送られ、そこで先ほどupsmon.confに設定したSHUTDOWNCMDが走る。シャットダウンされればok。
もしシャットダウンされなければ、SHUTDOWNCMDの中身("C:\WINDOWS\system32\shutdown.exe -s -t 0")でシャットダウンされることを確認する。
コマンドではシャットダウンされるのに、upsmon経由ではシャットダウンされないときはサービスのログオンアカウントの確認を。
実際にコンセントから抜いて確認
ここまで完了していれば、実際にコンセントから抜いた際にWindowsもシャットダウンされるはず。お疲れさまでした。