Centos 5.11、Apache 2.2、およびデフォルトの perl を実行するサーバーがあります。suexec を介してスクリプトを実行すると「問題なく」動作しますが、perlbrew をインストールして、干渉することなく追加のモジュールをインストールできるようにしました。
テスト用の簡単な perl スクリプトを作成しました。
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "perl: ". $^X . "\n";
apache+suexec を実行すると、期待どおりに出力されます。
Hello, world! perl: /usr/bin/perl
しかし、シバン行を次のように変更すると:
#!/root/perl5/perlbrew/perls/perl-5.22.1/bin/perl
同じ方法で実行すると、内部サーバー エラーが発生し、Apache エラー ログに次のように表示されます。
suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: test.cgi
ただし、コマンド ラインでの実行は問題ありません。
# ./test.cgi
Content-type: text/html
Hello, world!
perl: /root/perl5/perlbrew/perls/perl-5.22.1/bin/perl
私はあらゆる種類のことを試しました。「PATH」の問題なのかと思ったのですが、Apacheのドキュメントには「2.2では、Setenvを使用してPATH環境変数を設定できません」と書かれています。
通常、suexec エラーは dos/unix エンコーディングが原因のようですが、ここでは問題ではありません。
perlbrew のインストール方法に問題があるのでしょうか? 別のユーザーとして(apacheとして)する必要がありますか?別の場所 (/var/www の下)?
その他の提案は大歓迎です!