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">
6 <title>Compiling and Installing</title>
10 <p>This document covers compilation and installation of Apache
11 on Unix and Unix-like systems only. For compiling and
12 installation on Windows, see <a
13 href="platform/windows.html">Using Apache with Microsoft
14 Windows</a>. For other platforms, see the <a
15 href="platform/">platform</a> documentation.</p>
17 <p>Apache 2.0's configuration and installation environment has
18 changed completely from Apache 1.3. Apache 1.3 used a custom
19 set of scripts to achieve easy installation. Apache 2.0 now
20 uses <code>libtool</code> and <code>autoconf</code>
21 to create an environment that looks like many other Open Source
24 <p>If you are upgrading from one minor version to the next (for
25 example, 2.0.50 to 2.0.51), please skip down to the <a
26 href="#upgrading">upgrading</a> section.</p>
30 <seealso><a href="invoking.html">Starting Apache</a></seealso>
31 <seealso><a href="stopping.html">Stopping and Restarting</a></seealso>
33 <section id="overview"><title>Overview for the
37 <columnspec><column width=".13"/><column width=".80"/></columnspec>
39 <td><a href="#download">Download</a></td>
42 http://www.apache.org/dist/httpd/httpd-2_1_<em>NN</em>.tar.gz</code>
47 <td><a href="#extract">Extract</a></td>
49 <td><code>$ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
50 $ tar xvf httpd-2_1_<em>NN</em>.tar</code> </td>
54 <td><a href="#configure">Configure</a></td>
56 <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
61 <td><a href="#compile">Compile</a></td>
63 <td><code>$ make</code> </td>
67 <td><a href="#install">Install</a></td>
69 <td><code>$ make install</code> </td>
73 <td><a href="#customize">Customize</a></td>
75 <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
79 <td><a href="#test">Test</a></td>
81 <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
86 <p><em>NN</em> must be replaced with the current minor version
87 number, and <em>PREFIX</em> must be replaced with the
88 filesystem path under which the server should be installed. If
89 <em>PREFIX</em> is not specified, it defaults to
90 <code>/usr/local/apache2</code>.</p>
92 <p>Each section of the compilation and installation process is
93 described in more detail below, beginning with the requirements
94 for compiling and installing Apache HTTPD.</p>
97 <section id="requirements"><title>Requirements</title>
99 <p>The following requirements exist for building Apache:</p>
103 <dd>Make sure you have at least 50 MB of temporary free disk
104 space available. After installation Apache occupies
105 approximately 10 MB of disk space. The actual disk space
106 requirements will vary considerably based on your chosen
107 configuration options and any third-party modules.</dd>
109 <dt>ANSI-C Compiler and Build System</dt>
110 <dd>Make sure you have an ANSI-C compiler installed. The <a
111 href="http://www.gnu.org/software/gcc/gcc.html">GNU C
112 compiler (GCC)</a> from the <a
113 href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
114 is recommended (version 2.7.2 is fine). If you don't have GCC
115 then at least make sure your vendor's compiler is ANSI
116 compliant. In addition, your <code>PATH</code> must contain
117 basic build tools such as <code>make</code>.</dd>
119 <dt>Accurate time keeping</dt>
120 <dd>Elements of the HTTP protocol are expressed as the time of
121 day. So, it's time to investigate setting some time
122 synchronization facility on your system. Usually the
123 <code>ntpdate</code> or <code>xntpd</code> programs are used for
124 this purpose which are based on the Network Time Protocol (NTP).
125 See the Usenet newsgroup <a
126 href="news:comp.protocols.time.ntp">comp.protocols.time.ntp</a>
127 and the <a href="http://www.eecis.udel.edu/~ntp/">NTP
128 homepage</a> for more details about NTP software and public
131 <dt><a href="http://www.perl.org/">Perl 5</a>
133 <dd>For some of the support scripts like <a
134 href="programs/apxs.html">apxs</a> or <a
135 href="programs/dbmmanage.html">dbmmanage</a> (which are
136 written in Perl) the Perl 5 interpreter is required (versions
137 5.003 or newer are sufficient). If no such interpreter is found by
138 the `<code>configure</code>' script there is no harm. Of course, you
139 still can build and install Apache 2.0. Only those support scripts
140 cannot be used. If you have multiple Perl interpreters
141 installed (perhaps a Perl 4 from the vendor and a Perl 5 from
142 your own), then it is recommended to use the <code>--with-perl</code>
143 option (see below) to make sure the correct one is selected
144 by <code>./configure</code>.</dd>
148 <section id="download"><title>Download</title>
150 <p>Apache can be downloaded from the <a
151 href="http://httpd.apache.org/download.cgi">Apache HTTP Server
152 download site</a> which lists several mirrors. You'll find here
153 the latest stable release.</p>
155 <p>After downloading, especially if a mirror site is used, it
156 is important to verify that you have a complete and unmodified
157 version of the Apache HTTP Server. This can be accomplished by
158 testing the downloaded tarball against the PGP signature. This,
159 in turn, is a two step procedure. First, you must obtain the
160 <a href="http://www.apache.org/dist/httpd/KEYS"><code>KEYS</code></a>
161 file from the Apache distribution site, too. (To assure that the
162 <code>KEYS</code> file itself has not been modified, it may be a good
163 idea to use a file from a previous distribution of Apache or import
164 the keys from a public key server.) The keys are imported into
165 your personal key ring using one of the following commands (depending
166 on your pgp version):</p>
168 <example>$ pgp < KEYS</example>
172 <example>$ gpg --import KEYS</example>
174 <p>The next step is to test the tarball against the PGP
175 signature, which should always be obtained from the <a
176 href="http://httpd.apache.org/download.cgi">main Apache
177 website</a>. A link to the signature file is placed behind the
178 corresponding download link or may be found in the particular
179 directory at the <a href="http://www.apache.org/dist/httpd/">Apache
180 distribution site</a>. Its filename is identical to the source
181 tarball with the addition of <code>.asc</code>. Then you can check
182 the distribution with one of the following commands (again,
183 depending on your pgp version):</p>
185 <example>$ pgp httpd-2_1_<em>NN</em>.tar.gz.asc</example>
189 <example>$ gpg --verify httpd-2_1_<em>NN</em>.tar.gz.asc</example>
191 <p>You should receive a message like</p>
193 <example>Good signature from user "Martin Kraemer
194 <martin@apache.org>".</example>
196 <p>Depending on the trust relationships contained in your key
197 ring, you may also receive a message saying that the
198 relationship between the key and the signer of the key cannot
199 be verified. This is not a problem if you trust the
200 authenticity of the <code>KEYS</code> file.</p>
204 <section id="extract"><title>Extract</title>
206 <p>Extracting the source from the Apache HTTPD tarball is a
207 simple matter of uncompressing, and then untarring:</p>
210 $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
211 $ tar xvf httpd-2_1_<em>NN</em>.tar
214 <p>This will create a new directory under the current directory
215 containing the source code for the distribution. You should
216 <code>cd</code> into that directory before proceeding with
217 compiling the server.</p>
220 <section id="configure"><title>Configuring the source tree</title>
222 <p>The next step is to configure the Apache source tree for
223 your particular platform and personal requirements. This is
224 done using the script <code>configure</code> included in the
225 root directory of the distribution. (Developers downloading the
226 CVS version of the Apache source tree will need to have
227 <code>autoconf</code> and <code>libtool</code> installed and
228 will need to run <code>buildconf</code> before proceeding with
229 the next steps. This is not necessary for official
232 <p>To configure the source tree using all the default options,
233 simply type <code>./configure</code>. To change the default
234 options, <code>configure</code> accepts a variety of variables
235 and command line options. Environment variables are generally
236 placed before the <code>./configure</code> command, while other
237 options are placed after. The most important option here is the
238 location prefix where Apache is to be installed later, because
239 Apache has to be configured for this location to work
240 correctly. But there are a lot of other options available for
243 <p>For a short impression of what possibilities you have, here
244 is a typical example which compiles Apache for the installation
245 tree <code>/sw/pkg/apache</code> with a particular compiler and flags
246 plus the two additional modules <module>mod_rewrite</module> and
247 <module>mod_speling</module> for
248 later loading through the DSO mechanism:</p>
251 $ CC="pgcc" CFLAGS="-O2" \<br />
252 ./configure --prefix=/sw/pkg/apache \<br />
253 --enable-rewrite=shared \<br />
254 --enable-speling=shared
257 <p>When <code>configure</code> is run it will take several minutes to
258 test for the availability of features on your system and build
259 Makefiles which will later be used to compile the server.</p>
261 <p>The easiest way to find all of the configuration flags for
262 Apache is to run <code>./configure --help</code>. What follows is a
263 brief description of most of the arguments and environment
266 <section id="environment"><title>Environment Variables</title>
268 <p>The <code>autoconf</code> build process uses several environment
269 variables to configure the build environment. In general, these
270 variables change the method used to build Apache, but not the
271 eventual features of the server. These variables can be placed
272 in the environment before invoking <code>configure</code>, but
273 it is usually easier to specify them on the
274 <code>configure</code> command line as demonstrated in the
278 <dt><code>CC=...</code></dt>
280 <dd>The name of the C compiler command.</dd>
282 <dt><code>CPPFLAGS=...</code></dt>
284 <dd>Miscellaneous C preprocessor and compiler options.</dd>
286 <dt><code>CFLAGS=...</code></dt>
288 <dd>Debugging and optimization options for the C
291 <dt><code>LDFLAGS=...</code></dt>
293 <dd>Miscellaneous options to be passed to the linker.</dd>
295 <dt><code>LIBS=...</code></dt>
297 <dd>Library location information ("<code>-L</code>" and
298 "<code>-l</code>" options) to pass to the linker.</dd>
300 <dt><code>INCLUDES=...</code></dt>
302 <dd>Header file search directories ("<code>-I<em>dir</em></code>").</dd>
304 <dt><code>TARGET=...</code> [Default: <code>httpd</code>]</dt>
306 <dd>Name of the executable which will be built.</dd>
308 <dt><code>NOTEST_CPPFLAGS=...</code></dt>
310 <dt><code>NOTEST_CFLAGS=...</code></dt>
312 <dt><code>NOTEST_LDFLAGS=...</code></dt>
314 <dt><code>NOTEST_LIBS=...</code></dt>
316 <dd>These variables share the same function as their
317 non-<code>NOTEST</code> namesakes. However, the variables are
318 applied to the build process only after autoconf has performed its
319 feature testing. This allows the inclusion of flags which
320 will cause problems during feature testing, but must be used
321 for the final compilation.</dd>
323 <dt><code>SHLIB_PATH=...</code></dt>
325 <dd>Options which specify shared library paths for the
326 compiler and linker.</dd>
330 <section id="output"><title>autoconf Output Options</title>
333 <dt><code>--help</code></dt>
335 <dd>Prints the usage message including all available options,
336 but does not actually configure anything.</dd>
338 <dt><code>--quiet</code></dt>
340 <dd>Prevents the printing of the usual "<code>checking...</code>"
343 <dt><code>--verbose</code></dt>
345 <dd>Prints much more information during the configuration
346 process, including the names of all the files examined.</dd>
350 <section id="pathnames"><title>Pathnames</title>
352 <p>There are currently two ways to configure the pathnames
353 under which Apache will install its files. First, you can
354 specify a directory and have Apache install itself under that
355 directory in its default locations.</p>
358 <dt><code>--prefix=<em>PREFIX</em></code> [Default:
359 <code>/usr/local/apache2</code>]</dt>
361 <dd>Specifies the directory under which the Apache files will
365 <p>It is possible to specify that architecture-dependent files
366 should be placed under a different directory.</p>
369 <dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
370 <code><em>PREFIX</em></code>]</dt>
372 <dd>Specifies the directory under which
373 architecture-dependent files will be placed.</dd>
376 <p>The second, and more flexible way to configure the install
377 path locations for Apache is using the
378 <code>config.layout</code> file. Using this method, it is
379 possible to separately specify the location for each type of
380 file within the Apache installation. The
381 <code>config.layout</code> file contains several example
382 configurations, and you can also create your own custom
383 configuration following the examples. The different layouts in
384 this file are grouped into <code><Layout
385 FOO>...</Layout></code> sections and referred to by
386 name as in <code>FOO</code>.</p>
389 <dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
391 <dd>Use the named layout in the <code>config.layout</code>
392 file to specify the installation paths.</dd>
397 <section id="modules"><title>Modules</title>
399 <p>Apache is a modular server. Only the most basic
400 functionality is included in the core server. Extended features
401 are available in various modules. During the configuration
402 process, you must select which modules to compile for use with
403 your server. You can view a <a
404 href="mod/">list of modules</a> included in
405 the documentation. Those modules with a <a
406 href="mod/module-dict.html#Status">status</a> of "Base" are
407 included by default and must be specifically disabled if you do
408 not want them (e.g. <module>mod_userdir</module>). Modules with any
409 other status must be specifically enabled if you wish to use them
410 (e.g. <module>mod_expires</module>).</p>
412 <p>There are two ways for a module to be compiled and used with
413 Apache. Modules may be <em>statically compiled</em>, which
414 means that they are permanently included in the Apache binary.
415 Alternatively, if your operating system supports Dynamic Shared
416 Objects (DSOs) and <code>autoconf</code> can detect that support, then
417 modules may be <em>dynamically compiled</em>. DSO modules are
418 stored separately from the Apache binary, and may be included
419 or excluded from the server using the run-time configuration
420 directives provided by <module>mod_so</module>.
421 The mod_so is automatically included in the server if any
422 dynamic modules are included in the compilation. If you would
423 like to make your server capable of loading DSOs without
424 actually compiling any dynamic modules, you can explicitly
425 <code>--enable-so</code>.</p>
428 <dt><code>--enable-<em>MODULE</em>[=shared]</code></dt>
430 <dd>Compile and include the module <em>MODULE</em>. The
431 identifier <em>MODULE</em> is the <a
432 href="mod/module-dict.html#ModuleIdentifier">Module
433 Identifier</a> from the module documentation without the
434 "_module" string. To compile the module as a DSO, add the
435 option <code>=shared</code>.</dd>
437 <dt><code>--disable-<em>MODULE</em></code></dt>
439 <dd>Remove the module <em>MODULE</em> which would otherwise
440 be compiled and included.</dd>
442 <dt><code>--enable-modules=<em>MODULE-LIST</em></code></dt>
444 <dd>Compile and include the modules listed in the
445 space-separated <em>MODULE-LIST</em>.</dd>
448 <code>--enable-mods-shared=<em>MODULE-LIST</em></code></dt>
450 <dd>Compile and include the modules in the space-separated
451 <em>MODULE-LIST</em> as dynamically loadable (DSO)
455 <p>The <em>MODULE-LIST</em> in the
456 <code>--enable-modules</code> and
457 <code>--enable-mods-shared</code> options is usually a
458 space-separated list of module identifiers. For example, to
459 enable <module>mod_dav</module> and <module>mod_info</module>,
460 you can either use</p>
462 <example>./configure --enable-dav --enable-info</example>
464 <p>or, equivalently,</p>
466 <example>./configure --enable-modules="dav info"</example>
468 <p>In addition, the special keywords <code>all</code> or
469 <code>most</code> can be used to add all or most of the modules
470 in one step. You can then remove any modules that you do not
471 want with the <code>--disable-<em>MODULE</em></code> option.
472 For example, to include all modules as DSOs with the exception
473 of <module>mod_info</module>, you can use</p>
476 ./configure --enable-mods-shared=all
480 <p>In addition to the standard set of modules, Apache 2.0 also
481 includes a choice of <a href="mpm.html">Multi-Processing
482 Modules</a> (MPMs). One, and only one MPM must be included in
483 the compilation process. The default MPMs for each platform are
484 listed on the <a href="mpm.html">MPM documentation page</a>,
485 but can be overridden on the <code>configure</code> command
489 <dt><code>--with-mpm=<em>NAME</em></code></dt>
491 <dd>Choose the mpm <em>NAME</em>.</dd>
494 <p>To activate an MPM called <var>mpm_name</var>, you can use</p>
497 ./configure --with-mpm=<var>mpm_name</var>
502 <section id="dbm"><title>DBM</title>
504 <p>Several Apache features, including
505 <module>mod_authn_dbm</module> and <module>mod_rewrite</module>'s
506 DBM <directive module="mod_rewrite">RewriteMap</directive> use
507 simple key/value databases for quick lookups of information. Apache
508 includes SDBM with its source-code, so this database is always
509 available. If you would like to use other database types, the
510 following <code>configure</code> options are available:</p>
513 <dt><code>--with-gdbm[=<em>path</em>]</code></dt>
514 <dt><code>--with-ndbm[=<em>path</em>]</code></dt>
515 <dt><code>--with-berkeley-db[=<em>path</em>]</code></dt>
517 <dd>If no <em>path</em> is specified, Apache will search for the
518 include files and libraries in the usual search paths. An explicit
519 <em>path</em> will cause Apache to look in
520 <em>path</em><code>/lib</code> and
521 <em>path</em><code>/include</code> for the relevant files. Finally,
522 the <em>path</em> may specify specific include and library paths
523 separated by a colon.</dd>
528 <section id="suexec"><title>Suexec</title>
530 <p>Apache includes a support program called <a
531 href="suexec.html">suexec</a> which can be used to isolate user
532 CGI programs. However, if suexec is improperly configured, it
533 can cause serious security problems. Therefore, you should
534 carefully read and consider the <a href="suexec.html">suexec
535 documentation</a> before implementing this feature.</p>
539 <section id="compile"><title>Build</title>
541 <p>Now you can build the various parts which form the Apache
542 package by simply running the command:</p>
544 <example>$ make</example>
546 <p>Please be patient here, since a base configuration takes
547 approximately 3 minutes to compile under a Pentium III/Linux
548 2.2 system, but this will vary widely depending on your
549 hardware and the number of modules which you have enabled.</p>
552 <section id="install"><title>Install</title>
554 <p>Now it's time to install the package under the configured
555 installation <em>PREFIX</em> (see <code>--prefix</code> option
556 above) by running:</p>
558 <example>$ make install</example>
560 <p>If you are upgrading, the installation will not overwrite
561 your configuration files or documents.</p>
564 <section id="customize"><title>Customize</title>
566 <p>Next, you can customize your Apache HTTP server by editing
567 the <a href="configuring.html">configuration files</a> under
568 <code><em>PREFIX</em>/conf/</code>.</p>
570 <example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
572 <p>Have a look at the Apache manual under <a
573 href="./">docs/manual/</a> or consult <a
574 href="http://httpd.apache.org/docs-2.1/"
575 >http://httpd.apache.org/docs-2.1/</a> for the most recent version of
576 this manual and a complete reference of available <a
577 href="mod/directives.html">configuration directives</a>.</p>
580 <section id="test"><title>Test</title>
582 <p>Now you can <a href="invoking.html">start</a> your Apache
583 HTTP server by immediately running:</p>
585 <example>$ <em>PREFIX</em>/bin/apachectl start</example>
587 <p>and then you should be able to request your first document
588 via URL <code>http://localhost/</code>. The web page you see is located
589 under the <directive module="core">DocumentRoot</directive>
590 which will usually be <code><em>PREFIX</em>/htdocs/</code>.
591 Then <a href="stopping.html">stop</a> the server again by
594 <example>$ <em>PREFIX</em>/bin/apachectl stop</example>
596 <section id="upgrading"><title>Upgrading</title>
598 <p>The first step in upgrading is to read the release announcement
599 and the file <code>CHANGES</code> in the source distribution to
600 find any changes that may affect your site. When changing between
601 major releases (for example, from 1.3 to 2.0 or from 2.0 to 2.2),
602 there will likely be major differences in the compile-time and
603 run-time configuration that will require manual adjustments. All
604 modules will also need to be upgraded to accomodate changes in the
607 <p>Upgrading from one minor version to the next (for example, from
608 2.0.55 to 2.0.57) is easier. The <code>make install</code>
609 process will not overwrite any of your existing documents, log
610 files, or configuration files. In addition, the developers make
611 every effort to avoid incompatible changes in the
612 <code>configure</code> options, run-time configuration, or the
613 module API between minor versions. In most cases you should be able to
614 use an identical <code>configure</code> command line, an identical
615 configuration file, and all of your modules should continue to
616 work. (This is only valid for versions after 2.0.41; earlier
617 versions have incompatible changes.)</p>
619 <p>If you kept the source tree from your last installation,
620 upgrading is even easier. The file <code>config.nice</code> in
621 the root of the old source tree contains the exact
622 <code>configure</code> command line that you used to configure the
623 source tree. Then to upgrade from one version to the next, you
624 need only copy the <code>config.nice</code> file to the source
625 tree of the new version, edit it to make any desired changes, and
629 $ ./config.nice<br />
632 $ <em>PREFIX</em>/bin/apachectl stop<br />
633 $ <em>PREFIX</em>/bin/apachectl start<br />
636 <note type="warning">You should always test any new version in your
637 environment before putting it into production. For example, you
638 can install and run the new version along side the old one by
639 using a different <code>--prefix</code> and a
640 different port (by adjusting the <directive
641 module="mpm_common">Listen</directive> directive) to test for any
642 incompatibilities before doing the final upgrade.</note>