Mac OSX を El Capitanにしたら自作CGIが動かないでござる

前回、Yosemiteにした時から動いてないんですけどね。
でも、前回はApache 2.4系に対応したmod_perlが未リリースだったのですが、今年の4月に対応版がリリースされているので、今回こそ頑張ってみます。

まず、mod_perlから。

%tar -xf mod_perl-2.0.9.tar.gz
%cd mod_perl-2.0.9
%perl Makefile.PL MP_CCOPTS=-std=gnu89

とやると、

[ error] Unable to open /usr/include/apache2/: No such file or directory

というエラーが発生。ていうか、そもそも"/usr/include/apache2"というディレクトリーすら無い。
include検索パスを追加すれば良いのだろうと思ったけれども、それではエラーは解消できなかった。
しかも、"/usr/include"というディレクトリーを作ることすらパーミッションエラーで弾かれる。sudo も効かない。

解決策は、

%sudo cp /usr/bin/apxs /usr/local/bin
%sudo cp /usr/bin/apr-1-config /usr/local/bin

とした後、"/usr/local/bin/apxs"を編集。

my $prefix         = get_vars("prefix");

となっている所を

my $prefix         = "/usr/local";

と変更する。
同様に "/usr/local/bin/apr-1-config"も、

prefix="/usr"

prefix="/usr/local"

へ変更する。
これで、"/usr/local/include"を参照することになったのですが、そこには"apache2"のディレクトリはないので、

%ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-migrator/sdk/MacOSX.sdk/usr/include/apache2 /usr/local/include/apache2
%ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-migrator/sdk/MacOSX.sdk/usr/include/apr-1 /usr/local/include/apr-1

シンボリックリンクを作成しておく。
これで再び

%perl Makefile.PL MP_CCOPTS=-std=gnu89

とやると、特にエラーはない様子。
ところが、makeすると「ap_release.h」がないというエラーでコンパイルが止まる。
エラーをよく見ると、「-I/usr/include/apache2」というオプションが付いており、再びinclude検索パスがおかしくなっている。
かすかな記憶が蘇り、

%sudo chmod a+w /Library/Perl/5.18/darwin-thread-multi-2level/Apache2/BuildConfig.pm

とした後に、"BuildConfig.pm"を編集。
以下の項目を現状に合わせて書き換えた。

'APXS_INCLUDEDIR' => '/usr/local/include/apache2',
'MP_APXS' => '/usr/local/bin/apxs',
'ap_includedir' => '/usr/local/include/apache2',
'apr_config_path' => '/usr/local/bin/apr-1-config',
'apr_includedir' => '/usr/local/include/apr-1',

この後、

%make clean
%perl Makefile.PL MP_CCOPTS=-std=gnu89
%make
%sudo make install

で無事インストール完了。
"/etc/apache2/httpd.conf"に登録してみる。

LoadModule perl_module       /usr/local/libexec/apache2/mod_perl.so

を書き加えて、

%apachectl configtest

でテストOKだったので、

%sudo apachectl -k restart

で、無事起動しました。

次は、Libapreq2。

%tar -xf libapreq2-2.13.tar.gz
%cd libapreq2-2.13
%perl Makefile.PL

とすると、

build/version_check.pl failed: no version_string found in '' for 'apache2'.
configure: error: Bad apache2 binary (/usr/local/sbin/httpd)

というエラーが。
たしかに、httpdのパスは"/usr/sbin/httpd"のままで、これはコピーする気になれないので、Makefile.PLを書き換えることに。

my $opts = "";

という箇所に、現状に合わせたデータを追記。

my $opts = "";
$opts .= "--prefix=/usr/local ";
$opts .= "--with-apache2-httpd=/usr/sbin/httpd ";
$opts .= "--with-apache2-apxs=/usr/local/bin/apxs ";
$opts .= "--with-apr-config=/usr/local/bin/apr-1-config ";

保存したら、作業を再開。

%perl Makefile.PL
%make
%sudo make install

であっさりインストール完了。
"/etc/apache2/httpd.conf"に登録。

LoadModule apreq_module       /usr/local/libexec/apache2/mod_apreq2.so

を追記。

%apachectl configtest

でテストOKだったので、

%sudo apachectl -k restart

で、無事起動しました。

というわけで、1年半ぶりに自作CGIが起動しました。