Use a temp work dir when installing

This commit is contained in:
Scott McLeod 2019-06-18 18:08:40 -04:00
parent 13df2ad8d3
commit b84e6ea0e2
No known key found for this signature in database
GPG Key ID: 9C5566AB07C8E593

View File

@ -34,12 +34,20 @@ install_java() {
local versionstr=$1 local versionstr=$1
local destdir=$2 local destdir=$2
IFS=- read distro version <<< $versionstr IFS=- read -r distro version <<< "${versionstr}"
local variant=$(get_variant $distro) local variant=$(get_variant $distro)
[[ -z "$ASDF_JAVA_ERROR" ]] || return [[ -z "$ASDF_JAVA_ERROR" ]] || return
get_java $distro $version $variant $destdir # Perform all operations is a temporary directory that will be
# automatically cleaned up on exit (success or failure).
local wrkdir
wrkdir=$(mktemp -dt asdf-java.XXXXXX)
# shellcheck disable=SC2064
trap "cd ${PWD}; rm -rf ${wrkdir}" EXIT
cd "${wrkdir}"
get_java "${distro}" "${version}" "${variant}"
[[ -z "$ASDF_JAVA_ERROR" ]] || return [[ -z "$ASDF_JAVA_ERROR" ]] || return
unpack_java $variant $destdir unpack_java $variant $destdir
@ -118,7 +126,6 @@ get_java() {
local distro=$1 local distro=$1
local version=$2 local version=$2
local variant=$3 local variant=$3
local destdir=$4
local base=$(get_base_url $distro) local base=$(get_base_url $distro)
local oracle8_version=$(echo $version | sed -e 's|\.|u|g') local oracle8_version=$(echo $version | sed -e 's|\.|u|g')
@ -151,7 +158,7 @@ get_java() {
--progress-bar \ --progress-bar \
--retry 3 --retry-delay 3 \ --retry 3 --retry-delay 3 \
-b oraclelicense=accept-securebackup-cookie \ -b oraclelicense=accept-securebackup-cookie \
-o $destdir/$variant $url -o ./${variant} ${url}
[[ $? != 0 ]] && ASDF_JAVA_ERROR="downloading java dist" [[ $? != 0 ]] && ASDF_JAVA_ERROR="downloading java dist"
} }
@ -163,6 +170,7 @@ unpack_java() {
log_info expanding java dist log_info expanding java dist
mkdir -p "${destdir}"
case $variant in case $variant in
*linux_hotspot | *.tar.gz) unpack_tar $variant $destdir ;; *linux_hotspot | *.tar.gz) unpack_tar $variant $destdir ;;
*.dmg) unpack_dmg $variant $destdir ;; *.dmg) unpack_dmg $variant $destdir ;;
@ -173,28 +181,17 @@ unpack_java() {
# Unarchive a tar archive into the install directory and cleanup. # 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. # TODO: Should be sanitized with error reporting.
unpack_tar() { unpack_tar() {
local variant=$1 local archive=${1}
local destdir=$2 local destdir=${2}
tar -xzf "${archive}" || { ASDF_JAVA_ERROR="expanding java dist"; return; }
local origin=$(pwd) local jdk_dir
cd $destdir; { jdk_dir=$(ls | grep -v ${archive})
tar -xzf $variant if [[ -d ${jdk_dir}/Contents/Home ]]; then
[[ $? == 0 ]] || ASDF_JAVA_ERROR="expanding java dist" jdk_dir="${jdk_dir}/Contents/Home"
rm $variant
local pkg=$(echo *)
if [ -d $pkg/Contents/Home ]; then
mv $pkg/Contents/Home/* .
else
mv $pkg/* .
fi fi
rmdir $pkg mv "${jdk_dir}"/* "${destdir}/"
}; cd $origin
} }
# Unarchive a tar archive into the install directory and cleanup. # Unarchive a tar archive into the install directory and cleanup.
@ -204,35 +201,26 @@ unpack_tar() {
# #
# TODO: Should be sanitized with error reporting. # TODO: Should be sanitized with error reporting.
unpack_dmg() { unpack_dmg() {
local variant=$1 local image=${1}
local destdir=$2 local destdir=${2}
local pkgdir=./asdf_tmp_pkgdir
local imgdir=./asdf_tmp_imgdir
local origin=$(pwd) mount_dmg $imgdir $image
cd $destdir; {
local pkgdir=$destdir/asdf_tmp_pkgdir
local imgdir=$destdir/asdf_tmp_imgdir
mount_dmg $imgdir $variant
[[ -z "$ASDF_JAVA_ERROR" ]] || return [[ -z "$ASDF_JAVA_ERROR" ]] || return
pkgutil --expand $imgdir/*.pkg $pkgdir if pkgutil --expand $imgdir/*.pkg $pkgdir; then
if [[ $? != 0 ]]; then if gzip -dc < ${pkgdir}/jdk*.pkg/Payload | cpio -i \
ASDF_JAVA_ERROR="expanding java dist" && [[ -d Contents ]]; then
unmount_dmg $imgdir mv Contents/Home/* $destdir/
return else
fi
cd $pkgdir/jdk*.pkg; {
cat Payload | gzip -d | cpio -i
if [[ $? != 0 ]] || ! [[ -d Contents ]]; then
ASDF_JAVA_ERROR="demangling dist payload" ASDF_JAVA_ERROR="demangling dist payload"
fi fi
mv Contents/Home/* $destdir/ else
}; cd $destdir ASDF_JAVA_ERROR="expanding java dist"
fi
unmount_dmg $imgdir unmount_dmg "${imgdir}"
rm -r $destdir/$variant
}; cd $origin
} }
mount_dmg() { mount_dmg() {
@ -267,7 +255,7 @@ unpack_zip() {
[[ $? == 0 ]] || ASDF_JAVA_ERROR="expanding java dist" [[ $? == 0 ]] || ASDF_JAVA_ERROR="expanding java dist"
rm $variant rm $variant
local pkg=$(echo * | grep jdk) local pkg=$(ls | grep -v ${variant})
mv $pkg/* . mv $pkg/* .
rmdir $pkg rmdir $pkg
) )