AzaraC on さくらインターネット
AzaraCとさくらインターネットのレンタルサーバ
このドキュメントでは、AzaraCを使ってさくらインターネットのレンタルサーバ上で高速なCGIを構築する方法について書かれています。
さくらインターネットのレンタルサーバの仕様の確認
スタンダード以上じゃないとgccが使えなかったと思います(未確認)。とりあえず、AzaraCに関わるサーバの仕様は以下のような感じです。
- OS: FreeBSD 4.10-RELEASE-p24r1 (SAKURA8S)
- C/C++コンパイラ: gcc / g++ 2.95.4
- CGIプログラムのサフィックス: .cgi
AzaraCのインストール
それでは、サーバAzaraCをサーバ上にインストールします。まず、sshでサーバにログインします。次にAzaraCのソースコードをダウンロードして解凍します。
% cd /home/bluedwarf % wget http://labs.preferred.jp/azarac/download/azarac-0.2.0.tar.gz % tar xvfz azarac-0.2.0.tar.gz % cd azarac-0.2.0
ソースコードのURLとバージョンについてはAzaraCのダウンロードページを参照してください。ここでは、バージョン0.2.0を扱います。また、サーバ上でのユーザ名は bluedwarf と仮定します。
次にAzaraCをコンパイルしてインストールするのですが、バージョン0.2.0はこのままではこのサーバ上でコンパイルに失敗するので、私が作ったパッチ azarac_patch_for_sakura.diff を当ててコンパイルします。
% wget http://bd.tank.jp/azarac/azarac_patch_for_sakura.diff % patch -p1 < azarac_patch_for_sakura.diff % ./configure --prefix=/home/bluedwarf % make % make install
これでインストールは完了です。
Hello, World!
さて、次に Hello, World! とだけ表示するCGIを作ってみましょう。基本的には、AzaraCのチュートリアルに従っているので、詳細な説明はそちらに任せます。このチュートリアルではさくらインターネットのレンタルサーバ上でCGIを作成するのに必要な詳細な手順を示します。
とりあえずディレクトリを作ります。www以下であればどのような名前のディレクトリでも構いません。
% mkdir /home/bluedwarf/www/azarac % cp /home/bluedwarf/www/azarac
次に、FTPかなんかで hello.tpl と hello.cpp を /home/bluedwarf/www/azarac に作成します。それぞれのファイルの中身は、以下の通りです。
hello.tpl
<%@ page Content-Type="text/html;" %>
<html>
<body>
Hello, World!
</body>
</html>
hello.cpp
#include <azarac/azarac.h>
using namespace azarac;
int main()
{
setenv("AZARAC_LIBRARY_PATH", "/home/bluedwarf/lib", 0); setenv("AZARAC_INCLUDE_PATH", "/home/bluedwarf/include", 0); display("./hello.tpl");
}
ベースはAzaraCのチュートリアルのものを利用していますが、hello.cppに少し変更が加えてあります。
この変更はテンプレートのコンパイルエラーを回避するものです。 AzaraCの中で g++ コマンドを呼び出すのですが、AzaraCのライブラリとヘッダファイルがそれぞれ /home/bluedwarf/lib, /home/bluedwarf/include にインストールされているので、そのままだと azarac/azarac.h が見つからずにテンプレートのコンパイルエラーが発生します。そこで、 setenv関数で AZARAC_LIBRARY_PATHとAZARAC_INCLUDE_PATH環境変数に各ディレクトリを設定しておきます。すると、私のパッチがあたったAzaraCでは、テンプレートのコンパイルに成功します。
さて、最後にhello.cppをコンパイルします。
% g++ -lazarac -rdynamic -o hello.cgi hello.cpp -I/home/bluedwarf/include -L/home/bluedwarf/lib -rpath /home/bluedwarf/lib
ここでのポイントは2点。
一つは、出力ファイル名のサフィックスは "*.cgi" というようにすることです。さくらインターネットのレンタルサーバでは、サフィックスがcgiでなければCGIとして実行できません。
もう一つは、-rpathオプションをつけることです。CGI実行時に、LD_LIBRARY_PATH環境変数をいちいち指定することはできませんので、あらかじめAzaraCのライブラリがどこにあるのかをコンパイル時に指定します。
テスト & 実行
これでコンパイルまで無事に済んだのでテストしてみましょう。
% ./hello.cgi
HTTPプロトコルのヘッダとHTML形式の文字列が表示されれれば成功です。
ブラウザで、http://bluedwarf.sakura.ne.jp/azarac/hello.cgi に相当するURLを開くと、"Hello, World!"と表示するCGIが実行されます。

