0

I want to run a program based on Java 11 (Geoserver) in a Ubuntu 22.04 OS hosted on a virtualbox VM on a Windows 10 host OS.

Since I had Java 18 installed before (I installed it by following this procedure), I have

1 - uninstalled Java 18 by following this procedure

2 - restarted the VM

3- Installed JDK 11 by running

sudo apt update
sudo apt install openjdk-11-jdk

4 - restarted the VM

But as I try to run the program based on java, I am getting the following Error:

GEOSERVER DATA DIR is /usr/share/geoserver/data_dir
Error: could not find libjava.so
Error: Could not find Java SE Runtime Environment.

So I have checked the java version I just installed and I get

tommaso@tommaso-VirtualBox02:/usr/share/geoserver/bin$ javac -version
javac 11.0.17

tommaso@tommaso-VirtualBox02:/usr/share/geoserver/bin$ java -version openjdk version "11.0.17" 2022-10-18 OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04) OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

So it seems that the uninstallation of the precedent java version did not go well and left things spoiled so that the afterwards installation of java 11 could not work properly.

How can I solve it?

I'd exclude the problem depends from the program installed, because Geoserver installation procedure does not involve running anything dependand on java version.

The content of the file which raises the error - startup.sh - is the following:

#!/bin/sh
set -o errexit
set -o nounset
IFS=$(printf '\n\t')
# -----------------------------------------------------------------------------
# Start Script for GEOSERVER
#
# $Id$
# -----------------------------------------------------------------------------
# Guard against misconfigured JAVA_HOME
if [ -n "${JAVA_HOME:-}" ] && [ ! -x "${JAVA_HOME}/bin/java" ]; then
  echo "The JAVA_HOME environment variable is set but JAVA_HOME/bin/java"
  echo "is missing or not executable:"
  echo "    JAVA_HOME=${JAVA_HOME}"
  echo "Please either set JAVA_HOME so that the Java runtime is JAVA_HOME/bin/java"
  echo "or unset JAVA_HOME to use the Java runtime on the PATH."
  exit 1
fi
# Find java from JAVA_HOME or PATH
if [ -n "${JAVA_HOME:-}" ]; then
  _RUNJAVA="${JAVA_HOME}/bin/java"
elif [ -n "$(command -v java)" ]; then
  _RUNJAVA=java
else
  echo "A Java runtime (java) was not found in JAVA_HOME/bin or on the PATH."
  echo "Please either set the JAVA_HOME environment variable so that the Java runtime"
  echo "is JAVA_HOME/bin/java or add the Java runtime to the PATH."
  exit 1
fi
if [ -z "${GEOSERVER_HOME:-}" ]; then
  #If GEOSERVER_HOME not set then guess a few locations before giving
  # up and demanding user set it.
  if [ -r start.jar ]; then
     echo "GEOSERVER_HOME environment variable not found, using current "
     echo "directory.  If not set then running this script from other "
     echo "directories will not work in the future."
     GEOSERVER_HOME="$(pwd)"
  else 
    if [ -r ../start.jar ]; then
      echo "GEOSERVER_HOME environment variable not found, using current "
      echo "location.  If not set then running this script from other "
      echo "directories will not work in the future."
      GEOSERVER_HOME="$(pwd)/.."
    fi
  fi 
  if [ -z "${GEOSERVER_HOME:-}" ]; then
    echo "The GEOSERVER_HOME environment variable is not defined"
    echo "This environment variable is needed to run this program"
    echo "Please set it to the directory where geoserver was installed"
    exit 1
  fi
  export GEOSERVER_HOME
fi
if [ ! -r "${GEOSERVER_HOME}/bin/startup.sh" ]; then
  echo "The GEOSERVER_HOME environment variable is not defined correctly"
  echo "This environment variable is needed to run this program"
  exit 1
fi
#Find the configuration directory: GEOSERVER_DATA_DIR
if [ -z "${GEOSERVER_DATA_DIR:-}" ]; then
    if [ -r "${GEOSERVER_HOME}/data_dir" ]; then
        export GEOSERVER_DATA_DIR="${GEOSERVER_HOME}/data_dir"
    else
        echo "No GEOSERVER_DATA_DIR found, using application defaults"
          GEOSERVER_DATA_DIR=""
    fi
fi
cd "${GEOSERVER_HOME}" || exit 1
if [ -z "${MARLIN_JAR:-}" ]; then
    MARLIN_JAR=$(find "$(pwd)/webapps" -name "marlin*.jar" | head -1)
    if [ "${MARLIN_JAR:-}" != "" ]; then
        MARLIN_ENABLER="-Xbootclasspath/a:${MARLIN_JAR}"
        RENDERER="-Dsun.java2d.renderer=org.marlin.pisces.MarlinRenderingEngine"
        export MARLIN_JAR MARLIN_ENABLER RENDERER
    fi
fi
echo "GEOSERVER DATA DIR is ${GEOSERVER_DATA_DIR}"
#added headless to true by default, if this messes anyone up let the list
#know and we can change it back, but it seems like it won't hurt -ch
IFS=$(printf '\n\t ')
exec "${_RUNJAVA}" ${JAVA_OPTS:--DNoJavaOpts} "${MARLIN_ENABLER:--DMarlinDisabled}" "${RENDERER:--DDefaultrenderer}" "-Djetty.base=${GEOSERVER_HOME}" "-DGEOSERVER_DATA_DIR=${GEOSERVER_DATA_DIR}" -Djava.awt.headless=true -DSTOP.PORT=8079 -DSTOP.KEY=geoserver -jar "${GEOSERVER_HOME}/start.jar"
Tms91
  • 365

1 Answers1

0

SOLVED

Contrary to what I thought, the problem was that the program (geoserver) had generated a config file (/etc/default/geoserver) where it stored the java version installed

tommaso@tommaso-VirtualBox02:/etc/default$ cat geoserver
USER=tommaso
GEOSERVER_DATA_DIR=/usr/share/geoserver/data_dir
GEOSERVER_HOME=/usr/share/geoserver
JAVA_HOME=/usr/lib/jvm/java-18-openjdk-amd64
JAVA_OPTS="-Xms128m -Xmx512m"

and since that file was located outside the program own folder, uninstalling and reinstalling the program alone did not solved the problem.

To solve the problem I followed this procedure.

Tms91
  • 365