nowucca.com - personal software technology blog

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