asdf-java/bin/install

198 lines
4.7 KiB
Plaintext
Raw Normal View History

2017-09-21 15:45:15 +08:00
#!/usr/bin/env bash
# this is global for error reporting
ASDF_JAVA_ERROR=""
2017-10-15 12:13:36 +08:00
# Download the java source from Oracle, copy files and cleanup.
install_java() {
local version=$1
local destdir=$2
local variant=$(get_variant)
[[ -z "$ASDF_JAVA_ERROR" ]] || return
2017-10-15 12:13:36 +08:00
get_java $version $variant $destdir
[[ -z "$ASDF_JAVA_ERROR" ]] || return
2017-10-15 12:13:36 +08:00
unpack_java $version $variant $destdir
[[ -z "$ASDF_JAVA_ERROR" ]] || return
}
2017-10-15 12:13:36 +08:00
# Get the "variant" piece of the Oracle url.
get_variant() {
case "$(uname -s)" in
Linux)
case "$(uname -m)" in
x86_64) echo linux-x64.tar.gz ;;
i[[3-9]]86) echo linux-i586.tar.gz ;;
*) ASDF_JAVA_ERROR="$(uname -m) is not supported on linux" ;;
esac ;;
Darwin)
case "$(uname -m)" in
x86_64) echo macosx-x64.dmg ;;
*) ASDF_JAVA_ERROR="$(uname -m) is not supported on macos" ;;
esac ;;
*) ASDF_JAVA_ERROR="$(uname -s) is not supported" ;;
esac
}
get_current_variant() {
variant=$1
if [[ "$variant" == *"mac"* ]]; then
variant=$(echo $variant | sed -e 's/mac//')
fi
if [[ "$variant" == *"tar"* ]]; then
echo $variant | sed -e 's/.tar/_bin.tar/'
elif [[ "$variant" == *"dmg"* ]]; then
echo $variant | sed -e 's/.dmg/_bin.dmg/'
fi
}
2017-10-15 12:13:36 +08:00
# Download java from Oracle.
get_java() {
local version=$1
local variant=$2
local destdir=$3
local url=
2017-11-18 07:39:06 +08:00
local base=http://download.oracle.com/otn-pub/java/jdk/
local oracle_version=$(echo $version | sed -e 's/\./u/g')
case $version in
2017-11-18 07:39:06 +08:00
9.0.1) url=$base$version+11/jdk-$version'_'$(get_current_variant $variant) ;;
2017-11-27 21:25:40 +08:00
8.151) url=$base$oracle_version-b12/e758a0de34e24606bca991d704f6dcbf/jdk-$oracle_version-$variant ;;
2017-11-18 07:39:06 +08:00
8.144) url=$base$oracle_version-b01/090f390dda5b47b9b721c7dfaa008135/jdk-$oracle_version-$variant ;;
8.141) url=$base$oracle_version-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-$oracle_version-$variant ;;
8.131) url=$base$oracle_version-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-$oracle_version-$variant ;;
8.121) url=$base$oracle_version-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-$oracle_version-$variant ;;
2017-10-15 12:13:36 +08:00
*) ASDF_JAVA_ERROR="$version is not a supported version" ;;
esac
[[ -z "$ASDF_JAVA_ERROR" ]] || return
echo "---- ASDF JAVA MESSAGE ----"
echo "downloading: $url"
curl -fLC - \
--progress-bar --silent \
--retry 3 --retry-delay 3 \
-b oraclelicense=a \
-o $destdir/$variant $url
[[ $? != 0 ]] && ASDF_JAVA_ERROR="downloading java dist"
}
2017-10-15 12:13:36 +08:00
# Unpacks all kinds of sources.
unpack_java() {
local version=$1
local variant=$2
local destdir=$3
echo "---- ASDF JAVA MESSAGE ----"
echo "expanding java dist"
case $variant in
*.tar.gz) unpack_tar $variant $destdir ;;
2017-11-18 07:39:06 +08:00
*.dmg) unpack_dmg $variant $destdir ;;
*) ASDF_JAVA_ERROR="$variant is not supported" ;;
esac
}
2017-10-15 12:13:36 +08:00
# Unarchive a tar archive into the install directory and cleanup.
#
# NOTE: Using $origin as a memo rather than executing in a subshell
# because errors won't be persisted from a subshell.
#
# TODO: Should be sanitized with error reporting.
unpack_tar() {
local variant=$1
local destdir=$2
local origin=$(pwd)
2017-10-15 12:13:36 +08:00
cd $destdir; {
tar -xzf $variant
2017-11-02 12:05:25 +08:00
[[ $? == 0 ]] || ASDF_JAVA_ERROR="expanding java dist"
rm $variant
2017-11-18 07:39:06 +08:00
local pkg=$(echo * | grep jdk)
mv $pkg/* .
rmdir $pkg
}; cd $origin
}
2017-10-15 12:13:36 +08:00
# Unarchive a tar archive into the install directory and cleanup.
#
# NOTE: Using $origin as a memo rather than executing in a subshell
# because errors won't be persisted from a subshell.
#
# TODO: Should be sanitized with error reporting.
unpack_dmg() {
local variant=$1
local destdir=$2
2017-10-15 12:13:36 +08:00
local origin=$(pwd)
cd $destdir; {
local pkgdir=$destdir/asdf_tmp_pkgdir
local imgdir=$destdir/asdf_tmp_imgdir
mount_dmg $imgdir $variant
[[ -z "$ASDF_JAVA_ERROR" ]] || return
2017-10-15 12:13:36 +08:00
pkgutil --expand $imgdir/*.pkg $pkgdir
if [[ $? != 0 ]]; then
ASDF_JAVA_ERROR="expanding java dist"
unmount_dmg $imgdir
return
fi
2017-10-15 12:13:36 +08:00
cd $pkgdir/jdk*.pkg; {
cat Payload | gzip -d | cpio -i
if [[ $? != 0 ]] || ! [[ -d Contents ]]; then
ASDF_JAVA_ERROR="demangling dist payload"
fi
2017-10-15 12:13:36 +08:00
mv Contents/Home/* $destdir/
}; cd $destdir
2017-10-15 12:13:36 +08:00
unmount_dmg $imgdir
2017-10-15 12:13:36 +08:00
rm -r $destdir/$variant
}; cd $origin
}
mount_dmg() {
local dir=$1
local dev=$2
hdiutil mount -quiet -mountpoint $dir $dev
[[ $? == 0 ]] || ASDF_JAVA_ERROR="mounting java dist"
}
unmount_dmg() {
local dir=$1
hdiutil unmount -quiet $dir
if [[ $? != 0 ]]; then
[[ -z "$ASDF_JAVA_ERROR" ]] || \
ASDF_JAVA_ERROR="unmounting java dist"
echo "---- ASDF JAVA WARNING ----"
echo "The java dist is still mounted at $dir."
echo " Use `hdiutil unmount` to unmount it."
echo "----"
fi
}
2017-10-15 12:13:36 +08:00
#
# MAIN
#
install_java $ASDF_INSTALL_VERSION $ASDF_INSTALL_PATH
if ! [[ -z "$ASDF_JAVA_ERROR" ]]; then
rm -rf $ASDF_INSTALL_PATH
echo "---- ASDF JAVA ERROR ----"
echo "asdf java failed while $ASDF_JAVA_ERROR"
echo "----"
fi
unset ASDF_JAVA_ERROR