それなりのアクセスのある「Perl プログラム」で構成された Web サイトを作成したいので、今回、mod_perl を導入してみることにした。
まず、Apache が DSO (Dynamic Shared Object)対応で make されていれば、Apache の再 make は必要無いので調べてみる。
websrv# /usr/local/apache2/bin/httpd -l|grep mod_so
mod_so.c
うむ。ちゃんと DSO (Dynamic Shared Object)対応になってますな。
まあ、自分で apache を make する時は、enable-modules=so オプションは必ず付けて configure するので、必ず DSO 対応になってるんだけどね。
そもそも、Apache2 で enable-modules=so オプションが必要なのかどうかは調べてないので知らないのだが、まあ、「足りない」よりは「余計」な処理の方が良いわけで。:-)
CPAN 検索サイトから mod_ssl を検索してソースを落とすなり。
今回は、http://search.cpan.org/CPAN/authors/id/P/PG/PGOLLUCCI/mod_perl-2.0.2.tar.gz から落とした。
websrv# cd /usr/local/src
websrv# lynx http://search.cpan.org/~pgollucci/mod_perl-2.0.2/
<略>
websrv# ls -la mod_perl*
-rw-r--r-- 1 root admin 3692744 Jan 5 17:39 mod_perl-2.0.2.tar.gz
websrv# tar xvfz mod_perl-2.0.2.tar.gz
mod_perl-2.0.2
mod_perl-2.0.2/t
mod_perl-2.0.2/xs
<略>
mod_perl-2.0.2/t/response/TestAPI/in_out_filters.pm
mod_perl-2.0.2/t/response/TestAPI/module.pm
mod_perl-2.0.2/t/response/TestAPI/slurp_filename.pm
websrv# cd mod_perl-2.0.2
さて、インストールの方法は INSTALL ドキュメントを見れば載ってるので、このとおりにすればええだけですよ。
Simple install:
% perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
% make && make test
% make install
Simple config:
LoadModule perl_module modules/mod_perl.so
#PerlModule Apache::compat
# your config comes here
For a more detailed version (including more options) refer to:
docs/user/intro/start_fast.pod
<以下略>
なので、
websrv# find / -name "apxs*" -print
<略>
/usr/local/src/httpd-2.0.54/support/apxs
/usr/local/apache2/bin/apxs
/usr/local/apache2/man/man8/apxs.8
websrv# perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
Reading Makefile.PL args from @ARGV
MP_APXS = /usr/local/apache2/bin/apxs
no conflicting prior mod_perl version found - good.
Configuring Apache/2.0.54 mod_perl2/2.0.2 Perl/v5.6.1
Checking if your kit is complete...
Looks good
'NO_META' is not a known MakeMaker parameter name.
[ info] generating script t/TEST
[ info] generating script ./t/cgi-bin/cookies.pl
Warning: prerequisite Cwd 2.06 not found at /usr/local/lib/perl5/5.6.1/ExtUtils/MakeMaker.pm line 343
.
Writing Makefile for Apache::Test
Checking for File::Spec...ok
Checking for Cwd... found v2.04
[ error]
The following Apache-Test dependencies aren't satisfied:
[ error] Cwd: 2.06
[ error] Install those from http://search.cpan.org and try again
ありゃりゃ?
Cwd とかいうモジュールが古いの? 今が 2.04 だから 2.06 にせえと言うてるんだろうなあ。
websrv# perl -MCPAN -e shell
cpan shell -- CPAN exploration and modules installation (v1.76)
ReadLine support enabled
cpan> install Cwd
CPAN: LWP::UserAgent loaded ok
Fetching with LWP:
ftp://ftp.dti.ad.jp/pub/lang/CPAN/authors/01mailrc.txt.gz
Going to read /root/.cpan/sources/authors/01mailrc.txt.gz
CPAN: Compress::Zlib loaded ok
Fetching with LWP:
<略>
Installing /usr/local/lib/perl5/5.6.1/man/man3/File::Spec::Functions.3
Writing /usr/local/lib/perl5/5.6.1/mach/auto/Cwd/.packlist
FreeBSD: Registering installation in the package database
Appending installation info to /usr/local/lib/perl5/5.6.1/mach/perllocal.pod
/usr/bin/make install -- OK
cpan> exit
No history written (no histfile specified).
Lockfile removed.
websrv# perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
Reading Makefile.PL args from @ARGV
MP_APXS = /usr/local/apache2/bin/apxs
no conflicting prior mod_perl version found - good.
Configuring Apache/2.0.54 mod_perl2/2.0.2 Perl/v5.6.1
<略>
[warning] Check the results of
[warning]
[warning] $ /usr/local/apache2/bin/apxs -q LIBEXECDIR
[warning]
[warning] and adjust the LoadModule directive accordingly.
なんかワーニングが出てるけど、とりあえず終了した様子・・・
websrv# make
cd "src/modules/perl" && make
<略>
cp bin/mp2bug blib/script/mp2bug
/usr/local/bin/perl -I/usr/local/lib/perl5/5.6.1/mach -I/usr/local/lib/perl5/5.6.1/BSDPAN -MExtUtils::MakeMaker -e "MY->fixin(shift)" blib/script/mp2bug
Manifying blib/man3/Apache2::Build.3
Manifying blib/man3/ModPerl::CScan.3
Manifying blib/man3/ModPerl::Code.3
Manifying blib/man3/mod_perl2.3
Manifying blib/man3/Bundle::Apache2.3
websrv# make test
cd "src/modules/perl" && make
<略>
server localhost.netandfield.com:8561 listening (TestHooks::push_handlers_anon)
still waiting for server to warm up: ...........................................
............................................................................
the server is down, giving up after 122 secs
[ error] failed to start server! (please examine t/logs/error_log)
+--------------------------------------------------------+
| Please file a bug report: http://perl.apache.org/bugs/ |
+--------------------------------------------------------+
*** Error code 1
Stop in /usr/local/src/mod_perl-2.0.2.
あり???エラーになったぞ。サーバとの通信でタイムアウト?何を言うておるんや?
エラーログを見ろというので見てみる。
websrv# ls -la t/logs/error_log
-rw-r--r-- 1 nobody nobody 1506 Jan 5 19:21 t/logs/error_log
websrv# cat t/logs/error_log
[Thu Jan 05 19:21:26 2006] [info] Init: Initializing OpenSSL library
[Thu Jan 05 19:21:26 2006] [info] Init: Seeding PRNG with 0 bytes of entropy
[Thu Jan 05 19:21:26 2006] [info] Init: Generating temporary RSA private keys (512/1024 bits)
<略>
[Thu Jan 05 19:21:32 2006] [info] Server built: May 8 2005 09:42:39
[Thu Jan 05 19:21:32 2006] [debug] prefork.c(956): AcceptMutex: flock (default: flock)
う〜ん、なんか、何度も Apache を起動してるような。
一旦 Apache を stop させてやってみるか・・・
websrv# /usr/local/apache2/bin/apachectl stop
websrv# make test
cd "src/modules/perl" && make
Skip blib/lib/Apache2/Status.pm (unchanged)
Skip blib/lib/ModPerl/FunctionMap.pm (unchanged)
<略>
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/protocol/pseudo_http.t 13 11 84.62% 2-8 10-13
22 tests skipped.
Failed 1/231 test scripts, 99.57% okay. 11/2191 subtests failed, 99.50% okay.
[warning] server localhost.netandfield.com:8529 shutdown
[ error] error running tests (please examine t/logs/error_log)
+--------------------------------------------------------+
| Please file a bug report: http://perl.apache.org/bugs/ |
+--------------------------------------------------------+
*** Error code 1
Stop in /usr/local/src/mod_perl-2.0.2.
websrv# /usr/local/apache2/bin/apachectl start
どうも、Apache は止めて make test をしないと駄目なようである。
そしたら test が始まった。(まじっすか?テストに数分かかるんじゃけど、止めっぱなし?本番サーバじゃ出来んな・・・)
・・・が、結局エラー。途中、CGI.pm のバージョンが古いとか出てたので、それを最新にしてみたり、BSD::Resource をインストールしてみたりしたが状況変わらず。
まあ、99.57% okay だし、もう make install しちゃいましょう。
websrv#
websrv# make install
cd "src/modules/perl" && make
/usr/bin/perl -Iblib/lib -I/usr/local/src/mod_perl-2.0.2/Apache-Test/lib -MModPerl::BuildMM -e ModPerl::BuildMM::glue_pod lib/Apache2/Status.pm /usr/local/src/mod_perl-2.0.2/docs/api/Apache2/Status.pod blib/lib/Apache2/Status.pm
<略>
Installing /usr/local/bin/mp2bug
Writing /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/mod_perl2/.packlist
FreeBSD: Registering installation in the package database
FreeBSD: Cannot determine module description
Appending installation info to /usr/local/lib/perl5/5.6.1/mach/perllocal.pod
+--------------------------------------------------------------+
| |
| For details on getting started with mod_perl 2, see: |
| |
| http://perl.apache.org/docs/2.0/user/intro/start_fast.html |
| |
| |
| Found a bug? File a bug report: |
| |
| http://perl.apache.org/bugs/ |
| |
+--------------------------------------------------------------+
まあ、これでよしとしましょう。
じゃ、Apache の httpd.conf を修正して、Apache の再起動を行います。
websrv# cd /usr/local/apache2/conf
websrv# cp httpd.conf httpd.conf.20060105
websrv# vi httpd.conf
修正内容は↓こんな感じ
(わしの場合は、VirtualHost で設定しているサイト内で使うので、ディレクティブがネストしてますが(^^;)
websrv# diff httpd.conf httpd.conf.20060105
97,100d96
< # 2006/1/5
< LoadModule perl_module modules/mod_perl.so
< PerlModule Bundle::Apache2
<
472,488d467
<
< # 2006/01/05
< <IfModule mod_perl.c>
<
< Alias /sns/ /usr/local/share/apache/htdocs/sns/
<
< <Location /sns>
<
< SetHandler perl-script
< PerlHandler ModPerl::Registry
< Options ExecCGI
< Allow from all
< PerlSendHeader On
<
< </Location>
<
< </IfModule>
これで、Apache を再起動。
websrv# /usr/local/apache2/bin/apachectl restart
/usr/local/share/apache/htdocs/sns/ 以下に、
#!/usr/bin/perl
use CGI;
$cgi = new CGI;
print $cgi->header(-type=>'text/html');
print $cgi->start_html(-title=>'Is it running under Mod_perl?',
-bgcolor=>'white',
-textcolor=>'black',
);
print "<H1>It's running <STRONG>";
if (exists $ENV{MOD_PERL}) {
print "mod_perl!\n";
} else {
print "CGI!\n";
};
print "</STRONG></H1>\n";
print "<ol>\n";
while (($key, $val) = each %ENV) {
print "<li> $key : $val\n";
}
print "</ol>\n";
print $cgi->end_html;
という内容のファイルを作成し、chmod 755 して、
http://websrv.netandfield.com/sns/test
にアクセスすると、無事、ブラウザに
It's running mod_perl!
QUERY_STRING :
<以下略>
と表示されてOK!
何とか mod_perl のセットアップ終了であります。
|
|