昨年の 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 を配置するディレクトリに変更ができなくなったことで、これは次の方法で回避できました。
二つ目は、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);
で指定した相対パスにある自前ライブラリの読み込みに失敗し実際のアプリケーションがうまく動かず…。この続きは別投稿で。
参照: