diff --git a/bin/.vpn_users.sh.swp b/bin/.vpn_users.sh.swp new file mode 100644 index 0000000..ca14159 Binary files /dev/null and b/bin/.vpn_users.sh.swp differ diff --git a/bin/msg/head.es b/bin/msg/head.es index cd5933e..cc301c9 100644 --- a/bin/msg/head.es +++ b/bin/msg/head.es @@ -38,7 +38,8 @@ head_nobuilded="No se pudo completar la construcción del contenedor" head_builded="Construcción del contenedor completada!" head_zip="Utilitario zip no ha sido instalado!" head_key_end="999999END" - +head_superuser="Super Usuario" +head_canceled="Cancelado" head_container="Generando contenedor" label_email="Correo Electrónico:" @@ -63,3 +64,26 @@ git_add_files="Archivos base del proyecto agregados!" git_first_commited="[INIT] Proyecto inicializado" git_end_commited="Todos los cambios al repositorio nuevo han sido aplicados!" git_new_project_pushed="Proyecto ha sido creado/actualizado en repositorio remoto" + +npm_001="El programa 'dialog' no está instalado. Por favor, instálalo e inténtalo nuevamente." +npm_002="No eres super usuario. Ingresa la contraseña para escalamiento:" +npm_003="Contraseña incorrecta o error al escalar privilegios." +npm_004="Este script instalará Node.js y npm de forma interactiva. Soporta Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)." +npm_005_1="Se detectó el siguiente sistema:" +npm_005_2="¿Desea continuar con la instalación?" +npm_006="No se encontró un gestor de paquetes soportado." +npm_007="Sistema operativo no soportado:" +npm_008="Instalación cancelada por el usuario." +npm_009="Actualizando repositorios..." +npm_010="Repositorios actualizados." +npm_011="No se requiere actualización." +npm_012="Iniciando instalación de Node.js y npm..." +npm_013="Instalación en progreso..." +npm_014="Instalación completada." +npm_015="Instalación completada. Versiones instaladas: Node.js: [versión] npm: [versión]" +npm_016="Instalador de Node.js y npm" +npm_017="Confirmar Sistema" +npm_018="Instalación" +npm_019="Versiones instaladas:" +npm_020="No encontrado" +npm_021="Instalación Finalizada" diff --git a/bin/npm_install.sh b/bin/npm_install.sh new file mode 100755 index 0000000..e50c9be --- /dev/null +++ b/bin/npm_install.sh @@ -0,0 +1,156 @@ +#!/bin/bash +# npm_install.sh +# Script interactivo para instalar Node.js y npm en múltiples sistemas operativos +# Soporta: Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew) +# Requiere: dialog +# Modified: 2025/03/09 10:27:00 +# Generado con inteligencia artificial +# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# +# 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 +