MacPortでApache2?

cygportがあるように、MacにはMacprotがあるらしい。
MacPorts-JPを読んで、結局InstallingMacPorts(英語)を読んで、見よう見まねで

.profile

 というファイルを作ってから、MacPortをinstall。
で、いきなり

sudo port install apache2 +openldap

 とすると、依存関係のあるプログラムがどんどんビルドされていく。
libdb46とかperl5とかのビルドではCPU使用率が100%で数分かかった。
Apache2まで、30分ぐらいかかったと思う。
で、Apache2の動作確認もしないまま、

sudo port install p5-libapreq2

 とやると、まずMOD_Perlのビルドから始まる。MOD_Perlの事をすっかり忘れていたのだが、しっかりしている。
MOD_perlビルド後に

/opt/local/apache2/bin/apxs -a -e -n "perl" mod_perl.so

 というコマンドを実行するようにサジェスチョンが出た。
cygportでmod_apreq2をビルドした時に、似たようなコマンドを使った記憶が。
で、そのまま実行するとエラーとなる。

sudo /opt/local/apache2/bin/apxs -a -e -n "perl" mod_perl.so

 でないといけない。
何でもroot権限で実行出来たcygwinと違って、いちいち"sudo"しないといけないのが煩わしいが、cygwinが自由過ぎたのであって、本来UNIXはこうゆうものなんだよな。
そのうち慣れるだろう。。。
で、

/opt/local/apache2/bin/apachectl -t

 を実行すると、エラーが出るのだが、エラーの内容がおかしい。
apxsは

/etc/apache2/httpd.conf

 にmod_perlの設定を書き込んだのに対し、apachectlは

/opt/local/apache2/conf/httpd.conf

 の内容をtestしている。
どっちを使うのだろう?
とりあえず、同じ内容にしてみる。

10/21追記

 Apache2のドキュメンテーションに、

/usr/local/apache2/bin/apachectl -f /etc/apache2/httpd.conf

 というコマンドで、使用するコンフィグファイルを変更出来ると書かれていた。
やってみたが、/etc/apache2/httpd.confの設定内容とapachectlが相性が悪いようなので(?)、/opt/local/apache2/conf/httpd.confに戻しました。

以下、10/20原文ママ

 で、また、"apachectl -t"するとエラーが。

httpd: Syntax error on line 118 of /private/etc/apache2/httpd.conf: Cannot load /usr/modules/mod_perl.so into server: dlopen(/usr/modules/mod_perl.so, 10): image not found

 何を言っているのか全然わからないが、ググるmod_perl2 and libapreq2 on Mac OS X(英語)

$ file /usr/sbin/httpd

 ってやってみろ、って書いてある。
やってみた。

$ file /usr/sbin/httpd
/usr/sbin/httpd: Mach-O universal binary with 3 architectures
/usr/sbin/httpd (for architecture x86_64):	Mach-O 64-bit executable x86_64
/usr/sbin/httpd (for architecture i386):	Mach-O executable i386
/usr/sbin/httpd (for architecture ppc7400):	Mach-O executable ppc

 つまり、3種類のCPUに対する実行ファイルが、1つのファイルとしてバインドされているということらしい。
ので、先の".profile"ファイル内に

export ARCHFLAGS="-arch i386 -arch x86_64"
export CFLAGS="-arch i386 -arch x86_64"

 と追加してからビルドしないといけなかったらしい。
MacPortでinstallしたファイルを 1つ1つuninstallした後、再度

sudo port install apache2 +openldap
sudo port install p5-libapreq2

 でinstall出来た感じ。
今度は"apachectl -t"すると"Syntax OK"。


10/21追記

 MacOS X 10.5から、Apache2とmod_perlはビルドしなくても標準装備だったらしい。。。
MacPortからinstallしたプログラムを全部uninstallして、

/etc/apache2/httpd.conf

 に

LoadModule perl_module        libexec/apache2/mod_perl.so

 を追加して、MacOS Xの「システム環境設定」の「共有」から「web共有」にチェックを入れると、

[notice] Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8l DAV/2 mod_perl/2.0.4 Perl/v5.10.0 configured -- resuming normal operations

 ちゃんと起動した。なんだったんだ、MacPort。
ブラウザからlocalhostにアクセスすると"It works!"と表示され、ちゃんと動いているのがわかる。
libapreqは、

sudo cpan Apache2::Upload

 でビルドした。
で、

sudo /usr/sbin/apxs -a -e -n "apreq" libexec/apache2/mod_apreq2.so

 を実行。
また、MacOS Xの「システム環境設定」で「web共有」にチェックを入れると、

[notice] Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.0 configured -- resuming normal operations

 ちゃんと組み込まれたようである。
で、httpd.confに、mod_perlとか、Apache2::Reload(cpan Apache2::Reload で別途入手しました)等の設定を書き込んで、なつかしのmod_perlのカレントディレクトリを表示するCGI

/Library/WebServer/CGI-Executables/path.pl

 にsaveして、"http://localhost/cgi-bin/path.pl"を開くと、

カレントディレクトリ : / 

 今度はルートディレクトリが、カレントディレクトリになっている。。。