<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Using Apache With Novell NetWare - Apache HTTP Server</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.3</p>
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.3</a> &gt; <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Using Apache With Novell NetWare</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/platform/netware.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/platform/netware.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>


    <p>This document explains how to install, configure and run
    Apache 2.0 under Novell NetWare 6.0 and above. If you find any bugs,
    or wish to contribute in other ways, please use our
    <a href="http://httpd.apache.org/bug_report.html">bug reporting
    page.</a></p>

    <p>The bug reporting page and dev-httpd mailing list are <em>not</em>
    provided to answer questions about configuration or running Apache.
    Before you submit a bug report or request, first consult this document, the
    <a href="../faq/">Frequently Asked Questions</a> page and the other
    relevant documentation topics. If you still have a question or problem,
    post it to the <a href="news://developer-forums.novell.com/novell.devsup.webserver">
    novell.devsup.webserver</a> newsgroup, where many Apache users are more than
    willing to answer new and obscure questions about using Apache on NetWare.</p>

    <p>Most of this document assumes that you are installing Apache
    from a binary distribution. If you want to compile Apache
    yourself (possibly to help with development, or to track down
    bugs), see the section on <a href="#comp">Compiling Apache for
    NetWare</a> below.</p>

  </div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#req">Requirements</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#down">Downloading Apache for NetWare</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#inst">Installing Apache for NetWare</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#run">Running Apache for NetWare</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#use">Configuring Apache for NetWare</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#comp">Compiling Apache for NetWare</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="req" id="req">Requirements</a></h2>

    

    <p>Apache 2.0 is designed to run on NetWare 6.0 service pack 3 
    and above. If you are running a service pack less
    than SP3, you must install the latest 
    <a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
    for C (LibC)</a>.</p>

    <p>NetWare service packs are available <a href="http://support.novell.com/misc/patlst.htm#nw">here</a>.</p>

    <p>Apache 2.0 for NetWare can also be run in a NetWare 5.1 environment
    as long as the latest service pack or the latest version
    of the <a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
    for C (LibC)</a> has been installed .  <strong>WARNING:</strong> Apache 2.0 
    for NetWare has not been targeted for or tested in this environment.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="down" id="down">Downloading Apache for NetWare</a></h2>

    

    <p>Information on the latest version of Apache can be found on
    the Apache web server at <a href="http://www.apache.org/">http://www.apache.org/</a>. This
    will list the current release, any more recent alpha or
    beta-test releases, together with details of mirror web and
    anonymous ftp sites. Binary builds of the latest releases of
    Apache 2.0 for NetWare can be downloaded from 
    <a href="http://www.apache.org/dist/httpd/binaries/netware">here</a>.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="inst" id="inst">Installing Apache for NetWare</a></h2>

    

    <p>There is no Apache install program for NetWare currently. If you
    are building Apache 2.0 for NetWare from source, you will need to 
    copy the files over to the server manually.</p>

    <p>Follow these steps to install Apache on NetWare from the
    binary download (assuming you will install to
    <code>sys:/apache2</code>):</p>

    <ul>
      <li>Unzip the binary download file to the root of the <code>SYS:</code>
      volume (may be installed to any volume)</li>

      <li>Edit the <code>httpd.conf</code> file setting <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code> and <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> along with any file path values
      to reflect your correct server settings</li>

      <li>Add <code>SYS:/APACHE2</code> to the search path, for example:
        <div class="example"><p><code>SEARCH ADD SYS:\APACHE2</code></p></div>
      </li>

    </ul>

    <p>Follow these steps to install Apache on NetWare manually
    from your own build source (assuming you will install to
    <code>sys:/apache2</code>):</p>

    <ul>
      <li>Create a directory called <code>Apache2</code> on a
      NetWare volume</li>

      <li>Copy <code>APACHE2.NLM</code>, <code>APRLIB.NLM</code>
      to <code>SYS:/APACHE2</code></li>

      <li>Create a directory under <code>SYS:/APACHE2</code>
      called <code>BIN</code></li>

      <li>Copy <code>HTDIGEST.NLM</code>, <code>HTPASSWD.NLM</code>, 
      <code>HTDBM.NLM</code>, <code>LOGRES.NLM</code>, <code>ROTLOGS.NLM</code>
      to <code>SYS:/APACHE2/BIN</code></li>

      <li>Create a directory under <code>SYS:/APACHE2</code>
      called <code>CONF</code></li>

      <li>Copy the <code>HTTPD-STD.CONF</code> file to the
      <code>SYS:/APACHE2/CONF</code> directory and rename to
      <code>HTTPD.CONF</code></li>

      <li>Copy the <code>MIME.TYPES</code>, <code>CHARSET.CONV</code> and 
      <code>MAGIC</code> files to <code>SYS:/APACHE2/CONF</code> directory</li>

      <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\ICONS</code>
      to <code>SYS:/APACHE2/ICONS</code></li>

      <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\MANUAL</code>
      to <code>SYS:/APACHE2/MANUAL</code></li>

      <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\ERROR</code>
      to <code>SYS:/APACHE2/ERROR</code></li>

      <li>Copy all files and subdirectories in <code>\HTTPD-2.0\DOCS\DOCROOT</code>
      to <code>SYS:/APACHE2/HTDOCS</code></li>

      <li>Create the directory <code>SYS:/APACHE2/LOGS</code>
      on the server</li>

      <li>Create the directory <code>SYS:/APACHE2/CGI-BIN</code>
      on the server</li>

      <li>Create the directory <code>SYS:/APACHE2/MODULES</code>
      and copy all nlm modules into the <code>modules</code> directory</li>

      <li>Edit the <code>HTTPD.CONF</code> file searching for all
      <code>@@Value@@</code> markers and replacing them with the
      appropriate setting</li>

      <li>Add <code>SYS:/APACHE2</code> to the search path, for example:
        <div class="example"><p><code>SEARCH ADD SYS:\APACHE2</code></p></div>
      </li>
    </ul>

    <p>Apache may be installed to other volumes besides the default <code>SYS</code> volume.</p>

    <p>During the build process, adding the keyword "install" to the makefile command line
    will automatically produce a complete distribution package under the subdirectory 
    <code>DIST</code>. Install Apache by simply copying the distribution that was produced 
    by the makfiles to the root of a NetWare volume (see: <a href="#comp">Compiling Apache for 
    NetWare</a> below).</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="run" id="run">Running Apache for NetWare</a></h2>

    

    <p>To start Apache just type <code>apache</code> at the
    console. This will load apache in the OS address space. If you
    prefer to load Apache in a protected address space you may
    specify the address space with the load statement as follows:</p>

    <div class="example"><p><code>
      load address space = apache2 apache2
    </code></p></div>

    <p>This will load Apache into an address space called apache2.
    Running multiple instances of Apache concurrently on NetWare is
    possible by loading each instance into its own protected
    address space.</p>

    <p>After starting Apache, it will be listening to port 80
    (unless you changed the <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>
    directive in the configuration files).
    To connect to the server and access the default page,
    launch a browser and enter the server's name or address. This
    should respond with a welcome page, and a link to the Apache
    manual. If nothing happens or you get an error, look in the
    <code>error_log</code> file in the <code>logs</code>
    directory.</p>

    <p>Once your basic installation is working, you should
    configure it properly by editing the files in the
    <code>conf</code> directory.</p>

    <p>To unload Apache running in the OS address space just type
    the following at the console:</p>

    <div class="example"><p><code>
      unload apache2
    </code></p></div>

    <p>or</p>

    <div class="example"><p><code>
      apache2 shutdown
    </code></p></div>

    <p>If apache is running in a protected address space specify the
    address space in the unload statement:</p>

    <div class="example"><p><code>
      unload address space = apache2 apache2
    </code></p></div>

    <p>When working with Apache it is important to know how it will
    find the configuration files. You can specify a configuration
    file on the command line in two ways:</p>

    <ul>
      <li><code>-f</code> specifies a path to a particular
      configuration file</li>
    </ul>

    <div class="example"><p><code>
      apache2 -f "vol:/my server/conf/my.conf"
    </code></p></div>

    <div class="example"><p><code>
      apache -f test/test.conf
    </code></p></div>

    <p>In these cases, the proper <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
    should be set in the configuration file.</p>

    <p>If you don't specify a configuration file name with <code>-f</code>,
    Apache will use the file name compiled into the server, usually
    <code>conf/httpd.conf</code>. Invoking Apache with the <code>-V</code>
    switch will display this value labeled as <code>SERVER_CONFIG_FILE</code>.
    Apache will then determine its <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>
    by trying the following, in this order:</p>

    <ul>
      <li>A <code>ServerRoot</code> directive via a
      <code>-C</code> switch.</li>

      <li>The <code>-d</code> switch on the command line.</li>

      <li>Current working directory</li>

      <li>The server root compiled into the server.</li>
    </ul>

    <p>The server root compiled into the server is usually <code>sys:/apache2</code>.
    invoking apache with the <code>-V</code> switch will display this value labeled as
    <code>HTTPD_ROOT</code>.</p>

    <p>Apache 2.0 for NetWare includes a set of command line directives that can
    be used to modify or display information about the running instance of the
    web server. These directives are only available while Apache is running. Each 
    of these directives must be preceded by the keyword <code>APACHE2</code>.</p>

    <dl>
      <dt>RESTART</dt>
      <dd>Instructs Apache to terminate all running worker
      threads as they become idle, reread the configuration file and restart each
      worker thread based on the new configuration.</dd>

      <dt>VERSION</dt>
      <dd>Displays version information about the currently
      running instance of Apache.</dd>

      <dt>MODULES</dt>
      <dd>Displays a list of loaded modules both built-in
      and external.</dd>

      <dt>DIRECTIVES</dt>
      <dd>Displays a list of all available directives.</dd>

      <dt>SETTINGS</dt>
      <dd>Enables or disables the thread status display
      on the console. When enabled, the state of each running threads is displayed 
      on the Apache console screen.</dd>

      <dt>SHUTDOWN</dt>
      <dd>Terminates the running instance of the Apache
      web server.</dd>

      <dt>HELP</dt>
      <dd>Describes each of the runtime directives.</dd>
    </dl>

    <p>By default these directives are issued against the instance of Apache running
    in the OS address space. To issue a directive against a specific instance running
    in a protected address space, include the -p parameter along with the name of the
    address space. For more information type "apache2 Help" on the command line.</p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="use" id="use">Configuring Apache for NetWare</a></h2>

    

    <p>Apache is configured by reading configuration files usually stored
    in the <code>conf</code> directory. These are the same as files used 
    to configure the Unix version, but there are a few different directives for
    Apache on NetWare. See the <a href="../">Apache
    documentation</a> for all the available directives.</p>

    <p>The main differences in Apache for NetWare are:</p>

    <ul>
      <li>
        <p>Because Apache for NetWare is multithreaded, it does not
        use a separate process for each request, as Apache does on some Unix
        implementations. Instead there are only threads running: a parent
        thread, and multiple child or worker threads which handle the requests.</p>

        <p>Therefore the "process"-management directives are different:</p>

        <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> -
        Like the Unix directive, this controls how many requests
        a worker thread will serve before exiting. The recommended default,
        <code>MaxRequestsPerChild 0</code>, causes the thread to continue servicing
        request indefinitely. It is recommended on NetWare, unless there is some
        specific reason, that this directive always remain set to <code>0</code>.</p>

        <p><code class="directive"><a href="../mod/mpm_common.html#startthreads">StartThreads</a></code> -
        This directive tells the server how many threads it should start initially.
        The recommended default is <code>StartThreads 50</code>.</p>

        <p><code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> -
        This directive instructs the server to spawn additional worker threads
        if the number of idle threads ever falls below this value. The recommended
        default is <code>MinSpareThreads 10</code>.</p>

        <p><code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code> -
        This directive instructs the server to begin terminating worker threads
        if the number of idle threads ever exceeds this value. The recommended
        default is <code>MaxSpareThreads 100</code>.</p>

        <p><code class="directive"><a href="../mod/mpm_netware.html#maxthreads">MaxThreads</a></code> -
        This directive limits the total number of work threads to a maximum
        value. The recommended default is <code>ThreadsPerChild 250</code>.</p>

        <p><code class="directive"><a href="../mod/mpm_common.html#threadstacksize">ThreadStackSize</a></code> -
        This directive tells the server what size of stack to use
        for the individual worker thread. The recommended default
        is <code>ThreadStackSize 65536</code>.</p>
      </li>

      <li>
        <p>The directives that accept filenames as arguments must use 
        NetWare filenames instead of Unix names. However, because Apache 
        uses Unix-style names internally, forward slashes must be used 
        rather than backslashes. It is recommended that all rooted file paths 
        begin with a volume name. If omitted, Apache will assume the 
        <code>SYS:</code> volume which may not be correct.</p>
      </li>

      <li>
        <p>Apache for NetWare has the ability to load modules at
        runtime, without recompiling the server. If Apache is
        compiled normally, it will install a number of optional
        modules in the <code>\Apache2\modules</code> directory.
        To activate these, or other modules, the <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive
        must be used. For example, to active the status module, use
        the following:</p>

        <div class="example"><p><code>
          LoadModule status_module modules/status.nlm
        </code></p></div>

        <p>Information on <a href="../mod/mod_so.html#creating">creating loadable
        modules</a> is also available.</p>
      </li>
    </ul>

    <h3><a name="use-add" id="use-add">Additional NetWare specific directives:</a></h3>

      

      <ul>
        <li><code class="directive"><a href="../mod/core.html#cgimapextension">CGIMapExtension</a></code> -
        This directive maps a CGI file extension to a script interpreter.</li>
      </ul>
      <ul>
        <li><code class="directive"><a href="../mod/mod_nw_ssl.html#securelisten">SecureListen</a></code> -
        Enables SSL encryption for a specified port.</li>
      </ul>
      <ul>
        <li><code class="directive"><a href="../mod/mod_nw_ssl.html#nwssltrustedcerts">NWSSLTrustedCerts</a></code> -
        Adds trusted certificates that are used to create secure connections to proxied servers.</li>
      </ul>
      <ul>
        <li><code class="directive"><a href="../mod/mod_nw_ssl.html#nwsslupgradeable">NWSSLUpgradeable</a></code> -
        Allow a connection created on the specified address/port to be upgraded to an SSL connection.</li>
      </ul>

    

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="comp" id="comp">Compiling Apache for NetWare</a></h2>

    

    <p>Compiling Apache requires MetroWerks CodeWarrior 6.x or higher. Once 
    Apache has been built, it can be installed to the root of any NetWare 
    volume. The default is the <code>sys:/Apache2</code> directory.</p>

    <p>Before running the server you must fill out the <code>conf</code>
    directory. Copy the file <code>HTTPD-STD.CONF</code> from the distribution
    <code>conf</code> directory and rename it to <code>HTTPD.CONF</code>.
    Edit the <code>HTTPD.CONF</code> file searching for all <code>@@Value@@</code>
    markers and replacing them with the appropriate setting. Copy over
    the <code>conf/magic</code> and <code>conf/mime.types</code> files as well.
    Alternatively, a complete distribution can be built by including the keyword
    <code>install</code> when invoking the makefiles.</p>

    <h3><a name="comp-req" id="comp-req">Requirements:</a></h3>

      

      <p>The following development tools are required to build
      Apache 2.0 for NetWare:</p>

      <ul>
        <li>Metrowerks CodeWarrior 6.0 or higher with the
        <a href="http://developer.novell.com/ndk/cwpdk.htm">NetWare PDK 3.0</a>
        or higher.</li>

        <li><a href="http://developer.novell.com/ndk/libc.htm">NetWare Libraries
        for C (LibC)</a></li>

        <li><a href="http://developer.novell.com/ndk/cldap.htm">LDAP Libraries
        for C</a></li>

        <li><a href="http://www.gzip.org/zlib/">ZLIB Compression Library source code</a></li>

        <li>AWK utility (awk, gawk or similar). AWK can be downloaded from
        <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>.
        The utility must be found in your windows path and must be named <code>awk.exe</code>.</li>

        <li>To build using the makefiles, you will need GNU make version 3.78.1 (GMake) available at
        <a href="http://developer.novell.com/ndk/apache.htm">http://developer.novell.com/ndk/apache.htm</a>.</li>
      </ul>

    

    <h3><a name="comp-make" id="comp-make">Building Apache using the NetWare makefiles:</a></h3>

      

      <ul>
        <li>Set the environment variable <code>NOVELLLIBC</code> to the
        location of the NetWare Libraries for C SDK, for example:
        <div class="example"><p><code>Set NOVELLLIBC=c:\novell\ndk\libc</code></p></div>
        </li>

        <li>Set the environment variable <code>METROWERKS</code> to the
        location where you installed the Metrowerks CodeWarrior compiler,
        for example:
        <div class="example"><p><code>Set METROWERKS=C:\Program Files\Metrowerks\CodeWarrior</code></p></div>
        If you installed to the default location <code>C:\Program
        Files\Metrowerks\CodeWarrior</code>, you don't need to set this.</li>

        <li>Set the environment variable <code>LDAPSDK</code> to the
        location where you installed the LDAP Libraries for C, for example:
        <div class="example"><p><code>Set LDAPSDK=c:\Novell\NDK\cldapsdk\NetWare\libc</code></p></div>
        </li>

        <li>Set the environment variable <code>ZLIBSDK</code> to the
        location where you installed the source code for the ZLib Library,
        for example:
        <div class="example"><p><code>Set ZLIBSDK=D:\NOVELL\zlib</code></p></div>
        </li>
        
        <li>Set the environment variable <code>AP_WORK</code> to the full path of
        the <code>httpd</code> source code directory.
        <div class="example"><p><code>Set AP_WORK=D:\httpd-2.0.x</code></p></div>
        </li>

        <li>Set the environment variable <code>APR_WORK</code> to the full path of
        the <code>apr</code> source code directory. Typically <code>\httpd\srclib\apr</code>
        but the APR project can be outside of the httpd directory structure.
        <div class="example"><p><code>Set APR_WORK=D:\apr-1.x.x</code></p></div>
        </li>

        <li>Set the environment variable <code>APU_WORK</code> to the full path of
        the <code>apr-util</code> source code directory. Typically <code>\httpd\srclib\apr-util</code>
        but the APR-UTIL project can be outside of the httpd directory structure.
        <div class="example"><p><code>Set APU_WORK=D:\apr-util-1.x.x</code></p></div>
        </li>

        <li>Make sure that the path to the AWK utility and the GNU make utility
        (<code>gmake.exe</code>) have been included in the system's
        <code>PATH</code> environment variable.</li>

        <li>Download the source code and unzip to an appropriate directory on
        your workstation.</li>

        <li>Change directory to <code>\httpd-2.0</code> and build the prebuild utilities
        by running "<code>gmake -f nwgnumakefile prebuild</code>". This target will create
        the directory <code>\httpd-2.0\nwprebuild</code> and copy each of the utilities 
        to this location that are necessary to complete the following build steps.
        </li>

        <li>Copy the files <code>\httpd-2.0\nwprebuild\GENCHARS.nlm</code> and 
        <code>\httpd-2.0\nwprebuild\DFTABLES.nlm</code> to the <code>SYS:</code> volume of a
        NetWare server and run them using the following commands:
          <div class="example"><p><code>
            SYS:\genchars &gt; sys:\test_char.h<br />
            SYS:\dftables sys:\chartables.c<br />
          </code></p></div>
        </li>

        <li>Copy the files <code>test_char.h</code> and <code>chartables.c</code>
        to the directory <code>\httpd-2.0\os\netware</code> on the build machine.</li>

        <li>Change directory to <code>\httpd-2.0</code> and build Apache by running
        "<code>gmake -f nwgnumakefile</code>". You can create a distribution directory by
        adding an install parameter to the command, for example:
        <div class="example"><p><code>gmake -f nwgnumakefile install</code></p></div>
        </li>
      </ul>

    

    <h3><a name="comp-add" id="comp-add">Additional make options</a></h3>

      

      <ul>
        <li><code>gmake -f nwgnumakefile</code><p>Builds release versions of all of the
        binaries and copies them to a <code>\release</code> destination directory.</p></li>

        <li><code>gmake -f nwgnumakefile DEBUG=1</code><p>Builds debug versions of all of the
        binaries and copies them to a <code>\debug</code> destination directory.</p></li>

        <li><code>gmake -f nwgnumakefile install</code><p>Creates a complete Apache
        distribution with binaries, docs and additional support files in a
        <code>\dist\Apache2</code> directory.</p></li>

        <li><code>gmake -f nwgnumakefile prebuild</code><p>Builds all of the prebuild utilities
        and copies them to the <code>\nwprebuild</code> directory.</p></li>

        <li><code>gmake -f nwgnumakefile installdev</code><p>Same as install but also creates a
        <code>\lib</code> and <code>\include</code> directory in the destination directory
        and copies headers and import files.</p></li>

        <li><code>gmake -f nwgnumakefile clean</code><p>Cleans all object files and binaries
        from the <code>\release.o</code> or <code>\debug.o</code> build areas depending on whether
        <code>DEBUG</code> has been defined.</p></li>

        <li><code>gmake -f nwgnumakefile clobber_all</code><p>Same as clean and also deletes
        the distribution directory if it exists.</p></li>
      </ul>

    

    <h3><a name="comp-add-env" id="comp-add-env">Additional environment variable options</a></h3>

      

      <ul>
        <li>To build all of the experimental modules, set the environment 
        variable <code>EXPERIMENTAL</code>:
        <div class="example"><p><code>Set EXPERIMENTAL=1</code></p></div>
        </li>

        <li>To build Apache using standard BSD style sockets rather than
        Winsock, set the environment variable <code>USE_STDSOCKETS</code>:
        <div class="example"><p><code>Set USE_STDSOCKETS=1</code></p></div>
        </li>

      </ul>

    

    <h3><a name="comp-mod_ssl" id="comp-mod_ssl">Building mod_ssl for the NetWare platform</a></h3>

      

      <p>By default Apache for NetWare uses the built-in module 
      <code class="module"><a href="../mod/mod_nw_ssl.html">mod_nw_ssl</a></code> to provide SSL services.  This module
      simply enables the native SSL services implemented in NetWare OS
      to handle all encryption for a given port.  Alternatively, mod_ssl
      can also be used in the same manner as on other platforms.</p>

      <p>Before mod_ssl can be built for the NetWare platform, the OpenSSL
      libraries must be provided.  This can be done through the following 
      steps:</p>

      <ul>
          <li>Download the latest NetWare patch for OpenSSL from the 
          <a href="http://www.openssl.org/contrib/">OpenSSL Contribution</a>
          page.</li>

          <li>Download the corresponding OpenSSL source code from the
          <a href="http://www.openssl.org/source/">OpenSSL Source</a>
          page.</li>

          <li>At the root of the OpenSSL source directory, apply the NetWare 
          patch using the "patch" utility, for example:
          <div class="example"><p><code>patch -p 1 -i netwarepatch-0.9.7g.diff</code></p></div></li>

          <li>Edit the file <code>NetWare/set_env.bat</code> and modify any 
          tools and utilities paths so that they correspond to your build 
          environment.</li>

          <li>From the root of the OpenSSL source directory, run the following
          scripts:
          <div class="example"><p><code>
              Netware/set_env netware-libc<br />
              Netware/build netware-libc
          </code></p></div></li>

          <li>Before building Apache, set the environment variable
          <code>OSSLSDK</code> to the full path to the root of the openssl
          source code directory.
          <div class="example"><p><code>Set OSSLSDK=d:\openssl-0.9.7x</code></p></div></li>

      </ul>

    

  </div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/platform/netware.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/platform/netware.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2006 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
</body></html>