Files

40 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Verified Go installation for Potatium (Ubuntu 26.04 LTS); run as root.
set -Eeuo pipefail
if [[ $EUID -ne 0 ]]; then echo "Run as root: sudo bash scripts/install_go.sh" >&2; exit 1; fi
GO_VERSION="1.27.3"
case "$(dpkg --print-architecture)" in
amd64) ARCH=amd64; SHA256='65efbc80fdc1fa2cd2631cad5b481777a68e8725f34e89f50fc6ac714e379b40';;
arm64) ARCH=arm64; SHA256='a06e99309dbcbdca1a8ccd2282c3ee146e55930886e26b4f1193269587165f49';;
*) echo 'Only Ubuntu amd64 and arm64 supported by this installer' >&2; exit 1;;
esac
ARCHIVE="go${GO_VERSION}.linux-${ARCH}.tar.gz"
if [[ -x /usr/local/go/bin/go ]]; then
EXISTING=$(/usr/local/go/bin/go version)
if [[ "$EXISTING" == "go version go${GO_VERSION} "* ]]; then
echo "Already installed: $EXISTING"; exit 0
fi
echo "Existing /usr/local/go detected: $EXISTING. Stop. Manually assess upgrade first." >&2
exit 1
fi
if [[ -e /usr/local/go ]]; then
echo '/usr/local/go already exists. Refusing to overwrite.' >&2; exit 1
fi
TEMP=$(mktemp -d)
trap 'rm -rf "$TEMP"' EXIT
printf 'Downloading verified Go %s for linux/%s\n' "$GO_VERSION" "$ARCH"
curl --fail --location --show-error --silent --retry 3 \
"https://go.dev/dl/${ARCHIVE}" -o "$TEMP/${ARCHIVE}"
printf '%s %s\n' "$SHA256" "$TEMP/${ARCHIVE}" | sha256sum --check --status || {
echo 'Checksum mismatch. Aborted.' >&2; exit 1;
}
tar -xzf "$TEMP/${ARCHIVE}" -C "$TEMP"
# Install a fresh tree, never unpack on top of an existing installation.
mv "$TEMP/go" /usr/local/go
cat > /etc/profile.d/potatium-go.sh <<'ENDPATH'
export PATH="/usr/local/go/bin:$HOME/go/bin:$PATH"
ENDPATH
ln -sfn /usr/local/go/bin/go /usr/local/bin/go
ln -sfn /usr/local/go/bin/gofmt /usr/local/bin/gofmt
/usr/local/go/bin/go version