| <!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> |