CGI とは、Web サーバーが クライアント (Web ブラウザなど) からの要求に応じてプログラムを動作させるための仕組みのことです。従来 Web サーバーは、HTML ファイルや画像ファイルのように、あらかじめ作られたデータをただ送信するだけでした。これでは、情報をその場で生成して送信するような仕組みを作るのは困難です。そこで、サーバープログラムからほかのプログラムを呼び出し、その処理結果をクライアントに送信する方法が考え出されました。これにより、便利な検索サイトや、掲示板、アクセスカウンターなどが実現されています。今回は、CGIプログラムの例として、何かと話題の Blog と Wiki の設置方法を取り上げます。
前回、Web サーバーをインストールしましたが、Web サイトを管理できるのは管理者だけでした。これではセキュリティー面であまり安全ではないので、一般ユーザーのホームディレクトリにあるファイルを公開できるようにします。
端末を起動し、 root になります。
# su -
エディターで Web サーバーの設定ファイルを編集します。
# vi /etc/httpd/httpd.conf
UserDir public_html という記述の下に以下の設定を追加してください。
<Directory /home/*/public_html> Options None AllowOverride All </Directory> <Directory /home/*/public_html/cgi-bin> Options ExecCGI </Directory>
この設定の意味は次の通りです。
ユーザー領域でもCGIが実行できるように設定を変更します。
#Add-Handler cgi-script .cgi ↓ Add-Handler cgi-script .cgi
追加したら、保存してエディタを終了してください。
設定を適用します。
# /etc/init.d/httpd reload Reloading httpd: [ OK ]
Web サーバーの実行ユーザーである httpd が、一般ユーザーのホームディレクトリ内にアクセスできるようにグループとパーミッションを変更します。
# chgrp httpd ~ユーザー名 # chmod g+rx ~ユーザー名
一般ユーザーに戻って、テストをします。ホームディレクトリのすぐ下に public_html というディレクトリを作ってください。
# exit $ cd $ mkdir public_html $ cd public_html
index.html というファイルを作り、適当な HTML を入力します。
$ cat > index.html <html> <head> <title>てすと</title> </head> <body> ほげほげ </body> </html>
ブラウザで http://自分のIPアドレス/~ユーザー名/ にアクセスし、正しくページが表示されれば成功です。
ほげほげ
CGI が正しく実行できるかも確認してみましょう。
$ mkdir cgi-bin $ chmod 755 cgi-bin $ cd cgi-bin $ cat > test.cgi #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "$_ = $ENV{$_}\n" for (keys %ENV); $ chmod 755 test.cgi
ブラウザで http://自分のIPアドレス/~ユーザー名/cgi-bin/test.cgi にアクセスし、正しくページが表示されれば成功です。
SCRIPT_NAME = /~*/cgi-bin/test.cgi SERVER_NAME = 192.168.1.* . . . HTTP_HOST = 192.168.1.*
それでは実際にCGI プログラムを設置してみましょう。
Blog とは、いまさら説明の必要もないでしょうが、ネット上の日記のようなもので、書き込んだ日記に、離れたところにいる友達や、見知らぬ誰かさんがツッコミを入れたりできるシステムです。ここでは、オープンソースかつフリーな Blog プログラムである tDiary の設置方法を紹介します。
tDiary は、tDiary.org より配布されていますので、ここから tdiary-full-2.0.2.tar.gz をダウンロードします。
$ cd ~/public_html/cgi-bin $ wget http://www.tdiary.org/download/tdiary-full-2.0.2.tar.gz
ダウンロードしたファイルは圧縮されているので解凍します。
$ tar zxf tdiary-full-2.0.2.tar.gz
tdiary-2.0.2 というディレクトリができれば成功です。
$ ls -l 合計 2080 drwxr-xr-x 9 hoge hoge 4096 12月 01 18:35 tdiary-2.0.2 -rw-rw-r-- 1 hoge hoge 2121313 12月 01 18:30 tdiary-full-2.0.2.tar.gz
URL にバージョン番号が入っていると邪魔なのでディレクトリを tdiary に変更します。
$ mv tdiary-2.0.2 tdiary
次に、tDiary の実行ファイルである index.rb と update.rb をサーバーが実行できるようにパーミッションを変更します。
$ cd tdiary $ chmod 755 index.rb update.rb
以上でtDiary のインストールは完了です。
次に tDiary の設定を変更します。
現在のサーバーの設定では、CGI プログラムの拡張子は .cgi なので、これに Ruby スクリプトの拡張子である .rb を追加します。一般ユーザーではシステムの設定を変更できないため、.htaccess ファイルを使って設定を上書きします。
$ cat > .htaccess AddHandler cgi-script .rb DirectoryIndex index.rb
次に、tDiary の設定を変更します。tDiary の設定の一部は、tdiary.conf を直接編集して変更します。サンプルの設定ファイルをコピーし、テキストエディタで開いて変更してください。
vi で tdiary.conf を開くと文字化けするという場合は、vi ではなく emacs を使用するか、 PuTTY の文字セットを EUC-JP に変更し、以下のコマンドを実行してから vi で開いてください。 コマンド: LANG=ja_JP.EUC-JP
$ cp tdiary.conf.sample tdiary.conf
@data_path = '/home/foo/diary' ↓ @data_path = '/home/ユーザー名/diary'
ほかの項目は、お好みに合わせて適宜、変更してください。
最後に、日記データの保存ディレクトリを作ります。このディレクトリはサーバーが書き込める必要があるため、いったん root になり、グループとパーミッションを変更します。
$ mkdir ~/diary $ su - # chgrp httpd ~ユーザー名/diary # chmod g+w ~ユーザー名/diary
ここまでで tDiary のインストールは完了ですので、ブラウザで表示してみましょう。任意のブラウザで http://自分の IP アドレス/~ユーザー名/cgi-bin/tdiary/index.rb へアクセスしてみてください。
Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.
エラーが出てしまいました。サーバーのログファイルを見てみましょう。
$ su - # tail /var/log/httpd/error_log [Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] /usr/bin/env: [Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] ruby [Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] : No such file or directory [Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] [Fri Dec 01 20:00:00 2005] [error] [client 192.168.1.*] Premature end of script headers: index.rb
ruby が見つからないことがエラーの原因のようです。Ruby とは、スクリプト言語の 1 つで、tDiary も Ruby で書かれています。なので、実行するためには Ruby をインストールする必要があります。CentOS 4.2 にはあらかじめパッケージが用意されているので、yum でインストールします。
# yum install ruby Setting up Install Process Setting up repositories ・・・ Is this ok [y/N]: y
インストールが成功したら、もう一度ブラウザでアクセスしてみてください。「ほげほげ日記」が表示されれば成功です。
Wiki とは、ブラウザを利用してサーバー上の文書を書き換えるシステムの一種です。Wiki では通常、誰でも、ネットワーク上のどこからでも、文書の書き換えができるようになっているので、共同作業で文書を作成するのに便利です。
今回は、国産 Wiki クローンの1つである FreeStyleWiki を設置してみます。
FreeStyleWiki は、http://fswiki.poi.jp/ より配布されていて、2005 年 12 月 6 日現在の最新バージョンは 3.5.10 です。tDiary と同様に、ダウンロードしてください。
$ cd ~/public_html/cgi-bin $ wget http://osdn.dl.sourceforge.jp/fswiki/17805/wiki3_5_10.zip
このファイルは ZIP 形式のアーカイブなので unzip コマンドで解凍します。
$ unzip wiki3_5_10.zip
アーカイブのファイル名と同じディレクトリができれば成功です。
$ ls -a 合計 2080 drwxr-xr-x 9 hoge hoge 4096 12月 01 18:55 wiki3_5_10 -rw-rw-r-- 1 hoge hoge 881307 12月 01 18:50 wiki3_5_10.zip
ディレクトリ名を変更します。
$ mv wiki_3_5_10 wiki
FreeStyleWiki には、初期設定用のシェルスクリプトが同梱されているのでこれを使ってしまいましょう。
$ cd wiki $ sh setup.sh fswiki setup (for 3.5.8)... . . . done
以上で設置は完了です。ブラウザで http://自分の IP アドレス/~ユーザー名/cgi-bin/wiki/wiki.cgi へアクセスしてみてください。「FrontPage」が表示されれば成功です。