From 8288eb062fa3b9741f4600c5ff6fa6ba9ad22268 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Mon, 10 Mar 2025 22:29:04 -0500 Subject: [PATCH] =?UTF-8?q?[IMPROVED]=20Instalaci=C3=B3n=20de=20nodejs=20(?= =?UTF-8?q?npm)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/.vpn_users.sh.swp | Bin 0 -> 16384 bytes bin/msg/head.es | 26 ++++++- bin/npm_install.sh | 156 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 bin/.vpn_users.sh.swp create mode 100755 bin/npm_install.sh diff --git a/bin/.vpn_users.sh.swp b/bin/.vpn_users.sh.swp new file mode 100644 index 0000000000000000000000000000000000000000..ca141595df63ecc23a23ab4c3ad128980412e937 GIT binary patch literal 16384 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] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los términos de la Licencia Pública Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, +# o (a su elección) cualquier versión posterior. +# +# Este programa se distribuye con la esperanza de que sea útil, +# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la +# Licencia Pública Affero General de GNU para obtener más detalles. +# +# Debería haber recibido una copia de la Licencia Pública Affero General +# junto con este programa. Si no la recibió, consulte . + +DEVSPATH=devs +BIN_HOME=$HOME/$DEVSPATH +BIN_MESG=bin/msg +BIN_LIBS=bin/lib +BIN_CFGS=bin/config +VERSION=1.0.1 + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# LOAD BASE BASH LIBRARY +source $BIN_HOME/$BIN_LIBS/base.lib +#baselib_test + +# Load head messages +load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +title="${head_000} ${head_002}" + +# Función para limpiar la pantalla y salir +function finish() { + clear + exit +} + +# Verificar que dialog esté instalado +if ! command -v dialog &> /dev/null; then + echo "${npm_001}" + exit 1 +fi + +# Si no se ejecuta como root, solicitar contraseña para escalamiento vía dialog +if [ "$EUID" -ne 0 ]; then + SUDO_PASS=$(dialog --backtitle "${title}" --title "${head_superuser}" --insecure --passwordbox "${npm_002}" 10 60 3>&1 1>&2 2>&3 3>&-) + # Probar la contraseña + echo "$SUDO_PASS" | sudo -S true &> /dev/null + if [ $? -ne 0 ]; then + dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_003}" 8 50 + finish + fi +fi + +# Función para ejecutar comandos con sudo si es necesario +run_cmd() { + if [ "$EUID" -eq 0 ]; then + "$@" + else + echo "$SUDO_PASS" | sudo -S "$@" + fi +} + +# Mensaje de bienvenida +dialog --backtitle "${title}" --title "${npm_016}" \ + --msgbox "${npm_004}" 10 60 + +# Detectar sistema operativo +OS_TYPE=$(uname -s) +DISTRO="" +UPDATE_CMD=() +INSTALL_CMD=() + +if [[ "$OS_TYPE" == "Linux" ]]; then + if command -v apt-get &> /dev/null; then + DISTRO="Debian/Ubuntu (apt-get)" + UPDATE_CMD=("apt-get" "update") + INSTALL_CMD=("apt-get" "install" "-y" "nodejs" "npm") + elif command -v pacman &> /dev/null; then + DISTRO="Arch Linux (pacman)" + UPDATE_CMD=("pacman" "-Sy") + INSTALL_CMD=("pacman" "-S" "--noconfirm" "nodejs" "npm") + elif command -v dnf &> /dev/null; then + DISTRO="Fedora (dnf)" + # dnf actualiza automáticamente en muchos casos + INSTALL_CMD=("dnf" "install" "-y" "nodejs" "npm") + elif command -v yum &> /dev/null; then + DISTRO="Fedora/CentOS (yum)" + INSTALL_CMD=("yum" "install" "-y" "nodejs" "npm") + else + dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_006}" 8 50 + finish + fi +elif [[ "$OS_TYPE" == "FreeBSD" ]]; then + DISTRO="FreeBSD (pkg)" + INSTALL_CMD=("pkg" "install" "-y" "node" "npm") +elif [[ "$OS_TYPE" == "Darwin" ]]; then + DISTRO="macOS (Homebrew)" + INSTALL_CMD=("brew" "install" "node") +else + dialog --backtitle "${title}" --title "${head_error}" --msgbox "4{npm_007} ${OS_TYPE}" 8 50 + finish +fi + +# Confirmación del sistema detectado +dialog --backtitle "${title}" --title "${npm_017}" \ + --yesno "${npm_005_1}\n\n ${DISTRO}\n\n" 10 60 +if [ $? -ne 0 ]; then + dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 8 50 + finish +fi + +# Mostrar un progress bar para indicar el avance de la instalación +( + # Inicializar progreso + echo 0; sleep 1 + + # Actualizar repositorios si corresponde + if [ ${#UPDATE_CMD[@]} -gt 0 ]; then + echo 5; echo "# ${npm_009}" + run_cmd "${UPDATE_CMD[@]}" + echo 25; echo "# ${npm_010}" + sleep 1 + else + echo 25; echo "# ${npm_11}" + fi + + # Instalar Node.js y npm + echo 40; echo "# ${npm_12}" + run_cmd "${INSTALL_CMD[@]}" + echo 80; echo "# ${npm_013}" + sleep 1 + + # Finalizar + echo 100; echo "# ${npm_014}" + sleep 1 +) | dialog --backtitle "${title}" --title "i${npm_018}" --gauge "${npm_016}" 10 70 0 + +# Verificar versiones instaladas (algunos sistemas usan "node" en lugar de "nodejs") +node_ver=$(nodejs --version 2>/dev/null || node --version 2>/dev/null) +npm_ver=$(npm --version 2>/dev/null) + +result_message="${npm_017}\n\n${npm_019}\nNode.js: ${node_ver:-${npm_020}}\nnpm: ${npm_ver:-${npm_020}}" +dialog --backtitle "${title}" --title "${npm_021}" --msgbox "$result_message" 10 60 + +finish +