FreeBSD 9.1にapcupsdをインストール(1/2)

2015年8月14日NAS,パソコン・インターネット

FreeBSD 9.1をサーバとして運用しています。サーバとして使う時に気にしたいのが、停電対策です。

停電している間は使えなくても構わないのですが、正常にシャットダウンできなくて、ディスク上のデータが壊れてしまっては困ります。

そのため、無停電電源装置(UPS:Uninterruptible Power Supply)を設置したいところです。

我が家には、APCのUPSがあります。APCは、シュナイダーエレクトリック株式会社という名前に変わってしまいましたが、製品名はかわらずAPCの様です。

最近、リチウムイオン電池搭載のUPSの、「APC GS Pro 500」が発売になりましたね。

[amazonjs asin="B00D2P22SI" locale="JP"]

私が使っているのは、「APC ES 500」と言う製品です。後継機が出ているみたいですね。

[amazonjs asin="B0039P72UE" locale="JP"]

鉛蓄電池を使っているので、ずっしりと重く、結構大きいです。また、バッテリーに寿命もあり、正しく使うには、一定期間ごとの交換が必要です。

私は、2007年に購入し、保証も、バッテリー標準寿命もすぎていますが、一応使えています。

そんな状態ですが、FreeBSD 9.1を搭載したサーバ機に、このUPSを接続し、使えるようにしました。

次の手順となります。

  1. apcupsdビルド&インストール
  2. apcupsd.conf設定
  3. apccontrol修正
  4. /etc/rc.conf設定
  5. apcupsd起動、またはシステム再起動
  6. 動作確認

1. apcupsdビルド&インストール

$ sudo su
# cd /usr/ports/sysutils/apcupsd
# make config-recuresive
# make install clean

apcupsdのソフト自体のインストールは、これだけです。

設定変更で、CGI-BINにはチェックを入れておいてください。

2. apcupsd.conf設定

次に、設定ファイル、"/usr/local/etc/apcupsd/apcupsd.conf"を設定します。

複数台のapcupsd対応サーバを持っている場合、UPSがUSBでつながっているサーバ(Etherマスター)から、Ether net経由で停電を他のサーバ(Etherスレーブ)に伝えることができます。

その場合の設定もあわせて記載します。

なお、"BATTERYLEVEL"より下は、設定例です。

設定項目 意味 デフォルト USB
Etherマスター
Etherスレーブ
UPSCABLE ケーブルの種類 smart usb ether
UPSTYPE UPSの種類 apcsmart usb net
DEVICE UPSデバイス名 /dev/usv (空欄) {サーバIPアドレス}:{ポート番号}
BATTERYLEVEL UPSの残量が指定した以下の時に動作 5 50 50
MINUTES UPSの稼働時間が指定した以下の時に動作 3 10 10
TIMEOUT 停電からUPSが稼働するまでの時間(0は無効) 0 60 60
UPSNAME 英数字8文字以下でUPS名を指定 (空欄) APCES500 APCES500

apcupsd.confの設定ファイルを日本語訳された方がいらっしゃいます。ありがとうございます。

上記の設定で、UPSをUSBケーブルで直接つないだ場合、および、Etherケーブル経由のSlave動作の両方を試してみました。

どちらとも、うまく動きました。

Etherマスターには、IO-DATAのLANDISK Home HDL4-Gを使いました。

この場合、スレーブ側(FreeBSD)の"DEVICE"設定は、192.168.1.200:6543となります。192.168.1.200は、LANDISK Home HDL4-GのIPアドレスです。

3. apccontrol修正

使っているマザーボードが、APMとACPIに対応しているなら、次の設定で、自動的に電源を切る様にできます。

でも、次のドキュメントによると、信頼性が高くないらしいです…。ラッキーならきちんと電源を切れるみたいですが…。

標準の設定では、システムがhaltしますが、PCの電源は切れません。電源が切れる様にするためには、次の様に書き換えます。"-h"を"-p"にします。

# diff -c apccontrol.org apccontrol
*** apccontrol.org	Fri Aug 16 07:49:00 2013
--- apccontrol	Sun Sep 22 08:42:14 2013
***************
*** 89,95 ****
  	;;
  	doshutdown)
  		printf "Beginning Shutdown Sequence" | wall
! 		${SHUTDOWN} -h now "apcupsd initiated shutdown"
  	;;
  	annoyme)
  		printf "Power problems please logoff." | wall
--- 89,95 ----
  	;;
  	doshutdown)
  		printf "Beginning Shutdown Sequence" | wall
! 		${SHUTDOWN} -p now "apcupsd initiated shutdown"
  	;;
  	annoyme)
  		printf "Power problems please logoff." | wall

私のマザーボードでは、この設定で電源を落とすことができる様になりました。

[amazonjs asin="B005HG49DQ" locale="JP"]

4. /etc/rc.conf設定

/etc/rc.confに、次の行を追加します。

apcupsd_enable="YES"

5. apcupsd起動、またはシステム再起動

次のコマンドで、apcupsdを起動します。

# /usr/local/etc/rc.d/apcupsd start
Starting apcupsd.

面倒だったら、再起動でも構いません。というか、再起動して、apcupsdが起動することを確かめておいた方がよいでしょう。

6. 動作確認

ログファイル"/var/log/apcupsd.events"を確認しておいてください。

2013-09-22 09:01:43 +0900  apcupsd 3.14.10 (13 September 2011) localhost startup succeeded

ログファイル"/var/log/apcupsd.events"で、apcupsdが動いていることを確認したら、"apcaccess"コマンドで、UPSの状態を確認します。

$ apcaccess
APC      : 012,345,6789
DATE     : 2013-09-24 21:25:32 +0900  
HOSTNAME : localhost
VERSION  : 3.14.10 (13 September 2011) freebsd
UPSNAME  : APCES500
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2011-01-01 03:17:15 +0900  
MODEL    : APC ES 500 
STATUS   : ONLINE 
LINEV    : 104.0 Volts
LOADPCT  :  20.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :  36.9 Minutes
MBATTCHG : 50 Percent
MINTIMEL : 10 Minutes
MAXTIME  : 60 Seconds
SENSE    : High
LOTRANS  : 090.0 Volts
HITRANS  : 110.0 Volts
ALARMDEL : 30 seconds
BATTV    : 13.5 Volts
LASTXFER : Low line voltage
NUMXFERS : 0
TONBATT  : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
STATFLAG : 0x07000008 Status Flag
SERIALNO : ????????????  
BATTDATE : 2007-09-13
NOMINV   : 100 Volts
NOMBATTV :  12.0 Volts
FIRMWARE : 803.p6.A USB FW:p6
END APC  : 2013-09-24 21:26:23 +0900  

いよいよ、UPSの元電源を(壁の)コンセントから抜いてみます。間違えて、UPS本体のバックアップ電源につながっているコンセントからPCの電源ケーブルを抜かないで下さい。また、UPSが正しく充電されている事を確認して下さい(BCHARGE)。

上記の設定(USB)なら、UPSの元電源を、(壁の)コンセントを抜いてから60秒後に、シャットダウンが開始するはずです。

コンセントを抜いた瞬間に、コンソール画面に、バッテリーで動作している旨の表示(Power failure. Running on UPS batteries.)が出ます。

apcupsd[3594]:  Power failure.
apcupsd[3594]:  Running on UPS batteries.

うまく、PCの電源が切れたでしょうか?

CGIを使って、Web画面で動作を確認する方法は、別の記事で説明します。結構ハマりました。

Posted by お市のかた