UPSの設定。
APC Smart-UPSは、USB接続すると、HIDデバイスとして認識されるので、カーネルの以下のオプションを有効にする。その他にも、USBドライバも組み込んでおく。
Device Drivers -> HID Devices -> USB Human Interface Device (full HID) support Device Drivers -> HID Devices -> /dev/hiddev raw HID device support
udevによってデバイス名が決定される。
/etc/udev/rules.d/以下にルールを記述して、常に特定のデバイス名になるようにする。
デバイス情報の確認。接続すると、通常は/dev/usb/hiddev*になるので、以下のコマンドでudevが利用する情報を確認する。
/sys以下のどのファイルに情報が記述されているかを調査 # udevadm info -q path -n /dev/usb/hiddev0 ルール作成に利用可能なプロパティを全て表示する udevadm info -a -p `udevadm info -q path -n /dev/usb/hiddev0`
ここから、デバイスを特定できる情報を拾って/etc/udev/rules.d/以下にルールファイルを置く。
今回は、50-Smart-UPS.rulesとした。ファイル名「*.rules」ファイルが番号順に読み込まれる。
SUBSYSTEM=="usb", ATTRS{serial}=="xxxxxxxxxxxx", SYMLINK="Smart-UPS"
SUBSYSTEM==“usb”で、ATTRS{serial}==“xxxxxxxxxxxx”のデバイスのシンボリックリンクをSmart-UPSとして作成する。ここでは、シリアルナンバーで機器を特定している。
これによって、UPSに「/dev/Smart-UPS」でアクセスできる。この手順を踏まなくても、自動的にデバイスを検索して接続することができるが、念のため明示的に設定する。
/etc/apcupsd/apcupsd.confを編集する。
UPSCABLE usb UPSTYPE usb
# USB接続の場合、DEVICEは自動的に探してくれるみたいなので空。上のudevの設定は不要かも。 DEVICE # バッテリ駆動に切り替わってからの待機秒数。瞬停対応。 ONBATTERYDELAY 5 ### 次のいずれかが最初に満たされた場合にシャットダウンに入る。 # バッテリー残量(%) BATTERYLEVEL 5 # 残り駆動時間 MINUTES 5 # バッテリになってからの経過時間 TIMEOUT 60 # シャットダウンをアナウンスする秒数。シャットダウンの何秒前にアナウンスを流すか? ANNOY 20 # 停電してから何秒後にユーザに警告を出すか。 ANNOYDELAY 1
停電して上記設定条件を満たすとシャットダウン動作に入る。
shutdownコマンドが呼び出されると、/etc/init.d/halt.shが実行される。
halt.shのups_kill_power()関数を一部修正して通常通りのシャットダウンになるようにする。
sleep 10 # <- 追加 # 以下コメントアウト #ewarn "Halt system and wait for the UPS to kill our power" #/sbin/halt -id #while [ 1 ]; do sleep 60; done
UPSからシャットダウンがかかった場合は、UPSからの電源停止を待つ。時々、UPSからの電源断がうまくいかず、バッテリがなくなるまで待機することがあるので、通常どおりのシャットダウンにする。電源復旧時の自動起動などを行う場合には、見直す必要があるかもしれない。とりあえず、HDD保護のためにシャットダウンして起動は手動でもかまわないのでこれでよい。