WindowsマシンでOpenPNEを動かす

今さらですが、WindowsマシンでOpenPNEにチャレンジです。

我が家のデスクトップPCは、2002年春に自作したものを頑張って使い続けていて、これまでのPC利用暦で最長不倒距離を更新中。

マザーボードは当時流行のASUSのCUSL2シリーズ廉価版(チップセットはi815E)。CPUはP3の1GHz、メモリが512MBまでしか搭載できないシロモノに、これまた当時は標準的だったGeForce2の400MX(32MB)を積んで、ずっとWindows 2000 Proで使ってきました。

以来、、PCMCIAカードやUSB2.0 & IEEE1394カード、ギガビットイーサ、DVD-RAMなどを増設してきましたが、昨年来のSOHOサーバーやインターネット接続環境の整備などで、ここに来て資金ショート(笑)。当面、新たなハード投資ができなくて、とてもじゃないけどWindows Vistaへの乗り換えは先送りせざるをえない状況です。

そうは言っても、ある程度は標準的なデスクトップ環境を持っていないと、Webサイトの確認作業などができないこともあって、今回、改めてWindows XP Pro SP2のOEM版をHDDとセットで買い、なんと五年ぶりのOSアップグレードなのであります。Officeは2000のままですが。。。

ちなみに、ブラウザはIE7とFirefoxの両方、メーラーはLinuxで慣れ親しんだお気に入りのSylpheed。もちろん、各種Linux OSのテスト環境として、マイクロソフトのVirtual PCも必須です。

それはさておき、本題へ。

WindowsマシンでOpenPNEを動かすということは、要するにWindows XPマシンのサーバー化計画ということなわけですが、基本ポリシーは次のとおりです。

◆とにかくOSは軽い方がいい
メモリが512MBなので、OSはできるだけ軽い方がいいですね。なので、極力余計なものはインストールしないで我慢します。

◆標準に心がけたプラットフォームの構築
要するに「XAMPP」みたいな標準的環境を丁寧に手づくりします。もちろんIISは使いません。

◆もしもの場合のバックアップマシン
万が一、SOHOサーバーがダウンした場合のバックアップマシンとしても耐えうるよう、徹底的に仕込みを入れます。めざせイベントビューアのエラーゼロ。

サーバー構築のハウツーものは諸先輩方のページがたくさんあるので、ポイントだけかいつまんで記します。

■最低限必要なサーバーツール類(カッコ内のバージョンはインストール時点)

  • ActivePerl(5.8.8 Build 820)
  • MySQL(5.0.41)
  • php(5.2.3)
  • Apache HTTP Server(2.2.4)

■あると便利なサーバーツール類

  • phpMyAdmin(2.10.1)
  • WarFTPd(1.82)
  • VNC Server(4.1.2)
  • ntpd(4.1.0)※独自コンパイル
  • XMail(1.24)※動作確認はまだこから

PerlとMySQLのインストールは特に何も変わったことはしません。MySQLのインストールオプションはややこしそうですが、どっちみち後でC:\Program Files\MySQL\MySQL Server 5.0\my.iniをいろいろチューニングする必要がありますし。

それから、OpenPNEにはPEARがインクルードファイルとしてパッケージされているので、気にしなくてかまいません。

Windowsの場合に気をつける点は、php5とapache2のライブラリ設定です。

■php5のライブラリ設定
Linuxではphp5をインストールする時点で使用するライブラリを選択するだけで、後で設定ファイルをいじることはありませんが、Windowsの場合は読み込むライブラリを設定ファイルにいちいち明示的に指定しなければなりません。私の場合は以下のライブラリを読み込んでいます。
※phpはC:\phpにインストール(C:\php\php.ini)
※システム環境変数PathにC:\phpとC:\php\extが追加されているとして

#C:\\php\\php.ini
extension_dir = "C:\\php\\ext"
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mcrypt.dll
extension=php_mime_magic.dll
extension=php_mysql.dll
extension=php_xmlrpc.dll

■php5とapache2の連携設定
apache2(ここでは2.2.x系)は標準ではphp5との連携ができません。apache2が吐き出すエラーログ(C:\Program Files\Apache Software Foundation\Apache2.2\logs\error.log)を見ながら、細かい動作確認を進めます。

