Installing mod_perl without superuser privileges
by Stas Bekman
|
Pages: 1, 2, 3
Making a Local Apache Installation
Just like with Perl modules, if you don't have permissions to install files into the system area, then you have to install them locally under your home directory. It's almost the same as a plain installation, but you have to run the server listening to a port number greater than 1024, since only root processes can listen to lower-numbered ports.
Another important issue you have to resolve is how to add startup and shutdown scripts to the directories used by the rest of the system services. You will have to ask your system administrator to assist you with this issue.
To install Apache locally, all you have to do is to tell .configure
in the Apache source directory what target directories to use. If you
are following the convention that I use, which makes your home
directory look like the / (base) directory, then the invocation
parameters would be:
./configure --prefix=/home/stas
Apache will use the prefix for the rest of its target directories
instead of the default /usr/local/apache. If you want to see what
they are, then before you proceed add the --show-layout option:
./configure --prefix=/home/stas --show-layout
You might want to put all the Apache files under /home/stas/apache
following Apache's convention:
./configure --prefix=/home/stas/apache
If you want to modify some or all of the names of the automatically created directories:
./configure --prefix=/home/stas/apache \
--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
That's all!
Also remember that you can start the script only under a user and
group you belong to. You must set the User and Group directives
in httpd.conf to appropriate values.
Manual Local mod_perl Enabled Apache Installation
Now that 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 that 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, then 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 multi-line 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 that 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 remainder of the mod_perl configuration and use is just the same as if you were installing mod_perl as a superuser.
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
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 re-entering it. But if you insist, then 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, then you must:
|
Previously in the Series |
- 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, then 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.
References
- The Apache site's URL: http://www.apache.org
- The mod_perl site's URL: http://perl.apache.org
- CPAN is the Comprehensive Perl Archive Network. The Master site's URL is http://cpan.org/. CPAN is mirrored at more than 100 sites worldwide. (http://cpan.org/SITES.html)

