前回、Internal Errorで実行できなかったので、画面のメッセージに従って、/usr/local/apache/logsのerror_logを見てみました。
出ていたエラーは、
Can't locate RRDs.pm in @INC (@INC contains:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/5.8.5
/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.5
/usr/lib/perl5/site_perl/5.8.4
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl/5.8.2
/usr/lib/perl5/site_perl/5.8.1
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.5
/usr/lib/perl5/vendor_perl/5.8.4
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl/5.8.2
/usr/lib/perl5/vendor_perl/5.8.1
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl .) at
/usr/local/www/cgi-bin/mrtg-rrd.cgi line 37.
BEGIN failed--compilation aborted at /usr/local/www/cgi-bin/mrtg-rrd.cgi line 37.
[Thu Oct 20 17:49:03 2005] [error] [client 219.11.2.32] Premature end of script headers: /usr/local/www/cgi-bin/mrtg-rrd.cgi
(少し見た目を加工してます)
用は、RRDs.pmが@NICで指定された場所にない!と言ってるようです。
で、どこにあるのかというと、
# find / -name RRDs.pm
/usr/local/rrdtool-1.2.10/lib/perl/5.8.5/i386-linux-thread-multi/RRDs.pm
/home/shige/Desktop/package/rrdtool-1.2.10/bindings/perl-shared/RRDs.pm
/home/shige/Desktop/package/rrdtool-1.2.10/bindings/perl-shared/blib/lib/RRDs.pm
でした。
/usr/local/rrdtool-1.2.10/lib/perl/5.8.5/i386-linux-thread-multi/RRDs.pm
がちゃんとインストールされた場所になるようです。
んで、cgiの中をよく見ると、
# Location of RRDs.pm, if it is not in @INC
# use lib '/usr/lib/perl5/5.00503/i386-linux';
とかかれてました。つまり、@NIC以外にある場合は、use libで設定しろと。
んで、早速設定しました。
use lib '/usr/local/rrdtool-1.2.10/lib/perl/5.8.5/i386-linux-thread-multi';
use RRDs;
(use RRDs;の前で定義する必要があるようです)
そんで、ブラウザからhttp://www.sleepingforest.dyndns.info/cgi-bin/mrtg-rrd.cgi/
にアクセスすると、無事画面が表示されました。
念のためerror_logを見ると、いくつかのpngファイルがないと言ってるようですが、MRTGのロゴの部分なので、後で適当にコピーでもしておきましょう。
問題は、これで本当にグラフが書かれるのかなんだけどな・・・。
で、グラフが生成されるか確認したところ、書き込みに関するアクセス権がないので、、、というエラーが・・・。
これか~~~~!
ってことで、グラフイメージが作成されるディレクトリ書き込みのアクセス権を付与。
これで!
と思ったら、ダメ。
で、すでにMRTGが生成していたイメージファイルを一度削除したら、うまくい行きました。
MRTGはrootで生成されていたのが、cgiから生成されるとapacheで定義したwww-dataってユーザで作成されるんやね。ほぇ~