PR

[Webmin] Virtualmin とPHP&CGI、perl モジュール

なんとかファイルも転送できたので、いつものようにCGI スクリプトを利用して動作権限を確認する。

適当に設置して表示させたところ、エラーは出なかったが、スクリプトのソースが垂れ流しになっている。CGI が動作していない場合の現象だ。もう少し正確に表現するなら、今回の場合はおそらく正しい設置場所に設置していないために制限に引っかかったと思うほうが正しそう。

まず、設置場所が適切かを確かめる。

スポンサードリンク

設置場所

デフォルトのまま利用して評価しているVirtualmin だが、CGI スクリプトの設置場所は指定されている。ちょっと引っ掛け問題のような。404 エラーで軽くハマった。

  • x /home/hoge/public_html/cgi-bin
  • o /home/hoge/cgi-bin

エラーログ

正しい設置場所に置いた途端、500 エラーとなった。

パスの確認

こういう時に便利なSSH が利用できることはすでにわかっているから、早速ログインしてperl パスを調べる。

whichperl

すると、次のような回答が得られた。

/usr/bin/perl

perl パスはスクリプトのデフォルトと合致しているようだ(あとでシンボリックでも貼っておこうかな。最近perl スクリプトを使う機会減ったけど)。

エラーの確認

さて、それでも500 エラーなら、もう少し詳しくエラーを知りたい。エラーログの場所を探すのも面倒だったし、perl パスもわかったところなので、SSH から実行してしまおう。

$ /usr/bin/perl ~/cgi-bin/servana.cgi
Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at /home/hoge/cgi-bin/servana.cgi line 8.
BEGIN failed--compilation aborted at /home/hoge/cgi-bin/servana.cgi line 8.

おぉ・・思わぬエラーだ。CGI.pm が無いのか。たしか、Webmin はその辺を簡単にインストールできる機能があったはず。

perl モジュール

perl モジュールの確認

Webmin からPerl Modules を確認すると、現在インストールされているモジュールが確認できる。改めて確認するとCGI.pm は無いようだ。

perl モジュールのインストール

Webmin はモジュールのリストを作成してくれ、検索や指定してインストールすることも容易にできる。

ということで、インストール。

インストール完了。

SSH 接続している時、そういえばcpan コマンドが無いなーと思ったら、上図だとyum を利用してインストールしているようで。

動作権限

動作権限はユーザー権限で動作していた。

PHP

PHP はユーザ権限で問題なく動作した。

コメント