NAME

Installing mod_perl

Description

This chapter provides an indepth mod_perl 2.0 installation coverage.

Prerequisites

The mod_perl 2.0 prerequisites are:

  • Apache

    Apache 2.0 is required. mod_perl 2.0 does not work with Apache 1.3.

  • Perl

    prefork MPM

    Requires at least Perl version 5.6.0. But we strongly suggest to use at least version 5.6.1, since 5.6.0 is quite buggy.

    You don't need to have threads-support enabled in Perl. If you do have it, it must be ithreads and not 5005threads! If you have:

    % perl5.8.0 -V:use5005threads
    use5005threads='define';

    you must rebuild Perl without threads enabled or with -Dusethreads. Remember that threads support slows things down, so don't enable it unless you really need it.

    threaded MPMs

    Require at least Perl version 5.8.0 with ithreads support built-in. That means that it should report:

    % perl5.8.0 -V:useithreads -V:usemultiplicity
    useithreads='define';
    usemultiplicity='define';

    If that's not what you see rebuild Perl with -Dusethreads.

Installing from Source

First of all:

Apache 2.0 doesn't work with mod_perl 1.0.
Apache 1.0 doesn't work with mod_perl 2.0.

XXX: For Win32 specific installation doc here.

Download the httpd-2.0 and modperl-2.0 tarballs, and extract them in the same directory.

Or use anoncvs (password is "anoncvs"):

% cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login
% cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co modperl-2.0
% cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co httpd-2.0
% cd httpd-2.0/srclib
% cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr
% cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co apr-util
% cd ..
% ./buildconf
% ./configure --prefix=$HOME/apache-2.0 --with-mpm=prefork
% make && make install

Once extracted, whenever you want to sync with the latest httpd-2.0 version and rebuild, run:

% cd httpd-2.0
% cvs up -dP
% make distclean && ./buildconf
% ./configure --prefix=$HOME/apache-2.0 --with-mpm=prefork
% make && make install

For bleeding edge Perl:

# (--delete to ensure a clean state)
% rsync -acvz --delete --force \
  rsync://ftp.linux.activestate.com/perl-current/ perl-current
% cd perl-current
% ./Configure -des -Dprefix=$HOME/bleedperl \
  -Dusethreads -Doptimize='-g' -Dusedevel
% make && make test && make install
% ln -s $HOME/bleedperl/bin/perl5.x.x $HOME/bleedperl/bin/perl

or otherwise make sure that your perl was built with threads enabled if you want to use a threaded MPM.

If you are re-building Perl after rsync-ing, make sure to cleanup:

% make distclean

before running ./Configure.

You'll also want to install (at least) LWP into the bleedperl/lib directory if you want to fully test mod_perl, because normally a privately installed bleedperl won't find libraries installed in the normal places; it only looks in it's own lib tree. You can install LWP with CPAN.pm shell:

% $HOME/bleedperl/bin/perl -MCPAN -e 'install("LWP")'

Compiling

Create the build environment

% cd modperl-2.0
% perl Makefile.PL MP_AP_PREFIX=/home/stas/httpd/prefork \
  MP_INST_APACHE2=1
% make

XXX: MP_INST_APACHE2=1 should become the default

options an optional list of (key,value) pairs. Usually you need to use only the MP_AP_PREFIX option to complete the build. This and other options are discussed in the following sections.

Boolean Build Options

The following options are boolean and can be set with MP_XXX=1 or unset with MP_XXX=0, where XXX is the name of the option.

MP_PROMPT_DEFAULT

Accept default values for all would-be prompts.

MP_GENERATE_XS

Generate XS code from parsed source headers in xs/tables/$httpd_version. Default is 1, set to 0 to disable.

MP_USE_DSO

Build mod_perl as a DSO (mod_perl.so). This is the default. It'll be turned off if MP_USE_STATIC=1 is used.

MP_USE_STATIC

Build static mod_perl (mod_perl.a). This is the default. It'll be turned off if MP_USE_DSO=1 is used.

MP_USE_DSO and MP_USE_STATIC are both enabled by default. So mod_perl is built once as mod_perl.a and mod_perl.so, but afterwards you can choose which of the two to use.

META: The following is not implemented yet.

mod_perl and ends up with a src/modules/perl/mod_perl.{so,a} and
src/modules/perl/ldopts.  to link modperl static with httpd, we just
need some config.m4 magic to add `ldopts` and mod_perl.a to the build.
so one could then build httpd like so:

ln -s ~/apache/modperl-2.0/src/modules/perl $PWD/src/modules
./configure --with-mpm=prefork --enable-perl=static ...

we not be configuring/building httpd for the user as 1.x attempted.

downside is one will need to have configured httpd first, so that
headers generated.  so it will probably be more like:

./configure --with-mpm=prefork ...
(go build modperl)
./config.nice --enable-perl=static && make

we could of course provide a wrapper script todo this, but don't want
to have this stuff buried and tangled like it is in 1.x

