#!/bin/bash set -e errx() { echo "error: $1">&2; exit 1; } [[ $(id -u) -ne 0 ]] && errx "this script must be run as root" install_dir="/usr/local" go_dir="${install_dir}/go" url="https://github.com/golang/go/archive" v14="go1.4.3" v14_sum="65e8d2ea08447f02f8b6ab63778e4d98586ac4fd676401dae0eda494c7829965" v14_bootstrap="${install_dir}/bootstrap-${v14}" tgz14="${v14}.tar.gz" path_v14="${install_dir}/${tgz14}" v19="go1.19.7" v19_sum="1fe106fce9342c2a7ceeb04477341457cc9f0a3c07b9f2a993af09d654307f56" v19_bootstrap="${install_dir}/bootstrap-${v19}" tgz19="${v19}.tar.gz" path_v19="${install_dir}/${tgz19}" v="${1-1.21.0}" case "${v}" in 1.16.7) new_sum="07502f16366fbc697b1b09b842d29116e6d6607c9dc42b1d7c54b96f528c7952";; 1.17.1) new_sum="670ce36e100669f9be572a1603858ce4a64eb4b21a31fa5cdefb778609c40337";; 1.17.2) new_sum="022fe1f533432a305db705448f50f9a3ea369586dc32d07219b1bc7db1e01577";; 1.17.4) new_sum="91736588a47917aaa424dfdf482d8efcb44403a768e7a947c272a98881053386";; 1.17.6) new_sum="de00bf818cda9e4712e9b3438c9c3d4f8318beb598d11abb0ba9d515883f6320";; 1.18) new_sum="63e5cab48f97c63dc2737eb35582316acf77084d109ac0571651cedaf40987c0";; 1.18.2) new_sum="b76e590857060fdc575a37d4204c15df33de6d23e49d5cf9bdce93083e4dcddb";; 1.18.3) new_sum="cc0e73239f5bc1521de9ddc54f46eb0e69cc41faabe3f468865483bb0f844b68";; 1.18.4) new_sum="283442519c28f5c24dd8c849ebe0570a3ad92cd94610378b33b2053f60391fdf";; 1.18.5) new_sum="30c07c08c9b9a79d652272ac3298c249a810a4c908e8937cf5e58d2414af1cc3";; 1.19) new_sum="6ac64f39e3f477ac793896437237e84b06d67c7657fbb34abcdbf73c77f6b7a3";; 1.19.1) new_sum="884439c3de751c705e47a120af6b92b65770a952a7b8788244bc6d73b2548c3e";; 1.19.5) new_sum="1c24a6a2bf71d64d0ca8e228028d6108521f06b6edc7bf6b34ed6d767a795809";; 1.19.6) new_sum="0c7f4e6d2de3ae07d60377754955842ad357b0366df01116554fc619b1e99672";; 1.19.7) new_sum="1fe106fce9342c2a7ceeb04477341457cc9f0a3c07b9f2a993af09d654307f56";; 1.20.1) new_sum="5db737840a740457c1b4b73b90dad6daa57af0da420f3ea51c39a1a81abbcc41";; 1.20.2) new_sum="176969bb14216dd45121e46d5d0f63d339edb9042d1389d485fb6b21ee172388";; 1.21.0) new_sum="cf1d9b0504983c1a4c044856c389555070fbc58c3ce1703193a2c3ffe877a8b9";; *) errx "no hash found for version ${v}";; esac [[ "${v}" =~ 1\.2* ]] && v1_20=1 || v1_20=0 new="go${v}" new_dir="${install_dir}/go-${new}" tgznew="${new}.tar.gz" path_new="${install_dir}/${tgznew}" rm -f ${go_dir} if [[ ! -d "${v14_bootstrap}" ]]; then curl -sSL "${url}/${tgz14}" >${path_v14} [[ "$(sha256sum ${path_v14}|cut -d" " -f1)" != "${v14_sum}" ]] && errx "wrong checksum: ${path_v14}" tar xfz ${path_v14} -C ${install_dir} mv ${install_dir}/go-${v14} ${v14_bootstrap} fi if [[ "${v1_20}" -eq 1 ]] && [[ ! -d "${v19_bootstrap}" ]]; then curl -sSL "${url}/${tgz19}" >${path_v19} [[ "$(sha256sum ${path_v19}|cut -d" " -f1)" != "${v19_sum}" ]] && errx "wrong checksum: ${path_v19}" tar xfz ${path_v19} -C ${install_dir} mv ${install_dir}/go-${v19} ${v19_bootstrap} fi if [[ ! -d "${new_dir}" ]]; then curl -sSL "${url}/${tgznew}" >${path_new} [[ -z "${new_sum}" ]] && { echo "hashsum for version ${new}:"; sha256sum ${path_new}|cut -d" " -f1; exit 0; } [[ "$(sha256sum ${path_new}|cut -d" " -f1)" != "${new_sum}" ]] && errx "wrong checksum: ${path_new}" tar xfz ${path_new} -C ${install_dir} fi export CGO_ENABLED=0 if [[ ! -x "${v14_bootstrap}/bin/go" ]]; then cd ${v14_bootstrap}/src ./make.bash fi if [[ "${v1_20}" -eq 1 ]] && [[ ! -x "${v19_bootstrap}/bin/go" ]]; then export GOROOT_BOOTSTRAP=${v14_bootstrap} cd ${v19_bootstrap}/src ./make.bash fi if [[ ! -x "${new_dir}/bin/go" ]]; then [[ "${v1_20}" -eq 1 ]] && bootstrap=${v19_bootstrap} || bootstrap=${v14_bootstrap} export GOROOT_BOOTSTRAP=${bootstrap} [[ "$(uname -m)" == "x86_64" ]] && export GOARCH=amd64 || export GOARCH=386 cd ${new_dir}/src ./make.bash fi ln -s ${new_dir} ${go_dir} export GOROOT=${go_dir} export PATH=${PATH}:${GOROOT}/bin:~/go/bin cat <