#!/bin/sh set -e SCRIPT_VERSION="0.1.4" echo "[linux/amd64 | FreeBSD] GoLang check new version ${SCRIPT_VERSION} Script author: Ryabinin Sergey Vladimirovich dev@brigar.ru https://t.me/brigar_ru " GOWORK_PATH="$1" if [ $# -eq 0 ]; then echo "Please set argumen dirictory place install example: $0 \$HOME/DEV/go-pack" exit 1; fi if [ ! -d ${GOWORK_PATH} ]; then mkdir -p ${GOWORK_PATH} fi if [ ! -d ${GOWORK_PATH} ]; then echo "Please create mkdir -p ${GOWORK_PATH} " exit 1; fi OS_TYPE=$(uname -o) # FreeBSD | GNU/Linux CMD_GET="curl" if ! which "${CMD_GET}" >/dev/null; then echo "Please install ${CMD_GET}" exit 1; fi FILE_GET_URL="https://go.dev/dl/" GO_VERSION_NEW="$(${CMD_GET} -s ${FILE_GET_URL}|grep 'Stable versions' -C4|grep '
//')" if [ "${OS_TYPE}" == "FreeBSD" ]; then CMD_GREP_PARSE="grep -E -o" CMD_SHA256="sha256" GOFILE="${GO_VERSION_NEW}.freebsd-amd64.tar.gz" elif [ "${OS_TYPE}" == "GNU/Linux" ]; then CMD_GREP_PARSE="grep -P -o" CMD_SHA256="sha256sum" GOFILE="${GO_VERSION_NEW}.linux-amd64.tar.gz" else echo "Sorry: not detected os type" exit 1; fi if which go >/dev/null; then GO_VERSION_NEW_SYS=$(go version| ${CMD_GREP_PARSE} "go[0-9]+[.0-9]+") else GO_VERSION_NEW_SYS="none" fi PROFILE_='export GO111MODULE=off GOWORK_PATH=${HOME}/DEV/go-pack export GOROOT=${GOWORK_PATH}/go export PATH=$PATH:$GOROOT/bin export GOPATH=${GOWORK_PATH}/Go export PATH=$PATH:$GOPATH/bin' if [ ! -n "${GOROOT}" ]; then echo "Please set GOROOT example in profile file /etc/profile or ~/.profile ${PROFILE_} " exit 1; fi if [ ! -n "${GOPATH}" ]; then echo "Please set GOROOT example in profile file /etc/profile or ~/.profile /etc/profile ${PROFILE_} " exit 1; fi if [ "${GO_VERSION_NEW_SYS}" == "${GO_VERSION_NEW}" ]; then echo "No new version Golang" echo "Your version Golang: [${GO_VERSION_NEW_SYS}] fetched version: [${GO_VERSION_NEW}]" exit 0; else echo "Golang new version is available" echo "Your version Golang: [${GO_VERSION_NEW_SYS}] fetched version: [${GO_VERSION_NEW}]" fi HASHE=$(${CMD_GET} -s ${FILE_GET_URL}|grep "${GOFILE}" -A5) if [ "${OS_TYPE}" == "FreeBSD" ]; then GO_SHA256=$(echo "${HASHE}" | ${CMD_GREP_PARSE} "(.*)" | sed 's@<\([^<>][^<>]*\)>\([^<>]*\)@\2@g') fi if [ "${OS_TYPE}" == "GNU/Linux" ]; then GO_SHA256=$(echo "${HASHE}" | ${CMD_GREP_PARSE} "(.*)" | sed 's@<\([^<>][^<>]*\)>\([^<>]*\)@\2@g') fi echo "latest version: ${GO_VERSION_NEW}" echo "url: ${FILE_GET_URL}$GOFILE" echo "sha256: ${GO_SHA256}" cd /tmp; if [ ! -f /tmp/${GOFILE} ]; then echo "downloadable: [${FILE_GET_URL}${GOFILE}]" ${CMD_GET} -L "${FILE_GET_URL}${GOFILE}" -o /tmp/${GOFILE} fi if [ "${OS_TYPE}" == "FreeBSD" ]; then GO_SHA256_CRP=$(${CMD_SHA256} ${GOFILE}|awk '{print $4}') fi if [ "${OS_TYPE}" == "GNU/Linux" ]; then GO_SHA256_CRP=$(${CMD_SHA256} ${GOFILE}|awk '{print $1}') fi if [ "${GO_SHA256_CRP}" == "${GO_SHA256}" ]; then echo "ok sum: [${GOFILE}]"; echo "delete old version: [${GO_VERSION_NEW_SYS}]"; rm -rf "${GOROOT}" echo "install new version: [${GO_VERSION_NEW}]" tar -C ${GOWORK_PATH} -xzf ${GOFILE} if [ $? -eq 0 ]; then echo "new version install complete: [${GO_VERSION_NEW}]" fi unset GO_VERSION_NEW unset GO_SHA256 unset GO_SHA256_CRP else echo "Control summ not valid" echo "file sum: ${GO_SHA256_CRP}" echo "site sum: ${GO_SHA256}" fi