WindowsマシンをNetwork USP Toolsサーバにする

#何をやるか
~~UPS1台に複数のクライアントPCが接続されている状態で、停電時にすべてシャットダウンしたい
純正ソフトは高いのでフリーソフトで何とかしたい
WindowsマシンをUPSサーバーにしたい~~

追記：無償版ESXiでは自動シャットダウンできません。記事を書いた当時はこれを知りませんでした…

LinuxやRasPiでやっている方はおられるのですが、Windowsでやっている方が少ないのでメモとして残しておくことにしました。

[環境]
- サーバ：Windows10
- UPS：APC SmartUPS 750 (USB接続)


#手順
##Windows版NUTをインストールする
公式サイトにWindows用MSIが公開されているのでダウンロードする
https://networkupstools.org/download.html#_binary_packages

現時点で最新版はNUT-Installer-2.6.5-6.msi
MSIを実行するだけなので割愛

##libusbの手動インストール
NUTのインストール中に以下のようにlibusbのインストールに失敗した場合は、libusbを手動インストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/91ced8be-c61c-57a0-11e9-7bf6bb6d7d7a.png)

ここからダウンロードする
http://sourceforge.net/projects/libusb-win32/

UPSを接続した状態でinf-wizard.exeを**管理者権限で**実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/7ede8170-8d41-3f2e-27e1-792b5f5f9985.png)

途中、デバイスの選択画面が出るのでUPSを選択してNextを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/5d922138-e7b9-7416-db69-f6fa984dc754.png)

作成したドライバをどこに保存するか聞かれるので、適当なフォルダに保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/b96d3e5b-43be-e64a-5773-6222fdada404.png)

「Install Now」をクリックしてインストオールする
※管理者権限でないと失敗する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/b5b97657-ed96-c911-6d30-6f2efb752943.png)

一応デバイスマネージャを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/01d60b83-7c71-87a3-1558-b7811623f509.png)


##NUTにUPSを認識させる
libusbのドライバを作成したときにできたファイルのうち、以下の２点をNUT\binにコピーしてリネームする

- x86\libusb0.sys → NUT\bin\libusb.sys
- x86\libusb0_x86.dll → NUT\bin\libusb.dll

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/a5c7a75e-edd5-b971-0b69-df349d592d46.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/b9caa3ea-cfcb-60ed-dea2-c4aa67588b46.png)

ここまで来たら、UPSの認識を確認する
（意外と知られていないのですが、Shift+右クリックで「PowerShellウィンドウをここで開く」のメニューが出ます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/71c4663d-1ec5-a18c-b70a-880a7a579515.png)

nut-scanner.exeを実行して、USB接続しているUPSが認識されていることを確認する
ここで、「driver="usbhid-ups"」のところを確認しておく
※このウィンドウは後で使うので開いたままにしておいた方がいい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/ff685edd-8852-2608-0e75-1f1eff693bf5.png)

##NUTの設定ファイルを作成
NUT\etcに設定ファイルのサンプルがあるので、それをコピーして作成する
※サンプルファイル中にあるコメントは省略しています

```conf:nut.conf
MODE=netserver
```

ups.confの[SU750]の部分は好きな名前、driver=のあとは先ほどnut-scanner.exeで確認したものを入れます

```conf:ups.conf
[SU750]
driver=usbhid-ups
port=auto
```

ユーザーを作成

```conf:upsd.users
[admin]
password = testpassword
actions = SET
instcmds = ALL
```

待ち受けIPアドレスとポートの設定
今回はアクセス制限無しにした

```conf:upsd.conf
LISTEN 0.0.0.0 3493
```

自機のシャットダウン設定
※-t で遅延時間設定したほうがいいかも？

```conf:upsmon.conf
MONITOR SU750@localhost 1 admin testpassword master
SHUTDOWNCMD "C:\\WINDOWS\\system32\\shutdown.exe -s -t 0"
```

###NUTの起動確認
サービスマネージャから「Network UPS Tools」を見つけて起動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/5386882d-53a7-1043-e318-d8e14db3c7c6.png)

ログはイベントビューアーに出ています
起動エラーとか出ていなければ大丈夫だと思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/e1c7c329-22fc-4db3-3bcd-0286884d04de.png)

upsc.exe [先ほど付けたUPS名] を実行して、バッテリーの状態とかがズラズラと表示されればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/a964ee4e-98cd-af59-3c91-01e7a8ccf3e6.png)


##ほかのクライアントの設定
###ReadyNAS
サーバーIP、ユーザー名、パスワードを入れるだけで認識した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/f0377290-ff48-2f42-82a5-982de02a79cd.png)

###ESXi 無償版
※これは本来、有償版でないとUPSによるシャットダウンができないのですが、まだ検証できていません。

NUTの公式サイトに、VMWare用のVIBパッケージが公開されているのでインストール
詳細は割愛しますが、Web管理画面からやるにはVIBをデータストアにアップロードし、ホストの「管理画面→パッケージ」からそのフルパスを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/e56f1677-0ff5-d4e7-53e9-2e4c60c99146.png)

インストールできたら、詳細設定からサーバ設定を行う
※「Nut」と検索すると該当項目が見つかる
※今回はやむを得ない理由により仮想ゲスト上のWindowsにNUTサーバーを立てたため、「UserVars.NutFinalDelay」の値を長めに設定した
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/b1d2bde8-6dbd-673f-5897-58054b579f09.png)

サービスを起動し、ホストと連動して起動するようにしておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/cbdb6595-9d63-37fb-2642-a97b47a177ab.png)

念のためESXi Shell上からもNUTサーバーへアクセスできるか確認しておく

```sh
# /opt/nut/bin/upsc upsname@hostname
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124395/14714014-1c9b-2dfe-9561-be3a09dcf67e.png)


##シャットダウン動作確認
VPN上のリモートから設定してる都合上、停電テストとチューニングはまた今度 :frowning2:

2020.9.27追記：
　記事を書いた同時知らなかったのですが、無償版ESXiではホストの自動シャットダウンができません。
　SSHログインしてシャットダウンコマンドをたたくようにしなければなりませんが、結局やらずじまいでダラダラとそのままにしてしまってます。。