El Capitanでmod_perlを動かす


昨年の Yosemite では Perl 自体動いてなかった OS X でしたが、El Capitan に更新すると、ブラウザが .CGI 拡張子のファイルのソースコードを平文(プレーンテキスト)で表示するという事態になっていました。今回は Perl が動いているので、問題は Apache の設定ファイル /etc/apache2/httped.conf にあるだろうと見当をつけて調べてみたところ、通常、コメントアウトされているはずの記述 LoadModule perl_module /usr/libexec/apache2/mod_perl.so がありません。

そこで sudo vi /etc/apache2/httpd.conf として上述した一文を加えて sudo apachectl configtest とすると、今度は /usr/libexec/apache2/mod_perl.so が見つからないという文法エラーを返してきました。

やれやれ本格的に Perl を外してきたのかと、前回同様に mod_perl のコンパイルを始めると次の三つの問題が発生しました。まず一つ目は El Capitan では SIP と呼ばれるセキュリティシステムが導入され、mod_perl.so を配置するディレクトリに変更ができなくなったことで、これは次の方法で回避できました。

http://hkitago.tumblr.com/post/140772048012

二つ目は、Xcode のバージョンが更新されているので、リンク作成時にパスの途中を MacOSX10.11.sdk とする必要があること、そして最後は SVN チェックアウトに使うアドレスが /trunk の物を使うとエラーになるので、/tags/2_0_9 とする必要があったことです。

また、StackOverflow の回答では、/usr/local/libexec/apache2/mod_perl.so へ配置することになっていますが、sudo vi /usr/local/bin/apxs$prefix を変更せず、通常通り /usr/libexec/apache2/mod_perl.so へコンパイルすることができました。

ようやく sudo apachectl configtest も OK となり Apache を再起動しブラウザを再読み込みしても尚平文のコードを表示してくるので、ユーザディレクトリ /etc/apache2/users/hkitago.conf を調べてみると、隣に /etc/apache2/other/ というディレクトリがあり、その中に php5.conf という Yosemite までにはなかったファイルを発見、覗いてみるとそれまで httpd.conf に記述されていた PHP のマインタイプが書かれています。

これはもしや…と、sudo vi /etc/apache2/other/perl.conf としてファイルを作成し、次のようなディレクティブを記述してみるとうまくいきました。
<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI
PerlSendHeader On
</Files>

そしてめでたしめでたし…と思いきや、#use lib qw(./_lib); で指定した相対パスにある自前ライブラリの読み込みに失敗し実際のアプリケーションがうまく動かず…。この続きは別投稿で。

参照: