images header
Index >> Plamo Linux Fan >> APC製UPSメモ
                APC製UPSメモ
2003/02/08
1.目的
まがりなりにも24時間動きつづけなくてはならないインターネットサーバ群,であれば,UPS(無停電電源)を装備するのは至極当然。しかし,そんな当然なことが出来るUPSが,意外に少ないので困ってしまう。
最近は少しは出てきたが,結構高かったりするし(^^;
 APC(American Power Conversion社)製のUPSは,商用OS用のモジュールは広く販売していますが,残念ながら Linux の様なフリーのOSに対するサポートは一切ありませんでした,最近までは。そんな中でも,がんばっていろいろと作って提供してくれる方がいらっしゃるのは心強い事で,出来るものならば私もお手伝いしたいくらいです(できないけど(^^;。
2003/02/08
apcupsd-3.8.6がリリースされてます。なんでもSlaveでごにょごにょだそうで。
っていうか、いつのまにかSourceForgeへ軸足移してたんですね、今日気づきました(^^;
2002/01/07
apcupsd-3.8.5(!)がリリースされました。最後って言ってたのにねぇ(^^;
2001/12/16
apcupsd-3.8.4-2がリリースされました。実は3.8.4が直前にリリースされているんですが、すぐに軽微な不具合が見つかって、急遽直したんだそうです。メールで御知らせがありました。3.8.xシリーズは、このバージョンで最後らしいです。
2001/11/28
apcupsd-3.8.3がリリースされました。
2.入手先
apcupsd-3.8.6.tar.gz(Linux Source)
オフィシャルサイト:http://www2.apcupsd.org/
ダウンロード:http://sourceforge.net/project/showfiles.php?group_id=54413 サポートセンター:http://www.brisse.dk/site/apcupsd/
apcupsd-3.8.6-1_rh7.i386.rpm(RPM Package for RedHat7.1)
apcupsd-3.8.6-1_rh8.i386.rpm(RPM Package for RedHat8.1)
オフィシャルサイト:http://www2.apcupsd.org/
apcupsd-3.8.6.i386.RH7.0.rpm(RPM Package for RedHat7.0)
オフィシャルサイト:http://www2.apcupsd.org/
winapcupsd-3.8.6.tar.gz(Win32 Binary with InstallShield)
オフィシャルサイト:http://www2.apcupsd.org/
ご本家 PowerChute plus for Linux
本体:http://www.apc.co.jp/products/software/pcplinux.html

3.導入方法

※3.6系と3.7系以後ではインストールされるディレクトリが異なるらしいので,注意が必要です。既に 3.6.x 系をインストール済みのマシンへの導入時は,一旦古いバージョンをアンインストールしてくださいとのこと。
 プロセスを停止(powersc STOP)して,ソースツリーの中の,apcuninstall.sh を実行するとアンインストールが実行されますが,/etc/apcupsd.conf までついでに削除されてしまうので,バックアップを取っておきましょうね :-)

  1. Plamo用にちょっと細工をする
     3.7以降のapcupsdは、インストール時にディストリビューションの種類を認識しようとしますが、残念ながらPlamoはその中には含まれていません。しかし、Slackwareに極めて近い(当たり前だ(笑)という特性を利用して、インストールスクリプトをだましてしまいましょう。
     /etc/slackware-versionというファイルを以下のように作成してからインストールを始めると幸せになれます。
    ※Special Thanx to apfelさん

    # touch /etc/slackware-version
    # vi /etc/slackware-version
    # cat /etc/slackware-version
    7.0

  2. アーカイブを展開する。

    # tar xvfz apcupsd-3.8.6.tar.gz

  3. apcupsd-3.8.6 というディレクトリが出来ているはずなので,ここへ入る。

    # cd apcupsd-3.8.6

  4. インストールを実行する。
    バージョン3.7で拡張された機能のうちもっとも特徴的な,CGI プログラムを導入するには,こちらに書いてある通り,./configure するときにそれなりのオプションを指定する必要があります。以下の例では、僕んちのWebサーバ用にしてありますが、Plamo-2.0添付のApacheパッケージをインストールした場合は、--with-cgi-bin=/usr/local/apache/cgi-binなどとしてください。3.6.2 の場合は,単に ./configure するだけです。

    # ./configure --enable-cgi --with-cgi-bin=/home/que/cgi-bin
    # make
    # make install

  5. 3.6.2の場合は、examples/apcupsd.conf/etc/apcupsd.confへコピーする。
  6. /etc/apcupsd/apcupsd.conf を編集する。
    SmartUPS を使う場合はほとんどデフォルトでOK。確認・修正のポイントは,下記。
    BackPro UPSの場合
    UPSCABLE 940-0095A
    UPSTYPE backupspro(またはnewbackupspro,またはbackupspropnp)
    SmartUPSの場合
    UPSCABLE 940-0024C(3.7以降では,デフォルトで Smart となっているが,それでもいいらしい)
    UPSTYPE smartups
    共通項目
    DEVICE /dev/ttyS0 --> よくCOM1とCOM2を間違える(^^; 思い込みって怖い・・・
    MINUTES 3
    BATTERYLEVEL 5 --> 以上デフォルト値
    TIMEOUT 0 --> デフォルト,試験的にすぐ落としたい場合は,適当(60など)な値にするとすぐ電源が切れる(はず)
    STATTIME 300 --> ステータス情報を書きこむインターバル,単位:秒
    FACILITY local0 --> ログを標準の /usr/adm/messages から切り離すための syslogd 用設定,デフォルトではコメントアウトされているので、messagesへログが紛れるのが気に入らない方はコメントを外す。当然/etc/syslog.confも変更しなくてはならない。
    DATATIME 300 --> 電源ラインデータを書きこむインターバル,単位:秒

    3.6では、これを保存したら,

    # powersc CONFIG

    として,UPS内部のEEPROM(NVRAM?)にかきこむ。

    APC純正のPowerChute plus for NovellやPowerChute for NTだと,ランタイムで動的にかきかえるらしいが,apcupsdではそうはいかないらしい(^^;

     なお,Plamo Linux 自体の最初のインストール時に COM ポートの設定をきちんとしていないと,通信できない場合があるらしい(^^;

  7. /etc/rc.d/rc.localに,apcupsd を自動起動するよう追記
     はじめに行ったおまじないによって、自動起動やシャットダウンのスクリプトが自動的に作成されています。これをそのまま使います。

    # jvim /etc/rc.d/rc.local
    # cat /etc/rc.d/rc.local
    ...
    if [ -x /etc/rc.d/rc.apcupsd ]; then
       /etc/rc.d/rc.apcupsd start
    fi

     電源異常時の処理は、自動的に /etc/rc.d/rc.6 に追記されています。

  8. シャットダウンしてUPSを専用ケーブルで接続したのち再起動
     再起動後,apcmain が常駐していることを確かめる

    # ps ax|grep apc

     また,きちんと動いていればステータスが見れるはずなので,

    # /etc/rc.d/rc.apcupsd status

    として,ステータスを見てみよう。
    但し、apcupsd 起動から数十秒間は下記のようなエラーがでるので,ちょっと待つのがポイント。3.8.2 からは、メッセージがちょっと親切になりました(^^; これですな、Mr. Kern が言ってたのは・・・

# /etc/rc.d/rc.apcupsd status
APCACCESS FATAL ERROR in apcipc.c at line 495
attach_shmarea: shared memory version mismatch (or UPS not yet ready to report)
4.テスト

 UPSのテストをするのだから,当然停電しなくてはなりません(笑)
 そこで,思いきってコンセントを抜いてみましょう!! あ,当然ですが,抜くのはUPSのコンセントで,LinuxBoxからUPSへ刺さっているコンセントではありませんよ,念のため(^^;

 すると,各コンソールに

There are power problem !
(電源に問題がある!)
と通知され,/etc/apcupsd/apcupsd.conf内に定義した TIMEOUT= 秒以内にコンセントを再び挿入すれば,
normal power restored!
(電源が復帰した!)
というメッセージが現れるはずです。
 また,そのまま電源を刺しなおさなければ,/etc/apcupsd/apcupsd.conf内に定義した TIMEOUT= 秒後に自動シャットダウンが始まるはずです。シャットダウンしてしばらくすると,勝手に電源が落ちるでしょう。この後,再度コンセントを差し込むと,しばらくして自動起動が始まるはずです。一度は試してみましょう。

5.運用

 ここでは,3.7.2 の場合について示します。3.8.xもおなじです。3.6.2 では,ログは /etc/apcupsd.status に僅かに残るだけだったので,あまり書く事がないのです(^^;

  1. 動作状態の確認
     動作状態は,/etc/apcupsd/apcupsd.events を見るとおおむねわかります。
    Tue Mar 21 02:08:32 JST 2000  apcupsd 3.7.2 startup succeeded

    などの行が最終行になっていれば,現在は動作しているはずです。

    Tue Mar 21 02:29:52 JST 2000  Power failure
    Tue Mar 21 02:30:00 JST 2000  Running on UPS batteries

    というログがのこっていれば,この時刻に停電もしくは電源異常があったということです。

  2. 電源データログの確認
     DATATIME を 0 でない値にしておくと,/usr/adm/messages に設定した時間毎の電源供給にまつわるデータが刻々と記録されます。かなり巨大なサイズのログを吐き出すので,この設定を有効にする場合は,logrotate 等を使って定期的なログのローテーションをしておく事をお勧めします。

     なお,/etc/apcupsd/apcupsd.conf にて

    #FACILITY local0

    の行のコメントをはずしておくと,このログは /etc/syslog.conf で指定されたファイルへロギングされるようになります。設定に付いては,オンラインマニュアルに詳しく書いてありますが,おおむねこんな感じです。

# cat /etc/syslog.conf
...

*.=info;*.=notice;*.warn;local0.none            /usr/adm/messages
*.=debug                                        /usr/adm/debug
local0.info;local0.!notice                      /usr/adm/apcupsd.data
local0.notice;local0.!warn                      /usr/adm/apcupsd.status
local0.warn;local0.err;local0.crit;local0.alert /usr/adm/apcupsd.events
  

なお,このように設定した場合,/etc/apcupsd/apcupsd.status は情報が重複してしまうので,残さないように /etc/apdupsd/apcupsd.conf を直しましょう(^-^)b
  1. CGI プログラムによる監視
     3.7 で追加された機能の目玉,CGI による監視をするには,当然 http サーバが必要です。Plamo には,Apache が付いてますから,これを使うのがいいでしょう。手前ミソですが,こちらを参考にしてください。
     で,監視画面を見るには,

    http://localhost/cgi-bin/multimon.cgi

    を同一マシン上のGUIなブラウザ(Netscapeなど)から叩くか,他のGUIなマシンからブラウザで UPS が繋がったマシンの上記 URL を叩くと見れます。サンプル画像は,ご本家のマニュアル内にありますのでごらんください。

     もし、複数台のapcupsdが動いているホストがある場合、それらを1台のマシンで一括で監視することも出来ます。その場合は、/etc/apcupsd/hosts.conf を編集します。
     また、1台しかない場合も、システム名に"Local Host"と出てくるのが気に入らない場合はやっぱりこれを編集します。
     たとえば、こんな具合です。

    MONITOR 127.0.0.1 "Local Host"

     となっているダブルクォーテーション(")で囲まれた部分を、本来のホスト名に修正します。また、他のホストを監視対象にしたい場合は、

    MONITOR 192.168.0.2 "Another Host"

     といった具合に追加します。
     ここで、他のホストを監視したい場合、監視されるホストの/etc/apcupsd/apcupsd.conf 内で、NETSERVERディレクティブはかならず on になっていなくてはならず、また SERVERPORT で指定されているポート番号は一致していなくてはなりません。

  2. 1台のUPSで複数台のLinuxBoxの電源管理

    Special thanx to Mr. Kern @ sibbald.com and Mr. Riccardo @ oasi.gpa.it

     apcupsd は、1台のUPSから電源を取っている複数のLinuxBoxの面倒を一手に引き受けてくれます。似たようなことは、APC の ShareUPS というアクセサリもできるのですが、あれはそれぞれのホストをシリアルケーブルで接続しなくてはなりません。しかし、apcupsd ではシリアルケーブルを接続するのはマスタとなる1台だけで、残りはシリアルケーブルで接続する必要はありません。但し、代わりに同一ネットワーク上にいなくてはなりません。まぁ通常、LinuxBoxをネットワークから切り離して使う事はないでしょうから、この点は問題ありませんね:-p
     このようなコンフィグレーションにすると、どんな振る舞いをするかと言うと、電源異常などの情報はまずシリアルケーブルを通してマスタとなるLinuxBoxへと伝達されます。すると、マスタはその情報をネットワークを経由してスレーブとなるLinuxBoxへと伝達します。これで全部のLinuxBoxは連動され、停電時の自動シャットダウンなども揃って行われるのです。

     注意すべき点は、

    1. HUBもUPSから電源を供給するなどして、停電時にネットワーク接続が遮断されないようにしないと、スレーブがシャットダウンされない(当たり前だ(笑)
    2. 停電時にDNSから名前を引けなくなる可能性があるネットワーク構成の場合は、/etc/hosts などにホスト名を記載しておく
    などです。

     では、その設定方法を。

    1. マスター側
      /etc/apcupsd/apcupsd.conf 内の下記の部分を修正します。
      UPSCLASS netmaster
      マスター/スレーブネットワーキングモードのマスタであることを指示
      UPSMODE net
      マスター/スレーブネットワーキングモードを使うことを指示
      NETPORT 6666
      マスター/スレーブ間の通信ポートを定義、すべてのスレーブと同じ値である必要あり
      SLAVE <slave-name>
      UPSを共有しているスレーブのホスト名を指定。
    2. スレーブ側
      同じく /etc/apcupsd/apcupsd.conf 内の下記の部分を修正します。
      UPSCLASS netslave
      マスター/スレーブネットワーキングモードのスレーブであることを指示
      UPSMODE net
      マスター/スレーブネットワーキングモードを使うことを指示
      NETPORT 6666
      マスター/スレーブ間の通信ポートを定義、マスタと同じ値である必要あり
      MASTER <master-name>
      UPSを共有しているマスタのホスト名を指定。

     なお、マスタ/スレーブのUPSTYPEは必ず揃え、スレーブのUPSCABLEは"ether"を選びます。
     これで双方の apcupsd を起動(既に動いているなら、再起動)して、正しく通信しているかどうか確かめて見ましょう。起動はどちらが先と言うことはないと、配布もとの Kern 氏も言っていましたが、「あえていうならスレーブかな?」とも言っています(笑)
     というわけでまずはスレーブを起動しましょう。
     スレーブ側では、スタンドアローンで起動していたデーモンが姿を潜め、その代わり"apcslv"というデーモンが起動していることがわかります。

    # ps ax|grep apc
     3013  ?  S    0:00 apcmain
     3015  ?  S    0:00 apcslv
     スレーブの起動は、スタンドアローンの時とは違って、即座に起動を終了します。対象となるUPSの実体が接続されていないからでしょうね。

     そしてマスターを起動します。起動後1分から2分ほどすると、マスタ側にはスタンドアローンでは現れなかった"apcmst"というデーモンが起動します。

    # ps ax|grep apc
    12691  ?  S    0:00 apcmain
    12701  ?  S    0:00 apcser
    12702  ?  S    0:00 apcnis
    12703  ?  S    0:00 apcmst
     マスターが起動した後、スレーブを見ると、/etc/apcupsd/apcupsd.events には、下記の様にマスターとの接続が正しく行われたという記述が残ります。
    apcupsd 3.7.2 startup succeeded
    Connect from master MASTER_NAME succeeded
     同様にマスター側にも記述されます。
    Connect to slave SLAVE_NAME succeeded
    apcupsd 3.7.2 startup succeeded
     では、テストのため例によって電源を落としてみましょう(笑)
     /etc/apcupsd/apcupsd.conf 内の TIMEOUT ディレクティブはあまり長くしないようにしましょう。長いと結果を待つのがだるいです(笑)
     マスタがシャットダウンに入ると、スレーブ側も同時にシャットダウンに入ることがわかるでしょう。マスタは自身がシャットダウンを完了する前30秒ほど、スレーブのシャットダウンを待ちます。その後、マスタがUPSの電源を落としてめでたくシャットダウン完了です。

     マスタ側のログは、こんな感じです。

    Power failure
    Running on UPS batteries
    Reached run time limit on batteries
    User logins prohibited
    Initiating power failure system shutdown
    Connect to slave SLAVE_NAME failed
    apcupsd exiting, signal 15
     スレーブ側は、マスタとの接続がどうのこうのといわない(既にシャットダウンしている事になっているので(笑)だけで、基本的には同じログが残ります。時刻を見比べると面白いですよ:-)
付録1.参考文献
APCUPSD Home Site
新しいプライマリサイト?
APC UPS Power Management under Linux
開発者のサイト,なのかなぁ。こっちのほうがより新しい情報が開示されていますね。
Apcupsd 3.8.3 User's Manual
上記のページにあるものです。
上記のマニュアルを和訳しているもの(2001/10/04ベースへ変更中)
去年翻訳、掲載許可もらったです。
株式会社 APC Japan
American Power Conversion の日本法人のページです。
Index >> Plamo Linux Fan >> APC製UPSメモ

images footer