]> granicus.if.org Git - apache/blob - docs/manual/install.xml
Typos: explicit & separated.
[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
490     <p>To activate an MPM called <var>mpm_name</var>, you can use</p>
491
492 <example>
493      ./configure --with-mpm=<var>mpm_name</var>
494 </example>
495
496 </section>
497
498 <section id="dbm"><title>DBM</title>
499
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>
507
508 <dl>
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>
512
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>
520 </dl>
521 </section>
522
523
524 <section id="suexec"><title>Suexec</title>
525
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>
532 </section>
533 </section>
534
535 <section id="compile"><title>Build</title>
536
537     <p>Now you can build the various parts which form the Apache
538     package by simply running the command:</p>
539
540 <example>$ make</example>
541
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>
546 </section>
547
548 <section id="install"><title>Install</title>
549
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>
553
554 <example>$ make install</example>
555
556     <p>If you are upgrading, the installation will not overwrite
557     your configuration files or documents.</p>
558 </section>
559
560 <section id="customize"><title>Customize</title>
561
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>
565
566 <example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
567
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>
574 </section>
575
576 <section id="test"><title>Test</title>
577
578     <p>Now you can <a href="invoking.html">start</a> your Apache
579     HTTP server by immediately running:</p>
580
581 <example>$ <em>PREFIX</em>/bin/apachectl start</example>
582
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
588     running:</p>
589
590 <example>$ <em>PREFIX</em>/bin/apachectl stop</example>
591 </section>
592
593 </manualpage>