Re: [mod_perl2]: Install error with M akefile.PL - uninitialized value at TestRun.pm

Susan <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
 

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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.