Skip to content

Commit 741a17c

Browse files
authored
Create install_golang.sh
1 parent 944bc99 commit 741a17c

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

Linux/install_golang.sh

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#!/usr/bin/env bash
2+
3+
#-------------------------------------------------------#
4+
## <DO NOT RUN STANDALONE, meant for CI Only>
5+
## Meant to Install & Setup Go
6+
###-----------------------------------------------------###
7+
8+
#-------------------------------------------------------#
9+
##ENV
10+
set -euo pipefail
11+
GO_DIR="${HOME}/.go"
12+
GO_BIN_DIR="${HOME}/go/bin"
13+
TEMP_DIR="$(mktemp -d)"
14+
trap 'rm -rf "$TEMP_DIR"' EXIT
15+
#-------------------------------------------------------#
16+
17+
#-------------------------------------------------------#
18+
##Architecture
19+
case "$(uname -m)" in
20+
aarch64) ARCH="arm64" ;;
21+
armv6l) ARCH="armv6l" ;;
22+
armv7l) ARCH="armv6l" ;;
23+
i?86) ARCH="386" ;;
24+
s390x) ARCH="s390x" ;;
25+
ppc64le) ARCH="ppc64le" ;;
26+
x86_64) ARCH="amd64" ;;
27+
*) echo "[-] Unsupported architecture: $(uname -m)" && exit 1 ;;
28+
esac
29+
echo "[+] Installing Go for linux-${ARCH}..."
30+
#-------------------------------------------------------#
31+
32+
#-------------------------------------------------------#
33+
##Deps
34+
for cmd in curl find grep tar; do
35+
command -v "${cmd}" >/dev/null || { echo "[-] Missing: ${cmd}" && exit 1; }
36+
done
37+
#-------------------------------------------------------#
38+
39+
#-------------------------------------------------------#
40+
##Install
41+
#Clean Existing
42+
[[ -d "${GO_DIR}" ]] && rm -rf "${GO_DIR}"
43+
[[ -d "${GO_BIN_DIR}" ]] && rm -rf "${GO_BIN_DIR}"
44+
#Get Latest Version
45+
cd "${TEMP_DIR}"
46+
LATEST_VERSION="$(curl -qfsSL "https://golang.org/VERSION?m=text" | grep -Ev '[0-9]{4}[^0-9]?[0-1][0-9][^0-9]?[0-3][0-9]' | head -1 | tr -d '"'\''[:space:]')"
47+
[[ -z "${LATEST_VERSION}" || "${LATEST_VERSION}" == "null" ]] && {
48+
echo "[-] Failed to get latest Go version" && exit 1;
49+
}
50+
DOWNLOAD_URL="https://golang.org/dl/${LATEST_VERSION}.linux-${ARCH}.tar.gz"
51+
echo "[+] Downloading Go ${LATEST_VERSION}..."
52+
#Download
53+
for i in {1..3}; do
54+
curl -w "(DL) <== %{url}\n" -fSL "${DOWNLOAD_URL}" -o "go.tar.gz" && break
55+
[[ $i -eq 3 ]] && { echo "[-] Download failed" && exit 1; }
56+
echo "[!] Retry $i/3..."
57+
done
58+
#Extract and install
59+
tar -xzf "go.tar.gz"
60+
GO_SRC="$(find "." -maxdepth 1 -type d -name "*go*" | head -1)"
61+
[[ -z "${GO_SRC}" || ! -d "${GO_SRC}" ]] && { echo "[-] Extract failed" && exit 1; }
62+
mkdir -p "${HOME}"
63+
mv "${GO_SRC}" "${GO_DIR}"
64+
#Create GOPATH bin directory
65+
mkdir -p "${GO_BIN_DIR}"
66+
#-------------------------------------------------------#
67+
68+
#-------------------------------------------------------#
69+
##Check
70+
export GOROOT="${GO_DIR}"
71+
export GOPATH="${HOME}/go"
72+
export PATH="${GO_DIR}/bin:${GO_BIN_DIR}:${PATH}"
73+
hash -r &>/dev/null
74+
command -v go >/dev/null || { echo "[-] Installation failed" && exit 1; }
75+
echo "[+] Success! Go version: $(go version)"
76+
echo "[+] GOROOT: ${GOROOT}"
77+
echo "[+] GOPATH: ${GOPATH}"
78+
echo "[|] PATH: export PATH=\"${GO_DIR}/bin:${GO_BIN_DIR}:\${PATH}\""
79+
#-------------------------------------------------------#

0 commit comments

Comments
 (0)