From 20a193f04c8da00de19993dd67a503d21ef87ac9 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Sun, 13 Jul 2025 14:29:12 +0200 Subject: [mod] add Golang ecosystem to the SearXNG toolchain Signed-off-by: Markus Heiser --- utils/lib_go.sh | 211 -------------------------------------------------- utils/lib_govm.sh | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 226 insertions(+), 211 deletions(-) delete mode 100755 utils/lib_go.sh create mode 100755 utils/lib_govm.sh (limited to 'utils') diff --git a/utils/lib_go.sh b/utils/lib_go.sh deleted file mode 100755 index 06522f005..000000000 --- a/utils/lib_go.sh +++ /dev/null @@ -1,211 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*- -# SPDX-License-Identifier: AGPL-3.0-or-later -# -# Tools to install and maintain golang [1] binaries & packages. -# -# [1] https://golang.org/doc/devel/release#policy -# -# A simple *helloworld* test with user 'my_user' : -# -# sudo -H adduser my_user -# ./manage go.golang go1.17.3 my_user -# ./manage go.install github.com/go-training/helloworld@latest my_user -# ./manage go.bash my_user -# $ helloword -# Hello World!! -# -# Don't forget to remove 'my_user': sudo -H deluser --remove-home my_user - -# shellcheck source=utils/lib.sh -. /dev/null - -# configure golang environment -# ---------------------------- - -[[ -z "${GO_VERSION}" ]] && GO_VERSION="go1.17.3" - -GO_DL_URL="https://golang.org/dl" - -# implement go functions -# ----------------------- - -go.help(){ - cat < [filename|sha256|size] - # - # kind: [archive|source|installer] - # os: [darwin|freebsd|linux|windows] - # arch: [amd64|arm64|386|armv6l|ppc64le|s390x] - - python - "$@" < [] - - local version fname sha size user userpr - local buf=() - - version="${1:-${GO_VERSION}}" - user="${2:-${USERNAME}}" - userpr=" ${_Yellow}|${user}|${_creset} " - - rst_title "Install Go in ${user}'s HOME" section - - mapfile -t buf < <( - go.ver_info "${version}" archive "$(go.os)" "$(go.arch)" filename sha256 size - ) - - if [ ${#buf[@]} -eq 0 ]; then - die 42 "can't find info of golang version: ${version}" - fi - fname="${buf[0]}" - sha="${buf[1]}" - size="$(numfmt --to=iec "${buf[2]}")" - - info_msg "Download go binary ${fname} (${size}B)" - cache_download "${GO_DL_URL}/${fname}" "${fname}" - - pushd "${CACHE}" &> /dev/null - echo "${sha} ${fname}" > "${fname}.sha256" - if ! sha256sum -c "${fname}.sha256" >/dev/null; then - die 42 "downloaded file ${fname} checksum does not match" - else - info_msg "${fname} checksum OK" - fi - popd &> /dev/null - - info_msg "install golang" - tee_stderr 0.1 < \$HOME/.go_env -echo "export PATH=\$HOME/local/go/bin:\\\$GOPATH/bin:\\\$PATH" >> \$HOME/.go_env -EOF - info_msg "test golang installation" - sudo -i -u "${user}" < [] - - local package user userpr - - package="${1}" - user="${2:-${USERNAME}}" - userpr=" ${_Yellow}|${user}|${_creset} " - - if [ -z "${package}" ]; then - die 42 "${FUNCNAME[0]}() - missing argument: " - fi - tee_stderr 0.1 <] - - local user - user="${1:-${USERNAME}}" - sudo -i -u "${user}" bash --init-file "~${user}/.go_env" -} - -go.version(){ - local user - user="${1:-${USERNAME}}" - sudo -i -u "${user}" < + + local version dest fname sha size tmp + version="${1:-$GOVERSION}" + dest="${2:-$GOROOT}" + + info_msg "Install Go in ${dest}" + + # HINT: the python requirements needed by go.vm.version are taken from the + # developer environment. If it is not yet installed, install it now .. + pyenv.install + + # fetch go version .. + local buf=() + mapfile -t buf < <( + go.vm.version "${version}" archive "$(go.os)" "$(go.arch)" filename sha256 size + ) + if [ ${#buf[@]} -eq 0 ]; then + die 42 "can't find info of golang version: ${version}" + fi + fname="${buf[0]}" + sha="${buf[1]}" + size="$(numfmt --to=iec "${buf[2]}")" + + info_msg "Download go binary ${fname} (${size}B)" + cache_download "${_GO_DL_URL}/${fname}" "${fname}" + + pushd "${CACHE}" &>/dev/null + echo "${sha} ${fname}" >"${fname}.sha256" + if ! sha256sum -c "${fname}.sha256" >/dev/null; then + die 42 "downloaded file ${fname} checksum does not match" + else + info_msg "${fname} checksum OK" + fi + popd &>/dev/null + + info_msg "install golang" + + tmp="$(mktemp -d)" + tar -C "${tmp}" -xzf "${CACHE}/${fname}" + rm -rf "${dest}" + mkdir -p "$(dirname "${dest}")" + mv "${tmp}/go" "${dest}" + + mkdir -p "$(dirname "$GOENV")" + export GOENV + + "${GOVM_EXE}" telemetry off + "${GOVM_EXE}" env -w \ + GOBIN="$GOBIN" \ + GOTOOLCHAIN="$GOTOOLCHAIN" \ + GOCACHE="$GOCACHE" \ + GOPATH="$GOPATH" \ + GOMODCACHE="$GOMODCACHE" + + mkdir -p "${GOMODCACHE}" +} + +go.vm.list() { + + # Go versions manager; list Go versions (stable) + + python < [filename|sha256|size] + # + # kind: [archive|source|installer] + # os: [darwin|freebsd|linux|windows] + # arch: [amd64|arm64|386|armv6l|ppc64le|s390x] + + python - "$@" <