Installation Tomcat Ubuntu

De EjnTricks

L'installation de Tomcat s'effectue à l'aide de l'outil apt, avec la commande suivante:

#sudo apt-get install tomcat6

Une installation de Tomcat sous Ubuntu avec apt-get entraîne la création de plusieurs répertoires

  • /etc/tomcat6: Contient un ensemble de fichier commun de configuration. pas utilisé à priori.
  • /usr/share/tomcat6: Correspond au CATALINA_HOME, contient les binaires de Tomcat.
  • /var/cache/tomcat6: Correspond au répertoire de travail de Tomcat, en autre les pages compilés de webapp.
  • /var/lib/tomcat6: Correspond au CATALINA_BASE, contient l'instance par défaut où les webapp doivent être déployés.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Version 11.X

Sur une machine Ubuntu, le script de démarrage du service scan des répertoires pour trouver l'installation de JAVA disponible, si la variable d'environnement JAVA_HOME n'est pas positionnée. Par défaut, c'est l'installation java-6-openjdk qui est prise en compte. Pour prendre en compte la version de SUN, il faut éditer le fichier /etc/init.d/tomcat6:

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)
JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done

Modifié par:

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)
JDK_DIRS="/usr/lib/jvm/java-6-sun /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done


Version 12.04

Pour la version 12.04 de Ubuntu, le script de démarrage de Tomcat, fichier /etc/init.d/tomcat6 est légèrement modifié pour prendre en compte le lien /usr/lib/jvm/default-java comme JRE à utilisé préférentiellement.

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)

OPENJDKS=""
find_openjdks
JDK_DIRS="/usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done
export JAVA_HOME

Or ce lien default-java pointe par défaut sur l'instance de openjdk:

#ll /usr/lib/jvm
total 100
drwxr-xr-x   6 root root  4096 mai    6 20:41 ./
drwxr-xr-x 122 root root 69632 mai    6 22:52 ../
lrwxrwxrwx   1 root root    24 déc.   2 14:46 default-java -> java-1.6.0-openjdk-amd64/
lrwxrwxrwx   1 root root    24 déc.   2 14:46 java-1.6.0-openjdk -> java-1.6.0-openjdk-amd64/
lrwxrwxrwx   1 root root    20 avril 13 02:36 java-1.6.0-openjdk-amd64 -> java-6-openjdk-amd64/
-rw-r--r--   1 root root  2387 avril 13 02:36 .java-1.6.0-openjdk-amd64.jinfo
drwxr-xr-x   2 root root  4096 mai    6 20:41 java-6-openjdk/
drwxr-xr-x   5 root root  4096 mai    6 20:41 java-6-openjdk-amd64/
drwxr-xr-x   3 root root  4096 mai    6 20:41 java-6-openjdk-common/
lrwxrwxrwx   1 root root    19 juil. 12  2011 java-6-sun -> java-6-sun-1.6.0.26/
drwxr-xr-x   8 root root  4096 juil. 12  2011 java-6-sun-1.6.0.26/
-rw-r--r--   1 root root  2392 juil. 12  2011 .java-6-sun.jinfo

Par conséquent, même si la version de Java est modifiée par la commande update-java-alternatives, cell-ci ne sera pas prise en compte. Deux choix s'offrent aux utilisateurs:

  • Modifier le lien default-java.
  • Modifier le script de démarrage de Tomcat.

La deuxième solution est utilisée afin de se prémunir de problèmes sur d'autres applications. Le principe est donc d'inverser les répertoires de recherche de la JRE.

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)

OPENJDKS=""
find_openjdks
JDK_DIRS="/usr/lib/jvm/java-6-sun /usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done
export JAVA_HOME

Lors de l'installation de la version 1.7, il faut penser à modifier le script pour prendre en compte cette nouvelle version.

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)

OPENJDKS=""
find_openjdks
JDK_DIRS="/usr/lib/jvm/java-7-oracle /usr/lib/jvm/java-6-sun /usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done
export JAVA_HOME


Version 18.10

Pour la version 18.10 de Ubuntu, le serveur Tomcat est démarré à l'aide de systemd. Le fichier de configuration /lib/systemd/system/tomcat8.service déclare la variable ExecStart pour spécifier le script à exécuter.

#
# Systemd unit file for Apache Tomcat
#

[Unit]
Description=Apache Tomcat 8.5 Web Application Server
Documentation=https://tomcat.apache.org/tomcat-8.5-doc/index.html
After=network.target

[Service]

# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat8"
Environment="CATALINA_BASE=/var/lib/tomcat8"
Environment="CATALINA_TMPDIR=/tmp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
EnvironmentFile=-/etc/default/tomcat8

# Lifecycle
Type=simple
ExecStartPre=+/usr/libexec/tomcat8/tomcat-update-policy.sh
ExecStart=/bin/sh /usr/libexec/tomcat8/tomcat-start.sh
SuccessExitStatus=143

# Logging
SyslogIdentifier=tomcat8

