208 lines
6.3 KiB
Bash
208 lines
6.3 KiB
Bash
#!/bin/bash
|
|
|
|
ORACLE_JAVA_URL="http://download.oracle.com/otn-pub/java/jdk"
|
|
ORACLE_JAVA7_URL="${ORACLE_JAVA7_URL:-$ORACLE_JAVA_URL/7u80-b15/jdk-7u80}"
|
|
ORACLE_JAVA7_NAME="jdk1.7.0_80"
|
|
ORACLE_JAVA8_URL="${ORACLE_JAVA8_URL:-$ORACLE_JAVA_URL/8u112-b15/jdk-8u112}"
|
|
ORACLE_JAVA8_NAME="jdk1.8.0_112"
|
|
|
|
function setup_java {
|
|
# Java version 8 is the last stable one
|
|
local VERSION="${1:-8}"
|
|
|
|
echo "Setup Java version: $VERSION"
|
|
if test_java_version "$VERSION" && setup_java_env; then
|
|
echo "Current Java version is already $VERSION."
|
|
elif select_java "$VERSION"; then
|
|
echo "Java version $VERSION has been selected."
|
|
elif install_openjdk "$VERSION" && select_java "$VERSION"; then
|
|
echo "OpenJDK version $VERSION has been installed and selected."
|
|
elif install_other_java "$VERSION" && select_java "$VERSION"; then
|
|
echo "Some Java version $VERSION has been installed and selected."
|
|
else
|
|
echo "ERROR: Unable to setup Java version $VERSION."
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
function setup_java_env {
|
|
local JAVA_COMMAND="${1:-${JAVA:-java}}"
|
|
|
|
JAVA_LINK="$(which $JAVA_COMMAND)"
|
|
if [[ "$JAVA_LINK" == "" ]]; then
|
|
return 1
|
|
fi
|
|
|
|
export JAVA="$(readlink -f $JAVA_LINK)"
|
|
export JAVA_HOME=$(echo $JAVA | sed "s:/bin/java::" | sed "s:/jre::")
|
|
if [ "$JAVA" != "$(readlink -f $(which java))" ]; then
|
|
export PATH="$(dirname $JAVA):$PATH"
|
|
if [ "$JAVA" != "$(readlink -f $(which java))" ]; then
|
|
echo "Unable to set $JAVA as current."
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
echo "JAVA is: $JAVA"
|
|
echo "JAVA_HOME is: $JAVA_HOME"
|
|
echo "Java version is:"
|
|
$JAVA -version 2>&1
|
|
}
|
|
|
|
function select_java {
|
|
local VERSION="$1"
|
|
local COMMAND
|
|
|
|
for COMMAND in $(list_java_commands); do
|
|
if test_java_version "$VERSION" "$COMMAND"; then
|
|
if setup_java_env "$COMMAND"; then
|
|
return 0
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo 'Required java version not found.'
|
|
return 1
|
|
}
|
|
|
|
function test_java_version {
|
|
local EXPECTED_VERSION="'"*' version "1.'$1'.'*'"'"'"
|
|
local COMMAND="${2:-${JAVA:-java}}"
|
|
local ACTUAL_VERSION="'"$($COMMAND -version 2>&1 | head -n 1)"'"
|
|
|
|
if [[ $ACTUAL_VERSION == $EXPECTED_VERSION ]]; then
|
|
echo "Found matching java version: $ACTUAL_VERSION"
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
if is_ubuntu; then
|
|
# --- Ubuntu -------------------------------------------------------------
|
|
|
|
function list_java_commands {
|
|
update-alternatives --list java
|
|
}
|
|
|
|
function install_openjdk {
|
|
local REQUIRED_VERSION="$1"
|
|
apt_get install "openjdk-$REQUIRED_VERSION-jre-headless"
|
|
}
|
|
|
|
function install_other_java {
|
|
local VERSION="$1"
|
|
local PPA_REPOSITORY="ppa:webupd8team/java"
|
|
local JAVA_INSTALLER="oracle-java${VERSION}-installer"
|
|
local JAVA_SET_DEFAULT="oracle-java${VERSION}-set-default"
|
|
|
|
# Accept installer license
|
|
echo "$JAVA_INSTALLER" shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
|
|
|
|
# Remove all existing set-default versions
|
|
apt_get remove oracle-java*-set-default
|
|
if apt_get install $JAVA_INSTALLER ; then
|
|
if apt_get install $JAVA_SET_DEFAULT ; then
|
|
return 0 # Some PPA was already providing desired packages
|
|
fi
|
|
fi
|
|
|
|
# Add PPA only when package is not available
|
|
if apt_get install software-properties-common; then
|
|
# I pipe this after echo to emulate an user key-press
|
|
if echo | sudo -E add-apt-repository "$PPA_REPOSITORY"; then
|
|
if apt_get update; then
|
|
if apt_get install $JAVA_INSTALLER ; then
|
|
if apt_get install $JAVA_SET_DEFAULT ; then
|
|
return 0
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Something has gone wrong!
|
|
return 1
|
|
}
|
|
|
|
else
|
|
# --- Red Hat -------------------------------------------------------------
|
|
|
|
function list_java_commands {
|
|
alternatives --display java 2>&1 | grep -v '^[[:space:]]' | awk '/[[:space:]]- priority[[:space:]]/{print $1}'
|
|
}
|
|
|
|
function install_openjdk {
|
|
local VERSION="$1"
|
|
yum_install java-1.$VERSION.*-openjdk-headless
|
|
}
|
|
|
|
function install_other_java {
|
|
local VERSION="$1"
|
|
|
|
if [[ "$(uname -m)" == "x86_64" ]]; then
|
|
local ARCH=linux-x64
|
|
else
|
|
local ARCH=linux-i586
|
|
fi
|
|
|
|
if [[ "$VERSION" == "7" ]]; then
|
|
ORIGIN=$ORACLE_JAVA7_URL
|
|
TARGET=$ORACLE_JAVA7_NAME
|
|
elif [[ "$VERSION" == "8" ]]; then
|
|
ORIGIN=$ORACLE_JAVA8_URL
|
|
TARGET=$ORACLE_JAVA8_NAME
|
|
else
|
|
echo "Unsupported Java version: $VERSION."
|
|
return 1
|
|
fi
|
|
|
|
local NEW_JAVA="/usr/java/$TARGET/jre/bin/java"
|
|
if test_java_version "$VERSION" "$NEW_JAVA"; then
|
|
if sudo alternatives --install /usr/bin/java java "$NEW_JAVA" 200000; then
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
local EXT
|
|
local WGET_OPTIONS="-c --no-check-certificate --no-cookies"
|
|
local HEADER="Cookie: oraclelicense=accept-securebackup-cookie"
|
|
|
|
for EXT in "rpm" "tar.gz"; do
|
|
local URL="$ORIGIN-$ARCH.$EXT"
|
|
local PACKAGE="/tmp/$(basename $URL)"
|
|
|
|
if wget $WGET_OPTIONS --header "$HEADER" "$URL" -O "$PACKAGE"; then
|
|
case "$EXT" in
|
|
"rpm")
|
|
sudo rpm -i "$PACKAGE"
|
|
;;
|
|
"tar.gz")
|
|
sudo mkdir -p /usr/java && sudo tar -C /usr/java -xzf "$PACKAGE"
|
|
;;
|
|
*)
|
|
echo "Unsupported extension: $EXT"
|
|
;;
|
|
esac
|
|
|
|
if test_java_version "$VERSION" "$NEW_JAVA"; then
|
|
if sudo alternatives --install /usr/bin/java java "$NEW_JAVA" 200000; then
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo "Unable to register installed java."
|
|
|
|
else
|
|
echo "Unable to download java archive: $URL"
|
|
fi
|
|
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
fi
|