Hikiのセットアップ

あとでsuEXECで動かすのに、専用のユーザを作成。

$ sudo adduser --system --home /var/www/hoge --no-create-home --disabled-login hogehoge

hikisetupを実行すると、失敗した。

$ sudo -u hogehoge /usr/bin/hikisetup
INFO: hiki basedir is /var/www/hoge
Please input data_path [/var/www/hoge/data]:
Error: private method `makedirs' called for File:Class
hikisetup failed!

ここ を参考にしてhikisetupを修正。

$ rcsdiff -r1.2 -r1.1 ./hikisetup
===================================================================
RCS file: ./RCS/hikisetup,v
retrieving revision 1.2
retrieving revision 1.1
diff -r1.2 -r1.1
140c140
<     makedirs(@hikidir)
---
>     File.makedirs(@hikidir)

hikiconf.rb.sampleを作成する。

$ cd /usr/share/doc/hiki/examples
$ sudo gzip -d hikiconf.rb.sample.ja.gz
$ sudo mv -i hikiconf.rb.sample.ja hikiconf.rb.sample

もう一回作り直し。

$ sudo -u hogehoge /usr/bin/hikisetup
INFO: hiki basedir is /var/www/hoge
Please input data_path [/var/www/hoge/data]:
hikisetup succeeded!
Please edit /var/www/hoge/hikiconf.rb

パーミッションの変更

$ sudo chmod -R go+w data

次に、RAAからfcgiwrapをダウンロードしてくる。

$ wget http://rubyforge.org/frs/download.php/34207/fcgiwrap-0.1.6.tgz
$ tar zxf fcgiwrap-0.1.6.tgz
$ sudo cp -i fcgiwrap-0.1.6/lib/fcgiwrap.rb /usr/lib/ruby/1.8/

ラッパー用のスクリプトを作成。

$ cd /var/www/hoge
$ sudo -u hogehoge bash -c 'cat << EOF hiki.fcgi
> #!/usr/bin/ruby
> require 'fcgiwrap'
> FCGIWrap.each {
>   load '/var/www/hoge/hiki.cgi'
> }
> EOF
'
$ sudo chmod 755 hiki.fcgi

Apacheの設定を変更する。hikiconfを読み込めないようにするのと、RewriteルールとFollowSymLinksを追記する。 [1]

$ cd /etc/apache2/site-available
$ sudo a2enmod rewrite

default を任意のエディタで下記のように変更する。

# (snip)
        <Directory "/var/www/hoge/">
                Options ExecCGI FollowSymLinks
                AllowOverride all
                Order allow,deny
                Allow from all
                <Files "hikiconf.rb">
                        deny from all
                </Files>
                RewriteEngine on
                RewriteBase /hoge/
                RewriteRule ^hiki.cgi(.*)$ hiki.fcgi$1
                RewriteRule ^hiki.cgi$ hiki.fcgi
        </Directory>
# (snip)

これで、hiki.cgiでアクセスしても、hiki.fcgiへ書き換えられ、hiki.fcgiでラッパーしたhiki.cgiが呼ばれるように取り合えずはなりましたよ、と。ただ、fcgidが毎回communication errorを起こし、Internal Server Errorになり、リロードしなおさないとダメ、という状態で使い物にならないので、まだ改善の余地ありだな。

[1]Rewrite関連の設定だけだと、”Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/www/hoge/”というエラーが出るので。