#C:\\Program Files\\Apache Software Foundation\\Apache2.2\\conf\\httpd.conf
#ライブラリC:\\php\\libmysql.dllのみC:\\WINDOWSにコピーしなければならない
#でも、それではファイル管理がややこしくなるので
#次のようにapache2側でLoadFileで明示的に記述する方がスマート
LoadFile "C:/php/libmysql.dll"
#php5とapache2連携モジュールの組み込み
LoadModule php5_module "C:/php/php5apache2_2.dll"
#php.iniファイルの指定
PHPIniDir "C:/php"
#phpファイルの関連付け
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

その他はだいたいLinuxと同様の設定で、無事にOpenPNEがめでたく動きました。

携帯からのメール投稿などのメールサーバー連携、cronの代わりにスケジュールタスクを使ったバッチ類(OpenPNEの定時バッチやapache2のログローテーション)など、さらに細かなチューニングは、これからの仕込みです。

便利なVirtual PC

今さらですが、MicrosoftのVirtual PCを使ってみました。

※ウィキペディアより
http://ja.wikipedia.org/wiki/Microsoft_Virtual_PC

まずは、SOHOサーバーの環境をデスクトップPC(Windows2000マシンなのでVirtual PC 2004)でエミュレートします。

少し古めのVine Linux 3.2。一番心配なのがMySQLサーバーのバックアップと復元。万が一の際、いかに速やかに、かつ、確実に復元できるかは心配の種なので、予行演習できるのはとてもありがたいのです。

Vine Linux 3.2を起動しているところ
※見慣れたメッセージが流れつつ。。。

ログイン画面が立ち上がります
※無事にログイン画面が立ち上がります。

Vine Linux 3.2標準のMySQLサーバーは4.0xですが、我が家ではUTF-8の文字コードを使っているため、mysqldumpをしても正しくバックアップできません。これを、先日仕込んだノートPCのVine Linux 4.1でMySQL5.0xのクライアントでmysqldumpを使ってダンプしてリストアすればなんとか復元できそうなことが確認できました。

仮想PCとはネットワーク経由でやりとりすることになりますが、まるで独立したネットワークコンピュータとして存在し、まったく違和感もありません。もっともっとハイスペックなPCがあれば、複数のサーバーを立ち上げることができるわけで、いろんなサイトをホスティングする場合など、使い勝手がよいですね。

おなじみのgnomeデスクトップ。
※仮想PC側のスナップショットは仮想PC側で撮ります。

さてさて、一方で、どうしてもやりたかったことがあります。それは、今や動かなくなったソフトをもう一度動かすこと。

頼りないOSお構いなしに直接ハードウェアとやりとりしていたDOSアプリやWin16アプリは、当時、たいへんなお金をはたいて買ったのに、OS環境の進化でほとんどが使えなくなっています。

私にとってとても思い出深いのが、以前にも書きましたが、DTMのシーケンサーソフトでダイナウェア社の「Ballade」シリーズ。Windows3.1またはWindows95で動いた「Ballade2」。これを動かしたかったのです。わざわざそのためにPCを一台用意することもできずにいましたが、今回、このVirtual PCのおかげで利用環境を復元できました。

懐かしのWindows95セットアップ
※かつて仕事で何度このセットアップ作業をしたことか。。。

サウンドカード(SB16互換)とネットワークカード(DEC21140)の設定で少しハマりましたが、なんとかいけました。

Microsoftネットワークへのログイン画面
※無事にログイン画面が。

シンプルだったデスクトップ
※そうそう、こんなデスクトップでした。

起動画面はこんな感じ。
※さらにMicrosoft Plus!を入れまして。。。

そして、いよいよ「Ballade2」のインストール。シリアルMIDIドライバ(Virtual PCでCOM1を使う設定にする必要があります)をインストールしてからです。もちろん、「Ballade2」はフロッピーディスクからインストール。無事、起動できました。

「Ballade2」の画面
※感激の画面。10年ぶりなのであります。

あと、Plus!を入れたらアイコンが変わってしまったこと、それから、元祖Office(よくも大事に残していたことです)が動くことを確認しました。

