194663a379
10 funciones Bash del dominio infra: instaladores de herramientas de desarrollo (install_go, install_nodejs, install_pnpm, install_python312, install_uv, install_volta, install_wails), diagnostico del sistema (analyze_disk_space, detect_wsl, list_listening_ports). Automatizan la configuracion del entorno de desarrollo en Linux/WSL.
116 lines
3.4 KiB
Bash
116 lines
3.4 KiB
Bash
#!/usr/bin/env bash
|
|
# install_go
|
|
# ----------
|
|
# Instala Go en Linux. Detecta arquitectura automáticamente (amd64/arm64/armv6l).
|
|
# Descarga desde go.dev/dl, instala en /usr/local y configura PATH en el shell config.
|
|
#
|
|
# USO:
|
|
# source install_go.sh
|
|
# install_go [version] [--force]
|
|
#
|
|
# ARGUMENTOS:
|
|
# version Versión de Go a instalar (default: 1.22.0)
|
|
# --force Reinstala aunque Go ya esté instalado
|
|
|
|
install_go() {
|
|
local version="1.22.0"
|
|
local force=false
|
|
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--force) force=true ;;
|
|
*) [[ "$arg" =~ ^[0-9] ]] && version="$arg" ;;
|
|
esac
|
|
done
|
|
|
|
local go_os="linux"
|
|
local go_arch
|
|
|
|
# Detectar arquitectura
|
|
local arch
|
|
arch="$(uname -m)"
|
|
case "$arch" in
|
|
x86_64) go_arch="amd64" ;;
|
|
aarch64|arm64) go_arch="arm64" ;;
|
|
armv6l) go_arch="armv6l" ;;
|
|
*)
|
|
echo "install_go: arquitectura no soportada: ${arch}" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
|
|
# Verificar si ya está instalado
|
|
if command -v go &>/dev/null && [[ "$force" != true ]]; then
|
|
local current_version
|
|
current_version="$(go version | awk '{print $3}' | sed 's/go//')"
|
|
echo "install_go: Go ya está instalado (versión: ${current_version}). Usa --force para reinstalar."
|
|
return 0
|
|
fi
|
|
|
|
local tarball="go${version}.${go_os}-${go_arch}.tar.gz"
|
|
local url="https://go.dev/dl/${tarball}"
|
|
local install_dir="/usr/local"
|
|
|
|
echo "Instalando Go ${version} para ${go_os}-${go_arch}..."
|
|
|
|
# Eliminar versión anterior si existe
|
|
if command -v go &>/dev/null; then
|
|
echo "Eliminando versión anterior..."
|
|
sudo rm -rf "${install_dir}/go"
|
|
fi
|
|
|
|
# Descargar en directorio temporal
|
|
local tmp_dir
|
|
tmp_dir="$(mktemp -d)"
|
|
|
|
echo "Descargando ${url}..."
|
|
if ! curl -LO --output-dir "$tmp_dir" "$url"; then
|
|
echo "install_go: error al descargar Go ${version}. Verifica la versión en: https://go.dev/dl/" >&2
|
|
rm -rf "$tmp_dir"
|
|
return 1
|
|
fi
|
|
|
|
echo "Instalando en ${install_dir}..."
|
|
sudo tar -C "$install_dir" -xzf "${tmp_dir}/${tarball}"
|
|
rm -rf "$tmp_dir"
|
|
|
|
# Configurar PATH en shell config
|
|
local shell_config=""
|
|
if [[ -f "$HOME/.bashrc" ]]; then
|
|
shell_config="$HOME/.bashrc"
|
|
elif [[ -f "$HOME/.zshrc" ]]; then
|
|
shell_config="$HOME/.zshrc"
|
|
fi
|
|
|
|
if [[ -n "$shell_config" ]]; then
|
|
if ! grep -q "export PATH=\$PATH:${install_dir}/go/bin" "$shell_config"; then
|
|
{
|
|
echo ""
|
|
echo "# Go configuration"
|
|
echo "export PATH=\$PATH:${install_dir}/go/bin"
|
|
echo "export GOPATH=\$HOME/go"
|
|
echo "export PATH=\$PATH:\$GOPATH/bin"
|
|
} >> "$shell_config"
|
|
echo "Variables de PATH añadidas a ${shell_config}"
|
|
else
|
|
echo "Variables de entorno ya configuradas en ${shell_config}"
|
|
fi
|
|
fi
|
|
|
|
# Crear estructura GOPATH
|
|
mkdir -p "$HOME/go"/{bin,src,pkg}
|
|
|
|
# Verificar instalación
|
|
export PATH="$PATH:${install_dir}/go/bin"
|
|
local installed_version
|
|
installed_version="$("${install_dir}/go/bin/go" version)"
|
|
echo ""
|
|
echo "Go instalado correctamente: ${installed_version}"
|
|
echo "Reinicia tu terminal o ejecuta: source ${shell_config:-~/.bashrc}"
|
|
}
|
|
|
|
# Ejecutar si se invoca directamente
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
install_go "$@"
|
|
fi
|