diff options
Diffstat (limited to 'networking-odl/devstack/setup_java.sh')
-rw-r--r-- | networking-odl/devstack/setup_java.sh | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/networking-odl/devstack/setup_java.sh b/networking-odl/devstack/setup_java.sh new file mode 100644 index 0000000..2b03cbc --- /dev/null +++ b/networking-odl/devstack/setup_java.sh @@ -0,0 +1,207 @@ +#!/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/8u74-b02/jdk-8u74}" +ORACLE_JAVA8_NAME="jdk1.8.0_74" + +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 |