ただし、日本語IMEとキーボードドライバとの組み合わせの挙動がおかしいので、デフォルトを英語入力モードにしています。

Plus!の入ったデスクトップ画面
※そういえばIEはPlus!に入っていましたね。

10年以上前のWordファイルを開いたところ
※Officeツールはそれほど時代を感じさせません。

マルチメディアツールのセットアップ

続いて、Vine Linux 4.1のデスクトップ環境で、動画プレーヤー(Windows Media ファイルの再生)やMIDI再生ツールを使えるようにしました。

■totem-xine

デフォルトでインストールされる動画プレーヤーtotem-gstreamerではWindows Media ファイルの再生ができないので、Synapticを使ってtotem-xineに入れ替えします。

そして、mplayerのWindowsプラグインを含むコーデックが掲載されているページhttp://www.mplayerhq.hu/MPlayer/releases/codecs/からwindows-all-20061022.zipファイルをダウロードし、次のファイルを解凍し、ユーザーディレクトリの.gnome2/totem-addonsディレクトリにコピーします。

  • wma9dmod.dll
  • wmadmod.dll
  • wmsdmod.dll
  • wmv9dmod.dll
  • wmvdmod.dll

■TiMidity++

MIDIファイルを再生するために、Synapticを使ってTiMidity++をインストールします。TiMidity++はそのままでは音が出ないため、「Shoji’s Home Page」さんのところからshominst-0409.zipファイルをダウンロードします。

ファイルを解凍してできたinstディレクトリを、/usr/lib/timidityディレクトリに移します。また、同じく解凍してできた*.cfgファイル群は、/usr/shareにtimidityディレクトリを作ってそこに移します。そのうちのtimidity.cfgファイルを次のように編集します。

(変更前)

# If you've moved things around since compiling, uncomment and edit this to
# point to the library directory: 
#
#dir /usr/local/lib/timidity
#

dir /nethome/sak95/shom/lib/timidity/inst/GUS
dir /nethome/sak95/shom/lib/timidity/inst
dir /nethome/sak95/shom/lib/timidity/inst/test

(変更後)

# If you've moved things around since compiling, uncomment and edit this to
# point to the library directory: 
#
dir /usr/lib/timidity
#

dir /usr/lib/timidity/inst/GUS
dir /usr/lib/timidity/inst
dir /usr/lib/timidity/inst/test

これで、totemとTiMidity++が使えるようになりました。
後は、FireFoxの「編集」→「設定」→「コンテンツ」タブ→「ファイルタイプ」で関連付けを設定すれば、ブラウザからも利用できるようになります。

※参考ページ
TiMidity++ : ThinkPad T21にVine Linux 3.2を入れる:MIDIを聞けるように
totem-xine : Totem でも WMV ファイルとかを扱う

Vine Linux 4.1でキヤノンのMP600を使う

せっかくなので、Windows PCにつながっているキヤノンのMP600を共有にして、ノートPCから使えるようにしてみました。

キヤノンはLinux用のドライバを親切に提供してくれているとのこと。キヤノンのホームページから取ってきます。

最新版は2007/04/26のVer.2.70でした。
共通パッケージ:cnijfilter-common-2.70-1.i386.rpm
機種別パッケージ:cnijfilter-mp600-2.70-1.i386.rpm
操作説明書:guidemp600-pd-2.70-1.tar.gz

「Fedora Core 6」向けを参考にしながら進めます。
ライブラリが不足していればSynapticパッケージマネージャでインストール(デフォルトではgtk+が足りませんでした)してからドライバをインストールし、CUPS印刷マネージャを再起動します。

rpm -ivh cnijfilter-common-2.70-1.i386.rpm
rpm -ivh cnijfilter-mp600-2.70-1.i386.rpm
service cups restart

CUPS印刷マネージャの「新しいプリンタ」の「プリンタの追加」で、「ネットワーク・プリンタ」(「Windows プリンタ」)を選択し、共有プリンタを探して選択します。そうすると、ドライバの一覧でMP600が見つかるはずです。

アプリによっては動かないものもありますが、これでたいていのことはできますね。

