Here is a shell script designed to work on Centos and Ubuntu, to establish the JAVA_HOME and JRE_HOME variables.
Some of the requirements were that for Centos 5, we default to /usr/bin/java, and for Centos 6 we should default to whatever the alternatives java link points to.
It will work for Ubuntu as well, perhaps with some extension.
UPDATE: the old script failed on Centos 7 - this fixed it.
function readDistributor()
{
if [ -x /usr/bin/lsb_release -a -x /usr/bin/awk ]; then
echo $(/usr/bin/lsb_release -i | /usr/bin/awk '{print $3}');
else
echo "Unknown_Distributor" # by default
fi
}
function readOSVersion()
{
if [ -x /usr/bin/lsb_release -a -x /usr/bin/awk ]; then
echo $(/usr/bin/lsb_release -r | /usr/bin/awk '{print $2}');
else
echo "0" # by default
fi
}
function setFallbackJavaJreHome()
{
JRE_HOME=/usr/bin/java
JAVA_HOME=$JRE_HOME
echo $1
echo "WARNING: Using fallback java default JAVA_HOME=$JAVA_HOME"
}
function establishJavaHomeVars()
{
# Will be reading JAVA_VERSION from /etc/sysconfig/environment
# default to system default (Java 6 on Centos 5.x, Java 7 or 8 on Centos 6.x)
local DISTRIBUTOR=$(readDistributor)
local OS_VERSION=$(readOSVersion)
case "$DISTRIBUTOR-$OS_VERSION" in
CentOS-5*)
if [ $1 ] && [ $1 = "7" ] && [ -d "/usr/lib/jvm/jre-1.7.0" ] ; then
JRE_HOME="/usr/lib/jvm/jre-1.7.0"
else
JRE_HOME=/usr/java
fi
JAVA_HOME=$JRE_HOME
;;
# Centos 6.x java home settings, expect alternatives is set up
CentOS-[67]*)
JAVA_ALTERNATIVES_HOME="$(readlink -f /usr/bin/java | sed s:/bin/java::)"
if [ ! -z $JAVA_ALTERNATIVES_HOME ]; then
JRE_HOME="$JAVA_ALTERNATIVES_HOME"
JAVA_HOME=$JRE_HOME
else
setFallbackJavaJreHome "Missing expected directory: /usr/bin/java"
fi
;;
# Default settings for any other strange environments
*)
setFallbackJavaJreHome "Unknown OS/Version: $DISTRIBUTOR / $OS_VERSION"
;;
esac
}
establishJavaHomeVars "$JAVA_VERSION"
export JAVA_HOME
export JRE_HOME