Ubuntu Update Version 18.10

De EjnTricks

Cet article présente la mise à jour de la version 18.10, pour laquelle quels problèmes ont été rencontrés.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Java format icon.png Open JDK

La version est mise à jour et prend en compte l'organisation en module de Java. Or les scripts de démarrage de Tomcat ont été modifiés pour utiliser 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é.

#!/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/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

Comme pour les précédentes versions, ce lien default-java pointe 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

Donc d'après le script de démarrage c'est /usr/lib/jvm/default-java, lien sur /usr/lib/jvm/java-1.11.0-openjdk-amd64/, qui est utilisé.

Examples-icon.png Cependant, toutes les applications déployées sur Tomcat ne sont pas forcément compatibles avec une telle version de Java. Dans ce cas, il est plus simple de rester sur une "ancienne" version de Java, nécessitant uniquement de changer le lien default-java.

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