Xen環境でUPSが使用できない時の覚え書き

停電を繰り返すうちにどうもUPSによるサーバーのシャットダウンがちゃんとできてないことがわかってきました。そういえばUPSは前のサーバー機から継続だけど、今のXen環境にしてからあんまり実地テストとかしてなかったなと。

我が家のUPSは三菱のFREQSHIP Fで、同社がフリーで配布しているFREQSHIP-mini for FreeUNIXをインストールして運用しています。起動スクリプト/etc/init.d/freqshipを実行するとなにやらCOMポートがどうのとエラーを返します。設定ファイルは/etc/freqship/UPSFILEで、一行目に、

Port=/dev/ttyS0

という記述があります。UPSとの通信に使用しているCOMEポートとして/dev/ttyS0を指定してあるのですが、これがなんらかの理由で使用できないようです。次に起動時のコンソールメッセージを

dmesg | grep tty

としてttyという文字を含むものを検索。すると、

Xen virtual console successfully installed as ttyS

とXen絡みのメッセージを発見。どうもXenがシリアルポートを占有してしまってるのが問題のようです。そこでググった結果の解決策は、/boot/grub/grub.confを編集し、

title CentOS (2.6.18-194.32.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-194.32.1.el5 dom0_mem=768M
        module /vmlinuz-2.6.18-194.32.1.el5xen ro root=/dev/lvm1/Domain0 xencons=off
        module /initrd-2.6.18-194.32.1.el5xen.img

のように赤字部分を追加し、Xenにシリアルコンソールを使用しないよう指示しました。grub.confには同じようなブロックが複数セット書かれていると思います。大抵は一番上がデフォルトで使用される記述だと思いますが、まぁとりあえず全てに書いておきました。

これで再起動したところ、/etc/init.d/freqshipでエラーが出なくなりました。

停電の多い地区の皆さん、いちどちゃんとシャットダウンできてるかお試しあれ。

■オマケ:XenのDomain-U仮想マシンを自動的に起動する

Domain-0が再起動した後、自動でDomain-U(仮想OS)も起動させたい場合、/etc/xen/autoに設定ファイルを置いておけばいいようです。大抵は/etc/xen/においてあるでしょうから、シンボリックリンクを張っておくのが簡単でしょう。たとえばHogeという定義ファイルなら、

ln-s /etc/xen/Hoge /etc/xen/auto/Hoge

とか。ちなみにXenはシャットダウン時にDomain-Uを自動でサスペンド状態にしてくれて、次回Domain-0起動に自動的に復帰させてくれるようです。上記の設定はちゃんとそれをチェックしてレジュームに失敗した場合のみ実行してくれるみたいなので、Domain-Uが二重に起動してしまうようなことはないようです。賢い。

当ブログ、サーバーの運用状況について

当ブログを設置しているサーバーは物理的には横浜市内にあるので、東京電力の計画停電に応じて適宜停止をしています。ちなみにグループ5です。サーバーごと中部電力エリアの実家に移設することも検討していますが、とりあえず期末の仕事が差し迫ってきてまだ手を付けられていません。

とりあえずブログネタ的には録画PC用にUPSを発注したんですが発送される気配なし。脱乾電池を進めてきた結果、エネループや外部バッテリーの類はそれなりにあるので電池には困ってない感じですかね。懐中電灯もあるし。こないだ省エネ能力の高い湯沸かしポットを買ったところだったのも幸いしてます。あと、停電時でもWiMAXは意外と粘ってくれていて、年末にWM3500R買ったのも当たりだったなぁと。停電中もこれ+各種ノート/タブレット/スマートフォンでネットには不自由しない感じです。

まぁそんな感じですがとりあえずσ(^^)は元気でやっています。お互い頑張りましょう。

sqlite2で全置換する時の覚え書き

とある案件でsqlite2のデータベースのあるテーブルに含まれる文字列の全置換をしたくなったんですが、ググってヒットするselect文で使えるreplaceコマンドはエラーになる。どうもsqlite3からの実装っぽい?

でsubstrを組み合わせた方法とやらも見つけたんですが、いまいち意味がわからず応用できませんでした。

結局、どうしたかというと、ダンプ->sedで置換->新DBにインポートというやり方で、下記の1行で済みました。

sqlite hoge.db .dump | sed –e ‘s/MH\./MF\./’ | sqlite hoge2.db

ちと見づらいですが、色つきの部分を適宜置き換えてご使用下さい。

元データベースファイル:hoge.db

新データベースファイル:hoge2.db

置換元ワード:MH.

置換後ワード:MF.

今回のワード中に含まれるピリオドはエスケープする必要がある為、前に’\’をつけています。

で、sqlite hoge2.dbして問題なく変換されていることを確認したら、元ファイルと差し替えます。

Xen上のWHSに2TBのHDDを増設しようとしてハマる

 

我が家のWindows Home Server(以下WHS)はCentOSのXen上に完全仮想化で構築されています。で、そのHDD容量が逼迫してきたので増設を決意。今なら最大容量である2TBしかないだろう、と思ったんですが、WHSはWindows Server 2003ベースなので、WD20EARSは問題になるかも知れないと思ってWD20EADSを調達しました。

どのみちLinux用のパーティションも必要だったので分割して、1.8TBをWHS用に確保(基本パーティション)。Xenのプロファイル的にはpsy:~という形式(これなんて呼ぶんだろ?)で、Domain 0上のパーティションを仮想マシン上の/dev/hdx(IDEな物理ディスク)に見せる方法でマウントしました。以前に追加したドライブもこの方法でバッチリ動いていました。

が、今回はNG。写真のようなエラーが出てWHS管理下に追加できません(クリックで拡大)。

Hard drive initialization failed. The Wizard was unable to create a volume on the hard drive.

(日本語版の人が同じエラーでこのエントリにたどり着けるよう、一応訳を書いておくと「ハードディスクの初期化に失敗しました。ウィザードはハードドライブ上のボリューム作成ができません。」となります。まぁ一言一句同じでないとあまり意味ないかもですが…)

なんとも情報の少ないメッセージで、原因についてはまったく触れてません。ちなみにマイコンピューターを右クリックして管理->ディスク領域とかからフォーマットしてもやはり失敗。

2TBのドライブといっても実質は2TB未満なので各種2TBの壁には抵触しない気がするんですが。ちなみに別のところでAcerのWHS機に同じWD20EADSを普通に増設できたので、WHS単独の問題ではなさげ。ということは、Xen絡みかLinux周りっぽい。ただXen+WHSなんてマイナーすぎてググってもあまり手がかり無し。

で、fdiskは2TBの壁があるらしいというので、partedでパーティション分割しなおしてみてもダメ。パーティションの順番を入れ替えてみてもダメ。

結果としてはパーティションサイズを小さくしたらOKでした。で、その壁はどうやら1TB。parted上で1100GB確保すると、WHS上では1TBと表示されて失敗。同1000MBだと931.32GBとなりOKでした。うーむ、理由がわかんないですね。まぁ、別パーティションをもうひとつ作ってWHS上で結合して使えば実質的な不利益はないんですけど、なんか悔しい。それが可能かどうかは追って検証します。既にWHS用にドライブを4つマウントしてるので、Xen的に/dev/hda~/dev/hddまで消費しちゃってるので(いや、普通に/dev/hdeとか可能?)。少し様子をみて古いHDDを外してから挑戦します。

FireFox Weaveの自前サーバーを立てる

FireFoxのブックマークやパスワード、設定などをPC間で同期するWeave Syncというアドオンの正式版がリリースされました[impress]

σ(^^)のように何台ものPCを使い分けている人間にとってはとても便利そうなツールなので早速導入。ただWebサイトの認証情報まで外部サイトに預けるのはちょっと抵抗が。万全の体制で管理されているであろう公式サイトと、半端な知識で運用している自サイトのどっちが安全化は議論が別れるところですが、まぁ技術的関心もあってとりあえず自前サーバーを立ててみることにしました。

ざっとググった感じ最新の1.0プロトコルに対応したサーバーに関して日本語解説がなかったようなので、簡単にまとめてみます。まぁ、配布に含まれるREADMEのまんまなんですが。以下、既にSSLでコンテンツが公開できるApacheが設定済みという前提です。

個人運用向けに機能を絞ってリリースされているWeave Minimal Serverというバージョンを利用します。本家サーバーはMySQLを使って結構面倒なんですが、こっちはsqliteを使ってるし、DB構築もほぼ自動でやってくれるので導入が遙かに簡単です。Minimal Serverの正式な配布サイトは不明ですが、とりあえず作ってる人のこちらのブログ記事で「here」というリンクを叩けばtar玉が落ちてきます。

・インストール

解凍したファイルを適当な場所に配置します。ここでは /var/www/weaveserver/と仮定します。

次にApacheの適切な場所にssl.conf等に下記の赤字の行を追加します。

<VirtualHost _default_:443>
  Alias /weaveserver /var/www/weaveserver/index.php
</VirtualHost>

これで、https://ホスト名/weaveserverを叩くと、インストールフォルダのindex.phpを挿すようになります。SSL.confにだけ書くので、暗号化無しのhttp://ではつながらないので安全です。

またインストールフォルダ内にsqliteがDBを作成するのでApacheユーザが書き込める権限が必要になると思います。

・JSONライブラリの追加

ウチの環境(CentOS 5.4、PHP 5.1.x)ではPHPのJSONライブラリの追加導入が必要でした。PHP 5.2以降だといらないみたいです。

# pecl install json

でインストールしてから、/etc/php.d/json.iniを作成し、

extension=json.so

と記入し、Apacheを再起動しておきます。

その他、sqlite3などを利用するので環境によっては追加インストールが必要になるかも知れません。

・ユーザDB作成とユーザ登録

以上の準備が整ったらブラウザから、

https://ホスト名/weaveserver/1.0/blah/info/collection

にアクセスします。BASIC認証ダイアログが出るので、IDにblah、パスワードはデタラメでいいのでOKを押します。認証は失敗しますが、これでインストールフォルダの中にweave_dbというファイルが作成されているはずです。

最後にインストールフォルダ内のcreate_userスクリプトを(シェルから)実行します。

# php create_user

作成はcを入力し、ユーザ名とパスワードを設定(rootじゃなくてもDBに書き込み権があれば一般ユーザでもいいかも)。

FireFoxのWeave Syncアドイン上でのカスタムサーバーURLには、

https://ホスト名/weaveserver/

を指定します。

ウチでは以上で動きました。