UPS からの shutdown について

なんてこった。前回の更新から 1 年以上が経過しているではないですか。 新しいサーバはときどきさわって、いらいらする程度には systemd について知ることができました。

さて、我が家では家庭内での瞬電に備えて UPS をサーバに繋いでおります。 RAIDZ2 といえでも電源が落ちて、ディスクのヘッドに何か起きてしまうことを防ぐためです。 想定される瞬電は、夏場や冬場によくあるブレーカが落ちる、くらいしか考えていませんでした。 この場合は、電源はすぐに復旧するため、人間がブレーカを上げるまでの時間生きていれば問題ない、という設計でした。

ところが、久しぶりに地震が発生したことをうけて、しばらく電力の共有が止まってしまう状況を考慮したくなりました。 一昔前であればシリアルで UPS につなぐのですが、私が使っている製品は USB 経由でつながるようなので繋げてみました。

使っている UPS はこれです。

無停電電源装置(UPS) BY50S https://socialsolution.omron.com/jp/ja/products_service/ups/direct/ups/by.html#DIRECT_BY50S

2014 年 2 月頃から利用していて、バッテリも 2 回ほど交換しております。 たぶん、ロードの低いサーバを 1 台維持するにはちょうどよい一般家庭モデルだと思います。 Linux からの制御プログラムはソース付きで公開していただいているので、今回はこれを使います。

Simple Shutdown Software Ver 2.41(Linux版) https://socialsolution.omron.com/jp/ja/products_service/ups/support/download/soft/sss/sss.html

スクロールして下の方に行くとあります。 結論だけ先に書くと、 Makefile を少し直して環境を整えてビルドするのが楽だと思います。 config.sh という sh のスクリプトでもない実行バイナリから設定を行いますが、このプログラムが libusb-0.1.so.4 を要求してきます。 ここ最近の libusb は 1.0 系のバージョンなのですが、 0.1 系と互換性がないんですよね。 ちょっとはまりました。 Gentoo Linux だと、こんな名前で別途用意があるので、とりあえずは大丈夫です

# emerge --ask dev-libs/libusb-compat

次は SimpleSoftwareVer241_Linux_X64/Source にある以下の Makefile を直します。

やることは簡単で、 -DREDHAT っていう文字列を消すだけです。 -D に REDHAD って、初めてみましたよ。 複数ファイルで同じ作業したくないので、 1 行で書くとこんな感じでしょうか。 完全に手癖ですね。

/root/SimpleSoftwareVer241_Linux_X64/Source # grep REDHAT * -R -H | sed -e 's/:..*$//g' | sort -u | while read -r I; do sed -i 's/\-DREDHAT//g' $I; done

ここまで準備してから make すると、通りました。 あとは添付のドキュメント通りにやれば動きます。 とはいえ、個人的にやりたいとおもっていることは結構あるんですよね。

  1. ユーザが人間であることを前提とした設計の各プログラムの改修
  2. systemd あるいは OpenRC へ組み込むための ebuild の作成
  3. libusb 1.0 系への移行

1 はですね、インタラクティブな UI をやめてオプションや標準入出力で制御できるようにしたいってことです。ソフトウェアの梃子を使うのです。 自動化しようと思ったら避けられません。 2 で言いたいことは、現在のままだと root が動かしている野良プログラムになっちゃってるんですよね。 きちんとパッケージとして管理したほうが依存関係で壊れたり、起動し忘れることもなくなります。 3 は楽しいこと間違いなしですが、こう見えて結構忙しい生活をしているので、気が向いて能力があったらですね。

というか、電源を落とすことは滅多にないので、現状維持で問題ないかもしれません。