]> granicus.if.org Git - apache/blob - docs/manual/install.xml
Add some documentation on upgrading from one minor version to the next.
[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 metafile="install.xml.meta">
5
6   <title>Compiling and Installing</title>
7
8 <summary>
9
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>
16
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
22     projects.</p>
23
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>
27
28 </summary>
29
30 <seealso><a href="invoking.html">Starting Apache</a></seealso>
31 <seealso><a href="stopping.html">Stopping and Restarting</a></seealso>
32
33 <section id="overview"><title>Overview for the
34     impatient</title>
35
36     <table>
37       <columnspec><column width=".13"/><column width=".80"/></columnspec>
38       <tr>
39         <td><a href="#download">Download</a></td>
40
41         <td><code>$ lynx
42         http://www.apache.org/dist/httpd/httpd-2_1_<em>NN</em>.tar.gz</code>
43         </td>
44       </tr>
45
46       <tr>
47         <td><a href="#extract">Extract</a></td>
48
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>
51       </tr>
52
53       <tr>
54         <td><a href="#configure">Configure</a></td>
55
56         <td><code>$ ./configure --prefix=<em>PREFIX</em></code>
57         </td>
58       </tr>
59
60       <tr>
61         <td><a href="#compile">Compile</a></td>
62
63         <td><code>$ make</code> </td>
64       </tr>
65
66       <tr>
67         <td><a href="#install">Install</a></td>
68
69         <td><code>$ make install</code> </td>
70       </tr>
71
72       <tr>
73         <td><a href="#customize">Customize</a></td>
74
75         <td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
76       </tr>
77
78       <tr>
79         <td><a href="#test">Test</a></td>
80
81         <td><code>$ <em>PREFIX</em>/bin/apachectl start</code>
82         </td>
83       </tr>
84     </table>
85
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>
91
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>
95 </section>
96
97 <section id="requirements"><title>Requirements</title>
98
99     <p>The following requirements exist for building Apache:</p>
100
101     <dl>
102       <dt>Disk Space</dt>
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>
108
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>
118
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
129       time servers.</dd>
130
131       <dt><a href="http://www.perl.org/">Perl 5</a>
132       [OPTIONAL]</dt>
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>
145     </dl>
146 </section>
147
148 <section id="download"><title>Download</title>
149
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>
154
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>
167
168 <example>$ pgp &lt; KEYS</example>
169
170     <p>or </p>
171
172 <example>$ gpg --import KEYS</example>
173
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>
184
185 <example>$ pgp httpd-2_1_<em>NN</em>.tar.gz.asc</example>
186
187     <p>or</p>
188
189 <example>$ gpg --verify httpd-2_1_<em>NN</em>.tar.gz.asc</example>
190
191     <p>You should receive a message like</p>
192
193 <example>Good signature from user "Martin Kraemer
194       &lt;martin@apache.org&gt;".</example>
195
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>
201
202 </section>
203
204 <section id="extract"><title>Extract</title>
205
206     <p>Extracting the source from the Apache HTTPD tarball is a
207     simple matter of uncompressing, and then untarring:</p>
208
209 <example>
210       $ gzip -d httpd-2_1_<em>NN</em>.tar.gz<br />
211        $ tar xvf httpd-2_1_<em>NN</em>.tar
212 </example>
213
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>
218 </section>
219
220 <section id="configure"><title>Configuring the source tree</title>
221
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
230     releases.)</p>
231
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
241     your pleasure.</p>
242
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>
249
250 <example>
251       $ CC="pgcc" CFLAGS="-O2" \<br />
252        ./configure --prefix=/sw/pkg/apache \<br />
253        --enable-rewrite=shared \<br />
254        --enable-speling=shared
255 </example>
256
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>
260
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
264     variables.</p>
265
266 <section id="environment"><title>Environment Variables</title>
267
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
275     example above.</p>
276
277     <dl>
278       <dt><code>CC=...</code></dt>
279
280       <dd>The name of the C compiler command.</dd>
281
282       <dt><code>CPPFLAGS=...</code></dt>
283
284       <dd>Miscellaneous C preprocessor and compiler options.</dd>
285
286       <dt><code>CFLAGS=...</code></dt>
287
288       <dd>Debugging and optimization options for the C
289       compiler.</dd>
290
291       <dt><code>LDFLAGS=...</code></dt>
292
293       <dd>Miscellaneous options to be passed to the linker.</dd>
294
295       <dt><code>LIBS=...</code></dt>
296
297       <dd>Library location information ("<code>-L</code>" and
298       "<code>-l</code>" options) to pass to the linker.</dd>
299
300       <dt><code>INCLUDES=...</code></dt>
301
302       <dd>Header file search directories ("<code>-I<em>dir</em></code>").</dd>
303
304       <dt><code>TARGET=...</code> [Default: <code>httpd</code>]</dt>
305
306       <dd>Name of the executable which will be built.</dd>
307
308       <dt><code>NOTEST_CPPFLAGS=...</code></dt>
309
310       <dt><code>NOTEST_CFLAGS=...</code></dt>
311
312       <dt><code>NOTEST_LDFLAGS=...</code></dt>
313
314       <dt><code>NOTEST_LIBS=...</code></dt>
315
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>
322
323       <dt><code>SHLIB_PATH=...</code></dt>
324
325       <dd>Options which specify shared library paths for the
326       compiler and linker.</dd>
327     </dl>
328 </section>
329
330 <section id="output"><title>autoconf Output Options</title>
331
332     <dl>
333       <dt><code>--help</code></dt>
334
335       <dd>Prints the usage message including all available options,
336       but does not actually configure anything.</dd>
337
338       <dt><code>--quiet</code></dt>
339
340       <dd>Prevents the printing of the usual "<code>checking...</code>"
341       messages.</dd>
342
343       <dt><code>--verbose</code></dt>
344
345       <dd>Prints much more information during the configuration
346       process, including the names of all the files examined.</dd>
347     </dl>
348 </section>
349
350 <section id="pathnames"><title>Pathnames</title>
351
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>
356
357     <dl>
358       <dt><code>--prefix=<em>PREFIX</em></code> [Default:
359       <code>/usr/local/apache2</code>]</dt>
360
361       <dd>Specifies the directory under which the Apache files will
362       be installed.</dd>
363     </dl>
364
365     <p>It is possible to specify that architecture-dependent files
366     should be placed under a different directory.</p>
367
368     <dl>
369       <dt><code>--exec-prefix=<em>EPREFIX</em></code> [Default:
370       <code><em>PREFIX</em></code>]</dt>
371
372       <dd>Specifies the directory under which
373       architecture-dependent files will be placed.</dd>
374     </dl>
375
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>&lt;Layout
385     FOO&gt;...&lt;/Layout&gt;</code> sections and referred to by
386     name as in <code>FOO</code>.</p>
387
388     <dl>
389       <dt><code>--enable-layout=<em>LAYOUT</em></code></dt>
390
391       <dd>Use the named layout in the <code>config.layout</code>
392       file to specify the installation paths.</dd>
393     </dl>
394
395 </section>
396
397 <section id="modules"><title>Modules</title>
398
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>
411
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>
426
427     <dl>
428       <dt><code>--enable-<em>MODULE</em>[=shared]</code></dt>
429
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>
436
437       <dt><code>--disable-<em>MODULE</em></code></dt>
438
439       <dd>Remove the module <em>MODULE</em> which would otherwise
440       be compiled and included.</dd>
441
442       <dt><code>--enable-modules=<em>MODULE-LIST</em></code></dt>
443
444       <dd>Compile and include the modules listed in the
445       space-separated <em>MODULE-LIST</em>.</dd>
446
447       <dt>
448       <code>--enable-mods-shared=<em>MODULE-LIST</em></code></dt>
449
450       <dd>Compile and include the modules in the space-separated
451       <em>MODULE-LIST</em> as dynamically loadable (DSO)
452       modules.</dd>
453     </dl>
454
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>
461
462 <example>./configure --enable-dav --enable-info</example>
463
464     <p>or, equivalently,</p>
465
466 <example>./configure --enable-modules="dav info"</example>
467
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>
474
475 <example>
476       ./configure --enable-mods-shared=all
477       --disable-info
478 </example>
479
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
486     line.</p>
487
488     <dl>
489       <dt><code>--with-mpm=<em>NAME</em></code></dt>
490
491       <dd>Choose the mpm <em>NAME</em>.</dd>
492     </dl>
493
494     <p>To activate an MPM called <var>mpm_name</var>, you can use</p>
495
496 <example>
497      ./configure --with-mpm=<var>mpm_name</var>
498 </example>
499
500 </section>
501
502 <section id="dbm"><title>DBM</title>
503
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>
511
512 <dl>
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>
516
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>
524 </dl>
525 </section>
526
527
528 <section id="suexec"><title>Suexec</title>
529
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>
536 </section>
537 </section>
538
539 <section id="compile"><title>Build</title>
540
541     <p>Now you can build the various parts which form the Apache
542     package by simply running the command:</p>
543
544 <example>$ make</example>
545
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>
550 </section>
551
552 <section id="install"><title>Install</title>
553
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>
557
558 <example>$ make install</example>
559
560     <p>If you are upgrading, the installation will not overwrite
561     your configuration files or documents.</p>
562 </section>
563
564 <section id="customize"><title>Customize</title>
565
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>
569
570 <example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
571
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>
578 </section>
579
580 <section id="test"><title>Test</title>
581
582     <p>Now you can <a href="invoking.html">start</a> your Apache
583     HTTP server by immediately running:</p>
584
585 <example>$ <em>PREFIX</em>/bin/apachectl start</example>
586
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
592     running:</p>
593
594 <example>$ <em>PREFIX</em>/bin/apachectl stop</example>
595 </section>
596 <section id="upgrading"><title>Upgrading</title>
597
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
605     module API.</p>
606
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>
618
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
626     then run:</p>
627
628     <example>
629     $ ./config.nice<br />
630     $ make<br />
631     $ make install<br />
632     $ <em>PREFIX</em>/bin/apachectl stop<br />
633     $ <em>PREFIX</em>/bin/apachectl start<br />
634     </example>
635
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>
643 </section>
644 </manualpage>