feat: add bash infra installer and diagnostic functions
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.
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env bash
|
||||
# install_python312
|
||||
# -----------------
|
||||
# Instala Python 3.12 en Linux detectando la distribución automáticamente.
|
||||
# - Ubuntu/Debian/Pop/Mint/Elementary: usa deadsnakes PPA
|
||||
# - Fedora/RHEL/CentOS: usa dnf
|
||||
# - Arch/Manjaro: usa pacman
|
||||
# Instala también python3.12-venv, python3.12-dev y verifica pip.
|
||||
#
|
||||
# USO:
|
||||
# source install_python312.sh
|
||||
# install_python312
|
||||
|
||||
install_python312() {
|
||||
echo "Instalando Python 3.12..."
|
||||
echo ""
|
||||
|
||||
# Detectar distribución
|
||||
local distro="unknown"
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
# shellcheck disable=SC1091
|
||||
distro="$(. /etc/os-release && echo "${ID:-unknown}")"
|
||||
echo "Distribución detectada: ${distro}"
|
||||
else
|
||||
echo "install_python312: no se pudo detectar la distribución" >&2
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Verificar si Python 3.12 ya está instalado
|
||||
if command -v python3.12 &>/dev/null; then
|
||||
local current_version
|
||||
current_version="$(python3.12 --version 2>&1)"
|
||||
echo "Python 3.12 ya está instalado: ${current_version}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
case "$distro" in
|
||||
ubuntu|debian|pop|mint|elementary)
|
||||
echo "Instalando Python 3.12 usando deadsnakes PPA..."
|
||||
echo ""
|
||||
|
||||
echo "Actualizando repositorios..."
|
||||
if ! sudo apt update; then
|
||||
echo "install_python312: falló la actualización de repositorios" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Verificando software-properties-common..."
|
||||
if ! dpkg -l 2>/dev/null | grep -q software-properties-common; then
|
||||
if ! sudo apt install -y software-properties-common; then
|
||||
echo "install_python312: falló la instalación de software-properties-common" >&2
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Añadiendo deadsnakes PPA..."
|
||||
if ! sudo add-apt-repository -y ppa:deadsnakes/ppa; then
|
||||
echo "install_python312: falló al añadir deadsnakes PPA" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Actualizando lista de paquetes..."
|
||||
if ! sudo apt update; then
|
||||
echo "install_python312: falló la actualización después de añadir PPA" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Instalando Python 3.12 y herramientas..."
|
||||
if ! sudo apt install -y python3.12 python3.12-venv python3.12-dev python3-pip; then
|
||||
echo "install_python312: falló la instalación de Python 3.12" >&2
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
|
||||
fedora|rhel|centos)
|
||||
echo "Instalando Python 3.12 usando dnf..."
|
||||
if ! sudo dnf install -y python3.12 python3.12-devel; then
|
||||
echo "install_python312: falló la instalación con dnf" >&2
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
|
||||
arch|manjaro)
|
||||
echo "Instalando Python 3.12 usando pacman..."
|
||||
if ! sudo pacman -S --noconfirm python; then
|
||||
echo "install_python312: falló la instalación con pacman" >&2
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "install_python312: distribución no soportada automáticamente: ${distro}" >&2
|
||||
echo " Opciones manuales:" >&2
|
||||
echo " - Compilar desde fuente: https://www.python.org/downloads/" >&2
|
||||
echo " - Usar pyenv: curl https://pyenv.run | bash" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
|
||||
# Verificar instalación
|
||||
if ! command -v python3.12 &>/dev/null; then
|
||||
echo "install_python312: Python 3.12 no está disponible después de la instalación" >&2
|
||||
echo " Puede que necesites reiniciar la terminal" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
local installed_version
|
||||
installed_version="$(python3.12 --version 2>&1)"
|
||||
echo "Python 3.12 instalado correctamente: ${installed_version}"
|
||||
echo ""
|
||||
|
||||
# Verificar pip
|
||||
echo "Verificando pip para Python 3.12..."
|
||||
if ! python3.12 -m pip --version &>/dev/null; then
|
||||
echo "pip no disponible, instalando..."
|
||||
if ! python3.12 -m ensurepip --upgrade; then
|
||||
echo " Instala pip manualmente: curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12"
|
||||
else
|
||||
echo "pip instalado para Python 3.12"
|
||||
fi
|
||||
else
|
||||
echo "pip disponible para Python 3.12"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Comandos útiles:"
|
||||
echo " python3.12 -m venv .venv - Crear entorno virtual"
|
||||
echo " source .venv/bin/activate - Activar entorno"
|
||||
}
|
||||
|
||||
# Ejecutar si se invoca directamente
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
install_python312 "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user