2010年5月7日金曜日

TS-419PへのApcupsdの導入記


はじめに

TS-419Pは(当然ですが)UPSをサポートしています。しかし、サポートしているのはUSBでの直接接続のみです。telnetでログインして、調べてみるとapcupsdはインストールされているようですが、動いているのは別のUPS管理システムのようです。
apcupsdには同一のUPSにつながった複数の機器がUPSの状態をネットワーク経由で共有できる機構があります。
今回は2台のTS-419Pを同一のUPSに繋ごうと思っていたので、TS-419PのUPS管理システムをデフォルトのものではなく、apcupsdに切り替えようと思いました。インストールされていたものはちょっと古いバージョンでしたが、「まぁ、簡単に使えるようになるならそれでいいや。」と思い、一台のTS-419Pのapcupsdをネットワーク経由でUPSの状態を監視する設定にして起動したところ、エラーメッセージが表示され、その機能が組み込まれていないバイナリであることが判明しました。
ということで、apcupsdの新規導入から始まる長い道のりが始まりました....


目標

今回の最終目標は以下のすべてを満たすことです。

  1. 新しいapcupsd(net driverが有効になったもの)を導入する。
  2. ネットワーク経由でUPSの状態を監視できるように設定する。
  3. TS-419Pがデフォルトで起動しているUPS管理システムが起動しない、もしくは動作しないようにする。
  4. 2台のTS-419Pが起動する際にそれぞれのapcupsdをサーバー/クライアントとして立ち上がるように設定する。


apcupsdの導入から設定まで

apcupsdの導入から設定まではQNAP Community Forumのこのトピックが大変参考になりました。改めて手順を簡単にまとめると次のようになります。

  1. WebインタフェースでadminとしてNASにログインし、「Applications >> QPKG Plugins」 へ進み、「Get QPKG」ボタンをクリックする。
  2. 新規ウィンドウが立ち上がるので、「Optware IPKG (Itsy Package Management System)」を選択する。一番下で持っているNASに適したアーキテクチャのパッケージを選択し、ダウンロードし、解凍する。
  3. Webインタフェースの「Applications >> QPKG Plugins」で「INSTALLATION」タブを選択し、指示に従い解凍したファイルを選択のうえで「INSTALL」ボタンを押す。
  4. インストールが完了したら、「QPKG INSTALLED」タブをを選択し、「Optware」アイコンがあることを確認し、そのアイコンを押す。
  5. インストール済みのOptwareの情報を示すウィンドウが開くので、「ENABLE」ボタンを押し、Optwareを有効にする。ここから先はコンソールでの作業です。
  6. telnetでadminとしてNASにログインする。
  7. まずはパッケージの情報を最新にする。
    [/opt] # ipkg update
  8. apcupsdを導入する
    [/opt] # ipkg install apcupsd
  9. 詳細は省略しますが、apcupsdのマニュアルに従って、サーバー側とクライアント側を適切に設定する(特に難しいところはないはず)。
  10. ここまで来たら、サーバー側とクライアント側をそれぞれ立ち上げ、apcaccessコマンドを使ってUPSの情報が正しく取得できているかそれぞれのNASで確認しましょう。
    [/opt] # apcaccess status


TS-419PのデフォルトUPS管理システムの無効化とapcupsdの自動起動

システム起動時に細工をする仕掛けとして、autorun.shというのがここで紹介されていたので、この仕掛けをつかってデフォルトUPS管理システムの無効化とapcupsdの自動起動を達成しようと試行錯誤したのですが、autorun.shではデフォルトUPS管理システムの無効化が上手く出来ないという結論に至り、このアプローチは諦めました。しかし、よく考えてみるともっと単純で簡単な方法があることに気づきました。それは、Optwareの起動スクリプト(/opt/Optware.sh)を利用することです。このスクリプトはシステム起動後、/optのマウントが終わった後に呼び出されるようです。で、最終的には次のようにすることでうまくいきました。

  1. デフォルトUPS管理システムの無効化とapcupsdの起動を行うシェルスクリプト(run_apcupsd.sh)を作成。
    [/opt] # cat run_apcupsd.sh
    #!/bin/sh
    /etc/init.d/ups.sh stop
    /sbin/daemon_mgr upsutil stop /usr/sbin/upsutil
    /opt/sbin/apcupsd
    exit 0
    [/opt] #
  2. このスクリプトを起動するように、/opt/Optware.shのstartセクションの最後に追加。
    $ diff Optware.sh.org Optware.sh
    51a52
    >         /opt/run_apcupsd.sh


おまけのTips

ipkgで導入するapcupsdに付属するapccontrolスクリプトは内部でSHUTDOWNコマンドとして/sbin/shutdownを呼び出しています。しかし、QNAP TS-419Pでは/sbin/shutdownコマンドが存在せず、システム停止コマンドとしては/sbin/poweroffというのを使っています。ということで、/opt/etc/apcupsd/apccontrolで定義されている変数SHUTDOWNを/sbin/poweroffを参照するように変更しましょう。


最後に

apcupsdはLinux/*BSDの他、MacOS XやWindowsもサポートしておりバイナリが配布されています。今回の設定のおかげで複数台のQNAP Turbo NASを一台のUPSに繋げて制御できるようになった訳ですが、apcupsdを利用することで、一台のUPSに繋げた他のマシンも制御可能にできます。実際、私は同じUPSにapcupsdを導入したiMacを接続しています。



QNAP TS-419P Turbo NAS






自宅のNASをQNAP Systems Inc.TS-419Pに変えました。
このNASはホットスワップ可能で、RAID 0/1/5/6/5+ホットスペア/JBODに対応しています。
機能の詳細は省きますが、NASに期待されるほぼすべての機能に対応していると言っていいでしょう。
そのほかに、QPKGやipkgという機構を利用してあとからアプリケーションを追加することもできます。
さらに特筆すべきは、telnet/sshでアクセスしてかなり細かく設定を調整出来る点です。
今回はNASに保存されたデータのバックアップシステム(Remote Replication)も構築するためにTS-419Pを2台導入し、それらを同じUPSに接続しました。UPSからは状態監視用のUSBケーブルは一本しか出ていないので、一台のTS-419PでしかUPSの状態監視は出来ないのですが、Apcupsdを使えばserver/client構成で複数台のマシンがUPSの状態を監視できるようになります。Apcupsdを導入し希望の動作をさせるまでかなり苦労したのですが、telnet/sshでのアクセスが可能だったおかげでなんとかなりました。で、この苦労話は別の記事にします。