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 Thu, 26 Jul 2012 01:49:45 GMT
 

yes thank you, but I am not using threads! 

my dev server is
already kind of low on memory all the time.. but I will save this for
future reference, thanks! 

On 2012-07-25 15:16, Daniel Boerner wrote:


> Responding to Susan (about not a static build with large file
support, thread support...) here my
> perl5 -V:
> 
> Summary of my perl5
(revision 5 version 14 subversion 2) configuration:
> 
> Platform:
>
osname=linux, osvers=2.6.32-5-amd64,
archname=x86_64-linux-thread-multi
> uname='linux oak 2.6.32-5-amd64 #1
smp sun may 6 04:00:17 utc 2012 x86_64 gnulinux '
> config_args='-des
-Dprefix=/home/dani/perl -Dusethreads'
> hint=recommended,
useposix=true, d_sigaction=define
> useithreads=define,
usemultiplicity=define
> useperlio=define, d_sfio=undef,
uselargefiles=define, usesocks=undef
> use64bitint=define,
use64bitall=define, uselongdouble=undef
> usemymalloc=n,
bincompat5005=undef
> Compiler:
> cc='cc', ccflags ='-D_REENTRANT
-D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
>
optimize='-O2',
> cppflags='-D_REENTRANT -D_GNU_SOURCE
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
>
ccversion='', gccversion='4.4.5', gccosandvers=''
> intsize=4,
longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
>
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
>
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
> alignbytes=8, prototype=define
> Linker and Libraries:
>
ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
>
libpth=/usr/local/lib /lib/../lib /usr/lib/../lib /lib /usr/lib /lib64
/usr/lib64
> libs=-lnsl -lgdbm -ldl -lm -lcrypt -lutil -lpthread -lc
-lgdbm_compat
> perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
>
libc=/lib/libc-2.11.3.so [7], so=so, useshrplib=false,
libperl=libperl.a
> gnulibc_version='2.11.3'
> Dynamic Linking:
>
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
>
cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib
-fstack-protector'
> 
> Characteristics of this binary (from libperl):

> Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
>
PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
> PERL_PRESERVE_IVUV
USE_64_BIT_ALL USE_64_BIT_INT
> USE_ITHREADS USE_LARGE_FILES USE_PERLIO
USE_PERL_ATOF
> USE_REENTRANT_API
> Built under linux
> Compiled at Jul
8 2012 12:59:50
> @INC:
>
/home/dani/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi
>
/home/dani/perl/lib/site_perl/5.14.2
>
/home/dani/perl/lib/5.14.2/x86_64-linux-thread-multi
>
/home/dani/perl/lib/5.14.2
> .
> 
> Best,
> Daniel
> 
> 2012/7/16 Susan
<susan@buczak.us [8]>
> 
>> 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
[7]
http://libc-2.11.3.so
[8] mailto:susan@buczak.us

Mime
View raw message