MP_STATIC_EXTS

Build Apache::*.xs as static extensions.

MP_USE_GTOP

Link with libgtop and enable libgtop reporting.

MP_DEBUG

Turn on debugging (-g -lperld) and tracing.

MP_MAINTAINER

Enable maintainer compile mode, which sets MP_DEBUG=1 and adds the following gcc flags:

-DAP_DEBUG -Wall -Wmissing-prototypes -Wstrict-prototypes \
-Wmissing-declarations \
-DAP_DEBUG -DAP_HAVE_DESIGNATED_INITIALIZER

To use this mode Apache must be build with --enable-maintainer-mode.

MP_TRACE

Enable tracing

MP_INST_APACHE2

Install all the *.pm modules relative to the Apache2/ directory.

Non-Boolean Build Options

set the non-boolen options with MP_XXX=value.

MP_APXS

Path to apxs. For example if you've installed Apache 2.0 under /home/httpd/httpd-2.0 as DSO, the default location would be /home/httpd/httpd-2.0/bin/apxs.

META: this option most likely will go away, use MP_AP_PREFIX

MP_AP_PREFIX

Apache installation prefix, under which the include/ directory with Apache C header files can be found. For example if you've have installed Apache 2.0 in directory \Apache2 on Win32, you should use:

MP_AP_PREFIX=\Apache2

If Apache is not installed yet, you can point to the Apache 2.0 source directory, but only after you've built or configured Apache in it. For example:

MP_AP_PREFIX=/home/stas/apache.org/httpd-2.0

Though in this case make test won't automatically find httpd, therefore you should run t/TEST instead and pass the location of apxs or httpd, e.g.:

% t/TEST -apxs /home/stas/httpd/prefork/bin/apxs

or

% t/TEST -httpd /home/stas/httpd/prefork/bin/httpd

MP_CCOPTS

Add to compiler flags, e.g.:

MP_CCOPTS=-Werror

(Notice that -Werror will work only with the Perl version 5.7 and higher.)

MP_OPTIONS_FILE

Read build options from given file. e.g.:

MP_OPTIONS_FILE=~/.my_mod_perl2_opts

mod_perl-specific Compiler Options

-DMP_IOBUFSIZE

Change the default mod_perl's 8K IO buffer size, e.g. to 16K:

MP_CCOPTS=-DMP_IOBUFSIZE=16384

Options File

Options can also be specified in the file makepl_args.mod_perl2 or .makepl_args.mod_perl2. The file can be placed under $ENV{HOME}, the root of the source package or its parent directory. So if you unpack the mod_perl source into /tmp/mod_perl-2.x/ and your home is /home/foo/, the file will be searched in:

/tmp/mod_perl-2.x/makepl_args.mod_perl2
/tmp/makepl_args.mod_perl2
/home/foo/makepl_args.mod_perl2
/tmp/mod_perl-2.x/.makepl_args.mod_perl2
/tmp/.makepl_args.mod_perl2
/home/foo/.makepl_args.mod_perl2

If the file specified in MP_OPTIONS_FILE is found the makepl_args.mod_perl2 will be ignored.

Options specified on the command line override those from makepl_args.mod_perl2 and those from MP_OPTIONS_FILE.

If your terminal supports colored text you may want to set the environment variable APACHE_TEST_COLOR to 1 to enable the colored tracing which makes it easier to tell the reported errors and warnings, from the rest of the notifications.

Compile mod_perl

% make

Configure and compile Apache

% cd ../httpd-2.0
% ./configure --with-mpm=prefork
% make

Test mod_perl

% make test

Apache::Test Framework document covers the make test suite.

META: probably need to link directly to the 'Running Tests' section.

Howto generate source tables

All mod_perl-2.0 xs code is generated from parsed header files. While in pre-release mode, a version of these tables will be checked in to xs/tables/current. Should you wish to update these tables, here's how:

NOTE: requires C::Scan 0.75, which at the moment is unreleased, there is a working copy here: http://perl.apache.org/~dougm/Scan.pm

NOTE: source_scan.pl is a HEAVY process, do not be alarmed.

% perl build/source_scan.pl apxs $apache_prefix/bin/apxs

META: this is covered in Core Explained should probably move/point there.

Re-using Build Options

Since mod_perl remembers what build options were used to build it, you can use this knowledge to rebuild itself using the same options. Simply chdir(1) to the mod_perl source directory and run:

% cd modperl-2.0
% perl -MApache::Build -e rebuild

Installing from Binary Packages

As of this writing only the binaries for the Win32 platform are available, kindly prepared and maintained by Randy Kobes.

XXX: link to Win32 download doc.

Maintainers

Maintainer is the person(s) you should contact with updates, corrections and patches.

  • Doug MacEachern <dougm (at) covalent.net>

Authors

  • Doug MacEachern <dougm (at) covalent.net>

Only the major authors are listed above. For contributors see the Changes file.