perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Susan <su...@buczak.us>
Subject Re: [mod_perl2]: Install error with Makefile.PL - uninitialized value at TestRun.pm
Date Mon, 16 Jul 2012 20:03:55 GMT
 

Ok. I finally got it to glue together with apache 2.2.22, perl
5.14.2, and mod_perl 2.0.7. The perl can probably be upgraded to newest.


However, mod_perl 2.0.7 will NOT do a static build (as daniel states
below, tho that looks real good otherwise) with large file support
enabled and no perl thread support enabled. It throws constant errors in
various places -> error: unknown type name 'off64_t'. 

So it appears it
has to be built as a dso under those circumstances, and that goes pretty
smoothly with httpd installed first, --with-mpm=prefork and any other
apache options enabled, as a dso it or something else can be unloaded
anyway if memory issues with ssl, for instance, are an issue as the
mod_perl (1) docs state. 

Fred's patch is a lifesaver, so patch first:


Index:
lib/Apache/TestRun.pm
===================================================================
---
lib/Apache/TestRun.pm(revision 1359945)
+++
lib/Apache/TestRun.pm(working copy)
@@ -1097,6 +1097,9 @@

 my %args =
@Apache::TestMM::Argv;
 while (my($k, $v) = each %args) {
+ unless
(defined $v) {
+ die "key $k has no value";
+ }
 $v =~ s/|/\|/g;
 $body
.= "n$Apache::TestConfig::Argv{'$k'} = q|$v|;n";
 } 

and the makefile
cmd I used is: 

[mod_perl-2.0.7 ]# perl Makefile.PL MP_USE_DSO=1
MP_APR_CONFIG=/usr/local/bin/apr-1-config MP_APXS=/srv/httpd/sbin/apxs


configures without error, 'make' without error, 'make test' without
error, and then 'make install'. 

thanks for your help! 

Susan


============================================================= 

On
2012-07-15 09:40, 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 [1] /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 "-->
$kn";
> print "---> $vn";
> $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/
> 
> SetHandler perl-script
> PerlResponseHandler
ModPerl::Registry
> PerlOptions +ParseHeaders
> Options +ExecCGI
> Order
allow,deny
> Allow from all 
> 
> and now assuming that we have the
following script:
> 
> #!/usr/local/bin/perl5
> print "Content-type:
text/plainnn";
> print "mod_perl rocks!n";
> 
> saved in
/home/dani/httpd/perl/rock.pl [2]. Make the script executable and
readable by everybody:
> 
> % chmod a+rx /home/dani/httpd/perl/rock.pl
[3]
> 
> 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.pl [4] and 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 [5]
> 
> Now we can configure our
module in httpd.conf:
> 
> SetHandler perl-script
> PerlResponseHandler
MyApache2::Rocks
> 
> Now restart the server and issue a request to
http://localhost/rocks [6] and you should get the response:
> 
>
mod_perl 2.0 rocks!
> 
> If that didn't work check the error_log file.
>

> Cheers,
> Dani

 

Links:
------
[1] http://perl_version_links.pl
[2]
http://rock.pl
[3] http://rock.pl
[4] http://localhost/perl/rock.pl
[5]
http://startup.pl
[6] http://localhost/rocks

Mime
View raw message