| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <meta name="generator" content="HTML Tidy, see www.w3.org" /> |
| |
| <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 id="overview" 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 id="requirements" |
| 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 id="download" 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/httpd/">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> |
| You should receive a message like<br /> |
| <br /> |
| |
| |
| <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 id="extract" 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 id="configure" 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 id="environment" 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 id="output" 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 id="pathnames" 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 id="modules" 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></dt> |
| |
| <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></dt> |
| |
| <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.</p> |
| |
| <dl> |
| <dt><code>--with-mpm=<em>NAME</em></code></dt> |
| |
| <dd>Choose the mpm <em>NAME</em>.</dd> |
| </dl> |
| |
| <h4><a id="suexec" 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 id="compile" 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 id="install" 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:</p> |
| |
| <blockquote> |
| <code>$ make install</code> |
| </blockquote> |
| |
| <p>If you are upgrading, the installation will not overwrite |
| your configuration files or documents.</p> |
| |
| <h3><a id="customize" 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 id="test" 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> |
| |