<!--%hypertext -->
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
<HEAD>
<TITLE>Compiling and Installing Apache</TITLE>
</HEAD>

<BODY>
<!--/%hypertext -->

<h1>Compiling and Installing Apache</h1>
<h2>Downloading Apache</h2>
Information on the latest version of Apache can be found on the Apache
web server at http://www.apache.org/. This will list the current release,
any more recent beta-test release, together with details of mirror
web and anonymous ftp sites.

<h2>Compiling Apache</h2>
This release of Apache supports the notion of `optional modules'.
However, the server has to know which modules are compiled into it, in
order for those modules to be effective; this requires generation of a
short bit of code (`<code>modules.c</code>') which simply has a list of them.
<p>
If you are satisfied with our standard module set, and expect to
continue to be satisfied with it, then you can just edit the stock
<code>Makefile</code> and compile as you have been doing previously.  If you
would
like to select optional modules, however, you need to run the
configuration script.
<p>
To do this:
<ol>
<li>Edit the file `<code>Configuration</code>'.  This contains the per-machine
config settings of the Makefile, and also an additional section at
the bottom which lists the modules which have been compiled in, and
also names the files containing them.  You will need to:
<ol>
<li> Select a compiler and compilation options as appropriate to
your machine.
<li> Uncomment lines corresponding to those optional modules you wish
to include (among the Module lines at the bottom of the file)
or add new lines corresponding to custom modules you have written.
<p>
Note that DBM auth has to be explicitly configured in, if you want
it; just uncomment the corresponding line.
</ol>
<li> Run the `Configure' script:
<blockquote><code>
% Configure<br>
Using 'Configuration' as config file<br>
%</code></blockquote>

This generates new versions of the Makefile and of modules.c.  If
you want to maintain multiple configurations, you can say, e.g.,
<blockquote><code>
% Configure -file Configuration.ai<br>
Using alternate config file Configuration.ai<br>
%</code></blockquote>

<li>Type `make'.
<p>
The modules we place in the Apache distribution are the ones we have
tested and are used regularly by various members of the Apache
development group.  Additional modules contributed by members or third
parties with specific needs or functions are available at
<A HREF="http://www.apache.org/dist/contrib/modules/">&lt;URL:http://www.apache.org/dist/contrib/modules/&gt;</A>.  There are instructions on that page for
linking these modules into the core Apache code.
</ol>

<h2>Installing Apache</h2>
After compilation, you will have a binary called `httpd' in the
<code>src/</code> directory.  A binary distribution of Apache will supply this
file.
<p>
The next step is to edit the configuration files for the server.  In
the subdirectory called `conf' you should find distribution versions
of the three configuration files: <code>srm.conf-dist</code>,
<code>access.conf-dist</code> and <code>httpd.conf-dist</code>. Copy them to
<code>srm.conf</code>, <code>access.conf</code> and <code>httpd.conf</code>
respectively.
<p>
First edit <code>httpd.conf</code>.  This sets up general attributes about the
server; the port number, the user it runs as, etc.  Next edit the
<code>srm.conf</code> file; this sets up the root of the document tree,
special functions like server-parsed HTML or internal imagemap parsing, etc.
Finally, edit the <code>access.conf</code> file to at least set the base cases
of access.
<p>
Finally, make a call to httpd, with a -f to the full path to the
httpd.conf file.  I.e., the common case:
<blockquote><code>
  /usr/local/etc/apache/src/httpd -f /usr/local/etc/apache/conf/httpd.conf
</code></blockquote>
The server should be now running.
<p>
By default the <code>srm.conf</code> and <code>access.conf</code> files are
located by name; to specifically call them by other names, use the
<A HREF="core.html#accessconfig">AccessConfig</A> and
<A HREF="core.html#resourceconfig">ResourceConfig</A> directives in
<code>httpd.conf</code>.

<!--%hypertext -->
<hr>
<A HREF="../"><IMG SRC="../images/apache_home.gif" ALT="Home"></A>
<A HREF="./"><IMG SRC="../images/apache_index.gif" ALT="Index"></A>

</BODY>
</HTML>
<!--/%hypertext -->
