
aw at ice-sa
Jul 15, 2012, 7:52 AM
Post #2 of 2
(324 views)
Permalink
|
|
Re: [mod_perl2]: Install error with Makefile.PL - uninitialized value at TestRun.pm
[In reply to]
|
|
Daniel Boerner wrote: > Hi Fred, Hi Todd > I just subscribed to this list and still don't know how to link my message > to your thread from July 10th. Sorry. > I just want to show you my workaround of the same problem: "Install error > with Makefile.PL - uninitialized value at TestRun.pm" > > Here my proceedings aiming at a statically mod_perl Apache with Perl 5.14.2 > on Debian "squeeze" Linux: > > cd ~/src > tar -xvzf perl-5.14.2.tar.gz > cd perl-5.14.2 > mkdir "$HOME/perl" > ./Configure -des -Dprefix="$HOME/perl" -Dusethreads > make > make test > make install > > Making some symlinks... (basically appending a '5' to the name of each > executable in the newly installed $HOME/perl/bin). > su ./perl_version_links.pl /home/dani /usr/local/bin > > Some prerequisites: > cpan5 > install CPAN > reload cpan5 > exit > > cpan5 > install YAML > install LWP > install CGI > install Chatbot::Eliza > install Compress::Zlib > install Devel::CoreStack > install Devel::Symdump > install Digest::MD5 > install IPC::Run3 > exit > > > And now, making up a statically mod_perl Apache server: > > cd ~/src > tar -xvzf httpd-2.2.22.tar.gz > tar -xvzf mod_perl-2.0-current.tar.gz > > mkdir "$HOME/apache2" > cd mod_perl-2.0.7/ > perl5 Makefile.PL MP_USE_STATIC=1 MP_AP_PREFIX="$HOME/src/httpd-2.2.22" > MP_AP_CONFIGURE="--prefix=$HOME/apache2 --with-mpm=prefork" MP_COMPAT_1X=0 > > Error: > ERROR from evaluation of > /home/dani/src/mod_perl-2.0.7/Apache-Reload/Makefile.PL: Use of > uninitialized value $v in concatenation (.) or string at > Apache-Test/lib/Apache/TestRun.pm line 1100 > > Locating line 1100 and adding two print statements just before it: > > my %args = @Apache::TestMM::Argv; > while (my($k, $v) = each %args) { > print "--> $k\n"; > print "---> $v\n"; > $v =~ s/\|/\\|/g; > $body .= "\n\$Apache::TestConfig::Argv{'$k'} = q|$v|;\n"; > } > > Running again: > perl5 Makefile.PL MP_USE_STATIC=1 MP_AP_PREFIX="$HOME/src/httpd-2.2.22" > MP_AP_CONFIGURE="--prefix=$HOME/apache2 --with-mpm=prefork" MP_COMPAT_1X=0 > > Result: > Configuring Apache/2.2.22 mod_perl/2.0.7 Perl/v5.14.2 > --> httpd > ---> /home/dani/src/httpd-2.2.22/httpd > --> apxs > ERROR from evaluation of > /home/dani/src/mod_perl-2.0.7/Apache-Reload/Makefile.PL: Use of > uninitialized value $v in concatenation (.) or string at > Apache-Test/lib/Apache/TestRun.pm line 1101. > > Ok. As I'm building mod_perl statically, I don't need apxs so I apply the > following workaround: enclose lines 1100 and 1101 in an if-block testing if > $v is defined: > > my %args = @Apache::TestMM::Argv; > while (my($k, $v) = each %args) { > if (defined $v) { > $v =~ s/\|/\\|/g; > $body .= "\n\$Apache::TestConfig::Argv{'$k'} = q|$v|;\n"; > } > } > > Now, no error and I could proceed with make: > > make > make test > > ... > All tests successful. > Files=242, Tests=2469, 427 wallclock secs ( 4.71 usr 0.94 sys + 372.71 > cusr 45.48 csys = 423.84 CPU) > Result: PASS > [warning] server localhost:8529 shutdown > [warning] port 8529 still in use... > done > cd ModPerl-Registry && make test > make[1]: se ingresa al directorio > `/home/dani/src/mod_perl-2.0.7/ModPerl-Registry' > /home/dani/perl/bin/perl -I../blib/arch -I../blib/lib \ > t/TEST -clean > [warning] setting ulimit to allow core files > ulimit -c unlimited; /home/dani/perl/bin/perl > /home/dani/src/mod_perl-2.0.7/ModPerl-Registry/t/TEST -clean > APACHE_TEST_GROUP= APACHE_TEST_HTTPD= APACHE_TEST_PORT= APACHE_TEST_USER= > APACHE_TEST_APXS= \ > /home/dani/perl/bin/perl -I../blib/arch -I../blib/lib \ > t/TEST -bugreport -verbose=0 > [warning] setting ulimit to allow core files > ulimit -c unlimited; /home/dani/perl/bin/perl > /home/dani/src/mod_perl-2.0.7/ModPerl-Registry/t/TEST -bugreport -verbose=0 > /home/dani/src/httpd-2.2.22/httpd -d > /home/dani/src/mod_perl-2.0.7/ModPerl-Registry/t -f > /home/dani/src/mod_perl-2.0.7/ModPerl-Registry/t/conf/httpd.conf -D APACHE2 > -D PERL_USEITHREADS > using Apache/2.2.22 (prefork MPM) > > waiting 90 seconds for server to start: .... > waiting 90 seconds for server to start: ok (waited 2 secs) > server localhost:8529 started > t/206.t .............. ok > t/304.t .............. ok > t/404.t .............. ok > t/500.t .............. ok > t/bad_scripts.t ...... ok > t/basic.t ............ ok > t/bin_resp.t ......... ok > t/cgi.t .............. ok > t/closure.t .......... ok > t/dirindex.t ......... ok > t/fatalstobrowser.t .. skipped: fatalsToBrowser known not to work, CGI > version 99.99 or higher is required > t/flush.t ............ skipped: cannot find module 'deflate' > t/ithreads.t ......... ok > t/nph.t .............. ok > t/perlrun_extload.t .. ok > t/prefork.t .......... ok > t/redirect.t ......... ok > t/regex.t ............ ok > t/rewrite_env.t ...... skipped: cannot find module 'mod_rewrite.c' > t/special_blocks.t ... ok > All tests successful. > Files=20, Tests=84, 33 wallclock secs ( 0.39 usr 0.09 sys + 26.39 cusr > 3.21 csys = 30.08 CPU) > Result: PASS > [warning] server localhost:8529 shutdown > make[1]: se sale del directorio > `/home/dani/src/mod_perl-2.0.7/ModPerl-Registry' > cd Apache-Reload && make test > make[1]: se ingresa al directorio > `/home/dani/src/mod_perl-2.0.7/Apache-Reload' > /home/dani/perl/bin/perl -I../blib/arch -I../blib/lib \ > t/TEST -clean > [warning] setting ulimit to allow core files > ulimit -c unlimited; /home/dani/perl/bin/perl > /home/dani/src/mod_perl-2.0.7/Apache-Reload/t/TEST -clean > APACHE_TEST_GROUP= APACHE_TEST_HTTPD= APACHE_TEST_PORT= APACHE_TEST_USER= > APACHE_TEST_APXS= \ > /home/dani/perl/bin/perl -I../blib/arch -I../blib/lib \ > t/TEST -bugreport -verbose=0 > [warning] setting ulimit to allow core files > ulimit -c unlimited; /home/dani/perl/bin/perl > /home/dani/src/mod_perl-2.0.7/Apache-Reload/t/TEST -bugreport -verbose=0 > mod_perl 2 was built against Apache sources, we don't know where httpd/apxs > executables are, therefore skipping the test suite execution at > /home/dani/src/mod_perl-2.0.7/Apache-Test/lib/Apache/TestConfig.pm line 371. > make[1]: *** [run_tests] Error 2 > make[1]: se sale del directorio > `/home/dani/src/mod_perl-2.0.7/Apache-Reload' > make: *** [run_subtests] Error 2 > > Again, no apxs needed so I ignore the failure of this last test and proceed > with the install: > > make install > > Finally, some manual testing (from the mod_perl doc) and everything seems > to work: > > Registry Scripts > To enable registry scripts add the following to httpd.conf: > > Alias /perl/ /home/dani/httpd/perl/ > <Location /perl/> > SetHandler perl-script > PerlResponseHandler ModPerl::Registry > PerlOptions +ParseHeaders > Options +ExecCGI > Order allow,deny > Allow from all > </Location> > > and now assuming that we have the following script: > > #!/usr/local/bin/perl5 > print "Content-type: text/plain\n\n"; > print "mod_perl rocks!\n"; > > saved in /home/dani/httpd/perl/rock.pl. Make the script executable and > readable by everybody: > > % chmod a+rx /home/dani/httpd/perl/rock.pl > > Of course the path to the script should be readable by the server too. In > the real world you probably want to have a tighter permissions, but for the > purpose of testing that things are working this is just fine. > > Now restart the server and issue a request to > http://localhost/perl/rock.pland you should get the response: > > mod_perl rocks! > > If that didn't work check the error_log file. > > For more information on the registry scripts refer to the ModPerl::Registry > manpage. (XXX: one day there will a tutorial on registry, should port it > from 1.0's docs). > > > Handler Modules > Finally check that you can run mod_perl handlers. Let's write a response > handler similar to the registry script from the previous section: > > #file:MyApache2/Rocks.pm > #---------------------- > package MyApache2::Rocks; > > use strict; > use warnings; > > use Apache2::RequestRec (); > use Apache2::RequestIO (); > > use Apache2::Const -compile => qw(OK); > > sub handler { > my $r = shift; > > $r->content_type('text/plain'); > print "mod_perl 2.0 rocks!\n"; > > return Apache2::Const::OK; > } > 1; > > Save the code in the file MyApache2/Rocks.pm, somewhere where mod_perl can > find it. For example let's put it under > /home/dani/httpd/perl/MyApache2/Rocks.pm, and we tell mod_perl that > /home/dani/httpd/perl/ is in @INC, via a startup file which includes just: > > use lib qw(/home/dani/httpd/perl); > 1; > > and loaded from httpd.conf: > > PerlRequire /home/dani/httpd/perl/startup.pl > > Now we can configure our module in httpd.conf: > > <Location /rocks> > SetHandler perl-script > PerlResponseHandler MyApache2::Rocks > </Location> > > Now restart the server and issue a request to http://localhost/rocks and > you should get the response: > > mod_perl 2.0 rocks! > > If that didn't work check the error_log file. > > There is no real FAQ on the mod_perl website, but maybe the above could be added to the "Tutorials" section ? It is not very often that someone contributes a real complete installation sequence like this one, and even how to overcome some annoying problems.
|