<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="setup.html">

  &project;

  <properties>
    <author email="remm@apache.org">Remy Maucherat</author>
    <title>Tomcat Setup</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

  <section name="Introduction">
    <p>
      This document introduces several ways to set up Tomcat for running
      on different platforms.  Please note that some advanced setup issues
      are not covered here: the full distribution (ZIP file or tarball) 
      includes a file called
      RUNNING.txt which discusses these issues.  We encourage you to refer
      to it if the information below does not answer some of your questions.
    </p>
  </section>

  <section name="Windows">

    <p>
      Installing Tomcat on Windows can be done easily using the Windows 
      installer. Its interface and functionality is similar to other wizard
      based installers, with only a few items of interest.
    </p>

    <p>
      <ul>
        <li><strong>Installation as a service</strong>: Tomcat will be 
            installed as a Windows service no matter what setting is selected.
            Using the checkbox on the component page sets the service as "auto"
            startup, so that Tomcat is automatically started when Windows
            starts. For optimal security, the service should be run as a
            separate user, with reduced permissions (see the Windows Services
            administration tool and its documentation).</li>
        <li><strong>Java location</strong>: The installer will provide a default
            JRE to use to run the service. The installer uses the registry to
            determine the base path of a JRE, including the JRE
            installed as part of the full JDK. When running on a 64-bit
            operating system, the installer will first look for a 64-bit JRE and
            only look for a 32-bit JRE if a 64-bit JRE is not found. It is not
            mandatory to use the default JRE detected by the installer. You
            may select any installed 32-bit or 64-bit Java 5 or later JRE.</li>
        <li><strong>Tray icon</strong>: When Tomcat is run as a service, there
            will be a tray icon visible.  Note that
            when choosing to run Tomcat at the end of installation, the tray
            icon will be loaded at the same time.</li>
        <li>Refer to the
            <a href="windows-service-howto.html">Windows Service HOW-TO</a>
            for information on how to manage Tomcat as Windows service.
            </li>
      </ul>
    </p>

    <p>The installer will create shortcuts allowing starting and configuring 
       Tomcat. It is important to note that the Tomcat administration web 
       application can only be used when Tomcat is running.</p>

    <p>Note that while Tomcat 5.5 supports running with Java 1.4, the
       compatibility package required for that is not included in the
       installer to minimize download size. If you need it, you have to
       download it and expand into the folder where Tomcat is installed.
       See <code>RUNNING.txt</code> for details.
    </p>
  </section>

  <section name="Unix daemon">

    <p>Tomcat can be run as a daemon using the jsvc tool from the 
       commons-daemon project. Source tarballs for jsvc are included with the
       Tomcat binaries, and need to be compiled. Building jsvc requires
       a C ANSI compiler (such as GCC), GNU Autoconf, and a JDK.</p>

    <p>Before running the script, the <code>JAVA_HOME</code> environment
       variable should be set to the base path of the JDK. Alternately, when
       calling the <code>./configure</code> script, the path of the JDK may
       be specified using the <code>--with-java</code> parameter, such as
       <code>./configure --with-java=/usr/java</code>.</p>

    <p>Using the following commands should result in a compiled jsvc binary,
       located in the <code>$CATALINA_HOME/bin</code> folder. This assumes
       that GNU TAR is used, and that <code>CATALINA_HOME</code> is an 
       environment variable pointing to the base path of the Tomcat 
       installation.</p>
  
    <p>Please note that you should use the GNU make (gmake) instead of
       the native BSD make on FreeBSD systems.</p>


<source>
    cd $CATALINA_HOME/bin
    tar xvfz commons-daemon-native.tar.gz
    cd commons-daemon-1.0.x-native-src/unix
    ./configure
    make
    cp jsvc ../..
    cd ../..
</source>

    <p>Tomcat can then be run as a daemon using the following commands.</p>

<source>
    cd $CATALINA_HOME
    ./bin/jsvc -Djava.endorsed.dirs=./common/endorsed -cp ./bin/bootstrap.jar \
        -outfile ./logs/catalina.out -errfile ./logs/catalina.err \
        org.apache.catalina.startup.Bootstrap
</source>

    <p>jsvc has other useful parameters, such as <code>-user</code> which 
       causes it to switch to another user after the daemon initialization is
       complete. This allows, for example, running Tomcat as a non privileged
       user while still being able to use privileged ports. 
       <code>jsvc --help</code> will return the full jsvc usage 
       information. In particular, the <code>-debug</code> option is useful
       to debug issues running jsvc.</p>

    <p>The file <code>
       $CATALINA_HOME/bin/commons-daemon-1.0.x-native-src/unix/native/Tomcat5.sh
       </code> can be used as a template for starting Tomcat automatically at
       boot time from <code>/etc/init.d</code>.</p>

    <p>Note that the Commons-Daemon JAR file must be on your runtime classpath 
       to run Tomcat in this manner.  The Commons-Daemon JAR file is in the
       Class-Path entry of the bootstrap.jar manifest, but if you get a
       ClassNotFoundException or a NoClassDefFoundError for a Commons-Daemon
       class, add the Commons-Daemon JAR to the -cp argument when launching
       jsvc.</p> 

  </section>

</body>
</document>
