雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2014-08-13 [長年日記]

APC Smart-UPS+apcupsdで復電後にサーバが再起動しない問題について

`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

この組み合わせでは、

  • apcupsdによる監視はでき、停電時のシャットダウンまでは問題ない
  • シャットダウン後、通常ならUPSの電源が切れて給電が止まるはずが、そのまま稼働し続ける
  • 結果、復電してもサーバが再起動しない

という状況でした。

ただ、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ファイルの説明に従ってファームウェアのアップデートを行うだけです。簡単に説明すると、

  1. UPSの電源を落とす
  2. WindowsマシンにUPSを接続(手元の環境ではOSの再起動が必要でした)
  3. FirmwareUpgradeWizard4_0.exeを実行すると、展開後ファームウェアの更新作業が始まる
  4. Smart-UPS 750の場合は、ファームウェアのバージョンが09.1になっていれば成功

といった感じでした。

次に、UPSの画面を操作してModbusを有効にします。

`clear`

`clear`

  1. エンターをおしてメインメニューを表示し、上下キーで「セッテイ」に合わせてエンター
  2. 上下キーで「メニュータイプ」に合わせてエンター
  3. 下キーで「アドバンス」に合わせてエンター
  4. 上下キーで「Modbus」に合わせてエンター
  5. 下キーで「ユウコウ」に合わせてエンター
  6. 元の画面に戻るまでEscキーを連打

サーバ側の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


2014-08-28 [長年日記]

[FreeBSD] いまさら聞けないpkgngの話

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`

pkgngpkg_*Oldtimer
パッケージ一覧pkg infopkg_infols /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))で。