| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> |
| <HTML> |
| <HEAD> |
| <TITLE>Compiling and Installing Apache</TITLE> |
| </HEAD> |
| |
| <!-- Background white, links blue (unvisited), navy (visited), red (active) --> |
| <BODY |
| BGCOLOR="#FFFFFF" |
| TEXT="#000000" |
| LINK="#0000FF" |
| VLINK="#000080" |
| ALINK="#FF0000" |
| > |
| <!--#include virtual="header.html" --> |
| |
| <H1 ALIGN="CENTER">Compiling and Installing</H1> |
| |
| |
| <p>This document covers compilation and installation of Apache on Unix |
| and Unix-like systems only. For compiling and installation on Windows, |
| see <A HREF="platform/windows.html">Using Apache with Microsoft |
| Windows</A>. For other platforms, see the <a |
| href="platform/">platform</a> documentation.</p> |
| |
| <p>Apache 2.0's configuration and installation environment has changed |
| completely from Apache 1.3. Apache 1.3 used a custom set of scripts |
| to achieve easy installation. Apache 2.0 now uses libtool and |
| autoconf to create an environment that looks like many other Open |
| Source projects.</p> |
| |
| <h3>Overview for the impatient</h3> |
| |
| <blockquote><code> |
| $ ./configure --prefix=<em>PREFIX</em><br> |
| $ make<br> |
| $ make install<br> |
| $ <em>PREFIX</em>/bin/apachectl start |
| </blockquote></code> |
| |
| <p>Notes: |
| <ul> |
| |
| <li><em>PREFIX</em> is not the string "PREFIX". Instead use the Unix |
| filesystem path under which Apache should be installed. For instance |
| use "/usr/local/apache" for <em>PREFIX</em> above.</li> |
| |
| <li>if you are building from a copy of the Apache CVS repository, |
| rather than a release distribution, then you must use the "buildconf" |
| script before running configure.</li> |
| |
| <li>If you are building on FreeBSD, you should add the argument |
| --with-mpm=prefork to the configure line. The Apache Group has |
| discovered that threads do not work well with Apache on FreeBSD. For |
| that reason, we disable threads by default on FreeBSD, and you need to |
| build the prefork MPM. If you wish to try to make threads work on |
| FreeBSD, they can be re-enabled by using --enable-threads</li> |
| |
| </ul> |
| |
| <h3>Requirements</h3> |
| |
| <p>The following requirements exist for building Apache:</p> |
| |
| <ul> |
| |
| <li>Disk Space<br><br> |
| Make sure you have approximately 12 MB of |
| temporary free disk space available. After installation Apache |
| occupies approximately 5 MB of disk space (the actual required disk |
| space depends on the amount of compiled in third party modules, |
| etc).<br><br></li> |
| |
| <li>ANSI-C Compiler<br><br>Make sure you have an ANSI-C compiler |
| installed. The GNU C compiler (GCC) from the Free Software Foundation |
| (FSF) is recommended (version 2.7.2 is fine). If you don't have GCC |
| then at least make sure your vendors compiler is ANSI compliant. You |
| can find the homepage of GNU at http://www.gnu.org/ and the GCC |
| distribution under http://www.gnu.org/order/ftp.html.<br><br></li> |
| |
| <li>Perl 5 Interpreter [OPTIONAL]<br><br> For some of the support |
| scripts like `apxs' or `dbmmanage' (which are written in Perl) the |
| Perl 5 interpreter is required (versions 5.003 and 5.004 are fine). If |
| no such interpreter is found by the `configure' script this is no |
| harm. Of course, you still can build and install Apache 2.0. Only |
| those support scripts cannot be used. If you have multiple Perl |
| interpreters installed (perhaps a Perl 4 from the vendor and a Perl 5 |
| from your own), then it is recommended to use the --with-perl option |
| (see below) to make sure the correct one is selected by ./configure. |
| <br><br></li> |
| |
| <li>Dynamic Shared Object (DSO) support [OPTIONAL]<br><br> To provide |
| maximum flexibility Apache now is able to load modules under runtime |
| via the DSO mechanism by using the pragmatic |
| apr_dso_open()/apr_dso_sym() calls. These calls are not available |
| under all operating systems therefore you cannot use the DSO mechanism |
| on all platforms. Apache relies on autoconf to detect the ability to |
| use DSOs, and libtool to determine how to build DSOs. If your platform |
| is supported by libtool, and we can find DSO system calls, then DSOs |
| should work out-of-the-box.<br><br> |
| |
| If your system is not on these lists but has the dlopen-style |
| interface, you either have to provide the appropriate compiler and |
| linker flags manually or at least make sure a Perl 5 interpreter is |
| installed from which Apache can guess the options.<br><br></li> |
| |
| </ul> |
| |
| |
| <p>If you are building from a copy of the CVS repository, rather than |
| a release distribution, then you will need these additional tools:</p> |
| |
| <ul> |
| |
| <li>Libtool 1.3.3<br><br> Make sure that you have libtool 1.3.3 or |
| later installed before trying to configure and build Apache 2.0. |
| Libtool can be downloaded from the Free Software Foundation (FSF), at |
| http://www.gnu.org/order/ftp.html.<br><br></li> |
| |
| <li>Autoconf 2.13<br><br> Make sure that you have autoconf 2.13 or |
| later installed before trying to configure and build Apache 2.0. |
| Autoconf can be downloaded from the Free Software Foundation (FSF), at |
| http://www.gnu.org/order/ftp.html.<br><br></li> |
| |
| </ul> |
| |
| <h3>Configuring the source tree</h3> |
| |
| <h4>Setup</h4> |
| |
| <p>If you have downloading the Apache 2.0 from the CVS, rather than a |
| release distribution, then you will need to prepare the source tree |
| for configuration and compilation. This is done by running:</p> |
| |
| <blockquote><code> |
| ./buildconf |
| </blockquote></code> |
| |
| <p>This script ensures that all required programs are installed on the |
| currently machine, and creates the ./configure script. If you are |
| using a package downloaded from apache.org then this step is not |
| necessary.</p> |
| |
| <h4>Introduction</h4> |
| |
| <p>The next step is to configure the Apache source tree for your |
| particular platform and personal requirements. The most important |
| setup here is the location prefix where Apache is to be installed |
| later, because Apache has to be configured for this location to work |
| correctly. But there are a lot of other options available for your |
| pleasure.</p> |
| |
| <p>For a short impression of what possibilities you have, here is a |
| typical example which compiles Apache for the installation tree |
| /sw/pkg/apache with a particular compiler and flags plus the two |
| additional modules mod_rewrite and mod_speling for later loading |
| through the DSO mechanism:</p> |
| |
| <blockquote><code> |
| $ CC="pgcc" CFLAGS="-O2" \<br> |
| ./configure --prefix=/sw/pkg/apache \<br> |
| --enable-rewrite=shared \<br> |
| --enable-speling=shared |
| </code></blockquote> |
| |
| <p>The easiest way to find all of the configuration flags for Apache |
| 2.0 is to run ./configure --help. What follows is a brief description |
| of most of the arguments.</p> |
| |
| <pre> |
| Reference: |
| |
| $ [CC=...] [TARGET=...] |
| [CPPFLAGS=...] [NOTEST_CPPFLAGS=...] |
| [CFLAGS=...] [NOTEST_CFLAGS=...] |
| [CXXFLAGS=...] [NOTEST_CXXFLAGS=...] |
| [LDFLAGS=...] [NOTEST_LDFLAGS=...] |
| [LIBS=...] [NOTEST_LIBS=...] |
| [INCLUDES=...] [SHLIB_PATH=...] |
| |
| ./configure |
| [--quiet] [--prefix=DIR] [--enable-NAME=(shared)] |
| [--verbose] [--exec-prefix=PREFIX] [--disable-NAME] |
| [--shadow[=DIR]] [--bindir=EPREFIX] [--with-mpm=NAME] |
| [--show-layout] [--sbindir=DIR] |
| [--help] [--libexecdir=DIR] |
| [--mandir=DIR] |
| [--sysconfdir=DIR] |
| [--datadir=DIR] |
| [--includedir=DIR] |
| [--localstatedir=DIR] |
| [--runtimedir=DIR] [--enable-suexec] |
| [--logfiledir=DIR] [--suexec-caller=UID] |
| [--proxycachedir=DIR] [--suexec-docroot=DIR] |
| [--with-layout=[FILE:]ID] [--suexec-logfile=FILE] |
| [--suexec-userdir=DIR] |
| [--with-perl=FILE] [--suexec-uidmin=UID] |
| [--without-support] [--suexec-gidmin=GID] |
| [--without-confadjust] [--suexec-safepath=PATH] |
| [--without-execstrip] |
| [--server-uid=UID] |
| [--server-gid=GID] |
| |
| [--enable-maintainter-mode] |
| [--enable-debug] |
| </pre> |
| |
| <p>Use the CC, CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS, LIBS, INCLUDES, |
| SHLIB_PATH and TARGET environment variables to override or expand the |
| corresponding default entries as determined by configure.</p> |
| |
| <p>Use NOTEST_CPPFLAGS, NOTEST_CFLAGS, NOTEST_CXXFLAGS, |
| NOTEST_LDFLAGS, and NOTEST_LIBS to add entries that should only be |
| used during the actual build and compilation of Apache, such as |
| -Werror.</p> |
| |
| <p>Use the --prefix=PREFIX and --exec-prefix=EPREFIX options to |
| configure Apache to use a particular installation prefix. The default |
| is PREFIX=/usr/local/apache and EPREFIX=PREFIX.</p> |
| |
| <p>Use the --bindir=DIR, --sbindir=DIR, --libexecdir=DIR, |
| --mandir=DIR, --sysconfdir=DIR, --datadir=DIR, --iconsdir=DIR, |
| --htdocsdir=DIR, --cgidir=DIR, --includedir=DIR, --localstatedir=DIR, |
| --runtimedir=DIR, --logfiledir=DIR and --proxycachedir=DIR option to |
| change the paths for particular subdirectories of the installation |
| tree. Defaults are bindir=EPREFIX/bin, sbindir=EPREFIX/bin, |
| libexecdir=EPREFIX/modules, mandir=PREFIX/man, sysconfdir=PREFIX/conf, |
| datadir=PREFIX, iconsdir=PREFIX/icons, htdocsdir=PREFIX/htdocs, |
| cgidir=PREFIX/cgi-bin, includedir=PREFIX/include, |
| localstatedir=PREFIX, runtimedir=PREFIX/logs, logfiledir=PREFIX/logs |
| and proxycachedir=PREFIX/proxy.</p> |
| |
| <p>Note: To reduce the pollution of shared installation locations |
| (like /usr/local/ or /etc) with Apache files to a minimum the string |
| ``/apache'' is automatically appended to 'libexecdir', 'sysconfdir', |
| 'datadir', 'localstatedir' and 'includedir' if (and only if) the |
| following points apply for each path individually:</p> |
| <ol> |
| <li>the path doesn't already contain the word ``apache''</li> |
| <li>the path was not directly customized by the user</li> |
| </ol> |
| |
| <p>Keep in mind that per default these paths are derived from 'prefix' |
| and 'exec-prefix', so usually its only a matter whether these paths |
| contain ``apache'' or not. Although the defaults were defined with |
| experience in mind you always should make sure the paths fit your |
| situation by checking the finally chosen paths via the --layout |
| option.</p> |
| |
| <p>Use the --with-layout=[F:]ID option to select a particular |
| installation path base-layout. You always _HAVE_ to select a |
| base-layout. There are currently two layouts pre-defined in the file |
| config.layout: `Apache' for the classical Apache path layout and `GNU' |
| for a path layout conforming to the GNU `standards' document. When you |
| want to use your own custom layout FOO, either add a corresponding |
| "<Layout FOO>...</Layout>" section to config.layout and use |
| --with-layout=FOO or place it into your own file, say config.mypaths, |
| and use --with-layout=config.mypaths:FOO.</p> |
| |
| <p>Use the --show-layout option to check the final installation path |
| layout while fiddling with the options above.</p> |
| |
| <p>Use the --enable-NAME=(shared) and --disable-NAME options to enable |
| or disable a particular already distributed module from the Apache |
| package.</p> |
| |
| <p>Use the --with-mpm=NAME option to determine which MPM should be |
| built for your server.</p> |
| |
| <h3>List of Available Modules</h3> |
| <pre> |
| Environment creation |
| (+) mod_env .......... Set environment variables for CGI/SSI scripts |
| (+) mod_setenvif ..... Set environment variables based on HTTP headers |
| (-) mod_unique_id .... Generate unique identifiers for request |
| |
| Content type decisions |
| (+) mod_mime ......... Content type/encoding determination (configured) |
| (-) mod_mime_magic ... Content type/encoding determination (automatic) |
| (+) mod_negotiation .. Content selection based on the HTTP Accept* headers |
| |
| URL mapping |
| (+) mod_alias ........ Simple URL translation and redirection |
| (-) mod_rewrite ...... Advanced URL translation and redirection |
| (+) mod_userdir ...... Selection of resource directories by username |
| (-) mod_speling ...... Correction of misspelled URLs |
| |
| Directory Handling |
| (+) mod_dir .......... Directory and directory default file handling |
| (+) mod_autoindex .... Automated directory index file generation |
| |
| Access Control and Authentication |
| (+) mod_access ....... Access Control (user, host, network) |
| (+) mod_auth ......... HTTP Basic Authentication (user, passwd) |
| (-) mod_auth_dbm ..... HTTP Basic Authentication via Unix NDBM files |
| (-) mod_auth_db ...... HTTP Basic Authentication via Berkeley-DB files |
| (-) mod_auth_anon .... HTTP Basic Authentication for Anonymous-style users |
| (-) mod_digest ....... HTTP Digest Authentication |
| |
| HTTP response |
| (-) mod_headers ...... Arbitrary HTTP response headers (configured) |
| (-) mod_cern_meta .... Arbitrary HTTP response headers (CERN-style files) |
| (-) mod_expires ...... Expires HTTP responses |
| (+) mod_asis ......... Raw HTTP responses |
| |
| Scripting |
| (+) mod_include ...... Server Side Includes (SSI) support |
| (+) mod_cgi .......... Common Gateway Interface (CGI) support |
| (+) mod_cgid ......... Common Gateway Interface (CGI) support for |
| multi-threaded MPMs |
| (+) mod_actions ...... Map CGI scripts to act as internal `handlers' |
| |
| Internal Content Handlers |
| (+) mod_status ....... Content handler for server run-time status |
| (-) mod_info ......... Content handler for server configuration summary |
| |
| Request Logging |
| (+) mod_log_config ... Customizable logging of requests |
| (-) mod_usertrack .... Logging of user click-trails via HTTP Cookies |
| |
| Content Management |
| (-) mod_dav .......... WebDAV (RFC 2518) support for Apache |
| (-) mod_dav_fs ....... mod_dav backend to managing filesystem content |
| |
| Miscellaneous |
| (+) mod_imap ......... Server-side Image Map support |
| (-) mod_proxy ........ Caching Proxy Module (HTTP, HTTPS, FTP) |
| (-) mod_so ........... Dynamic Shared Object (DSO) bootstrapping |
| |
| Experimental |
| (-) mod_mmap_static .. Caching of frequently served pages via mmap() |
| |
| Development |
| (-) mod_example ...... Apache API demonstration (developers only) |
| |
| MPMs |
| mpmt_pthread ..... Multi-process(dynamic) Multi-threaded(static) |
| Unix MPM |
| prefork .......... Preforking Unix MPM |
| perchild ......... Multi-process(static) Multi-threaded(dynamic) |
| Unix MPM, that allows a User per child process |
| |
| winnt ............ Multi-process(1) Multi-threaded Windows MPM |
| |
| mpmt_beos ........ Multi-process Multi-threaded Beos MPM |
| beos ............. Multi-process Multi-threaded Beos MPM |
| |
| spmt_os2 ......... Single-process Multi-threaded OS/2 MPM |
| _________________________________________________________________________ |
| (+) = enabled per default [disable with --disable-module] |
| (-) = disabled per default [enable with --enable-module ] |
| |
| </pre> |
| |
| <p>Use the --enable-suexec option to enable the suEXEC feature by |
| building and installing the "suexec" support program.</p> |
| |
| <p><strong>CAUTION: FOR DETAILS ABOUT THE SUEXEC FEATURE WE HIGHLY |
| RECOMMEND YOU TO FIRST READ THE DOCUMENT htdocs/manual/suexec.html |
| BEFORE USING THE ABOVE OPTIONS.</strong></p> |
| |
| <p><strong>USING THE SUEXEC FEATURE PROPERLY CAN REDUCE CONSIDERABLY |
| THE SECURITY RISKS INVOLVED WITH ALLOWING USERS TO DEVELOP AND RUN |
| PRIVATE CGI OR SSI PROGRAMS. HOWEVER, IF SUEXEC IS IMPROPERLY |
| CONFIGURED, IT CAN CAUSE ANY NUMBER OF PROBLEMS AND POSSIBLY CREATE |
| NEW HOLES IN YOUR COMPUTER'S SECURITY. IF YOU AREN'T FAMILIAR WITH |
| MANAGING SETUID ROOT PROGRAMS AND THE SECURITY ISSUES THEY PRESENT, WE |
| HIGHLY RECOMMEND THAT YOU NOT CONSIDER USING SUEXEC AND KEEP AWAY FROM |
| THESE OPTIONS!</strong></p> |
| |
| <p>Use the --quiet option to disable all configuration verbose |
| messages.</p> |
| |
| |
| <h3>Building the package</h3> |
| |
| <p>Now you can build the various parts which form the Apache package |
| by simply running the command:</p> |
| |
| <blockquote><code> |
| $ make |
| </code></blockquote> |
| |
| <p>Please be patient here, this takes approximately 2 minutes to |
| complete under a Pentium-166/FreeBSD-2.2 system, dependend on the |
| amount of modules you have enabled.</p> |
| |
| |
| <h3>Installing the package</h3> |
| |
| <p>Now its time to install the package under the configured |
| installation PREFIX (see --prefix option above) by running:</h3> |
| <blockquote><code> |
| $ make install |
| </code></blockquote> |
| |
| <p>For the paranoid hackers under us: The above command really |
| installs under prefix _only_, i.e. no other stuff from your system is |
| touched. Even if you upgrade an existing installation your |
| configuration files in PREFIX/conf/ are preserved.</p> |
| |
| |
| <h3>Testing the package</h3> |
| |
| <p>Now you can fire up your Apache HTTP server by immediately running:</p> |
| |
| <blockquote><code> |
| $ PREFIX/bin/apachectl start |
| </code></blockquote> |
| |
| <p>and then you should be able to request your first document via URL |
| http://localhost/ (when you built and installed Apache as root or at |
| least used the --without-confadjust option) or http://localhost:8080/ |
| (when you built and installed Apache as a regular user). Then stop the |
| server again by running:</p> |
| <blockquote><code> |
| $ PREFIX/bin/apachectl stop |
| </code></blockquote> |
| |
| <h3>Customizing the package</h3> |
| |
| <p>Finally you can customize your Apache HTTP server by editing the |
| configuration files under PREFIX/conf/.</p> |
| <blockquote><code> |
| $ vi PREFIX/conf/httpd.conf |
| </code></blockquote> |
| |
| <p>Have a look at the Apache manual under docs/manual/ or |
| http://httpd.apache.org/docs/ for a complete reference of available |
| configuration directives.</p> |
| |
| |
| <h3>Preparing the system</h3> |
| |
| <p>Proper operation of a public HTTP server requires at least the |
| following:</p> |
| |
| <ol> |
| |
| <li>A correctly working TCP/IP layer, since HTTP is implemented on top |
| of TCP/IP. Although modern Unix platforms have good networking layers, |
| always make sure you have all official vendor patches referring to the |
| network layer applied.</li> |
| |
| <li>Accurate time keeping, since elements of the HTTP protocol are |
| expressed as the time of day. So, it's time to investigate setting |
| some time synchronization facility on your system. Usually the ntpdate |
| or xntpd programs are used for this purpose which are based on the |
| Network Time Protocol (NTP). See the Usenet newsgroup |
| comp.protocols.time.ntp and the NTP homepage at |
| http://www.eecis.udel.edu/~ntp/ for more details about NTP software |
| and public time servers.</li> |
| |
| </ol> |
| |
| |
| <!--#include virtual="footer.html" --> |
| </BODY> |
| </HTML> |