
---

# **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.