Files
werkjournal/scripts/install-jdk-remote.sh

36 lines
1.5 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
umask 077
[[ $(uname -m) == x86_64 ]] || { echo 'This pinned JDK requires Linux x86_64' >&2; exit 1; }
[[ $(uname -s) == Linux ]] || exit 1
case "$JDK_DIR" in /*) ;; *) JDK_DIR="$HOME/$JDK_DIR" ;; esac
JDK_DIR=$(realpath -ms -- "$JDK_DIR")
case "$JDK_DIR" in "$HOME"/opt/*) ;; *) echo 'JDK directory must be below ~/opt/' >&2; exit 1 ;; esac
if [[ -x "$JDK_DIR/bin/java" && "$FORCE" == 0 ]]; then
grep -Eq '^JAVA_VERSION="25([.+"]|$)' "$JDK_DIR/release"
"$JDK_DIR/bin/java" -version
echo 'JDK already installed; use --force to install the pinned release.'
exit 0
fi
if [[ -e "$JDK_DIR" && ! -L "$JDK_DIR" ]]; then
echo 'Existing JDK directory is not managed by this installer; nothing replaced.' >&2
exit 1
fi
mkdir -p -- "$JDK_DIR.releases"
stage=$(mktemp -d "$JDK_DIR.releases/.install.XXXXXXXX")
link="$stage/active"
trap 'rm -rf -- "$stage"' EXIT
curl --fail --location --silent --show-error --proto '=https' --tlsv1.2 \
"$JDK_URL" -o "$stage/jdk.tar.gz"
printf '%s %s\n' "$JDK_SHA256" "$stage/jdk.tar.gz" | sha256sum -c -
mkdir "$stage/jdk"
tar -xzf "$stage/jdk.tar.gz" -C "$stage/jdk" --strip-components=1 --no-same-owner
"$stage/jdk/bin/java" -version
grep -Eq '^JAVA_VERSION="25([.+"]|$)' "$stage/jdk/release"
# Retain previous installed releases: an active JVM may still use their libraries.
release="$JDK_DIR.releases/temurin-$JDK_VERSION-$(date +%s)-$$"
mv -- "$stage/jdk" "$release"
ln -s -- "$release" "$link"
mv -Tf -- "$link" "$JDK_DIR"
printf 'Installed JDK: %s\n' "$JDK_DIR"