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"?>
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 libtool and autoconf to create an environment that looks
22 like many other Open Source projects.</p>
26 <section id="overview"><title>Overview for the
31 <td><a href="#download">Download</a></td>
34 http://www.apache.org/dist/httpd/httpd-2_0_<em>NN</em>.tar.gz</code>
39 <td><a href="#extract">Extract</a></td>
41 <td><code>$ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br />
42 $ tar xvf httpd-2_0_<em>NN</em>.tar</code> </td>
46 <td><a href="#configure">Configure</a></td>
48 <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
53 <td><a href="#compile">Compile</a></td>
55 <td><code>$ make</code> </td>
59 <td><a href="#install">Install</a></td>
61 <td><code>$ make install</code> </td>
65 <td><a href="#customize">Customize</a></td>
67 <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
71 <td><a href="#test">Test</a></td>
73 <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
78 <p><em>NN</em> must be replaced with the current minor version
79 number, and <em>PREFIX</em> must be replaced with the
80 filesystem path under which the server should be installed. If
81 <em>PREFIX</em> is not specified, it defaults to
82 <code>/usr/local/apache2</code>.</p>
84 <p>Each section of the compilation and installation process is
85 described in more detail below, beginning with the requirements
86 for compiling and installing Apache HTTPD.</p>
89 <section id="requirements"><title>Requirements</title>
91 <p>The following requirements exist for building Apache:</p>
96 Make sure you have at least 50 MB of temporary free disk
97 space available. After installation Apache occupies
98 approximately 10 MB of disk space. The actual disk space
99 requirements will vary considerably based on your chosen
100 configuration options and any third-party modules.<br />
104 <li>ANSI-C Compiler and Build System<br />
106 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>.<br />
117 <li>Accurate time keeping<br />
119 Elements of the HTTP protocol are expressed as the time of
120 day. So, it's time to investigate setting some time
121 synchronization facility on your system. Usually the ntpdate
122 or xntpd programs are used for this purpose which are based
123 on the Network Time Protocol (NTP). See the Usenet newsgroup
125 href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
126 and the <a href="http://www.eecis.udel.edu/~ntp/">NTP
127 homepage</a> for more details about NTP software and public
132 <li><a href="http://www.perl.org/">Perl 5</a>
135 For some of the support scripts like <a
136 href="programs/apxs.html">apxs</a> or <a
137 href="programs/dbmmanage.html">dbmmanage</a> (which are
138 written in Perl) the Perl 5 interpreter is required (versions
139 5.003 or newer are sufficient). If no such interpreter is found by
140 the `configure' script there is no harm. Of course, you still
141 can build and install Apache 2.0. Only those support scripts
142 cannot be used. If you have multiple Perl interpreters
143 installed (perhaps a Perl 4 from the vendor and a Perl 5 from
144 your own), then it is recommended to use the --with-perl
145 option (see below) to make sure the correct one is selected
146 by ./configure.<br />
152 <section id="download"><title>Download</title>
154 <p>Apache can be downloaded from the <a
155 href="http://www.apache.org/dist/httpd/">Apache Software
156 Foundation download site</a> or from a <a
157 href="http://www.apache.org/dyn/closer.cgi/httpd/">nearby
160 <p>Version numbers that end in <code>alpha</code> indicate
161 early pre-test versions which may or may not work. Version
162 numbers ending in <code>beta</code> indicate more reliable
163 releases that still require further testing or bug fixing. If
164 you wish to download the best available production release of
165 the Apache HTTP Server, you should choose the latest version
166 with neither <code>alpha</code> nor <code>beta</code> in its
169 <p>After downloading, especially if a mirror site is used, it
170 is important to verify that you have a complete and unmodified
171 version of the Apache HTTP Server. This can be accomplished by
172 testing the downloaded tarball against the PGP signature. This,
173 in turn, is a two step procedure. First, you must obtain the
174 <code>KEYS</code> file from the <a
175 href="http://www.apache.org/dist/httpd/">Apache distribution
176 site</a>. (To assure that the <code>KEYS</code> file itself has
177 not been modified, it may be a good idea to use a file from a
178 previous distribution of Apache or import the keys from a
179 public key server.) The keys are imported into your personal
180 key ring using one of the following commands (depending on your
183 <example>$ pgp < KEYS</example>
187 <example>$ gpg --import KEYS</example>
189 <p>The next step is to test the tarball against the PGP
190 signature, which should always be obtained from the <a
191 href="http://www.apache.org/dist/httpd/">main Apache
192 website</a>. The signature file has a filename identical to the
193 source tarball with the addition of <code>.asc</code>. Then you
194 can check the distribution with one of the following commands
195 (again, depending on your pgp version):</p>
197 <example>$ pgp httpd-2_0_<em>NN</em>.tar.gz.asc</example>
201 <example>$ gpg --verify httpd-2_0_<em>NN</em>.tar.gz.asc</example>
203 <p>You should receive a message like</p>
205 <example>Good signature from user "Martin Kraemer
206 <martin@apache.org>".</example>
208 <p>Depending on the trust relationships contained in your key
209 ring, you may also receive a message saying that the
210 relationship between the key and the signer of the key cannot
211 be verified. This is not a problem if you trust the
212 authenticity of the <code>KEYS</code> file.</p>
216 <section id="extract"><title>Extract</title>
218 <p>Extracting the source from the Apache HTTPD tarball is a
219 simple matter of uncompressing, and then untarring:</p>
222 $ gzip -d httpd-2_0_<em>NN</em>.tar.gz<br />
223 $ tar xvf httpd-2_0_<em>NN</em>.tar
226 <p>This will create a new directory under the current directory
227 containing the source code for the distribution. You should
228 <code>cd</code> into that directory before proceeding with
229 compiling the server.</p>
232 <section id="configure"><title>Configuring the source tree</title>
234 <p>The next step is to configure the Apache source tree for
235 your particular platform and personal requirements. This is
236 done using the script <code>configure</code> included in the
237 root directory of the distribution. (Developers downloading the
238 CVS version of the Apache source tree will need to have
239 <code>autoconf</code> and <code>libtool</code> installed and
240 will need to run <code>buildconf</code> before proceeding with
241 the next steps. This is not necessary for official
244 <p>To configure the source tree using all the default options,
245 simply type <code>./configure</code>. To change the default
246 options, <code>configure</code> accepts a variety of variables
247 and command line options. Environment variables are generally
248 placed before the <code>./configure</code> command, while other
249 options are placed after. The most important option here is the
250 location prefix where Apache is to be installed later, because
251 Apache has to be configured for this location to work
252 correctly. But there are a lot of other options available for
255 <p>For a short impression of what possibilities you have, here
256 is a typical example which compiles Apache for the installation
257 tree /sw/pkg/apache with a particular compiler and flags plus
258 the two additional modules mod_rewrite and mod_speling for
259 later loading through the DSO mechanism:</p>
262 $ CC="pgcc" CFLAGS="-O2" \<br />
263 ./configure --prefix=/sw/pkg/apache \<br />
264 --enable-rewrite=shared \<br />
265 --enable-speling=shared
268 <p>When configure is run it will take several minutes to test
269 for the availability of features on your system and build
270 Makefiles which will later be used to compile the server.</p>
272 <p>The easiest way to find all of the configuration flags for
273 Apache is to run ./configure --help. What follows is a brief
274 description of most of the arguments and environment
277 <section id="environment"><title>Environment Variables</title>
279 <p>The autoconf build process uses several environment
280 variables to configure the build environment. In general, these
281 variables change the method used to build Apache, but not the
282 eventual features of the server. These variables can be placed
283 in the environment before invoking <code>configure</code>, but
284 it is usually easier to specify them on the
285 <code>configure</code> command line as demonstrated in the
289 <dt><code>CC=...</code></dt>
291 <dd>The name of the C compiler command.</dd>
293 <dt><code>CPPFLAGS=...</code></dt>
295 <dd>Miscellaneous C preprocessor and compiler options.</dd>
297 <dt><code>CFLAGS=...</code></dt>
299 <dd>Debugging and optimization options for the C
302 <dt><code>LDFLAGS=...</code></dt>
304 <dd>Miscellaneous options to be passed to the linker.</dd>
306 <dt><code>LIBS=...</code></dt>
308 <dd>Library location information ("-L" and "-l" options) to
309 pass to the linker.</dd>
311 <dt><code>INCLUDES=...</code></dt>
313 <dd>Header file search directories ("-I<em>dir</em>").</dd>
315 <dt><code>TARGET=...</code> [Default: apache]</dt>
317 <dd>Name of the executable which will be built.</dd>
319 <dt><code>NOTEST_CPPFLAGS=...</code></dt>
321 <dt><code>NOTEST_CFLAGS=...</code></dt>
323 <dt><code>NOTEST_LDFLAGS=...</code></dt>
325 <dt><code>NOTEST_LIBS=...</code></dt>
327 <dd>These variables share the same function as their
328 non-NOTEST namesakes. However, the variables are applied to
329 the build process only after autoconf has performed its
330 feature testing. This allows the inclusion of flags which
331 will cause problems during feature testing, but must be used
332 for the final compilation.</dd>
334 <dt><code>SHLIB_PATH=...</code></dt>
336 <dd>Options which specify shared library paths for the
337 compiler and linker.</dd>
341 <section id="output"><title>autoconf Output Options</title>
344 <dt><code>--help</code></dt>
346 <dd>Prints the usage message including all available options,
347 but does not actually configure anything.</dd>
349 <dt><code>--quiet</code></dt>
351 <dd>Prevents the printing of the usual "checking..."
354 <dt><code>--verbose</code></dt>
356 <dd>Prints much more information during the configuration
357 process, including the names of all the files examined.</dd>
361 <section id="pathnames"><title>Pathnames</title>
363 <p>There are currently two ways to configure the pathnames
364 under which Apache will install its files. First, you can
365 specify a directory and have Apache install itself under that
366 directory in its default locations.</p>
369 <dt><code>--prefix=<em>PREFIX</em></code> [Default:
370 /usr/local/apache2]</dt>
372 <dd>Specifies the directory under which the Apache files will
376 <p>It is possible to specify that architecture-dependent files
377 should be placed under a different directory.</p>
380 <dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
381 <em>PREFIX</em>]</dt>
383 <dd>Specifies the directory under which
384 architecture-dependent files will be placed.</dd>
387 <p>The second, and more flexible way to configure the install
388 path locations for Apache is using the
389 <code>config.layout</code> file. Using this method, it is
390 possible to separately specify the location for each type of
391 file within the Apache installation. The
392 <code>config.layout</code> file contains several example
393 configurations, and you can also create your own custom
394 configuration following the examples. The different layouts in
395 this file are grouped into <code><Layout
396 FOO>...</Layout></code> sections and referred to by
397 name as in <code>FOO</code>.</p>
400 <dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
402 <dd>Use the named layout in the <code>config.layout</code>
403 file to specify the installation paths.</dd>
408 <section id="modules"><title>Modules</title>
410 <p>Apache is a modular server. Only the most basic
411 functionality is included in the core server. Extended features
412 are available in various modules. During the configuration
413 process, you must select which modules to compile for use with
414 your server. You can view a <a
415 href="mod/index.html">list of modules</a> included in
416 the documentation. Those modules with a <a
417 href="mod/module-dict.html#Status">status</a> of "Base" are
418 included by default and must be specifically disabled if you do
419 not want them. Modules with any other status must be
420 specifically enabled if you wish to use them.</p>
422 <p>There are two ways for a module to be compiled and used with
423 Apache. Modules may be <em>statically compiled</em>, which
424 means that they are permanently included in the Apache binary.
425 Alternatively, if your operating system supports Dynamic Shared
426 Objects (DSOs) and autoconf can detect that support, then
427 modules may be <em>dynamically compiled</em>. DSO modules are
428 stored separately from the Apache binary, and may be included
429 or excluded from the server using the run-time configuration
430 directives provided by <module>mod_so</module>.
431 The mod_so is automatically included in the server if any
432 dynamic modules are included in the compilation. If you would
433 like to make your server capable of loading DSOs without
434 actually compiling any dynamic modules, you can explicitly
435 <code>--enable-so</code>.</p>
438 <dt><code>--enable-<em>MODULE</em>[=shared]</code></dt>
440 <dd>Compile and include the module <em>MODULE</em>. The
441 identifier <em>MODULE</em> is the <a
442 href="mod/module-dict.html#ModuleIdentifier">Module
443 Identifier</a> from the module documentation without the
444 "_module" string. To compile the module as a DSO, add the
445 option <code>=shared</code>.</dd>
447 <dt><code>--disable-<em>MODULE</em></code></dt>
449 <dd>Remove the module <em>MODULE</em> which would otherwise
450 be compiled and included.</dd>
452 <dt><code>--enable-modules=<em>MODULE-LIST</em></code></dt>
454 <dd>Compile and include the modules listed in the
455 space-separated <em>MODULE-LIST</em>.</dd>
458 <code>--enable-mods-shared=<em>MODULE-LIST</em></code></dt>
460 <dd>Compile and include the modules in the space-separated
461 <em>MODULE-LIST</em> as dynamically loadable (DSO)
465 <p>The <em>MODULE-LIST</em> in the
466 <code>--enable-modules</code> and
467 <code>--enable-mods-shared</code> options is usually a
468 space-separated list of module identifiers. For example, to
469 enable mod_dav and mod_info, you can either use</p>
471 <example>./configure --enable-dav --enable-info</example>
473 <p>or, equivalently,</p>
475 <example>./configure --enable-modules="dav info"</example>
477 <p>In addition, the special keywords <code>all</code> or
478 <code>most</code> can be used to add all or most of the modules
479 in one step. You can then remove any modules that you do not
480 want with the <code>--disable-<em>MODULE</em></code> option.
481 For example, to include all modules as DSOs with the exception
482 of mod_info, you can use</p>
485 ./configure --enable-mods-shared=all
489 <p>In addition to the standard set of modules, Apache 2.0 also
490 includes a choice of <a href="mpm.html">Multi-Processing
491 Modules</a> (MPMs). One, and only one MPM must be included in
492 the compilation process. The default MPMs for each platform are
493 listed on the <a href="mpm.html">MPM documentation page</a>,
494 but can be overridden on the <code>configure</code> command
498 <dt><code>--with-mpm=<em>NAME</em></code></dt>
500 <dd>Choose the mpm <em>NAME</em>.</dd>
504 <section id="dbm"><title>DBM</title>
506 <p>Several Apache features, including
507 <module>mod_auth_dbm</module> and <module>mod_rewrite</module>'s
508 DBM <directive module="mod_rewrite">RewriteMap</directive> use
509 simple key/value databases for quick lookups of information. Apache
510 includes SDBM with its source-code, so this database is always
511 available. If you would like to use other database types, the
512 following <code>configure</code> options are available:</p>
515 <dt><code>--with-gdbm[=<em>path</em>]</code></dt>
516 <dt><code>--with-ndbm[=<em>path</em>]</code></dt>
517 <dt><code>--with-berkeley-db[=<em>path</em>]</code></dt>
519 <dd>If no <em>path</em> is specified, Apache will search for the
520 include files and libraries in the usual search paths. An explict
521 <em>path</em> will cause Apache to look in
522 <em>path</em><code>/lib</code> and
523 <em>path</em><code>/include</code> for the relevant files. Finally,
524 the <em>path</em> may specify specific include and library paths
525 seperated by a colon.</dd>
530 <section id="suexec"><title>Suexec</title>
532 <p>Apache includes a support program called <a
533 href="suexec.html">suexec</a> which can be used to isolate user
534 CGI programs. However, if suexec is improperly configured, it
535 can cause serious security problems. Therefore, you should
536 carefully read and consider the <a href="suexec.html">suexec
537 documentation</a> before implementing this feature.</p>
541 <section id="compile"><title>Build</title>
543 <p>Now you can build the various parts which form the Apache
544 package by simply running the command:</p>
546 <example>$ make</example>
548 <p>Please be patient here, since a base configuration takes
549 approximately 3 minutes to compile under a Pentium III/Linux
550 2.2 system, but this will vary widely depending on your
551 hardware and the number of modules which you have enabled.</p>
554 <section id="install"><title>Install</title>
556 <p>Now its time to install the package under the configured
557 installation <em>PREFIX</em> (see <code>--prefix</code> option
558 above) by running:</p>
560 <example>$ make install</example>
562 <p>If you are upgrading, the installation will not overwrite
563 your configuration files or documents.</p>
566 <section id="customize"><title>Customize</title>
568 <p>Next, you can customize your Apache HTTP server by editing
569 the <a href="configuring.html">configuration files</a> under
570 <em>PREFIX</em>/conf/.</p>
572 <example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
574 <p>Have a look at the Apache manual under <a
575 href="./">docs/manual/</a> or <a
576 href="http://httpd.apache.org/docs/">http://httpd.apache.org/docs-2.0/</a>
577 for a complete reference of available <a
578 href="mod/directives.html">configuration directives</a>.</p>
581 <section id="test"><title>Test</title>
583 <p>Now you can <a href="invoking.html">start</a> your Apache
584 HTTP server by immediately running:</p>
586 <example>$ <em>PREFIX</em>/bin/apachectl start</example>
588 <p>and then you should be able to request your first document
589 via URL http://localhost/. The web page you see is located
590 under the <directive module="core">DocumentRoot</directive>
591 which will usually be <code><em>PREFIX</em>/htdocs/</code>.
592 Then <a href="stopping.html">stop</a> the server again by
595 <example>$ <em>PREFIX</em>/bin/apachectl stop</example>