Skip to content

Instantly share code, notes, and snippets.

@igavrysh
Created March 3, 2020 05:51
Show Gist options
  • Save igavrysh/86e7d6139f840d158c646a0d3c6a037a to your computer and use it in GitHub Desktop.
Save igavrysh/86e7d6139f840d158c646a0d3c6a037a to your computer and use it in GitHub Desktop.
#!/bin/bash
# Copyright 2014 M. Isuru Tharanga Chrishantha Perera
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ----------------------------------------------------------------------------
# Installation script for setting up Java on Linux
# ----------------------------------------------------------------------------
java_dist=""
default_java_dir="/usr/lib/jvm"
java_dir="$default_java_dir"
function usage() {
echo ""
echo "This script will not download the Java distribution. You must download JDK tar.gz distribution. Then use this script to install it."
echo "Usage: "
echo "install-java.sh -f <java_dist> [-p <java_dir>]"
echo ""
echo "-f: The jdk tar.gz file."
echo "-p: Java installation directory. Default: $default_java_dir."
echo "-h: Display this help and exit."
echo ""
}
function confirm() {
# call with a prompt string or use a default
read -r -p "${1:-Are you sure?} [y/N] " response
case $response in
[yY][eE][sS] | [yY])
true
;;
*)
false
;;
esac
}
# Make sure the script is running as root.
if [ "$UID" -ne "0" ]; then
echo "You must be root to run $0. Try following"
echo "sudo $0"
exit 9
fi
while getopts "f:p:h" opts; do
case $opts in
f)
java_dist=${OPTARG}
;;
p)
java_dir=${OPTARG}
;;
h)
usage
exit 0
;;
\?)
usage
exit 1
;;
esac
done
if [[ ! -f $java_dist ]]; then
echo "Please specify the Java distribution file."
echo "Use -h for help."
exit 1
fi
# Validate Java Distribution
java_dist_filename=$(basename $java_dist)
if [[ ${java_dist_filename: -7} != ".tar.gz" ]]; then
echo "Java distribution must be a valid tar.gz file."
exit 1
fi
#Check whether unzip command exsits
if ! command -v unzip >/dev/null 2>&1; then
echo "Please install unzip (apt -y install unzip)."
exit 1
fi
# Create the default directory if user has not specified any other path
if [[ $java_dir == $default_java_dir ]]; then
mkdir -p $java_dir
fi
#Validate java directory
if [[ ! -d $java_dir ]]; then
echo "Please specify a valid Java installation directory."
exit 1
fi
echo "Installing: $java_dist_filename"
# Check Java executable
java_exec="$(tar -tzf $java_dist | grep ^[^/]*/bin/java$ || echo "")"
if [[ -z $java_exec ]]; then
echo "Could not find \"java\" executable in the distribution. Please specify a valid Java distribution."
exit 1
fi
# JDK Directory with version
jdk_dir="$(echo $java_exec | cut -f1 -d"/")"
extracted_dirname=$java_dir"/"$jdk_dir
# Extract Java Distribution
if [[ ! -d $extracted_dirname ]]; then
echo "Extracting $java_dist to $java_dir"
tar -xof $java_dist -C $java_dir
echo "JDK is extracted to $extracted_dirname"
else
echo "WARN: JDK was not extracted to $java_dir. There is an existing directory with name $jdk_dir."
exit 1
fi
if [[ ! -f "${extracted_dirname}/bin/java" ]]; then
echo "ERROR: The path $extracted_dirname is not a valid Java installation."
exit 1
fi
# Oracle JDK: 7 to 8
java_78_dir_regex="^jdk1\.([0-9]*).*$"
# Oracle JDK / OpenJDK / AdoptOpenJDK: 9 and upwards
java_9up_dir_regex="^jdk-([0-9]*).*$"
# JDK Major Version
jdk_major_version=""
if [[ $jdk_dir =~ $java_78_dir_regex ]]; then
jdk_major_version=$(echo $jdk_dir | sed -nE "s/$java_78_dir_regex/\1/p")
else
jdk_major_version=$(echo $jdk_dir | sed -nE "s/$java_9up_dir_regex/\1/p")
fi
# Install Demos
if [[ $jdk_dir =~ $java_78_dir_regex ]]; then
# Demos are only available for Java 7 and 8
demos_dist=$(dirname $java_dist)"/"$(echo $java_dist_filename | sed 's/\.tar\.gz/-demos\0/')
fi
if [[ -f $demos_dist && ! -d $extracted_dirname/demo ]]; then
# No demo directory
if (confirm "Extract demos?"); then
echo "Extracting $demos_dist to $java_dir"
tar -xf $demos_dist -C $java_dir
fi
fi
# Install Unlimited JCE Policy (only for Oracle JDK 7 & 8)
# Java 9 and above: default JCE policy files already allow for \"unlimited\" cryptographic strengths.
unlimited_jce_policy_dist=""
if [[ $jdk_dir =~ ^jdk1\.7.* ]]; then
unlimited_jce_policy_dist="$(dirname $java_dist)/UnlimitedJCEPolicyJDK7.zip"
elif [[ $jdk_dir =~ ^jdk1\.8.* ]]; then
unlimited_jce_policy_dist="$(dirname $java_dist)/jce_policy-8.zip"
fi
if [[ -f $unlimited_jce_policy_dist ]]; then
if (confirm "Install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files?"); then
echo "Extracting policy jars in $unlimited_jce_policy_dist to $extracted_dirname/jre/lib/security"
unzip -j -o $unlimited_jce_policy_dist *.jar -d $extracted_dirname/jre/lib/security
fi
fi
# Run update-alternatives commands
if (confirm "Run update-alternatives commands?"); then
echo "Running update-alternatives..."
declare -a commands=($(ls -1 ${extracted_dirname}/bin))
for command in "${commands[@]}"; do
command_path=$extracted_dirname/bin/$command
if [[ -x $command_path ]]; then
update-alternatives --install "/usr/bin/$command" "$command" "$command_path" 10000
update-alternatives --set "$command" "$command_path"
fi
done
lib_path=$extracted_dirname/jre/lib/amd64/libnpjp2.so
if [[ -d "/usr/lib/mozilla/plugins/" ]] && [[ -f $lib_path ]]; then
update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "$lib_path" 10000
update-alternatives --set "mozilla-javaplugin.so" "$lib_path"
fi
fi
# Create system preferences directory
java_system_prefs_dir="/etc/.java/.systemPrefs"
if [[ ! -d $java_system_prefs_dir ]]; then
if (confirm "Create Java System Prefs Directory ($java_system_prefs_dir) and change ownership to $SUDO_USER:$SUDO_USER?"); then
echo "Creating $java_system_prefs_dir"
mkdir -p $java_system_prefs_dir
chown -R $SUDO_USER:$SUDO_USER $java_system_prefs_dir
fi
fi
if (confirm "Do you want to set JAVA_HOME environment variable in $HOME/.bashrc?"); then
if grep -q "export JAVA_HOME=.*" $HOME/.bashrc; then
sed -i "s|export JAVA_HOME=.*|export JAVA_HOME=$extracted_dirname|" $HOME/.bashrc
else
echo "export JAVA_HOME=$extracted_dirname" >>$HOME/.bashrc
fi
source $HOME/.bashrc
fi
applications_dir="$HOME/.local/share/applications"
create_jmc_shortcut() {
shortcut_file="$applications_dir/jmc_$jdk_major_version.desktop"
cat <<_EOF_ >$shortcut_file
[Desktop Entry]
Name=Java $jdk_major_version: JMC
Comment=Oracle Java Mission Control for Java $jdk_major_version
Type=Application
Exec=$extracted_dirname/bin/jmc
Icon=$extracted_dirname/lib/missioncontrol/icon.xpm
Terminal=false
_EOF_
chmod +x $shortcut_file
}
if [[ -d $applications_dir ]] && [[ -f $extracted_dirname/bin/jmc ]]; then
if (confirm "Do you want to create a desktop shortcut to JMC?"); then
create_jmc_shortcut
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment