iPod touch + lighttpd でCGI

id:NeoCat:20080723 で動かしたiPod上のlighttpd上で、CGIを動かせるようにする方法です。

手順

0. lighttpdを動くようにする。id:NeoCat:20080723 参照。
1. /etc/lighttpdのモジュールにmod_cgiを加える。
server.modules = ( 
        "mod_cgi",                     ←追加
        "mod_access",
        "mod_alias",
 )
2. 拡張子に応じて実行するバイナリを登録。空欄にしておけばCGIがそのまま実行される。
cgi.assign = (
        ".cgi" => "",
        ".rb" => "/usr/bin/ruby",
)
3. indexを追加
index-file.names = (
    "index.html", "index.htm", "index.cgi"
)

とか、お好みで。

4. lighttpdを再起動する(rootで)
# killall lighttpd
# lighttpd -f /etc/lighttpd.conf
5. 何かCGIを書いてみる。とりあえずシェルスクリプトで。要実行権限。
% cd ~/Sites/
% cat > test.cgi
#!/bin/sh
echo Content-type: text/plain
echo
ls -l
(ctrl-Dで入力終了)
% chmod 755 test.cgi
6. http://localhost/test.cgi にアクセスしてみる。

ls -lの実行結果が出れば成功です。


あとはperl入れるなりruby入れるなりして、CGIスクリプトを書けばOKかな。
と思ったらperlのパッケージはまだない!? orz rubyが動けば個人的には良いけど。。


試しにrubyを入れて、以下のrubyスクリプト(ディレクトリ一覧を大きめ表示)を置いてみたら、普通に動きました。
viewportについては http://do-gugan.com/~furuta/archives/2008/01/ipod_touchiphon.html より。

#!/usr/bin/ruby
print "Content-type: text/html\n\n"
puts '<html><head><meta name="viewport" content="width=200"></head><body>'
Dir::foreach('.') {|f|
        puts "<a href=\"#{f}\">#{f}</a><br>"
}
puts "</body></html>"