From e2988bf292a33d395738a07b6a3cb7a3521f842a Mon Sep 17 00:00:00 2001 From: MacRimi <123239993+MacRimi@users.noreply.github.com> Date: Fri, 20 Dec 2024 21:41:34 +0100 Subject: [PATCH] Update install_proxmenux.sh --- install_proxmenux.sh | 135 +++++++++++++++++++++++++++++-------------- 1 file changed, 92 insertions(+), 43 deletions(-) diff --git a/install_proxmenux.sh b/install_proxmenux.sh index 7d386e9..580167e 100644 --- a/install_proxmenux.sh +++ b/install_proxmenux.sh @@ -2,57 +2,106 @@ # Configuración REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main" -INSTALL_DIR="/usr/local/bin" -LANG_DIR="/usr/local/share/proxmenux/lang" -VERSION_FILE="/usr/local/share/proxmenux/version.txt" -MENU_SCRIPT="menu.sh" -DEFAULT_LANGUAGE="es" +BASE_DIR="/usr/local/share/proxmenux" +LANG_DIR="$BASE_DIR/lang" +CACHE_DIR="$BASE_DIR/cache" +LOCAL_VERSION_FILE="$BASE_DIR/version.txt" +REMOTE_VERSION_FILE="$BASE_DIR/latest_version.txt" +LANGUAGE_FILE="/root/.proxmenux_language" +SKIP_UPDATE_CHECK=${SKIP_UPDATE_CHECK:-false} -# Verificar que se ejecute como root -if [ "$(id -u)" -ne 0 ]; then - echo "Este script debe ejecutarse como root." >&2 - exit 1 -fi +# Colores para salida +YW="\033[33m"; GN="\033[1;92m"; RD="\033[01;31m"; CL="\033[m" +msg_info() { echo -ne " ${YW}[INFO] $1...${CL}"; } +msg_ok() { echo -e " ${GN}[OK] $1${CL}"; } +msg_error() { echo -e " ${RD}[ERROR] $1${CL}"; } -# Crear directorios necesarios -echo "Creando directorios necesarios..." -mkdir -p "$INSTALL_DIR" -mkdir -p "$LANG_DIR" +# Crear las carpetas necesarias +mkdir -p "$LANG_DIR" "$CACHE_DIR" -# Descargar el script menu.sh desde GitHub -echo "Descargando el script principal..." -wget -qO "$INSTALL_DIR/$MENU_SCRIPT" "$REPO_URL/$MENU_SCRIPT" +# Seleccionar idioma en la primera ejecución +if [ ! -f "$LANGUAGE_FILE" ]; then + LANGUAGE=$(whiptail --title "Seleccionar Idioma" --menu "Elige tu idioma / Select your language:" 15 60 2 \ + "es" "Español" \ + "en" "English" 3>&1 1>&2 2>&3) -# Verificar si la descarga fue exitosa -if [ $? -ne 0 ]; then - echo "Error al descargar el script desde $REPO_URL. Verifica la URL y tu conexión a Internet." >&2 - exit 1 -fi - -# Descargar archivos de idioma predeterminados -echo "Descargando archivos de idioma..." -for LANG in es en; do - wget -qO "$LANG_DIR/$LANG.lang" "$REPO_URL/lang/$LANG.lang" - if [ $? -ne 0 ]; then - echo "Error al descargar el archivo de idioma '$LANG.lang'. Verifica la URL y tu conexión a Internet." >&2 + if [ -z "$LANGUAGE" ]; then + echo "No seleccionaste un idioma. Saliendo..." >&2 exit 1 fi -done -# Descargar el archivo de versión inicial -echo "Descargando archivo de versión inicial..." -wget -qO "$VERSION_FILE" "$REPO_URL/version.txt" -if [ $? -ne 0 ]; then - echo "Error al descargar el archivo de versión. Verifica la URL y tu conexión a Internet." >&2 - exit 1 + echo "$LANGUAGE" > "$LANGUAGE_FILE" + msg_ok "Idioma seleccionado: $LANGUAGE" +else + LANGUAGE=$(cat "$LANGUAGE_FILE") + msg_info "Idioma cargado: $LANGUAGE" fi -# Asignar permisos de ejecución al script principal -chmod +x "$INSTALL_DIR/$MENU_SCRIPT" +# Descargar el archivo de idioma si no existe +LANG_FILE="$LANG_DIR/$LANGUAGE.lang" +if [ ! -f "$LANG_FILE" ]; then + msg_info "Descargando archivo de idioma..." + wget -qO "$LANG_FILE" "$REPO_URL/lang/$LANGUAGE.lang" + if [ $? -ne 0 ]; then + msg_error "Error al cargar el archivo de idioma. Verifica la conexión a Internet o la URL." + exit 1 + fi +else + msg_ok "Archivo de idioma ya existe localmente." +fi -# Confirmación -echo "ProxMenux ha sido instalado correctamente." -echo "Ejecuta 'menu.sh' como root para iniciar el menú." +source "$LANG_FILE" -# Finalizar -exit 0 +# Verificar si hay una nueva versión del menú +if [ "$SKIP_UPDATE_CHECK" = "false" ]; then + msg_info "Comprobando actualizaciones..." + if wget -qO "$REMOTE_VERSION_FILE" "$REPO_URL/version.txt"; then + REMOTE_VERSION=$(cat "$REMOTE_VERSION_FILE" | tr -d '\r') + + # Comprobar si el archivo local de versión existe + if [ ! -f "$LOCAL_VERSION_FILE" ]; then + echo "$SCRIPT_VERSION" > "$LOCAL_VERSION_FILE" + fi + + LOCAL_VERSION=$(cat "$LOCAL_VERSION_FILE" | tr -d '\r') + + # Mostrar versiones para depuración + msg_info "Versión local: $LOCAL_VERSION" + msg_info "Versión remota: $REMOTE_VERSION" + + # Comparar versión local con remota + if [ "$REMOTE_VERSION" != "$LOCAL_VERSION" ]; then + whiptail --title "$UPDATE_TITLE" --yesno "$UPDATE_PROMPT" 10 60 && { + wget -qO /usr/local/bin/menu.sh "$REPO_URL/menu.sh" + chmod +x /usr/local/bin/menu.sh + echo "$REMOTE_VERSION" > "$LOCAL_VERSION_FILE" + whiptail --title "$UPDATE_COMPLETE" --msgbox "$UPDATE_MESSAGE" 10 60 + SKIP_UPDATE_CHECK=true exec env SKIP_UPDATE_CHECK=true /usr/local/bin/menu.sh + } + else + msg_ok "El menú está actualizado." + fi + else + msg_error "No se pudo comprobar la versión. Verifica la conexión a Internet o la URL del archivo." + fi +fi + +# Dependencias y bucle del menú +check_dependencies() { + if ! command -v whiptail &> /dev/null; then + msg_info "Instalando dependencias necesarias..." + apt-get update + apt-get install -y whiptail + msg_ok "Dependencias instaladas." + fi +} + +show_menu() { + # Aquí iría el menú principal + msg_ok "ProxMenux está listo." + exit 0 +} + +# Verificar dependencias y mostrar menú +check_dependencies +show_menu