1 <?xml version='1.0' encoding='UTF-8' ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
4 <manualpage metafile="install.xml.meta">
5 <relativepath href="."/>
7 <title>Compiling and Installing</title>
11 <p>This document covers compilation and installation of Apache
12 on Unix and Unix-like systems only. For compiling and
13 installation on Windows, see <a
14 href="platform/windows.html">Using Apache with Microsoft
15 Windows</a>. For other platforms, see the <a
16 href="platform/">platform</a> documentation.</p>
18 <p>Apache 2.0's configuration and installation environment has
19 changed completely from Apache 1.3. Apache 1.3 used a custom
20 set of scripts to achieve easy installation. Apache 2.0 now
21 uses <code>libtool</code> and <code>autoconf</code>
22 to create an environment that looks like many other Open Source
27 <seealso><a href="invoking.html">Starting Apache</a></seealso>
28 <seealso><a href="stopping.html">Stopping and Restarting</a></seealso>
30 <section id="overview"><title>Overview for the
35 <td><a href="#download">Download</a></td>
38 http://www.apache.org/dist/httpd/httpd-2_1_<em>NN</em>.tar.gz</code>
43 <td><a href="#extract">Extract</a></td>
45 <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
46 $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
50 <td><a href="#configure">Configure</a></td>
52 <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
57 <td><a href="#compile">Compile</a></td>
59 <td><code>$ make</code> </td>
63 <td><a href="#install">Install</a></td>
65 <td><code>$ make install</code> </td>
69 <td><a href="#customize">Customize</a></td>
71 <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
75 <td><a href="#test">Test</a></td>
77 <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
82 <p><em>NN</em> must be replaced with the current minor version
83 number, and <em>PREFIX</em> must be replaced with the
84 filesystem path under which the server should be installed. If
85 <em>PREFIX</em> is not specified, it defaults to
86 <code>/usr/local/apache2</code>.</p>
88 <p>Each section of the compilation and installation process is
89 described in more detail below, beginning with the requirements
90 for compiling and installing Apache HTTPD.</p>
93 <section id="requirements"><title>Requirements</title>
95 <p>The following requirements exist for building Apache:</p>
99 <dd>Make sure you have at least 50 MB of temporary free disk
100 space available. After installation Apache occupies
101 approximately 10 MB of disk space. The actual disk space
102 requirements will vary considerably based on your chosen
103 configuration options and any third-party modules.</dd>
105 <dt>ANSI-C Compiler and Build System</dt>
106 <dd>Make sure you have an ANSI-C compiler installed. The <a
107 href="http://www.gnu.org/software/gcc/gcc.html">GNU C
108 compiler (GCC)</a> from the <a
109 href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
110 is recommended (version 2.7.2 is fine). If you don't have GCC
111 then at least make sure your vendor's compiler is ANSI
112 compliant. In addition, your <code>PATH</code> must contain
113 basic build tools such as <code>make</code>.</dd>
115 <dt>Accurate time keeping</dt>
116 <dd>Elements of the HTTP protocol are expressed as the time of
117 day. So, it's time to investigate setting some time
118 synchronization facility on your system. Usually the
119 <code>ntpdate</code> or <code>xntpd</code> programs are used for
120 this purpose which are based on the Network Time Protocol (NTP).
121 See the Usenet newsgroup <a
122 href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
123 and the <a href="http://www.eecis.udel.edu/~ntp/">NTP
124 homepage</a> for more details about NTP software and public
127 <dt><a href="http://www.perl.org/">Perl 5</a>
129 <dd>For some of the support scripts like <a
130 href="programs/apxs.html">apxs</a> or <a
131 href="programs/dbmmanage.html">dbmmanage</a> (which are
132 written in Perl) the Perl 5 interpreter is required (versions
133 5.003 or newer are sufficient). If no such interpreter is found by
134 the `<code>configure</code>' script there is no harm. Of course, you
135 still can build and install Apache 2.0. Only those support scripts
136 cannot be used. If you have multiple Perl interpreters
137 installed (perhaps a Perl 4 from the vendor and a Perl 5 from
138 your own), then it is recommended to use the <code>--with-perl</code>
139 option (see below) to make sure the correct one is selected
140 by <code>./configure</code>.</dd>
144 <section id="download"><title>Download</title>
146 <p>Apache can be downloaded from the <a
147 href="http://httpd.apache.org/download.cgi">Apache HTTP Server
148 download site</a> which lists several mirrors. You'll find here
149 the latest stable release.</p>
151 <p>After downloading, especially if a mirror site is used, it
152 is important to verify that you have a complete and unmodified
153 version of the Apache HTTP Server. This can be accomplished by
154 testing the downloaded tarball against the PGP signature. This,
155 in turn, is a two step procedure. First, you must obtain the
156 <a href="http://www.apache.org/dist/httpd/KEYS"><code>KEYS</code></a>
157 file from the Apache distribution site, too. (To assure that the
158 <code>KEYS</code> file itself has not been modified, it may be a good
159 idea to use a file from a previous distribution of Apache or import
160 the keys from a public key server.) The keys are imported into
161 your personal key ring using one of the following commands (depending
162 on your pgp version):</p>
164 <example>$ pgp < KEYS</example>
168 <example>$ gpg --import KEYS</example>
170 <p>The next step is to test the tarball against the PGP
171 signature, which should always be obtained from the <a
172 href="http://httpd.apache.org/download.cgi">main Apache
173 website</a>. A link to the signature file is placed behind the
174 corresponding download link or may be found in the particular
175 directory at the <a href="http://www.apache.org/dist/httpd/">Apache
176 distribution site</a>. Its filename is identical to the source
177 tarball with the addition of <code>.asc</code>. Then you can check
178 the distribution with one of the following commands (again,
179 depending on your pgp version):</p>
181 <example>$ pgp httpd-2_1_<em>NN</em>.tar.gz.asc</example>
185 <example>$ gpg --verify httpd-2_1_<em>NN</em>.tar.gz.asc</example>
187 <p>You should receive a message like</p>
189 <example>Good signature from user "Martin Kraemer
190 <martin@apache.org>".</example>
192 <p>Depending on the trust relationships contained in your key
193 ring, you may also receive a message saying that the
194 relationship between the key and the signer of the key cannot
195 be verified. This is not a problem if you trust the
196 authenticity of the <code>KEYS</code> file.</p>
200 <section id="extract"><title>Extract</title>
202 <p>Extracting the source from the Apache HTTPD tarball is a
203 simple matter of uncompressing, and then untarring:</p>
206 $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
207 $ tar xvf httpd-2_1_<em>NN</em>.tar
210 <p>This will create a new directory under the current directory
211 containing the source code for the distribution. You should
212 <code>cd</code> into that directory before proceeding with
213 compiling the server.</p>
216 <section id="configure"><title>Configuring the source tree</title>
218 <p>The next step is to configure the Apache source tree for
219 your particular platform and personal requirements. This is
220 done using the script <code>configure</code> included in the
221 root directory of the distribution. (Developers downloading the
222 CVS version of the Apache source tree will need to have
223 <code>autoconf</code> and <code>libtool</code> installed and
224 will need to run <code>buildconf</code> before proceeding with
225 the next steps. This is not necessary for official
228 <p>To configure the source tree using all the default options,
229 simply type <code>./configure</code>. To change the default
230 options, <code>configure</code> accepts a variety of variables
231 and command line options. Environment variables are generally
232 placed before the <code>./configure</code> command, while other
233 options are placed after. The most important option here is the
234 location prefix where Apache is to be installed later, because
235 Apache has to be configured for this location to work
236 correctly. But there are a lot of other options available for
239 <p>For a short impression of what possibilities you have, here
240 is a typical example which compiles Apache for the installation
241 tree <code>/sw/pkg/apache</code> with a particular compiler and flags
242 plus the two additional modules <module>mod_rewrite</module> and
243 <module>mod_speling</module> for
244 later loading through the DSO mechanism:</p>
247 $ CC="pgcc" CFLAGS="-O2" \<br />
248 ./configure --prefix=/sw/pkg/apache \<br />
249 --enable-rewrite=shared \<br />
250 --enable-speling=shared
253 <p>When <code>configure</code> is run it will take several minutes to
254 test for the availability of features on your system and build
255 Makefiles which will later be used to compile the server.</p>
257 <p>The easiest way to find all of the configuration flags for
258 Apache is to run <code>./configure --help</code>. What follows is a
259 brief description of most of the arguments and environment
262 <section id="environment"><title>Environment Variables</title>
264 <p>The <code>autoconf</code> build process uses several environment
265 variables to configure the build environment. In general, these
266 variables change the method used to build Apache, but not the
267 eventual features of the server. These variables can be placed
268 in the environment before invoking <code>configure</code>, but
269 it is usually easier to specify them on the
270 <code>configure</code> command line as demonstrated in the
274 <dt><code>CC=...</code></dt>
276 <dd>The name of the C compiler command.</dd>
278 <dt><code>CPPFLAGS=...</code></dt>
280 <dd>Miscellaneous C preprocessor and compiler options.</dd>
282 <dt><code>CFLAGS=...</code></dt>
284 <dd>Debugging and optimization options for the C
287 <dt><code>LDFLAGS=...</code></dt>
289 <dd>Miscellaneous options to be passed to the linker.</dd>
291 <dt><code>LIBS=...</code></dt>
293 <dd>Library location information ("<code>-L</code>" and
294 "<code>-l</code>" options) to pass to the linker.</dd>
296 <dt><code>INCLUDES=...</code></dt>
298 <dd>Header file search directories ("<code>-I<em>dir</em></code>").</dd>
300 <dt><code>TARGET=...</code> [Default: <code>apache</code>]</dt>
302 <dd>Name of the executable which will be built.</dd>
304 <dt><code>NOTEST_CPPFLAGS=...</code></dt>
306 <dt><code>NOTEST_CFLAGS=...</code></dt>
308 <dt><code>NOTEST_LDFLAGS=...</code></dt>
310 <dt><code>NOTEST_LIBS=...</code></dt>
312 <dd>These variables share the same function as their
313 non-<code>NOTEST</code> namesakes. However, the variables are
314 applied to the build process only after autoconf has performed its
315 feature testing. This allows the inclusion of flags which
316 will cause problems during feature testing, but must be used
317 for the final compilation.</dd>
319 <dt><code>SHLIB_PATH=...</code></dt>
321 <dd>Options which specify shared library paths for the
322 compiler and linker.</dd>
326 <section id="output"><title>autoconf Output Options</title>
329 <dt><code>--help</code></dt>
331 <dd>Prints the usage message including all available options,
332 but does not actually configure anything.</dd>
334 <dt><code>--quiet</code></dt>
336 <dd>Prevents the printing of the usual "<code>checking...</code>"
339 <dt><code>--verbose</code></dt>
341 <dd>Prints much more information during the configuration
342 process, including the names of all the files examined.</dd>
346 <section id="pathnames"><title>Pathnames</title>
348 <p>There are currently two ways to configure the pathnames
349 under which Apache will install its files. First, you can
350 specify a directory and have Apache install itself under that
351 directory in its default locations.</p>
354 <dt><code>--prefix=<em>PREFIX</em></code> [Default:
355 <code>/usr/local/apache2</code>]</dt>
357 <dd>Specifies the directory under which the Apache files will
361 <p>It is possible to specify that architecture-dependent files
362 should be placed under a different directory.</p>
365 <dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
366 <code><em>PREFIX</em></code>]</dt>
368 <dd>Specifies the directory under which
369 architecture-dependent files will be placed.</dd>
372 <p>The second, and more flexible way to configure the install
373 path locations for Apache is using the
374 <code>config.layout</code> file. Using this method, it is
375 possible to separately specify the location for each type of
376 file within the Apache installation. The
377 <code>config.layout</code> file contains several example
378 configurations, and you can also create your own custom
379 configuration following the examples. The different layouts in
380 this file are grouped into <code><Layout
381 FOO>...</Layout></code> sections and referred to by
382 name as in <code>FOO</code>.</p>
385 <dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
387 <dd>Use the named layout in the <code>config.layout</code>
388 file to specify the installation paths.</dd>
393 <section id="modules"><title>Modules</title>
395 <p>Apache is a modular server. Only the most basic
396 functionality is included in the core server. Extended features
397 are available in various modules. During the configuration
398 process, you must select which modules to compile for use with
399 your server. You can view a <a
400 href="mod/">list of modules</a> included in
401 the documentation. Those modules with a <a
402 href="mod/module-dict.html#Status">status</a> of "Base" are
403 included by default and must be specifically disabled if you do
404 not want them (e.g. <module>mod_userdir</module>). Modules with any
405 other status must be specifically enabled if you wish to use them
406 (e.g. <module>mod_expires</module>).</p>
408 <p>There are two ways for a module to be compiled and used with
409 Apache. Modules may be <em>statically compiled</em>, which
410 means that they are permanently included in the Apache binary.
411 Alternatively, if your operating system supports Dynamic Shared
412 Objects (DSOs) and <code>autoconf</code> can detect that support, then
413 modules may be <em>dynamically compiled</em>. DSO modules are
414 stored separately from the Apache binary, and may be included
415 or excluded from the server using the run-time configuration
416 directives provided by <module>mod_so</module>.
417 The mod_so is automatically included in the server if any
418 dynamic modules are included in the compilation. If you would
419 like to make your server capable of loading DSOs without
420 actually compiling any dynamic modules, you can explicitly
421 <code>--enable-so</code>.</p>
424 <dt><code>--enable-<em>MODULE</em>[=shared]</code></dt>
426 <dd>Compile and include the module <em>MODULE</em>. The
427 identifier <em>MODULE</em> is the <a
428 href="mod/module-dict.html#ModuleIdentifier">Module
429 Identifier</a> from the module documentation without the
430 "_module" string. To compile the module as a DSO, add the
431 option <code>=shared</code>.</dd>
433 <dt><code>--disable-<em>MODULE</em></code></dt>
435 <dd>Remove the module <em>MODULE</em> which would otherwise
436 be compiled and included.</dd>
438 <dt><code>--enable-modules=<em>MODULE-LIST</em></code></dt>
440 <dd>Compile and include the modules listed in the
441 space-separated <em>MODULE-LIST</em>.</dd>
444 <code>--enable-mods-shared=<em>MODULE-LIST</em></code></dt>
446 <dd>Compile and include the modules in the space-separated
447 <em>MODULE-LIST</em> as dynamically loadable (DSO)
451 <p>The <em>MODULE-LIST</em> in the
452 <code>--enable-modules</code> and
453 <code>--enable-mods-shared</code> options is usually a
454 space-separated list of module identifiers. For example, to
455 enable <module>mod_dav</module> and <module>mod_info</module>,
456 you can either use</p>
458 <example>./configure --enable-dav --enable-info</example>
460 <p>or, equivalently,</p>
462 <example>./configure --enable-modules="dav info"</example>
464 <p>In addition, the special keywords <code>all</code> or
465 <code>most</code> can be used to add all or most of the modules
466 in one step. You can then remove any modules that you do not
467 want with the <code>--disable-<em>MODULE</em></code> option.
468 For example, to include all modules as DSOs with the exception
469 of <module>mod_info</module>, you can use</p>
472 ./configure --enable-mods-shared=all
476 <p>In addition to the standard set of modules, Apache 2.0 also
477 includes a choice of <a href="mpm.html">Multi-Processing
478 Modules</a> (MPMs). One, and only one MPM must be included in
479 the compilation process. The default MPMs for each platform are
480 listed on the <a href="mpm.html">MPM documentation page</a>,
481 but can be overridden on the <code>configure</code> command
485 <dt><code>--with-mpm=<em>NAME</em></code></dt>
487 <dd>Choose the mpm <em>NAME</em>.</dd>
490 <p>To activate an MPM called <var>mpm_name</var>, you can use</p>
493 ./configure --with-mpm=<var>mpm_name</var>
498 <section id="dbm"><title>DBM</title>
500 <p>Several Apache features, including
501 <module>mod_authn_dbm</module> and <module>mod_rewrite</module>'s
502 DBM <directive module="mod_rewrite">RewriteMap</directive> use
503 simple key/value databases for quick lookups of information. Apache
504 includes SDBM with its source-code, so this database is always
505 available. If you would like to use other database types, the
506 following <code>configure</code> options are available:</p>
509 <dt><code>--with-gdbm[=<em>path</em>]</code></dt>
510 <dt><code>--with-ndbm[=<em>path</em>]</code></dt>
511 <dt><code>--with-berkeley-db[=<em>path</em>]</code></dt>
513 <dd>If no <em>path</em> is specified, Apache will search for the
514 include files and libraries in the usual search paths. An explicit
515 <em>path</em> will cause Apache to look in
516 <em>path</em><code>/lib</code> and
517 <em>path</em><code>/include</code> for the relevant files. Finally,
518 the <em>path</em> may specify specific include and library paths
519 separated by a colon.</dd>
524 <section id="suexec"><title>Suexec</title>
526 <p>Apache includes a support program called <a
527 href="suexec.html">suexec</a> which can be used to isolate user
528 CGI programs. However, if suexec is improperly configured, it
529 can cause serious security problems. Therefore, you should
530 carefully read and consider the <a href="suexec.html">suexec
531 documentation</a> before implementing this feature.</p>
535 <section id="compile"><title>Build</title>
537 <p>Now you can build the various parts which form the Apache
538 package by simply running the command:</p>
540 <example>$ make</example>
542 <p>Please be patient here, since a base configuration takes
543 approximately 3 minutes to compile under a Pentium III/Linux
544 2.2 system, but this will vary widely depending on your
545 hardware and the number of modules which you have enabled.</p>
548 <section id="install"><title>Install</title>
550 <p>Now its time to install the package under the configured
551 installation <em>PREFIX</em> (see <code>--prefix</code> option
552 above) by running:</p>
554 <example>$ make install</example>
556 <p>If you are upgrading, the installation will not overwrite
557 your configuration files or documents.</p>
560 <section id="customize"><title>Customize</title>
562 <p>Next, you can customize your Apache HTTP server by editing
563 the <a href="configuring.html">configuration files</a> under
564 <code><em>PREFIX</em>/conf/</code>.</p>
566 <example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
568 <p>Have a look at the Apache manual under <a
569 href="./">docs/manual/</a> or consult <a
570 href="http://httpd.apache.org/docs-2.1/"
571 >http://httpd.apache.org/docs-2.1/</a> for the most recent version of
572 this manual and a complete reference of available <a
573 href="mod/directives.html">configuration directives</a>.</p>
576 <section id="test"><title>Test</title>
578 <p>Now you can <a href="invoking.html">start</a> your Apache
579 HTTP server by immediately running:</p>
581 <example>$ <em>PREFIX</em>/bin/apachectl start</example>
583 <p>and then you should be able to request your first document
584 via URL <code>http://localhost/</code>. The web page you see is located
585 under the <directive module="core">DocumentRoot</directive>
586 which will usually be <code><em>PREFIX</em>/htdocs/</code>.
587 Then <a href="stopping.html">stop</a> the server again by
590 <example>$ <em>PREFIX</em>/bin/apachectl stop</example>