休日を過ごしています。はい。

地元にいて特にやることもない、ということで、いつもはABと関連性の薄いLinuxとWebサービスの方面に触れてみたいと思います。

以前、このブログでwine(※)についてキャプチャとかしていたのですが、今日はコマンドラインベースで色々と動かせるかどうかを検証してみました。結果をまとめてみます。

※wine … Linux上でWin32APIを再現してくれるソフト

まずはウチの開発用Linuxサーバ(dev.activebasic.com)にwineをインストールしてみます。ちなみに、wineはX Windowが入っていなくても動きます。コマンドベースだけでもいけるとは、頼もしいヤツです。

# yum -y install wine
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
core                                                                 [1/3]
core                      100% |=========================| 1.1 kB    00:00
updates                                                              [2/3]
updates                   100% |=========================| 1.2 kB    00:00
extras                                                               [3/3]
extras                    100% |=========================| 1.1 kB    00:00
Reading repository metadata in from local files
primary.xml.gz            100% |=========================| 391 kB    00:01
updates   : ################################################## 1070/1070
Added 66 new packages, deleted 61 old in 4.99 seconds
primary.xml.gz            100% |=========================| 1.9 MB    00:25
extras    : ################################################## 6348/6348
Added 337 new packages, deleted 197 old in 25.08 seconds
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for wine to pack into transaction set.
wine-0.9.30-1.fc5.i386.rp 100% |=========================|  16 kB    00:00

...省略

Complete!
You have new mail in /var/spool/mail/root

これでwineインストールは完了。

ABで下記のようなプログラムを書いてみます。

#console

Sub Output( text As String )
Print text + Ex"n";
End Sub

Output( Ex"Content-type:text/htmln" )
Output( "<html>" )
Output( "<head>" )
Output( "<meta http-equiv='content-type' content='text/html; charset=shift_jis'>" )
Output( "</head>" )
Output( "<body>" )
Output( "<h1>Hello World!</h1>" )
Output( "</body>" )
Output( "</html>" )

早速コンパイル。残念ながら、コンパイルはX Window環境がないとできないので、手元のWindowsで行います。できあがったhello.exeをサーバにアップロード。で、hello.cgiにリネーム(あらかじめ、.cgiがCGIとして動作するようにApacheの設定をしておきます)。

これは妄想ですが、ABコンパイラを完全なコマンドラインベースのツールに書き直した暁には、”# abc hello.ab” などというコマンドでLinux + wineの環境でコンパイルができるようになるかもしれません。

ためしに、シェルから動かせるかをテストしてみます。

# ./hello.cgi
Content-type:text/html

<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=sjis'>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>

イッパツで動きました。問題Nothingです。では、これをWeb上からアクセスしてみましょう。期待する出力は得られるのでしょうか…。

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

ここでエラーです。なにやら、サーバー側の問題らしいです。管理者へ連絡しろとのことです。ちなみに、管理者は私です。早速エラーログを拝見してみます。すると、下記のようなエラーが!

[Sat Feb 17 23:37:52 2007] [error] [client 192.168.24.230] wine:
[Sat Feb 17 23:37:52 2007] [error] [client 192.168.24.230] can't get temp file name for /var/www/.wine
[Sat Feb 17 23:37:52 2007] [error] [client 192.168.24.230]  : Permission denied
[Sat Feb 17 23:37:52 2007] [error] [client 192.168.24.230] Premature end of script headers: hello.cgi

ようは、.wineディレクトリがないよって話らしいです。ちなみに、.wineディレクトリはWindowsの構成そのものを管理するための非常に重要なデータを格納しています。たぶん、どこかのiniで場所を指定できると思うのですが、他の場所にあった.wineディレクトリを一旦 “/var/www” に丸ごとコピーします。これで動くでしょう…。たぶん…。

リロード。

hello.PNG

できました~!成功!

というわけで、Linux上で動作するWebサービスの作成、ABでできそうです。肝になってくるのは、セキュリティ性やDBとの接続の手軽さ辺りでしょうか…。

Linux+wine上用のWebアプリを作ることを想定したIDEという発想、色々とできそうなことがありそうですね。