# Security
User=tomcat8
Group=tomcat8
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Le contenu du script est le suivant et un le script /usr/libexec/tomcat8/tomcat-locate-java.sh est exécuté au démarrage.

#!/bin/sh
#
# Startup script for Apache Tomcat with systemd
#

set -e

# Find the Java runtime and set JAVA_HOME
. /usr/libexec/tomcat8/tomcat-locate-java.sh

# Set the JSP compiler if configured in the /etc/default/tomcat8 file
[ -n "$JSP_COMPILER" ] && JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=\"$JSP_COMPILER\""

export JAVA_OPTS

# Enable the Java security manager?
SECURITY=""
[ "$TOMCAT_SECURITY" = "yes" ] && SECURITY="-security"


# Start Tomcat
cd $CATALINA_BASE && exec $CATALINA_HOME/bin/catalina.sh run $SECURITY

Et c'est dans ce script, /usr/libexec/tomcat8/tomcat-locate-java.sh, que la recherche de la JVM a été déplacée. Le script est modifié pour indiquer un emplacement prioritaire.

#!/bin/sh
#
# Script looking for a Java runtime suitable for running Tomcat
#
# The script looks for the default JRE/JDK, OpenJDK and Oracle JDK
# as packaged by java-package. The Java runtime found is exported
# in the JAVA_HOME environment variable.
#

set -e

# Find the Java runtime if JAVA_HOME isn't already defined
if [ -z "$JAVA_HOME" ]; then
    # This function sets the variable JDK_DIRS
    find_jdks()
    {
        for java_version in 11 10 9 8
        do
            for jvmdir in /usr/lib/jvm/java-${java_version}-openjdk-* \
                          /usr/lib/jvm/jdk-${java_version}-oracle-* \
                          /usr/lib/jvm/jre-${java_version}-oracle-* \
                          /usr/lib/jvm/java-${java_version}-oracle \
                          /usr/lib/jvm/oracle-java${java_version}-jdk-* \
                          /usr/lib/jvm/oracle-java${java_version}-jre-*
            do
                if [ -d "${jvmdir}" ]
                then
                    JDK_DIRS="${JDK_DIRS} ${jvmdir}"
                fi
            done
        done
    }

    # The first existing directory is used for JAVA_HOME
    JDK_DIRS="/usr/lib/jvm/java-8-oracle /usr/lib/jvm/default-java"
    #JDK_DIRS="/usr/lib/jvm/default-java"
    find_jdks

    # Look for the right JVM to use
    for jdir in $JDK_DIRS; do
        if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
            JAVA_HOME="$jdir"
        fi
    done
    export JAVA_HOME
fi

if [ -z "$JAVA_HOME" ]; then
    echo "<2>No JDK or JRE found - Please set the JAVA_HOME variable or install the default-jdk package"
    exit 1
fi

Il est également possible de modifier le lien default-java pointant par défaut sur l'instance de openjdk.

#ll /usr/lib/jvm
total 108
drwxr-xr-x   6 root root  4096 nov.  26 16:12 ./
drwxr-xr-x 111 root root 69632 nov.  20 12:09 ../
lrwxrwxrwx   1 root root    33 nov.  26 16:10 default-java -> /usr/lib/jvm/java-1.11.0-openjdk-amd64/
lrwxrwxrwx   1 root root    21 avril 21  2018 java-1.11.0-openjdk-amd64 -> java-11-openjdk-amd64/
-rw-r--r--   1 root root  1994 oct.  22 20:46 .java-1.11.0-openjdk-amd64.jinfo
drwxr-xr-x   7 root root  4096 nov.   7 00:15 java-11-openjdk-amd64/
lrwxrwxrwx   1 root root    20 avril 13  2016 java-1.8.0-openjdk-amd64 -> java-8-openjdk-amd64/
-rw-r--r--   1 root root  2600 oct.  22 19:25 .java-1.8.0-openjdk-amd64.jinfo
drwxr-xr-x   8 root root  4096 mai   11  2016 java-7-oracle/
-rw-r--r--   1 root root  2543 mai   11  2016 .java-7-oracle.jinfo
drwxr-xr-x   5 root root  4096 avril 24  2016 java-8-openjdk-amd64/
drwxr-xr-x   8 root root  4096 avril 24  2017 java-8-oracle/
-rw-r--r--   1 root root  2643 avril 24  2017 .java-8-oracle.jinfo

Il est possible de modifier le script ou de changer la définition du lien. Dans le cadre de cette installation, la version 8 de OpenJDK est jugée satisfaisante pour la machine. Le lien est donc modifié.

#sudo rm /usr/lib/jvm/default-java
#sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/default-java

Run-icon.png Arrêt / Relance

Pour l'installation décrite ci dessus, le lancement et l'arrêt de Tomcat ne s'effectue pas avec les traditionnels script sh startup.sh et shutdown.sh. Le lancement et l'arrêt du serveur s'effectue à l'aide des commandes services:

#sudo service tomcat6 start
#sudo service tomcat6 stop