Merge pull request #76 from c78-contrib/main

Proxmenux offline mode
This commit is contained in:
MacRimi
2025-11-14 16:56:04 +01:00
committed by GitHub
82 changed files with 1956 additions and 418 deletions

2
.gitignore vendored
View File

@@ -51,3 +51,5 @@ Thumbs.db
!guides/
!web/
# GitHub authentication
.github/auth.sh

512
docs/01.PROXMENUX_REVIEW.md Normal file
View File

@@ -0,0 +1,512 @@
---
# **Análisis Completo del proyecto ProxMenux**
## **1. Estructura General del Proyecto**
### **Archivos Principales**
- **[install_proxmenux.sh](cci:7://file:///home/debian/src/ProxMenuxOffline/install_proxmenux.sh:0:0-0:0)**: Script de instalación principal (723 líneas)
- **[menu](cci:7://file:///home/debian/src/ProxMenuxOffline/menu:0:0-0:0)**: Script principal que se instala como comando del sistema (93 líneas)
- **[version.txt](cci:7://file:///home/debian/src/ProxMenuxOffline/version.txt:0:0-0:0)**: Control de versiones (actual: 1.1.7)
### **Directorios Principales**
```
ProxMenuxOffline/
├── scripts/ # 122 archivos de scripts bash
│ ├── menus/ # 13 scripts de menús
│ ├── lxc/ # 6 scripts para contenedores LXC
│ ├── vm/ # 13 scripts para máquinas virtuales
│ ├── storage/ # 9 scripts de almacenamiento
│ ├── share/ # 12 scripts para compartir recursos
│ ├── utilities/ # 6 utilidades del sistema
│ ├── global/ # 10 funciones comunes
│ ├── backup_restore/ # 6 scripts de respaldo
│ ├── post_install/ # 3 scripts post-instalación
│ └── gpu_tpu/ # Scripts para hardware gráfico
├── web/ # 136 archivos - Dashboard Next.js
├── AppImage/ # 54 archivos - ProxMenux Monitor
├── json/ # Archivos de caché de traducciones
├── lang/ # Archivos de idioma
├── guides/ # 5 guías de usuario
└── images/ # 7 imágenes del proyecto
```
---
## **2. Flujo de Instalación**
### **Script: [install_proxmenux.sh](cci:7://file:///home/debian/src/ProxMenuxOffline/install_proxmenux.sh:0:0-0:0)**
**Fase 1: Inicialización**
- Verifica permisos root (línea 716-719)
- Carga [utils.sh](cci:7://file:///home/debian/src/ProxMenuxOffline/scripts/utils.sh:0:0-0:0) desde GitHub (línea 54-57)
- Limpia archivos corruptos de configuración (línea 59-68)
**Fase 2: Detección de Instalación Existente**
- Función [check_existing_installation()](cci:1://file:///home/debian/src/ProxMenuxOffline/install_proxmenux.sh:70:0-106:1) (línea 71-107)
- Detecta 4 tipos: `none`, `normal`, `translation`, `unknown`
- Verifica entorno virtual Python en `/opt/googletrans-env`
- Verifica configuración de idioma en `/usr/local/share/proxmenux/config.json`
**Fase 3: Selección de Versión**
- **Versión Normal** (opción 1):
- Dependencias: `dialog`, `curl`, `jq`
- Solo inglés
- Más ligera y rápida
- **Versión con Traducción** (opción 2):
- Dependencias adicionales: `python3`, `python3-venv`, `python3-pip`
- Instala `googletrans==4.0.0-rc1` en entorno virtual
- Soporte multiidioma: en, es, fr, de, it, pt
- **Nota**: No compatible con Proxmox VE 9+ (línea 639-658)
**Fase 4: Instalación Normal** ([install_normal_version()](cci:1://file:///home/debian/src/ProxMenuxOffline/install_proxmenux.sh:402:0-484:1))
1. Instala dependencias básicas
2. Crea directorios:
- `/usr/local/bin` (ejecutables)
- `/usr/local/share/proxmenux` (archivos del sistema)
3. Descarga desde GitHub:
- `utils.sh``/usr/local/share/proxmenux/utils.sh`
- `menu``/usr/local/bin/menu`
- `version.txt``/usr/local/share/proxmenux/version.txt`
4. Instala ProxMenux Monitor (AppImage)
**Fase 5: Instalación con Traducción** (`install_translation_version()`)
- Pasos adicionales:
- Selector de idioma interactivo (línea 234-273)
- Crea entorno virtual Python en `/opt/googletrans-env`
- Instala googletrans con pip
- Descarga `cache.json` con traducciones precargadas
- Sistema de caché para reducir llamadas a la API de traducción
**Fase 6: ProxMenux Monitor**
- Descarga AppImage desde GitHub (línea 317-360)
- Verifica checksum SHA256 (línea 333-351)
- Crea servicio systemd `/etc/systemd/system/proxmenux-monitor.service`
- Puerto por defecto: 8008
- Se ejecuta como usuario root
- Auto-inicio en boot
---
## **3. Funcionamiento del Comando `menu`**
### **Script Principal: `/usr/local/bin/menu`**
**Flujo de Ejecución:**
1. **Carga de Configuración** (línea 33-44):
```bash
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
BASE_DIR="/usr/local/share/proxmenux"
source "$UTILS_FILE"
```
2. **Sistema de Traducción** (línea 89-92):
- Carga idioma desde `config.json`
- Inicializa caché de traducciones
- Función `translate()` en `utils.sh`
3. **Verificación de Actualizaciones** (línea 48-80):
- Compara versión local vs remota
- Prompt interactivo para actualizar
- Descarga y ejecuta nuevo `install_proxmenux.sh` si hay actualización
4. **Ejecución del Menú Principal** (línea 84-86):
```bash
exec bash <(curl -fsSL "$REPO_URL/scripts/menus/main_menu.sh")
```
**Importante**: El comando `menu` **NO ejecuta scripts locales**, siempre descarga desde GitHub.
---
## **4. Sistema de Menús**
### **Menú Principal: `scripts/menus/main_menu.sh`**
**Compatibilidad PVE 9** (línea 26-64):
- Detecta versión de Proxmox
- Si PVE 9+ y tiene traducciones instaladas → fuerza reinstalación en versión normal
- Previene errores de compatibilidad
**Opciones del Menú** (línea 97-111):
```
1. Settings post-install Proxmox → menu_post_install.sh
2. Hardware: GPUs and Coral-TPU → hw_grafics_menu.sh
3. Create VM from template → create_vm_menu.sh
4. Disk and Storage Manager → storage_menu.sh
5. Mount and Share Manager → share_menu.sh
6. Proxmox VE Helper Scripts → menu_Helper_Scripts.sh
7. Network Management → network_menu.sh
8. Utilities and Tools → utilities_menu.sh
h. Help and Info Commands → help_info_menu.sh
s. Settings → config_menu.sh
0. Exit
```
**Patrón de Ejecución**:
```bash
exec bash <(curl -s "$REPO_URL/scripts/menus/submenu.sh")
```
Todos los menús descargan y ejecutan scripts desde GitHub en tiempo real.
---
## **5. Scripts Locales vs Remotos**
### **Estado Actual**
- **Scripts locales**: Están presentes en el repositorio (122 archivos)
- **Ejecución**: Siempre desde GitHub mediante `curl`
- **Ventaja actual**: Actualizaciones automáticas sin reinstalar
- **Desventaja**: Requiere conexión a internet constante
### **Scripts Principales Disponibles Localmente**
**Gestión de VMs** (`scripts/vm/`):
- `create_vm.sh` - Crear VMs
- `synology.sh` (39KB) - Instalación Synology DSM
- `zimaos.sh` (40KB) - Instalación ZimaOS
- `uupdump_creator.sh` - Creador de ISOs Windows
- `select_windows_iso.sh`, `select_linux_iso.sh`, `select_nas_iso.sh`
**Gestión de LXC** (`scripts/lxc/`):
- `lxc-manual-guide.sh` - Guía manual
- `lxc-privileged-to-unprivileged.sh`
- `lxc-unprivileged-to-privileged.sh`
**Almacenamiento** (`scripts/storage/`):
- `disk-passthrough.sh` - Passthrough disco a VM
- `disk-passthrough_ct.sh` - Passthrough disco a LXC (22KB)
- `import-disk-image.sh` - Importar imágenes
- `format-disk.sh`, `mount-disk-on-host.sh`
**Compartir Recursos** (`scripts/share/`):
- `lxc-mount-manager_minimal.sh` (35KB) - Gestión mount points
- `nfs_host.sh` (35KB) - Servidor NFS en host
- `samba_host.sh` (52KB) - Servidor Samba en host
- `nfs_client.sh`, `samba_client.sh` - Clientes en LXC
- `local-shared-manager.sh` - Directorios compartidos locales
**Post-Instalación** (`scripts/post_install/`):
- `auto_post_install.sh` (29KB) - Automatizado sin interacción
- `customizable_post_install.sh` (148KB) - Personalizable
- `uninstall-tools.sh` (34KB) - Desinstalador
**Utilidades** (`scripts/utilities/`):
- `upgrade_pve8_to_pve9.sh` (35KB) - Upgrade PVE 8→9
- `system_utils.sh` (20KB) - Instalador de utilidades
- `proxmox_update.sh` - Actualización de Proxmox
**Red** (`scripts/menus/network_menu.sh`):
- 43KB de funcionalidades de red
- Optimizaciones para LXC+NFS
**Global** (`scripts/global/`):
- `update-pve.sh`, `update-pve8.sh`, `update-pve9_2.sh`
- `remove-banner-pve8.sh`, `remove-banner-pve9.sh`
- `share-common.func` (30KB) - Funciones compartidas
---
## **6. Sistema de Utilidades: `utils.sh`**
### **Funciones Principales**
**Interfaz Visual** (línea 50-71):
- Definición de colores ANSI
- Códigos de estilo para terminal
- Spinner animado (línea 75-88)
**Mensajes Estandarizados**:
- `msg_info()` - Info con spinner
- `msg_ok()` - Éxito (checkmark verde)
- `msg_error()` - Error (rojo)
- `msg_warn()` - Advertencia (amarillo)
- `msg_title()` - Títulos
- `type_text()` - Efecto máquina de escribir
**Sistema de Traducción** (línea 232-305):
```bash
translate() {
# Si idioma es "en" → retorna texto original
# Busca en caché local (cache.json)
# Si no existe → llama a googletrans vía Python
# Guarda en caché para futuras traducciones
# Limpia prefijos de contexto
}
```
**Contexto de Traducción** (línea 48):
```bash
TRANSLATION_CONTEXT="Context: Technical message for Proxmox and IT. Translate:"
```
**Logo ASCII** (línea 314-400):
- Dos versiones: terminal noVNC y SSH
- Detección automática del entorno
- Diseño en ASCII art con colores
---
## **7. ProxMenux Monitor**
### **Componente Web (AppImage)**
**Tecnología**:
- **Frontend**: Next.js 14, React 18, TypeScript
- **UI**: Radix UI + shadcn/ui + Tailwind CSS
- **Gráficos**: Recharts
- **Backend**: Flask (Python) para recolección de datos del sistema
- **Empaquetado**: AppImage (10.3 MB)
**Características**:
- Dashboard en tiempo real
- Monitoreo de CPU, RAM, temperatura
- Estado de VMs y LXC containers
- Gestión de almacenamiento visual
- Estadísticas de red
- Logs del sistema
- Tema oscuro/claro
- Responsive design
- Puerto: 8008
**Servicio Systemd**:
```ini
[Unit]
Description=ProxMenux Monitor - Web Dashboard
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/share/proxmenux
ExecStart=/usr/local/share/proxmenux/ProxMenux-Monitor.AppImage
Restart=on-failure
RestartSec=10
Environment="PORT=8008"
```
**Estado**: Se instala automáticamente en ambas versiones (normal y traducción)
---
## **8. Sistema de Configuración**
### **Archivos de Configuración**
**`/usr/local/share/proxmenux/config.json`**:
- Estado de instalación de componentes
- Idioma seleccionado
- Timestamps de instalación
- Estados: `installed`, `already_installed`, `failed`
**Componentes Rastreados** (línea 201):
```json
{
"dialog": {"status": "installed", "timestamp": "..."},
"curl": {"status": "already_installed", "timestamp": "..."},
"jq": {"status": "installed", "timestamp": "..."},
"python3": {"status": "installed", "timestamp": "..."},
"virtual_environment": {"status": "created", "timestamp": "..."},
"googletrans": {"status": "installed", "timestamp": "..."},
"proxmenux_monitor": {"status": "installed", "timestamp": "..."},
"language": "es"
}
```
**`/usr/local/share/proxmenux/cache.json`**:
- Traducciones cacheadas (100 KB)
- Formato: `{"texto_original": {"es": "traducción", "fr": "traduction"}}`
- Reduce llamadas a Google Translate API
**`/usr/local/share/proxmenux/installed_tools.json`**:
- Registro de herramientas post-instalación
- Usado por el desinstalador
---
## **9. Funcionalidades Destacadas**
### **Post-Instalación Automatizada**
- **Optimizaciones de repositorios**: Limpia duplicados, configura repos gratuitos
- **Eliminación de banner de suscripción**: Con respaldo y reversión
- **Optimización de memoria y kernel**: Ajustes según RAM disponible
- **Log2RAM**: Instalación automática en SSD/NVMe
- **Network tuning**: Optimización de stack de red
- **Límites del sistema**: Aumenta límites de archivos y procesos
- **Configuración de journald**: Ajustada para Log2RAM
- **Entropía**: Mejora generación de números aleatorios
- **Aliases bash**: Personalización del entorno
### **Gestión de Compartición de Recursos**
**Enfoque**: Mount Points LXC (Host ↔ Container)
- Detección automática de tipo de filesystem
- Mapeo UID/GID para contenedores unprivileged
- Visualización de mount points existentes
- Eliminación segura con verificación
**Configuraciones disponibles**:
- NFS: Host, Client LXC, Server LXC
- Samba: Host, Client LXC, Server LXC
- Directorios locales compartidos
### **Hardware Especializado**
- **Coral TPU**: Instalación de drivers compatible con PVE 8 y 9
- **GPUs**: Passthrough y configuración para VMs y LXC
- **iGPU**: Configuración para contenedores LXC
### **Upgrade PVE 8 → 9**
- Script de 35 KB con verificaciones exhaustivas
- Guía manual interactiva
- Checker de compatibilidad
---
## **10. Arquitectura de Ejecución**
### **Patrón de Descarga Dinámica**
**Todos los scripts siguen este patrón**:
```bash
exec bash <(curl -s "$REPO_URL/scripts/path/to/script.sh")
```
**Ventajas**:
- ✅ Usuarios siempre tienen la última versión
- ✅ No requiere reinstalación para actualizaciones
- ✅ Hotfixes inmediatos
- ✅ Control centralizado de versiones
**Consideraciones**:
- ⚠️ Requiere internet en cada ejecución
- ⚠️ Dependencia de disponibilidad de GitHub
- ⚠️ No funciona offline
- ⚠️ Los scripts locales del repo no se usan directamente
### **Sistema de Versionado**
- `version.txt` en repo: versión remota
- `/usr/local/share/proxmenux/version.txt`: versión local instalada
- Check en cada ejecución del comando `menu`
- Prompt para actualizar si hay nueva versión
---
## **11. Flujo de Navegación**
```
Comando: menu
Verifica actualizaciones
Carga utils.sh y traducciones
Descarga main_menu.sh desde GitHub
Usuario selecciona opción
Descarga submenu correspondiente desde GitHub
Usuario selecciona acción
Descarga y ejecuta script específico desde GitHub
Retorna al menú anterior
```
**Ejemplo de navegación**:
```
menu → main_menu.sh
→ opción 5: share_menu.sh
→ opción 4: lxc-mount-manager_minimal.sh (35KB)
→ Ejecuta acciones
→ Retorna a share_menu.sh
→ opción 0: Retorna a main_menu.sh
→ opción 0: Exit
```
---
## **12. Integración con Comunidad**
### **Scripts de la Comunidad Integrados**
**Proxmox VE Helper-Scripts**:
- Post-install script oficial
- Ejecutado desde: `https://github.com/community-scripts/ProxmoxVE`
**Xshok-proxmox** (fork):
- Post-install alternativo
- Descarga desde fork de MacRimi
**Elementos compartidos**:
- Funciones de `utils.sh` basadas en Helper-Scripts
- Misma filosofía de mensajes estandarizados
- Licencia MIT compatible
---
## **13. Sistema de Desinstalación**
### **Función: `uninstall_proxmenux()`** (línea 109-161)
**Proceso**:
1. Confirmación interactiva (whiptail)
2. Desinstala googletrans y entorno virtual Python
3. Selector de dependencias a eliminar (python3, python3-venv, pip)
4. Elimina `/usr/local/bin/menu`
5. Elimina `/usr/local/share/proxmenux/`
6. Restaura `.bashrc` desde backup
7. Restaura `/etc/motd` desde backup
**Tool-specific uninstaller**: `scripts/post_install/uninstall-tools.sh`
- Lee `installed_tools.json`
- Permite desinstalar herramientas individualmente
- Restaura configuraciones originales
---
## **14. Estructura de Archivos JSON**
### **`json/cache.json`** (100 KB)
Traducciones precargadas para acelerar el sistema
### **`json/helpers_cache.json`** (273 KB)
Caché extendido, probablemente para Helper Scripts
### **`lang/cache.json`** (5.5 KB)
Caché de idiomas específico
### **`lang/en.lang`** y **`lang/es.lang`**
Archivos de idioma estáticos (4-5 KB cada uno)
---
## **15. Resumen de Componentes**
| Componente | Ubicación | Función |
|------------|-----------|---------|
| **Instalador** | `install_proxmenux.sh` | Instalación inicial y actualizaciones |
| **Comando principal** | `/usr/local/bin/menu` | Punto de entrada del usuario |
| **Utilidades** | `/usr/local/share/proxmenux/utils.sh` | Funciones compartidas |
| **Configuración** | `/usr/local/share/proxmenux/config.json` | Estado del sistema |
| **Caché traducciones** | `/usr/local/share/proxmenux/cache.json` | Traducciones cacheadas |
| **Entorno Python** | `/opt/googletrans-env/` | Traducción (solo versión translation) |
| **Monitor** | `/usr/local/share/proxmenux/ProxMenux-Monitor.AppImage` | Dashboard web |
| **Servicio Monitor** | `/etc/systemd/system/proxmenux-monitor.service` | Servicio systemd |
| **Scripts** | GitHub (descarga dinámica) | Todos los scripts funcionales |
---
## **Conclusión**
ProxMenuxOffline es un **sistema modular de gestión de Proxmox VE** que utiliza una arquitectura híbrida:
- **Núcleo local**: Comando `menu`, utilidades, sistema de configuración
- **Scripts remotos**: Toda la funcionalidad se descarga dinámicamente desde GitHub
- **Dashboard web**: AppImage independiente con Next.js + Flask
- **Sistema de traducción**: Opcional, basado en Python + googletrans + caché
El proyecto tiene **122 scripts bash** en el repositorio local que **podrían ejecutarse localmente**, pero actualmente **todos se descargan desde GitHub en tiempo de ejecución**. Esta arquitectura prioriza mantener a los usuarios actualizados sobre la ejecución offline.

View File

@@ -0,0 +1,699 @@
# Scripts a Modificar para Ejecución 100% Local
**Fecha**: 2025-11-01
**Objetivo**: Eliminar dependencias de GitHub y permitir ejecución completamente local
**Repositorio**: ProxMenuxDotDeb
---
## Resumen Ejecutivo
Para que ProxMenux funcione 100% localmente sin depender de GitHub, se deben modificar **47 archivos** en total:
- **2 archivos principales** (instalador y comando menu)
- **13 scripts de menús** (sistema de navegación)
- **32 scripts funcionales** (operaciones específicas)
**Cambios principales**:
1. Cambiar `REPO_URL` de GitHub a rutas locales del sistema
2. Reemplazar descargas `curl` por ejecución de scripts locales
3. Copiar todos los scripts a `/usr/local/share/proxmenux/scripts/` durante instalación
---
## 1. Archivos Principales (CRÍTICOS) ⚠️
### 1.1. `install_proxmenux.sh` (Raíz del repositorio)
**Líneas a modificar**:
- **Línea 37**: `REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"`
- **Línea 38**: `UTILS_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/utils.sh"`
- **Línea 54-57**: Carga de `utils.sh` con curl
- **Línea 459-476**: Descarga de archivos con wget (versión normal)
- **Línea 583-603**: Descarga de archivos con wget (versión traducción)
**Cambios necesarios**:
```bash
# Cambiar URLs a rutas locales
REPO_URL="/usr/local/share/proxmenux"
UTILS_URL="./scripts/utils.sh"
# Reemplazar wget por cp
# En lugar de descargar, copiar archivos locales del repositorio
```
**Impacto**: 🔴 CRÍTICO - Sin esto, la instalación falla completamente
---
### 1.2. `menu` (Raíz del repositorio)
**Líneas a modificar**:
- **Línea 34**: `REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"`
- **Línea 52**: Verificación de actualizaciones (curl remoto)
- **Línea 72**: Descarga de instalador actualizado
- **Línea 85**: `exec bash <(curl -fsSL "$REPO_URL/scripts/menus/main_menu.sh")`
**Cambios necesarios**:
```bash
# Cambiar a ruta local
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
# Ejecutar localmente
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
```
**Impacto**: 🔴 CRÍTICO - Es el punto de entrada del usuario
---
## 2. Scripts de Menús (13 archivos)
### 2.1. `scripts/menus/main_menu.sh` ⭐
**Modificaciones**:
- **Línea 14**: `REPO_URL`
- **Línea 57**: curl para reinstalación PVE9
- **Líneas 125-135**: Todas las opciones del menú (12 líneas)
**Comandos a reemplazar**:
```bash
# Todas estas líneas:
exec bash <(curl -s "$REPO_URL/scripts/menus/menu_post_install.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/hw_grafics_menu.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/create_vm_menu.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/storage_menu.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/share_menu.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/menu_Helper_Scripts.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/network_menu.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/utilities_menu.sh")
bash <(curl -s "$REPO_URL/scripts/help_info_menu.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/config_menu.sh")
```
---
### 2.2. `scripts/menus/menu_post_install.sh`
**Modificaciones**:
- **Línea 12**: `REPO_URL`
- **Línea 73**: `bash <(curl -s $REPO_URL/scripts/post_install/auto_post_install.sh)`
- **Línea 171**: `exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")`
**Nota**: Mantener URLs remotas para scripts de comunidad externa (líneas 90-91)
---
### 2.3. `scripts/menus/config_menu.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
- No tiene llamadas curl ✅
---
### 2.4. `scripts/menus/create_vm_menu.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
- Múltiples `exec bash <(curl -s ...)` en opciones del menú
---
### 2.5. `scripts/menus/hw_grafics_menu.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
- **Líneas 38, 44, 50, 55, 56**: Llamadas curl
**Comandos a reemplazar**:
```bash
bash <(curl -s "$REPO_URL/scripts/configure_igpu_lxc.sh")
bash <(curl -s "$REPO_URL/scripts/install_coral_lxc.sh")
bash <(curl -s "$REPO_URL/scripts/gpu_tpu/install_coral_pve9.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
```
---
### 2.6. `scripts/menus/lxc_menu.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
- Todos los `exec bash <(curl ...)`
---
### 2.7. `scripts/menus/menu_Helper_Scripts.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
- **Línea 296**: `exec bash <(curl -s ...)`
**Nota**: Mantener URLs de Helper-Scripts externos (comunidad)
---
### 2.8. `scripts/menus/network_menu.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
- **Línea 1085**: `exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")`
---
### 2.9. `scripts/menus/share_menu.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
- **Líneas 46, 55-82, 85**: 11 llamadas curl
**Comandos a reemplazar**:
```bash
bash <(curl -s "$REPO_URL/scripts/share/nfs_host.sh")
bash <(curl -s "$REPO_URL/scripts/share/samba_host.sh")
bash <(curl -s "$REPO_URL/scripts/share/local-shared-manager.sh")
bash <(curl -s "$REPO_URL/scripts/share/lxc-mount-manager_minimal.sh")
bash <(curl -s "$REPO_URL/scripts/share/nfs_client.sh")
bash <(curl -s "$REPO_URL/scripts/share/samba_client.sh")
bash <(curl -s "$REPO_URL/scripts/share/nfs_lxc_server.sh")
bash <(curl -s "$REPO_URL/scripts/share/samba_lxc_server.sh")
bash <(curl -s "$REPO_URL/scripts/share/commands_share.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") # 2 veces
```
---
### 2.10. `scripts/menus/storage_menu.sh`
**Modificaciones**:
- **Línea 15**: `REPO_URL`
- **Líneas 39, 42, 45, 48, 51**: 5 llamadas curl
**Comandos a reemplazar**:
```bash
bash <(curl -s "$REPO_URL/scripts/storage/disk-passthrough.sh")
bash <(curl -s "$REPO_URL/scripts/storage/disk-passthrough_ct.sh")
bash <(curl -s "$REPO_URL/scripts/storage/import-disk-image.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") # 2 veces
```
---
### 2.11. `scripts/menus/utilities_menu.sh`
**Modificaciones**:
- **Línea 15**: `REPO_URL`
- **Líneas 39, 45, 67, 74, 79, 80**: 6 llamadas curl
**Comandos a reemplazar**:
```bash
bash <(curl -s "$REPO_URL/scripts/utilities/uup_dump_iso_creator.sh")
bash <(curl -s "$REPO_URL/scripts/utilities/system_utils.sh")
bash <(curl -s "$REPO_URL/scripts/utilities/proxmox_update.sh")
bash <(curl -s "$REPO_URL/scripts/utilities/upgrade_pve8_to_pve9.sh")
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") # 2 veces
```
---
### 2.12. `scripts/menus/main_menu_.sh`
**Modificaciones**: Igual que `main_menu.sh` (archivo alternativo/backup)
---
### 2.13. `scripts/menus/sm.sh`
**Modificaciones**: Igual que `share_menu.sh` (archivo alternativo)
---
## 3. Scripts Post-Instalación (3 archivos)
### 3.1. `scripts/post_install/auto_post_install.sh`
**Modificaciones**:
- **Línea 39**: `REPO_URL`
- **Línea 110**: `bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve9_2.sh")`
- **Línea 113**: `bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve8.sh")`
- **Línea 150**: `bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve-v3.sh")`
- **Línea 157**: `bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve8.sh")`
---
### 3.2. `scripts/post_install/customizable_post_install.sh`
**Modificaciones**:
- **Línea 39**: `REPO_URL`
- **Línea 197**: `bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve9_2.sh")`
- **Línea 200**: `bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve8.sh")`
- **Línea 2905**: `bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve-v3.sh")`
- **Línea 2908**: `bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve8.sh")`
---
### 3.3. `scripts/post_install/uninstall-tools.sh`
**Modificaciones**: Solo lectura de configs locales ✅
---
## 4. Scripts de VMs (8 archivos)
### 4.1. `scripts/vm/create_vm.sh`
**Modificaciones**:
- **Línea 29**: `REPO_URL`
- **Líneas 30-32**: `VM_REPO`, `ISO_REPO`, `MENU_REPO`
---
### 4.2. `scripts/vm/select_linux_iso.sh`
**Modificaciones**:
- **Línea 28**: `REPO_URL`
- **Línea 222**: `exec bash <(curl -s "$REPO_URL/scripts/vm/create_vm.sh")`
---
### 4.3. `scripts/vm/select_windows_iso.sh`
**Modificaciones**:
- **Línea 27**: `REPO_URL`
- **Línea 28**: `UUP_REPO`
---
### 4.4. `scripts/vm/select_nas_iso.sh`
**Modificaciones**:
- **Línea 31**: `REPO_URL`
- **Línea 65**: `bash <(curl -s "$REPO_URL/scripts/vm/synology.sh")`
- **Línea 106**: `bash <(curl -s "$REPO_URL/scripts/vm/zimaos.sh")`
---
### 4.5. `scripts/vm/synology.sh`
**Modificaciones**:
- **Línea 32**: `REPO_URL`
---
### 4.6. `scripts/vm/synology_.sh`
**Modificaciones**:
- **Línea 32**: `REPO_URL`
---
### 4.7. `scripts/vm/zimaos.sh`
**Modificaciones**:
- Verificar si tiene `REPO_URL`
---
### 4.8. `scripts/vm/vm_creator.sh`
**Modificaciones**:
- **Línea 497**: `bash <(curl -fsSL "$REPO_URL/scripts/menus/create_vm_menu.sh")`
---
## 5. Scripts de LXC (4 archivos)
### 5.1. `scripts/lxc/lxc-manual-guide.sh`
**Modificaciones**:
- **Línea 14**: `REPO_URL`
---
### 5.2. `scripts/lxc/lxc-privileged-to-unprivileged.sh`
**Modificaciones**:
- **Línea 18**: `REPO_URL`
---
### 5.3. `scripts/lxc/lxc-unprivileged-to-privileged.sh`
**Modificaciones**:
- **Línea 19**: `REPO_URL`
---
### 5.4. `scripts/lxc/lxc-mount-manager_minimal.sh`
**Modificaciones**:
- Verificar si tiene `REPO_URL`
---
## 6. Scripts de Compartir Recursos (9 archivos)
### 6.1. `scripts/share/nfs_host.sh`
**Modificaciones**:
- **Línea 16**: `REPO_URL`
---
### 6.2. `scripts/share/nfs_client.sh`
**Modificaciones**:
- **Línea 16**: `REPO_URL`
---
### 6.3. `scripts/share/nfs_lxc_server.sh`
**Modificaciones**:
- **Línea 16**: `REPO_URL`
---
### 6.4. `scripts/share/samba_host.sh`
**Modificaciones**:
- **Línea 16**: `REPO_URL`
---
### 6.5. `scripts/share/samba_client.sh`
**Modificaciones**:
- **Línea 18**: `REPO_URL`
---
### 6.6. `scripts/share/samba_lxc_server.sh`
**Modificaciones**:
- **Línea 16**: `REPO_URL`
---
### 6.7. `scripts/share/local-shared-manager.sh`
**Modificaciones**:
- **Línea 13**: `REPO_URL`
---
### 6.8. `scripts/share/lxc-mount-manager_minimal.sh`
**Modificaciones**:
- Verificar `REPO_URL`
---
### 6.9. `scripts/share/commands_share.sh`
**Modificaciones**:
- **Línea 14**: `REPO_URL`
---
## 7. Scripts de Almacenamiento (3 archivos)
### 7.1. `scripts/storage/disk-passthrough.sh`
**Modificaciones**:
- Verificar `REPO_URL`
---
### 7.2. `scripts/storage/disk-passthrough_ct.sh`
**Modificaciones**:
- Verificar `REPO_URL`
---
### 7.3. `scripts/storage/import-disk-image.sh`
**Modificaciones**:
- **Línea 30**: `REPO_URL`
---
## 8. Scripts de Utilidades (4 archivos)
### 8.1. `scripts/utilities/upgrade_pve8_to_pve9.sh`
**Modificaciones**:
- Verificar `REPO_URL`
---
### 8.2. `scripts/utilities/system_utils.sh`
**Modificaciones**:
- Verificar `REPO_URL`
---
### 8.3. `scripts/utilities/proxmox_update.sh`
**Modificaciones**:
- Verificar `REPO_URL`
---
### 8.4. `scripts/utilities/uup_dump_iso_creator.sh`
**Modificaciones**:
- Verificar `REPO_URL`
---
## 9. Scripts Globales (3 archivos)
### 9.1. `scripts/global/update-pve.sh`
**Modificaciones**:
- **Línea 32**: `source <(curl -s "$REPO_URL/scripts/global/common-functions.sh")`
**Cambiar a**:
```bash
source "$LOCAL_SCRIPTS/global/common-functions.sh"
```
---
### 9.2. `scripts/global/update-pve8.sh`
**Modificaciones**:
- **Línea 32**: `source <(curl -s "$REPO_URL/scripts/global/common-functions.sh")`
---
### 9.3. `scripts/global/update-pve9_2.sh`
**Modificaciones**:
- **Línea 32**: `source <(curl -s "$REPO_URL/scripts/global/common-functions.sh")`
---
## 10. Scripts de Hardware (2 archivos)
### 10.1. `scripts/configure_igpu_lxc.sh`
**Modificaciones**:
- **Línea 19**: `REPO_URL`
---
### 10.2. `scripts/install_coral_lxc.sh`
**Modificaciones**:
- **Línea 25**: `REPO_URL`
---
## 11. Scripts de Red (2 archivos)
### 11.1. `scripts/repair_network.sh`
**Modificaciones**:
- **Línea 204**: `exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")`
- **Línea 205**: `exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")`
---
### 11.2. `scripts/telegram-notifier.sh`
**Modificaciones**:
- **Línea 5**: `REPO_URL`
---
## 12. Scripts Duplicados/Alternos (en `scripts/auto_post_install.sh`)
**Modificaciones**: Igual que `scripts/post_install/auto_post_install.sh`
---
## Tabla Resumen
| Categoría | Archivos | Modificaciones Principales |
|-----------|----------|---------------------------|
| **Principales** | 2 | REPO_URL + curl → rutas locales |
| **Menús** | 13 | REPO_URL + exec bash curl |
| **Post-Install** | 3 | bash curl a scripts global |
| **VMs** | 8 | REPO_URL + llamadas remotas |
| **LXC** | 4 | REPO_URL |
| **Share** | 9 | REPO_URL |
| **Storage** | 3 | REPO_URL |
| **Utilities** | 4 | REPO_URL |
| **Global** | 3 | source curl |
| **Hardware** | 2 | REPO_URL |
| **Red** | 2 | exec bash curl |
| **TOTAL** | **47** | **~150-200 líneas** |
---
## Plan de Implementación Recomendado
### Paso 1: Preparación
```bash
# Crear backup
cp -r . ../ProxMenuxDotDeb_backup
# --------------------------------------------------------------------
# Documentar información relevante del proyecto en directorio "docs"
# --------------------------------------------------------------------
```
### Paso 2: Modificación Automática Global
```bash
# Script de conversión masiva
find . -name "*.sh" -o -name "menu" | xargs sed -i \
's|REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"|LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"|g'
# Cambiar referencias
find . -name "*.sh" -o -name "menu" | xargs sed -i \
's|\$REPO_URL/scripts|\$LOCAL_SCRIPTS|g'
# Cambiar bash curl
find . -name "*.sh" -o -name "menu" | xargs sed -i -E \
's|bash <\(curl -[sfSL]+ "\$REPO_URL/([^"]+)"|bash "\$LOCAL_SCRIPTS/\1"|g'
# Cambiar exec bash curl
find . -name "*.sh" -o -name "menu" | xargs sed -i -E \
's|exec bash <\(curl -[sfSL]+ "\$REPO_URL/([^"]+)"|exec bash "\$LOCAL_SCRIPTS/\1"|g'
# Cambiar source curl
find . -name "*.sh" | xargs sed -i -E \
's|source <\(curl -[sfSL]+ "\$REPO_URL/([^"]+)"|source "\$LOCAL_SCRIPTS/\1"|g'
```
### Paso 3: Modificar install_proxmenux.sh manualmente
Cambiar secciones de descarga wget por copias locales:
```bash
# En lugar de:
wget -qO "$dest" "$url"
# Usar:
cp "./scripts/utils.sh" "$UTILS_FILE"
cp "./menu" "$INSTALL_DIR/$MENU_SCRIPT"
cp "./version.txt" "$LOCAL_VERSION_FILE"
```
Agregar copia de todos los scripts:
```bash
msg_info "Copying local scripts..."
mkdir -p "$BASE_DIR/scripts"
cp -r "./scripts/"* "$BASE_DIR/scripts/"
chmod -R +x "$BASE_DIR/scripts/"
```
### Paso 4: Modificar comando menu
Comentar o modificar verificación de actualizaciones remotas.
### Paso 5: Validación
```bash
# Verificar que no queden referencias remotas
grep -r "githubusercontent.com" . --include="*.sh" --include="menu"
# Verificar llamadas curl
grep -r "curl.*REPO_URL" . --include="*.sh" --include="menu"
# Contar archivos modificados
grep -r "LOCAL_SCRIPTS=" . --include="*.sh" --include="menu" | wc -l
```
---
## Estructura Post-Modificación
```
/usr/local/share/proxmenux/
├── utils.sh
├── config.json
├── cache.json
├── version.txt
├── ProxMenux-Monitor.AppImage
└── scripts/ # ⭐ NUEVO
├── menus/
│ ├── main_menu.sh
│ ├── menu_post_install.sh
│ └── ...
├── post_install/
├── vm/
├── lxc/
├── storage/
├── share/
├── utilities/
├── global/
└── gpu_tpu/
/usr/local/bin/
└── menu
```
---
## Consideraciones Especiales
### Scripts Externos de la Comunidad
Mantener URLs remotas para:
- Proxmox VE Helper-Scripts (community-scripts)
- xshok-proxmox scripts
### ProxMenux Monitor
El AppImage se mantiene descargable desde GitHub durante la instalación inicial (10 MB).
### Sistema de Actualizaciones
Opciones:
1. Deshabilitar completamente
2. Mostrar mensaje para ejecutar `install_proxmenux.sh` manualmente
3. Sistema híbrido (check opcional remoto)
---
## Checklist de Validación
- [ok] Backup completo del repositorio
- [ok] Conversión automática ejecutada
- [ok] `install_proxmenux.sh` modificado
- [ok] `menu` modificado
- [ip] Scripts de menús verificados
- [ ] Sin referencias a githubusercontent.com
- [ ] Sin llamadas curl a REPO_URL
- [ ] Instalación local funcional
- [ ] Navegación por todos los menús OK
- [ ] Ejecución offline confirmada
---
**Total de archivos a modificar**: 47
**Líneas estimadas**: ~150-200
**Tiempo estimado**: 2-4 horas
**Riesgo**: Medio (requiere testing)
**Beneficio**: Sistema completamente offline

560
install_proxmenux.sh Normal file → Executable file
View File

@@ -1,41 +1,46 @@
#!/bin/bash
# ==========================================================
# ProxMenux - A menu-driven script for Proxmox VE management
# ProxMenux - A menu-driven toolkit for Proxmox VE management
# ==========================================================
# Author : MacRimi
# Copyright : (c) 2024 MacRimi
# License : (CC BY-NC 4.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
# Version : 1.3
# Last Updated: 04/07/2025
# Author : MacRimi
# Contributors : cod378
# Subproject : ProxMenux Monitor (System Health & Web Dashboard)
# Copyright : (c) 2024-2025 MacRimi
# License : (CC BY-NC 4.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
# Version : 1.4
# Last Updated : 12/11/2025
# ==========================================================
# Description:
# This script installs and configures ProxMenux, a menu-driven
# tool for managing Proxmox VE.
# toolkit for managing and optimizing Proxmox VE servers.
#
# - Ensures the script is run with root privileges.
# - Displays an installation confirmation prompt.
# - Installs required dependencies:
# - whiptail (for interactive terminal menus)
# - curl (for downloading remote files)
# - jq (for handling JSON data)
# - Python 3 and virtual environment (for translations)
# - Configures the Python virtual environment and installs googletrans.
# - Creates necessary directories for storing ProxMenux data.
# - Downloads required files from GitHub, including:
# - Cache file (`cache.json`) for translation caching.
# - Utility script (`utils.sh`) for core functions.
# - Main script (`menu.sh`) to launch ProxMenux.
# - Sets correct permissions for execution.
# - Displays final instructions on how to start ProxMenux.
# whiptail (interactive terminal menus)
# curl (downloads and connectivity checks)
# • jq (JSON parsing)
# Python 3 + venv (for translation support)
# - Creates the ProxMenux base directories and configuration files:
# • $BASE_DIR/config.json
# • $BASE_DIR/cache.json
# - Copies local project files into the target paths (offline mode by default):
# • scripts/* → $BASE_DIR/scripts/
# • utils.sh → $BASE_DIR/scripts/utils.sh
# • menu → $INSTALL_DIR/menu (main launcher)
# • install_proxmenux.sh → $BASE_DIR/install_proxmenux.sh
# - Sets correct permissions for all executables.
# - Displays the final instruction on how to start ProxMenux ("menu").
#
# This installer ensures a smooth setup process and prepares
# the system for running ProxMenux efficiently.
# Notes:
# - This installer supports both offline and online setups.
# - ProxMenux Monitor can be installed later as an optional module
# to provide real-time system monitoring and a web dashboard.
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
UTILS_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/utils.sh"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
INSTALL_DIR="/usr/local/bin"
BASE_DIR="/usr/local/share/proxmenux"
CONFIG_FILE="$BASE_DIR/config.json"
@@ -45,17 +50,222 @@ LOCAL_VERSION_FILE="$BASE_DIR/version.txt"
MENU_SCRIPT="menu"
VENV_PATH="/opt/googletrans-env"
MONITOR_APPIMAGE_URL="https://github.com/MacRimi/ProxMenux/raw/refs/heads/main/AppImage/ProxMenux-1.0.0.AppImage"
MONITOR_SHA256_URL="https://github.com/MacRimi/ProxMenux/raw/refs/heads/main/AppImage/ProxMenux-Monitor.AppImage.sha256"
MONITOR_INSTALL_PATH="$BASE_DIR/ProxMenux-Monitor.AppImage"
MONITOR_INSTALL_DIR="$BASE_DIR/monitor"
MONITOR_SERVICE_FILE="/etc/systemd/system/proxmenux-monitor.service"
MONITOR_PORT=8008
if ! source <(curl -sSf "$UTILS_URL"); then
echo "Error: Could not load utils.sh from $UTILS_URL"
exit 1
# Offline installer envs
REPO_URL="https://github.com/MacRimi/ProxMenux.git"
TEMP_DIR="/tmp/proxmenux-install-$$"
# Load utility functions
NEON_PURPLE_BLUE="\033[38;5;99m"
WHITE="\033[38;5;15m"
RESET="\033[0m"
DARK_GRAY="\033[38;5;244m"
ORANGE="\033[38;5;208m"
YW="\033[33m"
YWB="\033[1;33m"
GN="\033[1;92m"
RD="\033[01;31m"
CL="\033[m"
BL="\033[36m"
DGN="\e[32m"
BGN="\e[1;32m"
DEF="\e[1;36m"
CUS="\e[38;5;214m"
BOLD="\033[1m"
BFR="\\r\\033[K"
HOLD="-"
BOR=" | "
CM="${GN}${CL}"
TAB=" "
# Create and display spinner
spinner() {
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local spin_i=0
local interval=0.1
printf "\e[?25l"
local color="${YW}"
while true; do
printf "\r ${color}%s${CL}" "${frames[spin_i]}"
spin_i=$(( (spin_i + 1) % ${#frames[@]} ))
sleep "$interval"
done
}
# Function to simulate typing effect
type_text() {
local text="$1"
local delay=0.05
for ((i=0; i<${#text}; i++)); do
echo -n "${text:$i:1}"
sleep $delay
done
echo
}
# Display info message with spinner
msg_info() {
local msg="$1"
echo -ne "${TAB}${YW}${HOLD}${msg}"
spinner &
SPINNER_PID=$!
}
# Display info2 message
msg_info2() {
local msg="$1"
echo -e "${TAB}${BOLD}${YW}${HOLD}${msg}${CL}"
}
# Display title script
msg_title() {
local msg="$1"
echo -e "\n"
echo -e "${TAB}${BOLD}${HOLD}${BOR}${msg}${BOR}${HOLD}${CL}"
echo -e "\n"
}
# Display warning or highlighted information message
msg_warn() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then
kill $SPINNER_PID > /dev/null
fi
printf "\e[?25h"
local msg="$1"
echo -e "${BFR}${TAB}${CL} ${YWB}${msg}${CL}"
}
# Display success message
msg_ok() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then
kill $SPINNER_PID > /dev/null
fi
printf "\e[?25h"
local msg="$1"
echo -e "${BFR}${TAB}${CM}${GN}${msg}${CL}"
}
# Display error message
msg_error() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then
kill $SPINNER_PID > /dev/null
fi
printf "\e[?25h"
local msg="$1"
echo -e "${BFR}${TAB}${RD}[ERROR] ${msg}${CL}"
}
show_proxmenux_logo() {
clear
if [[ -z "$SSH_TTY" && -z "$(who am i | awk '{print $NF}' | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}')" ]]; then
# Logo for terminal noVNC
LOGO=$(cat << "EOF"
\e[0m\e[38;2;61;61;61m▆\e[38;2;60;60;60m▄\e[38;2;54;54;54m▂\e[0m \e[38;2;0;0;0m \e[0m \e[38;2;54;54;54m▂\e[38;2;60;60;60m▄\e[38;2;61;61;61m▆\e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[38;2;61;61;61;48;2;37;37;37m▇\e[0m\e[38;2;60;60;60m▅\e[38;2;56;56;56m▃\e[38;2;37;37;37m▁ \e[38;2;36;36;36m▁\e[38;2;56;56;56m▃\e[38;2;60;60;60m▅\e[38;2;61;61;61;48;2;37;37;37m▇\e[48;2;62;62;62m \e[0m\e[7m\e[38;2;60;60;60m▁\e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[0m\e[7m\e[38;2;61;61;61m▂\e[0m\e[38;2;62;62;62;48;2;61;61;61m┈\e[48;2;62;62;62m \e[48;2;61;61;61m┈\e[0m\e[38;2;60;60;60m▆\e[38;2;57;57;57m▄\e[38;2;48;48;48m▂\e[0m \e[38;2;47;47;47m▂\e[38;2;57;57;57m▄\e[38;2;60;60;60m▆\e[38;2;62;62;62;48;2;61;61;61m┈\e[48;2;62;62;62m \e[48;2;61;61;61m┈\e[0m\e[7m\e[38;2;60;60;60m▂\e[38;2;57;57;57m▄\e[38;2;47;47;47m▆\e[0m \e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[0m\e[38;2;32;32;32m▏\e[7m\e[38;2;39;39;39m▇\e[38;2;57;57;57m▅\e[38;2;60;60;60m▃\e[0m\e[38;2;40;40;40;48;2;61;61;61m▁\e[48;2;62;62;62m \e[38;2;54;54;54;48;2;61;61;61m┊\e[48;2;62;62;62m \e[38;2;39;39;39;48;2;61;61;61m▁\e[0m\e[7m\e[38;2;60;60;60m▃\e[38;2;57;57;57m▅\e[38;2;38;38;38m▇\e[0m \e[38;2;193;60;2m▃\e[38;2;217;67;2m▅\e[38;2;225;70;2m▇\e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[0m\e[38;2;32;32;32m▏\e[0m \e[38;2;203;63;2m▄\e[38;2;147;45;1m▂\e[0m \e[7m\e[38;2;55;55;55m▆\e[38;2;60;60;60m▄\e[38;2;61;61;61m▂\e[38;2;60;60;60m▄\e[38;2;55;55;55m▆\e[0m \e[38;2;144;44;1m▂\e[38;2;202;62;2m▄\e[38;2;219;68;2m▆\e[38;2;231;72;3;48;2;226;70;2m┈\e[48;2;231;72;3m \e[48;2;225;70;2m▉\e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[0m\e[38;2;32;32;32m▏\e[7m\e[38;2;121;37;1m▉\e[0m\e[38;2;0;0;0;48;2;231;72;3m \e[0m\e[38;2;221;68;2m▇\e[38;2;208;64;2m▅\e[38;2;212;66;2m▂\e[38;2;123;37;0m▁\e[38;2;211;65;2m▂\e[38;2;207;64;2m▅\e[38;2;220;68;2m▇\e[48;2;231;72;3m \e[38;2;231;72;3;48;2;225;70;2m┈\e[0m\e[7m\e[38;2;221;68;2m▂\e[0m\e[38;2;44;13;0;48;2;231;72;3m \e[38;2;231;72;3;48;2;225;70;2m▉\e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[0m\e[38;2;32;32;32m▏\e[0m \e[7m\e[38;2;190;59;2m▅\e[38;2;216;67;2m▃\e[38;2;225;70;2m▁\e[0m\e[38;2;95;29;0;48;2;231;72;3m \e[38;2;231;72;3;48;2;230;71;2m┈\e[48;2;231;72;3m \e[0m\e[7m\e[38;2;225;70;2m▁\e[38;2;216;67;2m▃\e[38;2;191;59;2m▅\e[0m \e[38;2;0;0;0;48;2;231;72;3m \e[38;2;231;72;3;48;2;225;70;2m▉\e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[0m\e[38;2;32;32;32m▏ \e[0m \e[7m\e[38;2;172;53;1m▆\e[38;2;213;66;2m▄\e[38;2;219;68;2m▂\e[38;2;213;66;2m▄\e[38;2;174;54;2m▆\e[0m \e[38;2;0;0;0m \e[0m \e[38;2;0;0;0;48;2;231;72;3m \e[38;2;231;72;3;48;2;225;70;2m▉\e[0m
\e[38;2;59;59;59;48;2;62;62;62m▏ \e[0m\e[38;2;32;32;32m▏ \e[0m \e[38;2;0;0;0;48;2;231;72;3m \e[38;2;231;72;3;48;2;225;70;2m▉\e[0m
\e[7m\e[38;2;52;52;52m▆\e[38;2;59;59;59m▄\e[38;2;61;61;61m▂\e[0m\e[38;2;31;31;31m▏ \e[0m \e[7m\e[38;2;228;71;2m▂\e[38;2;221;69;2m▄\e[38;2;196;60;2m▆\e[0m
EOF
)
TEXT=(
""
""
"${BOLD}ProxMenux${RESET}"
""
"${BOLD}${NEON_PURPLE_BLUE}An Interactive Menu for${RESET}"
"${BOLD}${NEON_PURPLE_BLUE}Proxmox VE management${RESET}"
""
""
""
""
)
mapfile -t logo_lines <<< "$LOGO"
for i in {0..9}; do
echo -e "${TAB}${logo_lines[i]} ${WHITE}${RESET} ${TEXT[i]}"
done
echo -e
else
# Logo for terminal SSH
TEXT=(
""
""
""
""
"${BOLD}ProxMenux${RESET}"
""
"${BOLD}${NEON_PURPLE_BLUE}An Interactive Menu for${RESET}"
"${BOLD}${NEON_PURPLE_BLUE}Proxmox VE management${RESET}"
""
""
""
""
""
""
)
LOGO=(
"${DARK_GRAY}░░░░ ░░░░${RESET}"
"${DARK_GRAY}░░░░░░░ ░░░░░░ ${RESET}"
"${DARK_GRAY}░░░░░░░░░░░ ░░░░░░░ ${RESET}"
"${DARK_GRAY}░░░░ ░░░░░░ ░░░░░░ ${ORANGE}░░${RESET}"
"${DARK_GRAY}░░░░ ░░░░░░░ ${ORANGE}░░▒▒▒${RESET}"
"${DARK_GRAY}░░░░ ░░░ ${ORANGE}░▒▒▒▒▒▒▒${RESET}"
"${DARK_GRAY}░░░░ ${ORANGE}▒▒▒░ ░▒▒▒▒▒▒▒▒▒▒${RESET}"
"${DARK_GRAY}░░░░ ${ORANGE}░▒▒▒▒▒ ▒▒▒▒▒░░ ▒▒▒▒${RESET}"
"${DARK_GRAY}░░░░ ${ORANGE}░░▒▒▒▒▒▒▒░░ ▒▒▒▒${RESET}"
"${DARK_GRAY}░░░░ ${ORANGE}░░░ ▒▒▒▒${RESET}"
"${DARK_GRAY}░░░░ ${ORANGE}▒▒▒▒${RESET}"
"${DARK_GRAY}░░░░ ${ORANGE}▒▒▒░${RESET}"
"${DARK_GRAY} ░░ ${ORANGE}░░ ${RESET}"
)
for i in {0..12}; do
echo -e "${TAB}${LOGO[i]}${RESET} ${TEXT[i]}"
done
echo -e
fi
}
# ==========================================================
cleanup_corrupted_files() {
if [ -f "$CONFIG_FILE" ] && ! jq empty "$CONFIG_FILE" >/dev/null 2>&1; then
echo "Cleaning up corrupted configuration file..."
@@ -67,6 +277,17 @@ cleanup_corrupted_files() {
fi
}
# Cleanup function
cleanup() {
if [ -d "$TEMP_DIR" ]; then
rm -rf "$TEMP_DIR"
fi
}
# Set trap to ensure cleanup on exit
trap cleanup EXIT
# ==========================================================
check_existing_installation() {
local has_venv=false
@@ -118,6 +339,27 @@ uninstall_proxmenux() {
echo "Uninstalling ProxMenux..."
if systemctl is-active --quiet proxmenux-monitor.service; then
echo "Stopping ProxMenux Monitor service..."
systemctl stop proxmenux-monitor.service
fi
if systemctl is-enabled --quiet proxmenux-monitor.service 2>/dev/null; then
echo "Disabling ProxMenux Monitor service..."
systemctl disable proxmenux-monitor.service
fi
if [ -f "$MONITOR_SERVICE_FILE" ]; then
echo "Removing ProxMenux Monitor service file..."
rm -f "$MONITOR_SERVICE_FILE"
systemctl daemon-reload
fi
if [ -d "$MONITOR_INSTALL_DIR" ]; then
echo "Removing ProxMenux Monitor directory..."
rm -rf "$MONITOR_INSTALL_DIR"
fi
if [ -f "$VENV_PATH/bin/activate" ]; then
echo "Removing googletrans and virtual environment..."
source "$VENV_PATH/bin/activate"
@@ -314,57 +556,108 @@ get_server_ip() {
echo "$ip"
}
detect_latest_appimage() {
local appimage_dir="$TEMP_DIR/AppImage"
if [ ! -d "$appimage_dir" ]; then
return 1
fi
local latest_appimage=$(find "$appimage_dir" -name "ProxMenux-*.AppImage" -type f | sort -V | tail -1)
if [ -z "$latest_appimage" ]; then
return 1
fi
echo "$latest_appimage"
return 0
}
get_appimage_version() {
local appimage_path="$1"
local filename=$(basename "$appimage_path")
local version=$(echo "$filename" | grep -oP 'ProxMenux-\K[0-9]+\.[0-9]+\.[0-9]+')
echo "$version"
}
install_proxmenux_monitor() {
systemctl stop proxmenux-monitor 2>/dev/null || true
local appimage_source=$(detect_latest_appimage)
# Check if URL is accessible
if ! wget --spider -q "$MONITOR_APPIMAGE_URL" 2>/dev/null; then
msg_warn "ProxMenux Monitor AppImage not available at: $MONITOR_APPIMAGE_URL"
msg_info "The monitor will be available in future releases."
if [ -z "$appimage_source" ] || [ ! -f "$appimage_source" ]; then
msg_error "ProxMenux Monitor AppImage not found in $TEMP_DIR/AppImage/"
msg_warn "Please ensure the AppImage directory exists with ProxMenux-*.AppImage files."
update_config "proxmenux_monitor" "appimage_not_found"
return 1
fi
# Download AppImage silently
if ! wget -q -O "$MONITOR_INSTALL_PATH" "$MONITOR_APPIMAGE_URL" 2>&1; then
msg_warn "Failed to download ProxMenux Monitor from GitHub."
msg_info "You can install it manually later when available."
return 1
local appimage_version=$(get_appimage_version "$appimage_source")
if systemctl is-active --quiet proxmenux-monitor.service; then
systemctl stop proxmenux-monitor.service
fi
# Download SHA256 checksum silently
local sha256_file="/tmp/proxmenux-monitor.sha256"
if ! wget -q -O "$sha256_file" "$MONITOR_SHA256_URL" 2>/dev/null; then
msg_warn "SHA256 checksum file not available. Skipping verification."
msg_info "AppImage downloaded but integrity cannot be verified."
rm -f "$sha256_file"
else
# Verify SHA256 silently
local expected_hash=$(cat "$sha256_file" | awk '{print $1}')
local actual_hash=$(sha256sum "$MONITOR_INSTALL_PATH" | awk '{print $1}')
local service_exists=false
if [ -f "$MONITOR_SERVICE_FILE" ]; then
service_exists=true
fi
local sha256_file="$TEMP_DIR/AppImage/ProxMenux-Monitor.AppImage.sha256"
if [ -f "$sha256_file" ]; then
msg_info "Verifying AppImage integrity..."
local expected_hash=$(cat "$sha256_file" | grep -Eo '^[a-f0-9]+' | tr -d '\n')
local actual_hash=$(sha256sum "$appimage_source" | awk '{print $1}')
if [ "$expected_hash" != "$actual_hash" ]; then
msg_error "SHA256 verification failed! AppImage may be corrupted."
msg_info "Expected: $expected_hash"
msg_info "Got: $actual_hash"
rm -f "$MONITOR_INSTALL_PATH" "$sha256_file"
return 1
fi
rm -f "$sha256_file"
msg_ok "SHA256 verification passed."
else
msg_warn "SHA256 checksum not available. Skipping verification."
fi
# Make executable
chmod +x "$MONITOR_INSTALL_PATH"
msg_info "Installing ProxMenux Monitor..."
mkdir -p "$MONITOR_INSTALL_DIR"
# Show single success message at the end
msg_ok "ProxMenux Monitor installed and activated successfully."
local target_path="$MONITOR_INSTALL_DIR/ProxMenux-Monitor.AppImage"
cp "$appimage_source" "$target_path"
chmod +x "$target_path"
return 0
msg_ok "ProxMenux Monitor v$appimage_version installed."
if [ "$service_exists" = false ]; then
return 0 # New installation - service needs to be created
else
systemctl start proxmenux-monitor.service
sleep 2
if systemctl is-active --quiet proxmenux-monitor.service; then
update_config "proxmenux_monitor" "updated"
return 2 # Update successful
else
msg_warn "Service failed to restart. Check: journalctl -u proxmenux-monitor"
update_config "proxmenux_monitor" "failed"
return 1
fi
fi
}
create_monitor_service() {
msg_info "Creating ProxMenux Monitor service..."
cat > "$MONITOR_SERVICE_FILE" << EOF
local exec_path="$MONITOR_INSTALL_DIR/ProxMenux-Monitor.AppImage"
if [ -f "$TEMP_DIR/systemd/proxmenux-monitor.service" ]; then
sed "s|ExecStart=.*|ExecStart=$exec_path|g" \
"$TEMP_DIR/systemd/proxmenux-monitor.service" > "$MONITOR_SERVICE_FILE"
msg_ok "Using service file from repository."
else
cat > "$MONITOR_SERVICE_FILE" << EOF
[Unit]
Description=ProxMenux Monitor - Web Dashboard
After=network.target
@@ -372,8 +665,8 @@ After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=$BASE_DIR
ExecStart=$MONITOR_INSTALL_PATH
WorkingDirectory=$MONITOR_INSTALL_DIR
ExecStart=$exec_path
Restart=on-failure
RestartSec=10
Environment="PORT=$MONITOR_PORT"
@@ -381,41 +674,40 @@ Environment="PORT=$MONITOR_PORT"
[Install]
WantedBy=multi-user.target
EOF
msg_ok "Created default service file."
fi
# Reload systemd, enable and start service
systemctl daemon-reload
systemctl enable proxmenux-monitor.service > /dev/null 2>&1
systemctl start proxmenux-monitor.service > /dev/null 2>&1
# Wait a moment for service to start
sleep 2
sleep 3
# Check if service is running
if systemctl is-active --quiet proxmenux-monitor.service; then
msg_ok "ProxMenux Monitor service started successfully."
update_config "proxmenux_monitor" "installed"
return 0
else
msg_warn "ProxMenux Monitor service failed to start. Check logs with: journalctl -u proxmenux-monitor"
msg_warn "ProxMenux Monitor service failed to start."
msg_info "Check logs with: journalctl -u proxmenux-monitor -n 20"
msg_info "Check status with: systemctl status proxmenux-monitor"
update_config "proxmenux_monitor" "failed"
return 1
fi
}
####################################################
install_normal_version() {
local total_steps=4
local total_steps=5
local current_step=1
show_progress $current_step $total_steps "Installing basic dependencies"
show_progress $current_step $total_steps "Installing basic dependencies."
if ! command -v jq > /dev/null 2>&1; then
# Try installing from APT (silently)
apt-get update > /dev/null 2>&1
if apt-get install -y jq > /dev/null 2>&1 && command -v jq > /dev/null 2>&1; then
update_config "jq" "installed"
else
# Fallback: Download jq binary from GitHub
local jq_url="https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64"
if wget -q -O /usr/local/bin/jq "$jq_url" 2>/dev/null && chmod +x /usr/local/bin/jq; then
if command -v jq > /dev/null 2>&1; then
@@ -435,7 +727,7 @@ install_normal_version() {
update_config "jq" "already_installed"
fi
BASIC_DEPS=("dialog" "curl")
BASIC_DEPS=("dialog" "curl" "git")
for pkg in "${BASIC_DEPS[@]}"; do
if ! dpkg -l | grep -qw "$pkg"; then
if apt-get install -y "$pkg" > /dev/null 2>&1; then
@@ -450,8 +742,21 @@ install_normal_version() {
fi
done
msg_ok "jq, dialog and curl installed successfully."
msg_ok "jq, dialog, curl and git installed successfully."
((current_step++))
show_progress $current_step $total_steps "Install ProxMenux repository"
msg_info "Cloning ProxMenux repositoryy."
if ! git clone --depth 1 "$REPO_URL" "$TEMP_DIR" 2>/dev/null; then
msg_error "Failed to clone repository from $REPO_URL"
exit 1
fi
msg_ok "Repository cloned successfully."
cd "$TEMP_DIR"
((current_step++))
show_progress $current_step $total_steps "Creating directories and configuration"
@@ -466,36 +771,34 @@ install_normal_version() {
msg_ok "Directories and configuration created."
((current_step++))
show_progress $current_step $total_steps "Downloading necessary files"
FILES=(
"$UTILS_FILE $REPO_URL/scripts/utils.sh"
"$INSTALL_DIR/$MENU_SCRIPT $REPO_URL/$MENU_SCRIPT"
"$LOCAL_VERSION_FILE $REPO_URL/version.txt"
)
for file in "${FILES[@]}"; do
IFS=" " read -r dest url <<< "$file"
sleep 2
if wget -qO "$dest" "$url"; then
msg_ok "${dest##*/} downloaded successfully."
else
msg_error "Failed to download ${dest##*/}. Check your Internet connection."
return 1
fi
done
show_progress $current_step $total_steps "Copying necessary files"
cp "./scripts/utils.sh" "$UTILS_FILE"
cp "./menu" "$INSTALL_DIR/$MENU_SCRIPT"
cp "./version.txt" "$LOCAL_VERSION_FILE"
cp "./install_proxmenux.sh" "$BASE_DIR/install_proxmenux.sh"
mkdir -p "$BASE_DIR/scripts"
cp -r "./scripts/"* "$BASE_DIR/scripts/"
chmod -R +x "$BASE_DIR/scripts/"
chmod +x "$BASE_DIR/install_proxmenux.sh"
msg_ok "Necessary files created."
chmod +x "$INSTALL_DIR/$MENU_SCRIPT"
((current_step++))
show_progress $current_step $total_steps "Installing ProxMenux Monitor"
if install_proxmenux_monitor; then
install_proxmenux_monitor
local monitor_status=$?
if [ $monitor_status -eq 0 ]; then
create_monitor_service
fi
msg_ok "ProxMenux Normal Version installation completed successfully."
}
####################################################
install_translation_version() {
local total_steps=5
local current_step=1
@@ -507,13 +810,11 @@ install_translation_version() {
show_progress $current_step $total_steps "Installing system dependencies"
if ! command -v jq > /dev/null 2>&1; then
# Try installing from APT (silently)
apt-get update > /dev/null 2>&1
if apt-get install -y jq > /dev/null 2>&1 && command -v jq > /dev/null 2>&1; then
update_config "jq" "installed"
else
# Fallback: Download jq binary from GitHub
local jq_url="https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64"
if wget -q -O /usr/local/bin/jq "$jq_url" 2>/dev/null && chmod +x /usr/local/bin/jq; then
if command -v jq > /dev/null 2>&1; then
@@ -533,7 +834,7 @@ install_translation_version() {
update_config "jq" "already_installed"
fi
DEPS=("dialog" "curl" "python3" "python3-venv" "python3-pip")
DEPS=("dialog" "curl" "git" "python3" "python3-venv" "python3-pip")
for pkg in "${DEPS[@]}"; do
if ! dpkg -l | grep -qw "$pkg"; then
if apt-get install -y "$pkg" > /dev/null 2>&1; then
@@ -548,7 +849,7 @@ install_translation_version() {
fi
done
msg_ok "jq, dialog, curl, python3, python3-venv and python3-pip installed successfully."
msg_ok "jq, dialog, curl, git, python3, python3-venv and python3-pip installed successfully."
((current_step++))
@@ -587,44 +888,54 @@ install_translation_version() {
fi
deactivate
show_progress $current_step $total_steps "Cloning ProxMenux repository"
if ! git clone --depth 1 "$REPO_URL" "$TEMP_DIR" 2>/dev/null; then
msg_error "Failed to clone repository from $REPO_URL"
exit 1
fi
msg_ok "Repository cloned successfully."
cd "$TEMP_DIR"
((current_step++))
show_progress $current_step $total_steps "Downloading necessary files"
show_progress $current_step $total_steps "Copying necessary files"
mkdir -p "$BASE_DIR"
mkdir -p "$INSTALL_DIR"
FILES=(
"$CACHE_FILE $REPO_URL/json/cache.json"
"$UTILS_FILE $REPO_URL/scripts/utils.sh"
"$INSTALL_DIR/$MENU_SCRIPT $REPO_URL/$MENU_SCRIPT"
"$LOCAL_VERSION_FILE $REPO_URL/version.txt"
)
cp "./json/cache.json" "$CACHE_FILE"
msg_ok "Cache file copied with translations."
for file in "${FILES[@]}"; do
IFS=" " read -r dest url <<< "$file"
sleep 2
if wget -qO "$dest" "$url"; then
if [[ "$dest" == "$CACHE_FILE" ]]; then
msg_ok "Cache file updated with latest translations."
fi
else
msg_error "Failed to download ${dest##*/}. Check your Internet connection."
return 1
fi
done
cp "./scripts/utils.sh" "$UTILS_FILE"
cp "./menu" "$INSTALL_DIR/$MENU_SCRIPT"
cp "./version.txt" "$LOCAL_VERSION_FILE"
cp "./install_proxmenux.sh" "$BASE_DIR/install_proxmenux.sh"
mkdir -p "$BASE_DIR/scripts"
cp -r "./scripts/"* "$BASE_DIR/scripts/"
chmod -R +x "$BASE_DIR/scripts/"
chmod +x "$BASE_DIR/install_proxmenux.sh"
msg_ok "Necessary files created."
chmod +x "$INSTALL_DIR/$MENU_SCRIPT"
((current_step++))
show_progress $current_step $total_steps "Installing ProxMenux Monitor"
if install_proxmenux_monitor; then
install_proxmenux_monitor
local monitor_status=$?
if [ $monitor_status -eq 0 ]; then
create_monitor_service
elif [ $monitor_status -eq 2 ]; then
msg_ok "ProxMenux Monitor updated successfully."
fi
msg_ok "ProxMenux Translation Version installation completed successfully."
}
####################################################
show_installation_options() {
local current_install_type
current_install_type=$(check_existing_installation)
@@ -675,7 +986,6 @@ show_installation_options() {
exit 1
fi
# For new installations, show confirmation with details
if [ "$current_install_type" = "none" ]; then
if ! show_installation_confirmation "$INSTALL_TYPE"; then
show_proxmenux_logo
@@ -710,17 +1020,21 @@ install_proxmenux() {
exit 1
;;
esac
if [[ -f "$UTILS_FILE" ]]; then
source "$UTILS_FILE"
fi
msg_title "$(translate "ProxMenux has been installed successfully")"
msg_title "ProxMenux has been installed successfully"
if systemctl is-active --quiet proxmenux-monitor.service; then
local server_ip=$(get_server_ip)
echo -e "${GN}🌐 $(translate "ProxMenux Monitor activated")${CL}: ${BL}http://${server_ip}:${MONITOR_PORT}${CL}"
echo -e "${GN}🌐 ProxMenux Monitor activated${CL}: ${BL}http://${server_ip}:${MONITOR_PORT}${CL}"
echo
fi
echo -ne "${GN}"
type_text "$(translate "To run ProxMenux, simply execute this command in the console or terminal:")"
type_text "To run ProxMenux, simply execute this command in the console or terminal:"
echo -e "${YWB} menu${CL}"
echo
}

13
menu
View File

@@ -31,7 +31,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
CONFIG_FILE="$BASE_DIR/config.json"
CACHE_FILE="$BASE_DIR/cache.json"
@@ -44,7 +44,10 @@ if [[ -f "$UTILS_FILE" ]]; then
fi
# =========================================================
# For now, update is not available in the local version.
# Take in mind that in future versions, updates must be
# a warning to update the .deb package
# =========================================================
check_updates() {
local INSTALL_SCRIPT="$BASE_DIR/install_proxmenux.sh"
@@ -80,13 +83,13 @@ check_updates() {
}
main_menu() {
exec bash <(curl -fsSL "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
}
load_language
initialize_cache
check_updates
# Check updates doesn't make sense in offline mode
# check_updates
main_menu

View File

@@ -31,12 +31,12 @@
# - Translation support: Multi-language compatible through ProxMenux framework
# - Rollback compatibility: All optimizations can be reversed using the uninstall script
#
# This script is based on the post-install script cutotomizable
# This script is based on the post-install script customizable
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -99,7 +99,7 @@ lvm_repair_check() {
done
msg_ok "$(translate "LVM PV headers check completed")"
register_tool "lvm_repair" true
}
# ==========================================================
@@ -257,7 +257,7 @@ apt_upgrade() {
if [ "$total_packages" -eq 0 ]; then
total_packages=1
fi
msg_ok "$(translate "Packages upgrade successfull")"
msg_ok "$(translate "Packages upgrade successful")"
tput civis
tput sc
@@ -748,8 +748,9 @@ install_log2ram_auto() {
return 1
fi
# Detect RAM
RAM_SIZE_GB=$(free -g | awk '/^Mem:/{print $2}')
# Detect RAM (in MB first for better accuracy)
RAM_SIZE_MB=$(free -m | awk '/^Mem:/{print $2}')
RAM_SIZE_GB=$((RAM_SIZE_MB / 1024))
[[ -z "$RAM_SIZE_GB" || "$RAM_SIZE_GB" -eq 0 ]] && RAM_SIZE_GB=4
if (( RAM_SIZE_GB <= 8 )); then
@@ -773,7 +774,13 @@ install_log2ram_auto() {
cat << 'EOF' > /usr/local/bin/log2ram-check.sh
#!/bin/bash
CONF_FILE="/etc/log2ram.conf"
LIMIT_KB=$(grep '^SIZE=' "$CONF_FILE" | cut -d'=' -f2 | tr -d 'M')000
SIZE_VALUE=$(grep '^SIZE=' "$CONF_FILE" | cut -d'=' -f2)
# Convert to KB: handle M (megabytes) and G (gigabytes)
if [[ "$SIZE_VALUE" == *"G" ]]; then
LIMIT_KB=$(($(echo "$SIZE_VALUE" | tr -d 'G') * 1024 * 1024))
else
LIMIT_KB=$(($(echo "$SIZE_VALUE" | tr -d 'M') * 1024))
fi
USED_KB=$(df /var/log --output=used | tail -1)
THRESHOLD=$(( LIMIT_KB * 90 / 100 ))
if (( USED_KB > THRESHOLD )); then

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -16,7 +16,7 @@ initialize_cache
get_external_backup_mount_point() {
local BACKUP_MOUNT_FILE="/usr/local/share/proxmenux/last_backup_mount.txt"
local STORAGE_REPO="$REPO_URL/scripts/backup_restore"
local STORAGE_REPO="$LOCAL_SCRIPTS/backup_restore"
local MOUNT_POINT
if [[ -f "$BACKUP_MOUNT_FILE" ]]; then
@@ -36,7 +36,7 @@ get_external_backup_mount_point() {
echo "$MOUNT_POINT"
return 0
else
source <(curl -s "$STORAGE_REPO/mount_disk_host_bk.sh")
source "$STORAGE_REPO/mount_disk_host_bk.sh"
MOUNT_POINT=$(mount_disk_host_bk)
[[ -z "$MOUNT_POINT" ]] && msg_error "$(translate "No disk mounted.")" && return 1
echo "$MOUNT_POINT"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -16,7 +16,7 @@ initialize_cache
get_external_backup_mount_point() {
local BACKUP_MOUNT_FILE="/usr/local/share/proxmenux/last_backup_mount.txt"
local STORAGE_REPO="$REPO_URL/scripts/backup_restore"
local STORAGE_REPO="$LOCAL_SCRIPTS/backup_restore"
local MOUNT_POINT
if [[ -f "$BACKUP_MOUNT_FILE" ]]; then
@@ -36,7 +36,7 @@ get_external_backup_mount_point() {
echo "$MOUNT_POINT"
return 0
else
source <(curl -s "$STORAGE_REPO/mount_disk_host_bk.sh")
source "$STORAGE_REPO/mount_disk_host_bk.sh"
MOUNT_POINT=$(mount_disk_host_bk)
[[ -z "$MOUNT_POINT" ]] && msg_error "$(translate "No disk mounted.")" && return 1
echo "$MOUNT_POINT"
@@ -1058,4 +1058,4 @@ read -r
# ===============================
host_backup_menu
host_backup_menu

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -16,7 +16,7 @@ initialize_cache
get_external_backup_mount_point() {
local BACKUP_MOUNT_FILE="/usr/local/share/proxmenux/last_backup_mount.txt"
local STORAGE_REPO="$REPO_URL/scripts/backup_restore"
local STORAGE_REPO="$LOCAL_SCRIPTS/backup_restore"
local MOUNT_POINT
if [[ -f "$BACKUP_MOUNT_FILE" ]]; then
@@ -36,7 +36,7 @@ get_external_backup_mount_point() {
echo "$MOUNT_POINT"
return 0
else
source <(curl -s "$STORAGE_REPO/mount_disk_host_bk.sh")
source "$STORAGE_REPO/mount_disk_host_bk.sh"
MOUNT_POINT=$(mount_disk_host_bk)
[[ -z "$MOUNT_POINT" ]] && msg_error "$(translate "No disk mounted.")" && return 1
echo "$MOUNT_POINT"
@@ -1291,4 +1291,4 @@ read -r
# ===============================
host_backup_menu
host_backup_menu

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -16,7 +16,7 @@ initialize_cache
get_external_backup_mount_point() {
local BACKUP_MOUNT_FILE="/usr/local/share/proxmenux/last_backup_mount.txt"
local STORAGE_REPO="$REPO_URL/scripts/backup_restore"
local STORAGE_REPO="$LOCAL_SCRIPTS/backup_restore"
local MOUNT_POINT
if [[ -f "$BACKUP_MOUNT_FILE" ]]; then
@@ -36,7 +36,7 @@ get_external_backup_mount_point() {
echo "$MOUNT_POINT"
return 0
else
source <(curl -s "$STORAGE_REPO/mount_disk_host_bk.sh")
source "$STORAGE_REPO/mount_disk_host_bk.sh"
MOUNT_POINT=$(mount_disk_host_bk)
[[ -z "$MOUNT_POINT" ]] && msg_error "$(translate "No disk mounted.")" && return 1
echo "$MOUNT_POINT"

View File

@@ -10,7 +10,7 @@
# Last Updated: 13/12/2024
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -16,7 +16,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -28,7 +28,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -21,7 +21,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -4,7 +4,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -2,7 +2,7 @@
# ==========================================================
# Remove Subscription Banner - Proxmox VE 8.4.9
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -2,7 +2,7 @@
# ==========================================================
# Remove Subscription Banner - Proxmox VE 9.x
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -2,7 +2,7 @@
# ==========================================================
# Remove Subscription Banner - Proxmox VE 9.x ONLY
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -4,7 +4,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -29,7 +29,7 @@ register_tool() {
}
download_common_functions() {
if ! source <(curl -s "$REPO_URL/scripts/global/common-functions.sh"); then
if ! source "$LOCAL_SCRIPTS/global/common-functions.sh"; then
return 1
fi
}

View File

@@ -4,7 +4,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -29,7 +29,7 @@ register_tool() {
}
download_common_functions() {
if ! source <(curl -s "$REPO_URL/scripts/global/common-functions.sh"); then
if ! source "$LOCAL_SCRIPTS/global/common-functions.sh"; then
return 1
fi
}

View File

@@ -4,7 +4,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -29,7 +29,7 @@ register_tool() {
}
download_common_functions() {
if ! source <(curl -s "$REPO_URL/scripts/global/common-functions.sh"); then
if ! source "$LOCAL_SCRIPTS/global/common-functions.sh"; then
return 1
fi
}

View File

@@ -7,7 +7,7 @@
# Last Updated: 25/09/2025
# =========================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
LOG_FILE="/tmp/coral_install.log"

View File

@@ -19,7 +19,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -27,7 +27,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -22,7 +22,7 @@
# Includes USB passthrough enhancement using persistent udev alias (/dev/coral).
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -17,7 +17,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -11,7 +11,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -15,7 +15,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -16,7 +16,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -4,13 +4,14 @@
# ==========================================================
# Author : MacRimi
# Copyright : (c) 2024 MacRimi
# Contributors : cod378
# License : (CC BY-NC 4.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)
# Version : 1.1
# Last Updated: 04/07/2025
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
CONFIG_FILE="$BASE_DIR/config.json"
CACHE_FILE="$BASE_DIR/cache.json"
@@ -19,7 +20,9 @@ LOCAL_VERSION_FILE="$BASE_DIR/version.txt"
INSTALL_DIR="/usr/local/bin"
MENU_SCRIPT="menu"
VENV_PATH="/opt/googletrans-env"
MONITOR_SERVICE="proxmenux-monitor.service"
MONITOR_UNIT_FILE="/etc/systemd/system/${MONITOR_SERVICE}"
if [[ -f "$UTILS_FILE" ]]; then
source "$UTILS_FILE"
@@ -30,6 +33,41 @@ initialize_cache
# ==========================================================
uninstall_proxmenux_monitor() {
# 1. Stop service if it is running
if systemctl is-active --quiet "${MONITOR_SERVICE}"; then
echo " - Stoping service..."
systemctl stop "${MONITOR_SERVICE}" > /dev/null 2>&1
else
echo " - Service is not running (ok)"
fi
# 2. Disable service if enabled
if systemctl is-enabled --quiet "${MONITOR_SERVICE}"; then
echo " - Disabling service..."
systemctl disable "${MONITOR_SERVICE}" > /dev/null 2>&1
else
echo " - Service is not enabled (ok)"
fi
# 3. Remove unit file
if [ -f "${MONITOR_UNIT_FILE}" ]; then
echo " - Removing unit file ${MONITOR_UNIT_FILE}..."
rm -f "${MONITOR_UNIT_FILE}"
else
echo " - Unit file ${MONITOR_UNIT_FILE} does not exist (ok)"
fi
# 4. Reload systemd
echo " - Recargando systemd..."
systemctl daemon-reload > /dev/null 2>&1
systemctl reset-failed > /dev/null 2>&1 || true
echo "==> Service ${MONITOR_SERVICE} uninstalled."
}
detect_installation_type() {
local has_venv=false
local has_language=false
@@ -218,7 +256,7 @@ show_config_menu() {
uninstall_proxmenu
;;
"return_main"|"")
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
esac
done
@@ -257,11 +295,7 @@ change_language() {
--msgbox "\n\n$(translate "Language changed to") $new_language" 10 50
# Reload menu with new language
TMP_FILE=$(mktemp)
curl -s "$REPO_URL/scripts/menus/config_menu.sh" > "$TMP_FILE"
chmod +x "$TMP_FILE"
trap 'rm -f "$TMP_FILE"' EXIT
exec bash "$TMP_FILE"
exec bash "$LOCAL_SCRIPTS/menus/config_menu.sh"
}
# ==========================================================
@@ -404,6 +438,9 @@ uninstall_proxmenu() {
done
apt-get autoremove -y --purge >/dev/null 2>&1
fi
echo "80" ; echo "Removing ProxMenux Monitor..."
uninstall_proxmenux_monitor
echo "90" ; echo "Restoring system files..."
# Restore .bashrc and motd

View File

@@ -26,30 +26,30 @@
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
VM_REPO="$REPO_URL/scripts/vm"
ISO_REPO="$REPO_URL/scripts/vm"
MENU_REPO="$REPO_URL/scripts/menus"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
VM_REPO="$LOCAL_SCRIPTS/vm"
ISO_REPO="$LOCAL_SCRIPTS/vm"
MENU_REPO="$LOCAL_SCRIPTS/menus"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
[[ -f "$UTILS_FILE" ]] && source "$UTILS_FILE"
source <(curl -s "$VM_REPO/vm_configurator.sh")
source <(curl -s "$VM_REPO/disk_selector.sh")
source <(curl -s "$VM_REPO/vm_creator.sh")
# Source utilities and required scripts
if [[ -f "$UTILS_FILE" ]]; then
source "$UTILS_FILE"
else
echo "Error: $UTILS_FILE not found"
exit 1
fi
load_language
initialize_cache
# Source VM management scripts
[[ -f "$VM_REPO/vm_configurator.sh" ]] && source "$VM_REPO/vm_configurator.sh" || { echo "Error: vm_configurator.sh not found"; exit 1; }
[[ -f "$VM_REPO/disk_selector.sh" ]] && source "$VM_REPO/disk_selector.sh" || { echo "Error: disk_selector.sh not found"; exit 1; }
[[ -f "$VM_REPO/vm_creator.sh" ]] && source "$VM_REPO/vm_creator.sh" || { echo "Error: vm_creator.sh not found"; exit 1; }
function header_info() {
@@ -108,17 +108,17 @@ while true; do
3>&1 1>&2 2>&3)
[[ $? -ne 0 || "$OS_TYPE" == "6" ]] && exec bash <(curl -s "$MENU_REPO/main_menu.sh")
[[ $? -ne 0 || "$OS_TYPE" == "6" ]] && exec bash "$MENU_REPO/main_menu.sh"
case "$OS_TYPE" in
1)
source <(curl -fsSL "$ISO_REPO/select_nas_iso.sh") && select_nas_iso || continue
source "$ISO_REPO/select_nas_iso.sh" && select_nas_iso || continue
;;
2)
source <(curl -fsSL "$ISO_REPO/select_windows_iso.sh") && select_windows_iso || continue
source "$ISO_REPO/select_windows_iso.sh" && select_windows_iso || continue
;;
3)
source <(curl -fsSL "$ISO_REPO/select_linux_iso.sh") && select_linux_iso || continue
source "$ISO_REPO/select_linux_iso.sh" && select_linux_iso || continue
;;
4)
whiptail --title "OSX-PROXMOX" --yesno "$(translate "This is an external script that creates a macOS VM in Proxmox VE in just a few steps, whether you are using AMD or Intel hardware.")\n\n$(translate "The script clones the osx-proxmox.com repository and once the setup is complete, the server will automatically reboot.")\n\n$(translate "Make sure there are no critical services running as they will be interrupted. Ensure your server can be safely rebooted.")\n\n$(translate "Visit https://osx-proxmox.com for more information.")\n\n$(translate "Do you want to run the script now?")" 24 70
@@ -128,7 +128,7 @@ while true; do
continue
;;
5)
source <(curl -fsSL "$ISO_REPO/select_linux_iso.sh") && select_linux_other_scripts || continue
source "$ISO_REPO/select_linux_iso.sh" && select_linux_other_scripts || continue
;;
esac
@@ -149,26 +149,3 @@ while true; do
create_vm
break
done
function start_vm_configuration() {
if (whiptail --title "ProxMenux" --yesno "$(translate "Use Default Settings?")" --no-button "$(translate "Advanced")" 10 60); then
header_info
load_default_vm_config "$OS_TYPE"
if [[ -z "$HN" ]]; then
HN=$(whiptail --inputbox "$(translate "Enter a name for the new virtual machine:")" 10 60 --title "VM Hostname" 3>&1 1>&2 2>&3)
[[ -z "$HN" ]] && HN="custom-vm"
fi
apply_default_vm_config
else
header_info
echo -e "${CUS}$(translate "Using advanced configuration")${CL}"
configure_vm_advanced "$OS_TYPE"
fi
}

View File

@@ -12,7 +12,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -35,24 +35,24 @@ initialize_cache
case $OPTION in
1)
bash <(curl -s "$REPO_URL/scripts/configure_igpu_lxc.sh")
bash "$LOCAL_SCRIPTS/configure_igpu_lxc.sh"
if [ $? -ne 0 ]; then
return
fi
;;
2)
bash <(curl -s "$REPO_URL/scripts/install_coral_lxc.sh")
bash "$LOCAL_SCRIPTS/install_coral_lxc.sh"
if [ $? -ne 0 ]; then
return
fi
;;
3)
bash <(curl -s "$REPO_URL/scripts/gpu_tpu/install_coral_pve9.sh")
bash "$LOCAL_SCRIPTS/gpu_tpu/install_coral_pve9.sh"
if [ $? -ne 0 ]; then
return
fi
;;
4) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
*) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
4) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
*) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
esac
done

View File

@@ -15,7 +15,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -40,22 +40,23 @@ show_main_menu() {
case $CHOICE in
1)
bash <(curl -s "$REPO_URL/scripts/lxc/lxc-privileged-to-unprivileged.sh")
bash "$LOCAL_SCRIPTS/lxc/lxc-privileged-to-unprivileged.sh"
;;
2)
bash <(curl -s "$REPO_URL/scripts/lxc/lxc-unprivileged-to-privileged.sh")
bash "$LOCAL_SCRIPTS/lxc/lxc-unprivileged-to-privileged.sh"
;;
3)
show_container_status
;;
4)
bash <(curl -s "$REPO_URL/scripts/lxc/lxc-conversion-manual-guide.sh")
bash "$LOCAL_SCRIPTS/lxc/lxc-conversion-manual-guide.sh"
;;
5)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
*)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
esac
}
@@ -99,6 +100,4 @@ show_container_status() {
show_main_menu
}
show_main_menu
show_main_menu

View File

@@ -11,7 +11,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -54,10 +54,10 @@ check_pve9_translation_compatibility() {
--title "Translation Environment Incompatible with PVE $pve_version" \
--msgbox "NOTICE: You are running Proxmox VE $pve_version with translation components installed.\n\nTranslations are NOT supported in PVE 9+. This causes:\n• Menu loading errors\n• Translation failures\n• System instability\n\nREQUIRED ACTION:\nProxMenux will now automatically reinstall the Normal Version.\n\nThis process will:\n• Remove incompatible translation components\n• Install PVE 9+ compatible version\n• Preserve all your settings and preferences\n\nPress OK to continue with automatic reinstallation..." 20 75
bash <(curl -sSL "$REPO_URL/install_proxmenux.sh")
bash "$BASE_DIR/install_proxmenux.sh"
fi
exit
exit 0
fi
}
@@ -90,9 +90,6 @@ show_menu() {
while true; do
local menu_title="Main ProxMenux"
if [[ -n "$PROXMENUX_PVE9_WARNING_SHOWN" ]]; then
menu_title="Main ProxMenux"
fi
dialog --clear \
--backtitle "ProxMenux" \
@@ -122,16 +119,16 @@ show_menu() {
OPTION=$(<"$TEMP_FILE")
case $OPTION in
1) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_post_install.sh") ;;
2) exec bash <(curl -s "$REPO_URL/scripts/menus/hw_grafics_menu.sh") ;;
3) exec bash <(curl -s "$REPO_URL/scripts/menus/create_vm_menu.sh") ;;
4) exec bash <(curl -s "$REPO_URL/scripts/menus/storage_menu.sh") ;;
5) exec bash <(curl -s "$REPO_URL/scripts/menus/share_menu.sh") ;;
6) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_Helper_Scripts.sh") ;;
7) exec bash <(curl -s "$REPO_URL/scripts/menus/network_menu.sh") ;;
8) exec bash <(curl -s "$REPO_URL/scripts/menus/utilities_menu.sh") ;;
h) bash <(curl -s "$REPO_URL/scripts/help_info_menu.sh") ;;
s) exec bash <(curl -s "$REPO_URL/scripts/menus/config_menu.sh") ;;
1) exec bash "$LOCAL_SCRIPTS/menus/menu_post_install.sh" ;;
2) exec bash "$LOCAL_SCRIPTS/menus/hw_grafics_menu.sh" ;;
3) exec bash "$LOCAL_SCRIPTS/menus/create_vm_menu.sh" ;;
4) exec bash "$LOCAL_SCRIPTS/menus/storage_menu.sh" ;;
5) exec bash "$LOCAL_SCRIPTS/menus/share_menu.sh" ;;
6) exec bash "$LOCAL_SCRIPTS/menus/menu_Helper_Scripts.sh" ;;
7) exec bash "$LOCAL_SCRIPTS/menus/network_menu.sh" ;;
8) exec bash "$LOCAL_SCRIPTS/menus/utilities_menu.sh" ;;
h) bash "$LOCAL_SCRIPTS/help_info_menu.sh" ;;
s) exec bash "$LOCAL_SCRIPTS/menus/config_menu.sh" ;;
0) clear; msg_ok "$(translate "Thank you for using ProxMenux. Goodbye!")"; rm -f "$TEMP_FILE"; exit 0 ;;
*) msg_warn "$(translate "Invalid option")"; sleep 2 ;;
esac

View File

@@ -11,7 +11,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -62,21 +62,19 @@ show_menu() {
OPTION=$(<"$TEMP_FILE")
case $OPTION in
1) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_post_install.sh") ;;
2) bash <(curl -s "$REPO_URL/scripts/help_info_menu.sh") ;;
3) exec bash <(curl -s "$REPO_URL/scripts/menus/hw_grafics_menu.sh") ;;
4) exec bash <(curl -s "$REPO_URL/scripts/menus/create_vm_menu.sh") ;;
5) exec bash <(curl -s "$REPO_URL/scripts/menus/storage_menu.sh") ;;
6) exec bash <(curl -s "$REPO_URL/scripts/menus/menu_Helper_Scripts.sh") ;;
7) exec bash <(curl -s "$REPO_URL/scripts/menus/network_menu.sh") ;;
8) exec bash <(curl -s "$REPO_URL/scripts/menus/utilities_menu.sh") ;;
9) exec bash <(curl -s "$REPO_URL/scripts/menus/config_menu.sh") ;;
1) exec bash "$LOCAL_SCRIPTS/menus/menu_post_install.sh" ;;
2) bash "$LOCAL_SCRIPTS/help_info_menu.sh" ;;
3) exec bash "$LOCAL_SCRIPTS/menus/hw_grafics_menu.sh" ;;
4) exec bash "$LOCAL_SCRIPTS/menus/create_vm_menu.sh" ;;
5) exec bash "$LOCAL_SCRIPTS/menus/storage_menu.sh" ;;
6) exec bash "$LOCAL_SCRIPTS/menus/menu_Helper_Scripts.sh" ;;
7) exec bash "$LOCAL_SCRIPTS/menus/network_menu.sh" ;;
8) exec bash "$LOCAL_SCRIPTS/menus/utilities_menu.sh" ;;
9) exec bash "$LOCAL_SCRIPTS/menus/config_menu.sh" ;;
0) clear; msg_ok "$(translate "Thank you for using ProxMenux. Goodbye!")"; rm -f "$TEMP_FILE"; exit 0 ;;
*) msg_warn "$(translate "Invalid option")"; sleep 2 ;;
esac
done
}
show_menu

View File

@@ -20,7 +20,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -293,7 +293,7 @@ while true; do
dialog --clear --title "Proxmox VE Helper-Scripts" \
--msgbox "\n\n$(translate "Visit the website to discover more scripts, stay updated with the latest updates, and support the project:")\n\nhttps://community-scripts.github.io/ProxmoxVE" 15 70
#clear
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
}
if [[ "$SELECTED" == "search" ]]; then

View File

@@ -9,7 +9,7 @@
# Last Updated: 06/07/2025
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -70,7 +70,7 @@ confirm_automated_script() {
clear
if [ $response -eq 0 ]; then
bash <(curl -s $REPO_URL/scripts/post_install/auto_post_install.sh)
bash "$LOCAL_SCRIPTS/post_install/auto_post_install.sh"
else
msg_warn "$(translate "Cancelled by user.")"
sleep 1
@@ -80,9 +80,9 @@ confirm_automated_script() {
# ==========================================================
declare -a PROXMENUX_SCRIPTS=(
"Customizable post-installation script|ProxMenux|bash <(curl -s $REPO_URL/scripts/post_install/customizable_post_install.sh)"
"Customizable post-installation script|ProxMenux|bash \"$LOCAL_SCRIPTS/post_install/customizable_post_install.sh\""
"Automated post-installation script|ProxMenux|confirm_automated_script"
"Uninstall optimizations|ProxMenux|bash <(curl -s $REPO_URL/scripts/post_install/uninstall-tools.sh)"
"Uninstall optimizations|ProxMenux|bash \"$LOCAL_SCRIPTS/post_install/uninstall-tools.sh\""
)
@@ -168,7 +168,7 @@ show_menu() {
if [ $exit_status -ne 0 ] || [ "$script_selection" = "0" ]; then
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
fi

View File

@@ -16,7 +16,7 @@
# Special thanks to @Andres_Eduardo_Rojas_Moya for contributing the persistent
# network naming function and for the original idea.
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -1082,7 +1082,7 @@ show_menu() {
if [ $exit_status -ne 0 ] || [ "$script_selection" = "0" ]; then
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
fi

View File

@@ -10,7 +10,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -43,7 +43,7 @@ while true; do
"h" "$(translate "Help & Info (commands)")" \
"0" "$(translate "Return to Main Menu")" \
2>&1 >/dev/tty
) || { exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh"); }
) || { exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"; }
case "$OPTION" in
@@ -52,37 +52,37 @@ while true; do
;;
1)
bash <(curl -s "$REPO_URL/scripts/share/nfs_host.sh")
bash "$LOCAL_SCRIPTS/share/nfs_host.sh"
;;
2)
bash <(curl -s "$REPO_URL/scripts/share/samba_host.sh")
bash "$LOCAL_SCRIPTS/share/samba_host.sh"
;;
3)
bash <(curl -s "$REPO_URL/scripts/share/local-shared-manager.sh")
bash "$LOCAL_SCRIPTS/share/local-shared-manager.sh"
;;
4)
bash <(curl -s "$REPO_URL/scripts/share/lxc-mount-manager_minimal.sh")
bash "$LOCAL_SCRIPTS/share/lxc-mount-manager_minimal.sh"
;;
5)
bash <(curl -s "$REPO_URL/scripts/share/nfs_client.sh")
bash "$LOCAL_SCRIPTS/share/nfs_client.sh"
;;
6)
bash <(curl -s "$REPO_URL/scripts/share/samba_client.sh")
bash "$LOCAL_SCRIPTS/share/samba_client.sh"
;;
7)
bash <(curl -s "$REPO_URL/scripts/share/nfs_lxc_server.sh")
bash "$LOCAL_SCRIPTS/share/nfs_lxc_server.sh"
;;
8)
bash <(curl -s "$REPO_URL/scripts/share/samba_lxc_server.sh")
bash "$LOCAL_SCRIPTS/share/samba_lxc_server.sh"
;;
h)
bash <(curl -s "$REPO_URL/scripts/share/commands_share.sh")
bash "$LOCAL_SCRIPTS/share/commands_share.sh"
;;
0)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
*)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
esac
done

View File

@@ -12,7 +12,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -39,38 +39,37 @@ while true; do
case $OPTION in
1)
msg_info2 "$(translate "Running script: Add Disk Passthrough to a VM")..."
bash <(curl -s "$REPO_URL/scripts/storage/disk-passthrough.sh")
bash "$LOCAL_SCRIPTS/storage/disk-passthrough.sh"
;;
2)
msg_info2 "$(translate "Running script: Add Disk Passthrough to a CT")..."
bash <(curl -s "$REPO_URL/scripts/storage/disk-passthrough_ct.sh")
bash "$LOCAL_SCRIPTS/storage/disk-passthrough_ct.sh"
;;
3)
msg_info2 "$(translate "Running script: Import Disk Image to a VM")..."
bash <(curl -s "$REPO_URL/scripts/storage/import-disk-image.sh")
bash "$LOCAL_SCRIPTS/storage/import-disk-image.sh"
;;
4)
msg_info2 "$(translate "Running script: Mount point to CT")..."
bash <(curl -s "$REPO_URL/scripts/storage/mount-point-to-ct.sh")
bash "$LOCAL_SCRIPTS/storage/mount-point-to-ct.sh"
;;
5)
msg_info2 "$(translate "Running script: Mount disk on HOST")..."
bash <(curl -s "$REPO_URL/scripts/storage/mount-disk-on-host.sh")
bash "$LOCAL_SCRIPTS/storage/mount-disk-on-host.sh"
;;
6)
msg_info2 "$(translate "Running script: Unmount disk from HOST")..."
bash <(curl -s "$REPO_URL/scripts/storage/unmount-disk-from-host.sh")
bash "$LOCAL_SCRIPTS/storage/unmount-disk-from-host.sh"
;;
7)
msg_info2 "$(translate "Running script: Format disk")..."
bash <(curl -s "$REPO_URL/scripts/storage/format-disk.sh")
bash "$LOCAL_SCRIPTS/storage/format-disk.sh"
;;
8)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
*)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
esac
done

View File

@@ -12,7 +12,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -36,19 +36,19 @@ while true; do
case $OPTION in
1)
bash <(curl -s "$REPO_URL/scripts/storage/disk-passthrough.sh")
bash "$LOCAL_SCRIPTS/storage/disk-passthrough.sh"
;;
2)
bash <(curl -s "$REPO_URL/scripts/storage/disk-passthrough_ct.sh")
bash "$LOCAL_SCRIPTS/storage/disk-passthrough_ct.sh"
;;
3)
bash <(curl -s "$REPO_URL/scripts/storage/import-disk-image.sh")
bash "$LOCAL_SCRIPTS/storage/import-disk-image.sh"
;;
4)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
*)
exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh")
exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh"
;;
esac
done

View File

@@ -12,7 +12,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -36,13 +36,13 @@ initialize_cache
case $OPTION in
1)
bash <(curl -s "$REPO_URL/scripts/utilities/uup_dump_iso_creator.sh")
bash "$LOCAL_SCRIPTS/utilities/uup_dump_iso_creator.sh"
if [ $? -ne 0 ]; then
return
fi
;;
2)
bash <(curl -s "$REPO_URL/scripts/utilities/system_utils.sh")
bash "$LOCAL_SCRIPTS/utilities/system_utils.sh"
if [ $? -ne 0 ]; then
return
fi
@@ -64,19 +64,20 @@ initialize_cache
dialog_result=$?
if [[ $dialog_result -eq 0 ]]; then
bash <(curl -s "$REPO_URL/scripts/utilities/proxmox_update.sh")
bash "$LOCAL_SCRIPTS/utilities/proxmox_update.sh"
if [ $? -ne 0 ]; then
return
fi
fi
;;
4)
bash <(curl -s "$REPO_URL/scripts/utilities/upgrade_pve8_to_pve9.sh")
bash "$LOCAL_SCRIPTS/utilities/upgrade_pve8_to_pve9.sh"
if [ $? -ne 0 ]; then
return
fi
;;
5) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
*) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
5) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
*) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
esac
done
done

View File

@@ -36,7 +36,7 @@
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -107,16 +107,11 @@ apt_upgrade() {
if [[ "$pve_version" -ge 9 ]]; then
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve9_2.sh")
bash "$LOCAL_SCRIPTS/global/update-pve9_2.sh"
else
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve8.sh")
bash "$LOCAL_SCRIPTS/global/update-pve8.sh"
fi
}
# ==========================================================
@@ -147,14 +142,14 @@ remove_subscription_banner() {
msg_warn "Banner removal cancelled by user."
return 1
fi
bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve-v3.sh")
bash "$LOCAL_SCRIPTS/global/remove-banner-pve-v3.sh"
else
if ! whiptail --title "Proxmox VE 8.x Subscription Banner Removal" \
--yesno "Do you want to remove the Proxmox subscription banner from the web interface for PVE $pve_version?" 10 70; then
msg_warn "Banner removal cancelled by user."
return 1
fi
bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve8.sh")
bash "$LOCAL_SCRIPTS/global/remove-banner-pve8.sh"
fi
}

View File

@@ -49,7 +49,7 @@
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -194,10 +194,10 @@ apt_upgrade() {
if [[ "$pve_version" -ge 9 ]]; then
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve9_2.sh")
bash "$LOCAL_SCRIPTS/global/update-pve9_2.sh"
else
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve8.sh")
bash "$LOCAL_SCRIPTS/global/update-pve8.sh"
fi
@@ -2902,10 +2902,10 @@ remove_subscription_banner() {
if [[ "$pve_version" -ge 9 ]]; then
bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve-v3.sh")
bash "$LOCAL_SCRIPTS/global/remove-banner-pve-v3.sh"
else
bash <(curl -fsSL "$REPO_URL/scripts/global/remove-banner-pve8.sh")
bash "$LOCAL_SCRIPTS/global/remove-banner-pve8.sh"
fi
}
@@ -4366,4 +4366,3 @@ done
check_extremeshok_warning
main_menu

View File

@@ -20,8 +20,8 @@
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
RETURN_SCRIPT="$REPO_URL/scripts/menus/menu_post_install.sh"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
RETURN_SCRIPT="$LOCAL_SCRIPTS/menus/menu_post_install.sh"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
TOOLS_JSON="$BASE_DIR/installed_tools.json"

View File

@@ -23,7 +23,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -201,8 +201,8 @@ show_main_menu() {
2)
show_ip_info
;;
3) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
*) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
3) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
*) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
esac
done

View File

@@ -11,7 +11,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -10,7 +10,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
@@ -21,8 +21,8 @@ if [[ -f "$UTILS_FILE" ]]; then
fi
SHARE_COMMON_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/global/share-common.func"
if ! source <(curl -s "$SHARE_COMMON_URL" 2>/dev/null); then
SHARE_COMMON_FILE="$LOCAL_SCRIPTS/global/share-common.func"
if ! source "$SHARE_COMMON_FILE" 2>/dev/null; then
SHARE_COMMON_LOADED=false
else
SHARE_COMMON_LOADED=true

View File

@@ -13,7 +13,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
@@ -22,8 +22,8 @@ if [[ -f "$UTILS_FILE" ]]; then
fi
# Load shared functions
SHARE_COMMON_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/global/share-common.func"
if ! source <(curl -s "$SHARE_COMMON_URL" 2>/dev/null); then
SHARE_COMMON_FILE="$LOCAL_SCRIPTS/global/share-common.func"
if ! source "$SHARE_COMMON_FILE" 2>/dev/null; then
msg_error "$(translate "Could not load shared functions. Script cannot continue.")"
exit 1
fi
@@ -684,4 +684,4 @@ while true; do
5) exit 0 ;;
*) exit 0 ;;
esac
done
done

View File

@@ -13,7 +13,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -26,8 +26,8 @@ load_language
initialize_cache
# Load common share functions
SHARE_COMMON_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/global/share-common.func"
if ! source <(curl -s "$SHARE_COMMON_URL" 2>/dev/null); then
SHARE_COMMON_FILE="$LOCAL_SCRIPTS/global/share-common.func"
if ! source "$SHARE_COMMON_FILE" 2>/dev/null; then
msg_warn "$(translate "Could not load shared functions. Using fallback methods.")"
SHARE_COMMON_LOADED=false
else

View File

@@ -13,7 +13,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
@@ -22,8 +22,8 @@ if [[ -f "$UTILS_FILE" ]]; then
fi
# Load shared functions
SHARE_COMMON_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/global/share-common.func"
if ! source <(curl -s "$SHARE_COMMON_URL" 2>/dev/null); then
SHARE_COMMON_FILE="$LOCAL_SCRIPTS/global/share-common.func"
if ! source "$SHARE_COMMON_FILE" 2>/dev/null; then
msg_error "$(translate "Could not load shared functions. Script cannot continue.")"
exit 1
fi

View File

@@ -15,7 +15,7 @@
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -26,8 +26,8 @@ if [[ -f "$UTILS_FILE" ]]; then
fi
SHARE_COMMON_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/global/share-common.func"
if ! source <(curl -s "$SHARE_COMMON_URL" 2>/dev/null); then
SHARE_COMMON_FILE="$LOCAL_SCRIPTS/global/share-common.func"
if ! source "$SHARE_COMMON_FILE" 2>/dev/null; then
msg_error "$(translate "Could not load shared functions. Script cannot continue.")"
exit 1
fi
@@ -1082,4 +1082,4 @@ while true; do
5) exit 0 ;;
*) exit 0 ;;
esac
done
done

View File

@@ -13,7 +13,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
CREDENTIALS_DIR="/etc/samba/credentials"
@@ -26,8 +26,8 @@ load_language
initialize_cache
# Load common share functions
SHARE_COMMON_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/global/share-common.func"
if ! source <(curl -s "$SHARE_COMMON_URL" 2>/dev/null); then
SHARE_COMMON_FILE="$LOCAL_SCRIPTS/global/share-common.func"
if ! source "$SHARE_COMMON_FILE" 2>/dev/null; then
msg_warn "$(translate "Could not load shared functions. Using fallback methods.")"
SHARE_COMMON_LOADED=false
else

View File

@@ -13,7 +13,7 @@
# ==========================================================
# Configuration
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -24,8 +24,8 @@ if [[ -f "$UTILS_FILE" ]]; then
fi
SHARE_COMMON_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main/scripts/global/share-common.func"
if ! source <(curl -s "$SHARE_COMMON_URL" 2>/dev/null); then
SHARE_COMMON_FILE="$LOCAL_SCRIPTS/global/share-common.func"
if ! source "$SHARE_COMMON_FILE" 2>/dev/null; then
msg_error "$(translate "Could not load shared functions. Script cannot continue.")"
exit 1
fi
@@ -573,4 +573,4 @@ while true; do
6) exit 0 ;;
*) exit 0 ;;
esac
done
done

View File

@@ -28,7 +28,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -20,7 +20,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -14,7 +14,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -27,7 +27,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -20,7 +20,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -8,7 +8,7 @@
# Description : Mount a folder from /mnt on the host to a mount point in a CT
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"

View File

@@ -10,7 +10,7 @@
# Last Updated: 13/12/2024
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -11,7 +11,7 @@
# Description : Allows unmounting a previously mounted disk
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"

View File

@@ -2,7 +2,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -20,7 +20,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -28,7 +28,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -14,7 +14,7 @@
# It avoids making changes if the system is already connected to the internet.
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -183,8 +183,8 @@ show_main_menu() {
1) repair_network ;;
2) verify_network ;;
3) show_ip_info ;;
4) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
*) exec bash <(curl -s "$REPO_URL/scripts/menus/main_menu.sh") ;;
4) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
*) exec bash "$LOCAL_SCRIPTS/menus/main_menu.sh" ;;
esac
done
}

View File

@@ -29,7 +29,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -29,7 +29,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -11,7 +11,7 @@
# ==========================================================
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -266,10 +266,10 @@ EOF${CL}" \
read -r
clear
exit 0
#bash <(curl -fsSL "$REPO_URL/scripts/utilities/upgrade_pve8_to_pve9.sh")
#bash "$LOCAL_SCRIPTS/utilities/upgrade_pve8_to_pve9.sh"
}
# Main execution
show_proxmox_upgrade_manual_guide
show_proxmox_upgrade_manual_guide

View File

@@ -57,12 +57,12 @@ apt_upgrade() {
if [[ "$pve_version" -ge 9 ]]; then
show_proxmenux_logo
msg_title "$(translate "$SCRIPT_TITLE")"
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve9_2.sh")
bash "$LOCAL_SCRIPTS/global/update-pve9_2.sh"
else
show_proxmenux_logo
msg_title "$(translate "Proxmox system update")"
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve8.sh")
bash "$LOCAL_SCRIPTS/global/update-pve8.sh"
fi

View File

@@ -9,7 +9,7 @@
# Last Updated: 14/08/2025
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"

View File

@@ -35,7 +35,7 @@
#
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -9,7 +9,7 @@
# Last Updated: 14/08/2025
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
@@ -49,21 +49,21 @@ done
run_manual_guide() {
local url="$REPO_URL/scripts/utilities/proxmox-upgrade-pve8-to-pve9-manual-guide.sh"
if command -v curl >/dev/null 2>&1; then
bash <(curl -fsSL "$url")
else
bash <(wget -qO- "$url")
local SCRIPT_FILE="$LOCAL_SCRIPTS/utilities/proxmox-upgrade-pve8-to-pve9-manual-guide.sh"
if [[ ! -f "$SCRIPT_FILE" ]]; then
msg_error "$(translate "Manual guide script not found")"
return 1
fi
bash "$SCRIPT_FILE"
}
run_pve8to9_check() {
local url="$REPO_URL/scripts/utilities/pve8to9_check.sh"
if command -v curl >/dev/null 2>&1; then
bash <(curl -fsSL "$url")
else
bash <(wget -qO- "$url")
local SCRIPT_FILE="$LOCAL_SCRIPTS/utilities/pve8to9_check.sh"
if [[ ! -f "$SCRIPT_FILE" ]]; then
msg_error "$(translate "Check script not found")"
return 1
fi
bash "$SCRIPT_FILE"
}
ask_run_mode() {
@@ -564,7 +564,7 @@ apt_upgrade() {
exit 1
else
bash <(curl -fsSL "$REPO_URL/scripts/global/update-pve8.sh")
bash "$LOCAL_SCRIPTS/global/update-pve8.sh"
hash -r
fi

View File

@@ -34,7 +34,7 @@
# ==========================================================
# Repository and directory structure
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
INSTALL_DIR="/usr/local/bin"
BASE_DIR="/usr/local/share/proxmenux"
CONFIG_FILE="$BASE_DIR/config.json"
@@ -133,7 +133,7 @@ msg_info() {
# Display info2 message
msg_info2() {
local msg="$1"
echo -e "${TAB}${BOLD}${YW}${HOLD}${msg}${CL}"
echo -e "${TAB}${BOLD}${YW}${HOLD} ${msg}${CL}"
}
# Display info message with spinner

View File

@@ -26,10 +26,10 @@
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
VM_REPO="$REPO_URL/scripts/vm"
ISO_REPO="$REPO_URL/scripts/vm"
MENU_REPO="$REPO_URL/scripts/menus"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
VM_REPO="$LOCAL_SCRIPTS/vm"
ISO_REPO="$LOCAL_SCRIPTS/vm"
MENU_REPO="$LOCAL_SCRIPTS/menus"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -37,9 +37,9 @@ VENV_PATH="/opt/googletrans-env"
[[ -f "$UTILS_FILE" ]] && source "$UTILS_FILE"
source <(curl -s "$VM_REPO/vm_configurator.sh")
source <(curl -s "$VM_REPO/disk_selector.sh")
source <(curl -s "$VM_REPO/vm_creator.sh")
source "$VM_REPO/vm_configurator.sh"
source "$VM_REPO/disk_selector.sh"
source "$VM_REPO/vm_creator.sh"
@@ -108,17 +108,17 @@ while true; do
3>&1 1>&2 2>&3)
[[ $? -ne 0 || "$OS_TYPE" == "5" ]] && exec bash <(curl -s "$MENU_REPO/main_menu.sh")
[[ $? -ne 0 || "$OS_TYPE" == "5" ]] && exec bash "$MENU_REPO/main_menu.sh"
case "$OS_TYPE" in
1)
source <(curl -fsSL "$ISO_REPO/select_nas_iso.sh") && select_nas_iso || continue
source "$ISO_REPO/select_nas_iso.sh" && select_nas_iso || continue
;;
2)
source <(curl -fsSL "$ISO_REPO/select_windows_iso.sh") && select_windows_iso || continue
source "$ISO_REPO/select_windows_iso.sh" && select_windows_iso || continue
;;
3)
source <(curl -fsSL "$ISO_REPO/select_linux_iso.sh") && select_linux_iso || continue
source "$ISO_REPO/select_linux_iso.sh" && select_linux_iso || continue
;;
4)
whiptail --title "OSX-PROXMOX" --yesno "$(translate "This is an external script that creates a macOS VM in Proxmox VE in just a few steps, whether you are using AMD or Intel hardware.")\n\n$(translate "The script clones the osx-proxmox.com repository and once the setup is complete, the server will automatically reboot.")\n\n$(translate "Make sure there are no critical services running as they will be interrupted. Ensure your server can be safely rebooted.")\n\n$(translate "Visit https://osx-proxmox.com for more information.")\n\n$(translate "Do you want to run the script now?")" 20 70
@@ -128,7 +128,7 @@ while true; do
continue
;;
5)
source <(curl -fsSL "$ISO_REPO/select_linux_iso.sh") && select_linux_other_scripts || continue
source "$ISO_REPO/select_linux_iso.sh" && select_linux_other_scripts || continue
;;
esac
@@ -173,4 +173,3 @@ function start_vm_configuration() {
configure_vm_advanced "$OS_TYPE"
fi
}

View File

@@ -25,7 +25,7 @@
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -219,7 +219,7 @@ function select_linux_cloudinit() {
whiptail --title "Proxmox VE Helper-Scripts" \
--msgbox "$(translate "Visit the website to discover more scripts, stay updated with the latest updates, and support the project:\n\nhttps://community-scripts.github.io/ProxmoxVE")" 15 70
exec bash <(curl -s "$REPO_URL/scripts/vm/create_vm.sh")
exec bash "$LOCAL_SCRIPTS/vm/create_vm.sh"
}

View File

@@ -28,7 +28,7 @@
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
[[ -f "$UTILS_FILE" ]] && source "$UTILS_FILE"
load_language
@@ -62,7 +62,7 @@ function select_nas_iso() {
case "$NAS_TYPE" in
1)
bash <(curl -s "$REPO_URL/scripts/vm/synology.sh")
bash "$LOCAL_SCRIPTS/vm/synology.sh"
msg_success "$(translate "Press Enter to return to menu...")"
read -r
return 1
@@ -103,7 +103,7 @@ function select_nas_iso() {
HN="Rockstor"
;;
7)
bash <(curl -s "$REPO_URL/scripts/vm/zimaos.sh")
bash "$LOCAL_SCRIPTS/vm/zimaos.sh"
msg_success "$(translate "Press Enter to return to menu...")"
read -r
return 1

View File

@@ -24,8 +24,8 @@
# consistent and maintainable way, using ProxMenux standards.
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
UUP_REPO="$REPO_URL/scripts/vm"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
UUP_REPO="$LOCAL_SCRIPTS/vm"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -79,7 +79,7 @@ function select_windows_iso() {
case "$CHOICE" in
1)
if source <(curl -fsSL "$UUP_REPO/uupdump_creator.sh"); then
if source "$UUP_REPO/uupdump_creator.sh"; then
run_uupdump_creator || return 1
detect_latest_iso_created || return 1
EXIT_FLAG="yes"

View File

@@ -29,7 +29,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -29,7 +29,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"

View File

@@ -24,7 +24,7 @@
# consistent and maintainable way, using ProxMenux standards.
# ==========================================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"
@@ -494,7 +494,7 @@ fi
msg_success "$(translate "Press Enter to return to the main menu...")"
read -r
bash <(curl -fsSL "$REPO_URL/scripts/menus/create_vm_menu.sh")
bash "$LOCAL_SCRIPTS/menus/create_vm_menu.sh"
exit 0
}

View File

@@ -22,7 +22,7 @@
# Configuration ============================================
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
LOCAL_SCRIPTS="/usr/local/share/proxmenux/scripts"
BASE_DIR="/usr/local/share/proxmenux"
UTILS_FILE="$BASE_DIR/utils.sh"
VENV_PATH="/opt/googletrans-env"