CUPS印刷マネージャでMP600のプロパティを開いたところ
※CUPS印刷マネージャに無事登録

停電対策完了

ホームサーバー運用を始めてから、電源管理は悩みの種でした。
昨年購入したOMRONのBZ50Tは、なにせ軽いし、通電したままバッテリーを交換できるとか、いろいろメリットはあるのに、肝心なLinuxで使えなくては意味がなく、どうしようかと思っていました。

で、重症金欠病にもかかわらず、ここは踏ん張って、やっとこさ、APCのES500を購入!
やっぱり仕事で使って慣れているAPC。USB接続ですが、apcupsdを使えばなんとかなるらしいので、頑張ってみました。

APCのES500

サーバー電源をES500からの供給に切り替えて、USB接続をします。
OSがES500をちゃんと認識をしているか確認します。

# dmesg | grep hiddev
usb.c: registered new driver hiddev
hiddev0: USB HID v1.10 Device [APC APC ES 500 FW:803.p6.A USB FW:p6] on usb4:2.0

/dev/usb/でhiddevなにがしと認識されているメッセージが表示されればOKです。

で、apcupsdのダウンロード。ソース版でやってみます。
私がダウンロードした時点では、最新版は2007/02/09の3.14.0でした。

# tar xzvf apcupsd-3.14.0.tar.gz
# cd apcupsd-3.14.0

ソース版でインストールする場合は、ソースディレクトリ/examplesディレクトリ配下に出来上がるおまじないのようなmake-hiddev(/dev/usb/hiddev/ディレクトリとリンク作成)を実行するとのこと。

# cd examples
# ./make-hiddev
# cd ..

そして、コンフィグファイルを作成し、インストールを実行します。

# ./configure --enable-cgi --enable-usb --with-upstype=usb --with-upscable=usb
# make
# make install

実行ファイル群は/sbinにコピーされているはず。スクリプト群や設定ファイルはデフォルトで/etc/apcupsdディレクトリが出来上がります。
必要に応じてcgiファイル群をapacheでcgi-binなどcgi設定しているディレクトリにコピーし、実行権限を与えます。くれぐれも、一般公開しないように!

それから、デーモンの設定ファイル/etc/apcupsd/apcupsd.confをよく読んで編集します。

UPSCABLE usb
UPSTYPE usb
DEVICE
ONBATTERYDELAY 10 #デフォルトは6秒
BATTERYLEVEL 20 #デフォルトは5%
MINUTES 5 #デフォルトは3分
TIMEOUT 60 #デフォルトは60秒
SLEEP 60 #デフォルトは20秒
  • ONBATTERYDELAY : 電源異常の許容範囲時間。これを超えると異常イベント発生。
  • BATTERYLEVEL : バッテリーレベルの許容範囲容量。これを下回るとシャットダウンイベント発生。
  • MINUTES : バッテリー残存稼動時間。これを下回るとシャットダウンイベント発生。
  • TIMEOUT : 異常イベント発生後にシャットダウンイベント発生させる時間。
  • SLEEP : シャットダウン後にUPS自身の電源を落とすまでの時間。

さらに、シャットダウン時にUPSに信号を送るスクリプトを/etc/init.d/haltのeval $command $HALTARGS行の直前に追記します。

if [ -f /etc/apcupsd/powerfail ]; then
    echo
    echo "APCUPSD will now power off the UPS"
    echo
    /etc/apcupsd/apccontrol killpower
    echo
    echo "Please ensure that the UPS has powered off before rebooting"
    echo "Otherwise, the UPS may cut the power during the reboot!!!"
    echo
fi

ちゃんとしたSmart UPSシリーズなら、UPS本体内部のeepromにUPS自身の電源切断時間等の情報が書き込まれる仕組みになっているらしいですが、ES500の場合は、これでSLEEPで指定した秒数後にUPS自身の電源も落ちます。
起動スクリプトapcupsdが正しく/etc/rc.d/init.d/にコピーされているならば、後はサービスを開始して、サービスを登録します。

# service apcupsd start
# chkconfig --add apcupsd

以上です。
OMRONのBZ50Tは、デスクトップ用のWindowsマシンに接続して使うことにしました。これで、安全・安心。