blob: 8d8f4178af93664a54e47fc5dbd47fa589f6a566 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Compiling and Installing Apache</TITLE>
</HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<BODY
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#000080"
ALINK="#FF0000"
>
<!--#include virtual="header.html" -->
<H1 ALIGN="CENTER">Compiling and Installing</H1>
<p>This document covers compilation and installation of Apache on Unix
and Unix-like systems only. For compiling and installation on Windows,
see <A HREF="platform/windows.html">Using Apache with Microsoft
Windows</A>. For other platforms, see the <a
href="platform/">platform</a> documentation.</p>
<p>Apache 2.0's configuration and installation environment has changed
completely from Apache 1.3. Apache 1.3 used a custom set of scripts
to achieve easy installation. Apache 2.0 now uses libtool and
autoconf to create an environment that looks like many other Open
Source projects.</p>
<ul>
<li><a href="#overview">Overview for the impatient</a></li>
<li><a href="#requirements">Requirements</a></li>
<li><a href="#download">Download</a></li>
<li><a href="#extract">Extract</a></li>
<li><a href="#configure">Configuring the source tree</a>
<ul>
<li><a href="#environment">Environment Variables</a></li>
<li><a href="#output">autoconf Output Options</a></li>
<li><a href="#pathnames">Pathnames</a></li>
<li><a href="#modules">Modules</a></li>
<li><a href="#suexec">Suexec</a></li>
</ul></li>
<li><a href="#compile">Build</a></li>
<li><a href="#install">Install</a></li>
<li><a href="#customize">Customize</a></li>
<li><a href="#test">Test</a></li>
</ul>
<hr>
<h3><a name="overview">Overview for the impatient</a></h3>
<table>
<tr><td><a href="#download">Download</a></td>
<td><code>$ lynx http://www.apache.org/dist/httpd/httpd-2_0_<em>NN</em>.tar.gz
</code></td></tr>
<tr><td><a href="#extract">Extract</a></td>
<td><code>$ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br>
$ tar xvf httpd-2_0_<em>NN</em>.tar
</code></td></tr>
<tr><td><a href="#configure">Configure</a></td>
<td><code>$ ./configure --prefix=<em>PREFIX</em>
</code></td></tr>
<tr><td><a href="#compile">Compile</a></td>
<td><code>$ make
</code></td></tr>
<tr><td><a href="#install">Install</a></td>
<td><code>$ make install
</code></td></tr>
<tr><td><a href="#customize">Customize</a></td>
<td><code>$ vi <em>PREFIX</em>/conf/httpd.conf
</code></td></tr>
<tr><td><a href="#test">Test</a></td>
<td><code>$ <em>PREFIX</em>/bin/apachectl start
</code></td></tr>
</table>
<p><em>NN</em> must be replaced with the current minor version number,
and <em>PREFIX</em> must be replaced with the filesystem path under
which the server should be installed. If <em>PREFIX</em> is not
specified, it defaults to <code>/usr/local/apache2</code>.</p>
<p>Each section of the compilation and installation process is
described in more detail below, beginning with the requirements
for compiling and installing Apache HTTPD.</p>
<h3><a name="requirements">Requirements</a></h3>
<p>The following requirements exist for building Apache:</p>
<ul>
<li>Disk Space<br><br> Make sure you have at least 50 MB of temporary
free disk space available. After installation Apache occupies
approximately 10 MB of disk space. The actual disk space requirements
will vary considerably based on your chosen configuration options and
any third-party modules.<br><br></li>
<li>ANSI-C Compiler and Build System<br><br> Make sure you have an
ANSI-C compiler installed. The <a
href="http://www.gnu.org/software/gcc/gcc.html">GNU C compiler
(GCC)</a> from the <a href="http://www.gnu.org/">Free Software
Foundation (FSF)</a> is recommended (version 2.7.2 is fine). If you
don't have GCC then at least make sure your vendor's compiler is ANSI
compliant. In addition, your <code>PATH</code> must contain basic
build tools such as <code>make</code>.<br><br></li>
<li>Accurate time keeping<br><br> Elements of the HTTP protocol are
expressed as the time of day. So, it's time to investigate setting
some time synchronization facility on your system. Usually the ntpdate
or xntpd programs are used for this purpose which are based on the
Network Time Protocol (NTP). See the Usenet newsgroup <a
href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a> and
the <a href="http://www.eecis.udel.edu/~ntp/">NTP homepage</a> for more
details about NTP software and public time servers.<br><br></li>
<li><a href="http://www.perl.org/">Perl 5</a> [OPTIONAL]<br><br> For
some of the support scripts like <a href="programs/apxs.html">apxs</a>
or <a href="programs/dbmmanage.html">dbmmanage</a> (which are written
in Perl) the Perl 5 interpreter is required (versions 5.003 and 5.004
are fine). If no such interpreter is found by the `configure' script
there is no harm. Of course, you still can build and install Apache
2.0. Only those support scripts cannot be used. If you have multiple
Perl interpreters installed (perhaps a Perl 4 from the vendor and a
Perl 5 from your own), then it is recommended to use the --with-perl
option (see below) to make sure the correct one is selected by
./configure. <br><br></li>
</ul>
<h3><a name="download">Download</a></h3>
<p>Apache can be downloaded from the <a
href="http://www.apache.org/dist/httpd/">Apache Software Foundation
download site</a> or from a <a
href="http://www.apache.org/dyn/closer.cgi">nearby mirror</a>.</p>
<p>Version numbers that end in <code>alpha</code> indicate early
pre-test versions which may or may not work. Version numbers ending
in <code>beta</code> indicate more reliable releases that still
require further testing or bug fixing. If you wish to download the
best available production release of the Apache HTTP Server, you
should choose the latest version with neither <code>alpha</code> nor
<code>beta</code> in its filename.</p>
<p>After downloading, especially if a mirror site is used, it is
important to verify that you have a complete and unmodified version of
the Apache HTTP Server. This can be accomplished by testing the
downloaded tarball against the PGP signature. This, in turn, is a two
step procedure. First, you must obtain the <code>KEYS</code> file
from the <a href="http://www.apache.org/dist/">Apache distribution
site</a>. (To assure that the <code>KEYS</code> file itself has not
been modified, it may be a good idea to use a file from a previous
distribution of Apache or import the keys from a public key server.)
The keys are imported into your personal key ring using
one of the following commands (depending on your pgp version):</p>
<blockquote><code>
$ pgp < KEYS
</code></blockquote>
or
<blockquote><code>
$ gpg --import KEYS
</code></blockquote>
<p>The next step is to test the tarball against the PGP signature,
which should always be obtained from the <a
href="http://www.apache.org/dist/httpd">main Apache website</a>. The
signature file has a filename identical to the source tarball with the
addition of <code>.asc</code>. Then you can check the distribution
with one of the following commands (again, depending on your pgp
version):</p>
<blockquote><code>
$ pgp httpd-2_0_<em>NN</em>.tar.gz.asc
</code></blockquote>
or
<blockquote><code>
$ gpg --verify httpd-2_0_<em>NN</em>.tar.gz.asc
</code></blockquote
<p>You should receive a message like</p>
<blockquote><code>
Good signature from user "Martin Kraemer &lt;martin@apache.org&gt;".
</code></blockquote>
<p>Depending on the trust relationships contained
in your key ring, you may also receive a message saying that
the relationship between the key and the signer of the key
cannot be verified. This is not a problem if you trust the
authenticity of the <code>KEYS</code> file.</p>
<h3><a name="extract">Extract</a></h3>
<p>Extracting the source from the Apache HTTPD tarball is a simple
matter of uncompressing, and then untarring:</p>
<blockquote><code>
$ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br>
$ tar xvf httpd-2_0_<em>NN</em>.tar
</code></blockquote>
<p>This will create a new directory under the current directory
containing the source code for the distribution. You should
<code>cd</code> into that directory before proceeding with
compiling the server.</p>
<h3><a name="configure">Configuring the source tree</a></h3>
<p>The next step is to configure the Apache source tree for your
particular platform and personal requirements. This is done using the
script <code>configure</code> included in the root directory of the
distribution. (Developers downloading the CVS version of the Apache
source tree will need to have <code>autoconf</code> and
<code>libtool</code> installed and will need to run
<code>buildconf</code> before proceeding with the next steps. This is
not necessary for official releases.)</p>
<p>To configure the source tree using all the default options, simply
type <code>./configure</code>. To change the default options,
<code>configure</code> accepts a variety of variables and command line
options. Environment variables are generally placed before the
<code>./configure</code> command, while other options are placed
after. The most important option here is the location prefix where
Apache is to be installed later, because Apache has to be configured
for this location to work correctly. But there are a lot of other
options available for your pleasure.</p>
<p>For a short impression of what possibilities you have, here is a
typical example which compiles Apache for the installation tree
/sw/pkg/apache with a particular compiler and flags plus the two
additional modules mod_rewrite and mod_speling for later loading
through the DSO mechanism:</p>
<blockquote><code>
$ CC="pgcc" CFLAGS="-O2" \<br>
./configure --prefix=/sw/pkg/apache \<br>
--enable-rewrite=shared \<br>
--enable-speling=shared
</code></blockquote>
<p>When configure is run it will take several minutes to test for
the availability of features on your system and build Makefiles
which will later be used to compile the server.</p>
<p>The easiest way to find all of the configuration flags for Apache
is to run ./configure --help. What follows is a brief description
of most of the arguments and environment variables.</p>
<h4><a name="environment">Environment Variables</a></h4>
<p>The autoconf build process uses several environment variables to
configure the build environment. In general, these variables change
the method used to build Apache, but not the eventual features of the
server. These variables can be placed in the environment before
invoking <code>configure</code>, but it is usually easier to specify
them on the <code>configure</code> command line as demonstrated
in the example above.</p>
<dl>
<dt><code>CC=...</code></dt>
<dd>The name of the C compiler command.</dd>
<dt><code>CPPFLAGS=...</code></dt> <dd>Miscellaneous C preprocessor
and compiler options.</dd>
<dt><code>CFLAGS=...</code></dt>
<dd>Debugging and optimization options for the C compiler.</dd>
<dt><code>LDFLAGS=...</code></dt>
<dd>Miscellaneous options to be passed to the linker.</dd>
<dt><code>LIBS=...</code></dt>
<dd>Library location information ("-L" and "-l" options)
to pass to the linker.</dd>
<dt><code>INCLUDES=...</code></dt>
<dd>Header file search directories ("-I<em>dir</em>").</dd>
<dt><code>TARGET=...</code> [Default: apache]</dt>
<dd>Name of the executable which will be built.</dd>
<dt><code>NOTEST_CPPFLAGS=...</code></dt>
<dt><code>NOTEST_CFLAGS=...</code></dt>
<dt><code>NOTEST_LDFLAGS=...</code></dt>
<dt><code>NOTEST_LIBS=...</code></dt>
<dd>These variables share the same function as their non-NOTEST namesakes.
However, the variables are applied to the build process only after
autoconf has performed its feature testing. This allows the inclusion of
flags which will cause problems during feature testing, but must be used
for the final compilation.</dd>
<dt><code>SHLIB_PATH=...</code></dt>
<dd>Options which specify shared library paths for the compiler and
linker.</dd>
</dl>
<h4><a name="output">autoconf Output Options</a></h4>
<dl>
<dt><code>--help</code></dt>
<dd>Prints the usage message including all available options, but
does not actually configure anything.</dd>
<dt><code>--quiet</code></dt>
<dd>Prevents the printing of the usual "checking..." messages.</dd>
<dt><code>--verbose</code></dt>
<dd>Prints much more information during the configuration process,
including the names of all the files examined.</dd>
</dl>
<h4><a name="pathnames">Pathnames</a></h4>
<p>There are currently two ways to configure the pathnames under
which Apache will install its files. First, you can specify
a directory and have Apache install itself under that directory
in its default locations.</p>
<dl>
<dt><code>--prefix=<em>PREFIX</em></code> [Default:
/usr/local/apache2]</dt>
<dd>Specifies the directory under which the Apache files will be
installed.</dd>
</dl>
<p>It is possible to specify that architecture-dependent files should
be placed under a different directory.</p>
<dl>
<dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
<em>PREFIX</em>]</dt>
<dd>Specifies the directory under which architecture-dependent files
will be placed.</dd>
</dl>
<p>The second, and more flexible way to configure the install path
locations for Apache is using the <code>config.layout</code> file.
Using this method, it is possible to separately specify the location
for each type of file within the Apache installation. The
<code>config.layout</code> file contains several example
configurations, and you can also create your own custom configuration
following the examples. The different layouts in this file are
grouped into <code>&lt;Layout FOO&gt;...&lt;/Layout&gt;</code>
sections and referred to by name as in <code>FOO</code>.</p>
<dl>
<dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
<dd>Use the named layout in the <code>config.layout</code> file
to specify the installation paths.</dd>
</dl>
<p>Presently it is not possible to mix the
<code>--enable-layout</code> and <code>--prefix</code> options. Nor
is it possible to individually specify detailed pathnames on the
<code>configure</code> command line. If you want just a basic
install, you can simply use the <code>--prefix</code> option on its
own. If you want to customize your install, you should edit the
<code>config.layout</code> file and use the
<code>--enable-layout</code> option.</p>
<h4><a name="modules">Modules</a></h4>
<p>Apache is a modular server. Only the most basic functionality is
included in the core server. Extended features are available in
various modules. During the configuration process, you must select
which modules to compile for use with your server. You can view a <a
href="mod/index-bytype.html">list of modules</a> included in the
documentation. Those modules with a <a
href="mod/module-dict.html#Status">status</a>
of "Base" are included by default and must be specifically disabled if
you do not want them. Modules with any other status must be
specifically enabled if you wish to use them.</p>
<p>There are two ways for a module to be compiled and used with
Apache. Modules may be <em>statically compiled</em>, which means that
they are permanently included in the Apache binary. Alternatively, if
your operating system supports Dynamic Shared Objects (DSOs) and
autoconf can detect that support, then modules may be <em>dynamically
compiled</em>. DSO modules are stored separately from the Apache
binary, and may be included or excluded from the server using the
run-time configuration directives provided by <a
href="mod/mod_so.html">mod_so</a>. The mod_so is automatically
included in the server if any dynamic modules are included in the
compilation. If you would like to make your server capable of loading
DSOs without actually compiling any dynamic modules, you can
explicitly <code>--enable-so</code>.</p>
<dl>
<dt><code>--enable-<em>MODULE</em>[=shared]</code></dt> <dd>Compile
and include the module <em>MODULE</em>. The identifier
<em>MODULE</em> is the <a
href="mod/module-dict.html#ModuleIdentifier"
>Module Identifier</a> from the module documentation without the
"_module" string. To compile the module as a DSO, add the
option <code>=shared</code>.</dd>
<dt><code>--disable-<em>MODULE</em></code></dt>
<dd>Remove the module <em>MODULE</em> which would otherwise be
compiled and included.</dd>
<dt><code>--enable-modules=<em>MODULE-LIST</em></code> <dd>Compile and
include the modules listed in the space-separated
<em>MODULE-LIST</em>.</dd>
<dt><code>--enable-mods-shared=<em>MODULE-LIST</em></code> <dd>Compile
and include the modules in the space-separated <em>MODULE-LIST</em> as
dynamically loadable (DSO) modules.</dd>
</dl>
<p>The <em>MODULE-LIST</em> in the <code>--enable-modules</code> and
<code>--enable-mods-shared</code> options is usually a space-separated list
of module identifiers. For example, to enable mod_dav and mod_info, you
can either use</p>
<blockquote><code>
./configure --enable-dav --enable-info
</code></blockquote>
<p>or, equivalently,</p>
<blockquote><code>
./configure --enable-modules="dav info"
</code></blockquote>
<p>In addition, the special keywords <code>all</code>
or <code>most</code> can be used to add all or most of the modules
in one step. You can then remove any modules that you do not want
with the <code>--disable-<em>MODULE</em></code> option. For example,
to include all modules as DSOs with the exception of mod_info, you can use</p>
<blockquote><code>
./configure --enable-mods-shared=all --disable-info
</code></blockquote>
<p>In addition to the standard set of modules, Apache 2.0 also
includes a choice of <a href="mpm.html">Multi-Processing Modules</a>
(MPMs). One, and only one MPM must be included in the compilation
process. The default MPMs for each platform are listed on the <a
href="mpm.html">MPM documentation page</a>, but can be overridden
on the <code>configure</code> command line.
<dl>
<dt><code>--with-mpm=<em>NAME</em></code></dt>
<dd>Choose the mpm <em>NAME</em>.
</dl>
<h4><a name="suexec">Suexec</a></h4>
<p>Apache includes a support program called <a
href="suexec.html">suexec</a> which can be used to isolate user CGI
programs. However, if suexec is improperly configured, it can cause
serious security problems. Therefore, you should carefully read and
consider the <a href="suexec.html">suexec documentation</a> before
implementing this feature.</p>
<h3><a name="compile">Build</a></h3>
<p>Now you can build the various parts which form the Apache package
by simply running the command:</p>
<blockquote><code>
$ make
</code></blockquote>
<p>Please be patient here, since a base configuration takes
approximately 3 minutes to compile under a Pentium III/Linux 2.2
system, but this will vary widely depending on your hardware and the
number of modules which you have enabled.</p>
<h3><a name="install">Install</a></h3>
<p>Now its time to install the package under the configured
installation <em>PREFIX</em> (see <code>--prefix</code> option above)
by running:</h3> <blockquote><code> $ make install
</code></blockquote>
<p>If you are upgrading, the installation will not overwrite
your configuration files or documents.</p>
<h3><a name="customize">Customize</a></h3>
<p>Next, you can customize your Apache HTTP server by editing the <a
href="configuring.html">configuration files</a> under
<em>PREFIX</em>/conf/.</p>
<blockquote><code>
$ vi <em>PREFIX</em>/conf/httpd.conf
</code></blockquote>
<p>Have a look at the Apache manual under <a
href="./">docs/manual/</a> or <a
href="http://httpd.apache.org/docs/">http://httpd.apache.org/docs/</a>
for a complete reference of available <a
href="mod/directives.html">configuration directives</a>.</p>
<h3><a name="test">Test</a></h3>
<p>Now you can <a href="invoking.html">start</a> your Apache HTTP
server by immediately running:</p>
<blockquote><code>
$ <em>PREFIX</em>/bin/apachectl start
</code></blockquote>
<p>and then you should be able to request your first document via URL
http://localhost/. The web page you see is located under the <a
href="mod/core.html#documentroot">DocumentRoot</a> which will usually
be <code><em>PREFIX</em>/htdocs/</code>. Then <a
href="stopping.html">stop</a> the server again by running:</p>
<blockquote><code> $ <em>PREFIX</em>/bin/apachectl stop
</code></blockquote>
<!--#include virtual="footer.html" -->
</BODY>
</HTML>