Introduction to mod_perl (part 3): Non-privileged Install - Manual Local mod_perl Enabled Apache Installation (
Page 3 of 4 )
Now when we have learned how to install local Apache and Perl modules
separately, let's see how to install mod_perl enabled Apache in our home
directory. It's almost as simple as doing each one separately, but there is one
wrinkle you need to know about which I'll mention at the end of this
section.
Let's say you have unpacked the Apache and mod_perl sources
under
/home/stas/src and they look like this:
% ls /home/stas/src
/home/stas/src/apache_x.x.x
/home/stas/src/mod_perl-x.xx
where
x.xx are the version numbers as usual. You want
the Perl modules from the mod_perl package to be installed under
/home/stas/lib/perl5 and the Apache files to go under
/home/stas/apache. The following commands will do that for you:
% perl Makefile.PL \
PREFIX=/home/stas \
APACHE_PREFIX=/home/stas/apache \
APACHE_SRC=../apache_x.x.x/src \
DO_HTTPD=1 \
USE_APACI=1 \
EVERYTHING=1
% make && make test && make install
% cd ../apache_x.x.x
% make install
If you need some parameters to be passed to the
.configure script, as we saw in the previous section use
APACI_ARGS. For example:
APACI_ARGS='--sbindir=/home/stas/apache/sbin, \
--sysconfdir=/home/stas/apache/etc, \
--localstatedir=/home/stas/apache/var, \
--runtimedir=/home/stas/apache/var/run, \
--logfiledir=/home/stas/apache/var/logs, \
--proxycachedir=/home/stas/apache/var/proxy'
Note that the above multiline splitting will work only with
bash,
tcsh users will have to list all the parameters on a single
line.
Basically the installation is complete. The only remaining problem
is the
@INC variable. This won't be correctly set if you rely on the
PERL5LIB environment variable unless you set it explicitly in a startup
file which is
require'd before loading any other module that resides in
your local repository. A much nicer approach is to use the
lib pragma as
we saw before, but in a slightly different way--we use it in the startup file
and it affects all the code that will be executed under mod_perl handlers. For
example:
PerlRequire /home/stas/apache/perl/startup.pl
where
startup.pl starts with:
use lib qw(/home/stas/lib/perl5/5.00503/
/home/stas/lib/perl5/site_perl/5.005);
Note that you can still use the hard-coded
@INC
modifications in the scripts themselves, but be aware that scripts modify
@INC in
BEGIN blocks and mod_perl executes the
BEGIN blocks
only when it performs script compilation. As a result,
@INC will be reset
to its original value after the scripts are compiled and the hard-coded settings
will be forgotten.
The only place you can alter the "original" value is
during the server configuration stage either in the startup file or by putting
PerlSetEnv Perl5LIB \
/home/stas/lib/perl5/5.00503/:/home/stas/lib/perl5/site_perl/5.005
in
httpd.conf, but the latter setting will be ignored
if you use the
PerlTaintcheck setting, and I hope you do use
it.
The rest of the mod_perl configuration and use is just the same as if
you were installing mod_perl as superuser.{mospagebreak title=Local mod_perl
Enabled Apache Installation with CPAN.pm} Assuming that you have configured
CPAN.pm to install Perl modules locally as explained earlier in this
article, the installation is very simple. Start the
CPAN.pm shell, set
the arguments to be passed to
perl Makefile.PL (modify the example
setting to suit your needs), and tell
CPAN.pm to do the rest for you:
% perl -MCPAN -eshell
cpan> o conf makepl_arg 'DO_HTTPD=1 USE_APACI=1 EVERYTHING=1 \
PREFIX=/home/stas APACHE_PREFIX=/home/stas/apache'
cpan> install mod_perl
When you use
CPAN.pm for local installations, after
the mod_perl installation is complete you must make sure that the value of
makepl_arg is restored to its original value.
The simplest way to
do this is to quit the interactive shell by typing
quit and reenter it.
But if you insist here is how to make it work without quitting the shell. You
really want to skip this :)
If you want to continue working with
CPAN *without* quitting the shell, you must:
- remember the value of makepl_arg
- change it to suit your new installation
- build and install mod_perl
- restore it after completing mod_perl installation
this is quite a
cumbersome task as of this writing, but I believe that
CPAN.pm will
eventually be improved to handle this more easily.
So if you are still
with me, start the shell as usual:
% perl -MCPAN -eshell
First, read the value of the
makepl_arg:
cpan> o conf makepl_arg
PREFIX=/home/stas
It will be something like
PREFIX=/home/stas if you
configured
CPAN.pm to install modules locally. Save this value:
cpan> o conf makepl_arg.save PREFIX=/home/stas
Second, set a new value, to be used by the mod_perl
installation process. (You can add parameters to this line, or remove them,
according to your needs.)
cpan> o conf makepl_arg 'DO_HTTPD=1 USE_APACI=1 EVERYTHING=1 \
PREFIX=/home/stas APACHE_PREFIX=/home/stas/apache'
Third, let
CPAN.pm build and install mod_perl for you:
cpan> install mod_perl
Fourth, reset the original value to
makepl_arg. We do
this by printing the value of the saved variable and assigning it to
makepl_arg.
cpan> o conf makepl_arg.save
PREFIX=/home/stas
cpan> o conf makepl_arg PREFIX=/home/stas
Not so neat, but a working solution. You could have written
the value on a piece of paper instead of saving it to
makepl_arg.save,
but you are more likely to make a mistake that way.