apache + PHP

iPodTouchHacks.jpさんに、PHPスクリプトCGIモードで動作させる設定が掲載されていました。

私の環境では、上記に記載されているやりかたそのまま(/opt を /private/var 以下に格納する)だと動きませんでした。/private/var 以下からのプログラム起動が禁止されていたからです。/etc/fstab を編集して

/dev/disk0s2 /private/var hfs rw,noexec 0 2

の noexec を削除、

/dev/disk0s2 /private/var hfs rw 0 2

その後再起動すると動くようになりました。

# どんどん危ない方向に行っている気が (^_^;)

ご注意:上記 /private/var を noexec でマウントするというのは、セキュリティ上の理由でアップルがそのように初期設定しているものです。システム領域 (/) は書込み不可でプログラム実行可能、メディアファイル領域 (/private/var) は書込み可でプログラム実行不可能という設定ですね。なので、/etc/fstab を変更して /private/var の noexec を外すというのはセキュリティレベルを下げる事を意味しています。

もっとも、こんなエントリーを読んでいる人は / を書き込み可能にしてしまった人たちですから、そんなの関係ねぇ、でしょうが (^_^;)

PHPCGIではなくてモジュールで動く方が、いろんなスクリプトを動かすときにトラブルが少ないと思うのですが、Installer.app で配布されているものはCGIでしか動かないようですね。apacheで外部モジュールを動かすには mod_so 入りでコンパイルされている事が必要だったように思うのですが、これも入っていないようですね。

# /usr/libexec/httpd -l
Compiled-in modules:
  http_core.c
  mod_env.c
  mod_log_config.c
  mod_mime.c
  mod_negotiation.c
  mod_status.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_cgi.c
  mod_asis.c
  mod_imap.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_access.c
  mod_auth.c
  mod_setenvif.c
suexec: disabled; invalid wrapper /usr/sbin/suexec

もしかして iPod touch では mod_so がうまく動かないのかもしれません。どちらにしてもモジュール版のPHPを動かそうと思ったら、ApachePHPの両方をmakeし直す必要があるみたいです。



追記 (2007/10/21): このブログでも言及していた http://www.touchdev.net/wiki/Jailbreak_Guide では Jailbreak のステップで fstab をダウンロードしたものと置き換えます。この「置き換えなさい」という fstab の内容を見てみると上記の noexec がすでに外されたものでした。私は手で fstab を編集してしまったので気づきませんでした。

今まで /private/var に noexec がついてたままで Jailbreak 生活を送っていて何の問題もありませんでした。セキュリティレベルを下げるのは確かなので、Rapidshare で配布する fstab も noexec を外していないものの方がいいのではないかなぁ。