]> granicus.if.org Git - apache/blob - docs/manual/install.xml
change a link and add a note where to find the signature files
[apache] / docs / manual / install.xml
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>
5 <relativepath href="."/>
6
7   <title>Compiling and Installing</title>
8
9 <summary>
10
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>
17
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
23     projects.</p>
24
25 </summary>
26
27 <seealso><a href="invoking.html">Starting Apache</a></seealso>
28 <seealso><a href="stopping.html">Stopping and Restarting</a></seealso>
29
30 <section id="overview"><title>Overview for the
31     impatient</title>
32
33     <table>
34       <tr>
35         <td><a href="#download">Download</a></td>
36
37         <td><code>$ lynx
38         http://www.apache.org/dist/httpd/httpd-2_1_<em>NN</em>.tar.gz</code>
39         </td>
40       </tr>
41
42       <tr>
43         <td><a href="#extract">Extract</a></td>
44
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>
47       </tr>
48
49       <tr>
50         <td><a href="#configure">Configure</a></td>
51
52         <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
53         </td>
54       </tr>
55
56       <tr>
57         <td><a href="#compile">Compile</a></td>
58
59         <td><code>$ make</code> </td>
60       </tr>
61
62       <tr>
63         <td><a href="#install">Install</a></td>
64
65         <td><code>$ make install</code> </td>
66       </tr>
67
68       <tr>
69         <td><a href="#customize">Customize</a></td>
70
71         <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
72       </tr>
73
74       <tr>
75         <td><a href="#test">Test</a></td>
76
77         <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
78         </td>
79       </tr>
80     </table>
81
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>
87
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>
91 </section>
92
93 <section id="requirements"><title>Requirements</title>
94
95     <p>The following requirements exist for building Apache:</p>
96
97     <dl>
98       <dt>Disk Space</dt>
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>
104
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>
114
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
125       time servers.</dd>
126
127       <dt><a href="http://www.perl.org/">Perl 5</a>
128       [OPTIONAL]</dt>
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>
141     </dl>
142 </section>
143
144 <section id="download"><title>Download</title>
145
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>
150
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>
163
164 <example>$ pgp &lt; KEYS</example>
165
166     <p>or </p>
167
168 <example>$ gpg --import KEYS</example>
169
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>
180
181 <example>$ pgp httpd-2_1_<em>NN</em>.tar.gz.asc</example>
182
183     <p>or</p>
184
185 <example>$ gpg --verify httpd-2_1_<em>NN</em>.tar.gz.asc</example>
186
187     <p>You should receive a message like</p>
188
189 <example>Good signature from user "Martin Kraemer
190       &lt;martin@apache.org&gt;".</example>
191
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>
197
198 </section>
199
200 <section id="extract"><title>Extract</title>
201
202     <p>Extracting the source from the Apache HTTPD tarball is a
203     simple matter of uncompressing, and then untarring:</p>
204
205 <example>
206       $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
207        $ tar xvf httpd-2_1_<em>NN</em>.tar
208 </example>
209
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>
214 </section>
215
216 <section id="configure"><title>Configuring the source tree</title>
217
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
226     releases.)</p>
227
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
237     your pleasure.</p>
238
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>
245
246 <example>
247       $ CC="pgcc" CFLAGS="-O2" \<br />
248        ./configure --prefix=/sw/pkg/apache \<br />
249        --enable-rewrite=shared \<br />
250        --enable-speling=shared
251 </example>
252
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>
256
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
260     variables.</p>
261
262 <section id="environment"><title>Environment Variables</title>
263
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
271     example above.</p>
272
273     <dl>
274       <dt><code>CC=...</code></dt>
275
276       <dd>The name of the C compiler command.</dd>
277
278       <dt><code>CPPFLAGS=...</code></dt>
279
280       <dd>Miscellaneous C preprocessor and compiler options.</dd>
281
282       <dt><code>CFLAGS=...</code></dt>
283
284       <dd>Debugging and optimization options for the C
285       compiler.</dd>
286
287       <dt><code>LDFLAGS=...</code></dt>
288
289       <dd>Miscellaneous options to be passed to the linker.</dd>
290
291       <dt><code>LIBS=...</code></dt>
292
293       <dd>Library location information ("<code>-L</code>" and
294       "<code>-l</code>" options) to pass to the linker.</dd>
295
296       <dt><code>INCLUDES=...</code></dt>
297
298       <dd>Header file search directories ("<code>-I<em>dir</em></code>").</dd>
299
300       <dt><code>TARGET=...</code> [Default: <code>apache</code>]</dt>
301
302       <dd>Name of the executable which will be built.</dd>
303
304       <dt><code>NOTEST_CPPFLAGS=...</code></dt>
305
306       <dt><code>NOTEST_CFLAGS=...</code></dt>
307
308       <dt><code>NOTEST_LDFLAGS=...</code></dt>
309
310       <dt><code>NOTEST_LIBS=...</code></dt>
311
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>
318
319       <dt><code>SHLIB_PATH=...</code></dt>
320
321       <dd>Options which specify shared library paths for the
322       compiler and linker.</dd>
323     </dl>
324 </section>
325
326 <section id="output"><title>autoconf Output Options</title>
327
328     <dl>
329       <dt><code>--help</code></dt>
330
331       <dd>Prints the usage message including all available options,
332       but does not actually configure anything.</dd>
333
334       <dt><code>--quiet</code></dt>
335
336       <dd>Prevents the printing of the usual "<code>checking...</code>"
337       messages.</dd>
338
339       <dt><code>--verbose</code></dt>
340
341       <dd>Prints much more information during the configuration
342       process, including the names of all the files examined.</dd>
343     </dl>
344 </section>
345
346 <section id="pathnames"><title>Pathnames</title>
347
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>
352
353     <dl>
354       <dt><code>--prefix=<em>PREFIX</em></code> [Default:
355       <code>/usr/local/apache2</code>]</dt>
356
357       <dd>Specifies the directory under which the Apache files will
358       be installed.</dd>
359     </dl>
360
361     <p>It is possible to specify that architecture-dependent files
362     should be placed under a different directory.</p>
363
364     <dl>
365       <dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
366       <code><em>PREFIX</em></code>]</dt>
367
368       <dd>Specifies the directory under which
369       architecture-dependent files will be placed.</dd>
370     </dl>
371
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>&lt;Layout
381     FOO&gt;...&lt;/Layout&gt;</code> sections and referred to by
382     name as in <code>FOO</code>.</p>
383
384     <dl>
385       <dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
386
387       <dd>Use the named layout in the <code>config.layout</code>
388       file to specify the installation paths.</dd>
389     </dl>
390
391 </section>
392
393 <section id="modules"><title>Modules</title>
394
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>
407
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>
422
423     <dl>
424       <dt><code>--enable-<em>MODULE</em>[=shared]</code></dt>
425
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>
432
433       <dt><code>--disable-<em>MODULE</em></code></dt>
434
435       <dd>Remove the module <em>MODULE</em> which would otherwise
436       be compiled and included.</dd>
437
438       <dt><code>--enable-modules=<em>MODULE-LIST</em></code></dt>
439
440       <dd>Compile and include the modules listed in the
441       space-separated <em>MODULE-LIST</em>.</dd>
442
443       <dt>
444       <code>--enable-mods-shared=<em>MODULE-LIST</em></code></dt>
445
446       <dd>Compile and include the modules in the space-separated
447       <em>MODULE-LIST</em> as dynamically loadable (DSO)
448       modules.</dd>
449     </dl>
450
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>
457
458 <example>./configure --enable-dav --enable-info</example>
459
460     <p>or, equivalently,</p>
461
462 <example>./configure --enable-modules="dav info"</example>
463
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>
470
471 <example>
472       ./configure --enable-mods-shared=all
473       --disable-info
474 </example>
475
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
482     line.</p>
483
484     <dl>
485       <dt><code>--with-mpm=<em>NAME</em></code></dt>
486
487       <dd>Choose the mpm <em>NAME</em>.</dd>
488     </dl>
489 </section>
490
491 <section id="dbm"><title>DBM</title>
492
493     <p>Several Apache features, including
494     <module>mod_authn_dbm</module> and <module>mod_rewrite</module>'s
495     DBM <directive module="mod_rewrite">RewriteMap</directive> use
496     simple key/value databases for quick lookups of information.  Apache
497     includes SDBM with its source-code, so this database is always
498     available.  If you would like to use other database types, the
499     following <code>configure</code> options are available:</p>
500
501 <dl>
502 <dt><code>--with-gdbm[=<em>path</em>]</code></dt>
503 <dt><code>--with-ndbm[=<em>path</em>]</code></dt>
504 <dt><code>--with-berkeley-db[=<em>path</em>]</code></dt>
505
506 <dd>If no <em>path</em> is specified, Apache will search for the
507 include files and libraries in the usual search paths.  An explict
508 <em>path</em> will cause Apache to look in
509 <em>path</em><code>/lib</code> and
510 <em>path</em><code>/include</code> for the relevant files.  Finally,
511 the <em>path</em> may specify specific include and library paths
512 seperated by a colon.</dd>
513 </dl>
514 </section>
515
516
517 <section id="suexec"><title>Suexec</title>
518
519     <p>Apache includes a support program called <a
520     href="suexec.html">suexec</a> which can be used to isolate user
521     CGI programs. However, if suexec is improperly configured, it
522     can cause serious security problems. Therefore, you should
523     carefully read and consider the <a href="suexec.html">suexec
524     documentation</a> before implementing this feature.</p>
525 </section>
526 </section>
527
528 <section id="compile"><title>Build</title>
529
530     <p>Now you can build the various parts which form the Apache
531     package by simply running the command:</p>
532
533 <example>$ make</example>
534
535     <p>Please be patient here, since a base configuration takes
536     approximately 3 minutes to compile under a Pentium III/Linux
537     2.2 system, but this will vary widely depending on your
538     hardware and the number of modules which you have enabled.</p>
539 </section>
540
541 <section id="install"><title>Install</title>
542
543     <p>Now its time to install the package under the configured
544     installation <em>PREFIX</em> (see <code>--prefix</code> option
545     above) by running:</p>
546
547 <example>$ make install</example>
548
549     <p>If you are upgrading, the installation will not overwrite
550     your configuration files or documents.</p>
551 </section>
552
553 <section id="customize"><title>Customize</title>
554
555     <p>Next, you can customize your Apache HTTP server by editing
556     the <a href="configuring.html">configuration files</a> under
557     <code><em>PREFIX</em>/conf/</code>.</p>
558
559 <example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
560
561     <p>Have a look at the Apache manual under <a
562     href="./">docs/manual/</a> or consult <a
563     href="http://httpd.apache.org/docs-2.1/"
564     >http://httpd.apache.org/docs-2.1/</a> for the most recent version of
565     this manual and a complete reference of available <a
566     href="mod/directives.html">configuration directives</a>.</p>
567 </section>
568
569 <section id="test"><title>Test</title>
570
571     <p>Now you can <a href="invoking.html">start</a> your Apache
572     HTTP server by immediately running:</p>
573
574 <example>$ <em>PREFIX</em>/bin/apachectl start</example>
575
576     <p>and then you should be able to request your first document
577     via URL <code>http://localhost/</code>. The web page you see is located
578     under the <directive module="core">DocumentRoot</directive>
579     which will usually be <code><em>PREFIX</em>/htdocs/</code>.
580     Then <a href="stopping.html">stop</a> the server again by
581     running:</p>
582
583 <example>$ <em>PREFIX</em>/bin/apachectl stop</example>
584 </section>
585
586 </manualpage>