`flat` ;2014/09/12 :UPSのModbus有効化手順に抜けがあったので追記
最近購入した、前面が液晶画面になっているSmart-UPS 750/500で、停電してシャットダウンした後に復電してもサーバが起動しない問題に遭遇。UPSのファームウェアとapcupsdを最新のものにする事で解決しました。
まず、問題のあった時点でのapcupsdとファームウェアのバージョンは以下の通りです。
% apcaccess : VERSION : 3.14.10 (13 September 2011) freebsd : FIRMWARE : UPS 08.8 / ID=18
この組み合わせでは、
という状況でした。
ただ、apctestコマンドから"Test kill UPS power"を試すとちゃんとUPSの電源は落ちます。UPSにkill信号を送る前にapcupsdが強制終了しているのではないかなどと考え、rcスクリプトをいじったりしてみましたが、状況は変わらず。
さて困ったなと思って、apcupsdの公式サイトを見ると、3.14.11のリリースノートに、"MODBUS protocol support"という記述があり、UPS側のファームウェア更新が必要だが、シリアルケーブルでの監視にも対応したとあったので、これを試す事に。
まず、 http://www.schneider-electric.us/support/index?page=content&country=ITB&lang=EN&id=FA164737 にアクセスして、ページ下方のAttachment(s):にある、"Firmware Upgrade Wizard Manual.pdf "と"FirmwareUpgradeWizard4_0.exe"をダウンロードします。"FirmwareUpdateImages.zip "は、Smart-UPSに関してはexeファイルの方に同じ物が同梱されていて必要ないようでした。あとはPDFファイルの説明に従ってファームウェアのアップデートを行うだけです。簡単に説明すると、
といった感じでした。
次に、UPSの画面を操作してModbusを有効にします。
`clear`
`clear`
サーバ側のapcupsdも最新の3.4.12にバージョンアップします。FreeBSDならportsがすでに最新版になっているので、
# portsnap fetch update # portmaster apcupsd
するだけです。更新後、apcupsdの設定ファイルを書き換えて、Modbusプロトコルを使うようにします。
UPSCABLE smart UPSTYPE modbus DEVICE /dev/ttyu0
サーバとUPSを付属のシリアルケーブル(940-0625A)で接続してapcupsdを起動します。無事に起動し、apcaccessの表示が以下のようになれば作業完了です。
% apcaccess VERSION : 3.14.12 (29 March 2014) freebsd : CABLE : Custom Cable Smart DRIVER : MODBUS UPS Driver UPSMODE : Stand Alone : FIRMWARE : UPS 09.1 / 00.4
これでUPS側のコンセントを抜き差しして試したところ、無事復電時に自動で再起動するようになりました。ちなみに、この組み合わせであればUSBケーブルでの接続でも復電後の自動再起動まで問題なくできるようでした。
参考: http://www.apcmedia.com/salestools/MPAO-98KJ7F/MPAO-98KJ7F_R0_EN.pdf
pkg_install EOL is scheduled for 2014-09-01. Please migrate to pkgng http://blogs.freebsdish.org/portmgr/2014/02/03/time-to-bid-farewell-to-the-old-pkg_-tools/
というわけで、夏休み終盤の小学生よろしく一通り使い方のお勉強。
コンパイルオプションとかの関係上、管理には引き続きportmasterを使うつもりなので、調査系の作業を中心に。
その前にまずはpkgngの環境に移行しないといけません。作業自体は簡単で、以下のコマンドを実行するだけでした。
# portmaster ports-mgmt/pkg # echo 'WITH_PKGNG=yes' >> /etc/make.conf # pkg2ng
これで/var/db/pkg以下にあったファイル形式の情報は更新されなくなり、/var/db/pkg/local.sqlite (SQLite 3.x database)に保存されるようになるようです。
% sqlite3 /var/db/pkg/local.sqlite sqlite> .schema : sqlite>(そっと).q
するのはお約束でしょうか。
以下、とりあえずよく使いそうなコマンドをリストアップしてみました。
`border`
pkgng | pkg_* | Oldtimer | |
---|---|---|---|
パッケージ一覧 | pkg info | pkg_info | ls /var/db/pkg |
サマリー表示 | pkg info [パッケージ名] | pkg_info '[パッケージ名]>0' | ((( |
親パッケージの一覧 | pkg info -d [パッケージ名] | pkg_info -r '[パッケージ名]>0' | grep @pkgdep /var/db/pkg/[パッケージ名]/+CONTENTS |
小パッケージの一覧 | pkg info -r [パッケージ名] | pkg_info -R '[パッケージ名]>0' | cat/var/db/pkg/[パッケージ名]/+REQUIRED_BY |
ファイル一覧 | pkg info -l [パッケージ名] | pkg_info -L '[パッケージ名]>0' | grep -v ^@ /var/db/pkg/[パッケージ名]/+CONTENTS |
データベース保存 | pkg backup -d [ダンプファイル] | cd /var/db; tar zcf [ダンプファイル] pkg | |
データベース復旧 | pkg backup -r [ダンプファイル] | cd /var/db; tar zxf [ダンプファイル] | |
UPDATINGの確認 | pkg updating | more /usr/ports/UPDATING | |
整合性のチェック | pkg check -Bdrs | pkgdb -F | |
脆弱性の監査 | pkg audit -F | portaudit -Fda |
cat /var/db/pkg/[パッケージ名]/+COMMENT
cat /var/db/pkg/[パッケージ名]/+DESC
)))
あと、パイプで処理したい時などには"pkg query"コマンドが便利そうでした。例として、パッケージでインストールされているファイルのMD5ハッシュを取得するには、
pkg query '%Fp' [パッケージ名] | xargs md5
とかやるとよいようです。詳しくはマニュアル(pkg-query(8))で。