mirror of
https://github.com/apache/httpd.git
synced 2025-05-28 13:41:30 +03:00
use a review from some people who understand these issues better than I do. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89394 13f79535-47bb-0310-9956-ffa450edef68
533 lines
20 KiB
HTML
533 lines
20 KiB
HTML
<!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 <martin@apache.org>".
|
|
</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><Layout FOO>...</Layout></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>
|